读取didUpdateValueForCharacteristic中接收的数据包

时间:2016-01-19 11:45:00

标签: ios objective-c core-bluetooth

我需要读取接收到的字节并使用自定义方法解析它们,该方法基本上遍历字节并跳过每个0x7D(或a})。但是现在发生的事情就是它只为一个收到的数据包做了这个,我不知道为什么会发生这种情况,因为我在didUpdateValueForCharacteristic中调用我的方法:

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    if (error)
    {
        NSLog(@"Error receiving notification for characteristic %@: %@", characteristic, error);
        return;
    }

    NSLog(@"Received data on a characteristic.");

    if (characteristic == self.rxCharacteristic)
    {



        self.bluetoothData = [[NSMutableData alloc] initWithData:[characteristic value]];

        [self unstuff1:[characteristic value]];

        NSLog(@"First NSDAta %@", self.bluetoothData);

        [self unstuff1:self.bluetoothData];

        NSLog(@"Parsed First NSDATA %@", self.bluetoothData);

        NSString *stringForPrintingOutToConsole = [[NSString alloc] initWithData:self.bluetoothData encoding:NSASCIIStringEncoding];

        [self.delegate didReceiveData:stringForPrintingOutToConsole];
    }
    else if ([characteristic.UUID isEqual:self.class.hardwareRevisionStringUUID])
    {
        NSString *hwRevision = @"";
        const uint8_t *bytes = characteristic.value.bytes;
        for (int i = 0; i < characteristic.value.length; i++)
        {
            NSLog(@"%x", bytes[i]);
            hwRevision = [hwRevision stringByAppendingFormat:@"0x%02x, ", bytes[i]];
        }

        // this one reads the hardware revision
        [self.delegate didReadHardwareRevisionString:[hwRevision substringToIndex:hwRevision.length-2]];
    }
}

和解析的自定义方法:

- (NSMutableData *)unstuff1:(NSMutableData *)mutableData {
    NSUInteger dataLength = [self.bluetoothData length];
    unsigned char *bytes = [self.bluetoothData bytes];

    uint16_t i, j = 0;
    for (int i = 0; i < dataLength; i++)
    {

        if (bytes[i] == 0x7D)
        {
            bytes[j] = bytes[i+1] ^ 0x20;
            i++;
        } else
        {
            bytes[j] = bytes[i];

            j++;
        }

    }
    return mutableData;
}

如果有人有线索,我非常感谢帮助。

0 个答案:

没有答案