devc-ser8250

8250 serial communications manager (QNX Neutrino)

Note: You must be root or have the right abilities to start this driver.

Syntax:

devc-ser8250 [[options] 
              [port[^shift][,intr]]]... &

Runs on:

QNX Neutrino

Targets:

Hardware with an 8250-compatible UART

Options:

In addition to the devc-ser* options, this driver supports the following options:

-c clock[/divisor]
Define a custom clock rate, in Hertz, and divisor for the serial port. The default (-c 1843200/16) is suitable for compatible PC serial ports.
-T number
Enable the transmit FIFO and set the number of characters to be transmitted at each TX interrupt to 1, 4, 8, or 14. The default is 0 (FIFO disabled).
-t number
Enable the receive FIFO and set its threshold to 1, 4, 8, or 14 characters. The default is 0 (trigger disabled).
-u number
Append number to the device name prefix (/dev/ser). The default is 1; additional devices are given increasing numbers.
port
The hex I/O address (for x86 systems) of a serial port.
shift
The spacing of the device registers as a power of 2. For example:
0
Registers are 1 byte apart.
1
Registers are 2 bytes apart.
2
Registers are 4 bytes apart.

n
Registers are 2n bytes apart.

The default shift is 0.

intr
The interrupt used by this port; specified in hex if prefixed with 0x, otherwise it's decimal.

Description:

The devc-ser8250 manager is a small serial device manager for the QNX Neutrino RTOS. It can support any number of serial ports using 8250s, 14450s or 16550s. Each device can be assigned its own interrupt, or share an interrupt if the hardware supports interrupt sharing. If you don't specify any I/O ports for devices on an x86 system, devc-ser8250 assumes you want to use the standard PC ports of COM1 (3f8,4) and COM2 (2f8,3).

The serial driver's priority floats to the priority of the client. All internal events are processed at priority 24 (inherited from the internal pulse). The event handling priority is hard coded and isn't configurable by any of the options listed. (The driver's main.c program would need modification in order to change the priority).

When the driver talks to a client application, it's running at the priority of the client. All other processing takes place either at priority 24r or at interrupt time.

Each device is given a name in the pathname space of /dev/sern, where n starts at 1 (unless changed via the -u option) and increases. If you use the default PC serial ports, this results in:

Device Port Interrupt
/dev/ser1 3f8 4
/dev/ser2 2f8 3
Note: If your application uses /dev/console, you should create a link from it to one of /dev/ser1, /dev/ser2, … by adding a line like this to the buildfile used by mkifs:
[type=link] /dev/console = /dev/ser1

All devices are fully interrupt driven and by default support standard hardware flow control on input and output (RTS/CTS). You can disable this by using the -F option.

Note: Hardware flow control isn't supported in edited mode.

A read request by default returns when at least 1 character is available. To increase efficiency, you can control three parameters to control when a read is satisfied:

Time
Return after a specified amount of time has elapsed.
Min
Return when this number of characters are in the input buffer.
Char
Return if this forwarding character is in the input buffer.
Note: If the Min value is greater than the size of the input buffer, the Min value is clipped to the size of the buffer. To avoid this, you can change the size of the input buffer with the -I option.

You can set these parameters using library routines (see tcgetattr(), tcsetattr(), readcond() and TimerTimeout() in the C Library Reference).

The devc-ser8250 manager supports both raw and edited modes, making it a real tty device.

The following fields and flags are supported in the termios structure:

Field Supported flags
c_cc All characters
c_iflag BRKINT ICRNL IGNBRK IXON
c_oflag OPOST
c_cflag CLOCAL CSIZE CSTOPB PARENB PARODD
c_lflag ECHO ECHOE ECHOK ECHONL ICANON IEXTEN ISIG NOFLSH

Examples:

Start devc-ser8250, defaulting for COM1 and COM2:

devc-ser8250 &

Start devc-ser8250, defaulting for COM1 and COM2, but change baud rate to 38400 from 57600 default:

devc-ser8250 -b 38400 &

Start devc-ser8250 with five ports (the last four preset to 38400 baud):

devc-ser8250 3f8,4 -b 38400 280,3 288,3 290,3 298,3 &

You can specify multiple -F and -f options; they're position-dependent, and affect the next serial port:

devc-ser8250 -F 3f8,4 -f 2f8,3 &