blucon in new bt

This commit is contained in:
Johan Degraeve 2020-03-31 23:46:43 +02:00
parent cb580884c1
commit 0a78b09b7b
13 changed files with 649 additions and 56 deletions

View File

@ -28,6 +28,35 @@
F80ED2EC236F68F90005C035 /* SettingsViewM5StackBluetoothSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80ED2E9236F68F90005C035 /* SettingsViewM5StackBluetoothSettingsViewModel.swift */; };
F80ED2ED236F68F90005C035 /* SettingsViewM5StackGeneralSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80ED2EA236F68F90005C035 /* SettingsViewM5StackGeneralSettingsViewModel.swift */; };
F80ED2EE236F68F90005C035 /* SettingsViewM5StackWiFiSettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80ED2EB236F68F90005C035 /* SettingsViewM5StackWiFiSettingsViewModel.swift */; };
F816E0E22432A4D1009EE65B /* Blucon+BluetoothPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0E12432A4D1009EE65B /* Blucon+BluetoothPeripheral.swift */; };
F816E0E42432A4FA009EE65B /* CGMBluconTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0E32432A4FA009EE65B /* CGMBluconTransmitterDelegate.swift */; };
F816E0ED2432A55F009EE65B /* BluconBluetoothPeripheralViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0EC2432A55F009EE65B /* BluconBluetoothPeripheralViewModel.swift */; };
F816E0F02433C31B009EE65B /* Blucon+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0EE2433C31B009EE65B /* Blucon+CoreDataProperties.swift */; };
F816E0F12433C31B009EE65B /* Blucon+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0EF2433C31B009EE65B /* Blucon+CoreDataClass.swift */; };
F816E0F32433DAA9009EE65B /* BluetoothPeripheralManager+CGMBluconTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0F22433DAA9009EE65B /* BluetoothPeripheralManager+CGMBluconTransmitterDelegate.swift */; };
F816E0F524367132009EE65B /* GNSEntry+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0F424367131009EE65B /* GNSEntry+CoreDataProperties.swift */; };
F816E0F724367137009EE65B /* GNSEntry+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0F624367137009EE65B /* GNSEntry+CoreDataClass.swift */; };
F816E0FE24367338009EE65B /* GNSEntry+BluetoothPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0FD24367338009EE65B /* GNSEntry+BluetoothPeripheral.swift */; };
F816E1002436734C009EE65B /* CGMGNSEntryTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E0FF2436734C009EE65B /* CGMGNSEntryTransmitterDelegate.swift */; };
F816E10324367389009EE65B /* GNSEntryBluetoothPeripheralViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E10224367389009EE65B /* GNSEntryBluetoothPeripheralViewModel.swift */; };
F816E10524368BC3009EE65B /* BluetoothPeripheralManager+CGMGNSEntryTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E10424368BC3009EE65B /* BluetoothPeripheralManager+CGMGNSEntryTransmitterDelegate.swift */; };
F816E1082437E5B9009EE65B /* BlueReader+BluetoothPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E1072437E5B9009EE65B /* BlueReader+BluetoothPeripheral.swift */; };
F816E10A2437E7B8009EE65B /* CGMBlueReaderTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E1092437E7B8009EE65B /* CGMBlueReaderTransmitterDelegate.swift */; };
F816E10C2437EA8E009EE65B /* BlueReader+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E10B2437EA8E009EE65B /* BlueReader+CoreDataClass.swift */; };
F816E10E2437EAC9009EE65B /* BlueReader+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E10D2437EAC9009EE65B /* BlueReader+CoreDataProperties.swift */; };
F816E1102437ED21009EE65B /* BluetoothPeripheralManager+CGMBlueReaderTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E10F2437ED21009EE65B /* BluetoothPeripheralManager+CGMBlueReaderTransmitterDelegate.swift */; };
F816E11624391A02009EE65B /* Droplet+BluetoothPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E11524391A02009EE65B /* Droplet+BluetoothPeripheral.swift */; };
F816E118243921FB009EE65B /* CGMBDropletTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E117243921FB009EE65B /* CGMBDropletTransmitterDelegate.swift */; };
F816E11A243923B2009EE65B /* Droplet+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E119243923B2009EE65B /* Droplet+CoreDataClass.swift */; };
F816E11C2439243B009EE65B /* Droplet+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E11B2439243B009EE65B /* Droplet+CoreDataProperties.swift */; };
F816E11E24392690009EE65B /* BluetoothPeripheralManager+CGMDropletTransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E11D24392690009EE65B /* BluetoothPeripheralManager+CGMDropletTransmitterDelegate.swift */; };
F816E12124392D40009EE65B /* DropletBluetoothPeripheralViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E12024392D40009EE65B /* DropletBluetoothPeripheralViewModel.swift */; };
F816E1242439DB63009EE65B /* DexcomG4+BluetoothPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E1232439DB63009EE65B /* DexcomG4+BluetoothPeripheral.swift */; };
F816E1282439DE55009EE65B /* CGMDexomG4TransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E1272439DE55009EE65B /* CGMDexomG4TransmitterDelegate.swift */; };
F816E12A2439DF3A009EE65B /* DexcomG4+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E1292439DF3A009EE65B /* DexcomG4+CoreDataClass.swift */; };
F816E12C2439DFBA009EE65B /* DexcomG4+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E12B2439DFBA009EE65B /* DexcomG4+CoreDataProperties.swift */; };
F816E12E2439E06E009EE65B /* BluetoothPeripheralManager+CGMDexcomG4TransmitterDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E12D2439E06E009EE65B /* BluetoothPeripheralManager+CGMDexcomG4TransmitterDelegate.swift */; };
F816E1312439E2DD009EE65B /* DexcomG4BluetoothPeripheralViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F816E1302439E2DD009EE65B /* DexcomG4BluetoothPeripheralViewModel.swift */; };
F81D6D4822BD5F62005EFAE2 /* DexcomShareUploadManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81D6D4722BD5F62005EFAE2 /* DexcomShareUploadManager.swift */; };
F81D6D4E22BFC762005EFAE2 /* TextsDexcomShareTestResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81D6D4D22BFC762005EFAE2 /* TextsDexcomShareTestResult.swift */; };
F81D6D5222C27F18005EFAE2 /* BgReading+DexcomShare.swift in Sources */ = {isa = PBXBuildFile; fileRef = F81D6D5122C27F18005EFAE2 /* BgReading+DexcomShare.swift */; };
@ -287,21 +316,6 @@
/* Begin PBXFileReference section */
148E05A6AF0290AE5815B0F9 /* Pods-xdrip.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-xdrip.debug.xcconfig"; path = "Target Support Files/Pods-xdrip/Pods-xdrip.debug.xcconfig"; sourceTree = "<group>"; };
2863879623FC7115000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/LaunchScreen.strings"; sourceTree = "<group>"; };
2863879723FC7117000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/Main.strings"; sourceTree = "<group>"; };
2863879823FC7118000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/Alerts.strings"; sourceTree = "<group>"; };
2863879923FC7118000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/AlertTypesSettingsView.strings"; sourceTree = "<group>"; };
2863879A23FC7119000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/CalibrationRequest.strings"; sourceTree = "<group>"; };
2863879B23FC711A000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/Common.strings"; sourceTree = "<group>"; };
2863879C23FC711B000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/DexcomShareTestResult.strings"; sourceTree = "<group>"; };
2863879D23FC711B000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/DexcomShareTestResults.strings"; sourceTree = "<group>"; };
2863879E23FC711C000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/ErrorMessages.strings"; sourceTree = "<group>"; };
2863879F23FC711C000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/HomeView.strings"; sourceTree = "<group>"; };
286387A023FC711D000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/Localizable.strings"; sourceTree = "<group>"; };
286387A123FC711E000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/M5StackView.strings"; sourceTree = "<group>"; };
286387A223FC711E000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/NightScoutTestResult.strings"; sourceTree = "<group>"; };
286387A323FC711F000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/SettingsViews.strings"; sourceTree = "<group>"; };
286387A423FC711F000D00B8 /* fi-FI */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "fi-FI"; path = "fi-FI.lproj/SpeakReading.strings"; sourceTree = "<group>"; };
662BEA7F7991B9BD2E7D3EA4 /* Pods_xdrip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_xdrip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E2648F65F347D56D7DFFFAB7 /* Pods-xdrip.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-xdrip.release.xcconfig"; path = "Target Support Files/Pods-xdrip/Pods-xdrip.release.xcconfig"; sourceTree = "<group>"; };
F8025C0921D94FD700ECF0C0 /* CBManagerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CBManagerState.swift; sourceTree = "<group>"; };
@ -324,6 +338,35 @@
F80ED2E9236F68F90005C035 /* SettingsViewM5StackBluetoothSettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewM5StackBluetoothSettingsViewModel.swift; sourceTree = "<group>"; };
F80ED2EA236F68F90005C035 /* SettingsViewM5StackGeneralSettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewM5StackGeneralSettingsViewModel.swift; sourceTree = "<group>"; };
F80ED2EB236F68F90005C035 /* SettingsViewM5StackWiFiSettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewM5StackWiFiSettingsViewModel.swift; sourceTree = "<group>"; };
F816E0E12432A4D1009EE65B /* Blucon+BluetoothPeripheral.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Blucon+BluetoothPeripheral.swift"; sourceTree = "<group>"; };
F816E0E32432A4FA009EE65B /* CGMBluconTransmitterDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGMBluconTransmitterDelegate.swift; sourceTree = "<group>"; };
F816E0EC2432A55F009EE65B /* BluconBluetoothPeripheralViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BluconBluetoothPeripheralViewModel.swift; sourceTree = "<group>"; };
F816E0EE2433C31B009EE65B /* Blucon+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Blucon+CoreDataProperties.swift"; sourceTree = "<group>"; };
F816E0EF2433C31B009EE65B /* Blucon+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Blucon+CoreDataClass.swift"; sourceTree = "<group>"; };
F816E0F22433DAA9009EE65B /* BluetoothPeripheralManager+CGMBluconTransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BluetoothPeripheralManager+CGMBluconTransmitterDelegate.swift"; sourceTree = "<group>"; };
F816E0F424367131009EE65B /* GNSEntry+CoreDataProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "GNSEntry+CoreDataProperties.swift"; sourceTree = "<group>"; };
F816E0F624367137009EE65B /* GNSEntry+CoreDataClass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "GNSEntry+CoreDataClass.swift"; sourceTree = "<group>"; };
F816E0FD24367338009EE65B /* GNSEntry+BluetoothPeripheral.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "GNSEntry+BluetoothPeripheral.swift"; sourceTree = "<group>"; };
F816E0FF2436734C009EE65B /* CGMGNSEntryTransmitterDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CGMGNSEntryTransmitterDelegate.swift; sourceTree = "<group>"; };
F816E10224367389009EE65B /* GNSEntryBluetoothPeripheralViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GNSEntryBluetoothPeripheralViewModel.swift; sourceTree = "<group>"; };
F816E10424368BC3009EE65B /* BluetoothPeripheralManager+CGMGNSEntryTransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BluetoothPeripheralManager+CGMGNSEntryTransmitterDelegate.swift"; sourceTree = "<group>"; };
F816E1072437E5B9009EE65B /* BlueReader+BluetoothPeripheral.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlueReader+BluetoothPeripheral.swift"; sourceTree = "<group>"; };
F816E1092437E7B8009EE65B /* CGMBlueReaderTransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMBlueReaderTransmitterDelegate.swift; sourceTree = "<group>"; };
F816E10B2437EA8E009EE65B /* BlueReader+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlueReader+CoreDataClass.swift"; sourceTree = "<group>"; };
F816E10D2437EAC9009EE65B /* BlueReader+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlueReader+CoreDataProperties.swift"; sourceTree = "<group>"; };
F816E10F2437ED21009EE65B /* BluetoothPeripheralManager+CGMBlueReaderTransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BluetoothPeripheralManager+CGMBlueReaderTransmitterDelegate.swift"; sourceTree = "<group>"; };
F816E11524391A02009EE65B /* Droplet+BluetoothPeripheral.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Droplet+BluetoothPeripheral.swift"; sourceTree = "<group>"; };
F816E117243921FB009EE65B /* CGMBDropletTransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMBDropletTransmitterDelegate.swift; sourceTree = "<group>"; };
F816E119243923B2009EE65B /* Droplet+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Droplet+CoreDataClass.swift"; sourceTree = "<group>"; };
F816E11B2439243B009EE65B /* Droplet+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Droplet+CoreDataProperties.swift"; sourceTree = "<group>"; };
F816E11D24392690009EE65B /* BluetoothPeripheralManager+CGMDropletTransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BluetoothPeripheralManager+CGMDropletTransmitterDelegate.swift"; sourceTree = "<group>"; };
F816E12024392D40009EE65B /* DropletBluetoothPeripheralViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropletBluetoothPeripheralViewModel.swift; sourceTree = "<group>"; };
F816E1232439DB63009EE65B /* DexcomG4+BluetoothPeripheral.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DexcomG4+BluetoothPeripheral.swift"; sourceTree = "<group>"; };
F816E1272439DE55009EE65B /* CGMDexomG4TransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGMDexomG4TransmitterDelegate.swift; sourceTree = "<group>"; };
F816E1292439DF3A009EE65B /* DexcomG4+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DexcomG4+CoreDataClass.swift"; sourceTree = "<group>"; };
F816E12B2439DFBA009EE65B /* DexcomG4+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DexcomG4+CoreDataProperties.swift"; sourceTree = "<group>"; };
F816E12D2439E06E009EE65B /* BluetoothPeripheralManager+CGMDexcomG4TransmitterDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BluetoothPeripheralManager+CGMDexcomG4TransmitterDelegate.swift"; sourceTree = "<group>"; };
F816E1302439E2DD009EE65B /* DexcomG4BluetoothPeripheralViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DexcomG4BluetoothPeripheralViewModel.swift; sourceTree = "<group>"; };
F81D6D4522B67F55005EFAE2 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/SpeakReading.strings; sourceTree = "<group>"; };
F81D6D4722BD5F62005EFAE2 /* DexcomShareUploadManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DexcomShareUploadManager.swift; sourceTree = "<group>"; };
F81D6D4D22BFC762005EFAE2 /* TextsDexcomShareTestResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextsDexcomShareTestResult.swift; sourceTree = "<group>"; };
@ -844,6 +887,10 @@
F808D2C3240323750084B5DB /* Libre */ = {
isa = PBXGroup;
children = (
F816E11F24392D27009EE65B /* Droplet */,
F816E1112438A72C009EE65B /* BlueReader */,
F816E10124367389009EE65B /* GNSENtry */,
F816E0EB2432A55F009EE65B /* Blucon */,
F8C9784E242A9FD500A09483 /* MiaoMiao */,
F808D2C6240323AE0084B5DB /* Bubble */,
);
@ -861,6 +908,10 @@
F808D2CF240329D40084B5DB /* Libre */ = {
isa = PBXGroup;
children = (
F816E114243919ED009EE65B /* Droplet */,
F816E1062437E58E009EE65B /* BlueReader */,
F816E0FC24367338009EE65B /* GNSEntry */,
F816E0E02432A4D1009EE65B /* Blucon */,
F8C97857242AAE7A00A09483 /* MiaoMiao */,
F808D2D0240329D40084B5DB /* Bubble */,
);
@ -885,6 +936,85 @@
path = M5StackSettingsViewModels;
sourceTree = "<group>";
};
F816E0E02432A4D1009EE65B /* Blucon */ = {
isa = PBXGroup;
children = (
F816E0E12432A4D1009EE65B /* Blucon+BluetoothPeripheral.swift */,
);
path = Blucon;
sourceTree = "<group>";
};
F816E0EB2432A55F009EE65B /* Blucon */ = {
isa = PBXGroup;
children = (
F816E0EC2432A55F009EE65B /* BluconBluetoothPeripheralViewModel.swift */,
);
path = Blucon;
sourceTree = "<group>";
};
F816E0FC24367338009EE65B /* GNSEntry */ = {
isa = PBXGroup;
children = (
F816E0FD24367338009EE65B /* GNSEntry+BluetoothPeripheral.swift */,
);
path = GNSEntry;
sourceTree = "<group>";
};
F816E10124367389009EE65B /* GNSENtry */ = {
isa = PBXGroup;
children = (
F816E10224367389009EE65B /* GNSEntryBluetoothPeripheralViewModel.swift */,
);
path = GNSENtry;
sourceTree = "<group>";
};
F816E1062437E58E009EE65B /* BlueReader */ = {
isa = PBXGroup;
children = (
F816E1072437E5B9009EE65B /* BlueReader+BluetoothPeripheral.swift */,
);
path = BlueReader;
sourceTree = "<group>";
};
F816E1112438A72C009EE65B /* BlueReader */ = {
isa = PBXGroup;
children = (
);
path = BlueReader;
sourceTree = "<group>";
};
F816E114243919ED009EE65B /* Droplet */ = {
isa = PBXGroup;
children = (
F816E11524391A02009EE65B /* Droplet+BluetoothPeripheral.swift */,
);
path = Droplet;
sourceTree = "<group>";
};
F816E11F24392D27009EE65B /* Droplet */ = {
isa = PBXGroup;
children = (
F816E12024392D40009EE65B /* DropletBluetoothPeripheralViewModel.swift */,
);
path = Droplet;
sourceTree = "<group>";
};
F816E1222439DB42009EE65B /* G4 */ = {
isa = PBXGroup;
children = (
F816E1232439DB63009EE65B /* DexcomG4+BluetoothPeripheral.swift */,
);
path = G4;
sourceTree = "<group>";
};
F816E12F2439E2A0009EE65B /* DexcomG4 */ = {
isa = PBXGroup;
children = (
F816E1302439E2DD009EE65B /* DexcomG4BluetoothPeripheralViewModel.swift */,
);
path = DexcomG4;
sourceTree = "<group>";
};
F81D6D4622BD5F43005EFAE2 /* DexcomShare */ = {
isa = PBXGroup;
children = (
@ -970,14 +1100,19 @@
F8297F42238DC4AC00D74D66 /* BluetoothPeripheral */ = {
isa = PBXGroup;
children = (
F8C9785A242ABD9800A09483 /* BluetoothPeripheralManager+CGMMiaoMiaoTransmitterDelegate.swift */,
F8297F55238ED07700D74D66 /* BluetoothPeripheralManager.swift */,
F897E24E23FC871C0075E0E8 /* BluetoothPeripheralManager+BluetoothTransmitterDelegate.swift */,
F816E0F22433DAA9009EE65B /* BluetoothPeripheralManager+CGMBluconTransmitterDelegate.swift */,
F816E10F2437ED21009EE65B /* BluetoothPeripheralManager+CGMBlueReaderTransmitterDelegate.swift */,
F878FA7C2405B3CF00BC6DA6 /* BluetoothPeripheralManager+CGMBubbleTransmitterDelegate.swift */,
F816E11D24392690009EE65B /* BluetoothPeripheralManager+CGMDropletTransmitterDelegate.swift */,
F897E24C23FC871C0075E0E8 /* BluetoothPeripheralManager+CGMG5TransmitterDelegate.swift */,
F816E10424368BC3009EE65B /* BluetoothPeripheralManager+CGMGNSEntryTransmitterDelegate.swift */,
F8C9785A242ABD9800A09483 /* BluetoothPeripheralManager+CGMMiaoMiaoTransmitterDelegate.swift */,
F897E24D23FC871C0075E0E8 /* BluetoothPeripheralManager+M5StackBluetoothTransmitterDelegate.swift */,
F897E24F23FC871C0075E0E8 /* BluetoothPeripheralManager+WatlaaBluetoothTransmitterDelegate.swift */,
F8297F44238DC4AC00D74D66 /* BluetoothPeripheralManaging.swift */,
F816E12D2439E06E009EE65B /* BluetoothPeripheralManager+CGMDexcomG4TransmitterDelegate.swift */,
);
path = BluetoothPeripheral;
sourceTree = "<group>";
@ -1220,8 +1355,6 @@
F8B3A817227DEC91004BA588 /* CalibrationsAccessor.swift */,
F8B3A819227DEC92004BA588 /* README.md */,
F8B3A815227DEC91004BA588 /* SensorsAccessor.swift */,
F8F6226F233AA3B200BE8796 /* M5StackAccessor.swift */,
F830992B23C694F4005741DF /* WatlaaAccessor.swift */,
F8DF766323E781C100063910 /* BLEPeripheralAccessor.swift */,
);
path = accessors;
@ -1376,6 +1509,7 @@
F8DF765923E350B100063910 /* Dexcom */ = {
isa = PBXGroup;
children = (
F816E1222439DB42009EE65B /* G4 */,
F8DF765A23E350B100063910 /* G5 */,
);
path = Dexcom;
@ -1401,6 +1535,7 @@
F8DF766A23ED9AF100063910 /* Dexcom */ = {
isa = PBXGroup;
children = (
F816E12F2439E2A0009EE65B /* DexcomG4 */,
F8DF766B23ED9AF100063910 /* DexcomG5 */,
);
path = Dexcom;
@ -1476,12 +1611,22 @@
F85DC2E721CFE2F500B9F74A /* BgReading+CoreDataProperties.swift */,
F8DF765F23E38FC100063910 /* BLEPeripheral+CoreDataClass.swift */,
F8DF766123E390D100063910 /* BLEPeripheral+CoreDataProperties.swift */,
F816E0EF2433C31B009EE65B /* Blucon+CoreDataClass.swift */,
F816E0EE2433C31B009EE65B /* Blucon+CoreDataProperties.swift */,
F816E10B2437EA8E009EE65B /* BlueReader+CoreDataClass.swift */,
F816E10D2437EAC9009EE65B /* BlueReader+CoreDataProperties.swift */,
F808D2CB240328FA0084B5DB /* Bubble+CoreDataClass.swift */,
F808D2CD2403292C0084B5DB /* Bubble+CoreDataProperties.swift */,
F85DC2F021CFE3D400B9F74A /* Calibration+CoreDataClass.swift */,
F867E25D2252ADAB000FD265 /* Calibration+CoreDataProperties.swift */,
F816E1292439DF3A009EE65B /* DexcomG4+CoreDataClass.swift */,
F816E12B2439DFBA009EE65B /* DexcomG4+CoreDataProperties.swift */,
F8DF765223E34F4500063910 /* DexcomG5+CoreDataClass.swift */,
F8DF765423E34FD500063910 /* DexcomG5+CoreDataProperties.swift */,
F816E119243923B2009EE65B /* Droplet+CoreDataClass.swift */,
F816E11B2439243B009EE65B /* Droplet+CoreDataProperties.swift */,
F816E0F624367137009EE65B /* GNSEntry+CoreDataClass.swift */,
F816E0F424367131009EE65B /* GNSEntry+CoreDataProperties.swift */,
F804870A2336D90200EBDDB7 /* M5Stack+CoreDataClass.swift */,
F804870B2336D90200EBDDB7 /* M5Stack+CoreDataProperties.swift */,
F8C97851242AA70C00A09483 /* MiaoMiao+CoreDataClass.swift */,
@ -1640,6 +1785,7 @@
isa = PBXGroup;
children = (
F8F971D523A5915900C3F17D /* CGMG4xDripTransmitter.swift */,
F816E1272439DE55009EE65B /* CGMDexomG4TransmitterDelegate.swift */,
);
path = G4;
sourceTree = "<group>";
@ -1662,6 +1808,7 @@
isa = PBXGroup;
children = (
F8F971D823A5915900C3F17D /* CGMDroplet1Transmitter.swift */,
F816E117243921FB009EE65B /* CGMBDropletTransmitterDelegate.swift */,
);
path = Droplet;
sourceTree = "<group>";
@ -1670,6 +1817,7 @@
isa = PBXGroup;
children = (
F8F971DA23A5915900C3F17D /* CGMBlueReaderTransmitter.swift */,
F816E1092437E7B8009EE65B /* CGMBlueReaderTransmitterDelegate.swift */,
);
path = BlueReader;
sourceTree = "<group>";
@ -1677,6 +1825,7 @@
F8F971DB23A5915900C3F17D /* GNSEntry */ = {
isa = PBXGroup;
children = (
F816E0FF2436734C009EE65B /* CGMGNSEntryTransmitterDelegate.swift */,
F8F971DC23A5915900C3F17D /* CGMGNSEntryTransmitter.swift */,
);
path = GNSEntry;
@ -1720,6 +1869,7 @@
F8F971EC23A5915900C3F17D /* Blucon */ = {
isa = PBXGroup;
children = (
F816E0E32432A4FA009EE65B /* CGMBluconTransmitterDelegate.swift */,
F8F971ED23A5915900C3F17D /* BluconTransmitterOpCode.swift */,
F8F971EE23A5915900C3F17D /* CGMBluconTransmitter.swift */,
F8F971EF23A5915900C3F17D /* BluconUtilities.swift */,
@ -1781,6 +1931,7 @@
F8F9723623A5928D00C3F17D /* Models */ = {
isa = PBXGroup;
children = (
F8DF766923ED9AF100063910 /* CGM */,
F830992423C32226005741DF /* watlaa */,
F8F9723A23A5934300C3F17D /* M5StickC */,
F8F9723723A5928D00C3F17D /* M5Stack */,
@ -1870,7 +2021,6 @@
zh,
pt,
de,
"fi-FI",
);
mainGroup = F8AC425121ADEBD60078C348;
productRefGroup = F8AC425B21ADEBD60078C348 /* Products */;
@ -1996,27 +2146,36 @@
F8BDD450221CAA64006EAB84 /* TextsCommon.swift in Sources */,
F81D6D4E22BFC762005EFAE2 /* TextsDexcomShareTestResult.swift in Sources */,
F8F9720523A5915900C3F17D /* TransmitterMessage.swift in Sources */,
F816E1282439DE55009EE65B /* CGMDexomG4TransmitterDelegate.swift in Sources */,
F8EA6C8221B723BC0082976B /* Date.swift in Sources */,
F8E3A2A523D78FBD00E5E98A /* SettingsViewAppleWatchSettingsViewModel.swift in Sources */,
F81FA006228E09D40028C70F /* TextsCalibration.swift in Sources */,
F816E0F724367137009EE65B /* GNSEntry+CoreDataClass.swift in Sources */,
F8F9721923A5915900C3F17D /* CGMGNSEntryTransmitter.swift in Sources */,
F8B3A84A227F090E004BA588 /* SettingsViewGeneralSettingsViewModel.swift in Sources */,
F83098FE23AD3F84005741DF /* UITabBarController.swift in Sources */,
F816E11A243923B2009EE65B /* Droplet+CoreDataClass.swift in Sources */,
F816E1102437ED21009EE65B /* BluetoothPeripheralManager+CGMBlueReaderTransmitterDelegate.swift in Sources */,
F8B3A85B2280CCD1004BA588 /* AlertSettingsViewController.swift in Sources */,
F8F9722E23A5915900C3F17D /* M5StackTransmitterOpCode.swift in Sources */,
F8F9720223A5915900C3F17D /* CGMG6Transmitter.swift in Sources */,
F816E0E22432A4D1009EE65B /* Blucon+BluetoothPeripheral.swift in Sources */,
F897E24B23FC86CF0075E0E8 /* CGMG5TransmitterDelegate.swift in Sources */,
F816E0F12433C31B009EE65B /* Blucon+CoreDataClass.swift in Sources */,
F8F9723323A5915900C3F17D /* M5StackBluetoothTransmitterDelegate.swift in Sources */,
F8B3A81B227DEC92004BA588 /* SensorsAccessor.swift in Sources */,
F8F9721E23A5915900C3F17D /* LibreSensorState.swift in Sources */,
F8B3A85D22821BB6004BA588 /* Int.swift in Sources */,
F808D2CE2403292C0084B5DB /* Bubble+CoreDataProperties.swift in Sources */,
F816E1002436734C009EE65B /* CGMGNSEntryTransmitterDelegate.swift in Sources */,
F8C97853242AA70D00A09483 /* MiaoMiao+CoreDataClass.swift in Sources */,
F8F9720D23A5915900C3F17D /* ResetMessage.swift in Sources */,
F8C97856242AA86B00A09483 /* CGMMiaoMiaoTransmitterDelegate.swift in Sources */,
F898EDF6234A8A5700BFB79B /* UInt32.swift in Sources */,
F816E0F32433DAA9009EE65B /* BluetoothPeripheralManager+CGMBluconTransmitterDelegate.swift in Sources */,
F8F9723223A5915900C3F17D /* M5StackReadBlePassWordTxMessage.swift in Sources */,
F8A54AAF22D686CD00934E7A /* NightScoutBgReading.swift in Sources */,
F8DF765323E34F4500063910 /* DexcomG5+CoreDataClass.swift in Sources */,
F8F9720F23A5915900C3F17D /* NSData+CRC.swift in Sources */,
F8A1585722EDB754007F5B5D /* ConstantsCoreData.swift in Sources */,
F821CF9022AB1068005C1E43 /* DatePickerViewData.swift in Sources */,
@ -2029,6 +2188,7 @@
F8BDD43F221B5BAF006EAB84 /* TextsErrorMessages.swift in Sources */,
F8B3A7FA2278E0E8004BA588 /* SettingsViewModelProtocol.swift in Sources */,
F85DC2F521CFE3D400B9F74A /* BgReading+CoreDataClass.swift in Sources */,
F816E11C2439243B009EE65B /* Droplet+CoreDataProperties.swift in Sources */,
F821CF56229BF43A005C1E43 /* AlertKind.swift in Sources */,
F85DC2ED21CFE2F500B9F74A /* BgReading+CoreDataProperties.swift in Sources */,
F8F9723123A5915900C3F17D /* M5StackAuthenticateTXMessage.swift in Sources */,
@ -2093,15 +2253,19 @@
F80ED2EC236F68F90005C035 /* SettingsViewM5StackBluetoothSettingsViewModel.swift in Sources */,
F8BECB05235CE5D80060DAE1 /* GlucoseChartManager.swift in Sources */,
F8C97850242A9FD500A09483 /* MiaoMiaoBluetoothPeripheralViewModel.swift in Sources */,
F816E10E2437EAC9009EE65B /* BlueReader+CoreDataProperties.swift in Sources */,
F8F9722523A5915900C3F17D /* LibreRawGlucoseData.swift in Sources */,
F8B3A830227F085A004BA588 /* SettingsTableViewCell.swift in Sources */,
F830991C23C2909E005741DF /* Watlaa+CoreDataClass.swift in Sources */,
F808D2CC240328FA0084B5DB /* Bubble+CoreDataClass.swift in Sources */,
F8A1586122EDB844007F5B5D /* ConstantsNotifications.swift in Sources */,
F8DF765523E34FD500063910 /* DexcomG5+CoreDataProperties.swift in Sources */,
F8F9720423A5915900C3F17D /* TransmitterVersionTxMessage.swift in Sources */,
F8DF765C23E350B100063910 /* DexcomG5+BluetoothPeripheral.swift in Sources */,
F8F9720323A5915900C3F17D /* CGMG5Transmitter.swift in Sources */,
F8B3A81C227DEC92004BA588 /* AlertEntriesAccessor.swift in Sources */,
F8A1585B22EDB7EA007F5B5D /* ConstantsDexcomG5.swift in Sources */,
F816E0F524367132009EE65B /* GNSEntry+CoreDataProperties.swift in Sources */,
F898EDF4234A8A3200BFB79B /* UInt16.swift in Sources */,
F8BDD452221DEAB2006EAB84 /* TextsSettingsView.swift in Sources */,
F8EEDD6423020FAD00D2D610 /* NoCalibrator.swift in Sources */,
@ -2119,9 +2283,11 @@
F8F9722F23A5915900C3F17D /* M5StackPacket.swift in Sources */,
F897E25223FC871C0075E0E8 /* BluetoothPeripheralManager+BluetoothTransmitterDelegate.swift in Sources */,
F821CF8E22AB090C005C1E43 /* DatePickerViewController.swift in Sources */,
F816E12E2439E06E009EE65B /* BluetoothPeripheralManager+CGMDexcomG4TransmitterDelegate.swift in Sources */,
F8691888239CEEFA0065B607 /* BluetoothPeripheralViewModel.swift in Sources */,
F8297F4F238DCAD800D74D66 /* BluetoothPeripheralNavigationController.swift in Sources */,
F8A1585322EDB602007F5B5D /* ConstantsBloodGlucose.swift in Sources */,
F8DF766023E38FC100063910 /* BLEPeripheral+CoreDataClass.swift in Sources */,
F80ED2EE236F68F90005C035 /* SettingsViewM5StackWiFiSettingsViewModel.swift in Sources */,
F8A389C823203E3E0010F405 /* ConstantsM5Stack.swift in Sources */,
F898EDEA233F53BF00BFB79B /* UIButton.swift in Sources */,
@ -2143,8 +2309,11 @@
F8F9720923A5915900C3F17D /* AESCrypt.m in Sources */,
F830992E23C7D756005741DF /* WatlaaBluetoothTransmitterMaster+CGMTransmitter.swift in Sources */,
F80ED2ED236F68F90005C035 /* SettingsViewM5StackGeneralSettingsViewModel.swift in Sources */,
F816E10A2437E7B8009EE65B /* CGMBlueReaderTransmitterDelegate.swift in Sources */,
F8B3A850227F26F8004BA588 /* AlertTypesSettingsViewController.swift in Sources */,
F816E0FE24367338009EE65B /* GNSEntry+BluetoothPeripheral.swift in Sources */,
F8B3A808227A2933004BA588 /* SettingsSelectedRowAction.swift in Sources */,
F816E0F02433C31B009EE65B /* Blucon+CoreDataProperties.swift in Sources */,
F8E3C3AB21FE17B700907A04 /* StringProtocol.swift in Sources */,
F8F9720723A5915900C3F17D /* AuthChallengeTxMessage.swift in Sources */,
F8B3A78E22622954004BA588 /* AlertType+CoreDataClass.swift in Sources */,
@ -2159,6 +2328,9 @@
F8F9721C23A5915900C3F17D /* LibreOOPResponse.swift in Sources */,
F81F9FFC2288C7530028C70F /* NewAlertSettingsViewController.swift in Sources */,
F898EDF2234A8A0500BFB79B /* UInt8.swift in Sources */,
F8DF766423E781C100063910 /* BLEPeripheralAccessor.swift in Sources */,
F816E12124392D40009EE65B /* DropletBluetoothPeripheralViewModel.swift in Sources */,
F816E1082437E5B9009EE65B /* BlueReader+BluetoothPeripheral.swift in Sources */,
F81FA0002289E4990028C70F /* AlertSettingsViewControllerData.swift in Sources */,
F856CE5B22EDC8E50083E436 /* ConstantsBluetoothPairing.swift in Sources */,
F8F971B823A5914D00C3F17D /* BluetoothPeripheral.swift in Sources */,
@ -2174,15 +2346,18 @@
F8B3A84C227F090E004BA588 /* SettingsViewController.swift in Sources */,
F8EEDD5222FECE3800D2D610 /* ConstantsLibreOOP.swift in Sources */,
F8F9720B23A5915900C3F17D /* SensorDataRxMessage.swift in Sources */,
F816E10C2437EA8E009EE65B /* BlueReader+CoreDataClass.swift in Sources */,
F8AC426021ADEBD60078C348 /* RootViewController.swift in Sources */,
F897E25023FC871C0075E0E8 /* BluetoothPeripheralManager+CGMG5TransmitterDelegate.swift in Sources */,
F8B3A78B225D473D004BA588 /* UIAlertController.swift in Sources */,
F816E118243921FB009EE65B /* CGMBDropletTransmitterDelegate.swift in Sources */,
F8F9720E23A5915900C3F17D /* AuthRequestRxMessage.swift in Sources */,
F8BDD4242218790E006EAB84 /* UserDefaults.swift in Sources */,
F897E25323FC871C0075E0E8 /* BluetoothPeripheralManager+WatlaaBluetoothTransmitterDelegate.swift in Sources */,
F81D6D5222C27F18005EFAE2 /* BgReading+DexcomShare.swift in Sources */,
F8F9723023A5915900C3F17D /* M5StackUtilities.swift in Sources */,
F8297F52238ECA3200D74D66 /* BluetoothPeripheralViewController.swift in Sources */,
F816E1312439E2DD009EE65B /* DexcomG4BluetoothPeripheralViewModel.swift in Sources */,
F821CF66229EE68B005C1E43 /* NightScoutFollowManager.swift in Sources */,
F8F9722423A5915900C3F17D /* LibreMeasurement.swift in Sources */,
F869188C23A044340065B607 /* TextsM5StackView.swift in Sources */,
@ -2192,37 +2367,48 @@
F8F9722C23A5915900C3F17D /* GlucoseData.swift in Sources */,
F8A389E7232ECE7E0010F405 /* SettingsViewUtilities.swift in Sources */,
F8B3A7DF226E48C1004BA588 /* SoundPlayer.swift in Sources */,
F816E12C2439DFBA009EE65B /* DexcomG4+CoreDataProperties.swift in Sources */,
F897E25123FC871C0075E0E8 /* BluetoothPeripheralManager+M5StackBluetoothTransmitterDelegate.swift in Sources */,
F8B3A820227DEC92004BA588 /* AlertTypesAccessor.swift in Sources */,
F8F9720623A5915900C3F17D /* AuthRequestTxMessage.swift in Sources */,
F8F9721123A5915900C3F17D /* KeepAliveTxMessage.swift in Sources */,
F816E10524368BC3009EE65B /* BluetoothPeripheralManager+CGMGNSEntryTransmitterDelegate.swift in Sources */,
F8B3A81E227DEC92004BA588 /* BgReadingsAccessor.swift in Sources */,
F816E11E24392690009EE65B /* BluetoothPeripheralManager+CGMDropletTransmitterDelegate.swift in Sources */,
F821CF6B229FC22D005C1E43 /* Endpoint.swift in Sources */,
F821CF58229BF43A005C1E43 /* AlertManager.swift in Sources */,
F8297F59238EE14E00D74D66 /* TextsBluetoothPeripheralsView.swift in Sources */,
F898EDEC233F549100BFB79B /* UIBarButtonItem.swift in Sources */,
F816E0E42432A4FA009EE65B /* CGMBluconTransmitterDelegate.swift in Sources */,
F8A389CF232AE2EA0010F405 /* M5StackSettingsViewController.swift in Sources */,
F821CF5E229BF43A005C1E43 /* BgReading+NightScout.swift in Sources */,
F8A389EB233175A10010F405 /* SettingsViewM5StackSettingsViewModel.swift in Sources */,
F816E1242439DB63009EE65B /* DexcomG4+BluetoothPeripheral.swift in Sources */,
F808D2D2240329E80084B5DB /* Bubble+BluetoothPeripheral.swift in Sources */,
F8025C1321DA683400ECF0C0 /* Data.swift in Sources */,
F8F9722023A5915900C3F17D /* LibreGlucoseSmoothing.swift in Sources */,
F80859272364355F00F3829D /* ConstantsGlucoseChart.swift in Sources */,
F816E10324367389009EE65B /* GNSEntryBluetoothPeripheralViewModel.swift in Sources */,
F8DF766D23ED9B0900063910 /* DexcomG5BluetoothPeripheralViewModel.swift in Sources */,
F85DC2EF21CFE2F500B9F74A /* Sensor+CoreDataProperties.swift in Sources */,
F8297F56238ED07700D74D66 /* BluetoothPeripheralManager.swift in Sources */,
F8297F5A238EE14E00D74D66 /* TextsBluetoothPeripheralView.swift in Sources */,
F8BECB02235CE3E20060DAE1 /* BloodGlucoseChartView.swift in Sources */,
F8A1584D22ECA445007F5B5D /* SettingsViewDevelopmentSettingsViewModel.swift in Sources */,
F816E12A2439DF3A009EE65B /* DexcomG4+CoreDataClass.swift in Sources */,
F8F9723E23A593C000C3F17D /* M5StickCBluetoothPeripheralViewModel.swift in Sources */,
F8F9722323A5915900C3F17D /* LibreDataParser.swift in Sources */,
F816E0ED2432A55F009EE65B /* BluconBluetoothPeripheralViewModel.swift in Sources */,
F8F9722923A5915900C3F17D /* CGMTransmitter.swift in Sources */,
F8A389ED23342EB10010F405 /* ConstantsNightScout.swift in Sources */,
F8B3A856227F28DC004BA588 /* AlertTypeSettingsViewController.swift in Sources */,
F8A1584F22ECB281007F5B5D /* SettingsViewInfoViewModel.swift in Sources */,
F8B3A845227F090E004BA588 /* SettingsViewDexcomSettingsViewModel.swift in Sources */,
F8F9720C23A5915900C3F17D /* SensorDataTxMessage.swift in Sources */,
F8DF766223E390D100063910 /* BLEPeripheral+CoreDataProperties.swift in Sources */,
F8A1585F22EDB81E007F5B5D /* ConstantsLog.swift in Sources */,
F8A1586522EDB89D007F5B5D /* ConstantsDefaultAlertTypeSettings.swift in Sources */,
F816E11624391A02009EE65B /* Droplet+BluetoothPeripheral.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2233,7 +2419,6 @@
isa = PBXVariantGroup;
children = (
F889CB70236D84AC00A81068 /* en */,
286387A123FC711E000D00B8 /* fi-FI */,
);
name = M5StackView.strings;
sourceTree = "<group>";
@ -2254,7 +2439,6 @@
F889CB8B236D851600A81068 /* es-MX */,
F889CB8C236D851700A81068 /* es-ES */,
F889CB8F236D89C800A81068 /* de */,
2863879D23FC711B000D00B8 /* fi-FI */,
);
name = DexcomShareTestResults.strings;
sourceTree = "<group>";
@ -2274,7 +2458,6 @@
F8B48AFC22B37C67009BCC01 /* fr */,
F8B48B0822B37C83009BCC01 /* zh */,
F889CB8E236D89C800A81068 /* de */,
2863879723FC7117000D00B8 /* fi-FI */,
);
name = Main.storyboard;
sourceTree = "<group>";
@ -2293,7 +2476,6 @@
F8B48AFB22B37C67009BCC01 /* fr */,
F8B48B0722B37C83009BCC01 /* zh */,
F889CB8D236D89C800A81068 /* de */,
2863879623FC7115000D00B8 /* fi-FI */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
@ -2312,7 +2494,6 @@
F8B48B0522B37C67009BCC01 /* fr */,
F8B48B1122B37C84009BCC01 /* zh */,
F889CB9A236D89C800A81068 /* de */,
286387A223FC711E000D00B8 /* fi-FI */,
);
name = NightScoutTestResult.strings;
sourceTree = "<group>";
@ -2331,7 +2512,6 @@
F8B48B0022B37C67009BCC01 /* fr */,
F8B48B0C22B37C83009BCC01 /* zh */,
F889CB90236D89C800A81068 /* de */,
2863879823FC7118000D00B8 /* fi-FI */,
);
name = Alerts.strings;
sourceTree = "<group>";
@ -2350,7 +2530,6 @@
F8B48B0122B37C67009BCC01 /* fr */,
F8B48B0D22B37C84009BCC01 /* zh */,
F889CB91236D89C800A81068 /* de */,
2863879923FC7118000D00B8 /* fi-FI */,
);
name = AlertTypesSettingsView.strings;
sourceTree = "<group>";
@ -2371,7 +2550,6 @@
F8B48B0B22B37C83009BCC01 /* zh */,
F81D6D4522B67F55005EFAE2 /* pt */,
F889CB9C236D89C800A81068 /* de */,
286387A423FC711F000D00B8 /* fi-FI */,
);
name = SpeakReading.strings;
sourceTree = "<group>";
@ -2390,7 +2568,6 @@
F8B48AFE22B37C67009BCC01 /* fr */,
F8B48B0A22B37C83009BCC01 /* zh */,
F889CB96236D89C800A81068 /* de */,
2863879F23FC711C000D00B8 /* fi-FI */,
);
name = HomeView.strings;
sourceTree = "<group>";
@ -2409,7 +2586,6 @@
F8B48AFD22B37C67009BCC01 /* fr */,
F8B48B0922B37C83009BCC01 /* zh */,
F889CB92236D89C800A81068 /* de */,
2863879A23FC7119000D00B8 /* fi-FI */,
);
name = CalibrationRequest.strings;
sourceTree = "<group>";
@ -2428,7 +2604,6 @@
F8B48B0422B37C67009BCC01 /* fr */,
F8B48B1022B37C84009BCC01 /* zh */,
F889CB97236D89C800A81068 /* de */,
286387A023FC711D000D00B8 /* fi-FI */,
);
name = Localizable.strings;
sourceTree = "<group>";
@ -2449,7 +2624,6 @@
F8C5EBED22F5A52400563B5F /* pt-BR */,
F8C5EBEE22F5A52800563B5F /* pt */,
F889CB93236D89C800A81068 /* de */,
2863879B23FC711A000D00B8 /* fi-FI */,
);
name = Common.strings;
sourceTree = "<group>";
@ -2468,7 +2642,6 @@
F8B48B0322B37C67009BCC01 /* fr */,
F8B48B0F22B37C84009BCC01 /* zh */,
F889CB95236D89C800A81068 /* de */,
2863879E23FC711C000D00B8 /* fi-FI */,
);
name = ErrorMessages.strings;
sourceTree = "<group>";
@ -2489,7 +2662,6 @@
F846CDD523046BAC00DCF016 /* pt-BR */,
F846CDD623046BAE00DCF016 /* pt */,
F889CB9B236D89C800A81068 /* de */,
286387A323FC711F000D00B8 /* fi-FI */,
);
name = SettingsViews.strings;
sourceTree = "<group>";
@ -2510,7 +2682,6 @@
F8EEDD612300139800D2D610 /* zh */,
F8EEDD622300139A00D2D610 /* pt */,
F889CB94236D89C800A81068 /* de */,
2863879C23FC711B000D00B8 /* fi-FI */,
);
name = DexcomShareTestResult.strings;
sourceTree = "<group>";
@ -2653,7 +2824,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 3.10.2;
MARKETING_VERSION = 3.10.6;
PRODUCT_BUNDLE_IDENTIFIER = net.johandegraeve.xdripswift;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -2681,7 +2852,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 3.10.2;
MARKETING_VERSION = 3.10.6;
PRODUCT_BUNDLE_IDENTIFIER = net.johandegraeve.xdripswift;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -2718,6 +2889,7 @@
F8AC429F21B31F160078C348 /* xdrip.xcdatamodeld */ = {
isa = XCVersionGroup;
children = (
F8DF765123E34E6A00063910 /* xdrip v11.xcdatamodel */,
F8DF764E23DCF64F00063910 /* xdrip v10.xcdatamodel */,
F830991523C28E79005741DF /* xdrip v9.xcdatamodel */,
F830990323B3928E005741DF /* xdrip v8.xcdatamodel */,
@ -2729,7 +2901,7 @@
F85C4A93233632EC00D6A86F /* xdrip v2.xcdatamodel */,
F8AC42A021B31F160078C348 /* xdrip.xcdatamodel */,
);
currentVersion = F8DF764E23DCF64F00063910 /* xdrip v10.xcdatamodel */;
currentVersion = F8DF765123E34E6A00063910 /* xdrip v11.xcdatamodel */;
path = xdrip.xcdatamodeld;
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;

View File

@ -0,0 +1,11 @@
import Foundation
extension Blucon: BluetoothPeripheral {
func bluetoothPeripheralType() -> BluetoothPeripheralType {
return .BluconType
}
}

View File

@ -25,6 +25,9 @@ enum BluetoothPeripheralType: String, CaseIterable {
/// MiaoMiao
case MiaoMiaoType = "MiaoMiao"
/// Blucon
case BluconType = "Blucon"
/// - returns: the BluetoothPeripheralViewModel
func viewModel() -> BluetoothPeripheralViewModel {
@ -47,6 +50,9 @@ enum BluetoothPeripheralType: String, CaseIterable {
case .MiaoMiaoType:
return MiaoMiaoBluetoothPeripheralViewModel()
case .BluconType:
return BluconBluetoothPeripheralViewModel()
}
}
@ -84,6 +90,10 @@ enum BluetoothPeripheralType: String, CaseIterable {
return MiaoMiao(address: address, name: name, alias: nil, nsManagedObjectContext: nsManagedObjectContext)
case .BluconType:
return Blucon(address: address, name: name, alias: nil, nsManagedObjectContext: nsManagedObjectContext)
}
}
@ -102,7 +112,7 @@ enum BluetoothPeripheralType: String, CaseIterable {
case .watlaaMaster:
return .watlaa
case .DexcomG5Type, .BubbleType, .MiaoMiaoType:
case .DexcomG5Type, .BubbleType, .MiaoMiaoType, .BluconType:
return .CGM
}
@ -117,7 +127,7 @@ enum BluetoothPeripheralType: String, CaseIterable {
case .M5StackType, .M5StickCType, .watlaaMaster, .BubbleType, .MiaoMiaoType:
return false
case .DexcomG5Type:
case .DexcomG5Type, .BluconType:
return true
}
@ -167,16 +177,16 @@ enum BluetoothPeripheralType: String, CaseIterable {
case .miaomiao, .GNSentry, .Bubble, .Droplet1:
return nil
case .Blucon:
// todo: validate transmitter id for blucon
return nil
case .blueReader:
return nil
case .watlaa:
return nil*/
case .BluconType:
// todo: validate transmitter id for blucon
return nil
case .M5StackType, .M5StickCType, .watlaaMaster, .BubbleType, .MiaoMiaoType:
// no transmitter id means no validation to do
return nil

View File

@ -6,6 +6,9 @@ class CGMBluconTransmitter: BluetoothTransmitter {
// MARK: - properties
/// CGMBubbleTransmitterDelegate
public weak var cGMBluconTransmitterDelegate: CGMBluconTransmitterDelegate?
/// will be used to pass back bluetooth and cgm related events
private(set) weak var cgmTransmitterDelegate:CGMTransmitterDelegate?
@ -73,7 +76,7 @@ class CGMBluconTransmitter: BluetoothTransmitter {
/// - sensorSerialNumber : is needed to allow detection of a new sensor.
/// - bluetoothTransmitterDelegate : a NluetoothTransmitterDelegate
/// - cGMTransmitterDelegate : a CGMTransmitterDelegate
init?(address:String?, name: String?, transmitterID:String, bluetoothTransmitterDelegate: BluetoothTransmitterDelegate, cGMTransmitterDelegate:CGMTransmitterDelegate, timeStampLastBgReading:Date, sensorSerialNumber:String?) {
init(address:String?, name: String?, transmitterID:String, bluetoothTransmitterDelegate: BluetoothTransmitterDelegate, cGMBluconTransmitterDelegate: CGMBluconTransmitterDelegate, cGMTransmitterDelegate:CGMTransmitterDelegate, timeStampLastBgReading:Date?, sensorSerialNumber:String?) {
// assign addressname and name or expected devicename
// start by using expected device name
@ -84,11 +87,14 @@ class CGMBluconTransmitter: BluetoothTransmitter {
}
// initialize timeStampLastBgReading
self.timeStampLastBgReading = timeStampLastBgReading
self.timeStampLastBgReading = timeStampLastBgReading ?? Date(timeIntervalSince1970: 0)
// initialize sensorSerialNumber
self.sensorSerialNumber = sensorSerialNumber
// initialize cGMBluconTransmitterDelegate
self.cGMBluconTransmitterDelegate = cGMBluconTransmitterDelegate
// initialize rxbuffer
rxBuffer = Data()
@ -309,7 +315,8 @@ class CGMBluconTransmitter: BluetoothTransmitter {
// by default set battery level to 100
cgmTransmitterDelegate?.cgmTransmitterInfoReceived(glucoseData: &emptyArray, transmitterBatteryInfo: TransmitterBatteryInfo.percentage(percentage: 100), sensorTimeInMinutes: nil)
cGMBluconTransmitterDelegate?.received(batteryLevel: 100, from: self)
case .error14:
// Blucon didn't receive the next command it was waiting for, need to wait 5 minutes
@ -341,6 +348,8 @@ class CGMBluconTransmitter: BluetoothTransmitter {
// inform cGMTransmitterDelegate about new sensor detected
cgmTransmitterDelegate?.newSensorDetected()
cGMBluconTransmitterDelegate?.received(serialNumber: sensorSerialNumber, from: self)
// also reset timestamp last reading, to be sure that if new sensor is started, we get historic data
timeStampLastBgReading = Date(timeIntervalSince1970: 0)
@ -403,6 +412,9 @@ class CGMBluconTransmitter: BluetoothTransmitter {
// this is considered as battery level 5%
cgmTransmitterDelegate?.cgmTransmitterInfoReceived(glucoseData: &emptyArray, transmitterBatteryInfo: TransmitterBatteryInfo.percentage(percentage: 5), sensorTimeInMinutes: nil)
cGMBluconTransmitterDelegate?.received(batteryLevel: 5, from: self)
}
// if timeStampLastBgReading > 5 minutes ago, then we'll get historic data, otherwise just get the latest reading
@ -502,11 +514,15 @@ class CGMBluconTransmitter: BluetoothTransmitter {
// this is considered as battery level 3%
cgmTransmitterDelegate?.cgmTransmitterInfoReceived(glucoseData: &emptyArray, transmitterBatteryInfo: TransmitterBatteryInfo.percentage(percentage: 3), sensorTimeInMinutes: nil)
cGMBluconTransmitterDelegate?.received(batteryLevel: 3, from: self)
case .bluconBatteryLowIndication2:
// this is considered as battery level 2%
cgmTransmitterDelegate?.cgmTransmitterInfoReceived(glucoseData: &emptyArray, transmitterBatteryInfo: TransmitterBatteryInfo.percentage(percentage: 2), sensorTimeInMinutes: nil)
cGMBluconTransmitterDelegate?.received(batteryLevel: 2, from: self)
}
}

View File

@ -0,0 +1,12 @@
import Foundation
protocol CGMBluconTransmitterDelegate: AnyObject {
/// received sensor Serial Number
func received(serialNumber: String?, from cGMBluconTransmitter: CGMBluconTransmitter)
/// M5Stack is sending batteryLevel
func received(batteryLevel: Int, from cGMBluconTransmitter: CGMBluconTransmitter)
}

View File

@ -0,0 +1,43 @@
import Foundation
import CoreData
public class Blucon: NSManagedObject {
/// batterylevel, not stored in coreData, will only be available after having received it from the M5Stack
public var batteryLevel: Int = 0
/// create Blucon
/// - parameters:
init(address: String, name: String, alias: String?, nsManagedObjectContext:NSManagedObjectContext) {
let entity = NSEntityDescription.entity(forEntityName: "Blucon", in: nsManagedObjectContext)!
super.init(entity: entity, insertInto: nsManagedObjectContext)
blePeripheral = BLEPeripheral(address: address, name: name, alias: nil, nsManagedObjectContext: nsManagedObjectContext)
}
/// create Blucon
/// - parameters:
init(address: String, name: String, alias: String?, timeStampLastBgReading: Date?, sensorSerialNumber: String?, webOOPEnabled: Bool, oopWebSite: String?, oopWebToken: String?, nsManagedObjectContext:NSManagedObjectContext) {
let entity = NSEntityDescription.entity(forEntityName: "Blucon", in: nsManagedObjectContext)!
super.init(entity: entity, insertInto: nsManagedObjectContext)
self.timeStampLastBgReading = timeStampLastBgReading
blePeripheral = BLEPeripheral(address: address, name: name, alias: nil, nsManagedObjectContext: nsManagedObjectContext)
blePeripheral.webOOPEnabled = webOOPEnabled
blePeripheral.oopWebSite = oopWebSite
blePeripheral.oopWebToken = oopWebToken
}
private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) {
super.init(entity: entity, insertInto: context)
}
}

View File

@ -0,0 +1,16 @@
import Foundation
import CoreData
extension Blucon {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Blucon> {
return NSFetchRequest<Blucon>(entityName: "Blucon")
}
// blePeripheral is required to conform to protocol BluetoothPeripheral
@NSManaged public var blePeripheral: BLEPeripheral
/// timestamp of last reading read with this transmitter
@NSManaged public var timeStampLastBgReading: Date?
}

View File

@ -3,6 +3,6 @@
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>xdrip v10.xcdatamodel</string>
<string>xdrip v11.xcdatamodel</string>
</dict>
</plist>

View File

@ -49,12 +49,17 @@
<attribute name="shouldconnect" attributeType="Boolean" usesScalarValueType="YES"/>
<attribute name="transmitterId" optional="YES" attributeType="String"/>
<attribute name="webOOPEnabled" attributeType="Boolean" usesScalarValueType="YES"/>
<relationship name="blucon" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Blucon" inverseName="blePeripheral" inverseEntity="Blucon"/>
<relationship name="bubble" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Bubble" inverseName="blePeripheral" inverseEntity="Bubble"/>
<relationship name="dexcomG5" optional="YES" maxCount="1" deletionRule="Deny" destinationEntity="DexcomG5" inverseName="blePeripheral" inverseEntity="DexcomG5"/>
<relationship name="m5Stack" optional="YES" maxCount="1" deletionRule="Deny" destinationEntity="M5Stack" inverseName="blePeripheral" inverseEntity="M5Stack"/>
<relationship name="miaoMiao" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="MiaoMiao" inverseName="blePeripheral" inverseEntity="MiaoMiao"/>
<relationship name="watlaa" optional="YES" maxCount="1" deletionRule="Deny" destinationEntity="Watlaa" inverseName="blePeripheral" inverseEntity="Watlaa"/>
</entity>
<entity name="Blucon" representedClassName=".Blucon" syncable="YES">
<attribute name="timeStampLastBgReading" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
<relationship name="blePeripheral" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="BLEPeripheral" inverseName="blucon" inverseEntity="BLEPeripheral"/>
</entity>
<entity name="Bubble" representedClassName=".Bubble" syncable="YES">
<attribute name="firmware" optional="YES" attributeType="String"/>
<attribute name="hardware" optional="YES" attributeType="String"/>
@ -121,7 +126,7 @@
<element name="AlertEntry" positionX="-648" positionY="189" width="128" height="105"/>
<element name="AlertType" positionX="-657" positionY="180" width="128" height="165"/>
<element name="BgReading" positionX="-285.87109375" positionY="31.9921875" width="128" height="330"/>
<element name="BLEPeripheral" positionX="-630" positionY="216" width="128" height="283"/>
<element name="BLEPeripheral" positionX="-630" positionY="216" width="128" height="298"/>
<element name="Bubble" positionX="-657" positionY="189" width="128" height="103"/>
<element name="Calibration" positionX="-859.21484375" positionY="46.21484375" width="128" height="285"/>
<element name="DexcomG5" positionX="-648" positionY="198" width="128" height="178"/>
@ -129,5 +134,6 @@
<element name="MiaoMiao" positionX="-657" positionY="189" width="128" height="103"/>
<element name="Sensor" positionX="-603.0859375" positionY="482.2890625" width="128" height="133"/>
<element name="Watlaa" positionX="-639" positionY="207" width="128" height="58"/>
<element name="Blucon" positionX="-657" positionY="189" width="128" height="73"/>
</elements>
</model>

View File

@ -0,0 +1,35 @@
import Foundation
extension BluetoothPeripheralManager: CGMBluconTransmitterDelegate {
func received(serialNumber: String?, from cGMBluconTransmitter: CGMBluconTransmitter) {
guard let blucon = findTransmitter(cGMBluconTransmitter: cGMBluconTransmitter) else {return}
// store serial number in blucon object
blucon.blePeripheral.sensorSerialNumber = serialNumber
coreDataManager.saveChanges()
}
func received(batteryLevel: Int, from cGMBluconTransmitter: CGMBluconTransmitter) {
guard let blucon = findTransmitter(cGMBluconTransmitter: cGMBluconTransmitter) else {return}
// store serial number in blucon object
blucon.batteryLevel = batteryLevel
// no coredatamanager savechanges needed because batterylevel is not stored in coredata
}
private func findTransmitter(cGMBluconTransmitter: CGMBluconTransmitter) -> Blucon? {
guard let index = bluetoothTransmitters.firstIndex(of: cGMBluconTransmitter), let blucon = bluetoothPeripherals[index] as? Blucon else {return nil}
return blucon
}
}

View File

@ -160,11 +160,11 @@ class BluetoothPeripheralManager: NSObject {
// add it to the array of bluetoothTransmitters
bluetoothTransmitters.insert(CGMG5Transmitter(address: dexcomG5.blePeripheral.address, name: dexcomG5.blePeripheral.name, transmitterID: transmitterId, bluetoothTransmitterDelegate: self, cGMG5TransmitterDelegate: self, cGMTransmitterDelegate: cgmTransmitterDelegate), at: index)
}
// if DexcomG5Type is of type CGM, then assign the address to currentCgmTransmitterAddress, there shouldn't be any other bluetoothPeripherals of type .CGM with shouldconnect = true
if bluetoothPeripheralType.category() == .CGM {
currentCgmTransmitterAddress = blePeripheral.address
// if DexcomG5Type is of type CGM, then assign the address to currentCgmTransmitterAddress, there shouldn't be any other bluetoothPeripherals of type .CGM with shouldconnect = true
if bluetoothPeripheralType.category() == .CGM {
currentCgmTransmitterAddress = blePeripheral.address
}
}
} else {
@ -212,7 +212,7 @@ class BluetoothPeripheralManager: NSObject {
if miaoMiao.blePeripheral.shouldconnect {
// create an instance of CGMMiaoMiaoTransmitter, BubbleBluetoothTransmitter will automatically try to connect to the Bubble with the address that is stored in bubble
// create an instance of CGMMiaoMiaoTransmitter, CGMMiaoMiaoTransmitter will automatically try to connect to the Bubble with the address that is stored in bubble
// add it to the array of bluetoothTransmitters
bluetoothTransmitters.insert(CGMMiaoMiaoTransmitter(address: miaoMiao.blePeripheral.address, name: miaoMiao.blePeripheral.name, bluetoothTransmitterDelegate: self, cGMMiaoMiaoTransmitterDelegate: self, cGMTransmitterDelegate: cgmTransmitterDelegate, timeStampLastBgReading: miaoMiao.timeStampLastBgReading, sensorSerialNumber: miaoMiao.blePeripheral.sensorSerialNumber, webOOPEnabled: miaoMiao.blePeripheral.webOOPEnabled, oopWebSite: miaoMiao.blePeripheral.oopWebSite, oopWebToken: miaoMiao.blePeripheral.oopWebToken), at: index)
@ -229,7 +229,37 @@ class BluetoothPeripheralManager: NSObject {
}
}
case .BluconType:
if let blucon = blePeripheral.miaoMiao {
// add it to the list of bluetoothPeripherals
let index = insertInBluetoothPeripherals(bluetoothPeripheral: blucon)
if blucon.blePeripheral.shouldconnect {
if let transmitterId = blucon.blePeripheral.transmitterId {
// create an instance of CGMBluconTransmitter, CGMBluconTransmitter will automatically try to connect to the Bluon with the address that is stored in blucon
// add it to the array of bluetoothTransmitters
bluetoothTransmitters.insert(CGMBluconTransmitter(address: blucon.blePeripheral.address, name: blucon.blePeripheral.name, transmitterID: transmitterId, bluetoothTransmitterDelegate: self, cGMBluconTransmitterDelegate: self, cGMTransmitterDelegate: cgmTransmitterDelegate, timeStampLastBgReading: blucon.timeStampLastBgReading, sensorSerialNumber: blucon.blePeripheral.sensorSerialNumber), at: index)
// if bluconType is of type CGM, then assign the address to currentCgmTransmitterAddress, there shouldn't be any other bluetoothPeripherals of type .CGM with shouldconnect = true
if bluetoothPeripheralType.category() == .CGM {
currentCgmTransmitterAddress = blePeripheral.address
}
}
} else {
// bluetoothTransmitters array (which should have the same number of elements as bluetoothPeripherals) needs to have an empty row for the transmitter
bluetoothTransmitters.insert(nil, at: index)
}
}
}
}
@ -286,7 +316,7 @@ class BluetoothPeripheralManager: NSObject {
// no need to send reading to watlaa in master mode
break
case .DexcomG5Type, .BubbleType, .MiaoMiaoType:
case .DexcomG5Type, .BubbleType, .MiaoMiaoType, .BluconType:
// cgm's don't receive reading, they send it
break
@ -398,6 +428,21 @@ class BluetoothPeripheralManager: NSObject {
}
}
case .BluconType:
if let blucon = bluetoothPeripheral as? Blucon {
if let transmitterId = blucon.blePeripheral.transmitterId, let cgmTransmitterDelegate = cgmTransmitterDelegate {
newTransmitter = CGMBluconTransmitter(address: blucon.blePeripheral.address, name: blucon.blePeripheral.name, transmitterID: transmitterId, bluetoothTransmitterDelegate: self, cGMBluconTransmitterDelegate: self, cGMTransmitterDelegate: cgmTransmitterDelegate, timeStampLastBgReading: nil, sensorSerialNumber: blucon.blePeripheral.sensorSerialNumber)
} else {
trace("in getBluetoothTransmitter, case BluconType but transmitterId is nil or cgmTransmitterDelegate is nil, looks like a coding error ", log: log, category: ConstantsLog.categoryBluetoothPeripheralManager, type: .error)
}
}
}
@ -445,6 +490,12 @@ class BluetoothPeripheralManager: NSObject {
if bluetoothTransmitter is CGMMiaoMiaoTransmitter {
return .MiaoMiaoType
}
case .BluconType:
if bluetoothTransmitter is CGMBluconTransmitter {
return .BluconType
}
}
}
@ -492,6 +543,14 @@ class BluetoothPeripheralManager: NSObject {
return CGMMiaoMiaoTransmitter(address: nil, name: nil, bluetoothTransmitterDelegate: self, cGMMiaoMiaoTransmitterDelegate: self, cGMTransmitterDelegate: cgmTransmitterDelegate, timeStampLastBgReading: nil, sensorSerialNumber: nil, webOOPEnabled: nil, oopWebSite: nil, oopWebToken: nil)
case .BluconType:
guard let transmitterId = transmitterId, let cgmTransmitterDelegate = cgmTransmitterDelegate else {
fatalError("in createNewTransmitter, type BluconType, transmitterId is nil or cgmTransmitterDelegate is nil")
}
return CGMBluconTransmitter(address: nil, name: nil, transmitterID: transmitterId, bluetoothTransmitterDelegate: self, cGMBluconTransmitterDelegate: self, cGMTransmitterDelegate: cgmTransmitterDelegate, timeStampLastBgReading: nil, sensorSerialNumber: nil)
}
}
@ -707,6 +766,10 @@ class BluetoothPeripheralManager: NSObject {
// none of the observed values needs to be sent to the watlaa
break
case .BluconType:
// none of the observed values needs to be sent to the watlaa
break
}
}

View File

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>3691</string>
<string>3705</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>

View File

@ -0,0 +1,209 @@
import UIKit
class BluconBluetoothPeripheralViewModel {
// MARK: - private properties
/// settings specific for blucon
private enum Settings:Int, CaseIterable {
/// battery level
case batteryLevel = 0
/// Sensor serial number
case sensorSerialNumber = 2
}
/// Blucon settings willb be in section 0 + numberOfGeneralSections
private let sectionNumberForBluconSpecificSettings = 0
/// reference to bluetoothPeripheralManager
private weak var bluetoothPeripheralManager: BluetoothPeripheralManaging?
/// reference to the tableView
private weak var tableView: UITableView?
/// reference to BluetoothPeripheralViewController that will own this WatlaaMasterBluetoothPeripheralViewModel - needed to present stuff etc
private weak var bluetoothPeripheralViewController: BluetoothPeripheralViewController?
/// temporary reference to bluetoothPerpipheral, will be set in configure function.
private var bluetoothPeripheral: BluetoothPeripheral?
/// it's the bluetoothPeripheral as M5Stack
private var blucon: Blucon? {
get {
return bluetoothPeripheral as? Blucon
}
}
// MARK: - deinit
deinit {
// when closing the viewModel, and if there's still a bluetoothTransmitter existing, then reset the specific delegate to BluetoothPeripheralManager
guard let bluetoothPeripheralManager = bluetoothPeripheralManager else {return}
guard let blucon = blucon else {return}
guard let blueToothTransmitter = bluetoothPeripheralManager.getBluetoothTransmitter(for: blucon, createANewOneIfNecesssary: false) else {return}
guard let cGMBluconBluetoothTransmitter = blueToothTransmitter as? CGMBluconTransmitter else {return}
cGMBluconBluetoothTransmitter.cGMBluconTransmitterDelegate = bluetoothPeripheralManager as! BluetoothPeripheralManager
}
}
// MARK: - conform to BluetoothPeripheralViewModel
extension BluconBluetoothPeripheralViewModel: BluetoothPeripheralViewModel {
func canWebOOP() -> Bool {
return CGMTransmitterType.Blucon.canWebOOP()
}
func configure(bluetoothPeripheral: BluetoothPeripheral?, bluetoothPeripheralManager: BluetoothPeripheralManaging, tableView: UITableView, bluetoothPeripheralViewController: BluetoothPeripheralViewController) {
self.bluetoothPeripheralManager = bluetoothPeripheralManager
self.tableView = tableView
self.bluetoothPeripheralViewController = bluetoothPeripheralViewController
self.bluetoothPeripheral = bluetoothPeripheral
if let bluetoothPeripheral = bluetoothPeripheral {
if let blucon = bluetoothPeripheral as? Blucon {
if let blueToothTransmitter = bluetoothPeripheralManager.getBluetoothTransmitter(for: blucon, createANewOneIfNecesssary: false), let cGMBluconTransmitter = blueToothTransmitter as? CGMBluconTransmitter {
// set CGMBluconTransmitter delegate to self.
cGMBluconTransmitter.cGMBluconTransmitterDelegate = self
}
} else {
fatalError("in BluconBluetoothPeripheralViewModel, configure. bluetoothPeripheral is not Blucon")
}
}
}
func screenTitle() -> String {
return BluetoothPeripheralType.BluconType.rawValue
}
func sectionTitle(forSection section: Int) -> String {
return BluetoothPeripheralType.BluconType.rawValue
}
func update(cell: UITableViewCell, forRow rawValue: Int, forSection section: Int, for bluetoothPeripheral: BluetoothPeripheral) {
// verify that bluetoothPeripheral is a Blucon
guard let blucon = bluetoothPeripheral as? Blucon else {
fatalError("BluconBluetoothPeripheralViewModel update, bluetoothPeripheral is not Blucon")
}
// default value for accessoryView is nil
cell.accessoryView = nil
guard let setting = Settings(rawValue: rawValue) else { fatalError("BluconBluetoothPeripheralViewModel update, unexpected setting") }
switch setting {
case .batteryLevel:
cell.textLabel?.text = Texts_BluetoothPeripheralsView.batteryLevel
if blucon.batteryLevel > 0 {
cell.detailTextLabel?.text = blucon.batteryLevel.description + " %"
} else {
cell.detailTextLabel?.text = ""
}
cell.accessoryType = .none
case .sensorSerialNumber:
cell.textLabel?.text = Texts_BluetoothPeripheralView.SensorSerialNumber
cell.detailTextLabel?.text = blucon.blePeripheral.sensorSerialNumber
cell.accessoryType = .disclosureIndicator
}
}
func userDidSelectRow(withSettingRawValue rawValue: Int, forSection section: Int, for bluetoothPeripheral: BluetoothPeripheral, bluetoothPeripheralManager: BluetoothPeripheralManaging) -> SettingsSelectedRowAction {
// verify that bluetoothPeripheral is a Blucon
guard let blucon = bluetoothPeripheral as? Blucon else {
fatalError("BluconBluetoothPeripheralViewModel userDidSelectRow, bluetoothPeripheral is not Blucon")
}
guard let setting = Settings(rawValue: rawValue) else { fatalError("BluconBluetoothPeripheralViewModel userDidSelectRow, unexpected setting") }
switch setting {
case .batteryLevel:
return .nothing
case .sensorSerialNumber:
// serial text could be longer than screen width, clicking the row allows to see it in a pop up with more text place
if let serialNumber = blucon.blePeripheral.sensorSerialNumber {
return .showInfoText(title: Texts_HomeView.info, message: Texts_BluetoothPeripheralView.SensorSerialNumber + " : " + serialNumber)
}
}
return .nothing
}
func numberOfSettings(inSection section: Int) -> Int {
return Settings.allCases.count
}
func numberOfSections() -> Int {
// for the moment only one specific section for DexcomG5
return 1
}
}
// MARK: - conform to CGMBluconTransmitterDelegate
extension BluconBluetoothPeripheralViewModel: CGMBluconTransmitterDelegate {
func received(batteryLevel: Int, from cGMBluconTransmitter: CGMBluconTransmitter) {
// inform also bluetoothPeripheralManager
(bluetoothPeripheralManager as? CGMBluconTransmitterDelegate)?.received(batteryLevel: batteryLevel, from: cGMBluconTransmitter)
// here's the trigger to update the table
reloadRow(row: Settings.batteryLevel.rawValue)
}
func received(serialNumber: String?, from cGMBluconTransmitter: CGMBluconTransmitter) {
// inform also bluetoothPeripheralManager
(bluetoothPeripheralManager as? CGMBluconTransmitterDelegate)?.received(serialNumber: serialNumber, from: cGMBluconTransmitter)
// here's the trigger to update the table
reloadRow(row: Settings.sensorSerialNumber.rawValue)
}
private func reloadRow(row: Int) {
if let bluetoothPeripheralViewController = bluetoothPeripheralViewController {
tableView?.reloadRows(at: [IndexPath(row: row, section: bluetoothPeripheralViewController.numberOfGeneralSections() + sectionNumberForBluconSpecificSettings)], with: .none)
}
}
}