Warning: main(/www/www/htdocs/style/globals.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/m/modem_open.html on line 1
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/globals.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/m/modem_open.html on line 1
Warning: main(/www/www/htdocs/style/header.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/m/modem_open.html on line 8
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/header.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/m/modem_open.html on line 8
Open a serial port
#include <sys/modem.h>
int modem_open( char* device,
speed_t baud );
- device
- The path name of the serial port that you want to open.
- baud
- Zero, or the baud rate that you want to use.
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
|
This function is in libc.a, but not in libc.so
(in order to save space). |
The modem_open() function opens a serial port identified by
device. The device is set to raw mode by
changing the control flags using tcgetattr() and
tcsetattr() as follows:
termio.c_cflag = CS8|IHFLOW|OHFLOW|CREAD|HUPCL;
termio.c_iflag = BRKINT;
termio.c_lflag = IEXTEN;
termio.c_oflag = 0;
Any pending input or output characters are discarded.
If baud is nonzero, then the baud rate is changed to that value.
An open file descriptor, or -1 on failure
(errno is
set).
- EACCES
- Search permission is denied on a component of the path prefix,
or the file doesn't exist.
- EBADFSYS
- While attempting to open the named file, either the file itself or a
component of the path prefix was found to be corrupted. A system
failure — from which no automatic recovery is possible —
occurred while the file was being written to, or while the directory was
being updated. You'll need to invoke appropriate
systems-administration procedures to correct this situation before
proceeding.
- EBUSY
- The file named by device is a block special device that's
already open for writing, or device names a file that's on a
filesystem mounted on a block special device that's already open for
writing, or device is in use.
- EINTR
- The open operation was interrupted by a signal.
- EISDIR
- The named device is a directory.
- ELOOP
- Too many levels of symbolic links or prefixes.
- EMFILE
- Too many file descriptors are currently in use by this process.
- ENAMETOOLONG
- The length of the device string exceeds
PATH_MAX, or a pathname component is longer than
NAME_MAX.
- ENFILE
- Too many files are currently open in the system.
- ENOENT
- The named device doesn't exist, or the
path argument points to an empty string.
- ENOSYS
- The modem_open() function isn't implemented for the filesystem
specified in device.
- ENOTDIR
- A component of the path prefix isn't a directory.
- ENXIO
- No process has the file open for reading.
#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);
}
QNX Neutrino
Safety: | |
Cancellation point |
Yes |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |
modem_read(),
modem_script(),
modem_write()
Warning: main(/www/www/htdocs/style/footer.php) [function.main]: failed to open stream: No such file or directory in /www/www/docs/6.4.1/neutrino/lib_ref/m/modem_open.html on line 300
Warning: main() [function.include]: Failed opening '/www/www/htdocs/style/footer.php' for inclusion (include_path='.:/www/www/common:/www/www/php/lib/php') in /www/www/docs/6.4.1/neutrino/lib_ref/m/modem_open.html on line 300