Так что это может быть немного основным вопросом, но у меня нет большого опыта в аппаратной части вещей.Я использую DJI Android Mobile SDK для связи с контроллером полета M600 и имею устройство FTDI CU / TTY, которое я пытаюсь отправить информацию туда и обратно.
Это успешно работает для отправки «Hello World» на мое USB-устройство:
//sends data to onboard sdk device
final byte[] helloWorld = "HelloWorld".getBytes();
mFlightController.sendDataToOnboardSDKDevice(helloWorld, new CommonCallbacks.CompletionCallback() {
@Override
public void onResult(DJIError djiError) {
if (djiError != null) {
showToast(djiError.getDescription());
WriteFileAppendAsync writeAppend = new WriteFileAppendAsync();
writeAppend.execute(djiError.getDescription(), "sendOnboardErrorFile.txt");
} else {
showToast("Hopefully Hello World");
WriteFileAppendAsync writeAppend = new WriteFileAppendAsync();
writeAppend.execute(helloWorld.toString(), "sendOnboardSuccessFile.txt");
}
}
});
Я вижу это, когда запускаю одно из следующих действий в терминале:
screen /dev/cu.usbserial-BLAHBLAH 38400
screen /dev/tty.usbserial-BLAHBLAH 38400
Появляется куча тарабарщины / иероглифы, и затем каждый раз, когда я нажимаю кнопку, вызывающую приведенный выше код DJI, всплывает текст «Hello World».
Теперь я хочу получить обратную сторону этогоработает, т.е. отправляет что-то обратно с USB на SDI DJI, используя следующее:
if (mFlightController.isOnboardSDKDeviceAvailable()) {
showToast("Set Onboard SDk Callback");
mFlightController.setOnboardSDKDeviceDataCallback(new FlightController.OnboardSDKDeviceDataCallback() {
@Override
public void onReceive(byte[] bytes) {
WriteFileAppendAsync writeAppend = new WriteFileAppendAsync();
writeAppend.execute(bytes.toString(), "onboardCallbackFile.txt");
}
});
}
Беда в том, что я никогда не получаю ничего в ответ.
Согласно этот вопрос, я удостоверился, что у меня есть разрешение на чтение на устройстве USB:
chmod o+rw /dev/ttyS1
И я попробовал все виды команд echo и cat (я не знаю, какая из них предназначена для чтения и записи),Они либо говорят, что устройство занято, либо, если нет, они, кажется, открывают порт связи (терминал мигает бесконечно), но на мое устройство ничего не отправляется.
Команды, которые я пробовал:
echo 'HelloTest' > /dev/cu.usbserial-BLAHBLAH
Ничего особенного не происходит, идет к следующей строке терминала
echo 'HelloTest' > /dev/tty.usbserial-BLAHBLAH
Терминал возвращает HelloTest
echo 'HelloTest' < /dev/tty.usbserial-BLAHBLAH
Курсор мигает бесконечно
echo 'HelloTest' < /dev/cu.usbserial-BLAHBLAH
Терминал возвращает HelloTest
cat < /dev/cu.usbserial-BLAHBLAH
cat -v < /dev/tty.usbserial-BLAHBLAH
cat -v > /dev/tty.usbserial-BLAHBLAH
cat -v > /dev/cu.usbserial-BLAHBLAH
Нет такого файла или каталога (я полагаю, мне для этого нужны 2 терминала?)
Вопросы
Это связано сСкорость передачи данных?Я настроил это в DJI Assistant.В чем разница между TTY и CU и Echo и Cat?Я перепробовал все виды комбинаций.Я могу использовать экранную команду с cu и tty.Наконец, что это за простой привет мир, который я могу отправить обратно на SDK, чтобы увидеть, что я на самом деле получаю данные с моего USB-устройства?Я думаю, что эхо будет успешным, но я ничего не получаю.
Редактировать
Я почти чувствую, что мне нужно использовать что-то вроде usb-serial-для-андроида ;Тем не менее, я не подключаю USB-устройство к моему устройству Android.Вместо этого я подключаюсь к контроллеру DJI RC, который подключается к Lightbridge / M600, который подключается через порт API к моему USB-устройству.