/* frontend will always use RAWSTR+cal_table */ static int ft817_get_smeter_level(RIG *rig, value_t *val) { struct ft817_priv_data *p = (struct ft817_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->rx_status_tv)) if ((n = ft817_get_status(rig, FT817_NATIVE_CAT_GET_RX_STATUS)) < 0) return n; //n = (p->rx_status & 0x0F) - 9; //val->i = n * ((n > 0) ? 10 : 6); /* S-meter value is returned in the lower 4 bits. 0x00 = S0 (-54dB) 0x01 = S1 0x02 = S2 ... 0x09 = S9 (0dB) 0x0A = S9+10 (10dB) 0x0B = S9+20 and so on */ n = (p->rx_status & 0x0F); if (n < 0x0A) { val->i = (6*n)-54; } else { val->i = 10*(n-9); } return RIG_OK; }
int ft857_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->tx_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_TX_STATUS)) < 0) return n; if (p->tx_status & 0x80) { // TX status not valid when in RX unsigned char c; if ((n = ft857_read_eeprom(rig, 0x008d, &c)) < 0) /* get split status */ return n; *split = (c & 0x80) ? RIG_SPLIT_ON : RIG_SPLIT_OFF; } else { *split = (p->tx_status & 0x20) ? RIG_SPLIT_ON : RIG_SPLIT_OFF; } return RIG_OK; }
int ft897_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { struct ft897_priv_data *p = (struct ft897_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->fm_status_tv)) if ((n = ft897_get_status(rig, FT897_NATIVE_CAT_GET_FREQ_MODE_STATUS)) < 0) return n; switch (p->fm_status[4]) { case 0x00: *mode = RIG_MODE_LSB; break; case 0x01: *mode = RIG_MODE_USB; break; case 0x02: case 0x82: *mode = RIG_MODE_CW; break; case 0x03: case 0x83: *mode = RIG_MODE_CWR; break; case 0x04: *mode = RIG_MODE_AM; break; case 0x06: *mode = RIG_MODE_WFM; break; case 0x08: case 0x88: *mode = RIG_MODE_FM; break; case 0x0a: case 0x8a: *mode = RIG_MODE_RTTY; break; case 0x0c: case 0x8c: *mode = RIG_MODE_PKTFM; break; default: *mode = RIG_MODE_NONE; } *width = RIG_PASSBAND_NORMAL; return RIG_OK; }
static int ft857_get_smeter_level(RIG *rig, value_t *val) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->rx_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_RX_STATUS)) < 0) return n; val->i = n = (p->rx_status & 0x0F) * 6 - 20; // Convert S level to dB return RIG_OK; }
static int ft897_get_rawstr_level(RIG *rig, value_t *val) { struct ft897_priv_data *p = (struct ft897_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->rx_status_tv)) if ((n = ft897_get_status(rig, FT897_NATIVE_CAT_GET_RX_STATUS)) < 0) return n; val->i = p->rx_status & 0x0F; return RIG_OK; }
static int ft857_get_smeter_level(RIG *rig, value_t *val) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->rx_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_RX_STATUS)) < 0) return n; n = (p->rx_status & 0x0F); // S level returned if (n >= 9) val->i = (n-9)*10; else val->i = n*6-54; return RIG_OK; }
int ft857_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->tx_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_TX_STATUS)) < 0) return n; *ptt = ((p->tx_status & 0x80) == 0); return RIG_OK; }
int ft857_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->fm_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_FREQ_MODE_STATUS)) < 0) return n; get_mode (rig, p, mode, width); return RIG_OK; }
int ft857_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->fm_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_FREQ_MODE_STATUS)) < 0) return n; *freq = from_bcd_be(p->fm_status, 8) * 10; return -RIG_OK; }
int ft897_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo) { struct ft897_priv_data *p = (struct ft897_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->tx_status_tv)) if ((n = ft897_get_status(rig, FT897_NATIVE_CAT_GET_TX_STATUS)) < 0) return n; *split = ((p->tx_status & 0x20) == 0) ? RIG_SPLIT_ON : RIG_SPLIT_OFF; return RIG_OK; }
static int ft897_get_swr_level(RIG *rig, value_t *val) { struct ft897_priv_data *p = (struct ft897_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->tx_status_tv)) if ((n = ft897_get_status(rig, FT897_NATIVE_CAT_GET_TX_STATUS)) < 0) return n; /* Valid only if PTT is on */ if ((p->tx_status & 0x80) == 0) val->f = p->tx_status & 0x40 ? 30.0 : 1.0; /* or infinity? */ else val->f = 0.0; return RIG_OK; }
int ft857_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->rx_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_RX_STATUS)) < 0) return n; /* TODO: consider bit 6 too ??? (CTCSS/DCS code match) */ if (p->rx_status & 0x80) *dcd = RIG_DCD_OFF; else *dcd = RIG_DCD_ON; return RIG_OK; }
static int ft857_get_pometer_level(RIG *rig, value_t *val) { struct ft857_priv_data *p = (struct ft857_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->tx_status_tv)) if ((n = ft857_get_status(rig, FT857_NATIVE_CAT_GET_TX_STATUS)) < 0) return n; /* Valid only if PTT is on */ if ((p->tx_status & 0x80) == 0) { // convert watts to dBm val->i = 10 * log10(p->tx_status & 0x0F) + 30; // now convert to db over S9 val->i += 73; } else val->i = -911; // invalid value return return RIG_OK; }
static int ft817_get_pometer_level(RIG *rig, value_t *val) { struct ft817_priv_data *p = (struct ft817_priv_data *) rig->state.priv; int n; if (check_cache_timeout(&p->tx_status_tv)) if ((n = ft817_get_status(rig, FT817_NATIVE_CAT_GET_TX_STATUS)) < 0) return n; /* Valid only if PTT is on. FT-817 returns the number of bars in the lowest 4 bits */ if ((p->tx_status & 0x80) == 0) { /* the rig has 10 bars on its display */ val->f = (p->tx_status & 0x0F) / 10.0; } else { val->f = 0.0; } return RIG_OK; }
int ft817_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { struct ft817_priv_data *p = (struct ft817_priv_data *) rig->state.priv; int n; if (vfo != RIG_VFO_CURR) return -RIG_ENTARGET; if (check_cache_timeout(&p->fm_status_tv)) if ((n = ft817_get_status(rig, FT817_NATIVE_CAT_GET_FREQ_MODE_STATUS)) < 0) return n; /* set normal width now, narrow will override this later */ *width = RIG_PASSBAND_NORMAL; switch (p->fm_status[4]) { case 0x00: *mode = RIG_MODE_LSB; break; case 0x01: *mode = RIG_MODE_USB; break; case 0x02: *mode = RIG_MODE_CW; break; case 0x03: *mode = RIG_MODE_CWR; break; case 0x04: *mode = RIG_MODE_AM; break; case 0x06: *mode = RIG_MODE_WFM; break; case 0x08: *mode = RIG_MODE_FM; break; case 0x0A: *mode = RIG_MODE_RTTY; break; case 0x0C: *mode = RIG_MODE_PKTFM; break; /* "extra modes" which are not documented in the manual */ case 0x82: *mode = RIG_MODE_CW; *width = rig_passband_narrow (rig, RIG_MODE_CW); break; case 0x83: *mode = RIG_MODE_CWR; *width = rig_passband_narrow (rig, RIG_MODE_CW); break; case 0x8A: *mode = RIG_MODE_RTTY; *width = rig_passband_narrow (rig, RIG_MODE_CW); break; default: *mode = RIG_MODE_NONE; } return RIG_OK; }