int sprintf_level(char *str, setting_t level) { int i, len = 0; *str = '\0'; if (level == RIG_LEVEL_NONE) { return 0; } for (i = 0; i < RIG_SETTING_MAX; i++) { const char *ms = rig_strlevel(level & rig_idx2setting(i)); if (!ms || !ms[0]) { continue; /* unknown, FIXME! */ } strcat(str, ms); strcat(str, " "); len += strlen(ms) + 1; } return len; }
int sprintf_level_gran(char *str, setting_t level, const gran_t gran[]) { int i, len = 0; *str = '\0'; if (level == RIG_LEVEL_NONE) { return 0; } for (i = 0; i < RIG_SETTING_MAX; i++) { const char *ms; if (!(level & rig_idx2setting(i))) { continue; } ms = rig_strlevel(level & rig_idx2setting(i)); if (!ms || !ms[0]) { if (level != DUMMY_ALL && level != RIG_LEVEL_SET(DUMMY_ALL)) { rig_debug(RIG_DEBUG_BUG, "unknown level idx %d\n", i); } continue; } if (RIG_LEVEL_IS_FLOAT(rig_idx2setting(i))) { len += sprintf(str + len, "%s(%g..%g/%g) ", ms, gran[i].min.f, gran[i].max.f, gran[i].step.f); } else { len += sprintf(str + len, "%s(%d..%d/%d) ", ms, gran[i].min.i, gran[i].max.i, gran[i].step.i); } } return len; }
static int thd72_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { int retval, lvl; char c, lvlc, cmd[10]; rig_debug(RIG_DEBUG_TRACE, "%s: called VFO=%s, level=%s, val=%g\n", __func__, rig_strvfo(vfo), rig_strlevel(level), val.f); retval = thd72_vfoc(rig, vfo, &c); if (retval != RIG_OK) { return retval; } switch (level) { case RIG_LEVEL_RFPOWER: if (val.f <= 0.01) { lvlc = '2'; } else if (val.f <= 0.10) { lvlc = '1'; } else { lvlc = '0'; } sprintf(cmd, "PC %c,%c", c, lvlc); return kenwood_simple_transaction(rig, cmd, 6); case RIG_LEVEL_VOXGAIN: return thd72_set_menu_item(rig, 8, (int)(val.f * 10.0 - 0.5)); case RIG_LEVEL_VOXDELAY: if (val.i > 20000) { lvl = 6; } else if (val.i > 10000) { lvl = val.i / 10000 + 3; } else { lvl = val.i / 2500; } return thd72_set_menu_item(rig, 9, lvl); case RIG_LEVEL_SQL: lvlc = '0' + (int)(val.f * 5); sprintf(cmd, "PC %c,%c", c, lvlc); return kenwood_simple_transaction(rig, cmd, 6); case RIG_LEVEL_BALANCE: /* FIXME - is balance 0.0 .. 1.0 or -1.0 .. 1.0? */ lvl = (int)(val.f * 4.0); return thd72_set_menu_item(rig, 13, lvl); default: rig_debug(RIG_DEBUG_ERR, "%s: Unsupported Level %d\n", __func__, level); return -RIG_EINVAL; } return retval; }
/* * blind implementation of get_level. * Please test on real hardware and send report on hamlib mailing list */ int ft100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { int ret; float f; FT100_METER_INFO ft100_meter; if( !rig ) return -RIG_EINVAL; if( !val ) return -RIG_EINVAL; rig_debug(RIG_DEBUG_VERBOSE,"%s: %s\n", __func__, rig_strlevel(level)); ret = ft100_send_priv_cmd(rig,FT100_NATIVE_CAT_READ_METERS); if (ret != RIG_OK) return ret; ret = read_block( &rig->state.rigport, (char*)&ft100_meter, sizeof(FT100_METER_INFO)); rig_debug(RIG_DEBUG_VERBOSE,"%s: read meters=%d\n",__func__, ret); if (ret < 0) return ret; switch( level ) { case RIG_LEVEL_RAWSTR: val->i = ft100_meter.s_meter; break; case RIG_LEVEL_RFPOWER: val->f = (float)ft100_meter.tx_fwd_power/0xff; break; case RIG_LEVEL_SWR: if (ft100_meter.tx_fwd_power == 0) val->f = 0; else { f = sqrt((float)ft100_meter.tx_rev_power/(float)ft100_meter.tx_fwd_power); val->f = (1+f)/(1-f); } break; case RIG_LEVEL_ALC: /* need conversion ? */ val->f = (float)ft100_meter.alc_level/0xff; break; case RIG_LEVEL_MICGAIN: val->f = (float)ft100_meter.mic_level/0xff; break; case RIG_LEVEL_SQL: val->f = (float)ft100_meter.squelch_level/0xff; break; default: return -RIG_EINVAL; } return RIG_OK; }
static int netrigctl_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { int ret, len; char cmd[CMD_MAX]; char buf[BUF_MAX]; rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __FUNCTION__); len = sprintf(cmd, "l %s\n", rig_strlevel(level)); ret = netrigctl_transaction(rig, cmd, len, buf); if (ret <= 0) return (ret < 0) ? ret : -RIG_EPROTO; if (RIG_LEVEL_IS_FLOAT(level)) val->f = atof(buf); else val->i = atoi(buf); return RIG_OK; }
static int netrigctl_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { int ret, len; char cmd[CMD_MAX]; char buf[BUF_MAX]; char lstr[32]; rig_debug(RIG_DEBUG_VERBOSE,"%s called\n", __FUNCTION__); if (RIG_LEVEL_IS_FLOAT(level)) sprintf(lstr, "%f", val.f); else sprintf(lstr, "%d", val.i); len = sprintf(cmd, "L %s %s\n", rig_strlevel(level), lstr); ret = netrigctl_transaction(rig, cmd, len, buf); if (ret > 0) return -RIG_EPROTO; else return ret; }
int main(int argc, char *argv[]) { time_t gentime; int set_or_get; int i; char *pbuf, prntbuf[512]; rig_load_all_backends(); printf("<TABLE BORDER=1>"); printf("<TR><TD>Model</TD><TD>Mfg</TD><TD>Vers.</TD><TD>Status</TD>" "<TD>Type</TD><TD>Freq. range</TD><TD>Parameters</TD>" "<TD>Capabilities</TD>" "<TD>Get func</TD>" "<TD>Set func</TD>" "<TD>Get level</TD>" "<TD>Set level</TD>" "<TD>Get parm</TD>" "<TD>Set parm</TD>" "</TR>\n"); rig_list_foreach(print_caps_sum, NULL); printf("</TABLE>\n"); printf("<P>"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD><TD>PTT</TD><TD>DCD</TD><TD>Port</TD>" "<TD>Speed min</TD><TD>Speed max</TD>" "<TD>Parm.</TD><TD>Handshake</TD><TD>Write delay</TD>" "<TD>Post delay</TD><TD>Timeout</TD><TD>Retry</TD></TR>\n"); rig_list_foreach(print_caps_parameters, NULL); printf("</TABLE>\n"); printf("<P>"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD><TD>Freq. range</TD></TR>\n"); rig_list_foreach(print_caps_range, NULL); printf("</TABLE>\n"); printf("<P>"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD><TD>Target VFO</TD>" "<TD>Set freq</TD><TD>Get freq</TD>" "<TD>Set mode</TD><TD>Get mode</TD>" "<TD>Set VFO</TD><TD>Get VFO</TD>" "<TD>Set PTT</TD><TD>Get PTT</TD><TD>Get DCD</TD>" "<TD>Set rptr shift</TD><TD>Get rptr shift</TD>" "<TD>Set rptr offs</TD><TD>Get rptr offs</TD>" "<TD>Set split frq</TD><TD>Get split frq</TD>" "<TD>Set split</TD><TD>Get split</TD>" "<TD>Set ts</TD><TD>Get ts</TD>" "<TD>Set CTCSS</TD><TD>Get CTCSS</TD>" "<TD>Set DCS</TD><TD>Get DCS</TD>" "<TD>Set Power Stat</TD><TD>Get Power Stat</TD>" "<TD>Set trn</TD><TD>Get trn</TD>" "<TD>Decode</TD><TD>Get info</TD>" "</TR>\n"); rig_list_foreach(print_caps_caps, NULL); printf("</TABLE>\n"); printf("<P>"); bitmap_func = 0; prntbuf[0] = '\0'; pbuf = prntbuf; for (i = 0; i < RIG_SETTING_MAX; i++) { setting_t func = rig_idx2setting(i); const char *s = rig_strfunc(func); if (!s) { continue; } bitmap_func |= func; pbuf += sprintf(pbuf, "<TD>%s</TD>", s); } printf("Has set func"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); set_or_get = 1; rig_list_foreach(print_caps_func, &set_or_get); printf("</TABLE>\n"); printf("<P>"); printf("Has get func"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); set_or_get = 0; rig_list_foreach(print_caps_func, &set_or_get); printf("</TABLE>\n"); printf("<P>"); bitmap_level = 0; prntbuf[0] = '\0'; pbuf = prntbuf; for (i = 0; i < RIG_SETTING_MAX; i++) { setting_t level = rig_idx2setting(i); const char *s = rig_strlevel(level); if (!s) { continue; } bitmap_level |= level; pbuf += sprintf(pbuf, "<TD>%s</TD>", s); } printf("Set level"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); set_or_get = 1; rig_list_foreach(print_caps_level, &set_or_get); printf("</TABLE>\n"); printf("<P>"); printf("Get level"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); set_or_get = 0; rig_list_foreach(print_caps_level, &set_or_get); printf("</TABLE>\n"); printf("<P>"); bitmap_parm = 0; prntbuf[0] = '\0'; pbuf = prntbuf; for (i = 0; i < RIG_SETTING_MAX; i++) { setting_t parm = rig_idx2setting(i); const char *s = rig_strparm(parm); if (!s) { continue; } bitmap_parm |= parm; pbuf += sprintf(pbuf, "<TD>%s</TD>", s); } printf("Set parm"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); set_or_get = 1; rig_list_foreach(print_caps_parm, &set_or_get); printf("</TABLE>\n"); printf("<P>"); printf("Get parm"); printf("<TABLE BORDER=1>\n"); printf("<TR><TD>Model</TD>%s</TR>\n", prntbuf); set_or_get = 0; rig_list_foreach(print_caps_parm, &set_or_get); printf("</TABLE>\n"); printf("<P>"); time(&gentime); printf("Rigmatrix generated %s by %s\n", ctime(&gentime), getenv("USER")); printf("</body></html>\n"); return 0; }