diff options
Diffstat (limited to 'serprog.c')
-rw-r--r-- | serprog.c | 110 |
1 files changed, 0 insertions, 110 deletions
@@ -61,8 +61,6 @@ #define S_CMD_Q_RDNMAXLEN 0x11 /* Query read-n maximum length */ #define S_CMD_S_BUSTYPE 0x12 /* Set used bustype(s). */ -int sp_fd; - static uint16_t sp_device_serbuf_size = 16; static uint16_t sp_device_opbuf_size = 300; /* Bitmap of supported commands */ @@ -95,12 +93,6 @@ static int sp_opbuf_usage = 0; whether the command is supported before doing it */ static int sp_check_avail_automatic = 0; -static void __attribute__((noreturn)) sp_die(char *msg) -{ - perror(msg); - exit(1); -} - static int sp_opensocket(char *ip, unsigned int port) { int flag = 1; @@ -130,108 +122,6 @@ static int sp_opensocket(char *ip, unsigned int port) return sock; } -struct baudentry { - int flag; - unsigned int baud; -}; - -/* I'd like if the C preprocessor could have directives in macros */ -#define BAUDENTRY(baud) { B##baud, baud }, -static const struct baudentry sp_baudtable[] = { - BAUDENTRY(9600) - BAUDENTRY(19200) - BAUDENTRY(38400) - BAUDENTRY(57600) - BAUDENTRY(115200) -#ifdef B230400 - BAUDENTRY(230400) -#endif -#ifdef B460800 - BAUDENTRY(460800) -#endif -#ifdef B500000 - BAUDENTRY(500000) -#endif -#ifdef B576000 - BAUDENTRY(576000) -#endif -#ifdef B921600 - BAUDENTRY(921600) -#endif -#ifdef B1000000 - BAUDENTRY(1000000) -#endif -#ifdef B1152000 - BAUDENTRY(1152000) -#endif -#ifdef B1500000 - BAUDENTRY(1500000) -#endif -#ifdef B2000000 - BAUDENTRY(2000000) -#endif -#ifdef B2500000 - BAUDENTRY(2500000) -#endif -#ifdef B3000000 - BAUDENTRY(3000000) -#endif -#ifdef B3500000 - BAUDENTRY(3500000) -#endif -#ifdef B4000000 - BAUDENTRY(4000000) -#endif - {0, 0} /* Terminator */ -}; - -int sp_openserport(char *dev, unsigned int baud) -{ - struct termios options; - int fd, i; - fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY); - if (fd < 0) - sp_die("Error: cannot open serial port"); - fcntl(fd, F_SETFL, 0); - tcgetattr(fd, &options); - for (i = 0;; i++) { - if (sp_baudtable[i].baud == 0) { - close(fd); - fprintf(stderr, - "Error: cannot configure for baudrate %d\n", - baud); - exit(1); - } - if (sp_baudtable[i].baud == baud) { - cfsetispeed(&options, sp_baudtable[i].flag); - cfsetospeed(&options, sp_baudtable[i].flag); - break; - } - } - options.c_cflag &= ~(PARENB | CSTOPB | CSIZE | CRTSCTS); - options.c_cflag |= (CS8 | CLOCAL | CREAD); - options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); - options.c_iflag &= ~(IXON | IXOFF | IXANY | ICRNL | IGNCR | INLCR); - options.c_oflag &= ~OPOST; - tcsetattr(fd, TCSANOW, &options); - return fd; -} - -void sp_flush_incoming(void) -{ - int i; - for (i=0;i<100;i++) { /* In case the device doesnt do EAGAIN, just read 0 */ - unsigned char flush[16]; - ssize_t rv; - rv = read(sp_fd, flush, sizeof(flush)); - if ((rv == -1) && (errno == EAGAIN)) - break; - if (rv == -1) - sp_die("flush read"); - } - return; -} - static int sp_sync_read_timeout(int loops) { int i; |