iOS COREBLUETOOTH:将crc命令写入外围设备

时间:2014-12-11 12:55:49

标签: ios core-bluetooth crc32

我正在开发与蓝牙有关的应用程序我的iOS设备充当中央和手表充当外围设备。为了从手表获得一些响应我需要给手表一些命令,以便它给我的信息写下面的代码

    - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic: 
    (CBCharacteristic *)characteristic error:(NSError *)error
 {



                NSString *characteristicUUIDstring = TRANSFER_CHARACTERISTIC_UUID;
                CBUUID *characteristicUUID = [CBUUID 
                UUIDWithString:characteristicUUIDstring];







int comm[6];
comm[0]=0x01;
comm[1]=6;
comm[2]=0x53;
comm[3]=0x00;
comm[4]=0xFFFF;
comm[5]=0xFFFF;
NSMutableArray *arr=[[NSMutableArray  alloc]initWithCapacity:4];
for (int i = 0; i < 4; i++) {
    NSNumber *number = [NSNumber numberWithFloat:comm[i]];
    [arr addObject:number];
}
NSLog(@"mutable arr is %@",arr);

NSString *error1;
NSData *dataarr = [NSPropertyListSerialization dataFromPropertyList:arr  
  format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error1];


NSUInteger len = [dataarr length];
Byte *byteData = (Byte*)malloc(len);
  memcpy(byteData, [dataarr bytes], len);

short crc = (short) 0xFFFF;
for (int j = 0; j < [arr count]; j++)
{
    Byte c = arr[j];
    for (int i = 7; i >= 0; i--)
    {
        BOOL c15 = ((crc >> 15 & 1) == 1);
        BOOL bit = ((c >> (7 - i) & 1) == 1);
        crc <<= 1;
        if (c15 ^ bit)
        {
            crc ^= 0x1021;             }
    }
}
int crc2 = crc - 0xffff0000;
byteData[0] = (Byte) (crc2 % 256);
byteData[1] = (Byte) (crc2 / 256);
NSLog(@"byte data 1is %hhu",byteData[0]);
  NSLog(@"byte data 2is %hhu",byteData[1]);
int com[6];
com[0]=0x01;
com[1]=6;
com[2]=0x53;
com[3]=0x00;
com[4]=byteData[0];
com[5]=byteData[1];

NSMutableArray *sendarr=[[NSMutableArray  alloc]initWithCapacity:6];
for (int i = 0; i < 6; i++) {
    NSNumber *number = [NSNumber numberWithFloat:comm[i]];
    [sendarr addObject:number];
}
  NSLog(@"mutable arr is %@",sendarr);

              //  NSData *data = [NSData datawith:&dataByte length:1];

                CBMutableCharacteristic *testCharacteristic = 
    [[CBMutableCharacteristic alloc] initWithType:characteristicUUID 
    properties:CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite 
    value:sendarr 
   permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];
   NSLog(@"Read or Write %@ ",testCharacteristic);

                [peripheral writeValue:dataarr forCharacteristic:testCharacteristic    
    type:CBCharacteristicWriteWithResponse];


            }

0 个答案:

没有答案
相关问题