[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. v4.0rc1-67-g6fbb039a
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Michael B. <mdb...@us...> - 2020-08-01 12:20:17
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via 6fbb039a69523ae5c181f64cbe6f37a6322b179c (commit) via 958e05a0276ddc2b4c16060ea4b62bd5d7390469 (commit) via d77383b903947dd919887550ae1bf6653ca6b7f9 (commit) via 54106100459c4cd3ce82761d545929c331a25122 (commit) via 8aa5126650b7d649347a6897b7ab0141b2ecff2d (commit) via 23d4cc73dc3723d6f688f6eaa8c54ed0d8a83bf9 (commit) via 9d64f642ce8e030cc9b18fb77a3c7003e8853152 (commit) from 6dbbe4a8ff55c3121f8736cf9c9582ba08c243a0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6fbb039a69523ae5c181f64cbe6f37a6322b179c Merge: 54106100 958e05a0 Author: Michael Black W9MDB <mdb...@ya...> Date: Fri Jul 31 15:18:26 2020 -0500 Merge branch 'master' of https://github.com/Hamlib/Hamlib commit 958e05a0276ddc2b4c16060ea4b62bd5d7390469 Merge: 8aa51266 d77383b9 Author: Michael Black <mdb...@ya...> Date: Fri Jul 31 15:03:52 2020 -0500 Merge pull request #356 from g0gjv/master Implement RIT/XIT on ft1000mp commit d77383b903947dd919887550ae1bf6653ca6b7f9 Author: Mike Goodey <mi...@go...> Date: Fri Jul 31 18:34:15 2020 +0100 Implement RIT/XIT diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c index c1b54442..befa3887 100644 --- a/rigs/yaesu/ft1000mp.c +++ b/rigs/yaesu/ft1000mp.c @@ -77,10 +77,12 @@ static const yaesu_cmd_set_t ncmd[] = { 1, { 0x00, 0x00, 0x00, 0x00, 0x05 } }, /* select vfo A */ { 1, { 0x00, 0x00, 0x00, 0x01, 0x05 } }, /* select vfo B */ { 0, { 0x00, 0x00, 0x00, 0x00, 0x06 } }, /* copy memory data to vfo A */ - { 0, { 0x00, 0x00, 0x00, 0x00, 0x09 } }, /* RX clarifier on */ - { 1, { 0x00, 0x00, 0x00, 0x01, 0x09 } }, /* RX clarifier off */ - { 1, { 0x00, 0x00, 0x00, 0x80, 0x09 } }, /* TX clarifier on */ - { 1, { 0x00, 0x00, 0x00, 0x81, 0x09 } }, /* TX clarifier off */ + { 1, { 0x00, 0x00, 0x00, 0x01, 0x09 } }, /* RX clarifier on */ + { 1, { 0x00, 0x00, 0x00, 0x00, 0x09 } }, /* RX clarifier off */ + { 1, { 0x00, 0x00, 0x00, 0x81, 0x09 } }, /* TX clarifier on */ + { 1, { 0x00, 0x00, 0x00, 0x80, 0x09 } }, /* TX clarifier off */ + { 0, { 0x00, 0x00, 0x00, 0xFF, 0x09 } }, /* set clarifier offset */ + { 0, { 0x00, 0x00, 0x00, 0x00, 0x0a } }, /* set VFOA freq */ { 0, { 0x00, 0x00, 0x00, 0x00, 0x8a } }, /* set VFOB freq */ @@ -138,9 +140,13 @@ static const yaesu_cmd_set_t ncmd[] = #define FT1000MP_OTHER_TX_MODES (RIG_MODE_CW| RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) /* 100 W class */ #define FT1000MP_AM_TX_MODES (RIG_MODE_AM ) /* set 25W max */ -#define FT1000MP_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_LOCK /* |RIG_FUNC_TUNER */) /* FIXME */ +#define FT1000MP_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL \ + |RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_LOCK \ + |RIG_FUNC_RIT|RIG_FUNC_XIT \ + /* |RIG_FUNC_TUNER */) /* FIXME */ -#define FT1000MP_LEVEL_GET (RIG_LEVEL_RAWSTR|RIG_LEVEL_ALC|RIG_LEVEL_SWR|RIG_LEVEL_RFPOWER|RIG_LEVEL_COMP|RIG_LEVEL_MICGAIN|RIG_LEVEL_CWPITCH) +#define FT1000MP_LEVEL_GET (RIG_LEVEL_RAWSTR|RIG_LEVEL_ALC|RIG_LEVEL_SWR|RIG_LEVEL_RFPOWER|RIG_LEVEL_COMP| \ + RIG_LEVEL_MICGAIN|RIG_LEVEL_CWPITCH) #define FT1000MP_VFOS (RIG_VFO_A|RIG_VFO_B) #define FT1000MP_ANTS 0 /* FIXME: declare antenna connectors: ANT-A, ANT-B, RX ANT */ @@ -216,7 +222,7 @@ const struct rig_caps ft1000mp_caps = RIG_MODEL(RIG_MODEL_FT1000MP), .model_name = "FT-1000MP", .mfg_name = "Yaesu", - .version = "20200727.0", + .version = "20200731.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -331,14 +337,17 @@ const struct rig_caps ft1000mp_caps = .set_split_vfo = ft1000mp_set_split_vfo, .get_split_vfo = ft1000mp_get_split_vfo, - .get_rit = ft1000mp_get_rit, + .get_rit = ft1000mp_get_rxit, .set_rit = ft1000mp_set_rit, - .get_xit = ft1000mp_get_xit, + .get_xit = ft1000mp_get_rxit, .set_xit = ft1000mp_set_xit, .get_level = ft1000mp_get_level, .set_ptt = ft1000mp_set_ptt, + .set_func = ft1000mp_set_func, + .get_func = ft1000mp_get_func, + /* TODO: the remaining ... */ }; @@ -347,7 +356,7 @@ const struct rig_caps ft1000mpmkv_caps = RIG_MODEL(RIG_MODEL_FT1000MPMKV), .model_name = "MARK-V FT-1000MP", .mfg_name = "Yaesu", - .version = "20200716.0", + .version = "20200731.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -462,14 +471,17 @@ const struct rig_caps ft1000mpmkv_caps = .set_split_vfo = ft1000mp_set_split_vfo, .get_split_vfo = ft1000mp_get_split_vfo, - .get_rit = ft1000mp_get_rit, + .get_rit = ft1000mp_get_rxit, .set_rit = ft1000mp_set_rit, - .get_xit = ft1000mp_get_xit, + .get_xit = ft1000mp_get_rxit, .set_xit = ft1000mp_set_xit, .get_level = ft1000mp_get_level, .set_ptt = ft1000mp_set_ptt, + .set_func = ft1000mp_set_func, + .get_func = ft1000mp_get_func, + /* TODO: the remaining ... */ }; @@ -478,7 +490,7 @@ const struct rig_caps ft1000mpmkvfld_caps = RIG_MODEL(RIG_MODEL_FT1000MPMKVFLD), .model_name = "MARK-V Field FT-1000MP", .mfg_name = "Yaesu", - .version = "20200716.0", + .version = "20200731.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -593,14 +605,17 @@ const struct rig_caps ft1000mpmkvfld_caps = .set_split_vfo = ft1000mp_set_split_vfo, .get_split_vfo = ft1000mp_get_split_vfo, - .get_rit = ft1000mp_get_rit, + .get_rit = ft1000mp_get_rxit, .set_rit = ft1000mp_set_rit, - .get_xit = ft1000mp_get_xit, + .get_xit = ft1000mp_get_rxit, .set_xit = ft1000mp_set_xit, .get_level = ft1000mp_get_level, .set_ptt = ft1000mp_set_ptt, + .set_func = ft1000mp_set_func, + .get_func = ft1000mp_get_func, + /* TODO: the remaining ... */ }; @@ -765,25 +780,10 @@ int ft1000mp_set_freq(RIG *rig, vfo_t vfo, freq_t freq) return RIG_OK; } - -/* - * Return Freq for a given VFO - * - */ - -int ft1000mp_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) +int ft1000mp_get_vfo_data(RIG *rig, vfo_t vfo) { - struct ft1000mp_priv_data *priv; - unsigned char *p; - freq_t f; int cmd_index, len, retval; - rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__); - - - priv = (struct ft1000mp_priv_data *)rig->state.priv; - - if (vfo == RIG_VFO_A || vfo == RIG_VFO_B) { cmd_index = FT1000MP_NATIVE_VFO_UPDATE; @@ -801,11 +801,31 @@ int ft1000mp_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) */ retval = ft1000mp_get_update_data(rig, cmd_index, len); + return retval; +} +/* + * Return Freq for a given VFO + * + */ + +int ft1000mp_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) +{ + struct ft1000mp_priv_data *priv; + unsigned char *p; + freq_t f; + int retval; + + rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__); + + retval = ft1000mp_get_vfo_data(rig, vfo); + if (retval < 0) { return retval; } + priv = (struct ft1000mp_priv_data *)rig->state.priv; + if (vfo == RIG_VFO_B) { p = &priv->update_data[FT1000MP_SUMO_VFO_B_FREQ]; @@ -952,35 +972,20 @@ 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; + int retval; rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__); - priv = (struct ft1000mp_priv_data *)rig->state.priv; - - if (vfo == RIG_VFO_A || vfo == RIG_VFO_B) - { - cmd_index = FT1000MP_NATIVE_VFO_UPDATE; - len = 2 * FT1000MP_STATUS_UPDATE_LENGTH; - } - else - { - /* RIG_VFO_CURR or RIG_VFO_MEM */ - cmd_index = FT1000MP_NATIVE_CURR_VFO_UPDATE; - len = FT1000MP_STATUS_UPDATE_LENGTH; - } - - /* - * get record from rig - */ - retval = ft1000mp_get_update_data(rig, cmd_index, len); + retval = ft1000mp_get_vfo_data(rig, vfo); if (retval < 0) { return retval; } + priv = (struct ft1000mp_priv_data *)rig->state.priv; + if (vfo == RIG_VFO_B) { mymode = priv->update_data[FT1000MP_SUMO_VFO_B_MODE]; @@ -1148,131 +1153,182 @@ int ft1000mp_get_vfo(RIG *rig, vfo_t *vfo) return RIG_OK; } - -/* - * set_rit only support vfo = RIG_VFO_CURR - */ -int ft1000mp_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit) +int ft1000mp_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { - struct rig_state *rs; struct ft1000mp_priv_data *priv; - unsigned char *cmd; /* points to sequence to send */ - - rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __func__); + struct rig_state *rs; + unsigned char *cmd; rs = &rig->state; - priv = (struct ft1000mp_priv_data *)rs->priv; + priv = (struct ft1000mp_priv_data *)rig->state.priv; - rig_debug(RIG_DEBUG_TRACE, "%s: requested freq = %d Hz\n", __func__, (int)rit); + rig_debug(RIG_DEBUG_VERBOSE, "%s called func\n", __func__); - /* - * Copy native cmd freq_set to private cmd storage area - */ - memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_RIT_ON].nseq, YAESU_CMD_LENGTH); + switch (func) + { + case RIG_FUNC_RIT: + if (status) + { + memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_RIT_ON].nseq, YAESU_CMD_LENGTH); + } + else + { + memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_RIT_OFF].nseq, YAESU_CMD_LENGTH); + } - to_bcd(priv->p_cmd, labs(rit) / 10, 4); /* store bcd format in in p_cmd */ - priv->p_cmd[2] = rit >= 0 ? 0x00 : 0xff; + cmd = priv->p_cmd; - cmd = priv->p_cmd; /* get native sequence */ - write_block(&rs->rigport, (char *) cmd, YAESU_CMD_LENGTH); + write_block(&rs->rigport, (char *) cmd, YAESU_CMD_LENGTH); + return RIG_OK; - return RIG_OK; -} + case RIG_FUNC_XIT: + if (status) + { + memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_XIT_ON].nseq, YAESU_CMD_LENGTH); + } + else + { + memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_XIT_OFF].nseq, YAESU_CMD_LENGTH); + } + cmd = priv->p_cmd; -/* - * Return RIT for a given VFO - * - */ + write_block(&rs->rigport, (char *) cmd, YAESU_CMD_LENGTH); break; + return RIG_OK; -int ft1000mp_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit) + default: + rig_debug(RIG_DEBUG_ERR, "Unsupported set_func %s", rig_strfunc(func)); + return -RIG_EINVAL; + } + + return -RIG_EINVAL; +} +int ft1000mp_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) { + int retval; struct ft1000mp_priv_data *priv; unsigned char *p; - shortfreq_t f; - int cmd_index, len, retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__); priv = (struct ft1000mp_priv_data *)rig->state.priv; - if (vfo == RIG_VFO_CURR) + rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + + if (!status) { - vfo = rig->state.current_vfo; + return -RIG_EINVAL; } - if (vfo == RIG_VFO_A || vfo == RIG_VFO_B) + switch (func) { - cmd_index = FT1000MP_NATIVE_VFO_UPDATE; - len = 2 * FT1000MP_STATUS_UPDATE_LENGTH; - } - else + case RIG_FUNC_RIT: { - /* RIG_VFO_CURR or RIG_VFO_MEM */ - cmd_index = FT1000MP_NATIVE_CURR_VFO_UPDATE; - len = FT1000MP_STATUS_UPDATE_LENGTH; - } + retval = ft1000mp_get_vfo_data(rig, vfo); - /* - * get record from rig - */ - retval = ft1000mp_get_update_data(rig, cmd_index, len); + if (retval < 0) + { + return retval; + } - if (retval < 0) - { - return retval; - } + if (vfo == RIG_VFO_B) + { + p = &priv->update_data[FT1000MP_SUMO_VFO_B_MEM]; + } + else + { + p = &priv->update_data[FT1000MP_SUMO_VFO_A_MEM]; /* CURR_VFO has VFOA offset */ + } - if (vfo == RIG_VFO_B) - { - p = &priv->update_data[FT1000MP_SUMO_VFO_B_CLAR]; - } - else - { - p = &priv->update_data[FT1000MP_SUMO_VFO_A_CLAR]; /* CURR_VFO has VFOA offset */ + *status = (*p & 2) ? 1 : 0; + return RIG_OK; } - f = (p[0] << 8) + p[1]; - if (p[0] & 0x80) + case RIG_FUNC_XIT: { - f = (~(f - 1) & 0x7fff) * -1; // two's complement + retval = ft1000mp_get_vfo_data(rig, vfo); + + if (retval < 0) + { + return retval; + } + + if (vfo == RIG_VFO_B) + { + p = &priv->update_data[FT1000MP_SUMO_VFO_B_MEM]; + } + else + { + p = &priv->update_data[FT1000MP_SUMO_VFO_A_MEM]; /* CURR_VFO has VFOA offset */ + } + + *status = (*p & 1) ? 1 : 0; + return RIG_OK; } - f = f * 10 / 16; - rig_debug(RIG_DEBUG_TRACE, "%s: freq = %d Hz for VFO [%s]\n", __func__, (int)f, - rig_strvfo(vfo)); - *rit = f; /* return displayed frequency */ + default: + rig_debug(RIG_DEBUG_ERR, "Unsupported get_func %s", rig_strfunc(func)); + return -RIG_EINVAL; + } - return RIG_OK; + return -RIG_EINVAL; } - /* - * set_xit only support vfo = RIG_VFO_CURR + * set_rit only support vfo = RIG_VFO_CURR */ -int ft1000mp_set_xit(RIG *rig, vfo_t vfo, shortfreq_t xit) +int ft1000mp_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit) +{ + if (rit != 0) + { + ft1000mp_set_func(rig, vfo, RIG_FUNC_RIT, 1); + } + + return ft1000mp_set_rxit(rig, vfo, rit); +} + +int ft1000mp_set_xit(RIG *rig, vfo_t vfo, shortfreq_t rit) +{ + return ft1000mp_set_rxit(rig, vfo, rit); +} + +int ft1000mp_set_rxit(RIG *rig, vfo_t vfo, shortfreq_t rit) { struct rig_state *rs; struct ft1000mp_priv_data *priv; unsigned char *cmd; /* points to sequence to send */ + int direction = 0; rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __func__); rs = &rig->state; priv = (struct ft1000mp_priv_data *)rs->priv; - rig_debug(RIG_DEBUG_TRACE, "%s: requested freq = %d Hz \n", __func__, (int)xit); + rig_debug(RIG_DEBUG_TRACE, "%s: requested freq = %d Hz\n", __func__, (int)rit); /* * Copy native cmd freq_set to private cmd storage area */ - memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_XIT_ON].nseq, YAESU_CMD_LENGTH); + memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_RXIT_SET].nseq, YAESU_CMD_LENGTH); + + if (rit < 0) + { + direction = 0xff; + rit = -rit; + } + + unsigned char rit_freq[10]; + + // yes, it really is this nasty and complicated! + + to_bcd_be(rit_freq, (rit - (rit / 1000) * 1000) / 10, 2); + priv->p_cmd[0] = rit_freq[0]; // 10 hz - to_bcd(priv->p_cmd, labs(xit) / 10, 4); /* store bcd format in in p_cmd */ - priv->p_cmd[2] = xit >= 0 ? 0x00 : 0xff; + to_bcd_be(rit_freq, rit / 1000, 2); + priv->p_cmd[1] = rit_freq[0]; // Khz + + priv->p_cmd[2] = direction; cmd = priv->p_cmd; /* get native sequence */ write_block(&rs->rigport, (char *) cmd, YAESU_CMD_LENGTH); @@ -1282,42 +1338,22 @@ int ft1000mp_set_xit(RIG *rig, vfo_t vfo, shortfreq_t xit) /* - * Return XIT for a given VFO + * Return RIT for a given VFO * */ -int ft1000mp_get_xit(RIG *rig, vfo_t vfo, shortfreq_t *xit) +int ft1000mp_get_rxit(RIG *rig, vfo_t vfo, shortfreq_t *rit) { struct ft1000mp_priv_data *priv; unsigned char *p; shortfreq_t f; - int cmd_index, len, retval; + int retval; rig_debug(RIG_DEBUG_VERBOSE, "%s: called\n", __func__); priv = (struct ft1000mp_priv_data *)rig->state.priv; - if (vfo == RIG_VFO_CURR) - { - vfo = rig->state.current_vfo; - } - - if (vfo == RIG_VFO_A || vfo == RIG_VFO_B) - { - cmd_index = FT1000MP_NATIVE_VFO_UPDATE; - len = 2 * FT1000MP_STATUS_UPDATE_LENGTH; - } - else - { - /* RIG_VFO_CURR or RIG_VFO_MEM */ - cmd_index = FT1000MP_NATIVE_CURR_VFO_UPDATE; - len = FT1000MP_STATUS_UPDATE_LENGTH; - } - - /* - * get record from rig - */ - retval = ft1000mp_get_update_data(rig, cmd_index, len); + retval = ft1000mp_get_vfo_data(rig, vfo); if (retval < 0) { @@ -1333,14 +1369,12 @@ int ft1000mp_get_xit(RIG *rig, vfo_t vfo, shortfreq_t *xit) p = &priv->update_data[FT1000MP_SUMO_VFO_A_CLAR]; /* CURR_VFO has VFOA offset */ } - /* big endian integer, kinda */ + f = (p[0] << 8) + p[1]; + if (p[0] & 0x80) { - f = (p[0] << 8) + p[1] - 65536; - } - else - { - f = (p[0] << 8) + p[1]; + f = ~(f - 1) & 0x7fff; // two's complement + f = -f; } f = f * 10 / 16; @@ -1348,11 +1382,12 @@ int ft1000mp_get_xit(RIG *rig, vfo_t vfo, shortfreq_t *xit) rig_debug(RIG_DEBUG_TRACE, "%s: freq = %d Hz for VFO [%s]\n", __func__, (int)f, rig_strvfo(vfo)); - *xit = f; /* return displayed frequency */ + *rit = f; /* return displayed frequency */ return RIG_OK; } + int ft1000mp_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { struct ft1000mp_priv_data *priv; diff --git a/rigs/yaesu/ft1000mp.h b/rigs/yaesu/ft1000mp.h index e74dd90a..d85d2883 100644 --- a/rigs/yaesu/ft1000mp.h +++ b/rigs/yaesu/ft1000mp.h @@ -25,6 +25,8 @@ #ifndef _FT1000MP_H #define _FT1000MP_H 1 +//#include "rig.h" + #define FT1000MP_STATUS_FLAGS_LENGTH 5 /* 0xfa return size */ #define FT1000MP_STATUS_UPDATE_LENGTH 16 /* 0x10 U = 02 return size */ @@ -66,53 +68,55 @@ * */ -enum ft1000mp_native_cmd_e { - FT1000MP_NATIVE_SPLIT_OFF = 0, - FT1000MP_NATIVE_SPLIT_ON, - FT1000MP_NATIVE_RECALL_MEM, - FT1000MP_NATIVE_VFO_TO_MEM, - FT1000MP_NATIVE_VFO_A, - FT1000MP_NATIVE_VFO_B, - FT1000MP_NATIVE_M_TO_VFO, - FT1000MP_NATIVE_RIT_ON, - FT1000MP_NATIVE_RIT_OFF, - FT1000MP_NATIVE_XIT_ON, - FT1000MP_NATIVE_XIT_OFF, - FT1000MP_NATIVE_FREQA_SET, - FT1000MP_NATIVE_FREQB_SET, - FT1000MP_NATIVE_MODE_SET_LSB, - FT1000MP_NATIVE_MODE_SET_USB, - FT1000MP_NATIVE_MODE_SET_CW, - FT1000MP_NATIVE_MODE_SET_CWR, - FT1000MP_NATIVE_MODE_SET_AM, - FT1000MP_NATIVE_MODE_SET_AMS, - FT1000MP_NATIVE_MODE_SET_FM, - FT1000MP_NATIVE_MODE_SET_FMW, - FT1000MP_NATIVE_MODE_SET_RTTY_LSB, - FT1000MP_NATIVE_MODE_SET_RTTY_USB, - FT1000MP_NATIVE_MODE_SET_DATA_LSB, - FT1000MP_NATIVE_MODE_SET_DATA_FM, - FT1000MP_NATIVE_MODE_SET_LSB_B, - FT1000MP_NATIVE_MODE_SET_USB_B, - FT1000MP_NATIVE_MODE_SET_CW_B, - FT1000MP_NATIVE_MODE_SET_CWR_B, - FT1000MP_NATIVE_MODE_SET_AM_B, - FT1000MP_NATIVE_MODE_SET_AMS_B, - FT1000MP_NATIVE_MODE_SET_FM_B, - FT1000MP_NATIVE_MODE_SET_FMW_B, - FT1000MP_NATIVE_MODE_SET_RTTY_LSB_B, - FT1000MP_NATIVE_MODE_SET_RTTY_USB_B, - FT1000MP_NATIVE_MODE_SET_DATA_LSB_B, - FT1000MP_NATIVE_MODE_SET_DATA_FM_B, - FT1000MP_NATIVE_PACING, - FT1000MP_NATIVE_PTT_OFF, - FT1000MP_NATIVE_PTT_ON, - FT1000MP_NATIVE_VFO_UPDATE, - FT1000MP_NATIVE_CURR_VFO_UPDATE, - FT1000MP_NATIVE_UPDATE, - FT1000MP_NATIVE_AB, - FT1000MP_NATIVE_SIZE /* end marker, value indicates number of */ - /* native cmd entries */ +enum ft1000mp_native_cmd_e +{ + FT1000MP_NATIVE_SPLIT_OFF = 0, + FT1000MP_NATIVE_SPLIT_ON, + FT1000MP_NATIVE_RECALL_MEM, + FT1000MP_NATIVE_VFO_TO_MEM, + FT1000MP_NATIVE_VFO_A, + FT1000MP_NATIVE_VFO_B, + FT1000MP_NATIVE_M_TO_VFO, + FT1000MP_NATIVE_RIT_ON, + FT1000MP_NATIVE_RIT_OFF, + FT1000MP_NATIVE_XIT_ON, + FT1000MP_NATIVE_XIT_OFF, + FT1000MP_NATIVE_RXIT_SET, + FT1000MP_NATIVE_FREQA_SET, + FT1000MP_NATIVE_FREQB_SET, + FT1000MP_NATIVE_MODE_SET_LSB, + FT1000MP_NATIVE_MODE_SET_USB, + FT1000MP_NATIVE_MODE_SET_CW, + FT1000MP_NATIVE_MODE_SET_CWR, + FT1000MP_NATIVE_MODE_SET_AM, + FT1000MP_NATIVE_MODE_SET_AMS, + FT1000MP_NATIVE_MODE_SET_FM, + FT1000MP_NATIVE_MODE_SET_FMW, + FT1000MP_NATIVE_MODE_SET_RTTY_LSB, + FT1000MP_NATIVE_MODE_SET_RTTY_USB, + FT1000MP_NATIVE_MODE_SET_DATA_LSB, + FT1000MP_NATIVE_MODE_SET_DATA_FM, + FT1000MP_NATIVE_MODE_SET_LSB_B, + FT1000MP_NATIVE_MODE_SET_USB_B, + FT1000MP_NATIVE_MODE_SET_CW_B, + FT1000MP_NATIVE_MODE_SET_CWR_B, + FT1000MP_NATIVE_MODE_SET_AM_B, + FT1000MP_NATIVE_MODE_SET_AMS_B, + FT1000MP_NATIVE_MODE_SET_FM_B, + FT1000MP_NATIVE_MODE_SET_FMW_B, + FT1000MP_NATIVE_MODE_SET_RTTY_LSB_B, + FT1000MP_NATIVE_MODE_SET_RTTY_USB_B, + FT1000MP_NATIVE_MODE_SET_DATA_LSB_B, + FT1000MP_NATIVE_MODE_SET_DATA_FM_B, + FT1000MP_NATIVE_PACING, + FT1000MP_NATIVE_PTT_OFF, + FT1000MP_NATIVE_PTT_ON, + FT1000MP_NATIVE_VFO_UPDATE, + FT1000MP_NATIVE_CURR_VFO_UPDATE, + FT1000MP_NATIVE_UPDATE, + FT1000MP_NATIVE_AB, + FT1000MP_NATIVE_SIZE /* end marker, value indicates number of */ + /* native cmd entries */ }; @@ -124,18 +128,21 @@ typedef enum ft1000mp_native_cmd_e ft1000mp_native_cmd_t; * */ -#define MODE_SET_LSB 0x00 -#define MODE_SET_USB 0x01 -#define MODE_SET_CW 0x02 -#define MODE_SET_CWR 0x03 -#define MODE_SET_AM 0x04 -#define MODE_SET_AMS 0x05 -#define MODE_SET_FM 0x06 -#define MODE_SET_FMW 0x07 /* what width is that? */ -#define MODE_SET_RTTYL 0x08 -#define MODE_SET_RTTYU 0x09 -#define MODE_SET_PKTL 0x0a -#define MODE_SET_PKTF 0x0b +#define MODE_SET_LSB 0x00 +#define MODE_SET_USB 0x01 +#define MODE_SET_CW 0x02 +#define MODE_SET_CWR 0x03 +#define MODE_SET_AM 0x04 +#define MODE_SET_AMS 0x05 +#define MODE_SET_FM 0x06 +#define MODE_SET_FMW 0x07 /* what width is that? */ +#define MODE_SET_RTTYL 0x08 +#define MODE_SET_RTTYU 0x09 +#define MODE_SET_PKTL 0x0a +#define MODE_SET_PKTF 0x0b + + + /* @@ -196,6 +203,8 @@ typedef enum ft1000mp_native_cmd_e ft1000mp_native_cmd_t; #define FT1000MP_SUMO_VFO_B_MODE 0x17 #define FT1000MP_SUMO_VFO_A_IF 0x08 #define FT1000MP_SUMO_VFO_B_IF 0x18 +#define FT1000MP_SUMO_VFO_A_MEM 0x09 +#define FT1000MP_SUMO_VFO_B_MEM 0x19 /* mask extra mode bit from IF Filter status byte in VFO status block */ @@ -220,18 +229,24 @@ int ft1000mp_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq); int ft1000mp_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo); int ft1000mp_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo); -int ft1000mp_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); /* select mode */ -int ft1000mp_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); /* get mode */ +int ft1000mp_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, + pbwidth_t width); /* select mode */ +int ft1000mp_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, + pbwidth_t *width); /* get mode */ int ft1000mp_set_vfo(RIG *rig, vfo_t vfo); /* select vfo */ int ft1000mp_get_vfo(RIG *rig, vfo_t *vfo); /* get vfo */ int ft1000mp_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit); -int ft1000mp_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit); -int ft1000mp_set_xit(RIG *rig, vfo_t vfo, shortfreq_t xit); -int ft1000mp_get_xit(RIG *rig, vfo_t vfo, shortfreq_t *xit); +int ft1000mp_set_xit(RIG *rig, vfo_t vfo, shortfreq_t rit); +int ft1000mp_set_rxit(RIG *rig, vfo_t vfo, shortfreq_t rit); +int ft1000mp_get_rxit(RIG *rig, vfo_t vfo, shortfreq_t *rit); int ft1000mp_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); int ft1000mp_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); +int ft1000mp_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); +int ft1000mp_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status); + + #endif /* _FT1000MP_H */ commit 54106100459c4cd3ce82761d545929c331a25122 Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Jul 29 16:07:06 2020 -0500 Fix RFPOWER scale for FT991 https://github.com/Hamlib/Hamlib/issues/354 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 365bc513..fec6f63a 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -3349,6 +3349,7 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) scale = newcat_is_rig(rig, RIG_MODEL_FT891) ? 100. : scale ; scale = newcat_is_rig(rig, RIG_MODEL_FT950) ? 100. : scale ; scale = newcat_is_rig(rig, RIG_MODEL_FT1200) ? 100. : scale ; + scale = newcat_is_rig(rig, RIG_MODEL_FT991) ? 100. : scale ; val->f = (float)atoi(retlvl) / scale; break; commit 8aa5126650b7d649347a6897b7ab0141b2ecff2d Author: Michael Black W9MDB <mdb...@ya...> Date: Wed Jul 29 16:03:54 2020 -0500 Add first cut of SWR conversion for Yaesu rigs https://github.com/Hamlib/Hamlib/issues/354 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 0ec2f0ed..365bc513 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -40,6 +40,7 @@ #include "iofunc.h" #include "serial.h" #include "misc.h" +#include "cal.h" #include "newcat.h" /* global variables */ @@ -93,6 +94,19 @@ typedef struct _yaesu_newcat_commands ncboolean ft101; } yaesu_newcat_commands_t; +const cal_table_float_t yaesu_default_swr_cal = +{ + 4, + { // first cut at generic Yaesu table, need more points probably + // based on testing by Adam M7OTP on FT-991 + {12, 1.0f}, + {39, 1.35f}, + {89, 2.0f}, + {242, 5.0f} + } +}; + + // Easy reference to rig model -- it is set in newcat_valid_command static ncboolean is_ft450; static ncboolean is_ft891; @@ -3346,11 +3360,20 @@ int newcat_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) val->f = (float)atoi(retlvl) / scale; break; + case RIG_LEVEL_SWR: + if (rig->caps->swr_cal.size == 0) + { + val->f = rig_raw2val_float(atoi(retlvl), &yaesu_default_swr_cal); + } + else + { + val->f = rig_raw2val_float(atoi(retlvl), &rig->caps->swr_cal); + } + break; case RIG_LEVEL_AF: case RIG_LEVEL_MICGAIN: case RIG_LEVEL_RF: case RIG_LEVEL_SQL: - case RIG_LEVEL_SWR: case RIG_LEVEL_ALC: val->f = (float)atoi(retlvl) / 255.; break; diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index eebe7ca3..eaf80169 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20200614" +#define NEWCAT_VER "20200729" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 commit 23d4cc73dc3723d6f688f6eaa8c54ed0d8a83bf9 Author: Michael Black W9MDB <mdb...@ya...> Date: Tue Jul 28 06:51:50 2020 -0500 Adding codeql build for github security analysis diff --git a/.github/codeql-analysis.yml b/.github/codeql-analysis.yml new file mode 100644 index 00000000..9b72a599 --- /dev/null +++ b/.github/codeql-analysis.yml @@ -0,0 +1,55 @@ +name: "CodeQL" + +on: + push: + branches: [master, ] + pull_request: + # The branches below must be a subset of the branches above + branches: [master] + schedule: + - cron: '0 5 * * 2' + +jobs: + analyse: + name: Analyse + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + # We must fetch at least the immediate parents so that if this is + # a pull request then we can checkout the head. + fetch-depth: 2 + + # If this run was triggered by a pull request event, then checkout + # the head of the pull request instead of the merge commit. + - run: git checkout HEAD^2 + if: ${{ github.event_name == 'pull_request' }} + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + # Override language selection by uncommenting this and choosing your languages + # with: + # languages: go, javascript, csharp, python, cpp, java + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + #- name: Autobuild + # uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + - run: | + ./bootstrap + ./configure + make + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 commit 9d64f642ce8e030cc9b18fb77a3c7003e8853152 Author: Michael Black W9MDB <mdb...@ya...> Date: Mon Jul 27 12:54:37 2020 -0500 Fix FT1000MP set_rit -- helps if one reads the manual https://github.com/Hamlib/Hamlib/issues/353 diff --git a/rigs/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c index 6a60f38a..c1b54442 100644 --- a/rigs/yaesu/ft1000mp.c +++ b/rigs/yaesu/ft1000mp.c @@ -216,7 +216,7 @@ const struct rig_caps ft1000mp_caps = RIG_MODEL(RIG_MODEL_FT1000MP), .model_name = "FT-1000MP", .mfg_name = "Yaesu", - .version = "20200716.0", + .version = "20200727.0", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1170,10 +1170,8 @@ int ft1000mp_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit) */ memcpy(&priv->p_cmd, &ncmd[FT1000MP_NATIVE_RIT_ON].nseq, YAESU_CMD_LENGTH); - // scaled 2's complement - rit = ((~(rit*16/10))&0xffff)+1; - priv->p_cmd[0] = rit>>8; - priv->p_cmd[1] = rit&0xff; + to_bcd(priv->p_cmd, labs(rit) / 10, 4); /* store bcd format in in p_cmd */ + priv->p_cmd[2] = rit >= 0 ? 0x00 : 0xff; cmd = priv->p_cmd; /* get native sequence */ write_block(&rs->rigport, (char *) cmd, YAESU_CMD_LENGTH); @@ -1238,7 +1236,7 @@ int ft1000mp_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit) if (p[0] & 0x80) { - f = ~(f - 1) & 0x7fff; // two's complement + f = (~(f - 1) & 0x7fff) * -1; // two's complement } f = f * 10 / 16; ----------------------------------------------------------------------- Summary of changes: .github/codeql-analysis.yml | 55 +++++++ rigs/yaesu/ft1000mp.c | 341 ++++++++++++++++++++++++-------------------- rigs/yaesu/ft1000mp.h | 143 ++++++++++--------- rigs/yaesu/newcat.c | 26 +++- rigs/yaesu/newcat.h | 2 +- 5 files changed, 347 insertions(+), 220 deletions(-) create mode 100644 .github/codeql-analysis.yml hooks/post-receive -- Hamlib -- Ham radio control libraries |