blob: 564676b641b1c14dd4c5ec0b09663f9f65eda8e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include "serial.h"
int serial_connect(const char *devpath, long baudrate)
{
int fd;
struct termios tty;
// struct termios tty_old;
// open device
if ((fd = open(devpath, O_RDWR | O_NOCTTY)) < 0) {
return -1;
}
// set parameters
if (tcgetattr(fd, &tty) != 0) {
return -1;
}
// TODO: update UI or add support for custom baudrate
// cfsetospeed(&tty,
// cfsetispeed(&tty,
tty.c_cflag &= ~PARENB; // no parity
tty.c_cflag &= ~CSTOPB; // no stop bit
tty.c_cflag |= CS8; // 8 bit data
tty.c_cflag &= ~CRTSCTS; // no flow control
tty.c_lflag = 0; // no signaling chars, no echo, no canonical processing
tty.c_oflag = 0; // no remapping, no delays
tty.c_cc[VMIN] = 0; // no block read
tty.c_cc[VTIME] = .5; // .5 seconds read timeout
tty.c_cflag |= CREAD | CLOCAL; // turn on read and ignore ctrl lines
tty.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl
tty.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // make raw
tty.c_oflag &= ~OPOST; // make raw
tcflush(fd , TCIFLUSH);
// if (tcsetaddr(
return fd;
}
|