Implement get PTT status for the TenTec Argonaut

Changed Argonaut  mode set command  to leave the width  unchanged when
passed RIG_PASSBAND_NORMAL.

Also tidied up response validity checks.
Hamlib-3.0
Bill Somerville 2015-03-15 11:39:53 +00:00
rodzic f82493b957
commit f04793c833
3 zmienionych plików z 73 dodań i 40 usunięć

Wyświetl plik

@ -149,6 +149,7 @@ const struct rig_caps tt516_caps = {
.set_split_vfo = tentec2_set_split_vfo, .set_split_vfo = tentec2_set_split_vfo,
.get_split_vfo = tentec2_get_split_vfo, .get_split_vfo = tentec2_get_split_vfo,
.set_ptt = tentec2_set_ptt, .set_ptt = tentec2_set_ptt,
.get_ptt = tentec2_get_ptt,
.reset = tentec2_reset, .reset = tentec2_reset,
.get_info = tentec2_get_info, .get_info = tentec2_get_info,

Wyświetl plik

@ -119,13 +119,13 @@ int tentec2_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
ret_len = 3; ret_len = 3;
retval = tentec_transaction (rig, freqbuf, 7, freqbuf, &ret_len); retval = tentec_transaction (rig, freqbuf, 7, freqbuf, &ret_len);
if (retval != RIG_OK || ret_len != 2) if (retval != RIG_OK)
return -RIG_EINVAL; return -RIG_EINVAL;
if (freqbuf[0] == 'G') if (ret_len != 2 || freqbuf[0] != 'G')
return RIG_OK; return -RIG_ERJCTED;
return -RIG_ERJCTED; return RIG_OK;
} }
/* /*
@ -163,6 +163,7 @@ int tentec2_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (ret_len == 2 && freqbuf[0] == 'Z') if (ret_len == 2 && freqbuf[0] == 'Z')
return -RIG_ERJCTED; return -RIG_ERJCTED;
if (ret_len != 8) if (ret_len != 8)
return -RIG_EINVAL; return -RIG_EINVAL;
@ -209,10 +210,10 @@ int tentec2_set_vfo(RIG *rig, vfo_t vfo)
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ret_len == 2 && vfobuf[0] == 'G') if (ret_len != 2 || vfobuf[0] != 'G')
return RIG_OK; return -RIG_ERJCTED;
return -RIG_ERJCTED; return RIG_OK;
} }
/* /*
@ -269,10 +270,10 @@ int tentec2_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo)
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ret_len == 2 && retbuf[0] == 'G') if (ret_len != 2 || retbuf[0] != 'G')
return RIG_OK; return -RIG_ERJCTED;
return -RIG_ERJCTED; return RIG_OK;
} }
/* /*
@ -359,34 +360,35 @@ int tentec2_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ret_len == 2 && mdbuf[0] == 'G') if (ret_len != 2 || mdbuf[0] != 'G')
{ return -RIG_ERJCTED;
if (width == RIG_PASSBAND_NORMAL)
width = rig_passband_normal(rig, mode);
/* if (width != RIG_PASSBAND_NORMAL) /* with NORMAL we leave width alone */
* Filter 0: 200 return RIG_OK;
* ..
* Filter 16: 1000
* ..
* Filter 36: 3000
*/
if (width < 1000)
ttfilter = (width / 50) - 4;
else
ttfilter = (width / 100) + 6;
strcpy (mdbuf, "*Wn\r"); /*
mdbuf[2] = ttfilter; * Filter 0: 200
ret_len = 3; * ..
retval = tentec_transaction (rig, mdbuf, 4, mdbuf, &ret_len); * Filter 16: 1000
* ..
* Filter 36: 3000
*/
if (width < 1000)
ttfilter = (width / 50) - 4;
else
ttfilter = (width / 100) + 6;
if (retval != RIG_OK) strcpy (mdbuf, "*Wn\r");
return retval; mdbuf[2] = ttfilter;
if (ret_len == 2 && mdbuf[0] == 'G') ret_len = 3;
return RIG_OK; retval = tentec_transaction (rig, mdbuf, 4, mdbuf, &ret_len);
} if (retval != RIG_OK)
return -RIG_ERJCTED; return retval;
if (ret_len != 2 || mdbuf[0] != 'G')
return -RIG_ERJCTED;
return RIG_OK;
} }
@ -476,11 +478,42 @@ int tentec2_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
retbuf, &ret_len); retbuf, &ret_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ret_len == 2 && retbuf[0] == 'G')
return RIG_OK;
return -RIG_ERJCTED; if (ret_len != 2 || retbuf[0] != 'G')
return -RIG_ERJCTED;
return RIG_OK;
}
/*
* tentec2_get_ptt
* Assumes rig!=NULL
*/
int tentec2_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
{
int ret_len, retval;
char buf[7] = "?C\r";
ret_len = 7;
retval = tentec_transaction (rig, buf, 3, buf, &ret_len);
if (retval != RIG_OK)
return retval;
// ArgoV sends back 6 character string
// "Cnn\rG\r" where nn is the status word
// or 2 character failure string
// "Z\r"
if (ret_len == 2 && buf[0] == 'Z')
return -RIG_ERJCTED;
if (ret_len != 6)
return -RIG_EPROTO;
*ptt = buf[2] & 0x01 ? RIG_PTT_ON : RIG_PTT_OFF;
return RIG_OK;
} }
@ -532,5 +565,3 @@ const char *tentec2_get_info(RIG *rig)
return buf; return buf;
} }

Wyświetl plik

@ -46,6 +46,7 @@ int tentec2_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
int tentec2_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo); int tentec2_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo);
int tentec2_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo); int tentec2_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo);
int tentec2_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); int tentec2_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
int tentec2_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt);
int tentec2_reset(RIG *rig, reset_t reset); int tentec2_reset(RIG *rig, reset_t reset);
const char* tentec2_get_info(RIG *rig); const char* tentec2_get_info(RIG *rig);