diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index ac3f7c868..ee9ff86aa 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1074,6 +1074,18 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) } } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -1774,6 +1786,12 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -2146,6 +2164,12 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -2165,6 +2189,12 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -2186,6 +2216,12 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -2208,6 +2244,12 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -2235,6 +2277,12 @@ int icom_set_vfo(RIG *rig, vfo_t vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -2255,7 +2303,7 @@ int icom_set_cmd(RIG *rig, vfo_t vfo, struct cmdparams *par, value_t val) unsigned char cmdbuf[MAXFRAMELEN]; int cmdlen = 0; unsigned char ackbuf[MAXFRAMELEN]; - int acklen = 0; + int ack_len = 0; if (!(par->submod & SC_MOD_WR)) { RETURNFUNC(-RIG_EINVAL); } @@ -2313,7 +2361,7 @@ int icom_set_cmd(RIG *rig, vfo_t vfo, struct cmdparams *par, value_t val) cmdlen += par->datlen; RETURNFUNC(icom_transaction(rig, par->command, par->subcmd, cmdbuf, cmdlen, ackbuf, - &acklen)); + &ack_len)); } int icom_get_cmd(RIG *rig, vfo_t vfo, struct cmdparams *par, value_t *val) @@ -2754,6 +2802,12 @@ int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -3015,6 +3069,12 @@ int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) lvl_len--; } + if (lvl_len >= 1 && lvlbuf[0] != ACK && lvlbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -3576,6 +3636,12 @@ int icom_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -3700,6 +3766,12 @@ int icom_set_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -3801,6 +3873,12 @@ int icom_set_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t rptr_offs) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -4079,6 +4157,12 @@ int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -4293,6 +4377,12 @@ int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -4406,6 +4496,12 @@ int icom_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -4509,6 +4605,12 @@ int icom_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -4626,6 +4728,12 @@ int icom_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t tx_freq, RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -4765,6 +4873,12 @@ int icom_get_split_freq_mode(RIG *rig, vfo_t vfo, freq_t *tx_freq, RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -5006,6 +5120,12 @@ int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -5192,6 +5312,12 @@ int icom_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -5259,7 +5385,7 @@ int icom_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts) int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { unsigned char fctbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int fct_len, acklen, retval; + int fct_len, ack_len, retval; int fct_cn, fct_sc; /* Command Number, Subcommand */ struct rig_state *rs = &rig->state; struct icom_priv_data *priv = (struct icom_priv_data *) rs->priv; @@ -5477,16 +5603,16 @@ int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) } retval = icom_transaction(rig, fct_cn, fct_sc, fctbuf, fct_len, ackbuf, - &acklen); + &ack_len); if (retval != RIG_OK) { RETURNFUNC(retval); } - if (acklen != 1) + if (ack_len != 1) { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, acklen); + rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, ack_len); RETURNFUNC(-RIG_EPROTO); } @@ -5856,6 +5982,12 @@ int icom_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -5957,6 +6089,12 @@ int icom_set_ctcss_sql(RIG *rig, vfo_t vfo, tone_t tone) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6051,6 +6189,12 @@ int icom_set_dcs_code(RIG *rig, vfo_t vfo, tone_t code) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6150,6 +6294,12 @@ int icom_set_dcs_sql(RIG *rig, vfo_t vfo, tone_t code) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6363,6 +6513,12 @@ int icom_get_powerstat(RIG *rig, powerstat_t *status) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6400,6 +6556,12 @@ int icom_set_mem(RIG *rig, vfo_t vfo, int ch) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6430,6 +6592,12 @@ int icom_set_bank(RIG *rig, vfo_t vfo, int bank) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6559,6 +6727,12 @@ int icom_set_ant(RIG *rig, vfo_t vfo, ant_t ant, value_t option) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6739,6 +6913,12 @@ int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { if (op != RIG_OP_XCHG) @@ -6845,6 +7025,12 @@ int icom_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6883,6 +7069,12 @@ int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -6915,6 +7107,12 @@ int icom_stop_morse(RIG *rig, vfo_t vfo) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, @@ -7090,7 +7288,7 @@ int icom_set_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, unsigned char *subcmdbuf, int val_bytes, int val) { unsigned char cmdbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int acklen = sizeof(ackbuf); + int ack_len = sizeof(ackbuf); int cmdbuflen = subcmdbuflen; int retval; @@ -7113,17 +7311,23 @@ int icom_set_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, } retval = - icom_transaction(rig, cmd, subcmd, cmdbuf, cmdbuflen, ackbuf, &acklen); + icom_transaction(rig, cmd, subcmd, cmdbuf, cmdbuflen, ackbuf, &ack_len); if (retval != RIG_OK) { RETURNFUNC(retval); } - if (acklen != 1 || ackbuf[0] != ACK) + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], acklen); + ackbuf[0], ack_len); RETURNFUNC(-RIG_ERJCTED); } @@ -7135,7 +7339,7 @@ int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen, unsigned char *res) { unsigned char ackbuf[MAXFRAMELEN]; - int acklen = sizeof(ackbuf); + int ack_len = sizeof(ackbuf); int cmdhead = subcmdbuflen; int retval; @@ -7143,7 +7347,7 @@ int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen, retval = icom_transaction(rig, cmd, subcmd, subcmdbuf, subcmdbuflen, ackbuf, - &acklen); + &ack_len); if (retval != RIG_OK) { @@ -7151,24 +7355,30 @@ int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen, } cmdhead += (subcmd == -1) ? 1 : 2; - acklen -= cmdhead; + ack_len -= cmdhead; + + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } if (ackbuf[0] != ACK && ackbuf[0] != cmd) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], acklen); + ackbuf[0], ack_len); RETURNFUNC(-RIG_ERJCTED); } - rig_debug(RIG_DEBUG_TRACE, "%s: %d\n", __func__, acklen); + rig_debug(RIG_DEBUG_TRACE, "%s: %d\n", __func__, ack_len); - if (*reslen < acklen || res == NULL) + if (*reslen < ack_len || res == NULL) { RETURNFUNC(-RIG_EINTERNAL); } - memcpy(res, ackbuf + cmdhead, acklen); - *reslen = acklen; + memcpy(res, ackbuf + cmdhead, ack_len); + *reslen = ack_len; RETURNFUNC(RIG_OK); } @@ -7270,6 +7480,12 @@ int icom_send_voice_mem(RIG *rig, vfo_t vfo, int ch) RETURNFUNC(retval); } + if (ack_len >= 1 && ackbuf[0] != ACK && ackbuf[1] != NAK) + { // if we don't get ACK/NAK some serial corruption occurred + // so we'll call it a timeout for retry purposes + RETURNFUNC(-RIG_ETIMEOUT); + } + if (ack_len != 1 || ackbuf[0] != ACK) { rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index 1e70be2a2..258519e17 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -30,7 +30,7 @@ #include #endif -#define BACKEND_VER "20210305" +#define BACKEND_VER "20210306" /* * defines used by comp_cal_str in rig.c