From f79722c33305e064df543b2ee4b38e91317aba7e Mon Sep 17 00:00:00 2001 From: Malcolm Herring Date: Fri, 21 Dec 2018 20:16:26 +0000 Subject: [PATCH] daily --- icom/frame.c | 15 +++++++++---- icom/icom.c | 4 +++- icom/icom_defs.h | 3 ++- icom/icr30.c | 53 +++++++++++++++++++++++++++++++++++++------- include/hamlib/rig.h | 3 ++- src/misc.c | 3 ++- 6 files changed, 65 insertions(+), 16 deletions(-) diff --git a/icom/frame.c b/icom/frame.c index a7d57d40b..343f46eae 100644 --- a/icom/frame.c +++ b/icom/frame.c @@ -326,7 +326,7 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width, switch (mode) { case RIG_MODE_AM: icmode = S_AM; break; - case RIG_MODE_AMN: icmode = S_AMN; break; + case RIG_MODE_AM_N: icmode = S_AM_N; break; case RIG_MODE_AMS: icmode = S_AMS; break; case RIG_MODE_CW: icmode = S_CW; break; case RIG_MODE_CWR: icmode = S_CWR; break; @@ -335,6 +335,7 @@ int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width, case RIG_MODE_RTTY: icmode = S_RTTY; break; case RIG_MODE_RTTYR: icmode = S_RTTYR; break; case RIG_MODE_FM: icmode = S_FM; break; + case RIG_MODE_FM_N: icmode = S_FM_N; break; case RIG_MODE_WFM: icmode = S_WFM; break; case RIG_MODE_P25: icmode = S_P25; break; case RIG_MODE_DSTAR: icmode = S_DSTAR; break; @@ -379,7 +380,11 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t *width = RIG_PASSBAND_NORMAL; switch (md) { - case S_AM: *mode = RIG_MODE_AM; break; + case S_AM: if (rig->caps->rig_model == RIG_MODEL_ICR30 && pd == 0x02) { + *mode = RIG_MODE_AM_N; + } else { + *mode = RIG_MODE_AM; + } break; case S_AMS: *mode = RIG_MODE_AMS; break; case S_CW: *mode = RIG_MODE_CW; break; case S_CWR: *mode = RIG_MODE_CWR; break; @@ -388,9 +393,11 @@ void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t *mode = RIG_MODE_USB; *width = rig_passband_normal(rig, RIG_MODE_USB); return; - } else + } else if (rig->caps->rig_model == RIG_MODEL_ICR30 && pd == 0x02) { + *mode = RIG_MODE_FM_N; + } else { *mode = RIG_MODE_FM; - break; + } break; case S_WFM: *mode = RIG_MODE_WFM; break; case S_USB: *mode = RIG_MODE_USB; break; case S_LSB: *mode = RIG_MODE_LSB; break; diff --git a/icom/icom.c b/icom/icom.c index d23391a29..229a3a2d1 100644 --- a/icom/icom.c +++ b/icom/icom.c @@ -897,8 +897,10 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) /* IC910H has different meaning of command 1A, subcommand 03. So do * not ask for DSP filter settings */ /* Likewise, don't ask if we happen to be an Omni VI Plus */ + /* Likewise, don't ask if we happen to be an IC-R30 */ if ( (rig->caps->rig_model == RIG_MODEL_IC910) || - (rig->caps->rig_model == RIG_MODEL_OMNIVIP) ) + (rig->caps->rig_model == RIG_MODEL_OMNIVIP) || + (rig->caps->rig_model == RIG_MODEL_ICR30) ) return RIG_OK; /* Most rigs return 1-wide, 2-normal,3-narrow diff --git a/icom/icom_defs.h b/icom/icom_defs.h index 8c364207e..1b02a6011 100644 --- a/icom/icom_defs.h +++ b/icom/icom_defs.h @@ -106,10 +106,11 @@ #define S_LSB 0x00 /* Set to LSB */ #define S_USB 0x01 /* Set to USB */ #define S_AM 0x02 /* Set to AM */ -#define S_AMN 0x02 /* Set to AM-N */ +#define S_AM_N 0x02 /* Set to AM-N */ #define S_CW 0x03 /* Set to CW */ #define S_RTTY 0x04 /* Set to RTTY */ #define S_FM 0x05 /* Set to FM */ +#define S_FM_N 0x05 /* Set to FM-N */ #define S_WFM 0x06 /* Set to Wide FM */ #define S_CWR 0x07 /* Set to CW Reverse */ #define S_RTTYR 0x08 /* Set to RTTY Reverse */ diff --git a/icom/icr30.c b/icom/icr30.c index 6770f3bc0..1cd8fb622 100644 --- a/icom/icr30.c +++ b/icom/icr30.c @@ -28,13 +28,15 @@ #include "hamlib/rig.h" #include "icom.h" #include "idx_builtin.h" +#include "icom_defs.h" +#include "frame.h" -#define ICR30_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_AM|RIG_MODE_AMN|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_WFM|RIG_MODE_CWR|\ +#define ICR30_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_AM|RIG_MODE_AM_N|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_FM_N|RIG_MODE_WFM|\ RIG_MODE_RTTYR|RIG_MODE_SAM|RIG_MODE_SAL|RIG_MODE_SAH|RIG_MODE_P25|RIG_MODE_DSTAR|RIG_MODE_DPMR|RIG_MODE_NXDNVN|RIG_MODE_NXDN_N|RIG_MODE_DCR) #define ICR30_FUNC_ALL (RIG_FUNC_TSQL|RIG_FUNC_VSC) -#define ICR30_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) +#define ICR30_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) #define ICR30_VFO_ALL (RIG_VFO_A) @@ -47,11 +49,42 @@ { 255, 60 } /* +60 */ \ } } +/* + * This function does the special bandwidth coding for IC-R30 + * (1 - normal, 2 - narrow) + */ + +static int icr30_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, + unsigned char *md, signed char *pd) +{ + int err; + + err = rig2icom_mode(rig, mode, width, md, pd); + + if (*pd == PD_NARROW_3) + *pd = PD_NARROW_2; + + return err; +} + +/* + * This function handles the -N modes for IC-R30 + */ + +int icr30_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { + if (mode & (RIG_MODE_AM_N | RIG_MODE_FM_N)) { + return icom_set_mode(rig, vfo, mode, (pbwidth_t)1); + } else { + return icom_set_mode(rig, vfo, mode, width); + } +} + static const struct icom_priv_caps icr30_priv_caps = { - 0x9c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ + 0x9c, /* default address */ + 0, /* 731 mode */ + 0, /* no XCHG */ + r8500_ts_sc_list, /* wrong, but don't have set_ts anyway */ + .r2i_mode = icr30_r2i_mode }; const struct rig_caps icr30_caps = { @@ -137,7 +170,9 @@ const struct rig_caps icr30_caps = { }, /* mode/filter list, remember: order matters! */ .filters = { - {RIG_MODE_AM|RIG_MODE_FM, kHz(12)}, + {RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_USB|RIG_MODE_LSB, kHz(1.8)}, + {RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_AM_N|RIG_MODE_FM_N, kHz(12)}, + {RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_AM_N|RIG_MODE_FM_N, kHz(6)}, {RIG_MODE_WFM, kHz(150)}, RIG_FLT_END, }, @@ -155,10 +190,12 @@ const struct rig_caps icr30_caps = { .set_freq = icom_set_freq, .get_freq = icom_get_freq, -.set_mode = icom_set_mode, +.set_mode = icr30_set_mode, .get_mode = icom_get_mode, .set_ant = icom_set_ant, .get_ant = icom_get_ant, +.set_bank = icom_set_bank, +.set_mem = icom_set_mem, .decode_event = icom_decode_event, .set_level = icom_set_level, .get_level = icom_get_level, diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index ba66fa48e..1a1fb0ae9 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -875,7 +875,8 @@ typedef enum { RIG_MODE_NXDNVN = (1 << 26), /*!< \c NXDN-VN -- VHF,UHF digital mode IC-R8600 */ RIG_MODE_NXDN_N = (1 << 27), /*!< \c NXDN-N -- VHF,UHF digital mode IC-R8600 */ RIG_MODE_DCR = (1 << 28), /*!< \c DCR -- VHF,UHF digital mode IC-R8600 */ - RIG_MODE_AMN = (1 << 29), /*!< \c AM-N -- Narrow band AM mode IC-R30 */ + RIG_MODE_AM_N = (1 << 29), /*!< \c AM-N -- Narrow band AM mode IC-R30 */ + RIG_MODE_FM_N = (1 << 30), /*!< \c FM-N -- Narrow band FM mode IC-R30 */ RIG_MODE_TESTS_MAX /*!< \c MUST ALWAYS BE LAST, Max Count for dumpcaps.c */ } rmode_t; diff --git a/src/misc.c b/src/misc.c index 51140abcd..08ad05c57 100644 --- a/src/misc.c +++ b/src/misc.c @@ -320,6 +320,7 @@ static struct { RIG_MODE_RTTY, "RTTY" }, { RIG_MODE_FM, "FM" }, { RIG_MODE_FMN, "FMN" }, + { RIG_MODE_FM_N, "FM-N" }, { RIG_MODE_WFM, "WFM" }, { RIG_MODE_CWR, "CWR" }, { RIG_MODE_RTTYR, "RTTYR" }, @@ -334,7 +335,7 @@ static struct { RIG_MODE_SAL, "SAL" }, { RIG_MODE_SAH, "SAH" }, { RIG_MODE_DSB, "DSB"}, - { RIG_MODE_AMN, "AM-N"}, + { RIG_MODE_AM_N, "AM-N"}, { RIG_MODE_P25, "P25"}, { RIG_MODE_DSTAR, "D-STAR"}, { RIG_MODE_DPMR, "dPMR"},