X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fcommon%2Fserial.c;h=0b9b1c8c390917bf7be44b13beaaf1467da49cc3;hb=1fdb75e14528abd62ebe727537512c741a5759da;hp=cebca29e418dd833007c37572a747d2c84d85cbc;hpb=9d4bde70fc2a46bae172ab1851f3aff9e3f9b3b5;p=libsigrok.git diff --git a/hardware/common/serial.c b/hardware/common/serial.c index cebca29e..0b9b1c8c 100644 --- a/hardware/common/serial.c +++ b/hardware/common/serial.c @@ -95,10 +95,22 @@ int serial_close(int fd) #endif } +/* + * Flush serial port buffers (if any). + * Returns 0 upon success, -1 upon failure. + */ int serial_flush(int fd) { - +#ifdef _WIN32 + /* Returns non-zero upon success, 0 upon failure. */ + if (PurgeComm(hdl, PURGE_RXCLEAR | PURGE_TXCLEAR) == 0) + return -1; + else + return 0; +#else + /* Returns 0 upon success, -1 upon failure. */ return tcflush(fd, TCIOFLUSH); +#endif } void *serial_backup_params(int fd) @@ -140,6 +152,7 @@ int serial_set_params(int fd, int speed, int bits, int parity, int stopbits, /* TODO: Rename 'speed' to 'baudrate'. */ switch(speed) { + /* TODO: Support for higher baud rates. */ case 115200: dcb.BaudRate = CBR_115200; break; @@ -228,16 +241,17 @@ int serial_set_params(int fd, int speed, int bits, int parity, int stopbits, return SIGROK_ERR; } - term.c_iflag &= ~(IGNPAR | PARODD | PARENB); + term.c_iflag &= ~IGNPAR; + term.c_cflag &= ~(PARODD | PARENB); switch (parity) { case 0: term.c_iflag |= IGNPAR; break; case 1: - term.c_iflag |= PARENB; + term.c_cflag |= PARENB; break; case 2: - term.c_iflag |= PARENB | PARODD; + term.c_cflag |= PARENB | PARODD; break; default: return SIGROK_ERR;