X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fcommon%2Fserial.c;h=5490608ceeb5dffa92cf3e82ad8fb53f70c82968;hb=7b5daad45c6526f6eed368e30d262dcbe610b7f5;hp=e114f2d0400d175a30283f5b979403b033974c61;hpb=26ddb5bacaf2a0918ef73b253d25afb1ffb744b1;p=libsigrok.git diff --git a/hardware/common/serial.c b/hardware/common/serial.c index e114f2d0..5490608c 100644 --- a/hardware/common/serial.c +++ b/hardware/common/serial.c @@ -1,5 +1,5 @@ /* - * This file is part of the sigrok project. + * This file is part of the libsigrok project. * * Copyright (C) 2010-2012 Bert Vermeulen * Copyright (C) 2010-2012 Uwe Hermann @@ -37,14 +37,14 @@ #include "libsigrok.h" #include "libsigrok-internal.h" -/* Message logging helpers with driver-specific prefix string. */ -#define DRIVER_LOG_DOMAIN "serial: " -#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args) -#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args) -#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args) -#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args) -#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args) -#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args) +/* Message logging helpers with subsystem-specific prefix string. */ +#define LOG_PREFIX "serial: " +#define sr_log(l, s, args...) sr_log(l, LOG_PREFIX s, ## args) +#define sr_spew(s, args...) sr_spew(LOG_PREFIX s, ## args) +#define sr_dbg(s, args...) sr_dbg(LOG_PREFIX s, ## args) +#define sr_info(s, args...) sr_info(LOG_PREFIX s, ## args) +#define sr_warn(s, args...) sr_warn(LOG_PREFIX s, ## args) +#define sr_err(s, args...) sr_err(LOG_PREFIX s, ## args) // FIXME: Must be moved, or rather passed as function argument. #ifdef _WIN32 @@ -422,7 +422,7 @@ SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate, if (dtr != -1) { sr_spew("Setting DTR %s.", dtr ? "high" : "low"); - if (rts) + if (dtr) dcb.fDtrControl = DTR_CONTROL_ENABLE; else dcb.fDtrControl = DTR_CONTROL_DISABLE; @@ -499,7 +499,7 @@ SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate, case 230400: baud = B230400; break; -#ifndef __APPLE__ +#if !defined(__APPLE__) && !defined(__OpenBSD__) case 460800: baud = B460800; break; @@ -589,8 +589,12 @@ SR_PRIV int serial_set_params(struct sr_serial_dev_inst *serial, int baudrate, return SR_ERR; } - /* Do not translate carriage return to newline on input. */ - term.c_iflag &= ~(ICRNL); + /* Turn off all serial port cooking. */ + term.c_iflag &= ~(ISTRIP | INLCR | ICRNL); + term.c_oflag &= ~(ONLCR | OCRNL | ONOCR); +#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) + term.c_oflag &= ~OFILL; +#endif /* Disable canonical mode, and don't echo input characters. */ term.c_lflag &= ~(ICANON | ECHO);