Я успешно установил свой код как делегат CBCentralManager
и CBPeripheral
и могу подключиться к своему устройству Bluetooth, полностью используя все обратные вызовы и методы. Тем не менее, я могу установить значение только с помощью метода writeValueForCharacteristic
. Если я попытаюсь выпустить вторую команду, тогда ее просто игнорируют - почти так же, как она вообще не отправляется. Я знаю, что устройство работает, так как я могу использовать тестовое приложение той же самой компании, чтобы контролировать его.BLE 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, но у меня не было проблемы. – Paulw11
Привет, Пол, разместил мой код выше. Я не хочу использовать библиотеку в качестве скудного приложения, и мне нужно только реализовать простой светодиодный индикатор и функцию нажатия кнопки. Код выше работает, но только в первый раз, когда вы его вызываете. – Roo