/* gcc -o setbaud.exe setbaud.c */ #include #include #include #include long speedtol(speed_t code) { switch (code) { case B0: return(0); case B300: return(300); case B1200: return(1200); case B2400: return(2400); case B4800: return(4800); case B9600: return(9600); case B19200: return(19200); case B38400: return(38400); case B57600: return(57600); default: return(115200); } } speed_t ltospeed(long speed) { if (speed < 300) return B0; else if (speed < 1200) return B300; else if (speed < 2400) return B1200; else if (speed < 4800) return B2400; else if (speed < 9600) return B4800; else if (speed < 19200) return B9600; else if (speed < 38400) return B19200; else if (speed < 57600) return B38400; else if (speed < 115200) return B57600; else return B115200; } int main(int argc, char **argv) { int fd; struct termios term_info; long baud; speed_t speed; baud = 0l; if (argc != 3) { printf("Usage: %s filespec baudrate\n" "e.g. %s /dev/com1 4800\n", argv[0], argv[0]); return(-1); } else { if ((fd = open(argv[1], O_RDWR)) < 0) { printf("Unable to open port %s\n", argv[1]); return(1); } if (tcgetattr(fd, &term_info) == -1) { printf("Unable to retrieve attributes of port %s\n", argv[1]); (void)close(fd); return(2); } baud = atol(argv[2]); speed = ltospeed(baud); printf("Setting speed to %ld\n...", baud); if (cfsetispeed(&term_info, speed)) { printf("Unable to set desired input baud rate\n"); (void)close(fd); return(3); } if (cfsetospeed(&term_info, speed)) { printf("Unable to set desired output baud rate\n"); (void)close(fd); return(4); } if (tcsetattr(fd, TCSANOW, &term_info)) { printf("Unable to assign attributes\n"); (void)close(fd); return(5); } printf("Speed for %s is now %ld out, %ld in.\n", argv[1], speedtol(cfgetospeed(&term_info)), speedtol(cfgetispeed(&term_info))); (void)close(fd); return(0); } }