Exemple #1
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;
}
Exemple #2
0
int main (int argc, char *argv[])
{
	unsigned char b[(MAXDIGITS+1)/2];
	freq_t f=0;
	int digits = 10;
	int i;

	if (argc != 2 && argc != 3) {
			fprintf(stderr,"Usage: %s <freq> [digits]\n",argv[0]);
			exit(1);
	}

	f = (freq_t)atoll(argv[1]);
	if (argc > 2) {
		digits = atoi(argv[2]);
		if (digits > MAXDIGITS)
			exit(1);
	}

	printf("Little Endian mode\n");
	printf("Frequency: %"PRIfreq"\n",f);
	to_bcd(b, f, digits);
	printf("BCD: %2.2x",b[0]);
	for (i = 1; i < (digits+1)/2; i++)
		printf(",%2.2x",b[i]);
	printf("\nResult after recoding: %llu\n", from_bcd(b, digits));

	printf("\nBig Endian mode\n");
	printf("Frequency: %"PRIfreq"\n",f);
	to_bcd_be(b, f, digits);
	printf("BCD: %2.2x",b[0]);
	for (i = 1; i < (digits+1)/2; i++)
		printf(",%2.2x",b[i]);
	printf("\nResult after recoding: %llu\n", from_bcd_be(b, digits));

	return 0;
}
Exemple #3
0
/*
 * optoscan_get_dcs_code
 * Assumes rig!=NULL, rig->state.priv!=NULL
 */
int optoscan_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code)
{
	unsigned char tonebuf[MAXFRAMELEN];
	int tone_len, retval;

	retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDCS, NULL, 0,
				  tonebuf, &tone_len);

	if (retval != RIG_OK)
		return retval;

	if (tone_len != 4) {
		rig_debug(RIG_DEBUG_ERR, "optoscan_get_dcs_code: ack NG (%#.2x), "
			  "len=%d\n", tonebuf[0], tone_len);
		return -RIG_ERJCTED;
	}

	tone_len -= 2;

	*code = from_bcd_be(tonebuf + 2, tone_len * 2);
	rig_debug(RIG_DEBUG_ERR, "optoscan_get_dcs_code: *code=%d\n", *code);

	return RIG_OK;
}
Exemple #4
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;
}
Exemple #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);
}
Exemple #6
0
/*
 * optoscan_get_level
 * Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL
 */
int optoscan_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
	struct optostat status_block;
	unsigned char lvlbuf[MAXFRAMELEN];
	int lvl_len = 0;
	int lvl_cn, lvl_sc;		/* Command Number, Subcommand */
	int icom_val;
	int cmdhead;
	int retval;

	if (level != RIG_LEVEL_AF) {
		switch (level) {
		case RIG_LEVEL_RAWSTR:
			lvl_cn = C_RD_SQSM;
			lvl_sc = S_SML;
			break;

		default:
			rig_debug(RIG_DEBUG_ERR, "Unsupported get_level %d", level);
			return -RIG_EINVAL;
		}

		retval = icom_transaction(rig, lvl_cn, lvl_sc, NULL, 0,
					  lvlbuf, &lvl_len);

		if (retval != RIG_OK)
			return retval;

		/*
		 * strbuf should contain Cn,Sc,Data area
		 */
		cmdhead = (lvl_sc == -1) ? 1 : 2;
		lvl_len -= cmdhead;

		if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) {
			rig_debug(RIG_DEBUG_ERR, "optoscan_get_level: ack NG (%#.2x), "
				  "len=%d\n", lvlbuf[0], lvl_len);
			return -RIG_ERJCTED;
		}

		/*
		 * The result is a 3 digit BCD, but in *big endian* order: 0000..0255
		 * (from_bcd is little endian)
		 */
		icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2);
	} else { /* level == RIG_LEVEL_AF */
		retval = optoscan_get_status_block(rig, &status_block);

		if (retval != RIG_OK)
			return retval;

		icom_val = 0;

		if (status_block.speaker_enabled == 1)
			icom_val = 255;
	}

	switch (level) {
	case RIG_LEVEL_RAWSTR:
		val->i = icom_val;
		break;

	default:
		if (RIG_LEVEL_IS_FLOAT(level))
			val->f = (float)icom_val / 255;
		else
			val->i = icom_val;
	}

	rig_debug(RIG_DEBUG_TRACE, "optoscan_get_level: %d %d %d %f\n", lvl_len,
		  icom_val, val->i, val->f);

	return RIG_OK;
}
Exemple #7
0
/*
 * Assumes rig!=NULL, rig->state.priv!=NULL
 *  and val points to a buffer big enough to hold the conf value.
 */
static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val)
{
	const struct confparams *cfp;

	unsigned char resbuf[MAXFRAMELEN];
	int res_len, icom_val=0;
	int cmdhead;
	int retval;

	int ep_cmd = C_CTL_MEM;
	int ep_sc;             /* Subcommand in $1A $05xx */

	switch(token) {
	case TOK_SSBBASS:
		ep_sc = S_MEM_SBASS ;
		break;
	case TOK_MEMNAME:
		ep_sc = S_MEM_NAME;
		break;
	case TOK_SQLCTRL:
		ep_sc = S_MEM_SQL_CTL;
		break;
	case TOK_MYCALL:	/* max 10 ASCII char */
		ep_sc = S_MEM_MYCALL;
		break;
	case TOK_RTTY_FLTR:	/* RTTY filter mode 0 - 4 */
		ep_sc = S_MEM_RTTY_FL_PB;
		break;
	default:
		rig_debug(RIG_DEBUG_ERR,"Unsupported get_ext_parm %d", token);
		return -RIG_EINVAL;
	}

	retval = icom_transaction (rig, ep_cmd, ep_sc, NULL, 0,
					resbuf, &res_len);
	if (retval != RIG_OK)
            return retval;

	/*
	 * strbuf should contain Cn,Sc,Data area
	 */
	cmdhead = (ep_sc == -1) ? 1:S_MEM_SC_LEN + 1;
	res_len -= cmdhead;
/* should echo cmd, subcmd and then data, if you get an ack something is wrong */
	if (resbuf[0] != ep_cmd) {
		if (resbuf[0] == ACK) {
				rig_debug(RIG_DEBUG_ERR,"%s: protocol error (%#.2x), "
			"len=%d\n", __FUNCTION__,resbuf[0],res_len);
		return -RIG_EPROTO;
		}
		else {
			rig_debug(RIG_DEBUG_ERR,"%s: ack NG (%#.2x), "
				"len=%d\n", __FUNCTION__,resbuf[0],res_len);
		return -RIG_ERJCTED;
		}
	}
	cfp = rig_ext_lookup_tok(rig, token);
	switch(cfp->type) {
		case RIG_CONF_STRING:
		 memcpy(val->s, resbuf, res_len);
		break;
		case RIG_CONF_CHECKBUTTON:
		case RIG_CONF_COMBO:
		 val->i = from_bcd_be(resbuf+cmdhead, res_len*2);
		break;
		case RIG_CONF_NUMERIC:
		 val->f = from_bcd_be(resbuf+cmdhead, res_len*2);
		break;
		default:
		 rig_debug(RIG_DEBUG_ERR,"%s: protocol error (%#.2x), "
			"len=%d\n", __FUNCTION__,resbuf[0],res_len);
		return -RIG_EPROTO;

	}
	rig_debug(RIG_DEBUG_TRACE,"%s: %d %d %d %f\n",
			__FUNCTION__, res_len, icom_val, val->i, val->f);

	return RIG_OK;
}
Exemple #8
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);
}