Как вы отправляете расширенную ascii AT-команду (CCh) от Android Bluetooth на последовательное устройство? - PullRequest
0 голосов
/ 10 января 2011

Этот действительно заставляет меня биться головой.Я отправляю буквенно-цифровые данные из приложения Android через BluetoothChatService на последовательный адаптер Bluetooth, подключенный к последовательному входу радиоприемопередатчика.

Все работает нормально, кроме случаев, когда я пытаюсь настроить радио на-Ffly со своими AT-командами.AT +++ (вход в командный режим) получен в порядке, но проблема заключается в символах расширенного ascii в следующих двух командах: изменение адреса получателя радио (что я и пытаюсь сделать) требует CCh 10h (плюс 3 шестнадцатеричных числа)радиоадреса байтов), и для выхода из командного режима требуется 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) вести себя так, как должен.Все остальные (<127) байты, команда или данные передаются без проблем.Любая помощь здесь будет принята с благодарностью. </p>

-Dave

1 Ответ

0 голосов
/ 11 января 2011

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

...