我已按照Apple提供的示例代码EADemo进行操作。我已成功连接到BLE以下的IAP2蓝牙MFI设备,即带有我的应用程序的版本(2.x)并从外部设备读取数据。
但是当我尝试向外部蓝牙设备写入一些命令时,没有从外部蓝牙设备获得该特定命令的任何响应。由于外部设备低于BLE,我们使用外部附件框架。
下面是使用UTF8编写字符串命令时的代码:
const char *buf = [[_stringToSendText text] UTF8String];
if (buf)
{
uint32_t len = (uint32_t)strlen(buf) + 1;
[[EADSessionController sharedController] writeData:[NSDatadataWithBytes:buf length:len]];
}
下面是通过将字符串转换为hexCode来编写数据的代码:
const char *buf = [[_hexToSendText text] UTF8String];
NSMutableData *data = [NSMutableData data];
if (buf)
{
uint32_t len = (uint32_t)strlen(buf);
char singleNumberString[3] = {'\0', '\0', '\0'};
uint32_t singleNumber = 0;
for(uint32_t i = 0 ; i < len; i+=2)
{
singleNumberString[0] = buf[i];
singleNumberString[1] = buf[i + 1];
sscanf(singleNumberString, "%x", &singleNumber);
uint8_t tmp = (uint8_t)(singleNumber & 0x000000FF);
[data appendBytes:(void *)(&tmp) length:1];
}
[[EADSessionController sharedController] writeData:data];
}
下面的代码用于将数据写入外部设备:
- (void)_writeData {
while (([[_session outputStream] hasSpaceAvailable]) && ([_writeData length] > 0))
{
NSInteger bytesWritten = [[_session outputStream] write:[_writeData bytes] maxLength:[_writeData length]];
if (bytesWritten == -1)
{
NSLog(@"write error");
break;
}
else if (bytesWritten > 0)
{
[_writeData replaceBytesInRange:NSMakeRange(0, bytesWritten) withBytes:NULL length:0];
}
}
}
例如,当我写作&#34; $ info&#34;外部设备设备应发送有关设备信息的响应,但我们没有从外部设备获得任何类型的响应。
我得到的bytesWritten值和我写的数据一样,所以我有 成功发送数据,但问题是我没有得到任何回应 来自外部设备。
我在XCODE 9.0中工作并在iOS版本10.3.3和11.2.1上进行测试
谢谢