2011-01-10 124 views
0

这一个真的让我感动我的头。我通过BluetoothChatService将来自Android应用程序的字母数字数据发送到连接到无线电收发器串行输入的串行蓝牙适配器。如何从Android蓝牙发送扩展ascii AT命令(CCh)到串行设备?

一切工作正常,除非当我尝试使用它的AT命令配置无线电时。接收AT +++(进入命令模式)OK,但问题出现在接下来的两个命令中的扩展ASCII字符:更改无线电目标地址(这是我想要做的)需要CCh 10h(加上3个十六进制无线电地址字节),并且退出命令模式需要CCh ATO。

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

我已经试过几乎所有安卓小白也可能拿出来欺骗编码如:

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)的行为应该如此。所有其他(< 127)字节,命令或数据传输没有问题。任何帮助在这里将不胜感激。

-Dave

回答

0

Welll ...原来的BluetoothChat代码重新创建与message.getBytes()字节数组发送到服务之前。 (毕竟,聊天代码它通常只会发送常规的ascii字符串)正如本网站上的其他人指出的,getBytes()可能会在某些情况下创建编码问题。因此,对于发送这些扩展ASCII命令的目的,我不惹串并只发送字节数组服务与

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

所谓的命令阵列首先与占位符六角初始化无线电地址元素

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

,然后填充在与所述转换方法的帮助

radioArray = HexStringToByteArray(radioAddr1); 

其可以在这里找到:[email protected]