DA-660-8/16-LXUser’s Manual
Programmer’s Guide
5-9
UART
The normal tty device node is located at
/dev/ttyM0 … ttyM7,
and the modem tty device node is
located at
/dev/cum0 … cum7
.
The DA-660 supports Linux standard termios control. The MOXA UART Device API allows you
to configure ttyM0 to ttyM7 as RS-232, RS-422, 4-wire RS-485, or 2-wire RS-485. The DA-660
supports RS-232, RS-422, 2-wire RS-485, and 4-wire RS485.
You must use
include <moxadevice.h>
.
#define RS232_MODE
0
#define RS485_2WIRE_MODE
1
#define RS422_MODE
2
#define RS485_4WIRE_MODE
3
1.
Function: MOXA_SET_OP_MODE
int ioctl(fd, MOXA_SET_OP_MODE, &mode)
Description
Sets the interface mode. The mode in parameter 3 will be passed to the UART device driver
which will change to it.
2.
Function: MOXA_GET_OP_MODE
int ioctl(fd, MOXA_GET_OP_MODE, &mode)
Description
Gets the interface mode. The mode will be returned in parameter 3.
There are two Moxa private ioctl commands for setting up special baudrates.
Function: MOXA_SET_SPECIAL_BAUD_RATE
Function: MOXA_GET_SPECIAL_BAUD_RATE
If you use this ioctl to set a special baudrate, the termios cflag will be B4000000, in which case the
B4000000 defined will be different. If the baudrate you get from termios (or from calling
tcgetattr()) is B4000000, you must call ioctl with MOXA_GET_SPECIAL_BAUD_RATE to get
the actual baudrate.
Example to set the baudrate
#include <moxadevice.h>
#include <termios.h>
struct termios term;
int fd, speed;
fd = open(“/dev/ttyM0”, O_RDWR);
tcgetattr(fd, &term);
term. c_cflag &= ~(CBAUD | CBAUDEX);
term.c_cflag |= B4000000;
tcsetattr(fd, TCSANOW, &term);
speed = 500000;
ioctl(fd, MOXA_SET_SPECIAL_BAUD_RATE, &speed);
Example to get the baudrate
#include <moxadevice.h>
#include <termios.h>
struct termios term;
int fd, speed;
fd = open(“/dev/ttyM0”, O_RDWR);
tcgetattr(fd, &term);
if ( (term.c_cflag & (CBAUD|CBAUDEX)) != B4000000 ) {
// follow the standard termios baudrate define
} else {
ioctl(fd, MOXA_GET_SPECIAL_BAUD_RATE, &speed);
}