From b036bdb032dd0a997d1bdda061749d0d24454b4b Mon Sep 17 00:00:00 2001 From: "Martin Ewing, AA6E" Date: Fri, 1 Apr 2005 19:32:18 +0000 Subject: [PATCH] various bug fixes git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1956 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- tentec/orion.c | 111 +++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 58 deletions(-) diff --git a/tentec/orion.c b/tentec/orion.c index 9f18fbc83..c173f7e0a 100644 --- a/tentec/orion.c +++ b/tentec/orion.c @@ -2,7 +2,7 @@ * Hamlib TenTenc backend - TT-565 description * Copyright (c) 2004-2005 by Stephane Fillod * - * $Id: orion.c,v 1.6 2005-03-30 04:30:30 aa6e Exp $ + * $Id: orion.c,v 1.7 2005-04-01 19:32:18 aa6e Exp $ * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as @@ -140,6 +140,8 @@ struct tt565_priv_data { #define TT565_EOM "\r" /* terminates input string */ +#undef TT565_TIME /* Define to enable time checks */ + #ifdef TT565_TIME double tt565_timenow() /* returns current time in secs+microsecs */ { @@ -157,40 +159,42 @@ double tt565_timenow() /* returns current time in secs+microsecs */ */ int tt565_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int retval, data_len0, itry; + int retval, data_len_init, itry; struct rig_state *rs; #ifdef TT565_TIME double ft1, ft2; #endif - data_len0 = *data_len; - for (itry=1; itry < rig->caps->retry; itry++) { - rs = &rig->state; + /* Capture buffer length for possible read re-try. */ + data_len_init = (data && data_len) ? *data_len : 0; + /* Allow transaction re-tries according to capabilities. */ + for (itry=1; itry < rig->caps->retry; itry++) { + rs = &rig->state; - serial_flush(&rs->rigport); + serial_flush(&rs->rigport); - retval = write_block(&rs->rigport, cmd, cmd_len); - if (retval != RIG_OK) + retval = write_block(&rs->rigport, cmd, cmd_len); + if (retval != RIG_OK) return retval; - /* no data expected, TODO: flush input? */ - if (!data || !data_len) - return 0; /* normal exit if no read */ + /* no data expected, TODO: flush input? */ + if (!data || !data_len) + return 0; /* normal exit if no read */ #ifdef TT565_TIME - ft1 = tt565_timenow(); + ft1 = tt565_timenow(); #endif - *data_len = data_len0; - *data_len = read_string(&rs->rigport, data, *data_len, + *data_len = data_len_init; /* restore orig. buffer length */ + *data_len = read_string(&rs->rigport, data, *data_len, TT565_EOM, strlen(TT565_EOM)); - if (*data_len > 0) return RIG_OK; /* normal exit if reading */ + if (*data_len > 0) return RIG_OK; /* normal exit if reading */ #ifdef TT565_TIME - ft2 = tt565_timenow(); - if (*data_len == -RIG_ETIMEOUT) - printf("Timeout %d: Elapsed = %f secs.\n", itry, ft2-ft1); - else - printf("Other Error #%d, itry=%d: Elapsed = %f secs.\n", + ft2 = tt565_timenow(); + if (*data_len == -RIG_ETIMEOUT) + printf("Timeout %d: Elapsed = %f secs.\n", itry, ft2-ft1); + else + printf("Other Error #%d, itry=%d: Elapsed = %f secs.\n", *data_len, itry, ft2-ft1); #endif - } + } return RIG_ETIMEOUT; } @@ -229,9 +233,7 @@ const struct rig_caps tt565_caps = { .has_set_level = RIG_LEVEL_SET(TT565_LEVELS), .has_get_parm = TT565_PARMS, .has_set_parm = TT565_PARMS, -/* (in progress) -.level_gran = { [LVL_RF] = { .min = { .i = 0 }, .max = { .i = 100 }, .step = { .i = 1 } } }, -*/ + .level_gran = {}, .parm_gran = {}, .ctcss_list = NULL, @@ -330,7 +332,6 @@ const struct rig_caps tt565_caps = { * Function definitions below */ - #define EOM "\015" /* CR */ #define TT565_USB '0' @@ -341,8 +342,6 @@ const struct rig_caps tt565_caps = { #define TT565_FM '5' #define TT565_RTTY '6' - - /************************************************************************************* * * Specs from http://www.rfsquared.com, Rev 1, firmware 1.340 @@ -464,7 +463,7 @@ int tt565_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) cmd_len = sprintf(cmdbuf, "?%cF" EOM, which_vfo(rig, vfo)); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -518,8 +517,6 @@ int tt565_get_vfo(RIG *rig, vfo_t *vfo) return RIG_OK; } - - /* * tt565_set_split_vfo * Assumes rig!=NULL @@ -560,7 +557,7 @@ int tt565_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo) char ttreceiver; cmd_len = sprintf(cmdbuf, "?KV" EOM); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -640,7 +637,7 @@ int tt565_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) /* Query mode */ cmd_len = sprintf(cmdbuf, "?R%cM" EOM, ttreceiver); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -670,7 +667,7 @@ int tt565_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) /* Query passband width (filter) */ cmd_len = sprintf(cmdbuf, "?R%cF" EOM, ttreceiver); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -685,8 +682,6 @@ int tt565_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) *width = atoi(respbuf+4); return RIG_OK; - - } /* @@ -715,7 +710,7 @@ int tt565_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts) cmd_len = sprintf(cmdbuf, "?R%cI" EOM, which_receiver(rig, vfo)); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -758,7 +753,7 @@ int tt565_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit) cmd_len = sprintf(cmdbuf, "?R%cR" EOM, which_receiver(rig, vfo)); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -804,7 +799,7 @@ int tt565_get_xit(RIG *rig, vfo_t vfo, shortfreq_t *xit) cmd_len = sprintf(cmdbuf, "?R%cX" EOM, 'M'); - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, respbuf, &resp_len); if (retval != RIG_OK) @@ -840,7 +835,7 @@ int tt565_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) int resp_len, retval; unsigned char respbuf[32]; - resp_len=16; + resp_len = sizeof(respbuf); retval = tt565_transaction (rig, "?S" EOM, 3, respbuf, &resp_len); if (retval != RIG_OK) @@ -865,7 +860,7 @@ int tt565_reset(RIG *rig, reset_t reset) int retval, reset_len; char reset_buf[32]; - reset_len=16; + reset_len = sizeof(reset_buf); retval = tt565_transaction (rig, "X" EOM, 2, reset_buf, &reset_len); if (retval != RIG_OK) return retval; @@ -894,7 +889,7 @@ const char *tt565_get_info(RIG *rig) /* * protocol version */ - firmware_len = 24; + firmware_len = sizeof(buf); retval = tt565_transaction (rig, "?V" EOM, 3, buf, &firmware_len); /* "Version 1.372" */ @@ -908,9 +903,6 @@ const char *tt565_get_info(RIG *rig) return buf; } - - - /* * tt565_set_level * Assumes rig!=NULL @@ -960,7 +952,7 @@ int tt565_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) break; case RIG_LEVEL_ATT: - ii = -1; /* Request 0-5 dB -> 0, 6-11 dB -> 6, etc. */ + ii = -1; /* Request 0-5 dB -> 0, 6-11 dB -> 6, etc. */ while ( rig->caps->attenuator[++ii] != RIG_DBLST_END ) { if (rig->caps->attenuator[ii] > val.i) break; } @@ -1023,7 +1015,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) */ switch (level) { case RIG_LEVEL_SWR: - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, "?S" EOM, 3, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1050,7 +1042,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_RAWSTR: - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, "?S" EOM, 3, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1069,7 +1061,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_RFPOWER: - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, "?TP" EOM, 4, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1087,7 +1079,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) cmd_len = sprintf(cmdbuf, "?R%cA" EOM, which_receiver(rig, vfo)); - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1113,7 +1105,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) cmd_len = sprintf(cmdbuf, "?U%c" EOM, which_receiver(rig, vfo)); - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1128,10 +1120,10 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_IF: - cmd_len = sprintf(cmdbuf, "?R%cP" EOM, /* passband tuning */ + cmd_len = sprintf(cmdbuf, "?R%cP" EOM, /* passband tuning */ which_receiver(rig, vfo)); - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1149,7 +1141,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) cmd_len = sprintf(cmdbuf, "?R%cG" EOM, which_receiver(rig, vfo)); - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1167,7 +1159,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) cmd_len = sprintf(cmdbuf, "?R%cT" EOM, which_receiver(rig, vfo)); - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1183,12 +1175,14 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) else val->i = rig->caps->attenuator[lvlbuf[4]-'1']; break; + + case RIG_LEVEL_PREAMP: /* Sub receiver does not contain a Preamp */ if (which_receiver(rig, vfo) == 'S') { val->i=0; break; } - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, "?RME" EOM, 5, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1206,7 +1200,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) cmd_len = sprintf(cmdbuf, "?R%cS" EOM, which_receiver(rig, vfo)); - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, cmdbuf, cmd_len, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1221,7 +1215,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_MICGAIN: - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, "?TM" EOM, 4, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1236,7 +1230,7 @@ int tt565_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) break; case RIG_LEVEL_COMP: - lvl_len=16; + lvl_len = sizeof(lvlbuf); retval = tt565_transaction (rig, "?TS" EOM, 4, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; @@ -1316,3 +1310,4 @@ int tt565_vfo_op(RIG * rig, vfo_t vfo, vfo_op_t op) return retval; } +/* End of orion.c */