kopia lustrzana https://github.com/Hamlib/Hamlib
flexible rmode_t conversion, detect overflow in kenwood_transaction()
git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2346 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.8
rodzic
3d834a4d1f
commit
2514c47659
|
@ -2,7 +2,7 @@
|
||||||
* Hamlib Kenwood backend - main file
|
* Hamlib Kenwood backend - main file
|
||||||
* Copyright (c) 2000-2005 by Stephane Fillod and others
|
* Copyright (c) 2000-2005 by Stephane Fillod and others
|
||||||
*
|
*
|
||||||
* $Id: kenwood.c,v 1.96 2008-03-01 11:20:29 fillods Exp $
|
* $Id: kenwood.c,v 1.97 2008-05-04 21:19:07 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
|
||||||
|
@ -155,11 +155,6 @@ transaction_write:
|
||||||
retval = write_block(&rs->rigport, cmdstr, strlen(cmdstr));
|
retval = write_block(&rs->rigport, cmdstr, strlen(cmdstr));
|
||||||
if (retval != RIG_OK)
|
if (retval != RIG_OK)
|
||||||
goto transaction_quit;
|
goto transaction_quit;
|
||||||
#ifdef TH_ADD_CMDTRM
|
|
||||||
retval = write_block(&rs->rigport, cmdtrm, strlen(cmdtrm));
|
|
||||||
if (retval != RIG_OK)
|
|
||||||
goto transaction_quit;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data == NULL || *datasize <= 0) {
|
if (data == NULL || *datasize <= 0) {
|
||||||
|
@ -185,18 +180,24 @@ transaction_write:
|
||||||
goto transaction_quit;
|
goto transaction_quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Command recognised by rig but invalid data entered. */
|
if (strlen(data) == 2) {
|
||||||
if (strlen(data) == 2 && data[0] == 'N') {
|
switch (data[0]) {
|
||||||
rig_debug(RIG_DEBUG_VERBOSE, "%s: NegAck for '%s'\n", __FUNCTION__, cmdstr);
|
case 'N':
|
||||||
retval = -RIG_ENAVAIL;
|
/* Command recognised by rig but invalid data entered. */
|
||||||
goto transaction_quit;
|
rig_debug(RIG_DEBUG_VERBOSE, "%s: NegAck for '%s'\n", __FUNCTION__, cmdstr);
|
||||||
}
|
retval = -RIG_ENAVAIL;
|
||||||
|
goto transaction_quit;
|
||||||
/* Command not understood by rig */
|
case 'O':
|
||||||
if (strlen(data) == 2 && data[0] == '?') {
|
/* Too many characters send without a carriage return */
|
||||||
rig_debug(RIG_DEBUG_ERR, "%s: Unknown command '%s'\n", __FUNCTION__, cmdstr);
|
rig_debug(RIG_DEBUG_VERBOSE, "%s: Overflow for '%s'\n", __FUNCTION__, cmdstr);
|
||||||
retval = -RIG_ERJCTED;
|
retval = -RIG_EPROTO;
|
||||||
goto transaction_quit;
|
goto transaction_quit;
|
||||||
|
case '?':
|
||||||
|
/* Command not understood by rig */
|
||||||
|
rig_debug(RIG_DEBUG_ERR, "%s: Unknown command '%s'\n", __FUNCTION__, cmdstr);
|
||||||
|
retval = -RIG_ERJCTED;
|
||||||
|
goto transaction_quit;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CONFIG_STRIP_CMDTRM 1
|
#define CONFIG_STRIP_CMDTRM 1
|
||||||
|
@ -230,6 +231,23 @@ transaction_quit:
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rmode_t kenwood2rmode(unsigned char mode, const rmode_t mode_table[])
|
||||||
|
{
|
||||||
|
if (mode >= KENWOOD_MODE_TABLE_MAX)
|
||||||
|
return RIG_MODE_NONE;
|
||||||
|
return mode_table[mode];
|
||||||
|
}
|
||||||
|
|
||||||
|
char rmode2kenwood(rmode_t mode, const rmode_t mode_table[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0; i<KENWOOD_MODE_TABLE_MAX;i++) {
|
||||||
|
if (mode_table[i] == mode)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* kenwood_set_vfo
|
* kenwood_set_vfo
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* Hamlib Kenwood backend - main header
|
* Hamlib Kenwood backend - main header
|
||||||
* Copyright (c) 2000-2008 by Stephane Fillod
|
* Copyright (c) 2000-2008 by Stephane Fillod
|
||||||
*
|
*
|
||||||
* $Id: kenwood.h,v 1.42 2008-03-01 11:20:29 fillods Exp $
|
* $Id: kenwood.h,v 1.43 2008-05-04 21:19:07 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
|
||||||
|
@ -28,9 +28,12 @@
|
||||||
#define EOM_KEN ";"
|
#define EOM_KEN ";"
|
||||||
#define EOM_TH "\r"
|
#define EOM_TH "\r"
|
||||||
|
|
||||||
|
#define KENWOOD_MODE_TABLE_MAX 8
|
||||||
|
|
||||||
struct kenwood_priv_caps {
|
struct kenwood_priv_caps {
|
||||||
const char *cmdtrm; /* Command termination chars (ken=';' or th='\r') */
|
const char *cmdtrm; /* Command termination chars (ken=';' or th='\r') */
|
||||||
int if_len; /* length of IF; anwser */
|
int if_len; /* length of IF; anwser */
|
||||||
|
rmode_t *mode_table;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,6 +41,9 @@ extern const tone_t kenwood38_ctcss_list[];
|
||||||
|
|
||||||
int kenwood_transaction(RIG *rig, const char *cmd, int cmd_len, char *data,
|
int kenwood_transaction(RIG *rig, const char *cmd, int cmd_len, char *data,
|
||||||
size_t *data_len);
|
size_t *data_len);
|
||||||
|
rmode_t kenwood2rmode(unsigned char mode, const rmode_t mode_table[]);
|
||||||
|
char rmode2kenwood(rmode_t mode, const rmode_t mode_table[]);
|
||||||
|
|
||||||
int kenwood_set_vfo(RIG *rig, vfo_t vfo);
|
int kenwood_set_vfo(RIG *rig, vfo_t vfo);
|
||||||
int kenwood_get_vfo(RIG *rig, vfo_t *vfo);
|
int kenwood_get_vfo(RIG *rig, vfo_t *vfo);
|
||||||
int kenwood_set_split_vfo(RIG *rig, vfo_t vfo , split_t split, vfo_t txvfo);
|
int kenwood_set_split_vfo(RIG *rig, vfo_t vfo , split_t split, vfo_t txvfo);
|
||||||
|
|
Ładowanie…
Reference in New Issue