Скрипт для устройства
#include <sys/modem.h>struct modem_script {char curstate; /* Текущее состояние */char curflags; /* Установлено значение 0 */char newstate; /* Значение следующего состояния при обнаружении соответствия (0 означает состояние завершения) */char newflags; /* Флаги, используемые для нового состояния */char newtimeout; /* Таймаут, используемый для нового состояния */char newquiet; /* Время ожидания, используемое для нового состояния */short retvalue; /* Возвращаемое значение при обнаружении соответствия при значении nextstate равном 0 */char *pattern; /* Шаблон для сопоставления входных данных */char *response; /* Ответная строка, отправляемая, если по шаблону pattern было найдено соответствие во входных данных */char *progress; /* Сообщение о прогрессе, отправляемое обработчику @a io() при изменении состояния */};
Тип позволяет производить разметку скриптов для устройства. Структура включает следующие поля:
0
. MODEM_NOECHO
, ответ отправляется функции обработчику в качестве параметра. Пример, демонстрирующий работу скрипта, представлен ниже:
/** curstate curflags newstate newflags newtimeout newquiet retvalue pattern response*/struct modem_script table[] = {{1, 0, 1, 0, 2, 5, 0, NULL, "ATZ\\r\\P0a"},{1, 0, 2, 0, 30, 5, 0, "*ok*", "ATDT5910934"},{2, MODEM_BAUD, 3, MODEM_LASTLINE, 10, 5, 0, "*connect*", NULL},{3, 0, 4, 0, 8, 5, 0, "*login:*", "guest"},{4, MODEM_NOECHO, 5, 0, 15, 5, 0, "*password:*", "xxxx"},{5, 0, 0, 0, 0, 0, 0, "*$ *", NULL},{0, 0, 0, 0, 0, 0, 1, "*no carrier*", NULL},{0, 0, 0, 0, 0, 0, 2, "*no answer*", NULL},{0, 0, 0, 0, 0, 0, 3, "*no dialtone*", NULL},{0, 0, 0, 0, 0, 0, 4, "*busy*", NULL},{ NULL }};
ЗОСРВ «Нейтрино»
fnmatch(), modem_read(), modem_script()
Предыдущий раздел: Описание API системной библиотеки