Сценарий оболочки ADB для отправки AT-команд модему - не может вернуть управление оболочке и захватить выходные данные - PullRequest
2 голосов
/ 15 февраля 2012

Я уже опубликовал аналогичный вопрос, но все еще не смог выполнить свою работу, так что это вторая попытка, где я хотел бы более четко изложить свой камень преткновения.

Так что в основном я нахожусь в adb телефона AndroidОболочка, связывающаяся с модемом GPRS путем отправки AT-команд.Я могу сделать это путем перенаправления по команде в файл устройства, представляющий модем;и я могу прочитать ответ, используя утилиту cat, запущенную в фоновом режиме (запущенную ранее).Я реализовал это в сценарии, который может отправить одну команду AT и прочитать ответ.Например, вот сценарий для отправки в + копы?чтобы получить имя оператора, на котором находится мобильный телефон:

#SendATCommand script
cat /dev/pts/7 &
echo -e at+cops?\\r > /dev/pts/7

Вывод выглядит следующим образом:

# ./sendATCommand 
./sendATCommand 
# 
+COPS: 0,0,"AT&T",6 

OK 
/dev/pts/7: invalid length 

Теперь есть две проблемы, которые я не могу решить:

  1. Мне все еще нужно вручную нажать кнопку ВВОД, чтобы получить обратно приглашение adb shell "#".Можно ли программно вернуться к «#»?Я снова в оболочке adb.
  2. Отображаемый ответ не может быть захвачен ни в переменной, ни в файле (например, (#. / SendATCommand> output.txt) файл Output.txt будет пустымЯ пробовал различные перенаправления, но все равно не получил его.

Может ли кто-нибудь помочь мне решить эти две проблемы (если это возможно)? В конечном счете, я хочу, чтобы этот маленький скрипт вызывался из«супер» скрипт (например, Perl или Powershell), работающий на ПК, к которому подключено мое Android-устройство, но сделать это невозможно, пока эти две проблемы не будут решены. Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 24 февраля 2014

У меня были похожие проблемы с перенаправлением вывода в файл.Я решил свою проблему, добавив CMD / c перед командой echo.Т.е., если я правильно понимаю, вы должны сообщить системе, что нужно дождаться завершения выполнения команды и только затем перенаправить вывод в файл.Я делал это в DOS.

Поскольку вы работаете на ANDROID, попробуйте добавить sh -c перед вашей командой.Надеюсь, поможет.

0 голосов
/ 22 февраля 2014

Я предлагаю вам попробовать мою atinout программу, которая должна быть именно тем, о чем вы просите: программой для отправки AT-команд из командной строки и получения вывода.

В вашем случае результат должен быть как

$ echo 'at+cops?' | atinout - /dev/pts/7 -
+COPS: 0,0,"AT&T",6

OK
$

и для захвата вывода просто поместите имя файла вместо последнего -.

...