react-native-bt-device/ios/RNBTDevice/Device/RNMethodModule.mm

932 lines
28 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// ENDeviceManager.m
// ENBLEProject
//
// Created by lvwang2002 on 16/4/6.
// Copyright © 2016年 Facebook. All rights reserved.
//
// 20161023 14:17 修改超时验证的问题.
// 20170223 10:18 增加血压驱动
// 20170223 11:10 修改bug
// 20170223 13:34 修改bug
// 20170223 15:42 修改bug
// 20170223 17:04 增加身份证读卡器
// 20170227 10:43 修改one callback的bug
// 20170227 13:47 修改模拟器下不能运行的bug
// 20170228 11:36 增加血压计断开连接指令
// 20170228 11:36 增加血压计断开连接指令
// 20170302 10:55 修改自动启动血压计测量
// 20170302 13:11 身份证读卡器不能断开连接
// 20170302 15:21 修改bug
// 20170303 16:19 修改身份证bug
#import "RNMethodModule.h"
//#import "RCTLog.h"
//#import "RCTBridge.h"
//#import "RCTEventDispatcher.h"
#import "ENBPDevice.h"
#import "ENPangaoBPDevice.h"
//#import "glucose.h"
@implementation RNMethodModule{
ENBLEDeviceManager *_deviceManager;
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
// INVSBleTool *_bletool;
#endif
BLEDevice *_cardDevice;
Boolean _isUpdateDeviceList;
RCTPromiseResolveBlock _resolve;
RCTPromiseRejectBlock _reject;
RCTPromiseResolveBlock _startCardResolve;
RCTPromiseRejectBlock _startCardRejecte;
RCTPromiseResolveBlock _endCardResolve;
RCTPromiseRejectBlock _endCardReject;
RCTPromiseResolveBlock _connectCardResolve;
RCTPromiseRejectBlock _connectCardReject;
NSArray *_deviveStatusList;
}
RCT_EXPORT_MODULE();
@synthesize bridge = _bridge;
-(instancetype)init{
self = [super init];
if(self){
_deviceManager = [ENBLEDeviceManager shareDeviceManager];
_deviceManager.deviceManagerDelegate = self;
[_deviceManager setSearchedDeviceType:ENSearchedBPType];
[_deviceManager setIsShowLog:YES];
_isUpdateDeviceList = false;
_deviveStatusList = @[@"Discovered", @"Connecting", @"Connected", @"Disconnecting", @"Disconnect",@"ConnectFailed"];
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
// _bletool=[[INVSBleTool alloc]init:self];
#endif
}
// uint16 args[] = {6, 279, 0, 150, 18, 80, 52, 0};
// uint16 *result = [glucose GlucoseCalculatio:args];
//
// NSLog(@"%hi,%hi,%hi,%hi,%hi,%hi,%hi,%hi", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7]);
return self;
}
RCT_EXPORT_METHOD(addEvent:(NSString *)name location:(NSString *)location){
NSLog(@"Pretending to create an event %@ at %@", name, location);
}
//startBleManager
RCT_EXPORT_METHOD(startBLEScan){
[_deviceManager startScan];
}
-(void)didUpdateBTStatus:(ENBTStatus)status{
NSString *btStatus = nil;
if(status == ENBTPowerOnStatus){
NSLog(@"打开蓝牙");
// [_deviceManager startScan];
btStatus = @"on";
}else{
NSLog(@"关闭蓝牙");
btStatus = @"off";
}
NSDictionary *info = @{
@"status":btStatus
};
[self.bridge.eventDispatcher sendAppEventWithName:@"UPDATE_BT_STATUS" body:info];
}
-(void)didDiscoverDevice:(BLEDevice *)device IsNewly:(BOOL)isNewly{
// RCTLogInfo(@"Pretending to create an event%@", [device getDeviceName]);
if(!isNewly){
ENLog(@"已经侦测到设备");
return;
}
device.deviceDelegate = self;
// [device connect];
NSDictionary *body =@{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"开始连接",
@"deviceStatus":@"startConnect"
};
// [self sendEventWithName:@"DISCOVER_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"DISCOVER_ALL_BT_DEVICE" body:body];
// if([[device getDeviceName] hasPrefix:@"INVS300"]){
// dispatch_async([_deviceManager getPostQueue], ^{
//#if TARGET_IPHONE_SIMULATOR//模拟器
//
//#elif TARGET_OS_IPHONE //真机
// BOOL isOk = [_bletool connectBt:[device getPeripheral]];
// _cardDevice = device;
//#endif
//
// });
// return;
//
// }
// NSLog(@"设备名字:%@",[device getDeviceDisplayName]);
}
-(void)didUpdateSearchedDevices:(NSArray *)searchedDevices{
if(!_isUpdateDeviceList){
return;
}
NSMutableArray *tempDevices = [[NSMutableArray alloc] initWithCapacity:10];
for(BLEDevice *device in searchedDevices){
NSMutableDictionary *map = [[NSMutableDictionary alloc] initWithCapacity:10];
[map setObject:[device getDeviceName] forKey:@"deviceName"];
[map setObject:[[device getDeviceUUID] UUIDString] forKey:@"deviceMac"];
[map setObject:[[(BLEDevice *)device getNativeDevice] getDeviceDisplayName] forKey:@"deviceDisplayName"];
unsigned long statusIndex = (unsigned long)device.connectStatus;
NSString *deviceStatus = _deviveStatusList[statusIndex];
[map setObject:deviceStatus forKey:@"deviceStatus"];
[tempDevices addObject:map];
NSString *connectedStatus = [[device getNativeDevice] getConnectedStatus];
[map setObject:connectedStatus forKey:@"connectedStatus"];
}
// [self sendEventWithName:@"UPDATE_DEVICE_LIST" body:tempDevices];
[self.bridge.eventDispatcher sendAppEventWithName:@"UPDATE_DEVICE_LIST" body:tempDevices];
}
//开始接收扫描到的设备
RCT_EXPORT_METHOD(setBluetooth){
}
//开始接收扫描到的设备
RCT_EXPORT_METHOD(startUpdateDeviceList){
_isUpdateDeviceList = true;
}
//停止接收扫描到的设备
RCT_EXPORT_METHOD(stopUpdateDeviceList){
_isUpdateDeviceList = false;
}
//是否显示日志
RCT_EXPORT_METHOD(showLog:(BOOL)isShow){
[_deviceManager setIsShowLog:isShow];
}
RCT_EXPORT_METHOD(forceUpdateDeviceList){
// BleDeviceManager.get(mReactContext).postUpdateDeviceList();
[[ENBLEDeviceManager shareDeviceManager] postUpdateDeviceList];
}
-(void)didConnectedDevice:(BLEDevice *)device{
/** MQ动态血糖有单独模块处理 */
if([[device getDeviceName] hasPrefix:@"O"]){
return;
}
if([[device getDeviceName] hasPrefix:@"TH-"]){
return;
}
device.nativeDevice.deviceDelegate = self;
if([[device getDeviceName] hasPrefix:@"ClinkBlood"]){
return;
}
NSDictionary *body =@{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"连接成功",
@"deviceStatus":@"connectSuc"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"CONNECTED_BT_DEVICE" body:body];
}
-(void)didDisconnectDevice:(BLEDevice *)device{
NSDictionary *body =@{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatus":@"disconnect"
};
// [self sendEventWithName:@"DISCONNECTED_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"DISCONNECT_BT_DEVICE" body:body];
}
-(void)didOverTimeForConnectDevice:(BLEDevice *)device{
NSDictionary *body =@{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatus":@"connect time over"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"ERROR_BT_DEVICE" body:body];
}
//开始扫描血糖
RCT_EXPORT_METHOD(startScanGlucose){
@synchronized (self) {
[_deviceManager setSearchedDeviceType:ENSearchedGlucoType];
_deviceManager.deviceManagerDelegate = self;
[_deviceManager startScan];
}
}
//停止扫描血糖
RCT_EXPORT_METHOD(stopScanGlucose){
@synchronized (self) {
[_deviceManager setSearchedDeviceType:ENSearchedGlucoType];
// _deviceManager.deviceManagerDelegate = nil;
[_deviceManager stopScan];
}
}
//连接单个血糖仪器,并断开其他所有的连接.
RCT_EXPORT_METHOD(connectSingleDevice:(NSString *)deviceMac){
@synchronized (self) {
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:deviceMac];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
if(!device){
// reject(@"402",@"can not find device",nil);
NSDictionary *body = @{
@"deviceName":@"no device",
@"deviceMac":deviceMac,
@"deviceStatusDescription":@"no device",
@"deviceStatus":@"error"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"ERROR_BT_DEVICE" body:body];
return;
}
device.deviceDelegate = self;
[device connect];
//其他的设备都关闭
NSArray *devices = [_deviceManager getSearchedDevices];
NSLog(@"%@", devices);
for(BLEDevice *myDevice in devices){
NSString *myDeviceUUID = [[myDevice getUUID] UUIDString];
if([myDeviceUUID isEqualToString:deviceMac]){
continue;
}
if((myDevice.connectStatus != DeviceConnectingStatus) &&
(myDevice.connectStatus != DeviceConnectedStatus)){
continue;
}
if([[myDevice getDeviceName] hasPrefix:@"O"]){
continue;
}
if([[myDevice getDeviceName] hasPrefix:@"TH-"]){
continue;
}
dispatch_async([_deviceManager getPostQueue], ^{
[myDevice disconnect];
});
}
}
}
RCT_EXPORT_METHOD(disconnectGlucose:(NSString *)deviceMac){
@synchronized (self) {
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:deviceMac];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
if(!device){
return;
}
[device disconnect];
}
}
RCT_REMAP_METHOD(getConnectedGlucose,
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject){
@synchronized (self) {
NSArray *devices = [_deviceManager getSearchedDevices];
NSMutableArray *glucoseDevices = [[NSMutableArray alloc]initWithCapacity:10];
for(BLEDevice *device in devices){
if(!([[device getDeviceName] hasPrefix:@"Glucose"]
|| [[device getDeviceName] hasPrefix:@"BLE-ENUO"]
|| [[device getDeviceName] hasPrefix:@"ENUO-G"])){
continue;
}
ConnectStatus status = device.connectStatus;
if(status != DeviceConnectedStatus && status != DeviceConnectingStatus){
continue;
}
NSMutableDictionary *info = [[NSMutableDictionary alloc] initWithCapacity:10];
[info setObject:[device getDeviceName] forKey:@"deviceName"];
[info setObject:[[device getDeviceUUID] UUIDString] forKey:@"deviceMac"];
[glucoseDevices addObject:info];
}
resolve(glucoseDevices);
}
}
/** 开始扫描全部设备 */
RCT_EXPORT_METHOD(startScanDevice){
@synchronized (self) {
[_deviceManager setSearchedDeviceType:ENSearchedAllType];
_deviceManager.deviceManagerDelegate = self;
[_deviceManager startScan];
}
}
RCT_EXPORT_METHOD(stopScanDevice){
@synchronized (self) {
[_deviceManager stopScan];
}
}
/** 开始扫描血压 */
RCT_EXPORT_METHOD(startScanBP){
@synchronized (self) {
[_deviceManager setSearchedDeviceType:ENSearchedBPType];
_deviceManager.deviceManagerDelegate = self;
[_deviceManager startScan];
}
}
/** 停止扫描血压 */
RCT_EXPORT_METHOD(stopScanBP){
@synchronized (self) {
[_deviceManager stopScan];
}
}
//连接单个血压计
//public void connectSingleBPDevice(String deviceMac)
RCT_EXPORT_METHOD(connectSingleBPDevice:(NSString *)uuid){
@synchronized (self) {
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:uuid];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
if(!device){
// reject(@"402",@"can not find device",nil);
NSDictionary *body = @{
@"deviceName":@"no device",
@"deviceMac":uuid,
@"deviceStatusDescription":@"no device",
@"deviceStatus":@"error"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"ERROR_BT_DEVICE" body:body];
return;
}
device.deviceDelegate = self;
[device connect];
//其他的设备都关闭
NSArray *devices = [_deviceManager getSearchedDevices];
for(BLEDevice *myDevice in devices){
NSString *myDeviceUUID = [[myDevice getUUID] UUIDString];
if([myDeviceUUID isEqualToString:uuid]){
continue;
}
if((myDevice.connectStatus != DeviceConnectingStatus) &&
(myDevice.connectStatus != DeviceConnectedStatus)){
continue;
}
dispatch_async([_deviceManager getPostQueue], ^{
[myDevice disconnect];
});
}
}
}
//开始血压测量
RCT_EXPORT_METHOD(startTestBP:(NSString *)uuid){
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:uuid];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
if([device.getDeviceName isEqualToString:@"ClinkBlood"]){
ENPangaoBPDevice *bpDevice = (ENPangaoBPDevice *)device.nativeDevice;
if(device == nil){
ENLog(@"start test bp");
return;
}
[bpDevice startTest];
}else{
ENBPDevice *bpDevice = (ENBPDevice *)device.nativeDevice;
if(device == nil){
ENLog(@"start test bp");
return;
}
[bpDevice startTest];
}
}
//停止血压测量
RCT_EXPORT_METHOD(stopTestBP:(NSString *)uuid){
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:uuid];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
ENBPDevice *bpDevice = (ENBPDevice *)device.nativeDevice;
if(device == nil){
ENLog(@"stop test bp");
return;
}
[bpDevice stopTest];
}
/** 请求血压电量 */
RCT_EXPORT_METHOD(getBPBatteryValue:(NSString *)uuid){
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:uuid];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
ENPangaoBPDevice *bpDevice = (ENPangaoBPDevice *)device.nativeDevice;
if(device == nil){
ENLog(@"stop test bp");
return;
}
[bpDevice sendGetBatteryValue];
}
RCT_REMAP_METHOD(getConnectedBP,
BPResolver:(RCTPromiseResolveBlock)resolve
BPRejecter:(RCTPromiseRejectBlock)reject){
@synchronized (self) {
NSArray *devices = [_deviceManager getSearchedDevices];
NSMutableArray *bpDevices = [[NSMutableArray alloc]initWithCapacity:10];
for(BLEDevice *device in devices){
if(!([[device getDeviceName] hasPrefix:@"RBP"] ||
[[device getDeviceName] hasPrefix:@"ClinkBlood"])){
continue;
}
ConnectStatus status = device.connectStatus;
if(status != DeviceConnectedStatus && status != DeviceConnectingStatus){
continue;
}
NSMutableDictionary *info = [[NSMutableDictionary alloc] initWithCapacity:10];
[info setObject:[device getDeviceName] forKey:@"deviceName"];
[info setObject:[[device getDeviceUUID] UUIDString] forKey:@"deviceMac"];
[bpDevices addObject:info];
}
resolve(bpDevices);
}
}
#pragma mark -
#pragma mark 血糖代理
-(void)getResult:(NSDictionary *)result WithDevice:(BLEDevice *)device{
@synchronized (self) {
NSString *glucoseValue = nil;
NSString *resultType = @"glucose";
NSNumber *checkTimeFlagNumber;
NSDate *curDate = [NSDate date];
NSString *deviceName = [device getDeviceName];
// NSString *uuid = [[device getUUID] UUIDString];
if([deviceName hasPrefix:@"BLE-ENUO"]){
if([result[@"flag"]intValue]>=4096){
float value = [result[@"Glucose"] floatValue]/10+0.05;
glucoseValue = [NSString stringWithFormat:@"%d.%d",(int)value,((int)(value*10)%10)];
resultType = @"ketone";
}else{
float value = [result[@"Glucose"] floatValue]/18+0.05;
glucoseValue = [NSString stringWithFormat:@"%d.%d",(int)value,((int)(value*10)%10)];
resultType = @"glucose";
}
float value = [result[@"Glucose"] floatValue]/18+0.05;
glucoseValue = [NSString stringWithFormat:@"%d.%d",(int)value,((int)(value*10)%10)];
NSString *checkTimeString = [NSString stringWithFormat:@"%@-%@-%@ %@:%@",[result objectForKey:@"year"], [result objectForKey:@"month"],[result objectForKey:@"date"],[result objectForKey:@"hour"],[result objectForKey:@"minute"]];// yyyy-MM-dd HH:mm
checkTimeFlagNumber = @([RNMethodModule getLongLongTimeIntervalWithStrDate:checkTimeString]);
}else if([deviceName hasPrefix:@"ENUO-G"]){
resultType = @"glucose";
glucoseValue =result[@"displayValue"];
NSString *checkTimeString = [NSString stringWithFormat:@"%@-%@-%@ %@:%@",[result objectForKey:@"year"], [result objectForKey:@"month"],[result objectForKey:@"date"],[result objectForKey:@"hour"],[result objectForKey:@"minute"]];// yyyy-MM-dd HH:mm
checkTimeFlagNumber = @([RNMethodModule getLongLongTimeIntervalWithStrDate:checkTimeString]);
}else{
float value = [result[@"Glucose"] floatValue];
glucoseValue = [NSString stringWithFormat:@"%d.%d",(int)value,((int)(value*10)%10)];
checkTimeFlagNumber = @([RNMethodModule getLongLongTimeIntervalWithDate:curDate]);
}
NSString *content = [NSString stringWithFormat:@"time:%@ /n血糖值:%@",
[NSDate date],glucoseValue];
NSLog(@"result:%@",content);
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"测量成功",
@"deviceStatus":@"result",
@"time":[[NSDate date] description],
@"resultType":resultType,
@"value":result[@"Glucose"],
@"displayValue":glucoseValue,
@"deviceTime":[NSString stringWithFormat:@"%@",checkTimeFlagNumber]
};
// [self sendEventWithName:@"RESULT_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"RESULT_BT_DEVICE" body:body];
}
}
#pragma mark 血压
/** 血压连接成功 */
-(void)onConnectedBP{
ENLog(@"连接成功.");
}
/** 获得电池电量 */
-(void)onBatteryPower:(unsigned long)power{
NSLog(@"电池电量:%ld",power);
}
/** 得到测量结果 */
-(void)onResult:(NSDictionary *)result WithDevice:(BLEDevice *)device{
NSLog(@"血压结果:%@",result);
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"测量成功",
@"deviceStatus":@"result",
@"pul":result[@"pul"],
@"dia":result[@"dia"],
@"sys":result[@"sys"]
};
// [self sendEventWithName:@"RESULT_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"RESULT_BP_BT_DEVICE" body:body];
}
/** 得到测量 */
-(void)onProgressValue:(NSInteger)value IsHeart:(Boolean)isHeart WithDevice:(BLEDevice *)device{
NSLog(@"测量过程:%ld",(long)value);
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"测量过程",
@"deviceStatus":@"receivingData",
@"value":@(value)
};
// [self sendEventWithName:@"RECEIVING_DATA_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"RECEIVING_DATA_BP_BT_DEVICE" body:body];
}
/** 得到错误数据 */
-(void)onError:(NSDictionary *)error WithDevice:(BLEDevice *)device{
NSLog(@"错误:%@",error);
// NSString *errorDescription = [NSString stringWithFormat:@"测量错误:%@",error];
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"errorCode":error[@"errorCode"],
@"errorDescription":error[@"error"],
@"deviceStatus":@"BPDeviceError"
};
// [self sendEventWithName:@"ERROR_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"BP_DEVICE_ERROR" body:body];
}
/** 开始测量 */
-(void)onStartTestWithDevice:(BLEDevice *)device{
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"bp start test",
@"deviceStatus":@"start.test"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"BP_START_TEST" body:body];
}
/** 停止测量 */
-(void)onStopTestWithDevice:(BLEDevice *)device{
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"bp stop test",
@"deviceStatus":@"stop.test"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"BP_STOP_TEST" body:body];
}
/** 停止浮零 */
-(void)onStopZeroWithDevice:(BLEDevice *)device{
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"bp stop test",
@"deviceStatus":@"stop.zero"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"BP_STOP_ZERO" body:body];
}
/** 获取电量 */
-(void)onPower:(int)power WithDevice:(BLEDevice *)device{
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"bp power",
@"deviceStatus":@"device.power",
@"value":[[NSNumber numberWithInt:power] stringValue]
};
[self.bridge.eventDispatcher sendAppEventWithName:@"BP_POWER" body:body];
}
/** 血压计发送关机指令 */
-(void)onDeviceShutDownWithDevice:(BLEDevice *) device{
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"bp shut down",
@"deviceStatus":@"device.power.shut.down"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"DEVICE_SHUT_DOWN" body:body];
}
-(void)onCheckConnectFinishWithDevice:(BLEDevice *)device Status:(BOOL)isSuc{
if(!isSuc){
return;
}
NSDictionary *body =@{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"连接成功",
@"deviceStatus":@"connectSuc"
};
[self.bridge.eventDispatcher sendAppEventWithName:@"CONNECTED_BT_DEVICE" body:body];
}
#pragma mark 血脂
-(void)onCholesterolResult:(NSDictionary *)result WithDevice:(BLEDevice *)device{
// @"chol":dataArr[0],
// @"hdl":dataArr[1],
// @"trig":dataArr[2],
// @"ldl":dataArr[3]
NSString *cholesterolResult = [NSString stringWithFormat:@"chol:%@ hdl:%@ trig:%@ ldl:%@",result[@"chol"],result[@"hdl"],result[@"trig"],result[@"ldl"]];
NSLog(@"血脂结果:%@",cholesterolResult);
NSDictionary *body = @{
@"deviceName":[device getDeviceName],
@"deviceMac":[[device getUUID] UUIDString],
@"deviceStatusDescription":@"测量成功",
@"deviceStatus":@"result",
@"time":[[NSDate date] description],
@"chol":result[@"chol"],
@"hdl":result[@"hdl"],
@"trig":result[@"trig"],
@"ldl":result[@"ldl"]
};
// [self sendEventWithName:@"RESULT_BT_DEVICE" body:body];
[self.bridge.eventDispatcher sendAppEventWithName:@"RESULT_BT_DEVICE" body:body];
}
//synchronized public void connectCardReader(final String deviceMac, final Promise promise) {
#pragma mark -
#pragma mark 身份证读卡器
RCT_REMAP_METHOD(startCardReaderScan,
startCardResolve:(RCTPromiseResolveBlock)resolve
startCardReject:(RCTPromiseRejectBlock)reject){
[_deviceManager setSearchedDeviceType:ENSearchedAllType];
_deviceManager.deviceManagerDelegate = self;
[_deviceManager startScan];
_startCardResolve = resolve;
}
RCT_REMAP_METHOD(stopCardReaderScan,
endCardResolve:(RCTPromiseResolveBlock)resolve
endCardReject:(RCTPromiseRejectBlock)reject){
dispatch_async([_deviceManager getPostQueue], ^{
[_deviceManager stopScan];
_endCardResolve = resolve;
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
// [_bletool disconnectBt];
#endif
// if(!_cardDevice){
// reject(@"400",@"no device",nil);
// return;
// }
//
// [_bletool disconnectBt];
resolve(@"disconnect");
});
}
RCT_EXPORT_METHOD(connectCardReader:(NSString *)uuid
connectCardResolve:(RCTPromiseResolveBlock)resolve
connectCardReject:(RCTPromiseRejectBlock)reject){
@synchronized ([NSDate date]) {
NSLog(@"connect card reader");
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:uuid];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
if(device == nil){
NSLog(@"stop test bp");
return;
}
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
// [_bletool connectBt:[device getPeripheral]];
#endif
_cardDevice = device;
_connectCardResolve = resolve;
_connectCardReject = reject;
}
}
-(void)BR_connectResult:(BOOL)isconnected{
@synchronized ([NSDate date]) {
if(!isconnected){
NSDictionary *body =@{
@"deviceName":[_cardDevice getDeviceName],
@"deviceMac":[[_cardDevice getUUID] UUIDString],
@"deviceStatus":@"disconnect"
};
[_deviceManager removeDevice:_cardDevice];
[self.bridge.eventDispatcher sendAppEventWithName:@"DISCONNECT_BT_DEVICE" body:body];
return;
}
if(!_connectCardResolve){
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
// [_bletool disconnectBt];
#endif
return;
}
_connectCardResolve(@"connected");
_startCardResolve =nil;
_connectCardResolve = nil;
_connectCardReject = nil;
}
}
RCT_EXPORT_METHOD(disconnectDevice:(NSString *)deviceMac){
@synchronized (self) {
NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:deviceMac];
BLEDevice *device = [_deviceManager getDeviceWithUUID:myUUID];
if(!device){
return;
}
[device disconnect];
}
}
/** 开始服务 */
RCT_REMAP_METHOD(readCard,
readCardResolver:(RCTPromiseResolveBlock)resolve
readCardRejecter:(RCTPromiseRejectBlock)reject){
dispatch_async([_deviceManager getPostQueue], ^{
#if TARGET_IPHONE_SIMULATOR//模拟器
#elif TARGET_OS_IPHONE//真机
// if(!_bletool){
// reject(@"400",@"no device",[NSError errorWithDomain:@"device" code:400 userInfo:@{}]);
// return;
// }
//
// NSDictionary *obj = [_bletool readCard];
// if(!obj){
// reject(@"400",@"no device",[NSError errorWithDomain:@"device" code:400 userInfo:@{}]);
// return;
// }
//
//// NSMutableString *resultContent = [[NSMutableString alloc] init];
//
// NSInteger resultFlag = [obj[@"resultFlag"] integerValue];
// if(resultFlag == -1){
// reject(@"400",@"no data",[NSError errorWithDomain:@"device" code:400 userInfo:@{}]);
// }else{
// NSMutableDictionary *info = [[NSMutableDictionary alloc] initWithCapacity:10];
//
// [info setObject:obj[@"partyName"] forKey:@"name"];
// [info setObject:obj[@"certAddress"] forKey:@"address"];
// [info setObject:obj[@"bornDay"] forKey:@"birth"];
// [info setObject:obj[@"expDate"] forKey:@"end"];
// [info setObject:obj[@"certNumber"] forKey:@"idNo"];
// [info setObject:obj[@"nation"] forKey:@"nation"];
// [info setObject:obj[@"certOrg"] forKey:@"police"];
// [info setObject:obj[@"gender"] forKey:@"sex"];
// [info setObject:obj[@"effDate"] forKey:@"start"];
//
// resolve([info copy]);
// }
#endif
});
}
// 根据日期字符串yyyy-MM-dd HH:mm获取整形的毫秒时间戳后三位为000
+ (long long)getLongLongTimeIntervalWithStrDate:(NSString *)strDate{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm";
NSDate *currentDate = [dateFormatter dateFromString:strDate];
return [RNMethodModule getLongLongTimeIntervalWithDate:currentDate];
}
// 根据日期date 获取整形的毫秒时间戳后三位为000
+ (long long)getLongLongTimeIntervalWithDate:(NSDate *)date{
long long longtimeInterval = (long long)[date timeIntervalSince1970] * 1000;
return longtimeInterval;
}
//开始扫描血糖
RCT_EXPORT_METHOD(startScanDynamicGlucose){
@synchronized (self) {
[_deviceManager setSearchedDeviceType:ENSearchedAllType];
_deviceManager.deviceManagerDelegate = self;
[_deviceManager startScan];
}
}
//停止扫描血糖
RCT_EXPORT_METHOD(stopScanDynamicGlucose){
@synchronized (self) {
[_deviceManager setSearchedDeviceType:ENSearchedAllType];
// _deviceManager.deviceManagerDelegate = nil;
[_deviceManager stopScan];
}
}
@end