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 --- .../ios/ReactNativeIOSLibrary/BP3LModule.m | 226 +++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100755 libs/ihealth-sdk/ios/ReactNativeIOSLibrary/BP3LModule.m (limited to 'libs/ihealth-sdk/ios/ReactNativeIOSLibrary/BP3LModule.m') diff --git a/libs/ihealth-sdk/ios/ReactNativeIOSLibrary/BP3LModule.m b/libs/ihealth-sdk/ios/ReactNativeIOSLibrary/BP3LModule.m new file mode 100755 index 0000000..05adb0c --- /dev/null +++ b/libs/ihealth-sdk/ios/ReactNativeIOSLibrary/BP3LModule.m @@ -0,0 +1,226 @@ +// +// BP3LModule.m +// ReactNativeIOSLibrary +// +// Created by Liu Yanbo on 2016/12/05. +// Copyright © 2016年 Liu Yanbo. All rights reserved. +// + +#import "BP3LModule.h" +#import "BPProfileModule.h" +#import "BPMacroFile.h" +#import "BP3LController.h" +#import "BP3L.h" +#import "iHealthDeviceManagerModule.h" + +#import "ScanDeviceController.h" +#import "ConnectDeviceController.h" +#define EVENT_NOTIFY @"BP3L.MODULE.NOTIFY" + +@interface BP3LModule () +@property (nonatomic, assign) BOOL isMeasuring; + +@end + +@implementation BP3LModule +RCT_EXPORT_MODULE() +- (NSArray *)supportedEvents { + return @[@"event_notify", @"event_scan_device", @"event_scan_finish", + @"event_device_connected", @"event_device_connect_failed", + @"event_device_disconnect", @"event_authenticate_result", + @"event_notify_ts28b", @"event_notify_bg1", + @"action_connect_result_for_bg1"]; +} + + +- (NSDictionary *)constantsToExport +{ + return @{ + @"Event_Notify":EVENT_NOTIFY, + + }; +} ++ (BOOL)requiresMainQueueSetup +{ + return YES; +} + +-(BP3L*)getDeviceWithMac:(NSString*)mac{ + + BP3LController *controller = [BP3LController shareBP3LController]; + NSArray *bpDeviceArray = [controller getAllCurrentBP3LInstace]; + + for(BP3L *tempDevice in bpDeviceArray){ + if([mac isEqualToString:tempDevice.serialNumber]){ + + return tempDevice; + } + } + + return nil; +} + + +#pragma mark - Method + + +#pragma mark-获取连接设备 +RCT_EXPORT_METHOD(getAllConnectedDevices){ + + + NSArray*bp3larray= [[BP3LController shareBP3LController] getAllCurrentBP3LInstace]; + + NSMutableArray*deviceMacArray=[NSMutableArray array]; + + for (int i=0; i<[bp3larray count]; i++) { + + BP3L*bp3l=[bp3larray objectAtIndex:i]; + + [deviceMacArray addObject:bp3l.serialNumber]; + + } + + NSDictionary* deviceInfo = @{@"action":@"ACTION_GET_ALL_CONNECTED_DEVICES",@"devices":deviceMacArray}; + + [self sendEventWithName:EVENT_NOTIFY body:deviceInfo]; + + +} + + + + +RCT_EXPORT_METHOD(startMeasure:(nonnull NSString *)mac){ + + if ([self getDeviceWithMac:mac]!=nil) { + __weak typeof(self) weakSelf = self; + + [[self getDeviceWithMac:mac] commandStartMeasureWithZeroingState:^(BOOL isComplete) { + weakSelf.isMeasuring = YES; + NSDictionary* response = @{ + kACTION:isComplete ? kACTION_ZOREING_BP : kACTION_ZOREOVER_BP, + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + } pressure:^(NSArray *pressureArr) { + weakSelf.isMeasuring = YES; + NSLog(@"pressure %@",pressureArr); + NSDictionary* response = @{ + kACTION:kACTION_ONLINE_PRESSURE_BP, + kBLOOD_PRESSURE_BP:pressureArr.firstObject, + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + } waveletWithHeartbeat:^(NSArray *waveletArr) { + weakSelf.isMeasuring = YES; + NSLog(@"xiaoboWithHeart %@",waveletArr); + NSDictionary* response = @{ + kACTION:kACTION_ONLINE_PULSEWAVE_BP, + kFLAG_HEARTBEAT_BP:@(1), + kPULSEWAVE_BP:waveletArr + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + } waveletWithoutHeartbeat:^(NSArray *waveletArr) { + weakSelf.isMeasuring = YES; + NSLog(@"xiaoboNoHeart %@",waveletArr); + NSDictionary* response = @{ + kACTION:kACTION_ONLINE_PULSEWAVE_BP, + kFLAG_HEARTBEAT_BP:@(0), + kPULSEWAVE_BP:waveletArr + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + } result:^(NSDictionary *resultDict) { + weakSelf.isMeasuring = NO; + NSLog(@"result %@",resultDict); + NSDictionary* response = @{ + kACTION:kACTION_ONLINE_RESULT_BP, + kHIGH_BLOOD_PRESSURE_BP:resultDict[@"sys"], + kLOW_BLOOD_PRESSURE_BP:resultDict[@"dia"], + kPULSE_BP:resultDict[@"heartRate"], + kMEASUREMENT_AHR_BP:resultDict[@"irregular"], + kDATAID:resultDict[@"dataID"], + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + } errorBlock:^(BPDeviceError error) { + weakSelf.isMeasuring = NO; + NSLog(@"error %d",error); + [BPProfileModule sendErrorToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithCode:error]; + }]; + + }else{ + self.isMeasuring = NO; + NSLog(@"error %d",BPDidDisconnect); + [BPProfileModule sendErrorToEmitter:self eventNotify:EVENT_NOTIFY WithCode:BPDidDisconnect]; + } + + +} + + +RCT_EXPORT_METHOD(stopMeasure:(nonnull NSString *)mac){ + if (!self.isMeasuring) { + NSLog(@"error %d",401); + [BPProfileModule sendErrorToEmitter:self eventNotify:EVENT_NOTIFY WithCode:401]; + return; + } + __weak typeof(self) weakSelf = self; + if ([self getDeviceWithMac:mac]!=nil) { + [[self getDeviceWithMac:mac] stopBPMeassureSuccessBlock:^{ + + weakSelf.isMeasuring = NO; + NSDictionary* response = @{ + kACTION:kACTION_INTERRUPTED_BP, + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + + } errorBlock:^(BPDeviceError error) { + + NSLog(@"error %d",error); + weakSelf.isMeasuring = NO; + [BPProfileModule sendErrorToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithCode:error]; + }]; + + + }else{ + weakSelf.isMeasuring = NO; + NSLog(@"error %d",BPDidDisconnect); + [BPProfileModule sendErrorToEmitter:self eventNotify:EVENT_NOTIFY WithCode:BPDidDisconnect]; + } + + +} + +RCT_EXPORT_METHOD(getBattery:(nonnull NSString *)mac){ + + if ([self getDeviceWithMac:mac]!=nil) { + __weak typeof(self) weakSelf = self; + [[self getDeviceWithMac:mac] commandEnergy:^(NSNumber *energyValue) { + NSDictionary* response = @{ + kACTION:kACTION_BATTERY_BP, + kBATTERY_BP:energyValue + }; + [BPProfileModule sendEventToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithDict:response]; + } errorBlock:^(BPDeviceError error) { + NSLog(@"error %d",error); + [BPProfileModule sendErrorToEmitter:weakSelf eventNotify:EVENT_NOTIFY WithCode:error]; + }]; + }else{ + NSLog(@"error %d",BPDidDisconnect); + [BPProfileModule sendErrorToEmitter:self eventNotify:EVENT_NOTIFY WithCode:BPDidDisconnect]; + } + + +} + +RCT_EXPORT_METHOD(disconnect:(nonnull NSString *)mac){ + + if ([self getDeviceWithMac:mac]!=nil) { + [[self getDeviceWithMac:mac] commandDisconnectDevice]; + }else{ + NSLog(@"error %d",BPDidDisconnect); + [BPProfileModule sendErrorToEmitter:self eventNotify:EVENT_NOTIFY WithCode:BPDidDisconnect]; + } + + +} + + +@end -- cgit