diff --git a/alinco/alinco.c b/alinco/alinco.c index 14e0d6b0e..01e788726 100644 --- a/alinco/alinco.c +++ b/alinco/alinco.c @@ -2,7 +2,7 @@ * Hamlib Alinco backend - main file * Copyright (c) 2001,2002 by Stephane Fillod * - * $Id: alinco.c,v 1.12 2001-12-28 20:28:02 fillods Exp $ + * $Id: alinco.c,v 1.13 2002-03-13 23:37:12 fillods 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 @@ -42,7 +42,10 @@ #include "alinco.h" -#define EOM "\r" +/* Line Feed */ +#define EOM "\x0a" + +#define BUFSZ 32 /* * modes in use by the "2G" command @@ -98,11 +101,13 @@ */ int alinco_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int i, count, retval; + int retval; struct rig_state *rs; rs = &rig->state; + serial_flush(&rs->rigport); + retval = write_block(&rs->rigport, cmd, cmd_len); if (retval != RIG_OK) return retval; @@ -110,20 +115,8 @@ int alinco_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int * /* no data expected, TODO: flush input? */ if (!data || !data_len) return 0; - /* - * buffered read are quite helpful here! - * However, an automate with a state model would be more efficient.. - */ - i = 0; - do { - count = fread_block(&rs->rigport, data+i, 1); - if (count > 0) - i += count; - else if (count < 0) - return count; - } while (count > 0); - *data_len = i; + *data_len = read_string(&rs->rigport, data, BUFSZ, EOM, strlen(EOM)); return RIG_OK; } @@ -134,7 +127,7 @@ int alinco_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int * */ int alinco_set_vfo(RIG *rig, vfo_t vfo) { - char cmdbuf[16]; + char cmdbuf[BUFSZ]; int cmd_len; char vfo_num; @@ -160,7 +153,7 @@ int alinco_set_vfo(RIG *rig, vfo_t vfo) */ int alinco_get_vfo(RIG *rig, vfo_t *vfo) { - char vfobuf[16]; + char vfobuf[BUFSZ]; int vfo_len, retval; retval = alinco_transaction(rig, AL CMD_RMV EOM, @@ -195,7 +188,7 @@ int alinco_get_vfo(RIG *rig, vfo_t *vfo) */ int alinco_set_freq(RIG *rig, vfo_t vfo, freq_t freq) { - char freqbuf[16]; + char freqbuf[BUFSZ]; int freq_len; /* max 10 digits */ @@ -235,7 +228,7 @@ static int current_data_read(RIG *rig, char *databuf) int alinco_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { int retval; - char freqbuf[32]; + char freqbuf[BUFSZ]; retval = current_data_read(rig, freqbuf); if (retval != RIG_OK) @@ -254,7 +247,7 @@ int alinco_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) */ int alinco_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { - char mdbuf[16]; + char mdbuf[BUFSZ]; int mdbuf_len, narrow_filter, retval; char amode; @@ -301,7 +294,7 @@ int alinco_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { int retval; int settings; - char modebuf[32]; + char modebuf[BUFSZ]; retval = current_data_read(rig, modebuf); if (retval != RIG_OK) @@ -342,7 +335,7 @@ int alinco_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) int alinco_set_split(RIG *rig, vfo_t vfo, split_t split) { int cmd_len; - char cmdbuf[32]; + char cmdbuf[BUFSZ]; cmd_len = sprintf(cmdbuf, AL CMD_SPLT "%d" EOM, split==RIG_SPLIT_ON ? 1 : 0); @@ -357,7 +350,7 @@ int alinco_set_split(RIG *rig, vfo_t vfo, split_t split) int alinco_get_split(RIG *rig, vfo_t vfo, split_t *split) { int splt_len, retval; - char spltbuf[32]; + char spltbuf[BUFSZ]; retval = alinco_transaction (rig, AL CMD_RSPLT EOM, strlen(AL CMD_RSPLT EOM), spltbuf, &splt_len); @@ -389,7 +382,7 @@ int alinco_get_split(RIG *rig, vfo_t vfo, split_t *split) */ int alinco_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) { - char freqbuf[16]; + char freqbuf[BUFSZ]; int freq_len; int retval; @@ -412,7 +405,7 @@ int alinco_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) int alinco_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) { int retval; - char freqbuf[32]; + char freqbuf[BUFSZ]; retval = current_data_read(rig, freqbuf); if (retval != RIG_OK) @@ -433,7 +426,7 @@ int alinco_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) int alinco_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit) { int rit_len, retval; - char ritbuf[32]; + char ritbuf[BUFSZ]; /* read in Hertz unit */ retval = alinco_transaction (rig, AL CMD_RIT "0" EOM, @@ -461,7 +454,7 @@ int alinco_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit) int alinco_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { int cmd_len; - char cmdbuf[32]; + char cmdbuf[BUFSZ]; /* Optimize: * sort the switch cases with the most frequent first @@ -504,7 +497,7 @@ int alinco_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) { int retval; int settings; - char funcbuf[32]; + char funcbuf[BUFSZ]; /* Optimize: * sort the switch cases with the most frequent first @@ -553,7 +546,7 @@ int alinco_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) int alinco_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { int cmd_len, lvl; - char cmdbuf[32]; + char cmdbuf[BUFSZ]; /* Optimize: * sort the switch cases with the most frequent first @@ -606,7 +599,7 @@ int alinco_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { struct alinco_priv_caps *priv; int retval, lvl_len; - char lvlbuf[32]; + char lvlbuf[BUFSZ]; priv = (struct alinco_priv_caps*)rig->caps->priv; @@ -693,7 +686,7 @@ int alinco_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int alinco_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone) { const struct rig_caps *caps; - unsigned char tonebuf[16]; + unsigned char tonebuf[BUFSZ]; int tone_len; int i; @@ -718,7 +711,7 @@ int alinco_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone) */ int alinco_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) { - char pttbuf[16]; + char pttbuf[BUFSZ]; int ptt_len, retval; retval = alinco_transaction (rig, AL CMD_PTT EOM, @@ -752,7 +745,7 @@ int alinco_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) */ int alinco_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd) { - char dcdbuf[16]; + char dcdbuf[BUFSZ]; int dcd_len, retval; retval = alinco_transaction (rig, AL CMD_SQL EOM, @@ -786,7 +779,7 @@ int alinco_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd) */ int alinco_set_mem(RIG *rig, vfo_t vfo, int ch) { - char cmdbuf[16]; + char cmdbuf[BUFSZ]; int cmd_len; if (ch < 0 || ch > 99) @@ -803,7 +796,7 @@ int alinco_set_mem(RIG *rig, vfo_t vfo, int ch) */ int alinco_get_mem(RIG *rig, vfo_t vfo, int *ch) { - char membuf[16]; + char membuf[BUFSZ]; int mem_len, retval; retval = alinco_transaction (rig, AL CMD_RMEM EOM, diff --git a/aor/aor.c b/aor/aor.c index afeee31a4..6a3b1f480 100644 --- a/aor/aor.c +++ b/aor/aor.c @@ -1,8 +1,8 @@ /* * Hamlib AOR backend - main file - * Copyright (c) 2000,2001,2002 by Stephane Fillod + * Copyright (c) 2000-2002 by Stephane Fillod * - * $Id: aor.c,v 1.19 2002-02-27 23:17:22 fillods Exp $ + * $Id: aor.c,v 1.20 2002-03-13 23:37:12 fillods 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 @@ -47,7 +47,9 @@ * Is \r portable enough? */ #define CR '\r' -#define EOM "\r" +#define EOM "\x0a" + +#define BUFSZ 64 /* * modes in use by the "MD" command @@ -72,9 +74,8 @@ */ int aor_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int i, retval; + int retval; struct rig_state *rs; - char c; rs = &rig->state; @@ -84,23 +85,11 @@ int aor_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *dat if (retval != RIG_OK) return retval; - /* - * buffered read are quite helpful here! - * However, an automate with a state model would be more efficient.. - */ - i = 0; - do { - retval = fread_block(&rs->rigport, &c, 1); - if (retval == 0) - continue; /* huh!? */ - if (retval != RIG_OK) - return retval; - if (data) - data[i++] = c; - } while (c != CR); + /* will flush data on next transaction */ + if (!data || !data_len) + return RIG_OK; - if (data_len) - *data_len = i; + *data_len = read_string(&rs->rigport, data, BUFSZ, EOM, strlen(EOM)); return RIG_OK; } @@ -123,7 +112,7 @@ int aor_close(RIG *rig) */ int aor_set_freq(RIG *rig, vfo_t vfo, freq_t freq) { - unsigned char freqbuf[16], ackbuf[16]; + unsigned char freqbuf[BUFSZ], ackbuf[BUFSZ]; int freq_len, ack_len, retval; int lowhz; @@ -158,7 +147,7 @@ int aor_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { char *rfp; int freq_len, retval; - unsigned char freqbuf[64]; + unsigned char freqbuf[BUFSZ]; retval = aor_transaction (rig, "RX" EOM, 3, freqbuf, &freq_len); if (retval != RIG_OK) @@ -198,7 +187,7 @@ int aor_set_vfo(RIG *rig, vfo_t vfo) int aor_get_vfo(RIG *rig, vfo_t *vfo) { int vfo_len, retval; - unsigned char vfobuf[64]; + unsigned char vfobuf[BUFSZ]; retval = aor_transaction (rig, "RX" EOM, 3, vfobuf, &vfo_len); if (retval != RIG_OK) @@ -227,7 +216,7 @@ int aor_get_vfo(RIG *rig, vfo_t *vfo) */ int aor_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { - unsigned char mdbuf[16],ackbuf[16]; + unsigned char mdbuf[BUFSZ],ackbuf[BUFSZ]; int mdbuf_len, ack_len, aormode, retval; switch (mode) { @@ -280,7 +269,7 @@ int aor_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) */ int aor_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { - unsigned char ackbuf[16]; + unsigned char ackbuf[BUFSZ]; int ack_len, retval; @@ -331,7 +320,7 @@ int aor_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) */ int aor_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts) { - unsigned char tsbuf[16],ackbuf[16]; + unsigned char tsbuf[BUFSZ],ackbuf[BUFSZ]; int ts_len, ack_len; /* @@ -364,7 +353,7 @@ int aor_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) { char *aorcmd; int ack_len; - char ackbuf[16]; + char ackbuf[BUFSZ]; switch (op) { case RIG_OP_UP: aorcmd = "\x1e" EOM; break; @@ -388,10 +377,10 @@ int aor_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) */ const char *aor_get_info(RIG *rig) { - static char infobuf[16]; + static char infobuf[BUFSZ]; int id_len, frm_len, retval; - char idbuf[4]; - char frmbuf[16]; + char idbuf[BUFSZ]; + char frmbuf[BUFSZ]; retval = aor_transaction (rig, "\001" EOM, 2, idbuf, &id_len); if (retval != RIG_OK) diff --git a/jrc/jrc.c b/jrc/jrc.c index 96dd93f9c..964900461 100644 --- a/jrc/jrc.c +++ b/jrc/jrc.c @@ -2,7 +2,7 @@ * Hamlib JRC backend - main file * Copyright (c) 2001,2002 by Stephane Fillod * - * $Id: jrc.c,v 1.5 2002-02-27 23:25:41 fillods Exp $ + * $Id: jrc.c,v 1.6 2002-03-13 23:37:12 fillods 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 @@ -46,6 +46,8 @@ */ #define EOM "\r" +#define BUFSZ 32 + /* * modes in use by the "2G" command */ @@ -69,7 +71,7 @@ */ int jrc_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int i, count, retval; + int retval; struct rig_state *rs; rs = &rig->state; @@ -83,20 +85,8 @@ int jrc_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *dat /* no data expected, TODO: flush input? */ if (!data || !data_len) return 0; - /* - * buffered read are quite helpful here! - * However, an automate with a state model would be more efficient.. - */ - i = 0; - do { - count = fread_block(&rs->rigport, data+i, 1); - if (count > 0) - i += count; - else if (count < 0) - return count; - } while (count > 0 && data[i-1] != EOM[0]); - *data_len = i; + *data_len = read_string(&rs->rigport, data, BUFSZ, EOM, strlen(EOM)); return RIG_OK; } @@ -129,7 +119,7 @@ int jrc_close(RIG *rig) */ int jrc_set_freq(RIG *rig, vfo_t vfo, freq_t freq) { - char freqbuf[16]; + char freqbuf[BUFSZ]; int freq_len; /* max 10 digits */ @@ -148,7 +138,7 @@ int jrc_set_freq(RIG *rig, vfo_t vfo, freq_t freq) int jrc_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) { int freq_len, retval; - char freqbuf[32]; + char freqbuf[BUFSZ]; retval = jrc_transaction (rig, "F" EOM, 2, freqbuf, &freq_len); if (retval != RIG_OK) @@ -173,7 +163,7 @@ int jrc_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) */ int jrc_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) { - char mdbuf[16]; + char mdbuf[BUFSZ]; int retval, mdbuf_len; char amode; const char *bandwidth; @@ -223,7 +213,7 @@ int jrc_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) int jrc_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) { int cmd_len; - char cmdbuf[32]; + char cmdbuf[BUFSZ]; /* Optimize: * sort the switch cases with the most frequent first @@ -275,7 +265,7 @@ int jrc_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) int jrc_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) { int retval, func_len; - char funcbuf[32]; + char funcbuf[BUFSZ]; /* Optimize: * sort the switch cases with the most frequent first @@ -372,7 +362,7 @@ int jrc_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) int jrc_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) { int cmd_len; - char cmdbuf[32]; + char cmdbuf[BUFSZ]; /* Optimize: * sort the switch cases with the most frequent first @@ -426,7 +416,7 @@ int jrc_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) { struct jrc_priv_caps *priv; int retval, lvl_len, lvl; - char lvlbuf[32]; + char lvlbuf[BUFSZ]; priv = (struct jrc_priv_caps*)rig->caps->priv; @@ -551,7 +541,7 @@ int jrc_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) int jrc_set_parm(RIG *rig, setting_t parm, value_t val) { int cmd_len; - char cmdbuf[32]; + char cmdbuf[BUFSZ]; int minutes; /* Optimize: @@ -592,7 +582,7 @@ int jrc_get_parm(RIG *rig, setting_t parm, value_t *val) { struct jrc_priv_caps *priv; int retval, lvl_len, i; - char lvlbuf[32]; + char lvlbuf[BUFSZ]; priv = (struct jrc_priv_caps*)rig->caps->priv; @@ -635,7 +625,7 @@ int jrc_get_parm(RIG *rig, setting_t parm, value_t *val) */ int jrc_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd) { - char dcdbuf[16]; + char dcdbuf[BUFSZ]; int dcd_len, retval; retval = jrc_transaction (rig, "Q" EOM, 2, dcdbuf, &dcd_len); @@ -658,7 +648,7 @@ int jrc_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd) */ int jrc_set_trn(RIG *rig, int trn) { - unsigned char trnbuf[16]; + unsigned char trnbuf[BUFSZ]; int trn_len; trn_len = sprintf(trnbuf, "I%d" EOM, trn==RIG_TRN_RIG?1:0); @@ -672,7 +662,7 @@ int jrc_set_trn(RIG *rig, int trn) */ int jrc_set_powerstat(RIG *rig, powerstat_t status) { - unsigned char pwrbuf[16]; + unsigned char pwrbuf[BUFSZ]; int pwr_len; pwr_len = sprintf(pwrbuf, "T%d" EOM, status==RIG_POWER_ON?1:0); @@ -686,7 +676,7 @@ int jrc_set_powerstat(RIG *rig, powerstat_t status) */ int jrc_reset(RIG *rig, reset_t reset) { - unsigned char rstbuf[16]; + unsigned char rstbuf[BUFSZ]; int rst_len; char rst; @@ -710,8 +700,8 @@ int jrc_reset(RIG *rig, reset_t reset) */ int jrc_set_mem(RIG *rig, vfo_t vfo, int ch) { - char cmdbuf[16]; - char membuf[16]; + char cmdbuf[BUFSZ]; + char membuf[BUFSZ]; int cmd_len, mem_len; if (ch < 0 || ch > 999) @@ -826,7 +816,7 @@ int jrc_decode_event(RIG *rig) rmode_t mode; pbwidth_t width; int count; - char buf[32]; + char buf[BUFSZ]; rig_debug(RIG_DEBUG_VERBOSE, "jrc: jrc_decode called\n"); @@ -835,9 +825,9 @@ int jrc_decode_event(RIG *rig) /* "Iabdfg"CR */ #define SETUP_STATUS_LEN 17 - count = fread_block(&rs->rigport, buf, SETUP_STATUS_LEN); + count = read_string(&rs->rigport, buf, SETUP_STATUS_LEN, "", 0); if (count < 0) { - rig_debug(RIG_DEBUG_ERR, "jrc: fread_block failed: %s\n", + rig_debug(RIG_DEBUG_ERR, "jrc: read_string failed: %s\n", strerror(errno)); return -RIG_EIO; } diff --git a/kachina/kachina.c b/kachina/kachina.c index b6c45362c..ee76b59e4 100644 --- a/kachina/kachina.c +++ b/kachina/kachina.c @@ -2,7 +2,7 @@ * Hamlib Kachina backend - main file * Copyright (c) 2001,2002 by Stephane Fillod * - * $Id: kachina.c,v 1.3 2001-12-28 20:28:03 fillods Exp $ + * $Id: kachina.c,v 1.4 2002-03-13 23:37:12 fillods 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 @@ -89,11 +89,13 @@ int kachina_transaction(RIG *rig, unsigned char cmd1, unsigned char cmd2) buf4[2] = cmd2; buf4[3] = ETX; + serial_flush(&rs->rigport); + retval = write_block(&rs->rigport, buf4, 4); if (retval != RIG_OK) return retval; - count = fread_block(&rs->rigport, buf4, 1); + count = read_string(&rs->rigport, buf4, 1, "", 0); if (count != 1) return count; @@ -115,11 +117,13 @@ int kachina_trans_n(RIG *rig, unsigned char cmd1, const char *data, int data_len cmd_len = data_len+3; + serial_flush(&rs->rigport); + retval = write_block(&rs->rigport, buf, cmd_len); if (retval != RIG_OK) return retval; - count = fread_block(&rs->rigport, buf, 1); + count = read_string(&rs->rigport, buf, 1, "", 0); if (count != 1) return count; diff --git a/pcr/pcr.c b/pcr/pcr.c index 1a0525a60..c85542789 100644 --- a/pcr/pcr.c +++ b/pcr/pcr.c @@ -2,7 +2,7 @@ * Hamlib PCR backend - main file * Copyright (c) 2001-2002 by Stephane Fillod * - * $Id: pcr.c,v 1.12 2002-03-07 22:48:50 fillods Exp $ + * $Id: pcr.c,v 1.13 2002-03-13 23:37:12 fillods 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 @@ -93,7 +93,7 @@ const int pcr1_ctcss_list[] = { */ int pcr_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int i, retval; + int retval; struct rig_state *rs; rs = &rig->state; @@ -104,20 +104,7 @@ int pcr_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *dat if (retval != RIG_OK) return retval; - /* - * buffered read are quite helpful here! - * However, an automate with a state model would be more efficient.. - */ - i = 0; - do { - retval = fread_block(&rs->rigport, data+i, 1); - if (retval == 0) - continue; /* huh!? */ - if (retval < 0) - return retval; - } while (i++ < *data_len || data[i-1] != '\x0a'); - - *data_len = i; /* useless ? */ + *data_len = read_string(&rs->rigport, data, *data_len, "\x0a", 1); return RIG_OK; } diff --git a/tentec/tentec.c b/tentec/tentec.c index 5a0fd5455..452429d4d 100644 --- a/tentec/tentec.c +++ b/tentec/tentec.c @@ -2,7 +2,7 @@ * Hamlib Tentec backend - main file * Copyright (c) 2001,2002 by Stephane Fillod * - * $Id: tentec.c,v 1.4 2002-01-06 17:49:55 fillods Exp $ + * $Id: tentec.c,v 1.5 2002-03-13 23:37:13 fillods 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 @@ -67,7 +67,7 @@ static int tentec_filters[] = { */ int tentec_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int i, count, retval; + int retval; struct rig_state *rs; rs = &rig->state; @@ -81,23 +81,8 @@ int tentec_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int * /* no data expected, TODO: flush input? */ if (!data || !data_len) return 0; - /* - * buffered read are quite helpful here! - * However, an automate with a state model would be more efficient.. - * - * FIXME: - * and BTW, this is currently helpless since length of response may vary - */ - i = 0; - do { - count = fread_block(&rs->rigport, data+i, 1); - if (count > 0) - i += count; - else if (count < 0) - return count; - } while (i < *data_len); - *data_len = i; + *data_len = read_string(&rs->rigport, data, *data_len, "", 0); return RIG_OK; } @@ -159,9 +144,7 @@ int tentec_cleanup(RIG *rig) */ int tentec_trx_open(RIG *rig) { - struct rig_state *rs = &rig->state; - int ack_len, retval; - char ack[16]; + int retval; /* * be kind: use XX first, and do 'Dsp Program Execute' only diff --git a/uniden/uniden.c b/uniden/uniden.c index 80aca489a..9b9cccc11 100644 --- a/uniden/uniden.c +++ b/uniden/uniden.c @@ -2,7 +2,7 @@ * Hamlib Uniden backend - main file * Copyright (c) 2001,2002 by Stephane Fillod * - * $Id: uniden.c,v 1.3 2001-12-28 20:28:04 fillods Exp $ + * $Id: uniden.c,v 1.4 2002-03-13 23:37:13 fillods 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 @@ -52,6 +52,7 @@ #define EOM "\r" +#define BUFSZ 32 /* * uniden_transaction @@ -60,11 +61,13 @@ */ int uniden_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) { - int i, count, retval; + int retval; struct rig_state *rs; rs = &rig->state; + serial_flush(&rs->rigport); + retval = write_block(&rs->rigport, cmd, cmd_len); if (retval != RIG_OK) return retval; @@ -73,22 +76,8 @@ int uniden_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int * /* no data expected, TODO: flush input? */ if (!data || !data_len) return 0; - /* - * buffered read are quite helpful here! - * However, an automate with a state model would be more efficient.. - * - * FIXME: should read until CR or LF? - */ - i = 0; - do { - count = fread_block(&rs->rigport, data+i, 1); - if (count > 0) - i += count; - else if (count < 0) - return count; - } while (count > 0); - *data_len = i; + *data_len = read_string(&rs->rigport, data, BUFSZ, "\x0a", 1); return RIG_OK; } @@ -99,7 +88,7 @@ int uniden_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int * */ int uniden_set_freq(RIG *rig, vfo_t vfo, freq_t freq) { - char freqbuf[16]; + char freqbuf[BUFSZ]; int freq_len; /* max 8 digits */ @@ -118,7 +107,7 @@ int uniden_set_freq(RIG *rig, vfo_t vfo, freq_t freq) */ int uniden_set_mem(RIG *rig, vfo_t vfo, int ch) { - char cmdbuf[16]; + char cmdbuf[BUFSZ]; int cmd_len; cmd_len = sprintf(cmdbuf, "MA%03d" EOM, ch);