kopia lustrzana https://github.com/Hamlib/Hamlib
Merge branch 'master' into libusb-1-0
Catch up this branch to changes made in master.libusb-1-0
commit
b3e6c460fe
|
@ -6,6 +6,7 @@
|
|||
*.o
|
||||
*.lo
|
||||
*.la
|
||||
*.orig
|
||||
*.swp
|
||||
Makefile
|
||||
Makefile.in
|
||||
|
|
|
@ -542,17 +542,29 @@ readability. Align closing braces with the opening block's keyword. In
|
|||
function definitions put the opening brace on its own line under the
|
||||
definition's parameter line.
|
||||
|
||||
Hamlib source code is no place for an entry into the obsfucated C contest!
|
||||
A configuration file for the Artistic Style (http://astyle.sourceforge.net/)
|
||||
utility can be found in the scripts directory. The settings it provides should
|
||||
conform reasonably close to the Linux style guide referenced above. This file
|
||||
can be copied to $HOME/.astylerc where it will be used as the default
|
||||
configuration. If you already have an existing .astylerc, passing
|
||||
|
||||
--options=/path/to/hamlib/scripts/astylerc
|
||||
|
||||
will use this file as the configuration for formatting. Consider using this
|
||||
utility whenever working on a given C source file in Hamlib.
|
||||
|
||||
Hamlib source code is no place for an entry into the obfuscated C contest!
|
||||
Many of us are hobbyists and write this for fun. Easy to read and
|
||||
understand logic is preferred over a clever solution. If your solution must
|
||||
be written in a clever fashion, please document it well in your comments.
|
||||
|
||||
Any header files included from the hamlib/ directory should be enclosed
|
||||
in <>:
|
||||
Any header files included from the hamlib/ directory should be enclosed in <>:
|
||||
|
||||
#include <hamlib/rig.h> # Per GNU GCC documentation
|
||||
|
||||
Other included header files (backend and rig specific headers) should be
|
||||
enclosed in "":
|
||||
|
||||
#include "yaesu.h"
|
||||
|
||||
Contributed code should always keep the source base in a compilable state,
|
||||
|
@ -581,6 +593,7 @@ Hamlib should also compile with the following common compilers:
|
|||
|
||||
Portability issues to watch:
|
||||
|
||||
* C99 is probably (in 2016) a reasonable target
|
||||
* little vs. big endian systems (use shifts or adhoc functions)
|
||||
* 64 bit int: avoid them in API
|
||||
* printf/scanf of 64bit int: use PRIll (cast value to int64_t) and SCNll
|
||||
|
@ -672,6 +685,9 @@ big, you can send it as a compressed attachment.
|
|||
|
||||
8.3.1 Changelog
|
||||
|
||||
A ChangeLog file is no longer manually maintained. At some point it may be
|
||||
automatically generated from the Git commit log for source tarballs.
|
||||
|
||||
Simply summarize your changes when the files are committed to Git or, if
|
||||
providing patches to the mailing list, provide a summary so the uploader can
|
||||
include it in the commit message which will show in the commit log (Git
|
||||
|
|
4637
adat/adat.c
4637
adat/adat.c
Plik diff jest za duży
Load Diff
292
drake/drake.c
292
drake/drake.c
|
@ -83,6 +83,7 @@ int drake_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *d
|
|||
|
||||
if (retval == -RIG_ETIMEOUT)
|
||||
retval = 0;
|
||||
|
||||
if (retval < 0)
|
||||
return retval;
|
||||
|
||||
|
@ -127,7 +128,7 @@ int drake_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
|
|||
* 10Hz resolution
|
||||
* TODO: round nearest?
|
||||
*/
|
||||
freq_len = sprintf((char *) freqbuf,"F%07d" EOM, (unsigned int)freq/10);
|
||||
freq_len = sprintf((char *) freqbuf, "F%07d" EOM, (unsigned int)freq / 10);
|
||||
retval = drake_transaction(rig, (char *) freqbuf, freq_len, (char *) ackbuf, &ack_len);
|
||||
|
||||
return retval;
|
||||
|
@ -145,14 +146,14 @@ int drake_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
|
|||
double f;
|
||||
char fmult;
|
||||
|
||||
retval = drake_transaction (rig, "RF" EOM, 3, freqbuf, &freq_len);
|
||||
retval = drake_transaction(rig, "RF" EOM, 3, freqbuf, &freq_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
/* RA command returns *fffff.ff*mHz<CR> */
|
||||
if (freq_len != 15) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_freq: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_freq: wrong answer %s, "
|
||||
"len=%d\n", freqbuf, freq_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
@ -161,10 +162,10 @@ int drake_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
|
|||
freqbuf[9] = '\0';
|
||||
|
||||
/* extract freq */
|
||||
sscanf(freqbuf+1, "%lf", &f);
|
||||
sscanf(freqbuf + 1, "%lf", &f);
|
||||
f *= 1000.0;
|
||||
|
||||
if (fmult=='M'||fmult=='m')
|
||||
if (fmult == 'M' || fmult == 'm')
|
||||
f *= 1000.0;
|
||||
|
||||
*freq = (freq_t)f;
|
||||
|
@ -184,23 +185,28 @@ int drake_set_vfo(RIG *rig, vfo_t vfo)
|
|||
|
||||
switch (vfo) {
|
||||
case RIG_VFO_A : vfo_function = 'A'; break;
|
||||
|
||||
case RIG_VFO_B : vfo_function = 'B'; break;
|
||||
|
||||
case RIG_VFO_VFO: vfo_function = 'F'; break;
|
||||
|
||||
case RIG_VFO_MEM: vfo_function = 'C'; break;
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_set_vfo: unsupported VFO %d\n",
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_set_vfo: unsupported VFO %d\n",
|
||||
vfo);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
cmd_len = 0;
|
||||
|
||||
if ((vfo_function=='A')||(vfo_function=='B'))
|
||||
if ((vfo_function == 'A') || (vfo_function == 'B'))
|
||||
cmd_len = sprintf((char *) cmdbuf, "V%c" EOM, vfo_function);
|
||||
if ((vfo_function=='F')||(vfo_function=='C'))
|
||||
|
||||
if ((vfo_function == 'F') || (vfo_function == 'C'))
|
||||
cmd_len = sprintf((char *) cmdbuf, "%c" EOM, vfo_function);
|
||||
|
||||
retval = drake_transaction (rig, (char *) cmdbuf, cmd_len, (char *) ackbuf, &ack_len);
|
||||
retval = drake_transaction(rig, (char *) cmdbuf, cmd_len, (char *) ackbuf, &ack_len);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -215,26 +221,29 @@ int drake_get_vfo(RIG *rig, vfo_t *vfo)
|
|||
char mdbuf[BUFSZ];
|
||||
char cvfo;
|
||||
|
||||
retval = drake_transaction (rig, "RA" EOM, 3, mdbuf, &mdbuf_len);
|
||||
retval = drake_transaction(rig, "RA" EOM, 3, mdbuf, &mdbuf_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (mdbuf_len < 35) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_vfo: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_vfo: wrong answer %s, "
|
||||
"len=%d\n", mdbuf, mdbuf_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
if (mdbuf[0]=='*')
|
||||
if (mdbuf[0] == '*')
|
||||
*vfo = RIG_VFO_MEM;
|
||||
else {
|
||||
cvfo = (mdbuf[9] & 0x38);
|
||||
|
||||
switch (cvfo) {
|
||||
case '0' : *vfo = RIG_VFO_B; break;
|
||||
|
||||
case '8' : *vfo = RIG_VFO_A; break;
|
||||
|
||||
default : rig_debug(RIG_DEBUG_ERR,
|
||||
"drake_get_vfo: unsupported vfo %c\n", cvfo);
|
||||
"drake_get_vfo: unsupported vfo %c\n", cvfo);
|
||||
*vfo = RIG_VFO_VFO;
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
@ -255,22 +264,28 @@ int drake_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
|
||||
switch (mode) {
|
||||
case RIG_MODE_CW: mode_sel = MD_CW; break;
|
||||
|
||||
case RIG_MODE_ECSSUSB:
|
||||
case RIG_MODE_USB: mode_sel = MD_USB; break;
|
||||
|
||||
case RIG_MODE_ECSSLSB:
|
||||
case RIG_MODE_LSB: mode_sel = MD_LSB; break;
|
||||
|
||||
case RIG_MODE_FM: mode_sel = MD_FM; break;
|
||||
|
||||
case RIG_MODE_AMS:
|
||||
case RIG_MODE_AM: mode_sel = MD_AM; break;
|
||||
|
||||
case RIG_MODE_RTTY: mode_sel = MD_RTTY; break;
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_set_mode: "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_set_mode: "
|
||||
"unsupported mode %d\n", mode);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
mdbuf_len = sprintf((char *) mdbuf, "M%c" EOM, mode_sel);
|
||||
retval = drake_transaction (rig, (char *) mdbuf, mdbuf_len, (char *) ackbuf, &ack_len);
|
||||
retval = drake_transaction(rig, (char *) mdbuf, mdbuf_len, (char *) ackbuf, &ack_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
@ -282,25 +297,31 @@ int drake_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
|
||||
switch (width) {
|
||||
case 500: width_sel = '0'; break;
|
||||
|
||||
case 1800: width_sel = '1'; break;
|
||||
|
||||
case 2300: width_sel = '2'; break;
|
||||
|
||||
case 4000: width_sel = '4'; break;
|
||||
|
||||
case 6000: width_sel = '6'; break;
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_set_mode: "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_set_mode: "
|
||||
"unsupported width %d\n", width);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
mdbuf_len = sprintf((char *) mdbuf, "W%c" EOM, width_sel);
|
||||
retval = drake_transaction (rig, (char *) mdbuf, mdbuf_len, (char *) ackbuf, &ack_len);
|
||||
retval = drake_transaction(rig, (char *) mdbuf, mdbuf_len, (char *) ackbuf, &ack_len);
|
||||
}
|
||||
|
||||
if ((mode == RIG_MODE_AMS) || (mode == RIG_MODE_ECSSUSB) || (mode == RIG_MODE_ECSSLSB) ||
|
||||
(mode == RIG_MODE_AM) || (mode == RIG_MODE_USB) || (mode == RIG_MODE_LSB)) {
|
||||
mdbuf_len = sprintf((char *) mdbuf, "S%c" EOM,
|
||||
((mode == RIG_MODE_AMS) || (mode==RIG_MODE_ECSSUSB) || (mode==RIG_MODE_ECSSLSB))
|
||||
((mode == RIG_MODE_AMS) || (mode == RIG_MODE_ECSSUSB) || (mode == RIG_MODE_ECSSLSB))
|
||||
? 'O' : 'F');
|
||||
retval = drake_transaction (rig, (char *) mdbuf, mdbuf_len, (char *) ackbuf, &ack_len);
|
||||
retval = drake_transaction(rig, (char *) mdbuf, mdbuf_len, (char *) ackbuf, &ack_len);
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
@ -314,18 +335,18 @@ int drake_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
|
|||
int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
||||
{
|
||||
int mdbuf_len, retval;
|
||||
char mdbuf[BUFSZ];
|
||||
char mdbuf[BUFSZ];
|
||||
char cmode;
|
||||
char cwidth;
|
||||
char csynch;
|
||||
|
||||
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
||||
retval = drake_transaction(rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (mdbuf_len != 8) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_mode: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_mode: wrong answer %s, "
|
||||
"len=%d\n", mdbuf, mdbuf_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
@ -334,12 +355,17 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
cwidth = mdbuf[4];
|
||||
csynch = mdbuf[5];
|
||||
|
||||
switch(cwidth & 0x37){
|
||||
switch (cwidth & 0x37) {
|
||||
case '0': *width = s_Hz(500); break;
|
||||
|
||||
case '1': *width = s_Hz(1800); break;
|
||||
|
||||
case '2': *width = s_Hz(2300); break;
|
||||
|
||||
case '3': *width = s_Hz(4000); break;
|
||||
|
||||
case '4': *width = s_Hz(6000); break;
|
||||
|
||||
default :
|
||||
rig_debug(RIG_DEBUG_ERR,
|
||||
"drake_get_mode: unsupported width %c\n",
|
||||
|
@ -349,10 +375,13 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
}
|
||||
|
||||
if ((cwidth >= '0') && (cwidth <= '4')) {
|
||||
switch(cmode & 0x33){
|
||||
switch (cmode & 0x33) {
|
||||
case '0': *mode = RIG_MODE_LSB; break;
|
||||
|
||||
case '1': *mode = RIG_MODE_RTTY; break;
|
||||
|
||||
case '2': *mode = RIG_MODE_FM; *width = s_Hz(12000); break;
|
||||
|
||||
default :
|
||||
rig_debug(RIG_DEBUG_ERR,
|
||||
"drake_get_mode: unsupported mode %c\n",
|
||||
|
@ -361,10 +390,13 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
return -RIG_EINVAL;
|
||||
}
|
||||
} else {
|
||||
switch(cmode & 0x33){
|
||||
switch (cmode & 0x33) {
|
||||
case '0': *mode = RIG_MODE_USB; break;
|
||||
|
||||
case '1': *mode = RIG_MODE_CW; break;
|
||||
|
||||
case '2': *mode = RIG_MODE_AM; break;
|
||||
|
||||
default :
|
||||
rig_debug(RIG_DEBUG_ERR,
|
||||
"drake_get_mode: unsupported mode %c\n",
|
||||
|
@ -377,13 +409,12 @@ int drake_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
|
|||
if ((csynch & 0x34) == '4') {
|
||||
if (*mode == RIG_MODE_AM)
|
||||
*mode = RIG_MODE_AMS;
|
||||
else
|
||||
if (*mode == RIG_MODE_USB)
|
||||
*mode = RIG_MODE_ECSSUSB;
|
||||
else
|
||||
if (*mode == RIG_MODE_LSB)
|
||||
*mode = RIG_MODE_ECSSLSB;
|
||||
else if (*mode == RIG_MODE_USB)
|
||||
*mode = RIG_MODE_ECSSUSB;
|
||||
else if (*mode == RIG_MODE_LSB)
|
||||
*mode = RIG_MODE_ECSSLSB;
|
||||
}
|
||||
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
|
@ -396,7 +427,7 @@ int drake_set_ant(RIG *rig, vfo_t vfo, ant_t ant)
|
|||
unsigned char buf[16], ackbuf[16];
|
||||
int len, ack_len, retval;
|
||||
|
||||
len = sprintf((char *) buf,"A%c" EOM, ant==RIG_ANT_1?'1':(ant==RIG_ANT_2?'2':'C'));
|
||||
len = sprintf((char *) buf, "A%c" EOM, ant == RIG_ANT_1 ? '1' : (ant == RIG_ANT_2 ? '2' : 'C'));
|
||||
|
||||
retval = drake_transaction(rig, (char *) buf, len, (char *) ackbuf, &ack_len);
|
||||
|
||||
|
@ -413,23 +444,26 @@ int drake_get_ant(RIG *rig, vfo_t vfo, ant_t *ant)
|
|||
char mdbuf[BUFSZ];
|
||||
char cant;
|
||||
|
||||
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
||||
retval = drake_transaction(rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (mdbuf_len != 8) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_ant: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_ant: wrong answer %s, "
|
||||
"len=%d\n", mdbuf, mdbuf_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
cant = mdbuf[3];
|
||||
|
||||
switch(cant & 0x3c){
|
||||
switch (cant & 0x3c) {
|
||||
case '0': *ant = RIG_ANT_1; break;
|
||||
|
||||
case '4': *ant = RIG_ANT_3; break;
|
||||
|
||||
case '8': *ant = RIG_ANT_2; break;
|
||||
|
||||
default :
|
||||
rig_debug(RIG_DEBUG_ERR,
|
||||
"drake_get_ant: unsupported antenna %c\n",
|
||||
|
@ -455,10 +489,10 @@ int drake_set_mem(RIG *rig, vfo_t vfo, int ch)
|
|||
|
||||
len = sprintf(buf, "C%03d" EOM, ch);
|
||||
|
||||
retval = drake_transaction (rig, buf, len, ackbuf, &ack_len);
|
||||
retval = drake_transaction(rig, buf, len, ackbuf, &ack_len);
|
||||
|
||||
if (ack_len != 2) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_set_mem: could not set channel %03d.\n", ch);
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_set_mem: could not set channel %03d.\n", ch);
|
||||
retval = -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
|
@ -476,13 +510,13 @@ int drake_get_mem(RIG *rig, vfo_t vfo, int *ch)
|
|||
char mdbuf[BUFSZ];
|
||||
int chan;
|
||||
|
||||
retval = drake_transaction (rig, "RC" EOM, 3, mdbuf, &mdbuf_len);
|
||||
retval = drake_transaction(rig, "RC" EOM, 3, mdbuf, &mdbuf_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (mdbuf_len != 6) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_mem: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_mem: wrong answer %s, "
|
||||
"len=%d\n", mdbuf, mdbuf_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
@ -490,7 +524,7 @@ int drake_get_mem(RIG *rig, vfo_t vfo, int *ch)
|
|||
mdbuf[4] = '\0';
|
||||
|
||||
/* extract channel no */
|
||||
sscanf(mdbuf+1, "%03d", &chan);
|
||||
sscanf(mdbuf + 1, "%03d", &chan);
|
||||
*ch = chan;
|
||||
|
||||
priv->curr_ch = chan;
|
||||
|
@ -514,9 +548,10 @@ int drake_set_chan(RIG *rig, const channel_t *chan)
|
|||
old_chan = 0;
|
||||
|
||||
/* set to vfo if needed */
|
||||
if (old_vfo == RIG_VFO_MEM){
|
||||
if (old_vfo == RIG_VFO_MEM) {
|
||||
old_chan = priv->curr_ch;
|
||||
retval = drake_set_vfo(rig, RIG_VFO_VFO);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
}
|
||||
|
@ -537,7 +572,7 @@ int drake_set_chan(RIG *rig, const channel_t *chan)
|
|||
(chan->funcs & RIG_FUNC_MN) == RIG_FUNC_MN);
|
||||
|
||||
mdbuf_len = sprintf(mdbuf, "PR" EOM "%03d" EOM, chan->channel_num);
|
||||
retval = drake_transaction (rig, mdbuf, mdbuf_len, ackbuf, &ack_len);
|
||||
retval = drake_transaction(rig, mdbuf, mdbuf_len, ackbuf, &ack_len);
|
||||
|
||||
if (old_vfo == RIG_VFO_MEM)
|
||||
drake_set_mem(rig, RIG_VFO_CURR, old_chan);
|
||||
|
@ -554,7 +589,7 @@ int drake_get_chan(RIG *rig, channel_t *chan)
|
|||
struct drake_priv_data *priv = rig->state.priv;
|
||||
vfo_t old_vfo;
|
||||
int old_chan;
|
||||
char mdbuf[BUFSZ],freqstr[BUFSZ];
|
||||
char mdbuf[BUFSZ], freqstr[BUFSZ];
|
||||
int mdbuf_len, retval;
|
||||
|
||||
chan->vfo = RIG_VFO_MEM;
|
||||
|
@ -592,16 +627,18 @@ int drake_get_chan(RIG *rig, channel_t *chan)
|
|||
|
||||
//go to new channel
|
||||
retval = drake_set_mem(rig, RIG_VFO_CURR, chan->channel_num);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return RIG_OK;
|
||||
|
||||
//now decypher it
|
||||
retval = drake_transaction (rig, "RA" EOM, 3, mdbuf, &mdbuf_len);
|
||||
retval = drake_transaction(rig, "RA" EOM, 3, mdbuf, &mdbuf_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (mdbuf_len < 35) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_channel: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_channel: wrong answer %s, "
|
||||
"len=%d\n", mdbuf, mdbuf_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
@ -609,10 +646,13 @@ int drake_get_chan(RIG *rig, channel_t *chan)
|
|||
if ((mdbuf[5] >= '4') && (mdbuf[5] <= '?'))
|
||||
chan->funcs |= RIG_FUNC_NB;
|
||||
|
||||
switch(mdbuf[5] & 0x33){
|
||||
switch (mdbuf[5] & 0x33) {
|
||||
case '0': chan->levels[rig_setting2idx(RIG_LEVEL_AGC)].i = RIG_AGC_OFF; break;
|
||||
|
||||
case '2': chan->levels[rig_setting2idx(RIG_LEVEL_AGC)].i = RIG_AGC_FAST; break;
|
||||
|
||||
case '3': chan->levels[rig_setting2idx(RIG_LEVEL_AGC)].i = RIG_AGC_SLOW; break;
|
||||
|
||||
default : chan->levels[rig_setting2idx(RIG_LEVEL_AGC)].i = RIG_AGC_FAST;
|
||||
}
|
||||
|
||||
|
@ -622,38 +662,52 @@ int drake_get_chan(RIG *rig, channel_t *chan)
|
|||
if ((mdbuf[6] & 0x3c) == '4')
|
||||
chan->levels[rig_setting2idx(RIG_LEVEL_ATT)].i = 10;
|
||||
|
||||
if ((mdbuf[6] & 0x32) =='2')
|
||||
if ((mdbuf[6] & 0x32) == '2')
|
||||
chan->funcs |= RIG_FUNC_MN;
|
||||
|
||||
switch(mdbuf[7] & 0x3c){
|
||||
switch (mdbuf[7] & 0x3c) {
|
||||
case '0': chan->ant = RIG_ANT_1; break;
|
||||
|
||||
case '4': chan->ant = RIG_ANT_3; break;
|
||||
|
||||
case '8': chan->ant = RIG_ANT_2; break;
|
||||
|
||||
default : chan->ant = RIG_ANT_NONE;
|
||||
}
|
||||
|
||||
switch(mdbuf[8] & 0x37){
|
||||
switch (mdbuf[8] & 0x37) {
|
||||
case '0': chan->width = s_Hz(500); break;
|
||||
|
||||
case '1': chan->width = s_Hz(1800); break;
|
||||
|
||||
case '2': chan->width = s_Hz(2300); break;
|
||||
|
||||
case '3': chan->width = s_Hz(4000); break;
|
||||
|
||||
case '4': chan->width = s_Hz(6000); break;
|
||||
|
||||
default : chan->width = RIG_PASSBAND_NORMAL;
|
||||
}
|
||||
|
||||
if ((mdbuf[8] >= '0') && (mdbuf[8] <= '4')) {
|
||||
switch(mdbuf[7] & 0x33){
|
||||
switch (mdbuf[7] & 0x33) {
|
||||
case '0': chan->mode = RIG_MODE_LSB; break;
|
||||
|
||||
case '1': chan->mode = RIG_MODE_RTTY; break;
|
||||
|
||||
case '2': chan->mode = RIG_MODE_FM;
|
||||
chan->width = s_Hz(12000); break;
|
||||
|
||||
default : chan->mode = RIG_MODE_NONE;
|
||||
}
|
||||
} else {
|
||||
switch(mdbuf[7] & 0x33){
|
||||
switch (mdbuf[7] & 0x33) {
|
||||
case '0': chan->mode = RIG_MODE_USB; break;
|
||||
|
||||
case '1': chan->mode = RIG_MODE_CW; break;
|
||||
|
||||
case '2': chan->mode = RIG_MODE_AM; break;
|
||||
|
||||
default : chan->mode = RIG_MODE_NONE;
|
||||
}
|
||||
}
|
||||
|
@ -667,23 +721,27 @@ int drake_get_chan(RIG *rig, channel_t *chan)
|
|||
chan->mode = RIG_MODE_ECSSLSB;
|
||||
}
|
||||
|
||||
strncpy(freqstr,mdbuf+11,9);
|
||||
strncpy(freqstr, mdbuf + 11, 9);
|
||||
freqstr[9] = 0x00;
|
||||
|
||||
if ((mdbuf[21] == 'k') || (mdbuf[21] == 'K'))
|
||||
chan->freq = strtod(freqstr,NULL) * 1000.0;
|
||||
chan->freq = strtod(freqstr, NULL) * 1000.0;
|
||||
|
||||
if ((mdbuf[21] == 'm') || (mdbuf[21] == 'M'))
|
||||
chan->freq = strtod(freqstr,NULL) * 1000000.0;
|
||||
chan->freq = strtod(freqstr, NULL) * 1000000.0;
|
||||
|
||||
|
||||
strncpy(chan->channel_desc, mdbuf+25, 7);
|
||||
strncpy(chan->channel_desc, mdbuf + 25, 7);
|
||||
|
||||
//now put the radio back the way it was
|
||||
if (old_vfo != RIG_VFO_MEM) {
|
||||
retval = drake_set_vfo(rig, RIG_VFO_VFO);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
} else {
|
||||
retval = drake_set_mem(rig, RIG_VFO_CURR, old_chan);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
}
|
||||
|
@ -701,31 +759,37 @@ int drake_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op)
|
|||
char buf[16], ackbuf[16];
|
||||
int len, ack_len, retval;
|
||||
|
||||
switch(op) {
|
||||
switch (op) {
|
||||
case RIG_OP_UP:
|
||||
len = sprintf(buf,"U");
|
||||
len = sprintf(buf, "U");
|
||||
break;
|
||||
|
||||
case RIG_OP_DOWN:
|
||||
len = sprintf(buf,"D");
|
||||
len = sprintf(buf, "D");
|
||||
break;
|
||||
|
||||
case RIG_OP_CPY:
|
||||
len = sprintf(buf,"A E B" EOM);
|
||||
len = sprintf(buf, "A E B" EOM);
|
||||
break;
|
||||
|
||||
case RIG_OP_TO_VFO:
|
||||
/* len = sprintf(buf,"C%03d" EOM, priv->curr_ch); */
|
||||
len = sprintf(buf,"F" EOM);
|
||||
len = sprintf(buf, "F" EOM);
|
||||
break;
|
||||
|
||||
case RIG_OP_MCL:
|
||||
len = sprintf(buf,"EC%03d" EOM, priv->curr_ch);
|
||||
len = sprintf(buf, "EC%03d" EOM, priv->curr_ch);
|
||||
break;
|
||||
|
||||
case RIG_OP_FROM_VFO:
|
||||
len = sprintf(buf,"PR" EOM "%03d" EOM, priv->curr_ch);
|
||||
len = sprintf(buf, "PR" EOM "%03d" EOM, priv->curr_ch);
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
retval = drake_transaction(rig, buf, len, buf[len-1]==0x0d ?ackbuf:NULL, &ack_len);
|
||||
retval = drake_transaction(rig, buf, len, buf[len - 1] == 0x0d ? ackbuf : NULL, &ack_len);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@ -739,17 +803,20 @@ int drake_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
|
|||
char buf[16], ackbuf[16];
|
||||
int len, ack_len, retval;
|
||||
|
||||
switch(func) {
|
||||
switch (func) {
|
||||
case RIG_FUNC_MN:
|
||||
len = sprintf(buf,"N%c" EOM, status?'O':'F');
|
||||
len = sprintf(buf, "N%c" EOM, status ? 'O' : 'F');
|
||||
break;
|
||||
|
||||
case RIG_FUNC_LOCK:
|
||||
len = sprintf(buf,"L%c" EOM, status?'O':'F');
|
||||
len = sprintf(buf, "L%c" EOM, status ? 'O' : 'F');
|
||||
break;
|
||||
|
||||
case RIG_FUNC_NB:
|
||||
/* TODO: NB narrow */
|
||||
len = sprintf(buf,"B%c" EOM, status?'W':'F');
|
||||
len = sprintf(buf, "B%c" EOM, status ? 'W' : 'F');
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
@ -766,32 +833,34 @@ int drake_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
|
|||
int drake_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
|
||||
{
|
||||
int mdbuf_len, retval;
|
||||
char mdbuf[BUFSZ];
|
||||
char mc;
|
||||
char mdbuf[BUFSZ];
|
||||
char mc;
|
||||
|
||||
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
||||
retval = drake_transaction(rig, "RM" EOM, 3, mdbuf, &mdbuf_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (mdbuf_len != 8) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_func: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_func: wrong answer %s, "
|
||||
"len=%d\n", mdbuf, mdbuf_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
switch(func) {
|
||||
switch (func) {
|
||||
case RIG_FUNC_MN:
|
||||
mc = mdbuf[2];
|
||||
*status = ((mc & 0x32) =='2');
|
||||
*status = ((mc & 0x32) == '2');
|
||||
break;
|
||||
|
||||
case RIG_FUNC_NB:
|
||||
/* TODO: NB narrow */
|
||||
mc = mdbuf[1];
|
||||
*status = ((mc >= '4') && (mc <= '?'));
|
||||
break;
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"Unsupported get func %d\n",func);
|
||||
rig_debug(RIG_DEBUG_ERR, "Unsupported get func %d\n", func);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
|
@ -807,18 +876,21 @@ int drake_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
|||
char buf[16], ackbuf[16];
|
||||
int len, ack_len, retval;
|
||||
|
||||
switch(level) {
|
||||
switch (level) {
|
||||
case RIG_LEVEL_PREAMP:
|
||||
len = sprintf(buf,"G%c" EOM, val.i?'+':'0');
|
||||
len = sprintf(buf, "G%c" EOM, val.i ? '+' : '0');
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_ATT:
|
||||
len = sprintf(buf,"G%c" EOM, val.i?'-':'0');
|
||||
len = sprintf(buf, "G%c" EOM, val.i ? '-' : '0');
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_AGC:
|
||||
len = sprintf(buf,"A%c" EOM,
|
||||
val.i==RIG_AGC_OFF?'O':
|
||||
(val.i==RIG_AGC_FAST?'F':'S'));
|
||||
len = sprintf(buf, "A%c" EOM,
|
||||
val.i == RIG_AGC_OFF ? 'O' :
|
||||
(val.i == RIG_AGC_FAST ? 'F' : 'S'));
|
||||
break;
|
||||
|
||||
default:
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
@ -838,97 +910,114 @@ int drake_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||
char lvlbuf[BUFSZ];
|
||||
char mc;
|
||||
|
||||
if ((level != RIG_LEVEL_RAWSTR)&&(level != RIG_LEVEL_STRENGTH)) {
|
||||
retval = drake_transaction (rig, "RM" EOM, 3, lvlbuf, &lvl_len);
|
||||
if ((level != RIG_LEVEL_RAWSTR) && (level != RIG_LEVEL_STRENGTH)) {
|
||||
retval = drake_transaction(rig, "RM" EOM, 3, lvlbuf, &lvl_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (lvl_len != 8) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_level: wrong answer %s, "
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_level: wrong answer %s, "
|
||||
"len=%d\n", lvlbuf, lvl_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
}
|
||||
|
||||
switch(level) {
|
||||
switch (level) {
|
||||
case RIG_LEVEL_RAWSTR:
|
||||
retval = drake_transaction (rig, "RSS" EOM, 4, lvlbuf, &lvl_len);
|
||||
retval = drake_transaction(rig, "RSS" EOM, 4, lvlbuf, &lvl_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (lvl_len != 5) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_level: wrong answer"
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_level: wrong answer"
|
||||
"len=%d\n", lvl_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
lvlbuf[3] = '\0';
|
||||
val->i = strtol(lvlbuf+1, (char **)NULL, 16);
|
||||
val->i = strtol(lvlbuf + 1, (char **)NULL, 16);
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_STRENGTH:
|
||||
retval = drake_transaction (rig, "RSS" EOM, 4, lvlbuf, &lvl_len);
|
||||
retval = drake_transaction(rig, "RSS" EOM, 4, lvlbuf, &lvl_len);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
||||
if (lvl_len != 5) {
|
||||
rig_debug(RIG_DEBUG_ERR,"drake_get_level: wrong answer"
|
||||
rig_debug(RIG_DEBUG_ERR, "drake_get_level: wrong answer"
|
||||
"len=%d\n", lvl_len);
|
||||
return -RIG_ERJCTED;
|
||||
}
|
||||
|
||||
lvlbuf[3] = '\0';
|
||||
ss = strtol(lvlbuf+1, (char **)NULL, 16);
|
||||
val->i = (int)rig_raw2val(ss,&rig->caps->str_cal);
|
||||
ss = strtol(lvlbuf + 1, (char **)NULL, 16);
|
||||
val->i = (int)rig_raw2val(ss, &rig->caps->str_cal);
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_PREAMP:
|
||||
mc = lvlbuf[2];
|
||||
|
||||
if ((mc & 0x3c) == '8')
|
||||
val->i = 10;
|
||||
else
|
||||
val->i = 0;
|
||||
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_ATT:
|
||||
mc = lvlbuf[2];
|
||||
if ((mc & 0x3c) =='4')
|
||||
|
||||
if ((mc & 0x3c) == '4')
|
||||
val->i = 10;
|
||||
else
|
||||
val->i = 0;
|
||||
|
||||
break;
|
||||
|
||||
case RIG_LEVEL_AGC:
|
||||
mc = lvlbuf[1];
|
||||
switch(mc & 0x33){
|
||||
|
||||
switch (mc & 0x33) {
|
||||
case '0': val->i = RIG_AGC_OFF; break;
|
||||
|
||||
case '2': val->i = RIG_AGC_FAST; break;
|
||||
|
||||
case '3': val->i = RIG_AGC_SLOW; break;
|
||||
|
||||
default : val->i = RIG_AGC_FAST;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d\n",level);
|
||||
rig_debug(RIG_DEBUG_ERR, "Unsupported get_level %d\n", level);
|
||||
return -RIG_EINVAL;
|
||||
}
|
||||
|
||||
return RIG_OK;
|
||||
}
|
||||
|
||||
int drake_set_powerstat (RIG * rig, powerstat_t status)
|
||||
int drake_set_powerstat(RIG *rig, powerstat_t status)
|
||||
{
|
||||
char buf[16], ackbuf[16];
|
||||
int len, ack_len, retval;
|
||||
|
||||
len = sprintf(buf,"P%c" EOM, status==RIG_POWER_OFF?'F':'O');
|
||||
len = sprintf(buf, "P%c" EOM, status == RIG_POWER_OFF ? 'F' : 'O');
|
||||
|
||||
retval = drake_transaction(rig, buf, len, ackbuf, &ack_len);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
int drake_get_powerstat (RIG * rig, powerstat_t *status)
|
||||
int drake_get_powerstat(RIG *rig, powerstat_t *status)
|
||||
{
|
||||
int mdlen, retval;
|
||||
char mdbuf[BUFSZ];
|
||||
char mdbuf[BUFSZ];
|
||||
|
||||
retval = drake_transaction (rig, "RM" EOM, 3, mdbuf, &mdlen);
|
||||
retval = drake_transaction(rig, "RM" EOM, 3, mdbuf, &mdlen);
|
||||
|
||||
if (retval != RIG_OK)
|
||||
return retval;
|
||||
|
@ -1010,11 +1099,14 @@ DECLARE_PROBERIG_BACKEND(drake)
|
|||
if (!strcmp(idbuf, "R8B")) {
|
||||
if (cfunc)
|
||||
(*cfunc)(port, RIG_MODEL_DKR8B, data);
|
||||
|
||||
return RIG_MODEL_DKR8B;
|
||||
}
|
||||
|
||||
if (!strcmp(idbuf, "R8A")) { /* TBC */
|
||||
if (cfunc)
|
||||
(*cfunc)(port, RIG_MODEL_DKR8A, data);
|
||||
|
||||
return RIG_MODEL_DKR8A;
|
||||
}
|
||||
|
||||
|
@ -1022,7 +1114,7 @@ DECLARE_PROBERIG_BACKEND(drake)
|
|||
* not found...
|
||||
*/
|
||||
if (memcmp(idbuf, "ID" EOM, 3)) /* catch loopback serial */
|
||||
rig_debug(RIG_DEBUG_VERBOSE,"probe_drake: found unknown device "
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "probe_drake: found unknown device "
|
||||
"with ID '%s', please report to Hamlib "
|
||||
"developers.\n", idbuf);
|
||||
|
||||
|
|
897
icom/optoscan.c
897
icom/optoscan.c
Plik diff jest za duży
Load Diff
|
@ -0,0 +1,32 @@
|
|||
# astylerc--custom options for astyle
|
||||
# Intended to follow the Linux style guide as closely as possible:
|
||||
# https://www.kernel.org/doc/Documentation/CodingStyle
|
||||
|
||||
# Linux kernel style formatting/indenting.
|
||||
style=linux
|
||||
|
||||
# Use tabs with a width of 8 spaces.
|
||||
indent=force-tab=8
|
||||
|
||||
# Pad empty lines around header blocks (e.g. 'if', 'for', 'while'...).
|
||||
break-blocks
|
||||
|
||||
# Remove extra space padding around parenthesis on the inside and outside.
|
||||
unpad-paren
|
||||
|
||||
# Insert space padding around operators.
|
||||
pad-oper
|
||||
|
||||
# Insert space padding after paren headers only (e.g. 'if', 'for', 'while'...).
|
||||
pad-header
|
||||
|
||||
# Attach a pointer operator (*) to name (name) and reference operator (&)
|
||||
# to type (type).
|
||||
align-pointer=name
|
||||
align-reference=type
|
||||
|
||||
# Don't break one-line blocks.
|
||||
keep-one-line-blocks
|
||||
|
||||
# Don't break complex statements and multiple statements residing on a single line.
|
||||
keep-one-line-statements
|
132
tests/rigctld.c
132
tests/rigctld.c
|
@ -76,15 +76,14 @@
|
|||
* TODO: add an option to read from a file
|
||||
*/
|
||||
#define SHORT_OPTIONS "m:r:p:d:P:D:s:c:T:t:C:lLuovhV"
|
||||
static struct option long_options[] =
|
||||
{
|
||||
static struct option long_options[] = {
|
||||
{"model", 1, 0, 'm'},
|
||||
{"rig-file", 1, 0, 'r'},
|
||||
{"ptt-file", 1, 0, 'p'},
|
||||
{"dcd-file", 1, 0, 'd'},
|
||||
{"ptt-type", 1, 0, 'P'},
|
||||
{"dcd-type", 1, 0, 'D'},
|
||||
{"serial-speed",1, 0, 's'},
|
||||
{"serial-speed", 1, 0, 's'},
|
||||
{"civaddr", 1, 0, 'c'},
|
||||
{"listen-addr", 1, 0, 'T'},
|
||||
{"port", 1, 0, 't'},
|
||||
|
@ -106,7 +105,7 @@ struct handle_data {
|
|||
socklen_t clilen;
|
||||
};
|
||||
|
||||
void * handle_socket(void * arg);
|
||||
void *handle_socket(void *arg);
|
||||
void usage(void);
|
||||
|
||||
int interactive = 1; /* no cmd because of daemon */
|
||||
|
@ -120,7 +119,7 @@ const char *src_addr = NULL; /* INADDR_ANY */
|
|||
|
||||
#define MAXCONFLEN 128
|
||||
|
||||
static void handle_error (enum rig_debug_level_e lvl, const char *msg)
|
||||
static void handle_error(enum rig_debug_level_e lvl, const char *msg)
|
||||
{
|
||||
int e;
|
||||
#ifdef __MINGW32__
|
||||
|
@ -128,6 +127,7 @@ static void handle_error (enum rig_debug_level_e lvl, const char *msg)
|
|||
|
||||
lpMsgBuf = (LPVOID)"Unknown error";
|
||||
e = WSAGetLastError();
|
||||
|
||||
if (FormatMessage(
|
||||
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||
|
@ -136,18 +136,19 @@ static void handle_error (enum rig_debug_level_e lvl, const char *msg)
|
|||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
// Default language
|
||||
(LPTSTR)&lpMsgBuf, 0, NULL)) {
|
||||
rig_debug (lvl, "%s: Network error %d: %s\n", msg, e, lpMsgBuf);
|
||||
rig_debug(lvl, "%s: Network error %d: %s\n", msg, e, lpMsgBuf);
|
||||
LocalFree(lpMsgBuf);
|
||||
} else {
|
||||
rig_debug (lvl, "%s: Network error %d\n", msg, e);
|
||||
rig_debug(lvl, "%s: Network error %d\n", msg, e);
|
||||
}
|
||||
|
||||
#else
|
||||
e = errno;
|
||||
rig_debug (lvl, "%s: Network error %d: %s\n", msg, e, strerror (e));
|
||||
rig_debug(lvl, "%s: Network error %d: %s\n", msg, e, strerror(e));
|
||||
#endif
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
RIG *my_rig; /* handle to rig (instance) */
|
||||
rig_model_t my_model = RIG_MODEL_DUMMY;
|
||||
|
@ -157,7 +158,7 @@ int main (int argc, char *argv[])
|
|||
int verbose = 0;
|
||||
int show_conf = 0;
|
||||
int dump_caps_opt = 0;
|
||||
const char *rig_file=NULL, *ptt_file=NULL, *dcd_file=NULL;
|
||||
const char *rig_file = NULL, *ptt_file = NULL, *dcd_file = NULL;
|
||||
ptt_type_t ptt_type = RIG_PTT_NONE;
|
||||
dcd_type_t dcd_type = RIG_DCD_NONE;
|
||||
int serial_rate = 0;
|
||||
|
@ -175,51 +176,63 @@ int main (int argc, char *argv[])
|
|||
int c;
|
||||
int option_index = 0;
|
||||
|
||||
c = getopt_long (argc, argv, SHORT_OPTIONS,
|
||||
long_options, &option_index);
|
||||
c = getopt_long(argc, argv, SHORT_OPTIONS,
|
||||
long_options, &option_index);
|
||||
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
switch(c) {
|
||||
switch (c) {
|
||||
case 'h':
|
||||
usage();
|
||||
exit(0);
|
||||
|
||||
case 'V':
|
||||
version();
|
||||
exit(0);
|
||||
|
||||
case 'm':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my_model = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
rig_file = optarg;
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ptt_file = optarg;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
dcd_file = optarg;
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!strcmp(optarg, "RIG"))
|
||||
ptt_type = RIG_PTT_RIG;
|
||||
else if (!strcmp(optarg, "DTR"))
|
||||
|
@ -234,12 +247,15 @@ int main (int argc, char *argv[])
|
|||
ptt_type = RIG_PTT_NONE;
|
||||
else
|
||||
ptt_type = atoi(optarg);
|
||||
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!strcmp(optarg, "RIG"))
|
||||
dcd_type = RIG_DCD_RIG;
|
||||
else if (!strcmp(optarg, "DSR"))
|
||||
|
@ -254,59 +270,77 @@ int main (int argc, char *argv[])
|
|||
dcd_type = RIG_DCD_NONE;
|
||||
else
|
||||
dcd_type = atoi(optarg);
|
||||
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
civaddr = optarg;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
serial_rate = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (*conf_parms != '\0')
|
||||
strcat(conf_parms, ",");
|
||||
strncat(conf_parms, optarg, MAXCONFLEN-strlen(conf_parms));
|
||||
|
||||
strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms));
|
||||
break;
|
||||
|
||||
case 't':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
portno = optarg;
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
src_addr = optarg;
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
vfo_mode++;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose++;
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
show_conf++;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
list_models();
|
||||
exit(0);
|
||||
|
||||
case 'u':
|
||||
dump_caps_opt++;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(); /* unknown option? */
|
||||
exit(1);
|
||||
|
@ -343,17 +377,22 @@ int main (int argc, char *argv[])
|
|||
*/
|
||||
if (ptt_type != RIG_PTT_NONE)
|
||||
my_rig->state.pttport.type.ptt = ptt_type;
|
||||
|
||||
if (dcd_type != RIG_DCD_NONE)
|
||||
my_rig->state.dcdport.type.dcd = dcd_type;
|
||||
|
||||
if (ptt_file)
|
||||
strncpy(my_rig->state.pttport.pathname, ptt_file, FILPATHLEN - 1);
|
||||
|
||||
if (dcd_file)
|
||||
strncpy(my_rig->state.dcdport.pathname, dcd_file, FILPATHLEN - 1);
|
||||
|
||||
/* FIXME: bound checking and port type == serial */
|
||||
if (serial_rate != 0)
|
||||
my_rig->state.rigport.parm.serial.rate = serial_rate;
|
||||
|
||||
if (civaddr)
|
||||
rig_set_conf(my_rig, rig_token_lookup(my_rig, "civaddr"), civaddr);
|
||||
rig_set_conf(my_rig, rig_token_lookup(my_rig, "civaddr"), civaddr);
|
||||
|
||||
/*
|
||||
* print out conf parameters
|
||||
|
@ -375,7 +414,7 @@ int main (int argc, char *argv[])
|
|||
retcode = rig_open(my_rig);
|
||||
|
||||
if (retcode != RIG_OK) {
|
||||
fprintf(stderr,"rig_open: error = %s \n", rigerror(retcode));
|
||||
fprintf(stderr, "rig_open: error = %s \n", rigerror(retcode));
|
||||
exit(2);
|
||||
}
|
||||
|
||||
|
@ -398,8 +437,9 @@ int main (int argc, char *argv[])
|
|||
# endif
|
||||
|
||||
WSADATA wsadata;
|
||||
if (WSAStartup(MAKEWORD(1,1), &wsadata) == SOCKET_ERROR) {
|
||||
fprintf(stderr,"WSAStartup socket error\n");
|
||||
|
||||
if (WSAStartup(MAKEWORD(1, 1), &wsadata) == SOCKET_ERROR) {
|
||||
fprintf(stderr, "WSAStartup socket error\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -417,51 +457,57 @@ int main (int argc, char *argv[])
|
|||
hints.ai_protocol = 0; /* Any protocol */
|
||||
|
||||
retcode = getaddrinfo(src_addr, portno, &hints, &result);
|
||||
|
||||
if (retcode != 0) {
|
||||
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(retcode));
|
||||
exit(2);
|
||||
}
|
||||
|
||||
saved_result = result;
|
||||
|
||||
do {
|
||||
sock_listen = socket(result->ai_family, result->ai_socktype,
|
||||
result->ai_protocol);
|
||||
|
||||
if (sock_listen < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "socket");
|
||||
handle_error(RIG_DEBUG_ERR, "socket");
|
||||
freeaddrinfo(saved_result); /* No longer needed */
|
||||
exit(2);
|
||||
}
|
||||
|
||||
if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR,
|
||||
(char *)&reuseaddr, sizeof(reuseaddr)) < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "setsockopt");
|
||||
handle_error(RIG_DEBUG_ERR, "setsockopt");
|
||||
freeaddrinfo(saved_result); /* No longer needed */
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifdef IPV6_V6ONLY
|
||||
|
||||
if (AF_INET6 == result->ai_family) {
|
||||
/* allow IPv4 mapped to IPv6 clients Windows and BSD default
|
||||
this to 1 (i.e. disallowed) and we prefer it off */
|
||||
sockopt = 0;
|
||||
|
||||
if (setsockopt(sock_listen, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
(char *)&sockopt, sizeof(sockopt)) < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "setsockopt");
|
||||
handle_error(RIG_DEBUG_ERR, "setsockopt");
|
||||
freeaddrinfo(saved_result); /* No longer needed */
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (0 == bind(sock_listen, result->ai_addr, result->ai_addrlen)) {
|
||||
break;
|
||||
}
|
||||
|
||||
handle_error (RIG_DEBUG_WARN, "binding failed (trying next interface)");
|
||||
handle_error(RIG_DEBUG_WARN, "binding failed (trying next interface)");
|
||||
#ifdef __MINGW32__
|
||||
closesocket (sock_listen);
|
||||
closesocket(sock_listen);
|
||||
#else
|
||||
close (sock_listen);
|
||||
close(sock_listen);
|
||||
#endif
|
||||
} while ((result = result->ai_next) != NULL);
|
||||
|
||||
|
@ -469,12 +515,12 @@ int main (int argc, char *argv[])
|
|||
|
||||
if (NULL == result) {
|
||||
rig_debug(RIG_DEBUG_ERR, "bind error - no available interface\n");
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (listen(sock_listen, 4) < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "listening");
|
||||
exit (1);
|
||||
handle_error(RIG_DEBUG_ERR, "listening");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -491,21 +537,21 @@ int main (int argc, char *argv[])
|
|||
|
||||
if (!arg) {
|
||||
rig_debug(RIG_DEBUG_ERR, "malloc: %s\n", strerror(errno));
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
arg->rig = my_rig;
|
||||
arg->clilen = sizeof (arg->cli_addr);
|
||||
arg->clilen = sizeof(arg->cli_addr);
|
||||
arg->sock = accept(sock_listen, (struct sockaddr *)&arg->cli_addr, &arg->clilen);
|
||||
|
||||
if (arg->sock < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "accept");
|
||||
handle_error(RIG_DEBUG_ERR, "accept");
|
||||
break;
|
||||
}
|
||||
|
||||
if ((retcode = getnameinfo ((struct sockaddr const *)&arg->cli_addr, arg->clilen, host,
|
||||
sizeof (host), serv, sizeof (serv), NI_NOFQDN)) < 0) {
|
||||
rig_debug (RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror (retcode));
|
||||
if ((retcode = getnameinfo((struct sockaddr const *)&arg->cli_addr, arg->clilen, host,
|
||||
sizeof(host), serv, sizeof(serv), NI_NOFQDN)) < 0) {
|
||||
rig_debug(RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror(retcode));
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "Connection opened from %s:%s\n", host, serv);
|
||||
|
@ -520,6 +566,7 @@ int main (int argc, char *argv[])
|
|||
rig_debug(RIG_DEBUG_ERR, "pthread_create: %s\n", strerror(retcode));
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
handle_socket(arg);
|
||||
#endif
|
||||
|
@ -539,7 +586,7 @@ int main (int argc, char *argv[])
|
|||
/*
|
||||
* This is the function run by the threads
|
||||
*/
|
||||
void * handle_socket(void *arg)
|
||||
void *handle_socket(void *arg)
|
||||
{
|
||||
struct handle_data *handle_data_arg = (struct handle_data *)arg;
|
||||
FILE *fsockin;
|
||||
|
@ -560,6 +607,7 @@ void * handle_socket(void *arg)
|
|||
#else
|
||||
fsockin = fdopen(handle_data_arg->sock, "rb");
|
||||
#endif
|
||||
|
||||
if (!fsockin) {
|
||||
rig_debug(RIG_DEBUG_ERR, "fdopen in: %s\n", strerror(errno));
|
||||
goto handle_exit;
|
||||
|
@ -570,6 +618,7 @@ void * handle_socket(void *arg)
|
|||
#else
|
||||
fsockout = fdopen(handle_data_arg->sock, "wb");
|
||||
#endif
|
||||
|
||||
if (!fsockout) {
|
||||
rig_debug(RIG_DEBUG_ERR, "fdopen out: %s\n", strerror(errno));
|
||||
fclose(fsockin);
|
||||
|
@ -579,14 +628,15 @@ void * handle_socket(void *arg)
|
|||
|
||||
do {
|
||||
retcode = rigctl_parse(handle_data_arg->rig, fsockin, fsockout, NULL, 0);
|
||||
|
||||
if (ferror(fsockin) || ferror(fsockout))
|
||||
retcode = 1;
|
||||
} while (retcode == 0 || retcode == 2);
|
||||
|
||||
if ((retcode = getnameinfo ((struct sockaddr const *)&handle_data_arg->cli_addr,
|
||||
handle_data_arg->clilen, host, sizeof (host),
|
||||
serv, sizeof (serv), NI_NOFQDN)) < 0) {
|
||||
rig_debug (RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror (retcode));
|
||||
if ((retcode = getnameinfo((struct sockaddr const *)&handle_data_arg->cli_addr,
|
||||
handle_data_arg->clilen, host, sizeof(host),
|
||||
serv, sizeof(serv), NI_NOFQDN)) < 0) {
|
||||
rig_debug(RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror(retcode));
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "Connection closed from %s:%s\n",
|
||||
|
@ -636,7 +686,7 @@ void usage(void)
|
|||
" -v, --verbose set verbose mode, cumulative\n"
|
||||
" -h, --help display this help and exit\n"
|
||||
" -V, --version output version information and exit\n\n",
|
||||
portno );
|
||||
portno);
|
||||
|
||||
usage_rig(stdout);
|
||||
|
||||
|
|
110
tests/rotctld.c
110
tests/rotctld.c
|
@ -72,7 +72,7 @@ struct handle_data {
|
|||
socklen_t clilen;
|
||||
};
|
||||
|
||||
void * handle_socket(void * arg);
|
||||
void *handle_socket(void *arg);
|
||||
|
||||
void usage();
|
||||
|
||||
|
@ -83,11 +83,10 @@ void usage();
|
|||
* TODO: add an option to read from a file
|
||||
*/
|
||||
#define SHORT_OPTIONS "m:r:s:C:t:T:LuvhVl"
|
||||
static struct option long_options[] =
|
||||
{
|
||||
static struct option long_options[] = {
|
||||
{"model", 1, 0, 'm'},
|
||||
{"rot-file", 1, 0, 'r'},
|
||||
{"serial-speed",1, 0, 's'},
|
||||
{"serial-speed", 1, 0, 's'},
|
||||
{"port", 1, 0, 't'},
|
||||
{"listen-addr", 1, 0, 'T'},
|
||||
{"list", 0, 0, 'l'},
|
||||
|
@ -101,7 +100,7 @@ static struct option long_options[] =
|
|||
};
|
||||
|
||||
int interactive = 1; /* no cmd because of daemon */
|
||||
int prompt= 0 ; /* Daemon mode for rigparse return string */
|
||||
int prompt = 0 ; /* Daemon mode for rigparse return string */
|
||||
|
||||
const char *portno = "4533";
|
||||
const char *src_addr = NULL; /* INADDR_ANY */
|
||||
|
@ -111,7 +110,7 @@ char send_cmd_term = '\r'; /* send_cmd termination char */
|
|||
#define MAXCONFLEN 128
|
||||
|
||||
|
||||
static void handle_error (enum rig_debug_level_e lvl, const char *msg)
|
||||
static void handle_error(enum rig_debug_level_e lvl, const char *msg)
|
||||
{
|
||||
int e;
|
||||
#ifdef __MINGW32__
|
||||
|
@ -128,18 +127,19 @@ static void handle_error (enum rig_debug_level_e lvl, const char *msg)
|
|||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
// Default language
|
||||
(LPTSTR)&lpMsgBuf, 0, NULL)) {
|
||||
rig_debug (lvl, "%s: Network error %d: %s\n", msg, e, lpMsgBuf);
|
||||
rig_debug(lvl, "%s: Network error %d: %s\n", msg, e, lpMsgBuf);
|
||||
LocalFree(lpMsgBuf);
|
||||
} else {
|
||||
rig_debug (lvl, "%s: Network error %d\n", msg, e);
|
||||
rig_debug(lvl, "%s: Network error %d\n", msg, e);
|
||||
}
|
||||
|
||||
#else
|
||||
e = errno;
|
||||
rig_debug (lvl, "%s: Network error %d: %s\n", msg, e, strerror (e));
|
||||
rig_debug(lvl, "%s: Network error %d: %s\n", msg, e, strerror(e));
|
||||
#endif
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
ROT *my_rot; /* handle to rot (instance) */
|
||||
rot_model_t my_model = ROT_MODEL_DUMMY;
|
||||
|
@ -149,7 +149,7 @@ int main (int argc, char *argv[])
|
|||
int verbose = 0;
|
||||
int show_conf = 0;
|
||||
int dump_caps_opt = 0;
|
||||
const char *rot_file=NULL;
|
||||
const char *rot_file = NULL;
|
||||
int serial_rate = 0;
|
||||
char conf_parms[MAXCONFLEN] = "";
|
||||
|
||||
|
@ -160,78 +160,98 @@ int main (int argc, char *argv[])
|
|||
char host[NI_MAXHOST];
|
||||
char serv[NI_MAXSERV];
|
||||
|
||||
while(1) {
|
||||
while (1) {
|
||||
int c;
|
||||
int option_index = 0;
|
||||
|
||||
c = getopt_long(argc, argv, SHORT_OPTIONS,
|
||||
long_options, &option_index);
|
||||
long_options, &option_index);
|
||||
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
switch(c) {
|
||||
switch (c) {
|
||||
case 'h':
|
||||
usage();
|
||||
exit(0);
|
||||
|
||||
case 'V':
|
||||
version();
|
||||
exit(0);
|
||||
|
||||
case 'm':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
my_model = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
rot_file = optarg;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
serial_rate = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'C':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (*conf_parms != '\0')
|
||||
strcat(conf_parms, ",");
|
||||
strncat(conf_parms, optarg, MAXCONFLEN-strlen(conf_parms));
|
||||
|
||||
strncat(conf_parms, optarg, MAXCONFLEN - strlen(conf_parms));
|
||||
break;
|
||||
|
||||
case 't':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
portno = optarg;
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
if (!optarg) {
|
||||
usage(); /* wrong arg count */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
src_addr = optarg;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose++;
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
show_conf++;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
list_models();
|
||||
exit(0);
|
||||
|
||||
case 'u':
|
||||
dump_caps_opt++;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(); /* unknown option? */
|
||||
exit(1);
|
||||
|
@ -287,7 +307,7 @@ int main (int argc, char *argv[])
|
|||
retcode = rot_open(my_rot);
|
||||
|
||||
if (retcode != RIG_OK) {
|
||||
fprintf(stderr,"rot_open: error = %s \n", rigerror(retcode));
|
||||
fprintf(stderr, "rot_open: error = %s \n", rigerror(retcode));
|
||||
exit(2);
|
||||
}
|
||||
|
||||
|
@ -311,8 +331,8 @@ int main (int argc, char *argv[])
|
|||
|
||||
WSADATA wsadata;
|
||||
|
||||
if (WSAStartup(MAKEWORD(1,1), &wsadata) == SOCKET_ERROR) {
|
||||
fprintf(stderr,"WSAStartup socket error\n");
|
||||
if (WSAStartup(MAKEWORD(1, 1), &wsadata) == SOCKET_ERROR) {
|
||||
fprintf(stderr, "WSAStartup socket error\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -330,6 +350,7 @@ int main (int argc, char *argv[])
|
|||
hints.ai_protocol = 0; /* Any protocol */
|
||||
|
||||
retcode = getaddrinfo(src_addr, portno, &hints, &result);
|
||||
|
||||
if (retcode != 0) {
|
||||
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(retcode));
|
||||
exit(2);
|
||||
|
@ -342,19 +363,20 @@ int main (int argc, char *argv[])
|
|||
result->ai_protocol);
|
||||
|
||||
if (sock_listen < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "socket");
|
||||
handle_error(RIG_DEBUG_ERR, "socket");
|
||||
freeaddrinfo(result); /* No longer needed */
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR,
|
||||
(char *)&reuseaddr,sizeof(reuseaddr)) < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "setsockopt");
|
||||
(char *)&reuseaddr, sizeof(reuseaddr)) < 0) {
|
||||
handle_error(RIG_DEBUG_ERR, "setsockopt");
|
||||
freeaddrinfo(result); /* No longer needed */
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifdef IPV6_V6ONLY
|
||||
|
||||
if (AF_INET6 == result->ai_family) {
|
||||
/* allow IPv4 mapped to IPv6 clients, MS & BSD default this
|
||||
to 1 i.e. disallowed */
|
||||
|
@ -362,21 +384,23 @@ int main (int argc, char *argv[])
|
|||
|
||||
if (setsockopt(sock_listen, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
(char *)&sockopt, sizeof(sockopt)) < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "setsockopt");
|
||||
handle_error(RIG_DEBUG_ERR, "setsockopt");
|
||||
freeaddrinfo(saved_result); /* No longer needed */
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
if (0 == bind(sock_listen, result->ai_addr, result->ai_addrlen)) {
|
||||
break;
|
||||
}
|
||||
handle_error (RIG_DEBUG_WARN, "binding failed (trying next interface)");
|
||||
|
||||
handle_error(RIG_DEBUG_WARN, "binding failed (trying next interface)");
|
||||
#ifdef __MINGW32__
|
||||
closesocket (sock_listen);
|
||||
closesocket(sock_listen);
|
||||
#else
|
||||
close (sock_listen);
|
||||
close(sock_listen);
|
||||
#endif
|
||||
} while ((result = result->ai_next) != NULL);
|
||||
|
||||
|
@ -384,12 +408,12 @@ int main (int argc, char *argv[])
|
|||
|
||||
if (NULL == result) {
|
||||
rig_debug(RIG_DEBUG_ERR, "bind error - no available interface\n");
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (listen(sock_listen, 4) < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "listening");
|
||||
exit (1);
|
||||
handle_error(RIG_DEBUG_ERR, "listening");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -406,7 +430,7 @@ int main (int argc, char *argv[])
|
|||
|
||||
if (!arg) {
|
||||
rig_debug(RIG_DEBUG_ERR, "malloc: %s\n", strerror(errno));
|
||||
exit (1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
arg->rot = my_rot;
|
||||
|
@ -415,14 +439,14 @@ int main (int argc, char *argv[])
|
|||
&arg->clilen);
|
||||
|
||||
if (arg->sock < 0) {
|
||||
handle_error (RIG_DEBUG_ERR, "accept");
|
||||
handle_error(RIG_DEBUG_ERR, "accept");
|
||||
break;
|
||||
}
|
||||
|
||||
if ((retcode = getnameinfo ((struct sockaddr const *)&arg->cli_addr, arg->clilen,
|
||||
host, sizeof (host), serv, sizeof (serv),
|
||||
NI_NOFQDN)) < 0) {
|
||||
rig_debug (RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror (retcode));
|
||||
if ((retcode = getnameinfo((struct sockaddr const *)&arg->cli_addr, arg->clilen,
|
||||
host, sizeof(host), serv, sizeof(serv),
|
||||
NI_NOFQDN)) < 0) {
|
||||
rig_debug(RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror(retcode));
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "Connection opened from %s:%s\n",
|
||||
|
@ -438,6 +462,7 @@ int main (int argc, char *argv[])
|
|||
rig_debug(RIG_DEBUG_ERR, "pthread_create: %s\n", strerror(retcode));
|
||||
break;
|
||||
}
|
||||
|
||||
#else
|
||||
handle_socket(arg);
|
||||
#endif
|
||||
|
@ -457,7 +482,7 @@ int main (int argc, char *argv[])
|
|||
/*
|
||||
* This is the function run by the threads
|
||||
*/
|
||||
void * handle_socket(void *arg)
|
||||
void *handle_socket(void *arg)
|
||||
{
|
||||
struct handle_data *handle_data_arg = (struct handle_data *)arg;
|
||||
FILE *fsockin;
|
||||
|
@ -478,6 +503,7 @@ void * handle_socket(void *arg)
|
|||
#else
|
||||
fsockin = fdopen(handle_data_arg->sock, "rb");
|
||||
#endif
|
||||
|
||||
if (!fsockin) {
|
||||
rig_debug(RIG_DEBUG_ERR, "fdopen in: %s\n", strerror(errno));
|
||||
goto handle_exit;
|
||||
|
@ -488,6 +514,7 @@ void * handle_socket(void *arg)
|
|||
#else
|
||||
fsockout = fdopen(handle_data_arg->sock, "wb");
|
||||
#endif
|
||||
|
||||
if (!fsockout) {
|
||||
rig_debug(RIG_DEBUG_ERR, "fdopen out: %s\n", strerror(errno));
|
||||
fclose(fsockin);
|
||||
|
@ -496,14 +523,15 @@ void * handle_socket(void *arg)
|
|||
|
||||
do {
|
||||
retcode = rotctl_parse(handle_data_arg->rot, fsockin, fsockout, NULL, 0);
|
||||
|
||||
if (ferror(fsockin) || ferror(fsockout))
|
||||
retcode = 1;
|
||||
} while (retcode == 0 || retcode == 2);
|
||||
|
||||
if ((retcode = getnameinfo ((struct sockaddr const *)&handle_data_arg->cli_addr,
|
||||
handle_data_arg->clilen, host, sizeof (host),
|
||||
serv, sizeof (serv), NI_NOFQDN)) < 0) {
|
||||
rig_debug (RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror (retcode));
|
||||
if ((retcode = getnameinfo((struct sockaddr const *)&handle_data_arg->cli_addr,
|
||||
handle_data_arg->clilen, host, sizeof(host),
|
||||
serv, sizeof(serv), NI_NOFQDN)) < 0) {
|
||||
rig_debug(RIG_DEBUG_WARN, "Peer lookup error: %s", gai_strerror(retcode));
|
||||
}
|
||||
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "Connection closed from %s:%s\n",
|
||||
|
|
Ładowanie…
Reference in New Issue