Отправка данных в серийное приложение android - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь отправить строку данных из приложения 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

  1. в состоянии обнаружить USB и подключиться
  2. отправить данные в шестнадцатеричном виде, сгенерированные приложением XCTU
  3. получить ответ отправленных данных

Мое приложение

  1. способен обнаружить USB и подключиться
  2. отправить данные в шестнадцатеричном виде, сгенерированные приложением XCTU
  3. ответа не получено

Я не могу отправить шестнадцатеричные данные Код для того же - Код для получения 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);  
                    }
                });
            }
        };

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

, чтобы изолировать проблему, вы можете попытаться раскошелиться и адаптировать мой вариант с открытым исходным кодом https://github.com/kai-morich/SimpleUsbTerminal из USB Serial Application, чтобы выяснить, где ваша реализация отличается

1 голос
/ 16 марта 2020

Попробуйте изолировать проблему. Для начала, можете ли вы подключиться к последовательному порту вашего P C (или другого устройства) вместо XBee?

  • Подтвердите, что вы можете получать данные из последовательного USB-приложения и Android устройство видит ответы. Это ваш базовый уровень - P C просто дает вам способ увидеть, что работает в «черном ящике» вашей текущей проблемы (я отправляю данные, но не получаю ответ).
  • Получает ли P C те же данные из вашего приложения? Если это выглядит искаженным, возможно, вы используете неправильную скорость передачи данных в своем приложении.
  • Получает ли ваше приложение ответы от P C?
  • Возможно, XBee настроен для аппаратного потока управление (CTS / RTS), но вы неправильно настраиваете это в своем приложении, и это заставляет XBee не отправлять данные.

Другие тесты с текущей настройкой:

  • Создайте два пакета «AT Command» в XCTU для переключения цифрового выхода между высоким и низким, возможно, один подключен к светодиодному индикатору на вашей плате разработки. Это дало бы вам подтверждение того, что XBee, по крайней мере, получает ваши данные, а затем вы можете решить, почему вы не видите ответы.
  • Отключите модуль XBee и используйте перемычки для подключения контактов Tx и Rx к каждому другие (и, возможно, контакты CTS и RTS, если у вас аппаратное подтверждение связи). Опять же, сначала проверьте в USB Serial Application, но каждый отправленный вами символ должен возвращаться обратно. Проверьте в своем приложении. Если это работает, а соединение с P C - нет, возможно, вы используете неверную скорость передачи.
...