kopia lustrzana https://github.com/Hamlib/Hamlib
argument checking in rig_set_conf, patch from Zhang Bo + edit
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2593 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.9
rodzic
48ea7c9263
commit
03cc4f3787
278
src/conf.c
278
src/conf.c
|
@ -7,13 +7,13 @@
|
||||||
* \file src/conf.c
|
* \file src/conf.c
|
||||||
* \brief Rig configuration interface
|
* \brief Rig configuration interface
|
||||||
* \author Stephane Fillod
|
* \author Stephane Fillod
|
||||||
* \date 2000-2006
|
* \date 2000-2009
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Hamlib Interface - configuration interface
|
* Hamlib Interface - configuration interface
|
||||||
* Copyright (c) 2000-2006 by Stephane Fillod
|
* Copyright (c) 2000-2009 by Stephane Fillod
|
||||||
*
|
*
|
||||||
* $Id: conf.c,v 1.17 2008-05-08 12:40:04 fillods Exp $
|
* $Id: conf.c,v 1.18 2009-01-25 14:25:46 fillods Exp $
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or modify
|
* This library is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU Library General Public License as
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
@ -116,135 +116,157 @@ static const struct confparams frontend_cfg_params[] = {
|
||||||
/*
|
/*
|
||||||
* frontend_set_conf
|
* frontend_set_conf
|
||||||
* assumes rig!=NULL, val!=NULL
|
* assumes rig!=NULL, val!=NULL
|
||||||
* TODO: check format of val before doing atoi().
|
|
||||||
*/
|
*/
|
||||||
static int frontend_set_conf(RIG *rig, token_t token, const char *val)
|
static int frontend_set_conf(RIG *rig, token_t token, const char *val)
|
||||||
{
|
{
|
||||||
const struct rig_caps *caps;
|
const struct rig_caps *caps;
|
||||||
struct rig_state *rs;
|
struct rig_state *rs;
|
||||||
int val_i;
|
int val_i;
|
||||||
|
|
||||||
caps = rig->caps;
|
caps = rig->caps;
|
||||||
rs = &rig->state;
|
rs = &rig->state;
|
||||||
|
|
||||||
switch(token) {
|
switch(token) {
|
||||||
case TOK_PATHNAME:
|
case TOK_PATHNAME:
|
||||||
strcpy(rs->rigport.pathname, val);
|
strncpy(rs->rigport.pathname, val, FILPATHLEN-1);
|
||||||
break;
|
break;
|
||||||
case TOK_WRITE_DELAY:
|
case TOK_WRITE_DELAY:
|
||||||
rs->rigport.write_delay = atoi(val);
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
break;
|
return -RIG_EINVAL;//value format error
|
||||||
case TOK_POST_WRITE_DELAY:
|
}
|
||||||
rs->rigport.post_write_delay = atoi(val);
|
rs->rigport.write_delay = val_i;
|
||||||
break;
|
break;
|
||||||
case TOK_TIMEOUT:
|
case TOK_POST_WRITE_DELAY:
|
||||||
rs->rigport.timeout = atoi(val);
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
break;
|
return -RIG_EINVAL;//value format error
|
||||||
case TOK_RETRY:
|
}
|
||||||
rs->rigport.retry = atoi(val);
|
rs->rigport.post_write_delay = val_i;
|
||||||
break;
|
break;
|
||||||
|
case TOK_TIMEOUT:
|
||||||
case TOK_SERIAL_SPEED:
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
return -RIG_EINVAL;//value format error
|
||||||
return -RIG_EINVAL;
|
}
|
||||||
rs->rigport.parm.serial.rate = atoi(val);
|
rs->rigport.timeout = val_i;
|
||||||
break;
|
break;
|
||||||
case TOK_DATA_BITS:
|
case TOK_RETRY:
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;//value format error
|
||||||
rs->rigport.parm.serial.data_bits = atoi(val);
|
}
|
||||||
break;
|
rs->rigport.retry = val_i;
|
||||||
case TOK_STOP_BITS:
|
break;
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
|
||||||
return -RIG_EINVAL;
|
case TOK_SERIAL_SPEED:
|
||||||
rs->rigport.parm.serial.stop_bits = atoi(val);
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
break;
|
return -RIG_EINVAL;
|
||||||
case TOK_PARITY:
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
return -RIG_EINVAL;//value format error
|
||||||
return -RIG_EINVAL;
|
}
|
||||||
if (!strncmp(val, "None", 8))
|
rs->rigport.parm.serial.rate = val_i;
|
||||||
rs->rigport.parm.serial.parity = RIG_PARITY_NONE;
|
break;
|
||||||
else if (!strncmp(val, "Odd", 8))
|
case TOK_DATA_BITS:
|
||||||
rs->rigport.parm.serial.parity = RIG_PARITY_ODD;
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
else if (!strncmp(val, "Even", 8))
|
return -RIG_EINVAL;
|
||||||
rs->rigport.parm.serial.parity = RIG_PARITY_EVEN;
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
else
|
return -RIG_EINVAL;//value format error
|
||||||
return -RIG_EINVAL;
|
}
|
||||||
break;
|
rs->rigport.parm.serial.data_bits = val_i;
|
||||||
case TOK_HANDSHAKE:
|
break;
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
case TOK_STOP_BITS:
|
||||||
return -RIG_EINVAL;
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
if (!strncmp(val, "None", 8))
|
return -RIG_EINVAL;
|
||||||
rs->rigport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
else if (!strncmp(val, "XONXOFF", 8))
|
return -RIG_EINVAL;//value format error
|
||||||
rs->rigport.parm.serial.handshake = RIG_HANDSHAKE_XONXOFF;
|
}
|
||||||
else if (!strncmp(val, "Hardware", 8))
|
rs->rigport.parm.serial.stop_bits = val_i;
|
||||||
rs->rigport.parm.serial.handshake = RIG_HANDSHAKE_HARDWARE;
|
break;
|
||||||
else
|
case TOK_PARITY:
|
||||||
return -RIG_EINVAL;
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
break;
|
return -RIG_EINVAL;
|
||||||
|
if (!strcmp(val, "None"))
|
||||||
case TOK_RTS_STATE:
|
rs->rigport.parm.serial.parity = RIG_PARITY_NONE;
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
else if (!strcmp(val, "Odd"))
|
||||||
return -RIG_EINVAL;
|
rs->rigport.parm.serial.parity = RIG_PARITY_ODD;
|
||||||
if (!strcmp(val, "Unset"))
|
else if (!strcmp(val, "Even"))
|
||||||
rs->rigport.parm.serial.rts_state = RIG_SIGNAL_UNSET;
|
rs->rigport.parm.serial.parity = RIG_PARITY_EVEN;
|
||||||
else if (!strcmp(val, "ON"))
|
else
|
||||||
rs->rigport.parm.serial.rts_state = RIG_SIGNAL_ON;
|
return -RIG_EINVAL;
|
||||||
else if (!strcmp(val, "OFF"))
|
break;
|
||||||
rs->rigport.parm.serial.rts_state = RIG_SIGNAL_OFF;
|
case TOK_HANDSHAKE:
|
||||||
else
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
break;
|
if (!strcmp(val, "None"))
|
||||||
|
rs->rigport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
|
||||||
case TOK_DTR_STATE:
|
else if (!strcmp(val, "XONXOFF"))
|
||||||
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
rs->rigport.parm.serial.handshake = RIG_HANDSHAKE_XONXOFF;
|
||||||
return -RIG_EINVAL;
|
else if (!strcmp(val, "Hardware"))
|
||||||
if (!strcmp(val, "Unset"))
|
rs->rigport.parm.serial.handshake = RIG_HANDSHAKE_HARDWARE;
|
||||||
rs->rigport.parm.serial.dtr_state = RIG_SIGNAL_UNSET;
|
else
|
||||||
else if (!strcmp(val, "ON"))
|
return -RIG_EINVAL;
|
||||||
rs->rigport.parm.serial.dtr_state = RIG_SIGNAL_ON;
|
break;
|
||||||
else if (!strcmp(val, "OFF"))
|
|
||||||
rs->rigport.parm.serial.dtr_state = RIG_SIGNAL_OFF;
|
case TOK_RTS_STATE:
|
||||||
else
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
break;
|
if (!strcmp(val, "Unset"))
|
||||||
|
rs->rigport.parm.serial.rts_state = RIG_SIGNAL_UNSET;
|
||||||
case TOK_ITU_REGION:
|
else if (!strcmp(val, "ON"))
|
||||||
val_i = atoi(val);
|
rs->rigport.parm.serial.rts_state = RIG_SIGNAL_ON;
|
||||||
|
else if (!strcmp(val, "OFF"))
|
||||||
|
rs->rigport.parm.serial.rts_state = RIG_SIGNAL_OFF;
|
||||||
|
else
|
||||||
|
return -RIG_EINVAL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TOK_DTR_STATE:
|
||||||
|
if (rs->rigport.type.rig != RIG_PORT_SERIAL)
|
||||||
|
return -RIG_EINVAL;
|
||||||
|
if (!strcmp(val, "Unset"))
|
||||||
|
rs->rigport.parm.serial.dtr_state = RIG_SIGNAL_UNSET;
|
||||||
|
else if (!strcmp(val, "ON"))
|
||||||
|
rs->rigport.parm.serial.dtr_state = RIG_SIGNAL_ON;
|
||||||
|
else if (!strcmp(val, "OFF"))
|
||||||
|
rs->rigport.parm.serial.dtr_state = RIG_SIGNAL_OFF;
|
||||||
|
else
|
||||||
|
return -RIG_EINVAL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TOK_ITU_REGION:
|
||||||
|
if (1 != sscanf(val, "%d", &val_i)){
|
||||||
|
return -RIG_EINVAL;//value format error
|
||||||
|
}
|
||||||
switch(val_i) {
|
switch(val_i) {
|
||||||
case RIG_ITU_REGION1:
|
case RIG_ITU_REGION1:
|
||||||
rs->itu_region = val_i;
|
rs->itu_region = val_i;
|
||||||
memcpy(rs->tx_range_list, caps->tx_range_list1,
|
memcpy(rs->tx_range_list, caps->tx_range_list1,
|
||||||
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
||||||
memcpy(rs->rx_range_list, caps->rx_range_list1,
|
memcpy(rs->rx_range_list, caps->rx_range_list1,
|
||||||
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
||||||
break;
|
break;
|
||||||
case RIG_ITU_REGION2:
|
case RIG_ITU_REGION2:
|
||||||
case RIG_ITU_REGION3:
|
case RIG_ITU_REGION3:
|
||||||
rs->itu_region = val_i;
|
rs->itu_region = val_i;
|
||||||
memcpy(rs->tx_range_list, caps->tx_range_list2,
|
memcpy(rs->tx_range_list, caps->tx_range_list2,
|
||||||
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
||||||
memcpy(rs->rx_range_list, caps->rx_range_list2,
|
memcpy(rs->rx_range_list, caps->rx_range_list2,
|
||||||
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
sizeof(struct freq_range_list)*FRQRANGESIZ);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TOK_VFO_COMP:
|
case TOK_VFO_COMP:
|
||||||
rs->vfo_comp = atof(val);
|
rs->vfo_comp = atof(val);
|
||||||
break;
|
break;
|
||||||
case TOK_POLL_INTERVAL:
|
case TOK_POLL_INTERVAL:
|
||||||
rs->poll_interval = atof(val);
|
rs->poll_interval = atof(val);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -RIG_EINVAL;
|
return -RIG_EINVAL;
|
||||||
}
|
}
|
||||||
return RIG_OK;
|
return RIG_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Ładowanie…
Reference in New Issue