Я пытаюсь отправить строку данных из приложения android в Zigbee через последовательный порт.
Приложение будет аналогично приложению Serial USB Terminal в магазине Play Store. эта ссылка https://play.google.com/store/apps/details?id=de.kai_morich.serial_usb_terminal&hl=en_IN
Это сравнение задач приложения USB Serail с моим приложением
Последовательное приложение USB
- в состоянии обнаружить USB и подключиться
- отправить данные в шестнадцатеричном виде, сгенерированные приложением XCTU
- получить ответ отправленных данных
Мое приложение
- способен обнаружить USB и подключиться
- отправить данные в шестнадцатеричном виде, сгенерированные приложением XCTU
- ответа не получено
Я не могу отправить шестнадцатеричные данные Код для того же - Код для получения USB-устройства и подключения
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
if (availableDrivers.isEmpty()) {
responseText.setText("No USB detected");
return;
}
UsbSerialPort port = null;
responseText.append("Device Count:"+availableDrivers.size());
// Open a connection to the first available driver.
UsbSerialDriver driver = availableDrivers.get(0);
UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
if (connection == null) {
// add UsbManager.requestPermission(driver.getDevice(), ..) handling here
return;
}
try {
port = driver.getPorts().get(0); // Most devices have just one port (port 0)
port.open(connection);
port.setParameters(9600, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
} catch (IOException ioe){
showToast("IO Exception at open");
try{
port.close();
} catch (IOException ioe2){
showToast("IO Exception at open disconnection");
}
}
// if device connected and open show write and read feature
if(port != null){
responseText.append("\n" + "Port"+port.toString());
showSerialConnected();
}
отправка запроса на серийный номер
public void writeToDevice(){
serialInputOutputManager = new SerialInputOutputManager(port, mListener);
Executors.newSingleThreadExecutor().submit(serialInputOutputManager);
String data = requestEdit.getText().toString();
try{
port.write(data.getBytes(), 5000);
} catch(IOException ioe) {
responseText.append("\n IO Exception at write");
}
}
Данные для отправки 7E 00 2B 10 01 00 13 A2 00 41 A7 A7 ED FF FE 00 00 24 7 C 53 56 7 C 31 31 7 C 31 30 38 7 C 31 33 38 33 32 30 31 30 30 33 30 36 7 C 33 39 7 C 23 2E
слушатель ответа
ExecutorService mExecutor;
SerialInputOutputManager serialInputOutputManager;
SerialInputOutputManager.Listener mListener;
mExecutor = Executors.newSingleThreadExecutor();
mListener = new SerialInputOutputManager.Listener() {
@Override
public void onRunError(Exception e) {
Log.d(TAG, "Runner stopped.");
}
@Override
public void onNewData(final byte[] data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
String message = " bytes: \n"+ HexDump.dumpHexString(data);
responseText.append(message);
}
});
}
};
Заранее спасибо