diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index dd51a7188..252ec9aac 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -180,7 +180,9 @@ typedef enum rig_port_e { enum serial_parity_e { RIG_PARITY_NONE = 0, /*!< No parity */ RIG_PARITY_ODD, /*!< Odd */ - RIG_PARITY_EVEN /*!< Even */ + RIG_PARITY_EVEN, /*!< Even */ + RIG_PARITY_MARK, /*!< Mark */ + RIG_PARITY_SPACE /*!< Space */ }; /** @@ -624,7 +626,7 @@ enum rig_level_e { RIG_LEVEL_RF = (1<<4), /*!< \c RF -- RF gain (not TX power), arg float [0.0 ... 1.0] */ RIG_LEVEL_SQL = (1<<5), /*!< \c SQL -- Squelch, arg float [0.0 ... 1.0] */ RIG_LEVEL_IF = (1<<6), /*!< \c IF -- IF, arg int (Hz) */ - RIG_LEVEL_APF = (1<<7), /*!< \c APF -- APF, arg float [0.0 ... 1.0] */ + RIG_LEVEL_APF = (1<<7), /*!< \c APF -- Audio Peak Filter, arg float [0.0 ... 1.0] */ RIG_LEVEL_NR = (1<<8), /*!< \c NR -- Noise Reduction, arg float [0.0 ... 1.0] */ RIG_LEVEL_PBT_IN = (1<<9), /*!< \c PBT_IN -- Twin PBT (inside), arg float [0.0 ... 1.0] */ RIG_LEVEL_PBT_OUT = (1<<10),/*!< \c PBT_OUT -- Twin PBT (outside), arg float [0.0 ... 1.0] */ diff --git a/src/conf.c b/src/conf.c index f17d97d9a..0f732bcbb 100644 --- a/src/conf.c +++ b/src/conf.c @@ -114,7 +114,7 @@ static const struct confparams frontend_serial_cfg_params[] = { }, { TOK_PARITY, "serial_parity", "Serial parity", "Serial port parity", - "None", RIG_CONF_COMBO, { .c = {{ "None", "Odd", "Even", NULL }} } + "None", RIG_CONF_COMBO, { .c = {{ "None", "Odd", "Even", "Mark", "Space", NULL }} } }, { TOK_HANDSHAKE, "serial_handshake", "Serial handshake", "Serial port handshake", @@ -208,6 +208,10 @@ static int frontend_set_conf(RIG *rig, token_t token, const char *val) rs->rigport.parm.serial.parity = RIG_PARITY_ODD; else if (!strcmp(val, "Even")) rs->rigport.parm.serial.parity = RIG_PARITY_EVEN; + else if (!strcmp(val, "Mark")) + rs->rigport.parm.serial.parity = RIG_PARITY_MARK; + else if (!strcmp(val, "Space")) + rs->rigport.parm.serial.parity = RIG_PARITY_SPACE; else return -RIG_EINVAL; break; @@ -385,6 +389,8 @@ static int frontend_get_conf(RIG *rig, token_t token, char *val) case RIG_PARITY_NONE: s = "None"; break; case RIG_PARITY_ODD: s = "Odd"; break; case RIG_PARITY_EVEN: s = "Even"; break; + case RIG_PARITY_MARK: s = "Mark"; break; + case RIG_PARITY_SPACE: s = "Space"; break; default: return -RIG_EINVAL; } strcpy(val, s); diff --git a/src/rot_conf.c b/src/rot_conf.c index ea832892f..d5ff45daa 100644 --- a/src/rot_conf.c +++ b/src/rot_conf.c @@ -103,7 +103,7 @@ static const struct confparams rotfrontend_serial_cfg_params[] = { }, { TOK_PARITY, "serial_parity", "Serial parity", "Serial port parity", - "None", RIG_CONF_COMBO, { .c = {{ "None", "Odd", "Even", NULL }} } + "None", RIG_CONF_COMBO, { .c = {{ "None", "Odd", "Even", "Mark", "Space", NULL }} } }, { TOK_HANDSHAKE, "serial_handshake", "Serial handshake", "Serial port handshake", @@ -186,6 +186,10 @@ int frontrot_set_conf(ROT *rot, token_t token, const char *val) rs->rotport.parm.serial.parity = RIG_PARITY_ODD; else if (!strcmp(val, "Even")) rs->rotport.parm.serial.parity = RIG_PARITY_EVEN; + else if (!strcmp(val, "Mark")) + rs->rotport.parm.serial.parity = RIG_PARITY_MARK; + else if (!strcmp(val, "Space")) + rs->rotport.parm.serial.parity = RIG_PARITY_SPACE; else return -RIG_EINVAL; break; @@ -275,6 +279,8 @@ int frontrot_get_conf(ROT *rot, token_t token, char *val) case RIG_PARITY_NONE: s = "None"; break; case RIG_PARITY_ODD: s = "Odd"; break; case RIG_PARITY_EVEN: s = "Even"; break; + case RIG_PARITY_MARK: s = "Mark"; break; + case RIG_PARITY_SPACE: s = "Space"; break; default: return -RIG_EINVAL; } strcpy(val, s); diff --git a/src/serial.c b/src/serial.c index 4b1c91a44..11cfa270c 100644 --- a/src/serial.c +++ b/src/serial.c @@ -281,6 +281,17 @@ int HAMLIB_API serial_setup(hamlib_port_t *rp) options.c_cflag |= PARENB; options.c_cflag |= PARODD; break; + /* CMSPAR is not POSIX */ +#ifdef CMSPAR + case RIG_PARITY_MARK: + options.c_cflag |= PARENB | CMSPAR; + options.c_cflag |= PARODD; + break; + case RIG_PARITY_SPACE: + options.c_cflag |= PARENB | CMSPAR; + options.c_cflag &= ~PARODD; + break; +#endif default: rig_debug(RIG_DEBUG_ERR, "%s: unsupported serial_parity " "specified: %d\n", __func__, diff --git a/tests/dumpcaps.c b/tests/dumpcaps.c index 46860bd3d..752670ea0 100644 --- a/tests/dumpcaps.c +++ b/tests/dumpcaps.c @@ -152,7 +152,9 @@ int dumpcaps (RIG* rig, FILE *fout) fprintf(fout, "Serial speed: %d..%d bauds, %d%c%d %s\n", caps->serial_rate_min, caps->serial_rate_max, caps->serial_data_bits, caps->serial_parity == RIG_PARITY_NONE ? 'N': - (caps->serial_parity == RIG_PARITY_ODD ? 'O' : 'E'), + caps->serial_parity == RIG_PARITY_ODD ? 'O' : + caps->serial_parity == RIG_PARITY_EVEN ? 'E' : + caps->serial_parity == RIG_PARITY_MARK ? 'M' : 'S', caps->serial_stop_bits, caps->serial_handshake == RIG_HANDSHAKE_NONE ? "" : (caps->serial_handshake == RIG_HANDSHAKE_XONXOFF ? "XONXOFF" : "CTS/RTS") diff --git a/tests/dumpcaps_rot.c b/tests/dumpcaps_rot.c index 4809a3830..a5119f551 100644 --- a/tests/dumpcaps_rot.c +++ b/tests/dumpcaps_rot.c @@ -79,7 +79,9 @@ int dumpcaps_rot (ROT* rot, FILE *fout) fprintf(fout, "Serial speed:\t\t%d..%d bauds, %d%c%d%s\n", caps->serial_rate_min, caps->serial_rate_max, caps->serial_data_bits, caps->serial_parity == RIG_PARITY_NONE ? 'N': - (caps->serial_parity == RIG_PARITY_ODD ? 'O' : 'E'), + caps->serial_parity == RIG_PARITY_ODD ? 'O' : + caps->serial_parity == RIG_PARITY_EVEN ? 'E' : + caps->serial_parity == RIG_PARITY_MARK ? 'M' : 'S', caps->serial_stop_bits, caps->serial_handshake == RIG_HANDSHAKE_NONE ? "" : (caps->serial_handshake == RIG_HANDSHAKE_XONXOFF ? " XONXOFF" : " CTS/RTS") diff --git a/tests/rigmatrix.c b/tests/rigmatrix.c index 33811b634..e4cd0278e 100644 --- a/tests/rigmatrix.c +++ b/tests/rigmatrix.c @@ -168,7 +168,9 @@ int print_caps_parameters(const struct rig_caps *caps, void *data) caps->serial_rate_min, caps->serial_rate_max, caps->serial_data_bits, caps->serial_parity==RIG_PARITY_NONE?'N': - (caps->serial_parity==RIG_PARITY_ODD?'O':'E'), + caps->serial_parity==RIG_PARITY_ODD?'O': + caps->serial_parity==RIG_PARITY_EVEN?'E': + caps->serial_parity==RIG_PARITY_MARK?'M':'S', caps->serial_stop_bits, caps->serial_handshake==RIG_HANDSHAKE_NONE?"none": (caps->serial_handshake==RIG_HANDSHAKE_XONXOFF?"XONXOFF":"CTS/RTS")