[Hamlib-commits] Hamlib -- Ham radio control libraries branch Hamlib-4.5.3 created. 4.5.2-15-g08461
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2022-12-31 20:36:34
|
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, Hamlib-4.5.3 has been created at 084617dbb9686c4f72014ce78b75f87001f18c99 (commit) - Log ----------------------------------------------------------------- commit 084617dbb9686c4f72014ce78b75f87001f18c99 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Dec 31 09:34:29 2022 -0600 Update NEWS diff --git a/NEWS b/NEWS index 81605135..55d6b54b 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,7 @@ Version 4.6 * Fix FTDX3000 rig split Version 4.5.3 + * Fix serial.c for hardware flow control on Linux and MacOSy * Add QRPLabs QCX/QDX rig -- not quite a TS480 * Fix QRP QRDX firmware bugs in IF message so PTT works now * FTDX5000 will now remember startup front/read settings and restore it commit 6643d44ed9963c387fbeaaa155f69ca096335c7a Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Dec 31 09:30:25 2022 -0600 Remove set_rts and set_dtr low from serial.c This was causing hardward flow control to fail on Linux and MacOS https://github.com/Hamlib/Hamlib/issues/1198 https://github.com/Hamlib/Hamlib/issues/1199 diff --git a/src/serial.c b/src/serial.c index 378117ee..a22aed95 100644 --- a/src/serial.c +++ b/src/serial.c @@ -290,8 +290,10 @@ int HAMLIB_API serial_setup(hamlib_port_t *rp) fd = rp->fd; // Linux sets pins high so we force them low once - ser_set_rts(rp, 0); - ser_set_dtr(rp, 0); + // This fails on Linux and MacOS with hardware flow control + // Seems setting low disables hardware flow setting later +// ser_set_rts(rp, 0); +// ser_set_dtr(rp, 0); /* * Get the current options for the port... commit 1f332d733347eaa5bddceabd315b1848346e05f6 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Dec 31 08:10:06 2022 -0600 Update NEWS diff --git a/NEWS b/NEWS index d4f6fee1..81605135 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,7 @@ Version 4.6 * Fix FTDX3000 rig split Version 4.5.3 + * Add QRPLabs QCX/QDX rig -- not quite a TS480 * Fix QRP QRDX firmware bugs in IF message so PTT works now * FTDX5000 will now remember startup front/read settings and restore it * Fix FTDX5000 write_delay with microham commit 85c4f730619968fd7b4e34f54076bb2cf949b010 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Dec 30 16:04:39 2022 -0600 Add QRPLabs QCX/QDX for better behavior/capability from ts480 entry diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index a6843224..c5b56fc2 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -185,6 +185,7 @@ #define RIG_MODEL_MALACHITE RIG_MAKE_MODEL(RIG_KENWOOD, 49) #define RIG_MODEL_LAB599_TX500 RIG_MAKE_MODEL(RIG_KENWOOD,50) #define RIG_MODEL_SDRUNO RIG_MAKE_MODEL(RIG_KENWOOD,51) +#define RIG_MODEL_QRPLABS RIG_MAKE_MODEL(RIG_KENWOOD,52) /* * Icom diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 055bb3e1..223adfae 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -5774,6 +5774,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&malachite_caps); rig_register(&tx500_caps); rig_register(&sdruno_caps); + rig_register(&qrplabs_caps); return (RIG_OK); } diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index e7278771..4787ae93 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -29,7 +29,7 @@ #include "misc.h" #include "idx_builtin.h" -#define BACKEND_VER "20221128" +#define BACKEND_VER "20221230" #define EOM_KEN ';' #define EOM_TH '\r' @@ -110,6 +110,7 @@ extern struct confparams kenwood_cfg_params[]; #define RIG_IS_PT8000A (rig->caps->rig_model == RIG_MODEL_PT8000A) #define RIG_IS_POWERSDR (rig->caps->rig_model == RIG_MODEL_POWERSDR) #define RIG_IS_MALACHITE (rig->caps->rig_model == RIG_MODEL_MALACHITE) +#define RIG_IS_QRPLABS (rig->caps->rig_model == RIG_MODEL_QRPLABS) struct kenwood_filter_width { @@ -311,6 +312,7 @@ extern const struct rig_caps pt8000a_caps; extern const struct rig_caps malachite_caps; extern const struct rig_caps tx500_caps; extern const struct rig_caps sdruno_caps; +extern const struct rig_caps qrplabs_caps; /* use when not interested in the answer, but want to check its len */ static int inline kenwood_simple_transaction(RIG *rig, const char *cmd, diff --git a/rigs/kenwood/ts480.c b/rigs/kenwood/ts480.c index 880221b1..1d4fb807 100644 --- a/rigs/kenwood/ts480.c +++ b/rigs/kenwood/ts480.c @@ -1448,6 +1448,198 @@ const struct rig_caps ts480_caps = .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS }; +/* + * QRPLabs TS-480 emulation rig capabilities + * Notice that some rigs share the same functions. + */ +const struct rig_caps qrplabs_caps = +{ + RIG_MODEL(RIG_MODEL_QRPLABS), + .model_name = "QCX/QDX", + .mfg_name = "QRPLabs", + .version = BACKEND_VER ".0", + .copyright = "LGPL", + .status = RIG_STATUS_STABLE, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG, + .dcd_type = RIG_DCD_RIG, + .port_type = RIG_PORT_SERIAL, + .serial_rate_min = 4800, + .serial_rate_max = 115200, + .serial_data_bits = 8, + .serial_stop_bits = 1, + .serial_parity = RIG_PARITY_NONE, + .serial_handshake = RIG_HANDSHAKE_NONE, + .write_delay = 0, + .post_write_delay = 0, + .timeout = 500, + .retry = 3, + .preamp = {12, RIG_DBLST_END,}, + .attenuator = {12, RIG_DBLST_END,}, + .max_rit = kHz(9.99), + .max_xit = kHz(9.99), + .max_ifshift = Hz(0), + .targetable_vfo = RIG_TARGETABLE_FREQ, + .transceive = RIG_TRN_RIG, + .agc_level_count = 3, + .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_SLOW }, + + .rx_range_list1 = { + {kHz(100), Hz(59999999), TS480_ALL_MODES, -1, -1, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 1 */ + .tx_range_list1 = { + {kHz(1810), kHz(1850), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */ + {kHz(1810), kHz(1850), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */ + {kHz(3500), kHz(3800), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(3500), kHz(3800), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(7), kHz(7200), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(7), kHz(7200), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 1 */ + .rx_range_list2 = { + {kHz(100), Hz(59999999), TS480_ALL_MODES, -1, -1, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Receive frequency range list for ITU region 2 */ + .tx_range_list2 = { + {kHz(1800), MHz(2) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, /* 100W class */ + {kHz(1800), MHz(2) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, /* 25W class */ + {kHz(3500), MHz(4) - 1, TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(3500), MHz(4) - 1, TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(5250), kHz(5450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(5250), kHz(5450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(7), kHz(7300), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(7), kHz(7300), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(10100), kHz(10150), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(14), kHz(14350), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(18068), kHz(18168), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(21), kHz(21450), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {kHz(24890), kHz(24990), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(28), kHz(29700), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_OTHER_TX_MODES, 5000, 100000, TS480_VFO}, + {MHz(50), kHz(52000), TS480_AM_TX_MODES, 5000, 25000, TS480_VFO}, + RIG_FRNG_END, + }, /*!< Transmit frequency range list for ITU region 2 */ + .tuning_steps = { + {TS480_ALL_MODES, kHz(1)}, + {TS480_ALL_MODES, Hz(2500)}, + {TS480_ALL_MODES, kHz(5)}, + {TS480_ALL_MODES, Hz(6250)}, + {TS480_ALL_MODES, kHz(10)}, + {TS480_ALL_MODES, Hz(12500)}, + {TS480_ALL_MODES, kHz(15)}, + {TS480_ALL_MODES, kHz(20)}, + {TS480_ALL_MODES, kHz(25)}, + {TS480_ALL_MODES, kHz(30)}, + {TS480_ALL_MODES, kHz(100)}, + {TS480_ALL_MODES, kHz(500)}, + {TS480_ALL_MODES, MHz(1)}, + {TS480_ALL_MODES, 0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.4)}, + {RIG_MODE_SSB, Hz(270)}, + {RIG_MODE_SSB, Hz(500)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(200)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(50)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(1000)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(80)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(100)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(150)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(300)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(400)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(600)}, + {RIG_MODE_CW | RIG_MODE_CWR, Hz(2000)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1000)}, + {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(1500)}, + {RIG_MODE_AM, kHz(6)}, + {RIG_MODE_AM, kHz(2.4)}, + {RIG_MODE_FM, kHz(12)}, + RIG_FLT_END, + }, + .vfo_ops = TS480_VFO_OPS, + .level_gran = + { +#include "level_gran_kenwood.h" + [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, + [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 30 }, .step = { .i = 1 } }, + [LVL_KEYSPD] = {.min = {.i = 10}, .max = {.i = 60}, .step = {.i = 1}}, + [LVL_CWPITCH] = {.min = {.i = 400}, .max = {.i = 1000}, .step = {.i = 50}}, + [LVL_BKIN_DLYMS] = {.min = {.i = 0}, .max = {.i = 1000}, .step = {.i = 50}}, + [LVL_SLOPE_LOW] = {.min = {.i = 0}, .max = {.i = 2400}, .step = {.i = 10}}, + [LVL_SLOPE_HIGH] = {.min = {.i = 0}, .max = {.i = 5000}, .step = {.i = 10}}, + }, + .str_cal = TS480_STR_CAL, + .swr_cal = TS480_SWR_CAL, + + .ext_tokens = ts480_ext_tokens, + .extfuncs = ts480_ext_funcs, + .extlevels = ts480_ext_levels, + + .priv = (void *)& ts480_priv_caps, + .rig_init = ts480_init, + .rig_open = kenwood_open, + .rig_cleanup = kenwood_cleanup, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = ts480_set_rit, + .get_rit = ts480_get_rit, + .set_xit = ts480_set_rit, + .get_xit = ts480_get_rit, + .set_mode = kenwood_set_mode, + .get_mode = kenwood_get_mode, + .set_vfo = kenwood_set_vfo, + .get_vfo = kenwood_get_vfo_if, + .set_split_vfo = kenwood_set_split_vfo, + .get_split_vfo = kenwood_get_split_vfo_if, + .get_ptt = kenwood_get_ptt, + .set_ptt = kenwood_set_ptt, + .get_dcd = kenwood_get_dcd, + .get_info = kenwood_ts480_get_info, + .reset = kenwood_reset, + .has_set_level = TS480_LEVEL_SET, + .has_get_level = TS480_LEVEL_GET, + .set_level = kenwood_ts480_set_level, + .get_level = kenwood_ts480_get_level, + .set_ext_level = ts480_set_ext_level, + .get_ext_level = ts480_get_ext_level, + .has_get_func = TS480_FUNC_ALL, + .has_set_func = TS480_FUNC_ALL, + .set_func = ts480_set_func, + .get_func = ts480_get_func, + .set_ext_func = ts480_set_ext_func, + .get_ext_func = ts480_get_ext_func, + .send_morse = kenwood_send_morse, + .wait_morse = rig_wait_morse, + .vfo_op = kenwood_vfo_op, + .hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS +}; + /* * Hilberling PS8000A TS480 emulation * Notice that some rigs share the same functions. commit 96c8278d3b9f47b4a38a23f7d4b39d376dd6a08d Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Dec 30 09:37:50 2022 -0600 Update NEWS diff --git a/NEWS b/NEWS index e3da9970..d4f6fee1 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,8 @@ Version 4.6 * Fix FTDX3000 rig split Version 4.5.3 + * Fix QRP QRDX firmware bugs in IF message so PTT works now + * FTDX5000 will now remember startup front/read settings and restore it * Fix FTDX5000 write_delay with microham * Fix grep error on MingW build commit 7898baf6ed162f4c5dbe721a32f697b71f32a782 Author: Mike Black W9MDB <mdb...@ya...> Date: Thu Dec 29 11:36:50 2022 -0600 Allow for 36 and 37 byte IF lengths for ic10.c This should fix QRP QRDX buggy IF message -- hopefully the fix theirs to send 33 bytes. https://github.com/Hamlib/Hamlib/issues/1196#issuecomment-1367473810 diff --git a/rigs/kenwood/ic10.c b/rigs/kenwood/ic10.c index 73cd64e6..d89e7882 100644 --- a/rigs/kenwood/ic10.c +++ b/rigs/kenwood/ic10.c @@ -532,7 +532,7 @@ int ic10_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) { struct kenwood_priv_caps *priv = (struct kenwood_priv_caps *)rig->caps->priv; char infobuf[50]; - int retval, iflen; + int retval, iflen, offset; retval = get_ic10_if(rig, infobuf); @@ -546,8 +546,15 @@ int ic10_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) /* IFggmmmkkkhhh snnnzrx yytdfcp */ /* IFggmmmkkkhhhxxxxxrrrrrssxcctmfcp */ - - *ptt = infobuf[iflen - 5] == '0' ? RIG_PTT_OFF : RIG_PTT_ON; + /* IFggmmmkkkhhhxxxxxrrrrrssxcctmfcp#### what should be if p13/p14/p15 included */ + /* IF00014074000 +00000000003000000 ; QRP QDX bad IF command -- 36 bytes instead of 33 */ + /* QRP QDX should be 37 bytes but used only 1 byte for p14 instead of 2 bytes */ + /* 12345678901234567890123456789012345678 */ + offset = 5; + if (iflen == 36) offset = 8; // QRP QDX gets completely bogus length + else if (iflen == 37) offset = 9; // just incase somebody does this add p13/p14x2/p15 + + *ptt = infobuf[iflen - offset] == '0' ? RIG_PTT_OFF : RIG_PTT_ON; return RIG_OK; } commit 4f8c9b1f497df7fa1331ddf8b8424fa9309c63de Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Dec 28 16:36:59 2022 -0600 astyle newcat.c diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index c782afa1..bf219832 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -637,11 +637,13 @@ int newcat_open(RIG *rig) SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX103;"); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); err = newcat_get_cmd(rig); + if (RIG_OK != (err = newcat_get_cmd(rig))) { RETURNFUNC(err); } - if (priv->ret_data[6] == ';') priv->front_rear_status = priv->ret_data[5]; + + if (priv->ret_data[6] == ';') { priv->front_rear_status = priv->ret_data[5]; } } RETURNFUNC(RIG_OK); @@ -678,7 +680,8 @@ int newcat_close(RIG *rig) if (is_ftdx5000) { // Restore EX103 status - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX103%c;", priv->front_rear_status); + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX103%c;", + priv->front_rear_status); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); newcat_set_cmd(rig); // don't care about the return } @@ -1770,6 +1773,7 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) switch (ptt) { case RIG_PTT_ON_MIC: + /* Build the command string */ // the FTDX5000 uses menu 103 for front/rear audio in USB mode if (is_ftdx5000) @@ -1779,12 +1783,14 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); newcat_set_cmd(rig); // don't care about the return } + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); err = newcat_set_cmd(rig); break; case RIG_PTT_ON_DATA: + /* Build the command string */ // the FTDX5000 uses menu 103 for front/rear audio in USB mode if (is_ftdx5000) @@ -1794,6 +1800,7 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); newcat_set_cmd(rig); // don't care about the return } + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); err = newcat_set_cmd(rig); commit 43e46d49c5ec10f28b97aaddf9c3b6ef2c98e703 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Dec 28 16:34:32 2022 -0600 FTDX5000 will now remember startup front/rear setting and restore it Will also allow front/rear selection in WSJT-X/JTDX https://github.com/Hamlib/Hamlib/issues/1195 diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c index 06ac95eb..70aa44df 100644 --- a/rigs/yaesu/ft5000.c +++ b/rigs/yaesu/ft5000.c @@ -51,7 +51,7 @@ const struct newcat_priv_caps ftdx5000_priv_caps = { .index = 8, .set_value = 0, .get_value = '6', .width = 3000, .optional = 0 }, { .index = 9, .set_value = 0, .get_value = '9', .width = 600, .optional = 0 }, { .index = 10, .set_value = 0, .get_value = 'A', .width = 300, .optional = 0 }, - } + }, }; const struct confparams ftdx5000_ext_levels[] = @@ -140,11 +140,11 @@ const struct rig_caps ftdx5000_caps = RIG_MODEL(RIG_MODEL_FTDX5000), .model_name = "FTDX-5000", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".8", + .version = NEWCAT_VER ".9", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, + .ptt_type = RIG_PTT_RIG_MICDATA, .dcd_type = RIG_DCD_NONE, .port_type = RIG_PORT_SERIAL, .serial_rate_min = 4800, /* Default rate per manual */ diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index c5f87e37..c782afa1 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -545,6 +545,7 @@ int newcat_open(RIG *rig) struct newcat_priv_data *priv = rig->state.priv; struct rig_state *rig_s = &rig->state; const char *handshake[3] = {"None", "Xon/Xoff", "Hardware"}; + int err; ENTERFUNC; @@ -600,7 +601,6 @@ int newcat_open(RIG *rig) || priv->rig_id == NC_RIGID_FTDX3000 || priv->rig_id == NC_RIGID_FTDX3000DM) { - int err; char *cmd = "EX0291;EX029;"; // FT2000/D if (priv->rig_id == NC_RIGID_FT950 || rig->caps->rig_model == RIG_MODEL_FT950) { cmd = "EX0271;EX027;"; } @@ -631,6 +631,19 @@ int newcat_open(RIG *rig) rig_debug(RIG_DEBUG_VERBOSE, "%s: disabling FTDX3000 band select\n", __func__); } + if (is_ftdx5000) + { + // Remember EX103 status + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX103;"); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + err = newcat_get_cmd(rig); + if (RIG_OK != (err = newcat_get_cmd(rig))) + { + RETURNFUNC(err); + } + if (priv->ret_data[6] == ';') priv->front_rear_status = priv->ret_data[5]; + } + RETURNFUNC(RIG_OK); } @@ -664,8 +677,8 @@ int newcat_close(RIG *rig) if (is_ftdx5000) { - // Ensure FT5000 is back to MIC input - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1030;"); + // Restore EX103 status + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX103%c;", priv->front_rear_status); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); newcat_set_cmd(rig); // don't care about the return } @@ -1757,13 +1770,21 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) switch (ptt) { case RIG_PTT_ON_MIC: + /* Build the command string */ + // the FTDX5000 uses menu 103 for front/rear audio in USB mode + if (is_ftdx5000) + { + // Ensure FT5000 is back to MIC input + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1030;"); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + newcat_set_cmd(rig); // don't care about the return + } + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + err = newcat_set_cmd(rig); break; case RIG_PTT_ON_DATA: - break; - - case RIG_PTT_ON: - /* Build the command string */ // the FTDX5000 uses menu 103 for front/rear audio in USB mode if (is_ftdx5000) @@ -1776,6 +1797,12 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); err = newcat_set_cmd(rig); + break; + + case RIG_PTT_ON: + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + err = newcat_set_cmd(rig); break; diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 11051545..914c535f 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -128,6 +128,7 @@ struct newcat_priv_data char last_if_response[NEWCAT_DATA_LEN]; int poweron; /* to prevent powering on more than once */ int question_mark_response_means_rejected; /* the question mark response has multiple meanings */ + char front_rear_status; /* e.g. FTDX5000 EX103 status */ }; /* diff --git a/simulators/simftdx5000.c b/simulators/simftdx5000.c index 4b435257..e8ce7d1d 100644 --- a/simulators/simftdx5000.c +++ b/simulators/simftdx5000.c @@ -22,6 +22,7 @@ int ai = 0; int sh = 25; int na = 0; int ex039 = 0; +int ex103 = 0; // ID 0310 == 310, Must drop leading zero typedef enum nc_rigid_e @@ -316,6 +317,20 @@ int main(int argc, char *argv[]) { sscanf(buf, "EX039%d", &ex039); } + else if (strcmp(buf, "EX103;") == 0) + { + SNPRINTF(buf, sizeof(buf), "EX103%d;", ex103); + n = write(fd, buf, strlen(buf)); + } + else if (strncmp(buf, "EX103", 3) == 0) + { + sscanf(buf, "EX103%d", &ex103); + } + else if (strcmp(buf, "PS;") == 0) + { + SNPRINTF(buf, sizeof(buf), "PS1;"); + n = write(fd, buf, strlen(buf)); + } else if (strlen(buf) > 0) { fprintf(stderr, "Unknown command: %s\n", buf); commit ba079fe7f05306ef0a001048fecf2f6c65cb42a0 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Dec 28 14:27:05 2022 -0600 Make FT5000 EX1031;TX1; command two commands https://github.com/Hamlib/Hamlib/issues/1193 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 019f10e1..c5f87e37 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -1769,17 +1769,13 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) if (is_ftdx5000) { // Ensure FT5000 is back to MIC input - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1031;%s", txon); + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1031;"); rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); newcat_set_cmd(rig); // don't care about the return } - else - { - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); - rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); - err = newcat_set_cmd(rig); - } - + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + err = newcat_set_cmd(rig); break; commit 9ad6f24089d124a30efc2efec805c0a74a0670b4 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Dec 28 14:11:25 2022 -0600 Make sure FT5000 is in data mode for PTT request -- returns to MIC mode on shutdown https://github.com/Hamlib/Hamlib/issues/1193 diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 9bff762a..019f10e1 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -1741,7 +1741,7 @@ int newcat_get_vfo(RIG *rig, vfo_t *vfo) int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) { struct newcat_priv_data *priv = (struct newcat_priv_data *)rig->state.priv; - int err; + int err = -RIG_EPROTO; char txon[] = "TX1;"; char txoff[] = "TX0;"; @@ -1756,24 +1756,31 @@ int newcat_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) switch (ptt) { - // the FTDX5000 uses menu 103 for front/rear audio in USB mode case RIG_PTT_ON_MIC: - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1030;"); - rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); - err = newcat_set_cmd(rig); break; case RIG_PTT_ON_DATA: - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1031;"); - rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); - err = newcat_set_cmd(rig); break; case RIG_PTT_ON: + /* Build the command string */ - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); - rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); - err = newcat_set_cmd(rig); + // the FTDX5000 uses menu 103 for front/rear audio in USB mode + if (is_ftdx5000) + { + // Ensure FT5000 is back to MIC input + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "EX1031;%s", txon); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + newcat_set_cmd(rig); // don't care about the return + } + else + { + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "%s", txon); + rig_debug(RIG_DEBUG_TRACE, "%s: cmd_str = %s\n", __func__, priv->cmd_str); + err = newcat_set_cmd(rig); + } + + break; case RIG_PTT_OFF: diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index a0be7487..11051545 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20221223" +#define NEWCAT_VER "20221228" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129 commit 35946f5d6b96f6f5866d54d87281731e12389599 Author: Mike Black W9MDB <mdb...@ya...> Date: Wed Dec 28 12:41:39 2022 -0600 FT5000 cannot use RIG_PTT_ON_DATA/MIC menu 103 control and is now set for rear automatically too https://github.com/Hamlib/Hamlib/issues/1193 diff --git a/rigs/yaesu/ft5000.c b/rigs/yaesu/ft5000.c index cd1ebfb9..06ac95eb 100644 --- a/rigs/yaesu/ft5000.c +++ b/rigs/yaesu/ft5000.c @@ -140,11 +140,11 @@ const struct rig_caps ftdx5000_caps = RIG_MODEL(RIG_MODEL_FTDX5000), .model_name = "FTDX-5000", .mfg_name = "Yaesu", - .version = NEWCAT_VER ".7", + .version = NEWCAT_VER ".8", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG_MICDATA, + .ptt_type = RIG_PTT_RIG, .dcd_type = RIG_DCD_NONE, .port_type = RIG_PORT_SERIAL, .serial_rate_min = 4800, /* Default rate per manual */ commit fcffad9ff2df583d89f2bf60131dfc0d6bd9e85d Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Dec 26 10:25:06 2022 -0600 Update NEWS diff --git a/NEWS b/NEWS index 43c762c5..e3da9970 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,7 @@ Version 4.6 * Fix FTDX3000 rig split Version 4.5.3 + * Fix FTDX5000 write_delay with microham * Fix grep error on MingW build Version 4.5.2 commit a3fecb63a28b9519cf7ccd1885babdac008c87d6 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Dec 26 10:23:44 2022 -0600 Change FTDX5000 write_delay to zero -- was causing microham to return ?; to every command https://github.com/Hamlib/Hamlib/issues/1080 diff --git a/rigs/yaesu/ft5000.h b/rigs/yaesu/ft5000.h index cecd304f..becd0c14 100644 --- a/rigs/yaesu/ft5000.h +++ b/rigs/yaesu/ft5000.h @@ -141,7 +141,7 @@ /* Delay between bytes sent to FT-5000 * Should not exceed value set in CAT TOT menu (rig default is 10 mSec) */ -#define FTDX5000_WRITE_DELAY 1 +#define FTDX5000_WRITE_DELAY 0 /* Delay sequential fast writes */ commit 5b46a408f3ea193a4fffb66d70c82eff2fc5a102 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Dec 24 14:03:18 2022 -0600 Update NEWS diff --git a/NEWS b/NEWS index 6eba3a94..43c762c5 100644 --- a/NEWS +++ b/NEWS @@ -22,6 +22,9 @@ Version 4.6 * Add FLIR PTU-D48, E46, D100, D300 rotors * Fix FTDX3000 rig split +Version 4.5.3 + * Fix grep error on MingW build + Version 4.5.2 * 2022-12-23 * Fix PowerSDR ability to do commands while powered off commit 16e55b604707ec7f0222efb451d3c62f8d1824d9 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Dec 24 11:28:11 2022 -0600 Fix grep error on mingw build diff --git a/src/Makefile.am b/src/Makefile.am index fe4431de..751dc984 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -30,9 +30,10 @@ EXTRA_DIST = Android.mk hamlibdatetime.h.in # directory before the source directory for the hamlibdatetime.h # header. hamlibdatetime.h: FORCE + echo "#define HAMLIBDATETIME "\"$$(TZ=UTC git --git-dir=$(top_srcdir)/.git log --no-merges --date='format-local:%b %d %H:%M:%SZ %Y SHA=' --format='%cd' -n 1)$$(git --git-dir=$(top_srcdir)/.git log --no-merges -n 1 | cut -c8-13)\" @if test -x $(top_srcdir)/.git ; then \ echo "/* This date time is from the last non-merge commit to Hamlib. */" > $(builddir)/$(@F).tmp ;\ - echo "#define HAMLIBDATETIME "\"$$(TZ=UTC git --git-dir=$(top_srcdir)/.git log --no-merges --date='format-local:%a %b %d %H:%M:%S %Y %z SHA=' --format='%cd' -n 1)$$(git --git-dir=$(top_srcdir)/.git log --no-merges | grep commit | head -n 1 | cut -c8-13)\" >> $(builddir)/$(@F).tmp ;\ + echo "#define HAMLIBDATETIME "\"$$(TZ=UTC git --git-dir=$(top_srcdir)/.git log --no-merges --date='format-local:%b %d %H:%M:%SZ %Y SHA=' --format='%cd' -n 1)$$(git --git-dir=$(top_srcdir)/.git log --no-merges -n 1 | head -n 1 | cut -c8-13)\" >> $(builddir)/$(@F).tmp ;\ diff -qN $(builddir)/$(@F).tmp $(builddir)/$(@F) ; test $$? -eq 0 || { echo "Generating SCS header \"$(builddir)/$(@F)\"" ; mv -f $(builddir)/$(@F).tmp $(builddir)/$(@F) ; } ;\ rm -f $(builddir)/$(@F).tmp ;\ else \ ----------------------------------------------------------------------- hooks/post-receive -- Hamlib -- Ham radio control libraries |