【问题标题】:How do you send an extended-ascii AT-command (CCh) from Android bluetooth to a serial device?如何从 Android 蓝牙向串行设备发送扩展 ascii AT 命令(CCh)?
【发布时间】:2011-01-10 19:50:28
【问题描述】:

这个真的让我头疼。我正在通过 BluetoothChatService 从 Android 应用程序向连接到无线电收发器串行输入的串行蓝牙适配器发送字母数字数据。

一切正常,除非我尝试使用其 AT 命令即时配置无线电。 AT+++(进入命令模式)接收正常,但问题在于接下来两个命令中的扩展 ascii 字符:更改无线电目标地址(这是我正在尝试做的)需要 CCh 10h(加 3 hex无线电地址字节),退出命令模式需要 CCh ATO。

我知道收音机可以配置好,因为我在早期的原型上使用 PIC basic 的串行命令完成了它,也可以通过直接从 hyperterm 输入命令来配置它。这两种方法都以某种方式将讨厌的 CCh 转换为无线电可以理解的形式。

我已经尝试了 Android 菜鸟可能想出的所有方法来解决编码问题,例如:

private void command_address() {
    byte[] addrArray = {(byte) 0xCC, 16, 36, 65, 21, 13};                   
    CharSequence addrvalues = EncodingUtils.getString(addrArray, "UTF-8");  
    sendMessage((String) addrvalues);
}

但无论如何,我似乎无法让那个高位字节 (CCh/204/-52) 发挥应有的作用。所有其他 (

-戴夫

【问题讨论】:

    标签: android bluetooth serial-port ascii at-command


    【解决方案1】:

    Welll ...事实证明,BluetoothChat 代码在发送到服务之前使用 message.getBytes() 重新创建了字节数组。 (毕竟,作为 chat 代码,它通常只会获取常规的 ascii 字符串)正如本网站上的其他人所指出的,getBytes() 在某些情况下会产生编码问题。因此,为了发送这些扩展的 ascii 命令,我不会弄乱字符串,而是将字节数组发送到服务

    private void sendCommand(byte[] cmd) {
        mChatService.write(cmd);
    }
    

    所谓的命令数组首先用十六进制无线电地址元素的占位符初始化

    byte[] addrArray = {(byte) 0xCC, 16, 0, 0, 0, 13};
    

    然后借助转换方法填写

    radioArray = HexStringToByteArray(radioAddr1);
    

    可以在这里找到:HexStringToByteArray@stackoverflow

    【讨论】:

      猜你喜欢
      • 2016-12-15
      • 2012-04-23
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多