diff --git a/NEWS b/NEWS index 4e28851a7..f04668579 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,7 @@ Version 5.x -- future * Change FT1000MP Mark V model names to align with FT1000MP Version 4.6 + * Yaesu rigs can now use send_morse to send keyer message 1-5 or a CW message up to 50 chars (which will use memory 1) * rig set level METER can now take SWR,COMP,ALC,IC/ID,DB,PO,VDD,TEMP arguments to set which meter to display * reg get level displays meter number=name now * Added parm BANDSELECT for Yaesu rigs diff --git a/doc/man1/rigctl.1 b/doc/man1/rigctl.1 index 80728ac0c..6937cb267 100644 --- a/doc/man1/rigctl.1 +++ b/doc/man1/rigctl.1 @@ -725,9 +725,10 @@ Option returned depends on rig..for Icom is likely the RX only flag. .BR b ", " send_morse " \(aq" \fIMorse\fP \(aq Send .RI \(aq Morse \(aq -symbols. For Yaesu rigs use memory#. +symbols. For Yaesu rigs use memory#1-5 or up to 50 char msg .EX Example from command line: rigctl -m 3073 -r /dev/ttyUSB0 b "CQ CQ DE ME" +Yaesu example to send message#1: rigctl -m 1035 -r /dev/ttyUSB0 b 1 . .TP .BR 0xbb ", " stop_morse " diff --git a/doc/man1/rigctld.1 b/doc/man1/rigctld.1 index 190556d16..c3491429a 100644 --- a/doc/man1/rigctld.1 +++ b/doc/man1/rigctld.1 @@ -725,9 +725,10 @@ number (\(oq0\(cq, \(oq1\(cq, \(oq2\(cq, ...). .BR b ", " send_morse " \(aq" \fIMorse\fP \(aq Send .RI \(aq Morse \(aq -ymbols. For Yaesu rigs use memory#. +symbols. For Yaesu rigs use memory# (1-5 for most rigs) or up to 50 char message (which will use memory#1) .EX Example from rigctld socket: b CQ CQ DE ME +Yaesu example to send message#1 frm rigctld socket: b 1 . .TP .BR 0xbb ", " stop_morse " diff --git a/rigs/yaesu/newcat.c b/rigs/yaesu/newcat.c index 59ba109c6..4cd8c8a45 100644 --- a/rigs/yaesu/newcat.c +++ b/rigs/yaesu/newcat.c @@ -6938,34 +6938,69 @@ int newcat_send_morse(RIG *rig, vfo_t vfo, const char *msg) ENTERFUNC; - int chan = 0; - if (strlen(msg)==1) + char chan = '1'; + + if (newcat_is_rig(rig, RIG_MODEL_FT450) && strlen(msg)==1 && msg[0] > '4') { - switch(*msg) + // 450 manual says 1/2/3 playback needs P1=6/7/8 + rig_debug(RIG_DEBUG_ERR, "%s: only messages 1-3 accepted\n", __func__); + RETURNFUNC(-RIG_EINVAL); + } + else + { + // 5-chan playback 6-A: FT-1200, FT-2000, FT-3000, FTDX-5000, FT-891, FT-9000, FT-950, FT-991, FTDX-101MP/D + // 5-chan but 1-5 playback: FT-710 + if (strlen(msg)==1 && (msg[0] < '1' || msg[0] > '5')) { - case 1: - case 2: - case 3: - case 4: - case 5: - chan = atoi(msg); + rig_debug(RIG_DEBUG_ERR, "%s: only messages 1-5 accepted\n", __func__); + RETURNFUNC(-RIG_EINVAL); + } + if (!newcat_is_rig(rig, RIG_MODEL_FT710)) + { + chan += 5; // 6,7,8 needed for playback + } + } + char *msg2 = strdup(msg); // copy so we can modify it if needed + + if (strlen(msg2)==1) + { + switch(*msg2) + { + // do all Yaeus rigs play back with chan+5? + case '1': msg2[0] = '6';break; + case '2': msg2[0] = '7';break; + case '3': msg2[0] = '8';break; + case '4': msg2[0] = '9';break; + case '5': msg2[0] = 'A';break; + case '6': // we'll let these pass + case '7': + case '8': + case '9': + case 'A': + case 'a': + break; default: RETURNFUNC(-RIG_EINVAL); } } else { - RETURNFUNC(-RIG_EINVAL); - } - if (newcat_is_rig(rig, RIG_MODEL_FT450) && chan < 4) - { - // 450 manual says 1/2/3 playback needs P1=6/7/8 - chan += 5; - } - else - { - SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "KY%d%c", chan, cat_term); + if (strlen(msg2)>50) { + msg2[50]=0; // truncate if too long + rig_debug(RIG_DEBUG_ERR, "%s: msg length of %d truncated to 50\n", __func__, (int)strlen(msg)); + } + chan = '1'; + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "KM1%s;",msg2); + rc = newcat_set_cmd(rig); + if (rc != RIG_OK) + { + free(msg2); + RETURNFUNC(-RIG_EINVAL); + } + chan = '6'; // the channel we use to key msg 1 } + free(msg2); + SNPRINTF(priv->cmd_str, sizeof(priv->cmd_str), "KY%c%c", chan, cat_term); rc = newcat_set_cmd(rig); RETURNFUNC(rc); @@ -10983,6 +11018,14 @@ int newcat_set_cmd_validate(RIG *rig) { strcpy(valcmd, ";"); } + else if (strncmp(priv->cmd_str, "KM", 2) == 0) + { + strcpy(valcmd, ""); + } + else if (strncmp(priv->cmd_str, "KY", 2) == 0) + { + strcpy(valcmd, ""); + } else { rig_debug(RIG_DEBUG_TRACE, "%s: %s not implemented\n", __func__, priv->cmd_str); diff --git a/rigs/yaesu/newcat.h b/rigs/yaesu/newcat.h index 7e29d894b..30f87d203 100644 --- a/rigs/yaesu/newcat.h +++ b/rigs/yaesu/newcat.h @@ -50,7 +50,7 @@ typedef char ncboolean; /* shared function version */ -#define NEWCAT_VER "20230927" +#define NEWCAT_VER "20230930" /* Hopefully large enough for future use, 128 chars plus '\0' */ #define NEWCAT_DATA_LEN 129