struct modem_script

Скрипт для устройства

Прототип:

#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() при изменении состояния */
};

Описание:

Тип позволяет производить разметку скриптов для устройства. Структура включает следующие поля:

curstate
Текущее состояние. Выполнение скрипта всегда будет начинаться с state 1, который должен быть первым элементом массива. Несколько элементов могут иметь одно и тоже состояние, полученный ввод будет сопоставляться со всеми полями pattern с данным состоянием.
curflags
Флаги, используемые при совпадении pattern с response:
MODEM_NOECHO
не повторять response в обработчике io().
MODEM_BAUD
Извлечь из response любое числовое значение и назначить его в качестве скорости передачи.
newstate
При обнаружении соответствия с pattern происходит переход в состояние, указанное в данном поле. Переход в данное состояние приводит к выводу response, а newflags, newtimeout, и newquiet сохраняются для данного состояния. Переход к состоянию 0 приводит к тому, что modem_script() возвращает значение в retvalue.
newflags
Сохраняется при изменении состояния и передаётся в modem_read(), когда ожидается response в новом состоянии. Для дополнительной информации о флагах смотрите modem_read().
newtimeout
Сохраняется при изменении состояния и передаётся в modem_read(), когда ожидается response в новом состоянии. Этот таймаут определяется в modem_read().
newquiet
Сохраняется при изменении состояния и передаётся в modem_read(), когда ожидается response в новом состоянии. Этот таймаут определяется в modem_read().
retvalue
Возвращаемое значение, когда скрипт завершился с совпадением pattern, новое состояние 0.
pattern
Шаблон, используемый для обнаружения соответствий во входных данных. Шаблон сопоставляется при помощи функции fnmatch(). Только шаблоны в текущем состоянии или символы состояния 0 сопоставляются. При совпадении, текущее состояние меняется на newstate.
response
При pattern, данный ответ отправляется устройству. Если в curflags не установлен флаг MODEM_NOECHO, ответ отправляется функции обработчику в качестве параметра.
progress
При обнаружении соответствия pattern данная строка прогресса отправляется функции обработчику в качестве параметра.

Пример, демонстрирующий работу скрипта, представлен ниже:

/*
* 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 системной библиотеки