2011-01-10 61 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]

相關問題