// // 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