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

296 lines
7.3 KiB
Objective-C
Executable File
Raw 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.

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