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 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; }
/* * 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; }
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; }
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); }
/* * 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; }
/* * 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; }
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); }