react-native-bt-device/ios/RNBTDevice/Device/ENHMDGlucoDevice.m

296 lines
7.3 KiB
Mathematica
Raw Normal View History

2024-03-24 09:45:44 +00:00
//
// ENHMDGlucoDevice.m
// ENBLEProject
//
// Created by lvwang2002 on 16/4/7.
// Copyright © 2016 Facebook. All rights reserved.
//
#import "ENHMDGlucoDevice.h"
static NSString *displayName = @"好轻松血糖仪";
@implementation ENHMDGlucoDevice{
NSArray *_characteristics;
}
-(id)initWithPeripheral:(CBPeripheral *)peripheral WithCentralManager:(CBCentralManager *)centerManager WithDevice:(BLEDevice *)device{
self = [super initWithPeripheral:peripheral WithCentralManager:centerManager WithDevice:device];
if(self){
}
return self;
}
-(NSString *)getDeviceDisplayName{
return displayName;
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{
if (error){
NSLog(@"didDiscoverServices : %@", [error localizedDescription]);
return;
}
for (CBService * service in peripheral.services) {
/**
* UUID
*/
// if ([[self.advertisementData[@"kCBAdvDataServiceUUIDs"] firstObject] isEqual:service.UUID]) {
/**
*
*/
[peripheral discoverCharacteristics:nil forService:service];
}
}
- (void)peripheral:(CBPeripheral *)peripheral
didDiscoverCharacteristicsForService:(CBService *)service
error:(NSError *)error{
if (error){
NSLog(@"didDiscoverCharacteristicsForService error : %@", [error localizedDescription]);
return;
}
_characteristics = service.characteristics;
for (CBCharacteristic * cbCharacteristic in service.characteristics) {
// NSLog(@"获取的UUID为%@", cbCharacteristic.UUID.UUIDString);
if ([cbCharacteristic.UUID isEqual:[CBUUID UUIDWithString:@"2A18"]]) {
[peripheral setNotifyValue:YES forCharacteristic:cbCharacteristic];
}
if ([cbCharacteristic.UUID.UUIDString isEqual:@"2A25"]) {
[peripheral readValueForCharacteristic:cbCharacteristic];
}
}
}
//- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
// [self caculateWithData:[characteristic value]];
//}
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForReceiveData:(NSData *)data UUID:(CBUUID *)uuid error:(NSError *)error{
[self caculateWithData:data];
}
#pragma mark -
- (void)caculateWithData:(NSData *)data{
Byte * byte = (Byte *)[data bytes];
NSString *hexStr=@"";
NSMutableArray * array = [NSMutableArray array];
for(int i=0;i<[data length];i++){
NSString *newHexStr = [NSString stringWithFormat:@"%x",byte[i]&0xff]; ///16
if([newHexStr length]==1){
hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
[array addObject:[NSString stringWithFormat:@"0%@",newHexStr]];
}else{
hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
[array addObject:newHexStr];
}
}
// NSLog(@"bytes 的16进制数为:%@",hexStr);
if (array.count == 15) {
NSString * str1 = array[array.count - 2];
NSString * str2 = array[array.count - 3];
NSString *strHex = [NSString stringWithFormat:@"%@%@",str2, str1];
NSString *strResult = [self getBinaryByhex:strHex];
NSString *strM = [strHex substringWithRange:NSMakeRange(1, 3)];
NSString *strN = [strResult substringWithRange:NSMakeRange(0, 4)];
NSLog(@"---%@", strResult);
unsigned long resultM = [self getLongIntWithString:strM];
unsigned long resultN = [self getIntWithString:strN];
float myResultValue = resultM;
float resultP = powl(10, (16 - resultN));
float resultBlood = myResultValue / resultP;
NSLog(@"blood %@",@(resultBlood));
// info[@"Glucose"] = @((b[9]&0xff) + 256*(b[10]&0xff));
dispatch_async(dispatch_get_main_queue(), ^{
NSString *glucoseValue = [NSString stringWithFormat:@"%d.%d",(int)resultBlood,((int)(resultBlood*10)%10)];
NSDictionary *info = @{
@"Glucose":@(resultBlood),
@"displayValue":glucoseValue} ;
if([self.deviceDelegate respondsToSelector:@selector(getResult:WithDevice:)]){
[(id)self.deviceDelegate getResult:info WithDevice:_device];
}
});
} else {
NSLog(@"code is %@",hexStr);
}
}
//16
-(NSString *)getBinaryByhex:(NSString *)hex
{
NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] init];
hexDic = [[NSMutableDictionary alloc] initWithCapacity:16];
[hexDic setObject:@"0000" forKey:@"0"];
[hexDic setObject:@"0001" forKey:@"1"];
[hexDic setObject:@"0010" forKey:@"2"];
[hexDic setObject:@"0011" forKey:@"3"];
[hexDic setObject:@"0100" forKey:@"4"];
[hexDic setObject:@"0101" forKey:@"5"];
[hexDic setObject:@"0110" forKey:@"6"];
[hexDic setObject:@"0111" forKey:@"7"];
[hexDic setObject:@"1000" forKey:@"8"];
[hexDic setObject:@"1001" forKey:@"9"];
[hexDic setObject:@"1010" forKey:@"A"];
[hexDic setObject:@"1011" forKey:@"B"];
[hexDic setObject:@"1100" forKey:@"C"];
[hexDic setObject:@"1101" forKey:@"D"];
[hexDic setObject:@"1110" forKey:@"E"];
[hexDic setObject:@"1111" forKey:@"F"];
[hexDic setObject:@"1010" forKey:@"a"];
[hexDic setObject:@"1011" forKey:@"b"];
[hexDic setObject:@"1100" forKey:@"c"];
[hexDic setObject:@"1101" forKey:@"d"];
[hexDic setObject:@"1110" forKey:@"e"];
[hexDic setObject:@"1111" forKey:@"f"];
NSMutableString *binaryString=[[NSMutableString alloc] init];
for (int i=0; i<[hex length]; i++) {
NSRange rage;
rage.length = 1;
rage.location = i;
NSString *key = [hex substringWithRange:rage];
//NSLog(@"%@",[NSString stringWithFormat:@"%@",[hexDic objectForKey:key]]);
binaryString = [[NSString stringWithFormat:@"%@%@",binaryString,[NSString stringWithFormat:@"%@",[hexDic objectForKey:key]]] mutableCopy];
}
//NSLog(@"转化后的二进制为:%@",binaryString);
return binaryString;
}
#pragma mark -
- (unsigned long)getIntWithString:(NSString *)hex
{
unsigned long resultValue = 0;
for (NSInteger j = 0; j < hex.length; j++) {
char value = [hex characterAtIndex:j];
NSInteger i = hex.length - 1 - j;
if (value == '0') {
resultValue += 0 * powl(2, i);
} else if (value == '1') {
resultValue += 1 * powl(2, i);
}
}
return resultValue;
}
#pragma mark -
- (unsigned long)getLongIntWithString:(NSString *)hex
{
unsigned long resultValue = 0;
for (NSInteger j = 0; j < hex.length; j++) {
char value = [hex characterAtIndex:j];
NSInteger i = hex.length - 1 - j;
NSInteger valueR = [self charToInt:value];
resultValue += valueR * powl(16, i);
}
return resultValue;
}
- (NSInteger)charToInt:(char)value
{
if (value == '0') {
return 0;
} else if (value == '1') {
return 1;
} else if (value == '2') {
return 2;
} else if (value == '3') {
return 3;
} else if (value == '4') {
return 4;
} else if (value == '5') {
return 5;
} else if (value == '6') {
return 6;
} else if (value == '7') {
return 7;
} else if (value == '8') {
return 8;
} else if (value == '9') {
return 9;
} else if (value == 'a') {
return 10;
} else if (value == 'A') {
return 10;
} else if (value == 'b') {
return 11;
} else if (value == 'B') {
return 11;
} else if (value == 'c') {
return 12;
} else if (value == 'C') {
return 12;
} else if (value == 'd') {
return 13;
} else if (value == 'D') {
return 13;
} else if (value == 'e') {
return 14;
} else if (value == 'E') {
return 14;
} else if (value == 'f') {
return 15;
} else if (value == 'F') {
return 15;
}
return 0;
}
@end