Beispiel #1
0
int ft847_set_ctcss_tone (RIG *rig, vfo_t vfo, tone_t tone)
{
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int i, ret;

  /*
   * 39 CTCSS CAT codes corresponding to ft847_ctcss_list
   */
  static const unsigned char ft847_ctcss_cat[] = {
  0x3F, 0x39, 0x1F, 0x3E, 0x0F, 0x3D, 0x1E, 0x3C, 0x0E, 0x3B,
  0x1D, 0x3A, 0x0D, 0x1C, 0x0C, 0x1B, 0x0B, 0x1A, 0x0A, 0x19,
  0x09, 0x18, 0x08, 0x17, 0x07, 0x16, 0x06, 0x15, 0x05, 0x14,
  0x04, 0x13, 0x03, 0x12, 0x02, 0x11, 0x01, 0x10, 0x00,
  };

  ret = opcode_vfo(rig, p_cmd, FT_847_NATIVE_CAT_SET_CTCSS_FREQ_MAIN, vfo);
  if (ret != RIG_OK)
	  return ret;

#define FT847_CTCSS_NB 39

  for (i = 0; i<FT847_CTCSS_NB; i++)
  {
     if (ft847_ctcss_list[i] == tone)
        break;
  }
  if (i == FT847_CTCSS_NB)
     return -RIG_EINVAL;

  /* get associated CAT code */
  p_cmd[0] = ft847_ctcss_cat[i];

  return write_block(&rig->state.rigport, (char*)p_cmd, YAESU_CMD_LENGTH);
}
Beispiel #2
0
int ft847_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
{
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int ret;
  ft847_native_cmd_t fcmd;

  if (!rig)
    return -RIG_EINVAL;

  switch (func) {
     case RIG_FUNC_TONE:
        fcmd = status ? FT_847_NATIVE_CAT_SET_CTCSS_ENC_ON_MAIN :
           FT_847_NATIVE_CAT_SET_CTCSS_DCS_OFF_MAIN;
        break;

     case RIG_FUNC_TSQL:
        fcmd = status ? FT_847_NATIVE_CAT_SET_CTCSS_ENC_DEC_ON_MAIN :
           FT_847_NATIVE_CAT_SET_CTCSS_DCS_OFF_MAIN;
        break;

     default:
        return -RIG_EINVAL;
  }

  ret = opcode_vfo(rig, p_cmd, fcmd, vfo);
  if (ret != RIG_OK)
	  return ret;

  return write_block(&rig->state.rigport, (char*)p_cmd, YAESU_CMD_LENGTH);
}
Beispiel #3
0
int ft847_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
  struct rig_state *rig_s;
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int ret;

  if (!rig)
    return -RIG_EINVAL;

  rig_s = &rig->state;

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: requested freq = %"PRIfreq" Hz, vfo=%s\n",
		  freq, rig_strvfo(vfo));

  ret = opcode_vfo(rig, p_cmd, FT_847_NATIVE_CAT_SET_FREQ_MAIN, vfo);
  if (ret != RIG_OK)
	  return ret;

  to_bcd_be(p_cmd,freq/10,8);	/* store bcd format in in p_cmd */

  rig_debug(RIG_DEBUG_VERBOSE,"%s: requested freq after conversion = %"PRIll" Hz \n", __func__, from_bcd_be(p_cmd,8)* 10 );

  if (rig->caps->rig_model == RIG_MODEL_FT847UNI) {
    struct ft847_priv_data *priv = (struct ft847_priv_data*)rig->state.priv;
    if (vfo == RIG_VFO_MAIN) {
      priv->freqA = freq;
      rig_debug(RIG_DEBUG_TRACE,"%s: freqA=%"PRIfreq"\n", __func__, priv->freqA);
    }
    else {
      priv->freqB = freq;
      rig_debug(RIG_DEBUG_TRACE,"%s: freqB=%"PRIfreq"\n", __func__, priv->freqB);
    }
  }

  return write_block(&rig_s->rigport, (char*)p_cmd, YAESU_CMD_LENGTH);
}
Beispiel #4
0
int ft847_set_dcs_sql (RIG *rig, vfo_t vfo, tone_t code)
{
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int ret;

  ret = opcode_vfo(rig, p_cmd, FT_847_NATIVE_CAT_SET_DCS_CODE_MAIN, vfo);
  if (ret != RIG_OK)
	  return ret;

  /* TODO: FT_847_NATIVE_CAT_SET_DCS_ON_MAIN here or with new RIG_FUNC_DCS? */

  /* DCS Code # (i.e. 07, 54=DCS Code 754) */
  to_bcd_be(p_cmd, code,4);	/* store bcd format in in p_cmd */

  return write_block(&rig->state.rigport, (char*)p_cmd, YAESU_CMD_LENGTH);

}
Beispiel #5
0
int ft847_set_freq(RIG *rig, vfo_t vfo, freq_t freq) {
  struct rig_state *rig_s;
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int ret;

  if (!rig)
    return -RIG_EINVAL;

  rig_s = &rig->state;

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: requested freq = %"PRIfreq" Hz, vfo=%s\n",
		  freq, rig_strvfo(vfo));

  ret = opcode_vfo(rig, p_cmd, FT_847_NATIVE_CAT_SET_FREQ_MAIN, vfo);
  if (ret != RIG_OK)
	  return ret;

  to_bcd_be(p_cmd,freq/10,8);	/* store bcd format in in p_cmd */

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: requested freq after conversion = %"PRIll" Hz \n", from_bcd_be(p_cmd,8)* 10 );

  return write_block(&rig_s->rigport, (char*)p_cmd, YAESU_CMD_LENGTH);
}
Beispiel #6
0
int ft847_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) {
  unsigned char cmd_index;	/* index of sequence to send */
  struct rig_state *rs = &rig->state;
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int ret;

  /*
   * translate mode from generic to ft847 specific
   */

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: generic mode = %x \n", mode);


  switch(mode) {
  case RIG_MODE_AM:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_AM;
    break;
  case RIG_MODE_CW:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CW;
    break;
  case RIG_MODE_CWR:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CWR;
    break;
  case RIG_MODE_USB:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_USB;
    break;
  case RIG_MODE_LSB:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_LSB;
    break;
  case RIG_MODE_FM:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_FM;
    break;
  default:
    return -RIG_EINVAL;		/* sorry, wrong MODE */
  }


  /*
   * Now set width
   */
  if (width != RIG_PASSBAND_NOCHANGE) {
    if (width == rig_passband_narrow(rig, mode)) {
      switch(mode) {
      case RIG_MODE_AM:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_AMN;
        break;
      case RIG_MODE_FM:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_FMN;
        break;
      case RIG_MODE_CW:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CWN;
        break;
      case RIG_MODE_CWR:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CWRN;
        break;
      case RIG_MODE_USB:
      case RIG_MODE_LSB:
        break;
      default:
        rig_debug(RIG_DEBUG_ERR,"%s: unsupported mode/width: %s/%d, narrow: %d\n",
                  __FUNCTION__, rig_strrmode(mode), width,
                  rig_passband_narrow(rig, mode));
        return -RIG_EINVAL;		/* sorry, wrong MODE/WIDTH combo  */
      }
    } else {
  		if (width != RIG_PASSBAND_NORMAL &&
          width != rig_passband_normal(rig, mode)) {
        return -RIG_EINVAL;		/* sorry, wrong MODE/WIDTH combo  */
      }
    }
  }

  /*
   * Now send the command
   */
  ret = opcode_vfo(rig, p_cmd, cmd_index, vfo);
  if (ret != RIG_OK)
	  return ret;

  return write_block(&rs->rigport, (char*)p_cmd, YAESU_CMD_LENGTH);
}
Beispiel #7
0
static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
				pbwidth_t *width) {
  struct rig_state *rs = &rig->state;
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  unsigned char cmd_index;	/* index of sequence to send */
  unsigned char data[8];
  int n;

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: %s vfo =%s \n",
		  __func__, rig_strvfo(vfo));

  cmd_index = FT_847_NATIVE_CAT_GET_FREQ_MODE_STATUS_MAIN;

  memcpy(p_cmd,&ncmd[cmd_index].nseq,YAESU_CMD_LENGTH);

  /* change opcode according to vfo */
  n = opcode_vfo(rig, p_cmd, cmd_index, vfo);
  if (n != RIG_OK)
	  return n;

  n = write_block(&rs->rigport, (char *) p_cmd, YAESU_CMD_LENGTH);
  if (n < 0)
    return n;

  n = read_block(&rs->rigport, (char *) data, YAESU_CMD_LENGTH);
  if (n != YAESU_CMD_LENGTH) {
  		rig_debug(RIG_DEBUG_ERR,"ft847: read_block returned %d\n", n);
		return n < 0 ? n : -RIG_EPROTO;
  }

	/* Remember, this is 10Hz resolution */
  *freq = 10*from_bcd_be(data, 8);

  *width = RIG_PASSBAND_NORMAL;
  switch (data[4]) {
  case MD_LSB: *mode = RIG_MODE_LSB; break;
  case MD_USB: *mode = RIG_MODE_USB; break;

  case MD_CWN:
		*width = rig_passband_narrow(rig, RIG_MODE_CW);
  case MD_CW:
		*mode = RIG_MODE_CW;
		break;

  case MD_CWNR:
		*width = rig_passband_narrow(rig, RIG_MODE_CW);
  case MD_CWR:
		*mode = RIG_MODE_CWR;
		break;

  case MD_AMN:
		*width = rig_passband_narrow(rig, RIG_MODE_AM);
  case MD_AM:
		*mode = RIG_MODE_AM;
		break;

  case MD_FMN:
		*width = rig_passband_narrow(rig, RIG_MODE_FM);
  case MD_FM:
		*mode = RIG_MODE_FM;
		break;
  default:
    *mode = RIG_MODE_NONE;
    rig_debug(RIG_DEBUG_VERBOSE,"ft847: Unknown mode %02x\n", data[4]);
  }
  if (*width == RIG_PASSBAND_NORMAL)
		  *width = rig_passband_normal(rig, *mode);

  return RIG_OK;
}