From 422b266b9b050ac28fe564ec00b6ef74d5c28892 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Fri, 21 Dec 2018 12:39:20 -0500 Subject: [PATCH 01/11] Change RIG_MODE and RIG_FUNC to 64-bit values --- dummy/netrigctl.c | 8 +- include/hamlib/rig.h | 198 ++++++++++++++++++++++++++++--------------- tests/memcsv.c | 4 +- tests/rigctl_parse.c | 20 ++--- 4 files changed, 148 insertions(+), 82 deletions(-) diff --git a/dummy/netrigctl.c b/dummy/netrigctl.c index 389fa8995..f6b00b337 100644 --- a/dummy/netrigctl.c +++ b/dummy/netrigctl.c @@ -113,7 +113,7 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%x%d%d%x%x", + ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%llx%d%d%x%x", &rs->rx_range_list[i].start, &rs->rx_range_list[i].end, &rs->rx_range_list[i].modes, @@ -132,7 +132,7 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%x%d%d%x%x", + ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%llx%d%d%x%x", &rs->tx_range_list[i].start, &rs->tx_range_list[i].end, &rs->tx_range_list[i].modes, @@ -151,7 +151,7 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = sscanf(buf, "%x%ld", + ret = sscanf(buf, "%llx%ld", &rs->tuning_steps[i].modes, &rs->tuning_steps[i].ts); if (ret != 2) @@ -165,7 +165,7 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = sscanf(buf, "%x%ld", + ret = sscanf(buf, "%llx%ld", &rs->filters[i].modes, &rs->filters[i].width); if (ret != 2) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index e39e353d6..3b6be3cce 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -760,7 +760,7 @@ enum rig_parm_e { * This can be a func, a level or a parm. * Each bit designates one of them. */ -typedef unsigned long setting_t; +typedef unsigned long long setting_t; /** * \brief Tranceive mode @@ -790,39 +790,71 @@ typedef unsigned long setting_t; * initialize the func_str.func members. TNX KA6MAL, AC6SL. - N0NB */ #define RIG_FUNC_NONE 0 /*!< '' -- No Function */ -#define RIG_FUNC_FAGC (1UL<<0) /*!< \c FAGC -- Fast AGC */ -#define RIG_FUNC_NB (1UL<<1) /*!< \c NB -- Noise Blanker */ -#define RIG_FUNC_COMP (1UL<<2) /*!< \c COMP -- Speech Compression */ -#define RIG_FUNC_VOX (1UL<<3) /*!< \c VOX -- Voice Operated Relay */ -#define RIG_FUNC_TONE (1UL<<4) /*!< \c TONE -- CTCSS Tone */ -#define RIG_FUNC_TSQL (1UL<<5) /*!< \c TSQL -- CTCSS Activate/De-activate */ -#define RIG_FUNC_SBKIN (1UL<<6) /*!< \c SBKIN -- Semi Break-in (CW mode) */ -#define RIG_FUNC_FBKIN (1UL<<7) /*!< \c FBKIN -- Full Break-in (CW mode) */ -#define RIG_FUNC_ANF (1UL<<8) /*!< \c ANF -- Automatic Notch Filter (DSP) */ -#define RIG_FUNC_NR (1UL<<9) /*!< \c NR -- Noise Reduction (DSP) */ -#define RIG_FUNC_AIP (1UL<<10) /*!< \c AIP -- RF pre-amp (AIP on Kenwood, IPO on Yaesu, etc.) */ -#define RIG_FUNC_APF (1UL<<11) /*!< \c APF -- Auto Passband/Audio Peak Filter */ -#define RIG_FUNC_MON (1UL<<12) /*!< \c MON -- Monitor transmitted signal */ -#define RIG_FUNC_MN (1UL<<13) /*!< \c MN -- Manual Notch */ -#define RIG_FUNC_RF (1UL<<14) /*!< \c RF -- RTTY Filter */ -#define RIG_FUNC_ARO (1UL<<15) /*!< \c ARO -- Auto Repeater Offset */ -#define RIG_FUNC_LOCK (1UL<<16) /*!< \c LOCK -- Lock */ -#define RIG_FUNC_MUTE (1UL<<17) /*!< \c MUTE -- Mute */ -#define RIG_FUNC_VSC (1UL<<18) /*!< \c VSC -- Voice Scan Control */ -#define RIG_FUNC_REV (1UL<<19) /*!< \c REV -- Reverse transmit and receive frequencies */ -#define RIG_FUNC_SQL (1UL<<20) /*!< \c SQL -- Turn Squelch Monitor on/off */ -#define RIG_FUNC_ABM (1UL<<21) /*!< \c ABM -- Auto Band Mode */ -#define RIG_FUNC_BC (1UL<<22) /*!< \c BC -- Beat Canceller */ -#define RIG_FUNC_MBC (1UL<<23) /*!< \c MBC -- Manual Beat Canceller */ -#define RIG_FUNC_RIT (1UL<<24) /*!< \c RIT -- Receiver Incremental Tuning */ -#define RIG_FUNC_AFC (1UL<<25) /*!< \c AFC -- Auto Frequency Control ON/OFF */ -#define RIG_FUNC_SATMODE (1UL<<26) /*!< \c SATMODE -- Satellite mode ON/OFF */ -#define RIG_FUNC_SCOPE (1UL<<27) /*!< \c SCOPE -- Simple bandscope ON/OFF */ -#define RIG_FUNC_RESUME (1UL<<28) /*!< \c RESUME -- Scan auto-resume */ -#define RIG_FUNC_TBURST (1UL<<29) /*!< \c TBURST -- 1750 Hz tone burst */ -#define RIG_FUNC_TUNER (1UL<<30) /*!< \c TUNER -- Enable automatic tuner */ -#define RIG_FUNC_XIT (1UL<<31) /*!< \c XIT -- Transmitter Incremental Tuning */ - +#define RIG_FUNC_FAGC (1ULL<<0) /*!< \c FAGC -- Fast AGC */ +#define RIG_FUNC_NB (1ULL<<1) /*!< \c NB -- Noise Blanker */ +#define RIG_FUNC_COMP (1ULL<<2) /*!< \c COMP -- Speech Compression */ +#define RIG_FUNC_VOX (1ULL<<3) /*!< \c VOX -- Voice Operated Relay */ +#define RIG_FUNC_TONE (1ULL<<4) /*!< \c TONE -- CTCSS Tone */ +#define RIG_FUNC_TSQL (1ULL<<5) /*!< \c TSQL -- CTCSS Activate/De-activate */ +#define RIG_FUNC_SBKIN (1ULL<<6) /*!< \c SBKIN -- Semi Break-in (CW mode) */ +#define RIG_FUNC_FBKIN (1ULL<<7) /*!< \c FBKIN -- Full Break-in (CW mode) */ +#define RIG_FUNC_ANF (1ULL<<8) /*!< \c ANF -- Automatic Notch Filter (DSP) */ +#define RIG_FUNC_NR (1ULL<<9) /*!< \c NR -- Noise Reduction (DSP) */ +#define RIG_FUNC_AIP (1ULL<<10) /*!< \c AIP -- RF pre-amp (AIP on Kenwood, IPO on Yaesu, etc.) */ +#define RIG_FUNC_APF (1ULL<<11) /*!< \c APF -- Auto Passband/Audio Peak Filter */ +#define RIG_FUNC_MON (1ULL<<12) /*!< \c MON -- Monitor transmitted signal */ +#define RIG_FUNC_MN (1ULL<<13) /*!< \c MN -- Manual Notch */ +#define RIG_FUNC_RF (1ULL<<14) /*!< \c RF -- RTTY Filter */ +#define RIG_FUNC_ARO (1ULL<<15) /*!< \c ARO -- Auto Repeater Offset */ +#define RIG_FUNC_LOCK (1ULL<<16) /*!< \c LOCK -- Lock */ +#define RIG_FUNC_MUTE (1ULL<<17) /*!< \c MUTE -- Mute */ +#define RIG_FUNC_VSC (1ULL<<18) /*!< \c VSC -- Voice Scan Control */ +#define RIG_FUNC_REV (1ULL<<19) /*!< \c REV -- Reverse transmit and receive frequencies */ +#define RIG_FUNC_SQL (1ULL<<20) /*!< \c SQL -- Turn Squelch Monitor on/off */ +#define RIG_FUNC_ABM (1ULL<<21) /*!< \c ABM -- Auto Band Mode */ +#define RIG_FUNC_BC (1ULL<<22) /*!< \c BC -- Beat Canceller */ +#define RIG_FUNC_MBC (1ULL<<23) /*!< \c MBC -- Manual Beat Canceller */ +#define RIG_FUNC_RIT (1ULL<<24) /*!< \c RIT -- Receiver Incremental Tuning */ +#define RIG_FUNC_AFC (1ULL<<25) /*!< \c AFC -- Auto Frequency Control ON/OFF */ +#define RIG_FUNC_SATMODE (1ULL<<26) /*!< \c SATMODE -- Satellite mode ON/OFF */ +#define RIG_FUNC_SCOPE (1ULL<<27) /*!< \c SCOPE -- Simple bandscope ON/OFF */ +#define RIG_FUNC_RESUME (1ULL<<28) /*!< \c RESUME -- Scan auto-resume */ +#define RIG_FUNC_TBURST (1ULL<<29) /*!< \c TBURST -- 1750 Hz tone burst */ +#define RIG_FUNC_TUNER (1ULL<<30) /*!< \c TUNER -- Enable automatic tuner */ +#define RIG_FUNC_XIT (1ULL<<31) /*!< \c XIT -- Transmitter Incremental Tuning */ +#define RIG_FUNC_BIT32 (1ULL<<32) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT33 (1ULL<<33) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT34 (1ULL<<34) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT35 (1ULL<<35) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT36 (1ULL<<36) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT37 (1ULL<<37) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT38 (1ULL<<38) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT39 (1ULL<<39) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT40 (1ULL<<40) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT41 (1ULL<<41) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT42 (1ULL<<42) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT43 (1ULL<<43) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT44 (1ULL<<44) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT45 (1ULL<<45) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT46 (1ULL<<46) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT47 (1ULL<<47) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT48 (1ULL<<48) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT49 (1ULL<<49) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT50 (1ULL<<50) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT51 (1ULL<<51) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT52 (1ULL<<52) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT53 (1ULL<<53) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT54 (1ULL<<54) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT55 (1ULL<<55) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT56 (1ULL<<56) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT57 (1ULL<<57) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT58 (1ULL<<58) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT59 (1ULL<<59) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT60 (1ULL<<60) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT61 (1ULL<<61) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT62 (1ULL<<62) /* available for future RIG_FUNC items */ +#define RIG_FUNC_BIT63 (1ULL<<63) /* available for future RIG_FUNC items */ +/* 63 is this highest bit number that can be used */ /** * \brief power unit macros @@ -845,38 +877,72 @@ typedef unsigned long setting_t; * \sa rig_parse_mode(), rig_strrmode() * TODO: Add new 8600 modes to rig2icom_mode() and icom2rig_mode() in frame.c */ -typedef enum { - RIG_MODE_NONE = 0, /*!< '' -- None */ - RIG_MODE_AM = (1 << 0), /*!< \c AM -- Amplitude Modulation */ - RIG_MODE_CW = (1 << 1), /*!< \c CW -- CW "normal" sideband */ - RIG_MODE_USB = (1 << 2), /*!< \c USB -- Upper Side Band */ - RIG_MODE_LSB = (1 << 3), /*!< \c LSB -- Lower Side Band */ - RIG_MODE_RTTY = (1 << 4), /*!< \c RTTY -- Radio Teletype */ - RIG_MODE_FM = (1 << 5), /*!< \c FM -- "narrow" band FM */ - RIG_MODE_WFM = (1 << 6), /*!< \c WFM -- broadcast wide FM */ - RIG_MODE_CWR = (1 << 7), /*!< \c CWR -- CW "reverse" sideband */ - RIG_MODE_RTTYR = (1 << 8), /*!< \c RTTYR -- RTTY "reverse" sideband */ - RIG_MODE_AMS = (1 << 9), /*!< \c AMS -- Amplitude Modulation Synchronous */ - RIG_MODE_PKTLSB = (1 << 10), /*!< \c PKTLSB -- Packet/Digital LSB mode (dedicated port) */ - RIG_MODE_PKTUSB = (1 << 11), /*!< \c PKTUSB -- Packet/Digital USB mode (dedicated port) */ - RIG_MODE_PKTFM = (1 << 12), /*!< \c PKTFM -- Packet/Digital FM mode (dedicated port) */ - RIG_MODE_ECSSUSB = (1 << 13), /*!< \c ECSSUSB -- Exalted Carrier Single Sideband USB */ - RIG_MODE_ECSSLSB = (1 << 14), /*!< \c ECSSLSB -- Exalted Carrier Single Sideband LSB */ - RIG_MODE_FAX = (1 << 15), /*!< \c FAX -- Facsimile Mode */ - RIG_MODE_SAM = (1 << 16), /*!< \c SAM -- Synchronous AM double sideband */ - RIG_MODE_SAL = (1 << 17), /*!< \c SAL -- Synchronous AM lower sideband */ - RIG_MODE_SAH = (1 << 18), /*!< \c SAH -- Synchronous AM upper (higher) sideband */ - RIG_MODE_DSB = (1 << 19), /*!< \c DSB -- Double sideband suppressed carrier */ - RIG_MODE_FMN = (1 << 21), /*!< \c FMN -- FM Narrow Kenwood ts990s */ - RIG_MODE_PKTAM = (1 << 22), /*!< \c PKTAM -- Packet/Digital AM mode e.g. IC7300 */ - RIG_MODE_P25 = (1 << 23), /*!< \c P25 -- APCO/P25 VHF,UHF digital mode IC-R8600 */ - RIG_MODE_DSTAR = (1 << 24), /*!< \c D-Star -- VHF,UHF digital mode IC-R8600 */ - RIG_MODE_DPMR = (1 << 25), /*!< \c dPMR -- digital PMR, VHF,UHF digital mode IC-R8600 */ - 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_TESTS_MAX /*!< \c MUST ALWAYS BE LAST, Max Count for dumpcaps.c */ -} rmode_t; +#define ULL (unsigned long long) +typedef unsigned long long rmode_t; +#define RIG_MODE_NONE 0 /*!< '' -- None */ +#define RIG_MODE_AM (1ULL << 0) /*!< \c AM -- Amplitude Modulation */ +#define RIG_MODE_CW (1ULL << 1) /*!< \c CW -- CW "normal" sideband */ +#define RIG_MODE_USB (1ULL << 2) /*!< \c USB -- Upper Side Band */ +#define RIG_MODE_LSB (1ULL << 3) /*!< \c LSB -- Lower Side Band */ +#define RIG_MODE_RTTY (1ULL << 4) /*!< \c RTTY -- Radio Teletype */ +#define RIG_MODE_FM (1ULL << 5) /*!< \c FM -- "narrow" band FM */ +#define RIG_MODE_WFM (1ULL << 6) /*!< \c WFM -- broadcast wide FM */ +#define RIG_MODE_CWR (1ULL << 7) /*!< \c CWR -- CW "reverse" sideband */ +#define RIG_MODE_RTTYR (1ULL << 8) /*!< \c RTTYR -- RTTY "reverse" sideband */ +#define RIG_MODE_AMS (1ULL << 9) /*!< \c AMS -- Amplitude Modulation Synchronous */ +#define RIG_MODE_PKTLSB (1ULL << 10) /*!< \c PKTLSB -- Packet/Digital LSB mode (dedicated port) */ +#define RIG_MODE_PKTUSB (1ULL << 11) /*!< \c PKTUSB -- Packet/Digital USB mode (dedicated port) */ +#define RIG_MODE_PKTFM (1ULL << 12) /*!< \c PKTFM -- Packet/Digital FM mode (dedicated port) */ +#define RIG_MODE_ECSSUSB (1ULL << 13) /*!< \c ECSSUSB -- Exalted Carrier Single Sideband USB */ +#define RIG_MODE_ECSSLSB (1ULL << 14) /*!< \c ECSSLSB -- Exalted Carrier Single Sideband LSB */ +#define RIG_MODE_FAX (1ULL << 15) /*!< \c FAX -- Facsimile Mode */ +#define RIG_MODE_SAM (1ULL << 16) /*!< \c SAM -- Synchronous AM double sideband */ +#define RIG_MODE_SAL (1ULL << 17) /*!< \c SAL -- Synchronous AM lower sideband */ +#define RIG_MODE_SAH (1ULL << 18) /*!< \c SAH -- Synchronous AM upper (higher) sideband */ +#define RIG_MODE_DSB (1ULL << 19) /*!< \c DSB -- Double sideband suppressed carrier */ +#define RIG_MODE_FMN (1ULL << 21) /*!< \c FMN -- FM Narrow Kenwood ts990s */ +#define RIG_MODE_PKTAM (1ULL << 22) /*!< \c PKTAM -- Packet/Digital AM mode e.g. IC7300 */ +#define RIG_MODE_P25 (1ULL << 23) /*!< \c P25 -- APCO/P25 VHF,UHF digital mode IC-R8600 */ +#define RIG_MODE_DSTAR (1ULL << 24) /*!< \c D-Star -- VHF,UHF digital mode IC-R8600 */ +#define RIG_MODE_DPMR (1ULL << 25) /*!< \c dPMR -- digital PMR, VHF,UHF digital mode IC-R8600 */ +#define RIG_MODE_NXDNVN (1ULL << 26) /*!< \c NXDN-VN -- VHF,UHF digital mode IC-R8600 */ +#define RIG_MODE_NXDN_N (1ULL << 27) /*!< \c NXDN-N -- VHF,UHF digital mode IC-R8600 */ +#define RIG_MODE_DCR (1ULL << 28) /*!< \c DCR -- VHF,UHF digital mode IC-R8600 */ +#define RIG_MODE_BIT29 (1ULL << 29) /* reserved for future expansion */ +#define RIG_MODE_BIT30 (1ULL << 30) /* reserved for future expansion */ +#define RIG_MODE_BIT31 (1ULL << 31) /* reserved for future expansion */ +#define RIG_MODE_BIT32 (1ULL << 32) /* reserved for future expansion */ +#define RIG_MODE_BIT33 (1ULL << 33) /* reserved for future expansion */ +#define RIG_MODE_BIT34 (1ULL << 34) /* reserved for future expansion */ +#define RIG_MODE_BIT35 (1ULL << 35) /* reserved for future expansion */ +#define RIG_MODE_BIT36 (1ULL << 36) /* reserved for future expansion */ +#define RIG_MODE_BIT37 (1ULL << 37) /* reserved for future expansion */ +#define RIG_MODE_BIT38 (1ULL << 38) /* reserved for future expansion */ +#define RIG_MODE_BIT39 (1ULL << 39) /* reserved for future expansion */ +#define RIG_MODE_BIT40 (1ULL << 40) /* reserved for future expansion */ +#define RIG_MODE_BIT41 (1ULL << 41) /* reserved for future expansion */ +#define RIG_MODE_BIT42 (1ULL << 42) /* reserved for future expansion */ +#define RIG_MODE_BIT43 (1ULL << 43) /* reserved for future expansion */ +#define RIG_MODE_BIT44 (1ULL << 44) /* reserved for future expansion */ +#define RIG_MODE_BIT45 (1ULL << 45) /* reserved for future expansion */ +#define RIG_MODE_BIT46 (1ULL << 46) /* reserved for future expansion */ +#define RIG_MODE_BIT47 (1ULL << 47) /* reserved for future expansion */ +#define RIG_MODE_BIT48 (1ULL << 48) /* reserved for future expansion */ +#define RIG_MODE_BIT49 (1ULL << 49) /* reserved for future expansion */ +#define RIG_MODE_BIT50 (1ULL << 50) /* reserved for future expansion */ +#define RIG_MODE_BIT51 (1ULL << 51) /* reserved for future expansion */ +#define RIG_MODE_BIT52 (1ULL << 52) /* reserved for future expansion */ +#define RIG_MODE_BIT53 (1ULL << 53) /* reserved for future expansion */ +#define RIG_MODE_BIT54 (1ULL << 54) /* reserved for future expansion */ +#define RIG_MODE_BIT55 (1ULL << 55) /* reserved for future expansion */ +#define RIG_MODE_BIT56 (1ULL << 56) /* reserved for future expansion */ +#define RIG_MODE_BIT57 (1ULL << 57) /* reserved for future expansion */ +#define RIG_MODE_BIT58 (1ULL << 58) /* reserved for future expansion */ +#define RIG_MODE_BIT59 (1ULL << 59) /* reserved for future expansion */ +#define RIG_MODE_BIT60 (1ULL << 60) /* reserved for future expansion */ +#define RIG_MODE_BIT61 (1ULL << 61) /* reserved for future expansion */ +#define RIG_MODE_BIT62 (1ULL << 62) /* reserved for future expansion */ +#define RIG_MODE_TESTS_MAX (1ULL << 63) /*!< \c last bit available for 64-bit enum MUST ALWAYS BE LAST, Max Count for dumpcaps.c */ /** diff --git a/tests/memcsv.c b/tests/memcsv.c index fe3a0920c..415548b57 100644 --- a/tests/memcsv.c +++ b/tests/memcsv.c @@ -669,7 +669,7 @@ int dump_csv_chan(RIG *rig, if (mem_caps->funcs) { - fprintf(f, "%lx%c", chan.funcs, csv_sep); + fprintf(f, "%llx%c", chan.funcs, csv_sep); } if (mem_caps->ctcss_tone) @@ -940,7 +940,7 @@ int set_channel_data(RIG *rig, if (i >= 0) { - sscanf(line_data_list[i], "%lx", &chan->funcs); + sscanf(line_data_list[i], "%llx", &chan->funcs); } } diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index b6b5a949c..7a7ef9df1 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -3788,7 +3788,7 @@ declare_proto_rig(dump_state) for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->rx_range_list[i]); i++) { fprintf(fout, - "%"FREQFMT" %"FREQFMT" 0x%x %d %d 0x%x 0x%x\n", + "%"FREQFMT" %"FREQFMT" 0x%llx %d %d 0x%x 0x%x\n", rs->rx_range_list[i].start, rs->rx_range_list[i].end, rs->rx_range_list[i].modes, @@ -3803,7 +3803,7 @@ declare_proto_rig(dump_state) for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->tx_range_list[i]); i++) { fprintf(fout, - "%"FREQFMT" %"FREQFMT" 0x%x %d %d 0x%x 0x%x\n", + "%"FREQFMT" %"FREQFMT" 0x%llx %d %d 0x%x 0x%x\n", rs->tx_range_list[i].start, rs->tx_range_list[i].end, rs->tx_range_list[i].modes, @@ -3818,7 +3818,7 @@ declare_proto_rig(dump_state) for (i = 0; i < TSLSTSIZ && !RIG_IS_TS_END(rs->tuning_steps[i]); i++) { fprintf(fout, - "0x%x %ld\n", + "0x%llx %ld\n", rs->tuning_steps[i].modes, rs->tuning_steps[i].ts); } @@ -3828,7 +3828,7 @@ declare_proto_rig(dump_state) for (i = 0; i < FLTLSTSIZ && !RIG_IS_FLT_END(rs->filters[i]); i++) { fprintf(fout, - "0x%x %ld\n", + "0x%llx %ld\n", rs->filters[i].modes, rs->filters[i].width); } @@ -3858,12 +3858,12 @@ declare_proto_rig(dump_state) fprintf(fout, "\n"); - fprintf(fout, "0x%lx\n", rs->has_get_func); - fprintf(fout, "0x%lx\n", rs->has_set_func); - fprintf(fout, "0x%lx\n", rs->has_get_level); - fprintf(fout, "0x%lx\n", rs->has_set_level); - fprintf(fout, "0x%lx\n", rs->has_get_parm); - fprintf(fout, "0x%lx\n", rs->has_set_parm); + fprintf(fout, "0x%llx\n", rs->has_get_func); + fprintf(fout, "0x%llx\n", rs->has_set_func); + fprintf(fout, "0x%llx\n", rs->has_get_level); + fprintf(fout, "0x%llx\n", rs->has_set_level); + fprintf(fout, "0x%llx\n", rs->has_get_parm); + fprintf(fout, "0x%llx\n", rs->has_set_parm); #if 0 gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */ From 64b35ccbeef880c8640b07068b6d2b8cc4381228 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Fri, 21 Dec 2018 16:46:48 -0500 Subject: [PATCH 02/11] Add PRXll macro for 64-bit use --- src/misc.h | 6 ++++++ tests/rigctl_parse.c | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/misc.h b/src/misc.h index c8f853192..19605f417 100644 --- a/src/misc.h +++ b/src/misc.h @@ -100,22 +100,28 @@ extern HAMLIB_EXPORT(void) rig_force_cache_timeout(struct timeval *tv); #ifdef PRId64 /** \brief printf(3) format to be used for long long (64bits) type */ # define PRIll PRId64 +# define PRXll PRIx64 #else # ifdef FBSD4 # define PRIll "qd" +# define PRXll "qx" # else # define PRIll "lld" +# define PRXll "lld" # endif #endif #ifdef SCNd64 /** \brief scanf(3) format to be used for long long (64bits) type */ # define SCNll SCNd64 +# define SCNXll SCNx64 #else # ifdef FBSD4 # define SCNll "qd" +# define SCNXll "qx" # else # define SCNll "lld" +# define SCNXll "llx" # endif #endif diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 7a7ef9df1..00c8e6dee 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -3788,10 +3788,10 @@ declare_proto_rig(dump_state) for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->rx_range_list[i]); i++) { fprintf(fout, - "%"FREQFMT" %"FREQFMT" 0x%llx %d %d 0x%x 0x%x\n", + "%"FREQFMT" %"FREQFMT" 0x%"PRXll" %d %d 0x%x 0x%x\n", rs->rx_range_list[i].start, rs->rx_range_list[i].end, - rs->rx_range_list[i].modes, + (uint64_t)rs->rx_range_list[i].modes, rs->rx_range_list[i].low_power, rs->rx_range_list[i].high_power, rs->rx_range_list[i].vfo, @@ -3803,10 +3803,10 @@ declare_proto_rig(dump_state) for (i = 0; i < FRQRANGESIZ && !RIG_IS_FRNG_END(rs->tx_range_list[i]); i++) { fprintf(fout, - "%"FREQFMT" %"FREQFMT" 0x%llx %d %d 0x%x 0x%x\n", + "%"FREQFMT" %"FREQFMT" 0x%"PRXll" %d %d 0x%x 0x%x\n", rs->tx_range_list[i].start, rs->tx_range_list[i].end, - rs->tx_range_list[i].modes, + (uint64_t)rs->tx_range_list[i].modes, rs->tx_range_list[i].low_power, rs->tx_range_list[i].high_power, rs->tx_range_list[i].vfo, @@ -3818,8 +3818,8 @@ declare_proto_rig(dump_state) for (i = 0; i < TSLSTSIZ && !RIG_IS_TS_END(rs->tuning_steps[i]); i++) { fprintf(fout, - "0x%llx %ld\n", - rs->tuning_steps[i].modes, + "0x%"PRXll" %ld\n", + (uint64_t)rs->tuning_steps[i].modes, rs->tuning_steps[i].ts); } @@ -3828,8 +3828,8 @@ declare_proto_rig(dump_state) for (i = 0; i < FLTLSTSIZ && !RIG_IS_FLT_END(rs->filters[i]); i++) { fprintf(fout, - "0x%llx %ld\n", - rs->filters[i].modes, + "0x%"PRXll" %ld\n", + (uint64_t)rs->filters[i].modes, rs->filters[i].width); } @@ -3858,12 +3858,12 @@ declare_proto_rig(dump_state) fprintf(fout, "\n"); - fprintf(fout, "0x%llx\n", rs->has_get_func); - fprintf(fout, "0x%llx\n", rs->has_set_func); - fprintf(fout, "0x%llx\n", rs->has_get_level); - fprintf(fout, "0x%llx\n", rs->has_set_level); - fprintf(fout, "0x%llx\n", rs->has_get_parm); - fprintf(fout, "0x%llx\n", rs->has_set_parm); + fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_get_func); + fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_set_func); + fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_get_level); + fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_set_level); + fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_get_parm); + fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_set_parm); #if 0 gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */ From 160c8f015db08aba019f1e72dcf8cbce5ca94f94 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Fri, 21 Dec 2018 17:19:22 -0500 Subject: [PATCH 03/11] Fixup for 64-bit in memcsv.c --- tests/memcsv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/memcsv.c b/tests/memcsv.c index 415548b57..f4b9e59de 100644 --- a/tests/memcsv.c +++ b/tests/memcsv.c @@ -669,7 +669,7 @@ int dump_csv_chan(RIG *rig, if (mem_caps->funcs) { - fprintf(f, "%llx%c", chan.funcs, csv_sep); + fprintf(f, "%"PRXll"%c", (uint64_t)chan.funcs, csv_sep); } if (mem_caps->ctcss_tone) @@ -940,7 +940,7 @@ int set_channel_data(RIG *rig, if (i >= 0) { - sscanf(line_data_list[i], "%llx", &chan->funcs); + sscanf(line_data_list[i], "%"SCNXll, (uint64_t*)&chan->funcs); } } From 2b5f01fb75e228f8e0903acfb36e6b352e27cb4e Mon Sep 17 00:00:00 2001 From: Michael Black Date: Fri, 21 Dec 2018 23:51:54 -0500 Subject: [PATCH 04/11] 64 bit mods to netrigctl.c testrig.c --- dummy/netrigctl.c | 16 ++++++++-------- tests/testrig.c | 4 +++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dummy/netrigctl.c b/dummy/netrigctl.c index f6b00b337..916ee3ab3 100644 --- a/dummy/netrigctl.c +++ b/dummy/netrigctl.c @@ -113,10 +113,10 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%llx%d%d%x%x", + ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%"SCNXll"%d%d%x%x", &rs->rx_range_list[i].start, &rs->rx_range_list[i].end, - &rs->rx_range_list[i].modes, + (uint64_t*)&rs->rx_range_list[i].modes, &rs->rx_range_list[i].low_power, &rs->rx_range_list[i].high_power, &rs->rx_range_list[i].vfo, @@ -132,10 +132,10 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%llx%d%d%x%x", + ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%"SCNXll"%d%d%x%x", &rs->tx_range_list[i].start, &rs->tx_range_list[i].end, - &rs->tx_range_list[i].modes, + (uint64_t*)&rs->tx_range_list[i].modes, &rs->tx_range_list[i].low_power, &rs->tx_range_list[i].high_power, &rs->tx_range_list[i].vfo, @@ -151,8 +151,8 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = sscanf(buf, "%llx%ld", - &rs->tuning_steps[i].modes, + ret = sscanf(buf, "%"SCNXll"%ld", + (uint64_t*)&rs->tuning_steps[i].modes, &rs->tuning_steps[i].ts); if (ret != 2) return -RIG_EPROTO; @@ -165,8 +165,8 @@ static int netrigctl_open(RIG *rig) if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; - ret = sscanf(buf, "%llx%ld", - &rs->filters[i].modes, + ret = sscanf(buf, "%"SCNXll"%ld", + (uint64_t*)&rs->filters[i].modes, &rs->filters[i].width); if (ret != 2) return -RIG_EPROTO; diff --git a/tests/testrig.c b/tests/testrig.c index 250b7e25a..d92a83e14 100644 --- a/tests/testrig.c +++ b/tests/testrig.c @@ -9,6 +9,8 @@ #include +#include "misc.h" + #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -401,7 +403,7 @@ int main(int argc, char *argv[]) if (retcode == RIG_OK) { - printf("rig_get_mode: mode = %i \n", rmode); + printf("rig_get_mode: mode = %"PRIll"\n", rmode); } else { From 005fb29cf7bff09f394b6981fbd5e254d2738f17 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sat, 22 Dec 2018 12:03:41 -0500 Subject: [PATCH 05/11] Add TS-890S as derivative of TS-480 plus new modes --- include/hamlib/rig.h | 4 +- include/hamlib/riglist.h | 1 + kenwood/kenwood.c | 10 ++- kenwood/kenwood.h | 1 + kenwood/ts480.c | 161 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 3 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 95b48030b..80ee7645f 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -909,8 +909,8 @@ typedef unsigned long long rmode_t; #define RIG_MODE_NXDN_N (1ULL << 27) /*!< \c NXDN-N -- VHF,UHF digital mode IC-R8600 */ #define RIG_MODE_DCR (1ULL << 28) /*!< \c DCR -- VHF,UHF digital mode IC-R8600 */ #define RIG_MODE_AMN (1ULL << 29) /*!< \c AM-N -- Narrow band AM mode IC-R30 */ -#define RIG_MODE_BIT30 (1ULL << 30) /* reserved for future expansion */ -#define RIG_MODE_BIT31 (1ULL << 31) /* reserved for future expansion */ +#define RIG_MODE_PSK (1ULL << 30) /* PSK - Kenwood PSK and others */ +#define RIG_MODE_PSKR (1ULL << 31) /* PSKR - Kenwood PSKR and others */ #define RIG_MODE_BIT32 (1ULL << 32) /* reserved for future expansion */ #define RIG_MODE_BIT33 (1ULL << 33) /* reserved for future expansion */ #define RIG_MODE_BIT34 (1ULL << 34) /* reserved for future expansion */ diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index a1f1a8673..a167a81f2 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -153,6 +153,7 @@ #define RIG_MODEL_XG3 RIG_MAKE_MODEL(RIG_KENWOOD, 38) /* Elecraft XG-3 signal generator */ #define RIG_MODEL_TS990S RIG_MAKE_MODEL(RIG_KENWOOD, 39) #define RIG_MODEL_HPSDR RIG_MAKE_MODEL(RIG_KENWOOD, 40) /* OpenHPSDR, PiHPSDR */ +#define RIG_MODEL_TS890S RIG_MAKE_MODEL(RIG_KENWOOD, 41) /* diff --git a/kenwood/kenwood.c b/kenwood/kenwood.c index d9b0ba198..ecfea4b15 100644 --- a/kenwood/kenwood.c +++ b/kenwood/kenwood.c @@ -86,6 +86,7 @@ static const struct kenwood_id kenwood_id_list[] = { { RIG_MODEL_TS590S, 21 }, { RIG_MODEL_TS990S, 22 }, { RIG_MODEL_TS590SG, 23 }, + { RIG_MODEL_TS890S, 24 }, { RIG_MODEL_NONE, UNKNOWN_ID }, /* end marker */ }; @@ -132,7 +133,13 @@ rmode_t kenwood_mode_table[KENWOOD_MODE_TABLE_MAX] = { [6] = RIG_MODE_RTTY, [7] = RIG_MODE_CWR, [8] = RIG_MODE_NONE, /* TUNE mode */ - [9] = RIG_MODE_RTTYR + [9] = RIG_MODE_RTTYR, + [10] = RIG_MODE_PSK, + [11] = RIG_MODE_PSKR, + [12] = RIG_MODE_PKTLSB, + [13] = RIG_MODE_PKTUSB, + [14] = RIG_MODE_PKTFM, + [15] = RIG_MODE_PKTAM }; /* @@ -3437,6 +3444,7 @@ DECLARE_INITRIG_BACKEND(kenwood) rig_register(&f6k_caps); rig_register(&pihpsdr_caps); + rig_register(&ts890s_caps); return RIG_OK; } diff --git a/kenwood/kenwood.h b/kenwood/kenwood.h index e93e06881..9a1950bfc 100644 --- a/kenwood/kenwood.h +++ b/kenwood/kenwood.h @@ -203,6 +203,7 @@ extern const struct rig_caps transfox_caps; extern const struct rig_caps f6k_caps; extern const struct rig_caps pihpsdr_caps; +extern const struct rig_caps ts890s_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, size_t expected) diff --git a/kenwood/ts480.c b/kenwood/ts480.c index 167b074a3..8a5c382a2 100644 --- a/kenwood/ts480.c +++ b/kenwood/ts480.c @@ -1,5 +1,6 @@ /* * Hamlib Kenwood backend - TS480 description + * Hamlib Kenwood backend - TS890s description * Copyright (c) 2000-2004 by Stephane Fillod and Juergen Rinas * * @@ -31,6 +32,8 @@ #include "kenwood.h" #define TS480_ALL_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR) +#define TS890_ALL_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_CW|RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_RTTY|RIG_MODE_CWR|RIG_MODE_RTTYR|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM) + #define TS480_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) #define TS480_AM_TX_MODES RIG_MODE_AM #define TS480_VFO (RIG_VFO_A|RIG_VFO_B) @@ -252,6 +255,10 @@ static struct kenwood_priv_caps ts480_priv_caps = { .cmdtrm = EOM_KEN, }; +static struct kenwood_priv_caps ts890s_priv_caps = { + .cmdtrm = EOM_KEN, +}; + /* * ts480 rig capabilities. @@ -405,6 +412,160 @@ const struct rig_caps ts480_caps = { .get_func = kenwood_get_func, }; +/* + * ts890s rig capabilities. + * Copied from ts480_caps + * Where you see TS480 in this the values have not been verified + * Notice that some rigs share the same functions. + * Also this struct is READONLY! + */ +const struct rig_caps ts890s_caps = { + .rig_model = RIG_MODEL_TS890S, + .model_name = "TS-890S", + .mfg_name = "Kenwood", + .version = BACKEND_VER ".1", + .copyright = "LGPL", + .status = RIG_STATUS_ALPHA, + .rig_type = RIG_TYPE_TRANSCEIVER, + .ptt_type = RIG_PTT_RIG_MICDATA, + .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 = 200, + .retry = 10, + .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, + + + .rx_range_list1 = { + {kHz(100), Hz(59999999), TS890_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), TS890_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 = { + {TS890_ALL_MODES,kHz(1)}, + {TS890_ALL_MODES,Hz(2500)}, + {TS890_ALL_MODES,kHz(5)}, + {TS890_ALL_MODES,Hz(6250)}, + {TS890_ALL_MODES,kHz(10)}, + {TS890_ALL_MODES,Hz(12500)}, + {TS890_ALL_MODES,kHz(15)}, + {TS890_ALL_MODES,kHz(20)}, + {TS890_ALL_MODES,kHz(25)}, + {TS890_ALL_MODES,kHz(30)}, + {TS890_ALL_MODES,kHz(100)}, + {TS890_ALL_MODES,kHz(500)}, + {TS890_ALL_MODES,MHz(1)}, + {TS890_ALL_MODES,0}, /* any tuning step */ + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + .filters = { + {RIG_MODE_SSB, kHz(2.4)}, + {RIG_MODE_CW, Hz(200)}, + {RIG_MODE_RTTY, Hz(500)}, + {RIG_MODE_AM, kHz(9)}, + {RIG_MODE_FM, kHz(14)}, + RIG_FLT_END, + }, + .priv = (void *) &ts890s_priv_caps, + .rig_init = kenwood_init, + .rig_cleanup = kenwood_cleanup, + .set_freq = kenwood_set_freq, + .get_freq = kenwood_get_freq, + .set_rit = kenwood_set_rit, /* FIXME should this switch to rit mode or just set the frequency? */ + .get_rit = kenwood_get_rit, + .set_xit = kenwood_set_xit, /* FIXME should this switch to xit mode or just set the frequency? */ + .get_xit = kenwood_get_xit, + .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, + .set_powerstat = kenwood_set_powerstat, + .get_powerstat = kenwood_get_powerstat, + .get_info = kenwood_ts480_get_info, + .reset = kenwood_reset, + .set_ant = kenwood_set_ant, + .get_ant = kenwood_get_ant, + .scan = kenwood_scan, /* not working, invalid arguments using rigctl; kenwood_scan does only support on/off and not tone and CTCSS scan */ + .has_set_level = TS480_LEVEL_ALL, + .has_get_level = TS480_LEVEL_ALL, + .set_level = kenwood_ts480_set_level, + .get_level = kenwood_ts480_get_level, + .has_get_func = TS480_FUNC_ALL, + .has_set_func = TS480_FUNC_ALL, + .set_func = kenwood_set_func, + .get_func = kenwood_get_func, +}; + /* * my notes: From e15b2559dbd1fb5cb0be347db6f263b557f93019 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sat, 22 Dec 2018 18:04:14 -0500 Subject: [PATCH 06/11] Add XHCG to ic706.c --- icom/ic706.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/icom/ic706.c b/icom/ic706.c index eaf719ce7..6ffc22662 100644 --- a/icom/ic706.c +++ b/icom/ic706.c @@ -176,6 +176,7 @@ const struct rig_caps ic706_caps = { .max_xit = Hz(0), .max_ifshift = Hz(0), .targetable_vfo = 0, +.vfo_ops = IC706_VFO_OPS, .transceive = RIG_TRN_RIG, .bank_qty = 0, .chan_desc_sz = 0, @@ -309,6 +310,7 @@ const struct rig_caps ic706mkii_caps = { .max_xit = Hz(0), .max_ifshift = Hz(0), .targetable_vfo = 0, +.vfo_ops = IC706_VFO_OPS, .transceive = RIG_TRN_RIG, .bank_qty = 0, .chan_desc_sz = 0, From 7123bb440359c9f4c8c5da6a022ab3bbba8dbb0d Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sat, 22 Dec 2018 23:56:30 -0500 Subject: [PATCH 07/11] Change rmode_t to uint64_t and remove unneeded casts --- dummy/netrigctl.c | 8 ++++---- include/hamlib/rig.h | 8 +++++--- tests/memcsv.c | 4 ++-- tests/rigctl_parse.c | 20 ++++++++++---------- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/dummy/netrigctl.c b/dummy/netrigctl.c index 916ee3ab3..457e001d8 100644 --- a/dummy/netrigctl.c +++ b/dummy/netrigctl.c @@ -116,7 +116,7 @@ static int netrigctl_open(RIG *rig) ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%"SCNXll"%d%d%x%x", &rs->rx_range_list[i].start, &rs->rx_range_list[i].end, - (uint64_t*)&rs->rx_range_list[i].modes, + &rs->rx_range_list[i].modes, &rs->rx_range_list[i].low_power, &rs->rx_range_list[i].high_power, &rs->rx_range_list[i].vfo, @@ -135,7 +135,7 @@ static int netrigctl_open(RIG *rig) ret = num_sscanf(buf, "%"SCNfreq"%"SCNfreq"%"SCNXll"%d%d%x%x", &rs->tx_range_list[i].start, &rs->tx_range_list[i].end, - (uint64_t*)&rs->tx_range_list[i].modes, + &rs->tx_range_list[i].modes, &rs->tx_range_list[i].low_power, &rs->tx_range_list[i].high_power, &rs->tx_range_list[i].vfo, @@ -152,7 +152,7 @@ static int netrigctl_open(RIG *rig) return (ret < 0) ? ret : -RIG_EPROTO; ret = sscanf(buf, "%"SCNXll"%ld", - (uint64_t*)&rs->tuning_steps[i].modes, + &rs->tuning_steps[i].modes, &rs->tuning_steps[i].ts); if (ret != 2) return -RIG_EPROTO; @@ -166,7 +166,7 @@ static int netrigctl_open(RIG *rig) return (ret < 0) ? ret : -RIG_EPROTO; ret = sscanf(buf, "%"SCNXll"%ld", - (uint64_t*)&rs->filters[i].modes, + &rs->filters[i].modes, &rs->filters[i].width); if (ret != 2) return -RIG_EPROTO; diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 80ee7645f..7be7a99aa 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -26,6 +26,7 @@ #include #include +#include /* Rig list is in a separate file so as not to mess up w/ this one */ #include @@ -760,7 +761,7 @@ enum rig_parm_e { * This can be a func, a level or a parm. * Each bit designates one of them. */ -typedef unsigned long long setting_t; +typedef uint64_t setting_t; /** * \brief Tranceive mode @@ -877,8 +878,9 @@ typedef unsigned long long setting_t; * \sa rig_parse_mode(), rig_strrmode() * TODO: Add new 8600 modes to rig2icom_mode() and icom2rig_mode() in frame.c */ -#define ULL (unsigned long long) -typedef unsigned long long rmode_t; +#define ULL (uint64_t) +typedef uint64_t rmode_t; + #define RIG_MODE_NONE 0 /*!< '' -- None */ #define RIG_MODE_AM (1ULL << 0) /*!< \c AM -- Amplitude Modulation */ #define RIG_MODE_CW (1ULL << 1) /*!< \c CW -- CW "normal" sideband */ diff --git a/tests/memcsv.c b/tests/memcsv.c index f4b9e59de..094d6dd44 100644 --- a/tests/memcsv.c +++ b/tests/memcsv.c @@ -669,7 +669,7 @@ int dump_csv_chan(RIG *rig, if (mem_caps->funcs) { - fprintf(f, "%"PRXll"%c", (uint64_t)chan.funcs, csv_sep); + fprintf(f, "%"PRXll"%c", chan.funcs, csv_sep); } if (mem_caps->ctcss_tone) @@ -940,7 +940,7 @@ int set_channel_data(RIG *rig, if (i >= 0) { - sscanf(line_data_list[i], "%"SCNXll, (uint64_t*)&chan->funcs); + sscanf(line_data_list[i], "%"SCNXll, &chan->funcs); } } diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 00c8e6dee..57cf414cd 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -3791,7 +3791,7 @@ declare_proto_rig(dump_state) "%"FREQFMT" %"FREQFMT" 0x%"PRXll" %d %d 0x%x 0x%x\n", rs->rx_range_list[i].start, rs->rx_range_list[i].end, - (uint64_t)rs->rx_range_list[i].modes, + rs->rx_range_list[i].modes, rs->rx_range_list[i].low_power, rs->rx_range_list[i].high_power, rs->rx_range_list[i].vfo, @@ -3806,7 +3806,7 @@ declare_proto_rig(dump_state) "%"FREQFMT" %"FREQFMT" 0x%"PRXll" %d %d 0x%x 0x%x\n", rs->tx_range_list[i].start, rs->tx_range_list[i].end, - (uint64_t)rs->tx_range_list[i].modes, + rs->tx_range_list[i].modes, rs->tx_range_list[i].low_power, rs->tx_range_list[i].high_power, rs->tx_range_list[i].vfo, @@ -3819,7 +3819,7 @@ declare_proto_rig(dump_state) { fprintf(fout, "0x%"PRXll" %ld\n", - (uint64_t)rs->tuning_steps[i].modes, + rs->tuning_steps[i].modes, rs->tuning_steps[i].ts); } @@ -3829,7 +3829,7 @@ declare_proto_rig(dump_state) { fprintf(fout, "0x%"PRXll" %ld\n", - (uint64_t)rs->filters[i].modes, + rs->filters[i].modes, rs->filters[i].width); } @@ -3858,12 +3858,12 @@ declare_proto_rig(dump_state) fprintf(fout, "\n"); - fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_get_func); - fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_set_func); - fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_get_level); - fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_set_level); - fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_get_parm); - fprintf(fout, "0x%"PRXll"\n", (uint64_t)rs->has_set_parm); + fprintf(fout, "0x%"PRXll"\n", rs->has_get_func); + fprintf(fout, "0x%"PRXll"\n", rs->has_set_func); + fprintf(fout, "0x%"PRXll"\n", rs->has_get_level); + fprintf(fout, "0x%"PRXll"\n", rs->has_set_level); + fprintf(fout, "0x%"PRXll"\n", rs->has_get_parm); + fprintf(fout, "0x%"PRXll"\n", rs->has_set_parm); #if 0 gran_t level_gran[RIG_SETTING_MAX]; /*!< level granularity */ From f1d1d5269237717aeae2b97219deb44cbf698e86 Mon Sep 17 00:00:00 2001 From: Malcolm Herring Date: Sun, 23 Dec 2018 15:28:18 +0000 Subject: [PATCH 08/11] fix tones --- icom/icr6.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/icom/icr6.c b/icom/icr6.c index d8c2eccf4..52731c71c 100644 --- a/icom/icr6.c +++ b/icom/icr6.c @@ -84,8 +84,8 @@ const struct rig_caps icr6_caps = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, }, .parm_gran = {}, -.ctcss_list = NULL, -.dcs_list = NULL, +.ctcss_list = static_common_ctcss_list, +.dcs_list = common_dcs_list, .preamp = { RIG_DBLST_END, }, .attenuator = { RIG_DBLST_END, }, .max_rit = Hz(0), From ce3f6806d0bdbc8a1545a0ca171fe91432956505 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sun, 23 Dec 2018 17:37:27 -0500 Subject: [PATCH 09/11] Fix RIG_MODE structure in src/msic.c --- src/misc.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/misc.c b/src/misc.c index 51140abcd..8dd268a45 100644 --- a/src/misc.c +++ b/src/misc.c @@ -319,7 +319,6 @@ static struct { RIG_MODE_LSB, "LSB" }, { RIG_MODE_RTTY, "RTTY" }, { RIG_MODE_FM, "FM" }, - { RIG_MODE_FMN, "FMN" }, { RIG_MODE_WFM, "WFM" }, { RIG_MODE_CWR, "CWR" }, { RIG_MODE_RTTYR, "RTTYR" }, @@ -334,13 +333,17 @@ static struct { RIG_MODE_SAL, "SAL" }, { RIG_MODE_SAH, "SAH" }, { RIG_MODE_DSB, "DSB"}, - { RIG_MODE_AMN, "AM-N"}, + { RIG_MODE_FMN, "FMN" }, + { RIG_MODE_PKTAM, "PKTAM"}, { RIG_MODE_P25, "P25"}, { RIG_MODE_DSTAR, "D-STAR"}, - { RIG_MODE_DPMR, "dPMR"}, + { RIG_MODE_DPMR, "DPMR"}, { RIG_MODE_NXDNVN, "NXDN-VN"}, { RIG_MODE_NXDN_N, "NXDN-N"}, { RIG_MODE_DCR, "DCR"}, + { RIG_MODE_AMN, "AMN"}, + { RIG_MODE_PSK, "PSK"}, + { RIG_MODE_PSKR, "PSKR"}, { RIG_MODE_NONE, "" }, }; @@ -381,7 +384,7 @@ const char * HAMLIB_API rig_strrmode(rmode_t mode) { int i; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); + rig_debug(RIG_DEBUG_VERBOSE, "%s called mode=0x%"PRXll"\n", __func__, mode); if (mode == RIG_MODE_NONE) { From 4b69188f67f26c8d5b93111fce2a24e03ccbad22 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sun, 23 Dec 2018 17:41:10 -0500 Subject: [PATCH 10/11] Fix some 64bit items and add RIG_FUNC_NB2 for TS-890S --- include/hamlib/rig.h | 4 ++-- kenwood/kenwood.c | 45 ++++++++++++++++++++++++++++++++------------ kenwood/kenwood.h | 2 +- kenwood/ts480.c | 4 ++-- tests/sprintflst.c | 8 ++++---- 5 files changed, 42 insertions(+), 21 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 7be7a99aa..95230ff53 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -823,7 +823,7 @@ typedef uint64_t setting_t; #define RIG_FUNC_TBURST (1ULL<<29) /*!< \c TBURST -- 1750 Hz tone burst */ #define RIG_FUNC_TUNER (1ULL<<30) /*!< \c TUNER -- Enable automatic tuner */ #define RIG_FUNC_XIT (1ULL<<31) /*!< \c XIT -- Transmitter Incremental Tuning */ -#define RIG_FUNC_BIT32 (1ULL<<32) /* available for future RIG_FUNC items */ +#define RIG_FUNC_NB2 (1ULL<<32) /*!< \c NB2 -- 2nd Noise Blanker */ #define RIG_FUNC_BIT33 (1ULL<<33) /* available for future RIG_FUNC items */ #define RIG_FUNC_BIT34 (1ULL<<34) /* available for future RIG_FUNC items */ #define RIG_FUNC_BIT35 (1ULL<<35) /* available for future RIG_FUNC items */ @@ -2253,7 +2253,7 @@ rigerror HAMLIB_PARAMS((int errnum)); extern HAMLIB_EXPORT(int) rig_setting2idx HAMLIB_PARAMS((setting_t s)); -#define rig_idx2setting(i) (1UL<<(i)) +#define rig_idx2setting(i) (1ULL<<(i)) /* * Even if these functions are prefixed with "rig_", they are not rig specific diff --git a/kenwood/kenwood.c b/kenwood/kenwood.c index ecfea4b15..8a8010062 100644 --- a/kenwood/kenwood.c +++ b/kenwood/kenwood.c @@ -1449,6 +1449,16 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) return -RIG_EINVAL; } + char c; + if (kmode <= 9) + { + c = '0' + kmode; + } + else + { + c = 'A' + kmode - 10; + } + if (RIG_MODEL_TS990S == rig->caps->rig_model) { /* The TS990s has targetable read mode but can only set the mode @@ -1457,18 +1467,9 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) setting caps.targetable_vfo to not include RIG_TARGETABLE_MODE since the toggle is not required for reading the mode. */ - char c; vfo_t curr_vfo; err = kenwood_get_vfo_main_sub (rig, &curr_vfo); if (err != RIG_OK) return err; - if (kmode <= 9) - { - c = '0' + kmode; - } - else - { - c = 'A' + kmode - 10; - } if (vfo != RIG_VFO_CURR && vfo != curr_vfo) { err = kenwood_set_vfo_main_sub (rig, vfo); @@ -1484,7 +1485,7 @@ int kenwood_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) } else { - snprintf(buf, sizeof (buf), "MD%c", '0' + kmode); + snprintf(buf, sizeof (buf), "MD%c", c); err = kenwood_transaction(rig, buf, NULL, 0); } if (err != RIG_OK) return err; @@ -2026,11 +2027,28 @@ int kenwood_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) if (!rig) return -RIG_EINVAL; - char buf[6]; /* longest cmd is GTxxx */ + char buf[10]; /* longest cmd is GTxxx */ switch (func) { case RIG_FUNC_NB: - snprintf(buf, sizeof (buf), "NB%c", (status == 0) ? '0' : '1'); + case RIG_FUNC_NB2: + /* newer Kenwoods have a second noise blanker */ + if (RIG_MODEL_TS890S == rig->caps->rig_model) { + switch(func) { + case RIG_FUNC_NB: + snprintf(buf, sizeof (buf), "NB1%c", (status == 0) ? '0' : '1'); + break; + case RIG_FUNC_NB2: + snprintf(buf, sizeof (buf), "NB2%c", (status == 0) ? '0' : '1'); + break; + default: + rig_debug(RIG_DEBUG_ERR, "%s: expected 0,1, or 2 and got %d\n", __func__, status); + return -RIG_EINVAL; + } + } + else { + snprintf(buf, sizeof (buf), "NB%c", (status == 0) ? '0' : '1'); + } return kenwood_transaction(rig, buf, NULL, 0); case RIG_FUNC_ABM: @@ -2141,6 +2159,9 @@ int kenwood_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) case RIG_FUNC_NB: return get_kenwood_func(rig, "NB", status); + case RIG_FUNC_NB2: + return get_kenwood_func(rig, "NB2", status); + case RIG_FUNC_ABM: return get_kenwood_func(rig, "AM", status); diff --git a/kenwood/kenwood.h b/kenwood/kenwood.h index 9a1950bfc..c1ca29a0f 100644 --- a/kenwood/kenwood.h +++ b/kenwood/kenwood.h @@ -27,7 +27,7 @@ #include #include "token.h" -#define BACKEND_VER "1.0" +#define BACKEND_VER "1.1" #define EOM_KEN ';' #define EOM_TH '\r' diff --git a/kenwood/ts480.c b/kenwood/ts480.c index 8a5c382a2..2f3a02ecb 100644 --- a/kenwood/ts480.c +++ b/kenwood/ts480.c @@ -423,9 +423,9 @@ const struct rig_caps ts890s_caps = { .rig_model = RIG_MODEL_TS890S, .model_name = "TS-890S", .mfg_name = "Kenwood", - .version = BACKEND_VER ".1", + .version = BACKEND_VER ".2", .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, + .status = RIG_STATUS_BETA, .rig_type = RIG_TYPE_TRANSCEIVER, .ptt_type = RIG_PTT_RIG_MICDATA, .dcd_type = RIG_DCD_RIG, diff --git a/tests/sprintflst.c b/tests/sprintflst.c index fdec2c739..256277d5f 100644 --- a/tests/sprintflst.c +++ b/tests/sprintflst.c @@ -103,7 +103,7 @@ int sprintf_vfo(char *str, vfo_t vfo) int sprintf_mode(char *str, rmode_t mode) { - int i, len = 0; + uint64_t i, len = 0; *str = '\0'; @@ -112,9 +112,9 @@ int sprintf_mode(char *str, rmode_t mode) return 0; } - for (i = 0; i < 30; i++) + for (i = 0; i < 63; i++) { - const char *ms = rig_strrmode(mode & (1UL << i)); + const char *ms = rig_strrmode(mode & (1ULL << i)); if (!ms || !ms[0]) { @@ -132,7 +132,7 @@ int sprintf_mode(char *str, rmode_t mode) int sprintf_func(char *str, setting_t func) { - int i, len = 0; + uint64_t i, len = 0; *str = '\0'; From bf9adaf9def3cf9f3707dce1ddd0b9a736e42a43 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Sun, 23 Dec 2018 18:08:32 -0500 Subject: [PATCH 11/11] Suppress GCC unused-return warning --- winradio/g313-posix.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/winradio/g313-posix.c b/winradio/g313-posix.c index 367d3ba9b..465472162 100644 --- a/winradio/g313-posix.c +++ b/winradio/g313-posix.c @@ -501,19 +501,28 @@ int g313_get_conf(RIG *rig, token_t token, char *val) static void g313_audio_callback(short* buffer, int count, void* arg) { struct g313_priv_data *priv = (struct g313_priv_data*)arg; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-result" write(priv->audio_buf.fd, buffer, count*sizeof(short)); +#pragma GCC diagnostic pop } static void g313_if_callback(short* buffer, int count, void* arg) { struct g313_priv_data *priv = (struct g313_priv_data*)arg; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-result" write(priv->if_buf.fd, buffer, count*sizeof(short)); +#pragma GCC diagnostic pop } static void g313_spectrum_callback(float* buffer, int count, void* arg) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-result" struct g313_priv_data *priv = (struct g313_priv_data*)arg; write(priv->spectrum_buf.fd, buffer, count*sizeof(float)); +#pragma GCC diagnostic pop } const struct rig_caps g313_caps =