【发布时间】:2014-11-17 23:30:42
【问题描述】:
我已经成功地将我的代码设置为CBCentralManager 和CBPeripheral 委托,并且可以连接到我的蓝牙设备,实现所有回调和方法就好了。但是,我只能使用writeValueForCharacteristic 方法设置一次值。如果我尝试发出第二个命令,那么它就会被忽略 - 几乎就像它根本没有被发送一样。我知道该设备正在工作,因为我可以使用同一家公司的测试应用程序来控制它。
我也尝试实现CBWriteCharacteristicWithResponse 方法,该方法按预期触发,没有错误。
- (void) setLEDState {
char testDataPacketStart[] = {0xa0};
char testDataHeader[] = {0x05, 0x00};
char testDataPayload[] = {0x20, 0x01, 0x00, 0x00, 0x00};
if (_isLEDLit == false) {
testDataPayload[4] = 0xff;
_isLEDLit = true;
}
else {
_isLEDLit = false;
}
NSData *testDataHeaderObject = [[NSData alloc] initWithBytes:testDataHeader length:2];
NSData *testDataPayloadObject = [[NSData alloc] initWithBytes:testDataPayload length:5];
UInt16 crc1 = [[self class] computeCRC16:testDataHeaderObject startingCRC:0xffff];
UInt16 crc2 = [[self class] computeCRC16:testDataPayloadObject startingCRC:crc1];
char testDataAssembledPacket[10] = {};
testDataAssembledPacket[0] = testDataPacketStart[0];
testDataAssembledPacket[1] = testDataHeader[0];
testDataAssembledPacket[2] = testDataHeader[1];
int lenPacket = sizeof(testDataPayload);
for (int byteCount = 0; byteCount < lenPacket; byteCount++) {
testDataAssembledPacket[byteCount + 3] = testDataPayload[byteCount];
}
testDataAssembledPacket[8] = (UInt8)(crc2 & 0xFF);
testDataAssembledPacket[9] = (UInt8)(crc2 >> 8);
NSData *testDataAssembledPacketObject = [[NSData alloc] initWithBytes:testDataAssembledPacket length:sizeof(testDataAssembledPacket)];
[_myParentWindow printMessage: [[NSString alloc] initWithFormat:@"Sending buffer: %@", testDataAssembledPacketObject]];
[self.activePeripheral writeValue:testDataAssembledPacketObject forCharacteristic:_serial_pass_characteristic type:CBCharacteristicWriteWithResponse];
}
该设备(如果使用)是 Lightblue 的 Bean。
任何想法将不胜感激。
【问题讨论】:
-
你能分享一些代码吗?我只使用了 Punchthrough 的 Bean 库,但从未遇到过问题。
-
嗨,保罗,上面贴了我的代码。我不想像想要一个精简的应用程序那样使用这个库,只需要实现一个简单的 LED 灯和按钮按下功能。上面的代码有效,但仅在您第一次调用时才有效。
标签: bluetooth-lowenergy core-bluetooth