Открыть последовательный порт
#include <sys/modem.h>int modem_open( char *device,speed_t baud );
0
либо значение скорости передачи.libc
Функция modem_open() открывает последовательный порт, указанный в device. Устройство устанавливается в исходный режим с помощью изменения флагов управления при использовании функций tcgetattr() и tcsetattr() следующим образом:
termio.c_cflag = CS8 | IHFLOW | OHFLOW | CREAD | HUPCL;termio.c_iflag = BRKINT;termio.c_lflag = IEXTEN;termio.c_oflag = 0;
Любые символы, ожидающие ввода или вывода, сбрасываются.
Если baud не равен нулю, скорость передачи устанавливается в соответствии с этим значением.
Значение открытого файлового дескриптора, либо -1
при ошибке, код ошибки записывается в errno.
PATH_MAX
или часть пути к файлу длиннее, чем NAME_MAX
. #include <stdlib.h>#include <unistd.h>#include <string.h>#include <fcntl.h>#include <sys/modem.h>#include <stdio.h>#include <errno.h>/** 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 }};void io( char* progress, char* in, char* out ){if ( progress )printf( "progress: %s\n", progress );if ( in )printf( "input: %s\n", in );if ( out )printf( "output: %s\n", out );}int main( int argc, char* argv[] ){int fd, status;speed_t baud = -1;if ( (fd = modem_open( argv[1], 0 )) == -1 ){fprintf( stderr, "Unable to open %s: %s\n", argv[1],strerror( errno ) );exit( 1 );}status = modem_script( fd, table, &baud, &io, NULL );printf( "status=%d baud=%d\n", status, baud );exit( status );}
ЗОСРВ «Нейтрино»
struct modem_script, modem_read(), modem_script(), modem_write()
Предыдущий раздел: Описание API системной библиотеки