Exemplo n.º 1
0
/* 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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
Arquivo: ft897.c Projeto: W4AQL/hamlib
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;
}
Exemplo n.º 4
0
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;
}
Exemplo n.º 5
0
Arquivo: ft897.c Projeto: W4AQL/hamlib
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;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
0
Arquivo: ft897.c Projeto: W4AQL/hamlib
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;
}
Exemplo n.º 11
0
Arquivo: ft897.c Projeto: W4AQL/hamlib
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;
}
Exemplo n.º 12
0
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;
}
Exemplo n.º 13
0
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;
}
Exemplo n.º 14
0
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;
}
Exemplo n.º 15
0
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;
}