无法使用外部附件框架将数据写入外部蓝牙设备

时间:2018-01-08 07:18:35

标签: ios objective-c bluetooth external-accessory mfi

我已按照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上进行测试

谢谢

0 个答案:

没有答案