replaced fread_block in favor of the more intelligent read_string, added some serial_flush

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1025 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.1.3
Stéphane Fillod, F8CFE 2002-03-13 23:37:13 +00:00
rodzic ab2811115b
commit ad7310335b
7 zmienionych plików z 94 dodań i 159 usunięć

Wyświetl plik

@ -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,

Wyświetl plik

@ -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)

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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;

Wyświetl plik

@ -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;
}

Wyświetl plik

@ -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

Wyświetl plik

@ -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);