kopia lustrzana https://github.com/Hamlib/Hamlib
Merge pull request #435 from mikaelnousiainen/yaesu-ft991-and-ftdx5000-fixes
Yaesu newcat backend fixes for multiple rigspull/436/head
commit
78b469d193
|
@ -495,7 +495,7 @@ typedef unsigned int vfo_t;
|
|||
* \brief Macro for bandpass to be set to normal
|
||||
* \def RIG_PASSBAND_NORMAL
|
||||
*/
|
||||
#define RIG_PASSBAND_NORMAL s_Hz(0) // was 0 but collided with Yasue SH00; capability
|
||||
#define RIG_PASSBAND_NORMAL s_Hz(0) // was 0 but collided with Yaesu SH00; capability
|
||||
|
||||
/**
|
||||
* \brief Macro for bandpass to be left alone
|
||||
|
|
|
@ -112,14 +112,16 @@ const struct rig_caps ftdx1200_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.preamp = { 10, 20, RIG_DBLST_END, },
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
.max_ifshift = Hz(1000),
|
||||
.max_ifshift = Hz(1200),
|
||||
.vfo_ops = FTDX1200_VFO_OPS,
|
||||
.targetable_vfo = RIG_TARGETABLE_FREQ,
|
||||
.transceive = RIG_TRN_OFF, /* May enable later as the 1200 has an Auto Info command */
|
||||
|
@ -172,12 +174,11 @@ const struct rig_caps ftdx1200_caps =
|
|||
{FTDX1200_FM_RX_MODES, kHz(1)}, /* Fast */
|
||||
|
||||
RIG_TS_END,
|
||||
|
||||
},
|
||||
|
||||
/* mode/filter list, .remember = order matters! */
|
||||
.filters = {
|
||||
{FTDX1200_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Normal CW, RTTY, PKT/USER */
|
||||
{FTDX1200_CW_RTTY_PKT_RX_MODES, Hz(1800)}, /* Normal CW, RTTY, PKT/USER */
|
||||
{FTDX1200_CW_RTTY_PKT_RX_MODES, Hz(500)}, /* Narrow CW, RTTY, PKT/USER */
|
||||
{FTDX1200_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */
|
||||
{RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */
|
||||
|
@ -185,8 +186,10 @@ const struct rig_caps ftdx1200_caps =
|
|||
{RIG_MODE_SSB, Hz(4000)}, /* Wide SSB */
|
||||
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
|
||||
{RIG_MODE_AM, Hz(6000)}, /* Narrow AM */
|
||||
{FTDX1200_FM_RX_MODES, Hz(12000)}, /* Normal FM */
|
||||
{FTDX1200_FM_RX_MODES, Hz(8000)}, /* Narrow FM */
|
||||
{FTDX1200_FM_WIDE_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{FTDX1200_FM_WIDE_RX_MODES, Hz(9000)}, /* Narrow FM */
|
||||
{RIG_MODE_FMN, Hz(9000)}, /* Narrow FM */
|
||||
{FTDX1200_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY},
|
||||
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
|
|
@ -34,12 +34,13 @@
|
|||
/* Receiver caps */
|
||||
|
||||
#define FTDX1200_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_FM)
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_FM|RIG_MODE_FMN)
|
||||
|
||||
#define FTDX1200_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
|
||||
#define FTDX1200_AM_RX_MODES (RIG_MODE_AM)
|
||||
#define FTDX1200_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM)
|
||||
#define FTDX1200_FM_WIDE_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM)
|
||||
#define FTDX1200_FM_RX_MODES (FTDX1200_FM_WIDE_RX_MODES|RIG_MODE_FMN)
|
||||
#define FTDX1200_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\
|
||||
RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR)
|
||||
|
||||
|
|
|
@ -40,12 +40,49 @@
|
|||
#include "idx_builtin.h"
|
||||
#include "tones.h"
|
||||
|
||||
/*
|
||||
* ft2000 rigs capabilities.
|
||||
* Also this struct is READONLY!
|
||||
*
|
||||
*/
|
||||
const struct newcat_priv_caps ft2000_priv_caps =
|
||||
{
|
||||
.roofing_filter_count = 7,
|
||||
.roofing_filters =
|
||||
{
|
||||
// The index must match ext level combo index
|
||||
{ .index = 0, .set_value = '0', .get_value = 0, .width = 15000, .optional = 0 },
|
||||
{ .index = 1, .set_value = '1', .get_value = '1', .width = 15000, .optional = 0 },
|
||||
{ .index = 2, .set_value = '2', .get_value = '2', .width = 6000, .optional = 0 },
|
||||
{ .index = 3, .set_value = '3', .get_value = '3', .width = 3000, .optional = 0 },
|
||||
{ .index = 4, .set_value = 0, .get_value = '4', .width = 15000, .optional = 0 },
|
||||
{ .index = 5, .set_value = 0, .get_value = '5', .width = 6000, .optional = 0 },
|
||||
{ .index = 6, .set_value = 0, .get_value = '6', .width = 3000, .optional = 0 },
|
||||
}
|
||||
};
|
||||
|
||||
const struct confparams ft2000_ext_levels[] =
|
||||
{
|
||||
{
|
||||
TOK_ROOFING_FILTER,
|
||||
"ROOFINGFILTER",
|
||||
"Roofing filter",
|
||||
"Roofing filter",
|
||||
NULL,
|
||||
RIG_CONF_COMBO,
|
||||
{ .c = { .combostr = {
|
||||
"AUTO", "15 kHz", "6 kHz", "3 kHz",
|
||||
"AUTO - 15 kHz", "AUTO - 6 kHz", "AUTO - 3 kHz",
|
||||
NULL }
|
||||
} }
|
||||
},
|
||||
{ RIG_CONF_END, NULL, }
|
||||
};
|
||||
|
||||
int ft2000_ext_tokens[] =
|
||||
{
|
||||
TOK_ROOFING_FILTER, TOK_BACKEND_NONE
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* FT-2000 rig capabilities
|
||||
*/
|
||||
const struct rig_caps ft2000_caps =
|
||||
{
|
||||
RIG_MODEL(RIG_MODEL_FT2000),
|
||||
|
@ -78,10 +115,12 @@ const struct rig_caps ft2000_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.preamp = { 10, 17, RIG_DBLST_END, },
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
|
@ -138,7 +177,6 @@ const struct rig_caps ft2000_caps =
|
|||
{FT2000_FM_RX_MODES, kHz(1)}, /* Fast */
|
||||
|
||||
RIG_TS_END,
|
||||
|
||||
},
|
||||
|
||||
/* mode/filter list, .remember = order matters! */
|
||||
|
@ -157,7 +195,10 @@ const struct rig_caps ft2000_caps =
|
|||
RIG_FLT_END,
|
||||
},
|
||||
|
||||
.priv = NULL,
|
||||
.ext_tokens = ft2000_ext_tokens,
|
||||
.extlevels = ft2000_ext_levels,
|
||||
|
||||
.priv = &ft2000_priv_caps,
|
||||
|
||||
.rig_init = newcat_init,
|
||||
.rig_cleanup = newcat_cleanup,
|
||||
|
@ -207,5 +248,7 @@ const struct rig_caps ft2000_caps =
|
|||
.get_trn = newcat_get_trn,
|
||||
.set_channel = newcat_set_channel,
|
||||
.get_channel = newcat_get_channel,
|
||||
.set_ext_level = newcat_set_ext_level,
|
||||
.get_ext_level = newcat_get_ext_level,
|
||||
|
||||
};
|
||||
|
|
|
@ -115,11 +115,13 @@ const struct rig_caps ftdx3000_caps =
|
|||
.has_set_parm = RIG_PARM_NONE,
|
||||
.level_gran = {
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.preamp = { 10, 17, RIG_DBLST_END, },
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
|
@ -138,7 +140,7 @@ const struct rig_caps ftdx3000_caps =
|
|||
|
||||
.rx_range_list1 = {
|
||||
/* General coverage + ham, ANT_5 is RX only antenna */
|
||||
{kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS | RIG_ANT_5, "USA"},
|
||||
{kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS, "USA"},
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
|
@ -152,7 +154,7 @@ const struct rig_caps ftdx3000_caps =
|
|||
},
|
||||
|
||||
.rx_range_list2 = {
|
||||
{kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS | RIG_ANT_5, "EUR"},
|
||||
{kHz(30), MHz(60), FTDX5000_ALL_RX_MODES, -1, -1, FTDX5000_VFO_ALL, FTDX5000_TX_ANTS, "EUR"},
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
|
@ -176,7 +178,6 @@ const struct rig_caps ftdx3000_caps =
|
|||
{FTDX5000_FM_RX_MODES, kHz(1)}, /* Fast */
|
||||
|
||||
RIG_TS_END,
|
||||
|
||||
},
|
||||
|
||||
/* mode/filter list, .remember = order matters! */
|
||||
|
@ -184,13 +185,14 @@ const struct rig_caps ftdx3000_caps =
|
|||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(1800)}, /* Normal CW, RTTY, PKT/USER */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(500)}, /* Narrow CW, RTTY, PKT/USER */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */
|
||||
{RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */
|
||||
{RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */
|
||||
{RIG_MODE_SSB, Hz(3000)}, /* Wide SSB */
|
||||
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
|
||||
{RIG_MODE_AM, Hz(6000)}, /* Narrow AM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(15000)}, /* Normal FM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(8000)}, /* Narrow FM */
|
||||
{RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */
|
||||
{RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */
|
||||
{RIG_MODE_SSB, Hz(4000)}, /* Wide SSB */
|
||||
{FTDX5000_AM_RX_MODES, Hz(9000)}, /* Normal AM */
|
||||
{FTDX5000_AM_RX_MODES, Hz(6000)}, /* Narrow AM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(9000)}, /* Narrow FM */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY},
|
||||
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
|
|
@ -77,11 +77,13 @@ const struct rig_caps ft450_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 400 }, .max = { .i = 800 }, .step = { .i = 100 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, RIG_DBLST_END, }, /* TBC */
|
||||
.attenuator = { 18, RIG_DBLST_END, }, /* TBC */
|
||||
.preamp = { 10, RIG_DBLST_END, }, /* TBC: Not specified in manual */
|
||||
.attenuator = { 20, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(0),
|
||||
.max_ifshift = Hz(1000),
|
||||
|
|
|
@ -110,11 +110,13 @@ const struct rig_caps ftdx5000_caps =
|
|||
.level_gran = {
|
||||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 4000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC: Not specified in manual */
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
|
@ -171,21 +173,21 @@ const struct rig_caps ftdx5000_caps =
|
|||
{FTDX5000_FM_RX_MODES, kHz(1)}, /* Fast */
|
||||
|
||||
RIG_TS_END,
|
||||
|
||||
},
|
||||
|
||||
/* mode/filter list, .remember = order matters! */
|
||||
.filters = {
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(1800)}, /* Normal CW, RTTY, PKT/USER */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(1700)}, /* Normal CW, RTTY, PKT/USER */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(500)}, /* Narrow CW, RTTY, PKT/USER */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES, Hz(2400)}, /* Wide CW, RTTY, PKT/USER */
|
||||
{RIG_MODE_SSB, Hz(2400)}, /* Normal SSB */
|
||||
{RIG_MODE_SSB, Hz(1800)}, /* Narrow SSB */
|
||||
{RIG_MODE_SSB, Hz(3000)}, /* Wide SSB */
|
||||
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
|
||||
{RIG_MODE_AM, Hz(6000)}, /* Narrow AM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(15000)}, /* Normal FM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(8000)}, /* Narrow FM */
|
||||
{RIG_MODE_SSB, Hz(4000)}, /* Wide SSB */
|
||||
{FTDX5000_AM_RX_MODES, Hz(9000)}, /* Normal AM */
|
||||
{FTDX5000_AM_RX_MODES, Hz(6000)}, /* Narrow AM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{FTDX5000_FM_RX_MODES, Hz(9000)}, /* Narrow FM */
|
||||
{FTDX5000_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY},
|
||||
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
|
|
@ -32,13 +32,13 @@
|
|||
|
||||
/* Receiver caps */
|
||||
|
||||
#define FTDX5000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
#define FTDX5000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|\
|
||||
RIG_MODE_FM|RIG_MODE_FMN)
|
||||
|
||||
#define FTDX5000_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
|
||||
#define FTDX5000_AM_RX_MODES (RIG_MODE_AM)
|
||||
#define FTDX5000_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN)
|
||||
#define FTDX5000_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN)
|
||||
#define FTDX5000_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\
|
||||
RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR)
|
||||
|
@ -47,7 +47,7 @@
|
|||
|
||||
#define FTDX5000_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY| \
|
||||
RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN) /* 100 W class */
|
||||
#define FTDX5000_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */
|
||||
#define FTDX5000_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_AMN) /* set 25W max */
|
||||
|
||||
/* TBC */
|
||||
#define FTDX5000_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|\
|
||||
|
@ -100,7 +100,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define FTDX5000_TX_ANTS (RIG_ANT_1|RIG_ANT_2)
|
||||
#define FTDX5000_TX_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4)
|
||||
|
||||
#define FTDX5000_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */
|
||||
#define FTDX5000_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */
|
||||
|
|
|
@ -77,14 +77,16 @@ const struct rig_caps ft891_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.preamp = { 10, RIG_DBLST_END, }, /* TBC */
|
||||
.attenuator = { 12, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
.max_ifshift = Hz(1000),
|
||||
.max_ifshift = Hz(1200),
|
||||
.vfo_ops = FT891_VFO_OPS,
|
||||
.targetable_vfo = RIG_TARGETABLE_FREQ,
|
||||
.transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */
|
||||
|
@ -170,6 +172,7 @@ const struct rig_caps ft891_caps =
|
|||
{RIG_MODE_SSB, Hz(600)}, /* SSB */
|
||||
{RIG_MODE_SSB, Hz(400)}, /* SSB */
|
||||
{RIG_MODE_SSB, Hz(200)}, /* SSB */
|
||||
{FT891_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY },
|
||||
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
|
||||
{RIG_MODE_AM, Hz(6000)}, /* Narrow AM */
|
||||
{FT891_FM_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
|
@ -200,8 +203,6 @@ const struct rig_caps ft891_caps =
|
|||
.get_rit = newcat_get_rit,
|
||||
.set_xit = newcat_set_xit,
|
||||
.get_xit = newcat_get_xit,
|
||||
.set_ant = newcat_set_ant,
|
||||
.get_ant = newcat_get_ant,
|
||||
.get_func = newcat_get_func,
|
||||
.set_func = newcat_set_func,
|
||||
.get_level = newcat_get_level,
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#define FT891_ANTS (RIG_ANT_1|RIG_ANT_2)
|
||||
#define FT891_ANTS (RIG_ANT_CURR)
|
||||
|
||||
#define FT891_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */
|
||||
#define FT891_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */
|
||||
|
|
|
@ -78,11 +78,13 @@ const struct rig_caps ft9000_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.preamp = { 10, RIG_DBLST_END, }, /* TBC: Not specified in manual */
|
||||
.attenuator = { RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
.max_ifshift = Hz(1000),
|
||||
|
|
|
@ -68,14 +68,13 @@
|
|||
RIG_LEVEL_KEYSPD|RIG_LEVEL_AF|RIG_LEVEL_AGC|\
|
||||
RIG_LEVEL_METER|RIG_LEVEL_BKINDL|RIG_LEVEL_SQL|\
|
||||
RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_COMP|\
|
||||
RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF)
|
||||
RIG_LEVEL_ANTIVOX|RIG_LEVEL_NR|RIG_LEVEL_NOTCHF|RIG_LEVEL_MONITOR_GAIN)
|
||||
|
||||
/* TBC */
|
||||
#define FT9000_FUNCS (RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|\
|
||||
RIG_FUNC_MON|RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\
|
||||
RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|RIG_FUNC_MN|\
|
||||
RIG_FUNC_RIT|RIG_FUNC_XIT\
|
||||
)
|
||||
RIG_FUNC_NB|RIG_FUNC_NR|RIG_FUNC_VOX|\
|
||||
RIG_FUNC_FBKIN|RIG_FUNC_COMP|RIG_FUNC_ANF|\
|
||||
RIG_FUNC_RIT|RIG_FUNC_XIT)
|
||||
|
||||
/* TBC */
|
||||
#define FT9000_VFO_OPS (RIG_OP_TUNE|RIG_OP_CPY|RIG_OP_XCHG|\
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
@ -39,12 +38,48 @@
|
|||
#include "ft950.h"
|
||||
#include "idx_builtin.h"
|
||||
|
||||
/*
|
||||
* ft950 rigs capabilities.
|
||||
* Also this struct is READONLY!
|
||||
*
|
||||
*/
|
||||
const struct newcat_priv_caps ft950_priv_caps =
|
||||
{
|
||||
.roofing_filter_count = 7,
|
||||
.roofing_filters =
|
||||
{
|
||||
// The index must match ext level combo index
|
||||
{ .index = 0, .set_value = '0', .get_value = 0, .width = 15000, .optional = 0 },
|
||||
{ .index = 1, .set_value = '1', .get_value = '1', .width = 15000, .optional = 0 },
|
||||
{ .index = 2, .set_value = '2', .get_value = '2', .width = 6000, .optional = 0 },
|
||||
{ .index = 3, .set_value = '3', .get_value = '3', .width = 3000, .optional = 0 },
|
||||
{ .index = 4, .set_value = 0, .get_value = '4', .width = 15000, .optional = 0 },
|
||||
{ .index = 5, .set_value = 0, .get_value = '5', .width = 6000, .optional = 0 },
|
||||
{ .index = 6, .set_value = 0, .get_value = '6', .width = 3000, .optional = 0 },
|
||||
}
|
||||
};
|
||||
|
||||
const struct confparams ft950_ext_levels[] =
|
||||
{
|
||||
{
|
||||
TOK_ROOFING_FILTER,
|
||||
"ROOFINGFILTER",
|
||||
"Roofing filter",
|
||||
"Roofing filter",
|
||||
NULL,
|
||||
RIG_CONF_COMBO,
|
||||
{ .c = { .combostr = {
|
||||
"AUTO", "15 kHz", "6 kHz", "3 kHz",
|
||||
"AUTO - 15 kHz", "AUTO - 6 kHz", "AUTO - 3 kHz",
|
||||
NULL }
|
||||
} }
|
||||
},
|
||||
{ RIG_CONF_END, NULL, }
|
||||
};
|
||||
|
||||
int ft950_ext_tokens[] =
|
||||
{
|
||||
TOK_ROOFING_FILTER, TOK_BACKEND_NONE
|
||||
};
|
||||
|
||||
/*
|
||||
* FT-950 rig capabilities
|
||||
*/
|
||||
const struct rig_caps ft950_caps =
|
||||
{
|
||||
RIG_MODEL(RIG_MODEL_FT950),
|
||||
|
@ -77,10 +112,12 @@ const struct rig_caps ft950_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3000 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.preamp = { 10, 17, RIG_DBLST_END, },
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
|
@ -140,7 +177,6 @@ const struct rig_caps ft950_caps =
|
|||
{FT950_FM_RX_MODES, kHz(1)}, /* Fast */
|
||||
|
||||
RIG_TS_END,
|
||||
|
||||
},
|
||||
|
||||
/* mode/filter list, .remember = order matters! */
|
||||
|
@ -177,22 +213,25 @@ const struct rig_caps ft950_caps =
|
|||
{RIG_MODE_SSB, Hz(200)}, /* SSB */
|
||||
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
|
||||
{RIG_MODE_AM, Hz(6000)}, /* Narrow AM */
|
||||
{FT950_FM_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{FT950_FM_RX_MODES, Hz(9000)}, /* Narrow FM */
|
||||
{FT950_FM_WIDE_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{FT950_FM_WIDE_RX_MODES, Hz(9000)}, /* Narrow FM */
|
||||
{RIG_MODE_FMN, Hz(9000)}, /* Narrow FM */
|
||||
{FT950_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY},
|
||||
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
||||
.ext_tokens = ft950_ext_tokens,
|
||||
.extlevels = ft950_ext_levels,
|
||||
|
||||
|
||||
.priv = NULL, /* private data FIXME: */
|
||||
.priv = &ft950_priv_caps,
|
||||
|
||||
.rig_init = newcat_init,
|
||||
.rig_cleanup = newcat_cleanup,
|
||||
.rig_open = newcat_open, /* port opened */
|
||||
.rig_close = newcat_close, /* port closed */
|
||||
|
||||
.cfgparams = newcat_cfg_params,
|
||||
.cfgparams = newcat_cfg_params,
|
||||
.set_conf = newcat_set_conf,
|
||||
.get_conf = newcat_get_conf,
|
||||
.set_freq = newcat_set_freq,
|
||||
|
@ -235,5 +274,7 @@ const struct rig_caps ft950_caps =
|
|||
.get_trn = newcat_get_trn,
|
||||
.set_channel = newcat_set_channel,
|
||||
.get_channel = newcat_get_channel,
|
||||
.set_ext_level = newcat_set_ext_level,
|
||||
.get_ext_level = newcat_get_ext_level,
|
||||
|
||||
};
|
||||
|
|
|
@ -38,19 +38,20 @@
|
|||
/* Receiver caps */
|
||||
|
||||
#define FT950_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM)
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_FMN)
|
||||
#define FT950_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
|
||||
#define FT950_AM_RX_MODES (RIG_MODE_AM)
|
||||
#define FT950_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM)
|
||||
#define FT950_FM_WIDE_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM)
|
||||
#define FT950_FM_RX_MODES (FT950_FM_WIDE_RX_MODES|RIG_MODE_FMN)
|
||||
#define FT950_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR)
|
||||
#define FT950_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\
|
||||
RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR)
|
||||
|
||||
/* TRX caps */
|
||||
|
||||
#define FT950_OTHER_TX_MODES (RIG_MODE_CW| RIG_MODE_USB| RIG_MODE_LSB ) /* 100 W class */
|
||||
#define FT950_AM_TX_MODES (RIG_MODE_AM ) /* set 25W max */
|
||||
#define FT950_OTHER_TX_MODES (RIG_MODE_CW| RIG_MODE_USB| RIG_MODE_LSB) /* 100 W class */
|
||||
#define FT950_AM_TX_MODES (RIG_MODE_AM) /* set 25W max */
|
||||
|
||||
#define FT950_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_PREAMP|\
|
||||
RIG_LEVEL_ALC|RIG_LEVEL_RAWSTR|RIG_LEVEL_SWR|\
|
||||
|
|
|
@ -76,14 +76,16 @@ const struct rig_caps ft991_caps =
|
|||
// cppcheck-suppress *
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 50 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = common_dcs_list,
|
||||
.preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */
|
||||
.attenuator = { 6, 12, 18, RIG_DBLST_END, },
|
||||
.preamp = { 10, 20, RIG_DBLST_END, },
|
||||
.attenuator = { 12, RIG_DBLST_END, },
|
||||
.max_rit = Hz(9999),
|
||||
.max_xit = Hz(9999),
|
||||
.max_ifshift = Hz(1000),
|
||||
.max_ifshift = Hz(1200),
|
||||
.vfo_ops = FT991_VFO_OPS,
|
||||
.targetable_vfo = RIG_TARGETABLE_FREQ,
|
||||
.transceive = RIG_TRN_OFF, /* May enable later as the 950 has an Auto Info command */
|
||||
|
@ -161,10 +163,11 @@ const struct rig_caps ft991_caps =
|
|||
{RIG_MODE_SSB, Hz(600)}, /* SSB */
|
||||
{RIG_MODE_SSB, Hz(400)}, /* SSB */
|
||||
{RIG_MODE_SSB, Hz(200)}, /* SSB */
|
||||
{FT991_CW_RTTY_PKT_RX_MODES | RIG_MODE_SSB, RIG_FLT_ANY },
|
||||
{RIG_MODE_AM, Hz(9000)}, /* Normal AM */
|
||||
{RIG_MODE_AMN, Hz(6000)}, /* Narrow AM */
|
||||
{FT991_FM_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{FT991_FM_RX_MODES, Hz(9000)}, /* Narrow FM */
|
||||
{RIG_MODE_AMN, Hz(6000)}, /* Narrow AM */
|
||||
{FT991_FM_WIDE_RX_MODES, Hz(16000)}, /* Normal FM */
|
||||
{RIG_MODE_FMN, Hz(9000)}, /* Narrow FM */
|
||||
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
@ -192,8 +195,6 @@ const struct rig_caps ft991_caps =
|
|||
.get_rit = newcat_get_rit,
|
||||
.set_xit = newcat_set_xit,
|
||||
.get_xit = newcat_get_xit,
|
||||
.set_ant = newcat_set_ant,
|
||||
.get_ant = newcat_get_ant,
|
||||
.get_func = newcat_get_func,
|
||||
.set_func = newcat_set_func,
|
||||
.get_level = newcat_get_level,
|
||||
|
|
|
@ -38,7 +38,8 @@
|
|||
#define FT991_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|\
|
||||
RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB)
|
||||
#define FT991_AM_RX_MODES (RIG_MODE_AM|RIG_MODE_AMN)
|
||||
#define FT991_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_FMN|RIG_MODE_C4FM)
|
||||
#define FT991_FM_WIDE_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_C4FM)
|
||||
#define FT991_FM_RX_MODES (FT991_FM_WIDE_RX_MODES|RIG_MODE_FMN)
|
||||
#define FT991_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_CWR)
|
||||
#define FT991_CW_RTTY_PKT_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR|\
|
||||
RIG_MODE_PKTUSB|RIG_MODE_PKTLSB|RIG_MODE_CW|RIG_MODE_CWR)
|
||||
|
|
|
@ -104,6 +104,8 @@ const struct rig_caps ftdx101d_caps =
|
|||
.level_gran = {
|
||||
[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
|
||||
[LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 1050 }, .step = { .i = 10 } },
|
||||
[LVL_KEYSPD] = { .min = { .i = 4 }, .max = { .i = 60 }, .step = { .i = 1 } },
|
||||
[LVL_NOTCHF] = { .min = { .i = 1 }, .max = { .i = 3200 }, .step = { .i = 10 } },
|
||||
},
|
||||
.ctcss_list = common_ctcss_list,
|
||||
.dcs_list = NULL,
|
||||
|
@ -125,7 +127,7 @@ const struct rig_caps ftdx101d_caps =
|
|||
|
||||
.rx_range_list1 = {
|
||||
/* General coverage + ham, ANT_5 is RX only antenna */
|
||||
{kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS | RIG_ANT_5, "USA"},
|
||||
{kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS, "USA"},
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
|
@ -139,7 +141,7 @@ const struct rig_caps ftdx101d_caps =
|
|||
},
|
||||
|
||||
.rx_range_list2 = {
|
||||
{kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS | RIG_ANT_5, "EUR"},
|
||||
{kHz(30), MHz(60), FTDX101_ALL_RX_MODES, -1, -1, FTDX101_VFO_ALL, FTDX101_TX_ANTS, "EUR"},
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
* Other features (used by rig_caps)
|
||||
*/
|
||||
|
||||
#define FTDX101_TX_ANTS (RIG_ANT_1|RIG_ANT_2)
|
||||
#define FTDX101_TX_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3)
|
||||
|
||||
#define FTDX101_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */
|
||||
#define FTDX101_OP_DATA_LENGTH 19 /* 0x10 P1 = 03 return size */
|
||||
|
|
1953
rigs/yaesu/newcat.c
1953
rigs/yaesu/newcat.c
Plik diff jest za duży
Load Diff
43
src/misc.c
43
src/misc.c
|
@ -49,6 +49,7 @@
|
|||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <hamlib/rig.h>
|
||||
#include <hamlib/amplifier.h>
|
||||
|
@ -230,6 +231,48 @@ unsigned long long HAMLIB_API from_bcd_be(const unsigned char bcd_data[],
|
|||
return f;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Convert duration of one morse code dot (element) to milliseconds at the given speed.
|
||||
* \param wpm morse code speed in words per minute
|
||||
* \return double duration in milliseconds
|
||||
*
|
||||
* The morse code speed is calculated using the standard based on word PARIS.
|
||||
*
|
||||
* "If you send PARIS 5 times in a minute (5WPM) you have sent 250 elements (using correct spacing).
|
||||
* 250 elements into 60 seconds per minute = 240 milliseconds per element."
|
||||
*
|
||||
* Source: http://kent-engineers.com/codespeed.htm
|
||||
*/
|
||||
double morse_code_dot_to_millis(int wpm)
|
||||
{
|
||||
return 240.0 * (5.0 / (double) wpm);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Convert duration of tenths of morse code dots to milliseconds at the given speed.
|
||||
* \param tenths_of_dots number of 1/10ths of dots
|
||||
* \param wpm morse code speed in words per minute
|
||||
* \return int duration in milliseconds
|
||||
*
|
||||
* The morse code speed is calculated using the standard based on word PARIS.
|
||||
*/
|
||||
int dot10ths_to_millis(int dot10ths, int wpm)
|
||||
{
|
||||
return ceil(morse_code_dot_to_millis(wpm) * (double) dot10ths / 10.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Convert duration in milliseconds to tenths of morse code dots at the given speed.
|
||||
* \param millis duration in milliseconds
|
||||
* \param wpm morse code speed in words per minute
|
||||
* \return int number of 1/10ths of dots
|
||||
*
|
||||
* The morse code speed is calculated using the standard based on word PARIS.
|
||||
*/
|
||||
int millis_to_dot10ths(int millis, int wpm)
|
||||
{
|
||||
return ceil(millis / morse_code_dot_to_millis(wpm) * 10.0);
|
||||
}
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
#ifndef llabs
|
||||
|
|
|
@ -72,6 +72,10 @@ extern HAMLIB_EXPORT(unsigned long long) from_bcd_be(const unsigned char
|
|||
bcd_data[],
|
||||
unsigned bcd_len);
|
||||
|
||||
extern HAMLIB_EXPORT(double) morse_code_dot_to_millis(int wpm);
|
||||
extern HAMLIB_EXPORT(int) dot10ths_to_millis(int dot10ths, int wpm);
|
||||
extern HAMLIB_EXPORT(int) millis_to_dot10ths(int millis, int wpm);
|
||||
|
||||
extern HAMLIB_EXPORT(int) sprintf_freq(char *str, freq_t);
|
||||
|
||||
/* flag that determines if AI mode should be restored on exit on
|
||||
|
|
Ładowanie…
Reference in New Issue