capacitor-plugin-ihealth 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/CapacitorPluginIhealth.podspec +35 -0
  2. package/README.md +214 -0
  3. package/android/build.gradle +58 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/com/managemyhealth/plugins/ihealth/ihealth.java +11 -0
  6. package/android/src/main/java/com/managemyhealth/plugins/ihealth/ihealthPlugin.java +22 -0
  7. package/android/src/main/res/.gitkeep +0 -0
  8. package/dist/docs.json +450 -0
  9. package/dist/esm/definitions.d.ts +29 -0
  10. package/dist/esm/definitions.js +2 -0
  11. package/dist/esm/definitions.js.map +1 -0
  12. package/dist/esm/index.d.ts +4 -0
  13. package/dist/esm/index.js +7 -0
  14. package/dist/esm/index.js.map +1 -0
  15. package/dist/esm/web.d.ts +37 -0
  16. package/dist/esm/web.js +42 -0
  17. package/dist/esm/web.js.map +1 -0
  18. package/dist/plugin.cjs.js +58 -0
  19. package/dist/plugin.cjs.js.map +1 -0
  20. package/dist/plugin.js +61 -0
  21. package/dist/plugin.js.map +1 -0
  22. package/ios/Plugin/Info.plist +24 -0
  23. package/ios/Plugin/Plugin-Bridging-Header.h +35 -0
  24. package/ios/Plugin/iHealthSDKHeaders/ABI.h +82 -0
  25. package/ios/Plugin/iHealthSDKHeaders/ABIController.h +28 -0
  26. package/ios/Plugin/iHealthSDKHeaders/ABPM.h +144 -0
  27. package/ios/Plugin/iHealthSDKHeaders/ABPMController.h +25 -0
  28. package/ios/Plugin/iHealthSDKHeaders/AM3.h +188 -0
  29. package/ios/Plugin/iHealthSDKHeaders/AM3Controller.h +29 -0
  30. package/ios/Plugin/iHealthSDKHeaders/AM3SController_V2.h +29 -0
  31. package/ios/Plugin/iHealthSDKHeaders/AM3S_V2.h +227 -0
  32. package/ios/Plugin/iHealthSDKHeaders/AM4.h +223 -0
  33. package/ios/Plugin/iHealthSDKHeaders/AM4Controller.h +31 -0
  34. package/ios/Plugin/iHealthSDKHeaders/AM5.h +335 -0
  35. package/ios/Plugin/iHealthSDKHeaders/AM5Controller.h +30 -0
  36. package/ios/Plugin/iHealthSDKHeaders/AM5Header.h +20 -0
  37. package/ios/Plugin/iHealthSDKHeaders/AMHeader.h +27 -0
  38. package/ios/Plugin/iHealthSDKHeaders/AMMacroFile.h +1171 -0
  39. package/ios/Plugin/iHealthSDKHeaders/BG1.h +53 -0
  40. package/ios/Plugin/iHealthSDKHeaders/BG1Controller.h +46 -0
  41. package/ios/Plugin/iHealthSDKHeaders/BG1S.h +64 -0
  42. package/ios/Plugin/iHealthSDKHeaders/BG1SController.h +25 -0
  43. package/ios/Plugin/iHealthSDKHeaders/BG3.h +83 -0
  44. package/ios/Plugin/iHealthSDKHeaders/BG3Controller.h +28 -0
  45. package/ios/Plugin/iHealthSDKHeaders/BG5.h +158 -0
  46. package/ios/Plugin/iHealthSDKHeaders/BG5Controller.h +28 -0
  47. package/ios/Plugin/iHealthSDKHeaders/BG5S.h +294 -0
  48. package/ios/Plugin/iHealthSDKHeaders/BG5SController.h +29 -0
  49. package/ios/Plugin/iHealthSDKHeaders/BGController.h +32 -0
  50. package/ios/Plugin/iHealthSDKHeaders/BGDevice.h +42 -0
  51. package/ios/Plugin/iHealthSDKHeaders/BGHeader.h +23 -0
  52. package/ios/Plugin/iHealthSDKHeaders/BGMacroFile.h +507 -0
  53. package/ios/Plugin/iHealthSDKHeaders/BP3.h +77 -0
  54. package/ios/Plugin/iHealthSDKHeaders/BP3Controller.h +27 -0
  55. package/ios/Plugin/iHealthSDKHeaders/BP3L.h +58 -0
  56. package/ios/Plugin/iHealthSDKHeaders/BP3LController.h +30 -0
  57. package/ios/Plugin/iHealthSDKHeaders/BP5.h +32 -0
  58. package/ios/Plugin/iHealthSDKHeaders/BP5C.h +131 -0
  59. package/ios/Plugin/iHealthSDKHeaders/BP5CController.h +25 -0
  60. package/ios/Plugin/iHealthSDKHeaders/BP5Controller.h +25 -0
  61. package/ios/Plugin/iHealthSDKHeaders/BP5S.h +97 -0
  62. package/ios/Plugin/iHealthSDKHeaders/BP5SController.h +27 -0
  63. package/ios/Plugin/iHealthSDKHeaders/BP5SRW.h +101 -0
  64. package/ios/Plugin/iHealthSDKHeaders/BP5SRWController.h +26 -0
  65. package/ios/Plugin/iHealthSDKHeaders/BP7.h +141 -0
  66. package/ios/Plugin/iHealthSDKHeaders/BP7Controller.h +25 -0
  67. package/ios/Plugin/iHealthSDKHeaders/BP7S.h +106 -0
  68. package/ios/Plugin/iHealthSDKHeaders/BP7SController.h +32 -0
  69. package/ios/Plugin/iHealthSDKHeaders/BPAV10Device.h +15 -0
  70. package/ios/Plugin/iHealthSDKHeaders/BPBTLEDevice.h +17 -0
  71. package/ios/Plugin/iHealthSDKHeaders/BPBV10Device.h +20 -0
  72. package/ios/Plugin/iHealthSDKHeaders/BPContinua.h +56 -0
  73. package/ios/Plugin/iHealthSDKHeaders/BPContinuaController.h +30 -0
  74. package/ios/Plugin/iHealthSDKHeaders/BPController.h +40 -0
  75. package/ios/Plugin/iHealthSDKHeaders/BPDevice.h +131 -0
  76. package/ios/Plugin/iHealthSDKHeaders/BPHeader.h +54 -0
  77. package/ios/Plugin/iHealthSDKHeaders/BPLoopMeasureSettingModel.h +120 -0
  78. package/ios/Plugin/iHealthSDKHeaders/BPM1AE.h +80 -0
  79. package/ios/Plugin/iHealthSDKHeaders/BPMacroFile.h +247 -0
  80. package/ios/Plugin/iHealthSDKHeaders/BPV24Device.h +16 -0
  81. package/ios/Plugin/iHealthSDKHeaders/BPV25Device.h +17 -0
  82. package/ios/Plugin/iHealthSDKHeaders/ConnectDeviceController.h +27 -0
  83. package/ios/Plugin/iHealthSDKHeaders/DFUController.h +160 -0
  84. package/ios/Plugin/iHealthSDKHeaders/DFUDeviceFirmwareInfo.h +56 -0
  85. package/ios/Plugin/iHealthSDKHeaders/DFUHeader.h +19 -0
  86. package/ios/Plugin/iHealthSDKHeaders/DFUMacro.h +264 -0
  87. package/ios/Plugin/iHealthSDKHeaders/DFUServerFirmwareInfo.h +48 -0
  88. package/ios/Plugin/iHealthSDKHeaders/ECG3.h +94 -0
  89. package/ios/Plugin/iHealthSDKHeaders/ECG3Controller.h +30 -0
  90. package/ios/Plugin/iHealthSDKHeaders/ECG3USB.h +145 -0
  91. package/ios/Plugin/iHealthSDKHeaders/ECG3USBController.h +31 -0
  92. package/ios/Plugin/iHealthSDKHeaders/ECGHeader.h +20 -0
  93. package/ios/Plugin/iHealthSDKHeaders/ECGMacroFile.h +84 -0
  94. package/ios/Plugin/iHealthSDKHeaders/HFSmartLink.h +88 -0
  95. package/ios/Plugin/iHealthSDKHeaders/HFSmartLinkDeviceInfo.h +14 -0
  96. package/ios/Plugin/iHealthSDKHeaders/HS2.h +64 -0
  97. package/ios/Plugin/iHealthSDKHeaders/HS2Controller.h +25 -0
  98. package/ios/Plugin/iHealthSDKHeaders/HS2S.h +399 -0
  99. package/ios/Plugin/iHealthSDKHeaders/HS2SController.h +27 -0
  100. package/ios/Plugin/iHealthSDKHeaders/HS3.h +63 -0
  101. package/ios/Plugin/iHealthSDKHeaders/HS3Controller.h +32 -0
  102. package/ios/Plugin/iHealthSDKHeaders/HS4.h +64 -0
  103. package/ios/Plugin/iHealthSDKHeaders/HS4Controller.h +26 -0
  104. package/ios/Plugin/iHealthSDKHeaders/HS5.h +141 -0
  105. package/ios/Plugin/iHealthSDKHeaders/HS5Controller.h +38 -0
  106. package/ios/Plugin/iHealthSDKHeaders/HSHeader.h +25 -0
  107. package/ios/Plugin/iHealthSDKHeaders/HSMacroFile.h +709 -0
  108. package/ios/Plugin/iHealthSDKHeaders/HealthHeader.h +67 -0
  109. package/ios/Plugin/iHealthSDKHeaders/HealthUser.h +126 -0
  110. package/ios/Plugin/iHealthSDKHeaders/IDOBindEnum.h +49 -0
  111. package/ios/Plugin/iHealthSDKHeaders/IDOBlueDataResponse.h +66 -0
  112. package/ios/Plugin/iHealthSDKHeaders/IDOBlueEnum.h +213 -0
  113. package/ios/Plugin/iHealthSDKHeaders/IDOBluetoothBaseModel.h +112 -0
  114. package/ios/Plugin/iHealthSDKHeaders/IDOBluetoothEngine.h +283 -0
  115. package/ios/Plugin/iHealthSDKHeaders/IDOBluetoothManager.h +166 -0
  116. package/ios/Plugin/iHealthSDKHeaders/IDOBluetoothServices.h +75 -0
  117. package/ios/Plugin/iHealthSDKHeaders/IDOCalculateBluetoothModel.h +263 -0
  118. package/ios/Plugin/iHealthSDKHeaders/IDOCommonMacro.h +89 -0
  119. package/ios/Plugin/iHealthSDKHeaders/IDODataExchangeModel.h +128 -0
  120. package/ios/Plugin/iHealthSDKHeaders/IDODataMigrationManager.h +79 -0
  121. package/ios/Plugin/iHealthSDKHeaders/IDOErrorCodeToStr.h +19 -0
  122. package/ios/Plugin/iHealthSDKHeaders/IDOFoundationCommand.h +1178 -0
  123. package/ios/Plugin/iHealthSDKHeaders/IDOGetInfoBluetoothModel.h +1924 -0
  124. package/ios/Plugin/iHealthSDKHeaders/IDOLogEnum.h +165 -0
  125. package/ios/Plugin/iHealthSDKHeaders/IDOPeripheralModel.h +59 -0
  126. package/ios/Plugin/iHealthSDKHeaders/IDORecordDeviceLog.h +56 -0
  127. package/ios/Plugin/iHealthSDKHeaders/IDOSetInfoBluetoothModel.h +1760 -0
  128. package/ios/Plugin/iHealthSDKHeaders/IDOSyncActivityDataModel.h +207 -0
  129. package/ios/Plugin/iHealthSDKHeaders/IDOSyncBpDataModel.h +191 -0
  130. package/ios/Plugin/iHealthSDKHeaders/IDOSyncEnum.h +316 -0
  131. package/ios/Plugin/iHealthSDKHeaders/IDOSyncGpsDataModel.h +133 -0
  132. package/ios/Plugin/iHealthSDKHeaders/IDOSyncHeartRateDataModel.h +442 -0
  133. package/ios/Plugin/iHealthSDKHeaders/IDOSyncManager.h +161 -0
  134. package/ios/Plugin/iHealthSDKHeaders/IDOSyncPressureDataModel.h +158 -0
  135. package/ios/Plugin/iHealthSDKHeaders/IDOSyncSleepDataModel.h +224 -0
  136. package/ios/Plugin/iHealthSDKHeaders/IDOSyncSpo2DataModel.h +175 -0
  137. package/ios/Plugin/iHealthSDKHeaders/IDOSyncSportDataModel.h +221 -0
  138. package/ios/Plugin/iHealthSDKHeaders/IDOSyncSwimDataModel.h +188 -0
  139. package/ios/Plugin/iHealthSDKHeaders/IDOTranEnum.h +93 -0
  140. package/ios/Plugin/iHealthSDKHeaders/IDOTransferFileManager.h +116 -0
  141. package/ios/Plugin/iHealthSDKHeaders/IDOWatchDialInfoModel.h +95 -0
  142. package/ios/Plugin/iHealthSDKHeaders/IDOWatchDialManager.h +75 -0
  143. package/ios/Plugin/iHealthSDKHeaders/IDOWeightBluetoothModel.h +124 -0
  144. package/ios/Plugin/iHealthSDKHeaders/IHSDKCloudUser.h +104 -0
  145. package/ios/Plugin/iHealthSDKHeaders/KN550BT.h +115 -0
  146. package/ios/Plugin/iHealthSDKHeaders/KN550BTController.h +32 -0
  147. package/ios/Plugin/iHealthSDKHeaders/ManageDeviceController.h +34 -0
  148. package/ios/Plugin/iHealthSDKHeaders/NT13B.h +33 -0
  149. package/ios/Plugin/iHealthSDKHeaders/NT13BController.h +28 -0
  150. package/ios/Plugin/iHealthSDKHeaders/NT13BHeader.h +16 -0
  151. package/ios/Plugin/iHealthSDKHeaders/NT13BMacroFile.h +34 -0
  152. package/ios/Plugin/iHealthSDKHeaders/PO1.h +82 -0
  153. package/ios/Plugin/iHealthSDKHeaders/PO1Controller.h +29 -0
  154. package/ios/Plugin/iHealthSDKHeaders/PO3.h +96 -0
  155. package/ios/Plugin/iHealthSDKHeaders/PO3Controller.h +29 -0
  156. package/ios/Plugin/iHealthSDKHeaders/POHeader.h +20 -0
  157. package/ios/Plugin/iHealthSDKHeaders/POMacroFile.h +142 -0
  158. package/ios/Plugin/iHealthSDKHeaders/PT3SBT.h +167 -0
  159. package/ios/Plugin/iHealthSDKHeaders/PT3SBTController.h +27 -0
  160. package/ios/Plugin/iHealthSDKHeaders/PT3SBTMacroFile.h +92 -0
  161. package/ios/Plugin/iHealthSDKHeaders/SDKFlowUpdateDevice.h +196 -0
  162. package/ios/Plugin/iHealthSDKHeaders/SDKInfo.h +30 -0
  163. package/ios/Plugin/iHealthSDKHeaders/SDKUpdateDevice.h +235 -0
  164. package/ios/Plugin/iHealthSDKHeaders/ScanDeviceController.h +47 -0
  165. package/ios/Plugin/iHealthSDKHeaders/THV3.h +104 -0
  166. package/ios/Plugin/iHealthSDKHeaders/THV3Controller.h +30 -0
  167. package/ios/Plugin/iHealthSDKHeaders/THV3Macro.h +17 -0
  168. package/ios/Plugin/iHealthSDKHeaders/TS28B.h +26 -0
  169. package/ios/Plugin/iHealthSDKHeaders/TS28BController.h +142 -0
  170. package/ios/Plugin/iHealthSDKHeaders/TS28BHeader.h +15 -0
  171. package/ios/Plugin/iHealthSDKHeaders/iHealthHS6.h +174 -0
  172. package/ios/Plugin/ihealth.swift +8 -0
  173. package/ios/Plugin/ihealthPlugin.h +10 -0
  174. package/ios/Plugin/ihealthPlugin.m +16 -0
  175. package/ios/Plugin/ihealthPlugin.swift +1502 -0
  176. package/ios/Plugin/libiHealthSDK2.7.8.a +0 -0
  177. package/ios/Plugin/test.m +9 -0
  178. package/package.json +78 -0
@@ -0,0 +1,1502 @@
1
+ import Foundation
2
+ import CoreBluetooth
3
+ import Capacitor
4
+
5
+ /**
6
+ * Please read the Capacitor iOS Plugin Development Guide
7
+ * here: https://capacitorjs.com/docs/plugins/ios
8
+ */
9
+ @objc(ihealthPlugin)
10
+ public class ihealthPlugin: CAPPlugin,CBCentralManagerDelegate,BG5SDelegate {
11
+ private var centralManager: CBCentralManager?
12
+ private var deviceType:HealthDeviceType?
13
+ private var deviceMacAddress:String?
14
+
15
+ var myBpDevice:KN550BT?
16
+ var myBP5SDevice:BP5S?
17
+ var myBBG5SDevice:BG5S?
18
+ var myPO3Device:PO3?
19
+ var myPT3SBTDevice:PT3SBT?
20
+ var myHS4SDevice:HS4?
21
+ var myHS2SDevice:HS2S?
22
+ var hs2sDataArray:[Any]?
23
+ var hs2sUserCount = 0
24
+ var userIdArr:[Data] = []
25
+ var timerCount = 0
26
+ var timer:Timer?
27
+ var healthUser:HealthUser?
28
+ var onlinePO3DeviceData : [AnyHashable : Any]?
29
+
30
+ private let implementation = ihealth()
31
+
32
+ override public func load() {
33
+ print("iHealthScanPlugin loaded")
34
+ }
35
+ deinit {
36
+ print("iHealthScanPlugin deinit called")
37
+ removeDeviceObserver()
38
+ }
39
+ public func centralManagerDidUpdateState(_ central: CBCentralManager) {
40
+ switch central.state {
41
+ case .unauthorized:
42
+ switch central.authorization {
43
+ case .allowedAlways:
44
+ print("allowedAlways")
45
+ case .denied:
46
+ print("denied")
47
+ case .restricted:
48
+ print("restricted")
49
+ case .notDetermined:
50
+ print("notDetermined")
51
+ }
52
+ case .unknown:
53
+ fallthrough
54
+ case .unsupported:
55
+ print("unsupported")
56
+ case .poweredOn:
57
+ print("poweredOn")
58
+ case .poweredOff:
59
+ print("poweredOff")
60
+ case .resetting:
61
+ print("resetting")
62
+ @unknown default:
63
+ break
64
+ }
65
+ }
66
+ @objc func initialiseCentralManager(_ call: CAPPluginCall) {
67
+ centralManager = CBCentralManager(delegate: self, queue: nil)
68
+ call.resolve(["value":"Success"])
69
+ }
70
+ @objc func isBluetoothEnabled(_ call: CAPPluginCall) {
71
+ //centralManager = CBCentralManager(delegate: self, queue: nil)
72
+ var isBleEnabled = false
73
+ if let centralManager = self.centralManager{
74
+ isBleEnabled = centralManager.state == CBManagerState.poweredOn
75
+ }else{
76
+ isBleEnabled = false
77
+ }
78
+ call.resolve(["value":isBleEnabled])
79
+ }
80
+
81
+ @objc func authoriseiHealthSdk(_ call: CAPPluginCall){ //com_inlogic_Test_ios
82
+
83
+
84
+ // if let url = Bundle.main.url(forResource:"com_test_EvolMobile_ios", withExtension: "pem") {
85
+ if let url = Bundle.main.url(forResource:"managemyhealth_co_nz_ios", withExtension: "pem") {
86
+ do {
87
+ let data = try Data(contentsOf:url)
88
+ IHSDKCloudUser.commandGetSDKUserInstance().commandSDKUserValidation(withLicense: data) { deviceAccessArray in
89
+ print("device supported \(deviceAccessArray)")
90
+ } userValidationSuccess: { UserAuthenResult in
91
+ call.resolve(["value":"Success"])
92
+
93
+ } disposeErrorBlock: { errorID in
94
+
95
+ var errorMsg = ""
96
+ switch (errorID) {
97
+ case UserAuthen_InputError:
98
+ errorMsg = "Input error"
99
+ break
100
+ case UserAuthen_CertificateExpired:
101
+ errorMsg = "Certificate expired"
102
+ break
103
+ case UserAuthen_InvalidCertificate:
104
+ errorMsg = "Invalid certificate"
105
+ break
106
+ default:
107
+ break
108
+ }
109
+ call.resolve(["value":"Error","message":errorMsg])
110
+
111
+ }
112
+ } catch {
113
+ print(error)
114
+ }
115
+ }
116
+ }
117
+ @objc func scanDiscover(_ call: CAPPluginCall) {
118
+ guard let options = call.options as NSDictionary? as? [String: Any] else { return }
119
+
120
+ let deviceModel = options["deviceModel"] as? String ?? ""
121
+
122
+ switch deviceModel {
123
+ case "KN-550BT":
124
+ self.selectBPTrackAndScan()
125
+ break
126
+ case "BP5S":
127
+ self.selectBP5SAndScan()
128
+ break
129
+ case "BG5S":
130
+ self.selectBG5SAndScan()
131
+ break
132
+ case "PO3":
133
+ self.selectPO3AndScan()
134
+ break
135
+ case "PT3SBT":
136
+ self.selectPT3SBTAndScan()
137
+ break
138
+ case "HS4S":
139
+ self.selectHS4SAndScan()
140
+ break
141
+ case "HS2S":
142
+ self.selectHS2SAndScan()
143
+ break
144
+ default:
145
+ break
146
+ }
147
+ // self.bridge?.viewController?.showToast(message: "selected device:\(deviceModel)")
148
+
149
+ //
150
+ // DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
151
+ // //call any function
152
+ // let data = ["deviceMacAddress": "123sk40049", "deviceName": "HS2S"]
153
+ // self.notifyListeners("deviceDiscover", data: data)
154
+ // DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
155
+ // //call any function
156
+ // let data = ["deviceMacAddress": "123sk40049", "deviceName": "HS2S"]
157
+ // self.notifyListeners("deviceConnect", data: data)
158
+ // }
159
+ // }
160
+
161
+ call.resolve([
162
+ "success": "success"
163
+ ])
164
+ }
165
+ @objc func connectDevice(_ call: CAPPluginCall) {
166
+ if let device = deviceType {
167
+ ScanDeviceController.commandGetInstance().commandStopScanDeviceType(device)
168
+
169
+ }
170
+ guard let options = call.options as NSDictionary? as? [String: Any] else { return }
171
+ let paramDeviceModel = options["deviceModel"] as? String ?? ""
172
+ let paramDeviceMacAddress = options["deviceMacAddress"] as? String ?? ""
173
+
174
+
175
+
176
+ switch paramDeviceModel {
177
+ case "KN-550BT":
178
+ self.removeDeviceObserver()
179
+ self.deviceType = HealthDeviceType._KN550BT
180
+ self.addObserverWith(discover: KN550BTDiscover, connect: KN550BTConnectNoti, disconnect: KN550BTDisConnectNoti, connectfail: KN550BTConnectFailed)
181
+
182
+ KN550BTController.share()
183
+ break
184
+ case "BP5S":
185
+ self.removeDeviceObserver()
186
+ self.deviceType = HealthDeviceType._BP5S
187
+ addObserverWith(discover: BP5SDiscover, connect: BP5SConnectNoti, disconnect: BP5SDisConnectNoti, connectfail: BP5SConnectFailed)
188
+ BP5SController.shared()
189
+ break
190
+ case "BG5S":
191
+ self.removeDeviceObserver()
192
+ self.deviceType = HealthDeviceType._BG5S
193
+ self.addObserverWith(discover: kNotificationNameBG5SDidDiscover, connect: kNotificationNameBG5SConnectSuccess, disconnect: kNotificationNameBG5SDidDisConnect, connectfail: kNotificationNameBG5SConnectFail)
194
+
195
+ BG5SController.shared()
196
+ break
197
+ case "PT3SBT":
198
+ self.removeDeviceObserver()
199
+ self.deviceType = HealthDeviceType._PT3SBT
200
+ self.addObserverWith(discover: PT3SBTDiscover, connect: PT3SBTConnectNoti, disconnect: PT3SBTDisConnectNoti, connectfail: PT3SBTConnectFailed)
201
+
202
+ PT3SBTController.shareIHPT()
203
+ discoverDevice()
204
+ break
205
+ case "PO3":
206
+ self.removeDeviceObserver()
207
+ self.deviceType = HealthDeviceType._PO3
208
+ self.addObserverWith(discover: PO3Discover, connect: PO3ConnectNoti, disconnect: PO3DisConnectNoti, connectfail: PO3ConnectFailed)
209
+
210
+ PO3Controller.shareIHPO()
211
+ break
212
+ case "HS4S":
213
+ self.removeDeviceObserver()
214
+ self.deviceType = HealthDeviceType._HS4
215
+ self.addObserverWith(discover: HS4Discover, connect: HS4ConnectNoti, disconnect: HS4DisConnectNoti, connectfail: HS4ConnectFailed)
216
+
217
+ HS4Controller.shareIHHs4()
218
+ break
219
+ case "HS2S":
220
+ self.removeDeviceObserver()
221
+ self.deviceType = HealthDeviceType._HS2S
222
+ addObserverWith(discover: HS2SDiscover, connect: HS2SConnectNoti, disconnect: HS2SDisConnectNoti, connectfail: HS2SConnectFailed)
223
+ HS2SController.shareIHHS()
224
+ break
225
+ default:
226
+ break
227
+ }
228
+ self.deviceMacAddress = paramDeviceMacAddress
229
+ if(paramDeviceModel != "PT3SBT"){
230
+ if let device = self.deviceType, let serialNumber = self.deviceMacAddress {
231
+
232
+ ConnectDeviceController.commandGetInstance().commandContectDevice(with: device, andSerialNub: serialNumber)
233
+ }
234
+ }
235
+
236
+
237
+ call.resolve([
238
+ "success": "success"
239
+ ])
240
+ }
241
+
242
+
243
+ func selectBPTrackAndScan() {
244
+ removeDeviceObserver()
245
+ deviceType = HealthDeviceType._KN550BT
246
+
247
+ addObserverWith(discover: KN550BTDiscover, connect: KN550BTConnectNoti, disconnect: KN550BTDisConnectNoti, connectfail: KN550BTConnectFailed)
248
+
249
+ KN550BTController.share()
250
+
251
+ discoverDevice()
252
+ }
253
+ func selectBP5SAndScan() {
254
+ removeDeviceObserver()
255
+ deviceType = HealthDeviceType._BP5S
256
+
257
+ addObserverWith(discover: BP5SDiscover, connect: BP5SConnectNoti, disconnect: BP5SDisConnectNoti, connectfail: BP5SConnectFailed)
258
+
259
+ BP5SController.shared()
260
+
261
+ discoverDevice()
262
+ }
263
+ func selectBG5SAndScan(){
264
+ removeDeviceObserver()
265
+
266
+ deviceType = HealthDeviceType._BG5S
267
+ addObserverWith(discover: kNotificationNameBG5SDidDiscover, connect: kNotificationNameBG5SConnectSuccess, disconnect: kNotificationNameBG5SDidDisConnect, connectfail: kNotificationNameBG5SConnectFail)
268
+
269
+ BG5SController.shared()
270
+
271
+ discoverDevice()
272
+ }
273
+
274
+ func selectPO3AndScan() {
275
+ removeDeviceObserver()
276
+ deviceType = HealthDeviceType._PO3
277
+ addObserverWith(discover: PO3Discover, connect: PO3ConnectNoti, disconnect: PO3DisConnectNoti, connectfail: PO3ConnectFailed)
278
+
279
+ PO3Controller.shareIHPO()
280
+
281
+ discoverDevice()
282
+ }
283
+
284
+ func selectPT3SBTAndScan() {
285
+ removeDeviceObserver()
286
+ deviceType = HealthDeviceType._PT3SBT
287
+ addObserverWith(discover: PT3SBTDiscover, connect: PT3SBTConnectNoti, disconnect: PT3SBTDisConnectNoti, connectfail: PT3SBTConnectFailed)
288
+
289
+ PT3SBTController.shareIHPT()
290
+
291
+ discoverDevice()
292
+ }
293
+
294
+ func selectHS4SAndScan() {
295
+ removeDeviceObserver()
296
+ deviceType = HealthDeviceType._HS4
297
+ addObserverWith(discover: HS4Discover, connect: HS4ConnectNoti, disconnect: HS4DisConnectNoti, connectfail: HS4ConnectFailed)
298
+
299
+ HS4Controller.shareIHHs4()
300
+
301
+ discoverDevice()
302
+ }
303
+ func selectHS2SAndScan() {
304
+ removeDeviceObserver()
305
+ deviceType = HealthDeviceType._HS2S
306
+ addObserverWith(discover: HS2SDiscover, connect: HS2SConnectNoti, disconnect: HS2SDisConnectNoti, connectfail: HS2SConnectFailed)
307
+
308
+ HS2SController.shareIHHS()
309
+
310
+ discoverDevice()
311
+ }
312
+ func discoverDevice() {
313
+
314
+ if let device = deviceType {
315
+
316
+ ScanDeviceController.commandGetInstance().commandScanDeviceType(device)
317
+ }
318
+ }
319
+
320
+ func removeDeviceObserver(){
321
+
322
+
323
+ NotificationCenter.default.removeObserver(self)
324
+ }
325
+
326
+ func addObserverWith(discover:String,connect:String,disconnect:String,connectfail:String) {
327
+
328
+
329
+ NotificationCenter.default.addObserver(
330
+ self,
331
+ selector: #selector(self.deviceDiscover),
332
+ name: Notification.Name(discover),
333
+ object: nil)
334
+
335
+ NotificationCenter.default.addObserver(
336
+ self,
337
+ selector: #selector(self.deviceConnect),
338
+ name: Notification.Name(connect),
339
+ object: nil)
340
+
341
+ NotificationCenter.default.addObserver(
342
+ self,
343
+ selector: #selector(self.deviceDisconnect),
344
+ name: Notification.Name(disconnect),
345
+ object: nil)
346
+ NotificationCenter.default.addObserver(
347
+ self,
348
+ selector: #selector(self.deviceConnectFail),
349
+ name: Notification.Name(connectfail),
350
+ object: nil)
351
+ }
352
+
353
+ @objc func deviceDiscover(notification:NSNotification) {
354
+
355
+
356
+ let notifyObject = notification.userInfo
357
+ if let serialNumber = notifyObject?["SerialNumber"] as? String, let deviceName = notifyObject?["DeviceName"] as? String{
358
+
359
+ let data = ["deviceMacAddress": serialNumber, "deviceName": deviceName == "HS4" ? "HS4S" : deviceName]
360
+ self.notifyListeners("deviceDiscover", data: data)
361
+ self.deviceMacAddress = serialNumber
362
+
363
+ self.connectWithMedicalDevice()
364
+ }else if let serialNumber = notifyObject?["ID"] as? String{
365
+ let data = ["deviceMacAddress": serialNumber]
366
+ self.notifyListeners("deviceDiscover", data: data)
367
+ self.deviceMacAddress = serialNumber
368
+
369
+ self.connectWithMedicalDevice()
370
+ }
371
+
372
+
373
+ }
374
+ func connectWithMedicalDevice() {
375
+ if let device = self.deviceType , let serialNumber = self.deviceMacAddress {
376
+ ConnectDeviceController.commandGetInstance().commandContectDevice(with: device, andSerialNub: serialNumber)
377
+ }
378
+ }
379
+ @objc func deviceConnectFail(notification:NSNotification) {
380
+
381
+
382
+ guard let userInfo = notification.userInfo as NSDictionary? as? [String: Any] else {return}
383
+
384
+ self.discoverDevice()
385
+ self.notifyListeners("deviceConnectFail", data: userInfo)
386
+ }
387
+
388
+ @objc func deviceDisconnect(notification:NSNotification) {
389
+ let notifyObject = notification.userInfo
390
+
391
+
392
+ guard let userInfo = notification.userInfo as NSDictionary? as? [String: Any] else {return}
393
+ self.notifyListeners("deviceDisconnect", data: userInfo)
394
+ //self.notifyListeners("deviceDisconnect", data: notifyObject)
395
+ }
396
+
397
+ @objc func deviceConnect(notification:NSNotification) {
398
+ if let device = deviceType {
399
+ ScanDeviceController.commandGetInstance().commandStopScanDeviceType(device)
400
+
401
+ }
402
+ let notifyObject = notification.userInfo
403
+
404
+ guard let userInfo = notification.userInfo as NSDictionary? as? [String: Any] else {return}
405
+ self.notifyListeners("deviceConnect", data: userInfo)
406
+
407
+ }
408
+
409
+ //device connected methods
410
+
411
+
412
+ @objc func getConnectedDeviceInstance(_ call: CAPPluginCall) {
413
+ guard let options = call.options as NSDictionary? as? [String: Any] else { return }
414
+ let deviceModel = options["deviceModel"] as? String ?? ""
415
+ deviceMacAddress = options["deviceMacAddress"] as? String ?? ""
416
+ switch deviceModel {
417
+ case "KN-550BT":
418
+ self.deviceType = HealthDeviceType._KN550BT
419
+ getBPDeviceInstances()
420
+ break
421
+ case "BP5S":
422
+ self.deviceType = HealthDeviceType._BP5S
423
+ getBP5SDeviceInstances()
424
+ break
425
+ case "BG5S":
426
+ self.deviceType = HealthDeviceType._BG5S
427
+ getBG5SInstances()
428
+ break
429
+ case "PO3":
430
+ self.deviceType = HealthDeviceType._PO3
431
+ getPO3Instances()
432
+ break
433
+ case "PT3SBT":
434
+ self.deviceType = HealthDeviceType._PT3SBT
435
+ getPT3SBTInstances()
436
+ break
437
+ case "HS4S":
438
+ self.deviceType = HealthDeviceType._HS4
439
+ getHS4SInstances()
440
+ break
441
+ case "HS2S":
442
+ deviceType = HealthDeviceType._HS2S
443
+ getHS2SInstances()
444
+ break
445
+ default:
446
+ break
447
+ }
448
+ }
449
+ @objc func getDeviceOfflineData(_ call: CAPPluginCall) {
450
+
451
+
452
+ // self.hs2sDataArray = [
453
+ // ["HS2SMeasureTS":Date(),"HS2SWeigthResult":"68","HS2SDataID":"123dcf456"],
454
+ // ["HS2SMeasureTS":Date(),"HS2SWeigthResult":"69","HS2SDataID":"123dcf456"],
455
+ // ["HS2SMeasureTS":Date(),"HS2SWeigthResult":"64","HS2SDataID":"123dcf456"],
456
+ // ["HS2SMeasureTS":Date(),"HS2SWeigthResult":"56","HS2SDataID":"123dcf456"]]
457
+ // DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
458
+ // let userData = ["result": self.hs2sDataArray, "deviceModel": "HS2S", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
459
+ //
460
+ // self.notifyListeners("deviceDatafound", data: userData)
461
+ // }
462
+ switch deviceType {
463
+ case ._KN550BT:
464
+ self.getBPOfflineData()
465
+ break
466
+ case ._BP5S:
467
+ self.getBP5SOfflineData()
468
+ break
469
+ case ._BG5S:
470
+ self.getBG5SOfflineData()
471
+ break
472
+ case ._PO3:
473
+ self.getPO3OfflineData()
474
+ break
475
+ case ._PT3SBT:
476
+ self.getPT3SBSOfflineData()
477
+ break
478
+ case ._HS4:
479
+ self.getHS4SOfflineData()
480
+ break
481
+ case ._HS2S:
482
+ self.getHS2SOfflineData()
483
+ break
484
+ default:
485
+ break
486
+ }
487
+ }
488
+ @objc func disconnectDevice(_ call: CAPPluginCall) {
489
+ switch deviceType {
490
+ case ._KN550BT:
491
+ disconnectBPTrack()
492
+ break
493
+ case ._BP5S:
494
+ disconnectBP5S()
495
+ break
496
+ case ._BG5S:
497
+ disconnectBG5S()
498
+ break
499
+ case ._PO3:
500
+ disconnectPO3()
501
+ break
502
+ case ._PT3SBT:
503
+ disconnectPT3SBT()
504
+ break
505
+ case ._HS4:
506
+ disconnectHS4S()
507
+ break
508
+ case ._HS2S:
509
+ disconnectHS2S()
510
+ break
511
+ default:
512
+ break
513
+ }
514
+ }
515
+ func deleteDeviceData(_ call: CAPPluginCall){
516
+ switch deviceType {
517
+ case ._KN550BT:
518
+ deleteDataFromBPTrack()
519
+ break
520
+ case ._BP5S:
521
+ deleteDataFromBP5S()
522
+ break
523
+ case ._BG5S:
524
+ deleteDataFromBG5S()
525
+ break
526
+ case ._PO3:
527
+ deleteDataFromPO3()
528
+ break
529
+ case ._PT3SBT:
530
+ deleteDataFromPT3SBT()
531
+ break
532
+ case ._HS4:
533
+ deleteDataFromHS4S()
534
+ break
535
+ case ._HS2S:
536
+ deleteDataFromHS2S()
537
+ break
538
+ default:
539
+ break
540
+ }
541
+ }
542
+ // MARK: Disconnect Device Methods
543
+ func disconnectBG5S() {
544
+
545
+ myBBG5SDevice?.disconnectDevice()
546
+ }
547
+
548
+ func disconnectBPTrack() {
549
+
550
+
551
+ myBpDevice?.commandDisconnectDevice()
552
+ }
553
+ func disconnectBP5S() {
554
+
555
+ myBP5SDevice?.commandDisconnectDevice()
556
+ }
557
+ func disconnectPO3() {
558
+
559
+ myPO3Device?.commandDisconnect({ isPO3Disconnected in
560
+
561
+ }, withErrorBlock: { error in
562
+
563
+ })
564
+ }
565
+
566
+ func disconnectPT3SBT() {
567
+
568
+ myPT3SBTDevice?.commandDisconnectDevice()
569
+ }
570
+
571
+ func disconnectHS4S() {
572
+ myHS4SDevice?.commandDisconnectDevice()
573
+ }
574
+ func disconnectHS2S() {
575
+
576
+ myHS2SDevice?.commandDisconnectDevice()
577
+ }
578
+ // MARK: Delete Offline Data Methods
579
+ func deleteDataFromBPTrack(){
580
+ self.myBpDevice?.commandDeleteDataSuccessBlock({
581
+
582
+ }, errorBlock: { err in
583
+
584
+ })
585
+ }
586
+ func deleteDataFromBP5S(){
587
+ self.myBP5SDevice?.commandDeleteDataSuccessBlock({
588
+
589
+ }, errorBlock: { err in
590
+
591
+ })
592
+ }
593
+ func deleteDataFromBG5S(){
594
+ self.myBBG5SDevice?.deleteRecord(successBlock: {
595
+
596
+ }, errorBlock: { err, str in
597
+
598
+ })
599
+ }
600
+ func deleteDataFromPO3(){
601
+
602
+ }
603
+ func deleteDataFromPT3SBT(){
604
+ self.myPT3SBTDevice?.commandDeleteMemorryData({ isSuccess in
605
+
606
+ }, disposeErrorBlock: { err in
607
+
608
+ })
609
+ }
610
+ func deleteDataFromHS4S(){
611
+
612
+ }
613
+ func deleteDataFromHS2S(){
614
+ //self.myHS2SDevice.dele
615
+ }
616
+
617
+ // MARK: Get Instances Methods
618
+ func getBPDeviceInstances() {
619
+
620
+ if let devices = KN550BTController.share().getAllCurrentKN550BTInstace() as? [KN550BT] {
621
+ for device in devices {
622
+ if(deviceMacAddress == device.serialNumber) {
623
+ myBpDevice = device
624
+ }
625
+ }
626
+ }
627
+ myBpDevice?.commandFunction({ data in
628
+
629
+ }, errorBlock: { error in
630
+
631
+ })
632
+ }
633
+ func getBP5SDeviceInstances() {
634
+
635
+ if let devices = BP5SController.shared().getAllCurrentInstance() as? [BP5S]{
636
+ for device in devices {
637
+ if(deviceMacAddress == device.serialNumber) {
638
+
639
+ myBP5SDevice = device
640
+ }
641
+ }
642
+ }
643
+ self.myBP5SDevice?.commandFunction({ data in
644
+
645
+ }, errorBlock: { err in
646
+
647
+ })
648
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
649
+ self.startBP5SMeasurement()
650
+ }
651
+ }
652
+ func getBG5SInstances() {
653
+
654
+ if let devices = BG5SController.shared().getAllCurrentInstace() as? [BG5S] {
655
+ for device in devices {
656
+ if(deviceMacAddress == device.serialNumber) {
657
+ myBBG5SDevice = device
658
+ self.myBBG5SDevice?.delegate = self;
659
+ }
660
+ }
661
+ }
662
+ let timezone = Double(NSTimeZone.system.secondsFromGMT()) / 3600.0
663
+
664
+ myBBG5SDevice?.setTimeWith(Date(), timezone: Float(timezone), successBlock: {
665
+ print(" succesfully set date ")
666
+ }, errorBlock: { error, msg in
667
+
668
+ })
669
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
670
+ self.startBG5SMeasurement()
671
+ }
672
+ }
673
+
674
+ func getPO3Instances() {
675
+
676
+
677
+ if let devices = PO3Controller.shareIHPO().getAllCurrentPO3Instace() as? [PO3] {
678
+ for device in devices {
679
+ if(deviceMacAddress == device.serialNumber) {
680
+
681
+ myPO3Device = device
682
+ }
683
+ }
684
+ }
685
+ myPO3Device?.commandSyncTime({ istimesynced in
686
+
687
+ }, withErrorBlock: { error in
688
+
689
+ })
690
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
691
+ self.startPO3Measurement()
692
+ }
693
+
694
+ }
695
+
696
+ func getPT3SBTInstances() {
697
+
698
+ if let devices = PT3SBTController.shareIHPT().getAllCurrentPT3SBTInstace() as? [PT3SBT] {
699
+ for device in devices {
700
+
701
+ if let macAddress = deviceMacAddress{
702
+ if(macAddress == device.serialNumber) {
703
+ myPT3SBTDevice = device
704
+
705
+ }
706
+ }
707
+
708
+ }
709
+ }
710
+ myPT3SBTDevice?.commandFunction({ data in
711
+ }, disposeErrorBlock: { error in
712
+ })
713
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
714
+ self.startPT3SBTMeasurement()
715
+ }
716
+
717
+ }
718
+
719
+ func getHS4SInstances() {
720
+
721
+ if let devices = HS4Controller.shareIHHs4().getAllCurrentHS4Instace() as? [HS4]{
722
+ for device in devices {
723
+ if(deviceMacAddress == device.deviceID) {
724
+ myHS4SDevice = device
725
+ }
726
+ }
727
+ }
728
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
729
+ self.startHS4SMeasurement()
730
+ }
731
+ }
732
+ func getHS2SInstances() {
733
+
734
+
735
+ if let devices = HS2SController.shareIHHS().getAllCurrentHS2SInstace() as? [HS2S]{
736
+ for device in devices {
737
+ if(deviceMacAddress == device.serialNumber) {
738
+
739
+ myHS2SDevice = device
740
+ }
741
+ }
742
+ }
743
+ self.myHS2SDevice?.commandGetDeviceInfo({ data in
744
+
745
+ }, diaposeErrorBlock: { err in
746
+
747
+ })
748
+
749
+ self.myHS2SDevice?.commandGetUserInfo({ userinfo in
750
+ self.healthUser = HealthUser()
751
+ if let userInfoArr = userinfo?["UserInfo"] as? [[String:Any]] {
752
+ if(userInfoArr.count == 0){
753
+ let userId = "iHealth123456786"
754
+ self.healthUser?.hs2SUserID = userId.data(using: .utf8)
755
+ self.healthUser?.createTS = Date().currentTimeMillis()
756
+
757
+ self.healthUser?.weight = 85;
758
+
759
+ self.healthUser?.age = 20;
760
+
761
+ self.healthUser?.height = 100;
762
+
763
+ self.healthUser?.sex = UserSex_Male;
764
+
765
+ self.healthUser?.impedanceMark = HS2SImpedanceMark_YES;
766
+
767
+ self.healthUser?.fitnessMark = HS2SFitnessMark_YES;
768
+ if let user = self.healthUser{
769
+ self.myHS2SDevice?.commandUpdateUserInfo(with: user, result: { isSuccess in
770
+
771
+ }, diaposeErrorBlock: { err in
772
+
773
+ })
774
+ }
775
+
776
+ }else{
777
+ for (index,item) in userInfoArr.enumerated() {
778
+ if let userID = item["UserInfo_ID"] as? Data{
779
+ self.healthUser?.hs2SUserID = userID
780
+ }
781
+
782
+ if let createTime = item["create_time"] as? Int,let weight = item["weight"] as? NSNumber,let gender = item["gender"] as? Int,let age = item["age"] as? NSNumber,let height = item["height"] as? NSNumber,let impedance = item["impedance"] as? Int{
783
+
784
+ self.healthUser?.createTS = createTime
785
+
786
+ self.healthUser?.weight = weight;
787
+
788
+ self.healthUser?.age = age;
789
+
790
+ self.healthUser?.height = height;
791
+
792
+ self.healthUser?.sex = gender == 1 ? UserSex_Male : UserSex_Female
793
+
794
+ self.healthUser?.impedanceMark = impedance == 1 ? HS2SImpedanceMark_YES : HS2SImpedanceMark_NO
795
+
796
+ self.healthUser?.fitnessMark = HS2SFitnessMark_YES
797
+ }
798
+ }
799
+ }
800
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
801
+ self.startHS2SMeasurement()
802
+ }
803
+ }
804
+
805
+ }, diaposeErrorBlock: { error in
806
+
807
+ })
808
+
809
+ }
810
+ // MARK: Get Offline Data Methods
811
+ func getBG5SOfflineData() {
812
+
813
+
814
+
815
+ myBBG5SDevice?.queryRecord(successBlock: { data in
816
+ guard let deviceDataArr = data else{
817
+ let userData = ["count": 0] as [String : Any]
818
+ self.notifyListeners("dataNotFound", data: userData)
819
+ return
820
+ }
821
+
822
+ var userdata:[Any] = []
823
+ for item in deviceDataArr {
824
+ if let deviceData = item as? BG5SRecordModel {
825
+ userdata.append(["date": deviceData.measureDate, "value": deviceData.value, "dataID": deviceData.dataID])
826
+
827
+ }
828
+ }
829
+
830
+
831
+
832
+ let userData = ["result": userdata, "deviceModel": "BG5S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
833
+ self.notifyListeners("deviceDatafound", data: userData)
834
+
835
+ }, errorBlock: { error, msg in
836
+
837
+ })
838
+ }
839
+
840
+ func getBPOfflineData() {
841
+ myBpDevice?.commandTransferMemoryData(totalCount: { count in
842
+
843
+ if(count == 0) {
844
+ let userData = ["count": count] as [String : Any]
845
+ self.notifyListeners("dataNotFound", data: userData)
846
+ }
847
+ }, progress: { progress in
848
+
849
+ let userData = ["progress": progress] as [String : Any]
850
+ self.notifyListeners("progress", data: userData)
851
+ }, dataArray: { data in
852
+
853
+ guard let deviceDataArr = data else {
854
+ return
855
+ }
856
+
857
+
858
+ let userData = ["result": deviceDataArr, "deviceModel": "KN-550BT", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
859
+ self.notifyListeners("deviceDatafound", data: userData)
860
+
861
+ }, errorBlock: { error in
862
+
863
+ self.BP550Error(errorID: error)
864
+ })
865
+ }
866
+ func getBP5SOfflineData() {
867
+
868
+
869
+ var bp5sData: [Any] = []
870
+ var isDataProgress = 0
871
+ //self.myBP5SDevice.comm
872
+
873
+ self.myBP5SDevice?.commandTransferMemoryTotalCount({ totalCount in
874
+
875
+ if(totalCount == 0){
876
+ let userData = ["count": totalCount] as [String : Any]
877
+ self.notifyListeners("dataNotFound", data: userData)
878
+ }else{
879
+
880
+
881
+ self.myBP5SDevice?.commandTransferMemoryData(totalCount: { count in
882
+
883
+
884
+ if(count == 0) {
885
+ let userData = ["count": count] as [String : Any]
886
+ self.notifyListeners("dataNotFound", data: userData)
887
+ }
888
+ }, progress: { progress in
889
+
890
+
891
+ if let progressStat = progress{
892
+ isDataProgress = Int(progressStat)
893
+
894
+ if(isDataProgress == 1 || isDataProgress == 100){
895
+
896
+ let userData = ["result": bp5sData, "deviceModel": "BP5S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
897
+ self.notifyListeners("deviceDatafound", data: userData)
898
+
899
+ }
900
+ }
901
+
902
+ }, dataArray: { data in
903
+
904
+
905
+ if let deviceDataArr = data{
906
+ // for deviceData in deviceDataArr{
907
+ // bp5sData.append(deviceData)
908
+ // }
909
+ bp5sData.append(contentsOf: deviceDataArr)
910
+ }
911
+
912
+
913
+
914
+ }, errorBlock: { error in
915
+ self.BP550Error(errorID: error)
916
+ })
917
+ }
918
+ }, errorBlock: { err in
919
+ self.BP550Error(errorID: err)
920
+ })
921
+
922
+
923
+ }
924
+ func getPO3OfflineData() {
925
+ var PO3DeviceData: [Any] = []
926
+ myPO3Device?.commandOfflineDataCount({ count in
927
+
928
+
929
+ if(count == 0) {
930
+
931
+ let userData = ["count": count] as [String : Any]
932
+ self.notifyListeners("dataNotFound", data: userData)
933
+ }
934
+ }, withOfflineData: { data in
935
+
936
+ guard let deviceDataArr = data else {
937
+ return
938
+ }
939
+ PO3DeviceData.append(deviceDataArr)
940
+ }, withOfflineWaveData: { data in
941
+
942
+ }, withFinishMeasure: { isMesureFinish in
943
+ print(" isMesureFinish: \(isMesureFinish)")
944
+
945
+ let userData = ["result": PO3DeviceData, "deviceModel": "PO3", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
946
+
947
+ self.notifyListeners("deviceDatafound", data: userData)
948
+ }, withErrorBlock: { error in
949
+ self.PO3Error(errorID: error)
950
+ })
951
+ }
952
+
953
+ func getPT3SBSOfflineData() {
954
+
955
+ self.myPT3SBTDevice?.commandGetMemoryCount({ count in
956
+
957
+ if(count == 0) {
958
+ let userData = ["count": count] as [String : Any]
959
+
960
+ self.notifyListeners("dataNotFound", data: userData)
961
+ } else {
962
+ self.myPT3SBTDevice?.commandGetMemorryData({ data in
963
+
964
+ guard let deviceDataArr = data else {
965
+ return
966
+ }
967
+ let userData = ["result": deviceDataArr, "deviceModel": "PT3SBT", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
968
+ self.notifyListeners("deviceDatafound", data: userData)
969
+ //self.deleteDataFromPT3SBT()
970
+ }, disposeErrorBlock: { error in
971
+
972
+ let userData = ["error": error] as [String : Any]
973
+ self.notifyListeners("error", data: userData)
974
+ })
975
+ }
976
+ }, disposeErrorBlock: { error in
977
+
978
+ let userData = ["error": error] as [String : Any]
979
+ self.notifyListeners("error", data: userData)
980
+ })
981
+
982
+
983
+
984
+ }
985
+
986
+ func getHS4SOfflineData() {
987
+ print(" getHS4SOfflineData()")
988
+
989
+ myHS4SDevice?.commandTransferMemorryData({ dict in
990
+
991
+ print(" dict : \(dict)")
992
+ }, disposeProgress: { count in
993
+ print(" count : \(count)")
994
+ }, memorryData: { data in
995
+ print(" data : \(data)")
996
+ guard let deviceDataArr = data else{
997
+ return
998
+ }
999
+
1000
+ let userData = ["result": deviceDataArr, "deviceModel": "HS4S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
1001
+ print(" deviceDatafound >> \(userData)")
1002
+ self.notifyListeners("deviceDatafound", data: userData)
1003
+
1004
+ }, finishTransmission: {
1005
+ print(" finished")
1006
+ }, disposeErrorBlock: { error in
1007
+ print(" disposeErrorBlock >> \(error)")
1008
+ self.HS4SError(errorID: error)
1009
+ })
1010
+ }
1011
+
1012
+ func getHS2SAnonymousData(){
1013
+
1014
+ self.myHS2SDevice?.commandGetAnonymousMemoryDataCount({ count in
1015
+ if(count == 0){
1016
+ if(self.hs2sDataArray?.count == 0){
1017
+ let userData = ["count": 0] as [String : Any]
1018
+ self.notifyListeners("dataNotFound", data: userData)
1019
+ }else{
1020
+ let userData = ["result": self.hs2sDataArray, "deviceModel": "HS2S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
1021
+
1022
+ self.notifyListeners("deviceDatafound", data: userData)
1023
+ }
1024
+ }else{
1025
+ self.myHS2SDevice?.commandGetAnonymousMemoryData({ data in
1026
+
1027
+ if let deviceDataArr = data {
1028
+ self.hs2sDataArray?.append(contentsOf: deviceDataArr)
1029
+
1030
+ }
1031
+ let userData = ["result": self.hs2sDataArray, "deviceModel": "HS2S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":false] as [String : Any]
1032
+
1033
+ self.notifyListeners("deviceDatafound", data: userData)
1034
+
1035
+ }, diaposeErrorBlock: { err in
1036
+
1037
+ })
1038
+ }
1039
+ }, diaposeErrorBlock: { error in
1040
+ })
1041
+
1042
+ }
1043
+
1044
+ func deleteHS2sMemoryDataWithUserID(_ user:Data,_ isNotify:Bool){
1045
+ self.myHS2SDevice?.commandDeleteMemoryData(withUserID: user, result: { isDeleted in
1046
+
1047
+ }, diaposeErrorBlock: { err in
1048
+ if(isNotify){
1049
+
1050
+ }
1051
+ })
1052
+ }
1053
+
1054
+ func getHS2sMemoryDataWithUserID(_ user:Data,_ isNotify:Bool){
1055
+
1056
+ self.myHS2SDevice?.commandGetMemoryDataCount(withUserID: user, memoryCount: { count in
1057
+
1058
+ if(count == 0 && isNotify){
1059
+
1060
+ self.getHS2SAnonymousData()
1061
+ // let userData = ["count": 0] as [String : Any]
1062
+ // self.notifyListeners("dataNotFound", data: userData)
1063
+ // self.disconnectHS2S()
1064
+ }else{
1065
+ if(count == 0){
1066
+ self.hs2sUserCount = self.hs2sUserCount + 1
1067
+ self.getHS2sMemoryDataWithUserID(self.userIdArr[self.hs2sUserCount],self.hs2sUserCount == (self.userIdArr.count - 1))
1068
+ }else{
1069
+ self.myHS2SDevice?.commandGetMemoryData(withUserID: user, memoryData: { data in
1070
+
1071
+ if let deviceDataArr = data {
1072
+ self.hs2sDataArray?.append(contentsOf: deviceDataArr)
1073
+
1074
+ }
1075
+ if(isNotify){
1076
+ self.getHS2SAnonymousData()
1077
+ // let userData = ["result": self.hs2sDataArray, "deviceModel": "HS2S", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
1078
+ // self.filesystem.appendFile("commandGetMemoryData hs2s data found")
1079
+ // self.notifyListeners("deviceDatafound", data: userData)
1080
+ self.hs2sUserCount = 0
1081
+
1082
+ }else{
1083
+ self.hs2sUserCount = self.hs2sUserCount + 1
1084
+ self.getHS2sMemoryDataWithUserID(self.userIdArr[self.hs2sUserCount],self.hs2sUserCount == (self.userIdArr.count - 1))
1085
+ }
1086
+
1087
+
1088
+ }, diaposeErrorBlock: { err in
1089
+ //let userData = ["count": 0] as [String : Any]
1090
+ //self.notifyListeners("dataNotFound", data: userData)
1091
+
1092
+ //self.disconnectHS2S()
1093
+ })
1094
+ }
1095
+ }
1096
+ }, diaposeErrorBlock: { error in
1097
+
1098
+ })
1099
+ }
1100
+ func getHS2SOfflineData() {
1101
+ print(" getHS4SOfflineData()")
1102
+
1103
+ self.myHS2SDevice?.commandGetDeviceInfo({ data in
1104
+
1105
+ }, diaposeErrorBlock: { err in
1106
+
1107
+ })
1108
+ self.myHS2SDevice?.commandGetUserInfo({ userinfo in
1109
+
1110
+ if let userInfoArr = userinfo?["UserInfo"] as? [[String:Any]] {
1111
+
1112
+ self.hs2sDataArray = []
1113
+ if(userInfoArr.count == 0){
1114
+
1115
+
1116
+ self.getHS2SAnonymousData()
1117
+
1118
+
1119
+ }else{
1120
+ self.hs2sUserCount = 0
1121
+ self.userIdArr = []
1122
+ for (index,item) in userInfoArr.enumerated() {
1123
+
1124
+
1125
+ if let userID = item["UserInfo_ID"] as? Data{
1126
+ self.userIdArr.append(userID)
1127
+ }
1128
+ }
1129
+ if(self.userIdArr.count > 0){
1130
+
1131
+ self.getHS2sMemoryDataWithUserID(self.userIdArr[self.hs2sUserCount],self.hs2sUserCount == (self.userIdArr.count - 1))
1132
+ }
1133
+
1134
+ }
1135
+ }
1136
+
1137
+ }, diaposeErrorBlock: { error in
1138
+
1139
+ })
1140
+
1141
+
1142
+ }
1143
+ // MARK: Device Measure Methods
1144
+
1145
+
1146
+ func startTimer() {
1147
+ timerCount = 0
1148
+ guard timer == nil else { return }
1149
+ timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(test), userInfo: nil, repeats: true)
1150
+ }
1151
+
1152
+ func stopTimer() {
1153
+ guard timer != nil else { return }
1154
+ timer?.invalidate()
1155
+ timer = nil
1156
+ }
1157
+
1158
+ @objc func test() {
1159
+ if(timerCount == 10){
1160
+ stopTimer()
1161
+ let hs4sData = [["weight":timerCount,"dataID":"1234567","date":Date()]]
1162
+ let userData = ["result": hs4sData, "deviceModel": "HS4S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1163
+ self.notifyListeners("deviceDatafound", data: userData)
1164
+ }else{
1165
+ let userData = ["result": timerCount, "deviceModel": "HS4S", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
1166
+
1167
+ self.notifyListeners("OnlineDeviceData", data: userData)
1168
+ timerCount = timerCount+1
1169
+ }
1170
+ }
1171
+
1172
+ func startBP5SMeasurement(){
1173
+ self.myBP5SDevice?.commandFunction({ data in
1174
+ self.myBP5SDevice?.commandStartMeasure(zeroingState: { isZeroState in
1175
+
1176
+ }, pressure: { data in
1177
+ let userData = ["result": data, "deviceModel": "BP5S", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
1178
+
1179
+ self.notifyListeners("OnlineDeviceData", data: userData)
1180
+ }, waveletWithHeartbeat: { data in
1181
+ print("waveletWithHeartbeat \(data)")
1182
+ }, waveletWithoutHeartbeat: { data in
1183
+ print("waveletWithoutHeartbeat \(data)")
1184
+ }, result: { dataObj in
1185
+ let bp5sData = [dataObj]
1186
+ let userData = ["result": bp5sData, "deviceModel": "BP5S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1187
+ self.notifyListeners("deviceDatafound", data: userData)
1188
+ }, errorBlock: { err in
1189
+
1190
+ })
1191
+ }, errorBlock: { error in
1192
+
1193
+ })
1194
+
1195
+ }
1196
+
1197
+ func startPT3SBTMeasurement(){
1198
+ // self.myPT3SBTDevice.comm
1199
+ NotificationCenter.default.addObserver(
1200
+ self,
1201
+ selector: #selector(self.onlineMeasurementForPT3SBT),
1202
+ name: Notification.Name("PT3SBTNotificationGetResult"),
1203
+ object: nil)
1204
+ }
1205
+ @objc func onlineMeasurementForPT3SBT(notification:NSNotification){
1206
+ let notifyObject = notification.userInfo
1207
+ guard let userInfo = notification.userInfo as NSDictionary? as? [String: Any] else {return}
1208
+ // self.bridge?.viewController?.showToast(message: "PT3SBT \(userInfo)")
1209
+ let userData = ["result": [userInfo], "deviceModel": "PT3SBT", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1210
+ self.notifyListeners("deviceDatafound", data: userData)
1211
+ }
1212
+ func startPO3Measurement(){
1213
+
1214
+ self.myPO3Device?.commandStartMeasure({ isSuccess in
1215
+
1216
+ }, withMeasureData: { dataObj in
1217
+ if let data = dataObj as? [String:Any] , let spo2 = data["spo2"] as? Int,let bpm = data["bpm"] as? Int{
1218
+ if(spo2 > 0 && bpm > 0){
1219
+ self.onlinePO3DeviceData = data
1220
+ let userData = ["result": self.onlinePO3DeviceData, "deviceModel": "PO3", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
1221
+ self.notifyListeners("OnlineDeviceData", data: userData)
1222
+ }
1223
+ }
1224
+ }, withFinishMeasure: { isCompleted in
1225
+ if(isCompleted){
1226
+ print("PO3 start withFinishMeasure:if\(isCompleted)")
1227
+ print("PO3 start withFinishMeasure:if\(String(describing: self.onlinePO3DeviceData))")
1228
+ let userData = ["result": [self.onlinePO3DeviceData], "deviceModel": "PO3", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1229
+ self.notifyListeners("deviceDatafound", data: userData)
1230
+ }else{
1231
+ let userData = ["error": "Error getting final value.Please take again."] as [String : Any]
1232
+ self.notifyListeners("error", data: userData)
1233
+ }
1234
+
1235
+ }, withErrorBlock: { err in
1236
+ self.bridge?.viewController?.showToast(message: "PO3 start error else:\(err)")
1237
+ })
1238
+ }
1239
+ func startBG5SMeasurement(){
1240
+ self.myBBG5SDevice?.startMeasure(BGMeasureMode.noBlood, withSuccessBlock: {
1241
+
1242
+ }, errorBlock: { err, msg in
1243
+
1244
+ })
1245
+ }
1246
+ func startHS2SMeasurement(){
1247
+ if let user = self.healthUser{
1248
+ self.myHS2SDevice?.commandStartMeasure(with: user, weight: { weight in
1249
+ let userData = ["result": weight, "deviceModel": "HS2S", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
1250
+
1251
+ self.notifyListeners("OnlineDeviceData", data: userData)
1252
+ }, stableWeight: { stableWeight in
1253
+ let hs4sData = [["weight":stableWeight,"dataID":"1234567","date":Date()]]
1254
+ let userData = ["result": hs4sData, "deviceModel": "HS2S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1255
+ self.notifyListeners("deviceDatafound", data: userData)
1256
+ }, weightAndBodyInfo: { dataObj in
1257
+
1258
+ }, disposeHS2SMeasureFinish: {
1259
+
1260
+ }, diaposeErrorBlock: { err in
1261
+
1262
+ })
1263
+ }
1264
+
1265
+
1266
+ }
1267
+ func startHS4SMeasurement(){
1268
+ // self.bridge?.viewController?.showToast(message: "startHS4SMeasurement")
1269
+ // self.startTimer()
1270
+ self.myHS4SDevice?.commandMeasure(withUint: HSUnit_Kg, weight: { unstableWeight in
1271
+ let userData = ["result": unstableWeight, "deviceModel": "HS4S", "deviceMacAddress": self.deviceMacAddress] as [String : Any]
1272
+ // self.bridge?.viewController?.showToast(message: "unstable weight\(unstableWeight)")
1273
+
1274
+ self.notifyListeners("OnlineDeviceData", data: userData)
1275
+ }, stableWeight: { dataObj in
1276
+ let hs4sData = [dataObj]
1277
+ let userData = ["result": hs4sData, "deviceModel": "HS4S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1278
+ self.notifyListeners("deviceDatafound", data: userData)
1279
+ //self.bridge?.viewController?.showToast(message: "stable weight:\(hs4sData)")
1280
+ }, disposeErrorBlock: { err in
1281
+ self.bridge?.viewController?.showToast(message: "error in hs4s start\(err)")
1282
+ })
1283
+
1284
+ }
1285
+
1286
+ // MARK: Error CallBack Methods
1287
+
1288
+ func HS4SError(errorID:HS4DeviceError) {
1289
+ var errorMsg = ""
1290
+
1291
+ switch errorID {
1292
+ case .deviceLowPower:
1293
+ errorMsg = "Battery level is low"
1294
+ case .dataZeor:
1295
+ errorMsg = "No memory"
1296
+ let userData = ["count": 0] as [String : Any]
1297
+ self.notifyListeners("dataNotFound", data: userData)
1298
+ case .deviceEr0:
1299
+ errorMsg = "The Scale failed to initialize"
1300
+ case .deviceEr1:
1301
+ errorMsg = "Maximum weight has been exceeded"
1302
+ case .deviceEr2:
1303
+ errorMsg = "The Scale can't capture a steady reading"
1304
+ case .deviceEr4:
1305
+ errorMsg = "Bluetooth connection error"
1306
+ case .deviceEr7:
1307
+ errorMsg = "Movement while measuring"
1308
+ case .deviceEr8:
1309
+ errorMsg = "Invalidate"
1310
+ case .deviceEr9:
1311
+ errorMsg = "Scale memory access error"
1312
+ case .deviceDisconnect:
1313
+ errorMsg = "Device disconnect"
1314
+ case .deviceSendTimeout:
1315
+ errorMsg = "Communication error"
1316
+ case .deviceRecWeightError:
1317
+ errorMsg = "DeviceRecWeightError"
1318
+ }
1319
+
1320
+ print(" HS4SError() >> \(errorMsg)")
1321
+ if(errorMsg != "No memory"){
1322
+ let userData = ["error": errorMsg] as [String : Any]
1323
+ self.notifyListeners("error", data: userData)
1324
+ }
1325
+
1326
+ }
1327
+
1328
+ func BP550Error(errorID:BPDeviceError){
1329
+ var errorMsg = ""
1330
+ switch (errorID) {
1331
+ case .error0:
1332
+ errorMsg = "Unable to take measurements due to arm/wrist movements."
1333
+ break
1334
+ case .error1:
1335
+ errorMsg = "Failed to detect systolic pressure."
1336
+ break
1337
+ case .error2:
1338
+ errorMsg = "Failed to detect diastolic pressure."
1339
+ break
1340
+ case .error3:
1341
+ errorMsg = "Pneumatic system blocked or cuff is too tight during inflation."
1342
+ break
1343
+ case .error4:
1344
+ errorMsg = "Pneumatic system leakage or cuff is too loose during inflation"
1345
+ break
1346
+ case .error5:
1347
+ errorMsg = "Cuff pressure reached over 300mmHg."
1348
+ break
1349
+ case .error6:
1350
+ errorMsg = "Cuff pressure reached over 15 mmHg for more than 160 seconds."
1351
+ break
1352
+ case .error7: fallthrough
1353
+ case .error8: fallthrough
1354
+ case .error9: fallthrough
1355
+ case .error10:
1356
+ errorMsg = "Data retrieving error."
1357
+ break
1358
+ case .error11: fallthrough
1359
+ case .error12:
1360
+ errorMsg = "Communication Error."
1361
+ break
1362
+ case .error13:
1363
+ errorMsg = "Low battery."
1364
+ break
1365
+ case .error14:
1366
+ errorMsg = "Device bluetooth set failed."
1367
+ break
1368
+ case .error15:
1369
+ errorMsg = " Systolic exceeds 260mmHg or diastolic exceeds 199mmHg"
1370
+ break
1371
+ case .error16:
1372
+ errorMsg = "Systolic below 60mmHg or diastolic below 40mmHg"
1373
+ break
1374
+ case .error17:
1375
+ errorMsg = "Arm/wrist movement beyond range."
1376
+ break
1377
+ case .error18: fallthrough
1378
+ case .error19:
1379
+ errorMsg = "Heart rate in measure result exceeds max limit."
1380
+ break
1381
+ case .error20:
1382
+ errorMsg = "PP(Average BP) exceeds limit"
1383
+ break
1384
+ case .errorUserStopMeasure:
1385
+ errorMsg = "User stop measure(for ABPM history measurement only)"
1386
+ break
1387
+ case .normalError:
1388
+ errorMsg = "device error, error message displayed automatically."
1389
+ break
1390
+ case .overTimeError: fallthrough
1391
+ case .noRespondError:
1392
+ errorMsg = "Abnormal communication."
1393
+ break
1394
+ case .beyondRangeError:
1395
+ errorMsg = "device is out of communication range."
1396
+ break
1397
+ case .didDisconnect:
1398
+ errorMsg = "Device Disconnect."
1399
+ break
1400
+ case .askToStopMeasure:
1401
+ errorMsg = "measurement has been stopped."
1402
+ break
1403
+ case .deviceBusy:
1404
+ errorMsg = "device is busy doing other things."
1405
+ break
1406
+ case .inputParameterError: fallthrough
1407
+ case .invalidOperation:
1408
+ errorMsg = "Parameter input error."
1409
+ break
1410
+ default:
1411
+ break
1412
+ }
1413
+
1414
+ print(" HS4SError() >> \(errorMsg)")
1415
+
1416
+ let userData = ["error": errorMsg] as [String : Any]
1417
+ self.notifyListeners("error", data: userData)
1418
+ }
1419
+
1420
+ func PO3Error(errorID:PO3ErrorID){
1421
+ var errorMsg = ""
1422
+
1423
+ switch (errorID) {
1424
+ case .overTime:
1425
+ errorMsg = "PO3Error_OverTime."
1426
+ break
1427
+ case .resetDeviceFaild:
1428
+ errorMsg = "PO3Error_ResetDeviceFaild"
1429
+ break
1430
+ case .disconnect:
1431
+ errorMsg = "PO3Error_Disconnect"
1432
+ break
1433
+ case .parameterError:
1434
+ errorMsg = "PO3Error_ParameterError"
1435
+ break
1436
+ case .firmwareVersionIsNotSupported:
1437
+ errorMsg = "PO3Error_FirmwareVersionIsNotSupported"
1438
+ break
1439
+ default:
1440
+ break
1441
+ }
1442
+
1443
+ print(" PO3Error() >> \(errorMsg)")
1444
+
1445
+ let userData = ["error": errorMsg] as [String : Any]
1446
+ self.notifyListeners("error", data: userData)
1447
+ }
1448
+
1449
+ // MARK: BG5S Delegate Methods
1450
+
1451
+ public func device(_ device: BG5S!, occurError error: BG5SError, errorDescription: String!) {
1452
+ print(" BG5S >> occurError")
1453
+ }
1454
+
1455
+ public func device(_ device: BG5S!, stripStateDidUpdate state: BG5SStripState) {
1456
+ print(" BG5S >> stripStateDidUpdate")
1457
+ }
1458
+
1459
+ public func deviceDropBlood(_ device: BG5S!) {
1460
+ print(" BG5S >> deviceDropBlood")
1461
+ }
1462
+
1463
+ public func device(_ device: BG5S!, dataID: String!, measureReult result: Int) {
1464
+ print(" BG5S >> measureReult : \(result)")
1465
+
1466
+ let userData = ["result": [["date": Date(), "value": result, "dataID":dataID]], "deviceModel": "BG5S", "deviceMacAddress": self.deviceMacAddress,"isFromLive":true] as [String : Any]
1467
+ self.notifyListeners("deviceDatafound", data: userData)
1468
+ }
1469
+
1470
+ public func device(_ device: BG5S!, chargeStateDidUpdate state: BG5SChargeState) {
1471
+ print(" BG5S >> chargeStateDidUpdate()")
1472
+ }
1473
+ }
1474
+
1475
+ extension Date {
1476
+ func currentTimeMillis() -> Int {
1477
+ return Int(self.timeIntervalSince1970 * 1000)
1478
+ }
1479
+ }
1480
+ extension UIViewController {
1481
+
1482
+ func showToast(message : String) {
1483
+ DispatchQueue.main.async {
1484
+ let toastLabel = UILabel(frame: CGRect(x: 0, y: self.view.frame.size.height-200, width: self.view.frame.size.width, height: 200))
1485
+ toastLabel.backgroundColor = UIColor.black.withAlphaComponent(0.6)
1486
+ toastLabel.textColor = UIColor.white
1487
+ toastLabel.font = .systemFont(ofSize: 12.0)
1488
+ toastLabel.textAlignment = .center;
1489
+ toastLabel.text = message
1490
+ toastLabel.alpha = 1.0
1491
+ toastLabel.layer.cornerRadius = 10;
1492
+ toastLabel.clipsToBounds = true
1493
+ self.view.addSubview(toastLabel)
1494
+ UIView.animate(withDuration: 4.0, delay: 0.1, options: .curveEaseOut, animations: {
1495
+ toastLabel.alpha = 0.0
1496
+ }, completion: {(isCompleted) in
1497
+ toastLabel.removeFromSuperview()
1498
+ })
1499
+ }
1500
+ }
1501
+
1502
+ }