Fix Yaesu FT1000MP and FT1000MP Mk V modes.

The get mode function was not taking account of the extra mode bit in
the IF passband status byte. Also the set mode function was not
supporting the full set of available rig modes.

Added tuning step and bandwidth data for the newly supported modes.
Hamlib-3.0
Bill Somerville 2013-10-11 15:12:54 +01:00 zatwierdzone przez Bill Somerville
rodzic 266139aa7c
commit ea49154813
2 zmienionych plików z 57 dodań i 30 usunięć

Wyświetl plik

@ -395,14 +395,14 @@ const struct rig_caps ft1000mpmkv_caps = {
}, /* region 2 TX ranges */
.tuning_steps = {
{RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY, Hz(10)}, /* Normal */
{RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY, Hz(100)}, /* Fast */
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB, Hz(10)}, /* Normal */
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB, Hz(100)}, /* Fast */
{RIG_MODE_AM, Hz(100)}, /* Normal */
{RIG_MODE_AM, kHz(1)}, /* Fast */
{RIG_MODE_AM|RIG_MODE_SAL, Hz(100)}, /* Normal */
{RIG_MODE_AM|RIG_MODE_SAL, kHz(1)}, /* Fast */
{RIG_MODE_FM, Hz(100)}, /* Normal */
{RIG_MODE_FM, kHz(1)}, /* Fast */
{RIG_MODE_FM|RIG_MODE_PKTFM, Hz(100)}, /* Normal */
{RIG_MODE_FM|RIG_MODE_PKTFM, kHz(1)}, /* Fast */
RIG_TS_END,
@ -417,12 +417,12 @@ const struct rig_caps ft1000mpmkv_caps = {
/* mode/filter list, .remember = order matters! */
.filters = {
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY|RIG_MODE_AM, kHz(2.4)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY, kHz(2.0)},
{RIG_MODE_CW|RIG_MODE_RTTY, Hz(500)},
{RIG_MODE_CW|RIG_MODE_RTTY, Hz(250)},
{RIG_MODE_AM, kHz(5)}, /* wide */
{RIG_MODE_FM, kHz(8)}, /* FM */
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_PKTLSB, kHz(2.4)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_PKTLSB, kHz(2.0)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(500)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(250)},
{RIG_MODE_AM|RIG_MODE_SAL, kHz(5)}, /* wide */
{RIG_MODE_FM|RIG_MODE_PKTFM, kHz(8)}, /* FM */
RIG_FLT_END,
},
@ -520,14 +520,14 @@ const struct rig_caps ft1000mpmkvfld_caps = {
}, /* region 2 TX ranges */
.tuning_steps = {
{RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY, Hz(10)}, /* Normal */
{RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY, Hz(100)}, /* Fast */
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB, Hz(10)}, /* Normal */
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB, Hz(100)}, /* Fast */
{RIG_MODE_AM, Hz(100)}, /* Normal */
{RIG_MODE_AM, kHz(1)}, /* Fast */
{RIG_MODE_AM|RIG_MODE_SAL, Hz(100)}, /* Normal */
{RIG_MODE_AM|RIG_MODE_SAL, kHz(1)}, /* Fast */
{RIG_MODE_FM, Hz(100)}, /* Normal */
{RIG_MODE_FM, kHz(1)}, /* Fast */
{RIG_MODE_FM|RIG_MODE_PKTFM, Hz(100)}, /* Normal */
{RIG_MODE_FM|RIG_MODE_PKTFM, kHz(1)}, /* Fast */
RIG_TS_END,
@ -542,12 +542,12 @@ const struct rig_caps ft1000mpmkvfld_caps = {
/* mode/filter list, .remember = order matters! */
.filters = {
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY|RIG_MODE_AM, kHz(2.4)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_RTTY, kHz(2.0)},
{RIG_MODE_CW|RIG_MODE_RTTY, Hz(500)},
{RIG_MODE_CW|RIG_MODE_RTTY, Hz(250)},
{RIG_MODE_AM, kHz(5)}, /* wide */
{RIG_MODE_FM, kHz(8)}, /* FM */
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_PKTLSB, kHz(2.4)},
{RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_PKTLSB, kHz(2.0)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(500)},
{RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR, Hz(250)},
{RIG_MODE_AM|RIG_MODE_SAL, kHz(5)}, /* wide */
{RIG_MODE_FM|RIG_MODE_PKTFM, kHz(8)}, /* FM */
RIG_FLT_END,
},
@ -788,6 +788,9 @@ int ft1000mp_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
cmd_index = FT1000MP_NATIVE_MODE_SET_AM;
break;
case RIG_MODE_CW:
cmd_index = FT1000MP_NATIVE_MODE_SET_CWR;
break;
case RIG_MODE_CWR:
cmd_index = FT1000MP_NATIVE_MODE_SET_CW;
break;
case RIG_MODE_USB:
@ -802,6 +805,15 @@ int ft1000mp_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
case RIG_MODE_RTTY:
cmd_index = FT1000MP_NATIVE_MODE_SET_RTTY_LSB;
break;
case RIG_MODE_RTTYR:
cmd_index = FT1000MP_NATIVE_MODE_SET_RTTY_USB;
break;
case RIG_MODE_PKTLSB:
cmd_index = FT1000MP_NATIVE_MODE_SET_DATA_LSB;
break;
case RIG_MODE_PKTFM:
cmd_index = FT1000MP_NATIVE_MODE_SET_DATA_FM;
break;
default:
return -RIG_EINVAL; /* sorry, wrong MODE */
}
@ -833,6 +845,7 @@ int ft1000mp_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width ) {
int ft1000mp_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
struct ft1000mp_priv_data *priv;
unsigned char mymode; /* ft1000mp mode */
unsigned char mymode_ext; /* ft1000mp extra mode bit mode */
int cmd_index, len, retval;
rig_debug(RIG_DEBUG_VERBOSE,"ft1000mp: ft1000mp_get_mode called\n");
@ -857,9 +870,15 @@ int ft1000mp_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
return retval;
if (vfo == RIG_VFO_B)
mymode = priv->update_data[FT1000MP_SUMO_VFO_B_MODE];
{
mymode = priv->update_data[FT1000MP_SUMO_VFO_B_MODE];
mymode_ext = priv->update_data[FT1000MP_SUMO_VFO_B_IF] & IF_MODE_MASK;
}
else
mymode = priv->update_data[FT1000MP_SUMO_VFO_A_MODE]; /* CURR_VFO is VFOA offset */
{
mymode = priv->update_data[FT1000MP_SUMO_VFO_A_MODE]; /* CURR_VFO is VFOA offset */
mymode_ext = priv->update_data[FT1000MP_SUMO_VFO_A_IF] & IF_MODE_MASK;
}
rig_debug(RIG_DEBUG_TRACE,"ft1000mp: mymode = %x (before)\n", mymode);
@ -873,7 +892,7 @@ int ft1000mp_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
*/
switch(mymode) {
case MODE_CW:
*mode = RIG_MODE_CW;
*mode = mymode_ext ? RIG_MODE_CW : RIG_MODE_CWR;
break;
case MODE_USB:
*mode = RIG_MODE_USB;
@ -882,13 +901,16 @@ int ft1000mp_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) {
*mode = RIG_MODE_LSB;
break;
case MODE_AM:
*mode = RIG_MODE_AM;
*mode = mymode_ext ? RIG_MODE_SAL : RIG_MODE_AM;
break;
case MODE_FM:
*mode = RIG_MODE_FM;
break;
case MODE_RTTY:
*mode = RIG_MODE_RTTY;
*mode = mymode_ext ? RIG_MODE_RTTYR : RIG_MODE_RTTY;
break;
case MODE_PKT:
*mode = mymode_ext ? RIG_MODE_PKTFM : RIG_MODE_PKTLSB;
break;
default:

Wyświetl plik

@ -122,7 +122,7 @@ typedef enum ft1000mp_native_cmd_e ft1000mp_native_cmd_t;
#define MODE_SET_RTTYL 0x08
#define MODE_SET_RTTYU 0x09
#define MODE_SET_PKTL 0x0a
#define MODE_SET_PKTU 0x0b
#define MODE_SET_PKTF 0x0b
/*
@ -181,7 +181,12 @@ typedef enum ft1000mp_native_cmd_e ft1000mp_native_cmd_t;
#define FT1000MP_SUMO_VFO_B_CLAR 0x15
#define FT1000MP_SUMO_VFO_A_MODE 0x07
#define FT1000MP_SUMO_VFO_B_MODE 0x17
#define FT1000MP_SUMO_VFO_A_IF 0x08
#define FT1000MP_SUMO_VFO_B_IF 0x18
/* mask extra mode bit from IF Filter status byte in VFO status
block */
#define IF_MODE_MASK 0x80
/*