From d6d9a09d505d11148599a95a5be3e1351edbe0ac Mon Sep 17 00:00:00 2001 From: hc Date: Mon, 13 Apr 2026 15:17:52 +0800 Subject: Local iHealth SDK, device detail screen, iOS event fixes --- .../iHealthDeviceManagerModule.m | 1338 ++++++++++++++++++++ 1 file changed, 1338 insertions(+) create mode 100755 libs/ihealth-sdk/ios/ReactNativeIOSLibrary/iHealthDeviceManagerModule.m (limited to 'libs/ihealth-sdk/ios/ReactNativeIOSLibrary/iHealthDeviceManagerModule.m') diff --git a/libs/ihealth-sdk/ios/ReactNativeIOSLibrary/iHealthDeviceManagerModule.m b/libs/ihealth-sdk/ios/ReactNativeIOSLibrary/iHealthDeviceManagerModule.m new file mode 100755 index 0000000..c402987 --- /dev/null +++ b/libs/ihealth-sdk/ios/ReactNativeIOSLibrary/iHealthDeviceManagerModule.m @@ -0,0 +1,1338 @@ +// +// iHealthDeviceManagerModule.m +// ReactNativeIOSLibrary +// +// Created by daiqingquan on 2016/11/23. +// Copyright © 2016年 daiqingquan. All rights reserved. +// + +#import "iHealthDeviceManagerModule.h" +#import "AMHeader.h" +#import "BPHeader.h" +#import "HSHeader.h" +#import "BGHeader.h" +#import "POHeader.h" +#import "ECGHeader.h" +#import "TS28BHeader.h" +#import "NT13BHeader.h" +#import "BGMacroFile.h" +#import "ECGMacroFile.h" +#import "THV3Macro.h" +#import "NT13BMacroFile.h" +#import "IHSDKCloudUser.h" +#import "ManageDeviceController.h" +#import "ScanDeviceController.h" +#import "ConnectDeviceController.h" +#import + +#import "TS28BModule.h" + +#import "BG1S.h" + +#import "BG1SController.h" + +#import "PO1.h" + +#import "PO1Controller.h" + +#import "PO1ProfileModule.h" + +#import "PT3SBT.h" + +#import "PT3SBTController.h" + +#import "PT3SBTMacroFile.h" + +#define FetchUserInfo @"com.rn.ihealth.dm.userinfo" + +#define kEvent_Scan_Device @"event_scan_device" +#define kEvent_Scan_Finish @"event_scan_finish" +#define kEvent_Device_Connected @"event_device_connected" +#define kEvent_Device_Connect_Failed @"event_device_connect_failed" +#define kEvent_Device_Disconnect @"event_device_disconnect" +#define kEvent_Authenticate_Result @"event_authenticate_result" + +#define kType_AM3S @"AM3S" +#define kType_AM4 @"AM4" +#define kType_AM5 @"AM5" +#define kType_PO3 @"PO3" +#define kType_BP5 @"BP5" +#define kType_BP7 @"BP7" +#define kType_BP3L @"BP3L" +#define kType_BP5S @"BP5S" +#define kType_BP7S @"BP7S" +#define kType_KN550 @"KN550" +#define kType_HS4 @"HS4" +#define kType_HS4S @"HS4S" +#define kType_HS2 @"HS2" +#define kType_HS2S_PRO @"HS2S Pro" +#define kType_BG1 @"BG1" +#define kType_BG5 @"BG5" +#define kType_BG5S @"BG5S" +#define kType_ECG3 @"ECG3" +#define kType_ECG3USB @"ECG3USB" +#define kType_BTM @"FDIR_V3" +#define kType_TS28B @"TS28B" +#define kType_NT13B @"NT13B" +#define kType_BG1S @"BG1S" +#define kType_HS2S @"HS2S" +#define kType_PO1 @"PO1" +#define kType_PT3SBT @"PT3SBT" + + +@interface iHealthDeviceManagerModule() + + +@property (strong, nonatomic) TS28BController *ts28bController; + +@property (strong, nonatomic) TS28B *ts28b; + +@end + +@implementation iHealthDeviceManagerModule + +RCT_EXPORT_MODULE() + +- (NSArray *)supportedEvents { + return @[ + kEvent_Scan_Device, + kEvent_Scan_Finish, + kEvent_Device_Connected, + kEvent_Device_Connect_Failed, + kEvent_Device_Disconnect, + kEvent_Authenticate_Result, + @"event_notify_ts28b", + @"event_notify_bg1", + @"action_connect_result_for_bg1" + ]; +} + ++ (BOOL)requiresMainQueueSetup { + return YES; +} + +#pragma mark - constantsToExport + +- (NSDictionary *)constantsToExport{ + return @{ + @"AM3S" :kType_AM3S, + @"AM4" :kType_AM4, + @"AM5" :kType_AM5, + @"PO3":kType_PO3, + @"PO3M":kType_PO3, + @"BP5":kType_BP5, + @"BP7":kType_BP7, + @"BP3L" :kType_BP3L, + @"BP5S" : kType_BP5S, + @"BP7S" : kType_BP7S, + @"KN550":kType_KN550, + @"HS4S" :kType_HS4, + @"HS4" :kType_HS4, + @"HS2" :kType_HS2, + @"BG1":kType_BG1, + @"BG5":kType_BG5, + @"BG5S":kType_BG5S, + @"ECG3":kType_ECG3, + @"ECG3USB":kType_ECG3USB, + @"BTM":kType_BTM, + @"NT13B":kType_NT13B, + @"TS28B":kType_TS28B, + @"BG1S":kType_BG1S, + @"HS2S":kType_HS2S, + @"HS2S Pro":kType_HS2S_PRO, + @"PO1":kType_PO1, + @"PT3SBT":kType_PT3SBT, + @"Event_Scan_Device":kEvent_Scan_Device, + @"Event_Scan_Finish":kEvent_Scan_Finish, + @"Event_Device_Connected":kEvent_Device_Connected, + @"Event_Device_Connect_Failed":kEvent_Device_Connect_Failed, + @"Event_Device_Disconnect":kEvent_Device_Disconnect, + @"Event_Authenticate_Result":kEvent_Authenticate_Result, + }; +}; + +#pragma mark +#pragma mark - Init +-(id)init{ + NSLog(@"iHealthScanner: *** iHealthDeviceManagerModule init CALLED ***"); + if (self = [super init]){ + NSLog(@"iHealthScanner: *** Registering NSNotification observers ***"); + [ScanDeviceController commandGetInstance]; + // AM3S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:AM3SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:AM3SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:AM3SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:AM3SDisConnectNoti object:nil]; + // AM4 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:AM4Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:AM4ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:AM4ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:AM4DisConnectNoti object:nil]; + + //AM5 + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:AM5Discover object:nil]; + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:AM5ConnectFailed object:nil]; + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:AM5ConnectNoti object:nil]; + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:AM5DisConnectNoti object:nil]; + + // PO3 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:PO3Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:PO3ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:PO3ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:PO3DisConnectNoti object:nil]; + // BP5 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP5ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP5DisConnectNoti object:nil]; + // BP7 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP7ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP7DisConnectNoti object:nil]; + //BP3L + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BP3LDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BP3LConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP3LConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP3LDisConnectNoti object:nil]; + + //BP5S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BP5SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BP5SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP5SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP5SDisConnectNoti object:nil]; + + //BP7S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BP7SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP7SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP7SDisConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BP7SConnectFailed object:nil]; + + //KN550BT + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:KN550BTDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:KN550BTConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:KN550BTDisConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:KN550BTConnectFailed object:nil]; + // HS4S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:HS4Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:HS4ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:HS4ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:HS4DisConnectNoti object:nil]; + // HS2 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:HS2Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:HS2ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:HS2ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:HS2DisConnectNoti object:nil]; + + + // HS2S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:HS2SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:HS2SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:HS2SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:HS2SDisConnectNoti object:nil]; + + //BG1 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(bg1Discover:) name:kNotificationNameNeedAudioPermission object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(bg1Connect:) name:kNotificationNameAudioDeviceInsert object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceBG1Disconnect:) name:kNotificationNameBG1DidDisConnect object:nil]; + //BG5 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BG5ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BG5DisConnectNoti object:nil]; + + // BG5S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:kNotificationNameBG5SDidDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:kNotificationNameBG5SConnectFail object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:kNotificationNameBG5SConnectSuccess object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:kNotificationNameBG5SDidDisConnect object:nil]; + + //ECG3 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:ECG3Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:ECG3ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:ECG3ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:ECG3DisConnectNoti object:nil]; + + //ECG3USB + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:ECGUSBConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:ECGUSBDisConnectNoti object:nil]; + + //BTM(THV3) + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:THV3Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:THV3ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:THV3ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:THV3DisConnectNoti object:nil]; + //NT13B + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:NT13BDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:NT13BConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:NT13BConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:NT13BDisConnectNoti object:nil]; + + //TS28B + + + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(disconnectTS28B) name:@"disconnectTS28B" object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(getAllTS28BConnectedDevices) name:@"getAllTS28BConnectedDevices" object:nil]; + + + //BG1S + + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BG1SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BG1SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BG1SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BG1SDisConnectNoti object:nil]; + // PO1 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:PO1Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:PO1ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:PO1ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:PO1DisConnectNoti object:nil]; + // PT3SBT + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:PT3SBTDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:PT3SBTConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:PT3SBTConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:PT3SBTDisConnectNoti object:nil]; + + [AM3Controller shareIHAM3Controller]; + [AM3SController_V2 shareIHAM3SController]; + [AM4Controller shareIHAM4Controller]; + [AM5Controller shareAM5Controller]; + [BP3LController shareBP3LController]; + [BP5Controller shareBP5Controller]; + [BP7Controller shareBP7Controller]; + [BP5SController sharedController]; + [BG5Controller shareIHBg5Controller]; + [BG5SController sharedController]; + [ECG3Controller shareECG3Controller]; + [ECG3USBController shareECG3USBController]; + [HS4Controller shareIHHs4Controller]; + [HS2Controller shareIHHs2Controller]; + [HS2SController shareIHHS2SController]; + [THV3Controller sharedController]; + [NT13BController shareIHNT13BController]; + [BG1SController shareIHBG1SController]; + [PO1Controller shareIHPO1Controller]; + [PT3SBTController shareIHPT3SBTController]; + + } + return self; +} + +- (void)dealloc{ + [[NSNotificationCenter defaultCenter]removeObserver:self]; +} + +#pragma mark - + +-(void)disconnectTS28B{ + + [self.ts28bController disconnectDevice:self.ts28b]; + +} +-(void)getAllTS28BConnectedDevices{ + + if (self.ts28b==nil) { + return; + } + + NSDictionary* deviceInfo = @{@"event_notify_ts28b":@"ACTION_GET_ALL_CONNECTED_DEVICES",@"devices":self.ts28b.serialNumber}; + + [self sendEventWithName:@"event_notify_ts28b" body:deviceInfo]; +} + +- (NSString*)serialNumebr:(NSDictionary*)userInfo{ + if (!userInfo){ + return nil; + } + NSString* serialNumber = userInfo[@"SerialNumber"]; + NSString* deviceId = userInfo[@"ID"]; + if (serialNumber && serialNumber.length > 0){ + return serialNumber; + } else if (deviceId && deviceId.length > 0){ + return deviceId; + } + return nil; +} + +#pragma mark - Notification + +#pragma mark - BG1 +-(void)bg1Discover:(NSNotification*)info { + + + // NSDictionary* deviceInfo = @{@"mac":@"",@"type":@"BG1"}; + // [self sendEventWithName:kEvent_Scan_Device body:deviceInfo]; + +} + +-(void)bg1Connect:(NSNotification*)info { + + [[MPMusicPlayerController applicationMusicPlayer] setVolume:1.0f]; + NSDictionary* deviceInfo = @{@"mac":@"",@"type":@"BG1"}; + [self sendEventWithName:kEvent_Scan_Device body:deviceInfo]; + + + // NSDictionary* deviceInfo = @{@"mac":@"",@"type":@"BG1"}; + // [self sendEventWithName:kEvent_Device_Connected body:deviceInfo]; + + BG1*myBG1=[[BG1Controller shareBG1Controller] getCurrentBG1Instance]; + + [myBG1 commandBG1DeviceModel:@0 withDiscoverBlock:^{ + + } withDiscoverBlock:^(NSDictionary *idpsDic) { + + bg1IdpsDic = [NSDictionary dictionaryWithDictionary:idpsDic]; + + } withConnectBlock:^{ + + NSString *bg1Mac = @""; + if (bg1IdpsDic[@"SerialNumber"] != nil) { + bg1Mac = bg1IdpsDic[@"SerialNumber"]; + } + NSDictionary* deviceInfo = @{@"mac":bg1Mac,@"type":@"BG1"}; + [self sendEventWithName:kEvent_Device_Connected body:deviceInfo]; + + } withErrorBlock:^(BG1Error errorID) { + + NSDictionary* deviceInfo = @{@"mac":@"",@"action":@"action_measure_error_for_bg1",@"action_measure_error_for_bg1":[NSNumber numberWithInt:errorID]}; + [self sendEventWithName:@"event_notify_bg1" body:deviceInfo]; + + }]; + +} + +-(void)deviceBG1Disconnect:(NSNotification*)info { + + NSDictionary* deviceInfo = @{@"mac":@"",@"type":kType_BG1}; + [self sendEventWithName:kEvent_Device_Disconnect body:deviceInfo]; +} + +#pragma mark - 发现BLE设备 +-(void)deviceDiscover:(NSNotification*)info { + + NSLog(@"Native: device discover %@", info); + + NSDictionary* userInfo = [info userInfo]; + NSString* deviceName = userInfo[@"DeviceName"]; + + NSDictionary *deviceNameForType = @{ + @"AM3S" :kType_AM3S, + @"AM4" :kType_AM4, + @"AM5" :kType_AM5, + @"PO3":kType_PO3, + @"PO3M":kType_PO3, + @"BP3L" :kType_BP3L, + @"BP5S" : kType_BP5S, + @"BP7S" : kType_BP7S, + @"KN-550BT":kType_KN550, + @"KN550":kType_KN550, + @"HS4S" :kType_HS4, + @"HS4" :kType_HS4, + @"HS2" :kType_HS2, + @"ECG3":kType_ECG3, + @"FDTH":kType_BTM, + @"BG5S":kType_BG5S, + @"NT13B":kType_NT13B, + @"TS28B":kType_TS28B, + @"BG1S":kType_BG1S, + @"HS2S":kType_HS2S, + @"PO1":kType_PO1, + @"PT3SBT":kType_PT3SBT, + }; + + if (deviceNameForType[deviceName] && [self serialNumebr:userInfo]){ + NSString *sn = [self serialNumebr:userInfo]; + [self sendEventWithName:kEvent_Scan_Device body:@{@"mac":sn,@"type":deviceNameForType[deviceName]}]; + } +} + +#pragma mark 连接成功 BT\BLE都用这个通知 +- (BOOL)isIAPDevice:(NSString*)deviceName{ + NSArray *array = @[@"BP5",@"BP7",@"BG5",@"ECG"]; + if (deviceName && [array containsObject:deviceName]){ + return YES; + } else { + return NO; + } +} +-(void)deviceConnect:(NSNotification*)info { + + NSDictionary* userInfo = [info userInfo]; + NSLog(@"连接成功:%@",userInfo); + NSString* deviceName = userInfo[@"DeviceName"]; + + NSString* protocolString = userInfo[@"ProtocolString"]; + + if ([protocolString isEqualToString:@"NT13B_Protocol"]) { + deviceName=@"NT13B"; + } + + NSDictionary *deviceNameForType = @{ + @"AM3S" :kType_AM3S, + @"AM4" :kType_AM4, + @"AM5" :kType_AM5, + @"PO3":kType_PO3, + @"PO3M":kType_PO3, + @"BP3L" :kType_BP3L, + @"BP5S" : kType_BP5S, + @"BP7S" : kType_BP7S, + @"KN-550BT":kType_KN550, + @"KN550":kType_KN550, + @"HS4S" :kType_HS4, + @"HS4" :kType_HS4, + @"HS2" :kType_HS2, + @"FDTH":kType_BTM, + @"BP5":kType_BP5, + @"BP7":kType_BP7, + @"BG5":kType_BG5, + @"BG5S":kType_BG5S, + @"ECG3":kType_ECG3, + @"ECG":kType_ECG3USB,// ECG3USB的连接通知里使用的设备名称是ECG, + @"NT13B":kType_NT13B, + @"TS28B":kType_TS28B, + @"BG1S":kType_BG1S, + @"HS2S":kType_HS2S, + @"HS2S Pro":kType_HS2S_PRO, + @"PO1":kType_PO1, + @"PT3SBT":kType_PT3SBT, + }; + + if (deviceNameForType[deviceName] && [self serialNumebr:userInfo]){ + NSString *sn = [self serialNumebr:userInfo]; + if ([self isIAPDevice:deviceName]){ + [self sendEventWithName:kEvent_Scan_Device body:@{@"mac":sn,@"type":deviceNameForType[deviceName]}]; + } + [self sendEventWithName:kEvent_Device_Connected body:@{@"mac":sn,@"type":deviceNameForType[deviceName]}]; + } +} +#pragma mark 连接断开 BT\BLE都用这个通知 +-(void)deviceDisconnect:(NSNotification*)info { + NSDictionary* userInfo = [info userInfo]; + NSString* deviceName = userInfo[@"DeviceName"]; + + NSString* protocolString = userInfo[@"ProtocolString"]; + + if ([protocolString isEqualToString:@"NT13B_Protocol"]) { + deviceName=@"NT13B"; + } + + if ([protocolString isEqualToString:@"com.jiuan.PO1"]) { + deviceName=@"PO1"; + } + + NSDictionary *deviceNameForType = @{ + @"AM3S" :kType_AM3S, + @"AM4" :kType_AM4, + @"AM5" :kType_AM5, + @"PO3":kType_PO3, + @"PO3M":kType_PO3, + @"BP3L" :kType_BP3L, + @"BP5S" : kType_BP5S, + @"BP7S" : kType_BP7S, + @"KN-550BT":kType_KN550, + @"KN550":kType_KN550, + @"HS4S" :kType_HS4, + @"HS4" :kType_HS4, + @"HS2" :kType_HS2, + @"FDTH":kType_BTM, + @"BP5":kType_BP5, + @"BP7":kType_BP7, + @"BG5":kType_BG5, + @"BG5S":kType_BG5S, + @"ECG3":kType_ECG3, + @"ECG":kType_ECG3USB,// ECG3USB的连接通知里使用的设备名称是ECG, + @"NT13B":kType_NT13B, + @"TS28B":kType_TS28B, + @"BG1S":kType_BG1S, + @"HS2S":kType_HS2S, + @"HS2S Pro":kType_HS2S_PRO, + @"PO1":kType_PO1, + @"PT3SBT":kType_PT3SBT, + }; + + if (deviceNameForType[deviceName] && [self serialNumebr:userInfo]){ + NSString *sn = [self serialNumebr:userInfo]; + [self sendEventWithName:kEvent_Device_Disconnect body:@{@"mac":sn,@"type":deviceNameForType[deviceName]}]; + } +} +#pragma mark - 连接失败,BLE设备 +-(void)deviceConnectFailed:(NSNotification*)info { + NSDictionary* userInfo = [info userInfo]; + NSString* deviceName = userInfo[@"DeviceName"]; + + NSString* protocolString = userInfo[@"ProtocolString"]; + + if ([protocolString isEqualToString:@"NT13B_Protocol"]) { + deviceName=@"NT13B"; + } + + NSDictionary *deviceNameForType = @{ + @"AM3S" :kType_AM3S, + @"AM4" :kType_AM4, + @"AM5" :kType_AM5, + @"PO3":kType_PO3, + @"PO3M":kType_PO3, + @"BP3L" :kType_BP3L, + @"BP5S" : kType_BP5S, + @"BG5S" :kType_BG5S, + @"BP7S" : kType_BP7S, + @"KN-550BT":kType_KN550, + @"KN550":kType_KN550, + @"HS4S" :kType_HS4, + @"HS4" :kType_HS4, + @"HS2" :kType_HS2, + @"FDTH":kType_BTM, + @"ECG3":kType_ECG3, + @"NT13B":kType_NT13B, + @"TS28B":kType_TS28B, + @"BG1S":kType_BG1S, + @"HS2S":kType_HS2S, + @"HS2S Pro":kType_HS2S_PRO, + @"PO1":kType_PO1, + @"PT3SBT":kType_PT3SBT, + }; + + if (deviceNameForType[deviceName] && [self serialNumebr:userInfo]){ + NSString *sn = [self serialNumebr:userInfo]; + [self sendEventWithName:kEvent_Device_Connect_Failed body:@{@"mac":sn,@"type":deviceNameForType[deviceName]}]; + } +} + +#pragma mark - Method + +RCT_EXPORT_METHOD(sdkAuthWithLicense:(nonnull NSString *)license){ + + + NSArray * arr = [license componentsSeparatedByString:@"."]; + + + NSString*licenseName=[NSString stringWithFormat:@"%@",[arr objectAtIndex:0]]; + + + NSString *filePath = [[NSBundle mainBundle] pathForResource:licenseName ofType:@"pem"]; + + + NSData*data = [NSData dataWithContentsOfFile:filePath]; + + + + if (data!=nil) { + + [[IHSDKCloudUser commandGetSDKUserInstance] commandSDKUserValidationWithLicense:data UserDeviceAccess:^(NSArray *DeviceAccessArray) { + + NSLog(@"DeviceAccessArray :%@",DeviceAccessArray); + + } UserValidationSuccess:^(UserAuthenResult result) { + + if (result==UserAuthen_LoginSuccess || result==UserAuthen_RegisterSuccess|| result==UserAuthen_TrySuccess ) { + [self sendEventWithName:kEvent_Authenticate_Result body:@{@"access":@1}]; + }else{ + + [self sendEventWithName:kEvent_Authenticate_Result body:@{@"access":@0}]; + + } + + } DisposeErrorBlock:^(UserAuthenResult errorID) { + + [self sendEventWithName:kEvent_Authenticate_Result body:@{@"access":@0}]; + + + + + + }]; + + }else{ + + + [self sendEventWithName:kEvent_Authenticate_Result body:@{@"access":@0}]; + + } + + + + +} + +-(void)ensureInitialized { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSLog(@"iHealthScanner: *** ensureInitialized - registering observers ***"); + [ScanDeviceController commandGetInstance]; + + // AM3S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:AM3SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:AM3SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:AM3SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:AM3SDisConnectNoti object:nil]; + // AM4 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:AM4Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:AM4ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:AM4ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:AM4DisConnectNoti object:nil]; + // AM5 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:AM5Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:AM5ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:AM5ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:AM5DisConnectNoti object:nil]; + // PO3 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:PO3Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:PO3ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:PO3ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:PO3DisConnectNoti object:nil]; + // BP5 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP5ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP5DisConnectNoti object:nil]; + // BP7 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP7ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP7DisConnectNoti object:nil]; + // BP3L + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BP3LDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BP3LConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP3LConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP3LDisConnectNoti object:nil]; + // BP5S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BP5SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BP5SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP5SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP5SDisConnectNoti object:nil]; + // BP7S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BP7SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BP7SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BP7SDisConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BP7SConnectFailed object:nil]; + // KN550BT + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:KN550BTDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:KN550BTConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:KN550BTDisConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:KN550BTConnectFailed object:nil]; + // HS4S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:HS4Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:HS4ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:HS4ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:HS4DisConnectNoti object:nil]; + // HS2 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:HS2Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:HS2ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:HS2ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:HS2DisConnectNoti object:nil]; + // HS2S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:HS2SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:HS2SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:HS2SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:HS2SDisConnectNoti object:nil]; + // BG1 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(bg1Discover:) name:kNotificationNameNeedAudioPermission object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(bg1Connect:) name:kNotificationNameAudioDeviceInsert object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceBG1Disconnect:) name:kNotificationNameBG1DidDisConnect object:nil]; + // BG5 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BG5ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BG5DisConnectNoti object:nil]; + // BG5S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:kNotificationNameBG5SDidDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:kNotificationNameBG5SConnectFail object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:kNotificationNameBG5SConnectSuccess object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:kNotificationNameBG5SDidDisConnect object:nil]; + // ECG3 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:ECG3Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:ECG3ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:ECG3ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:ECG3DisConnectNoti object:nil]; + // ECG3USB + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:ECGUSBConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:ECGUSBDisConnectNoti object:nil]; + // BTM(THV3) + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:THV3Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:THV3ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:THV3ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:THV3DisConnectNoti object:nil]; + // NT13B + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:NT13BDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:NT13BConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:NT13BConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:NT13BDisConnectNoti object:nil]; + // TS28B + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(disconnectTS28B) name:@"disconnectTS28B" object:nil]; + // PO1 + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:PO1Discover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:PO1ConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:PO1ConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:PO1DisConnectNoti object:nil]; + // PT3SBT + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:PT3SBTDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:PT3SBTConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:PT3SBTConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:PT3SBTDisConnectNoti object:nil]; + // BG1S + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDiscover:) name:BG1SDiscover object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnectFailed:) name:BG1SConnectFailed object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceConnect:) name:BG1SConnectNoti object:nil]; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(deviceDisconnect:) name:BG1SDisConnectNoti object:nil]; + + NSLog(@"iHealthScanner: *** ensureInitialized DONE ***"); + }); +} + +RCT_EXPORT_METHOD(startDiscovery:(nonnull NSString *)deviceType){ + [self ensureInitialized]; + NSLog(@"iHealthScanner: startDiscovery called with type=%@", deviceType); + if ([deviceType isEqualToString:kType_BP5]){ + + NSArray*bp5array = [[BP5Controller shareBP5Controller] getAllCurrentBP5Instace]; + if (bp5array.count) { + for (int i=0; i