2007-11-11 23:03:38 +00:00
/*
2011-06-14 21:09:33 +00:00
* rigctl_parse . c - ( C ) Stephane Fillod 2000 - 2011
2013-02-05 18:54:05 +00:00
* ( C ) Nate Bargmann 2003 , 2006 , 2008 , 2010 , 2011 , 2012 , 2013
2011-08-22 01:51:06 +00:00
* ( C ) Terry Embry 2008 - 2009
2013-02-05 18:54:05 +00:00
* ( C ) The Hamlib Group 2002 , 2006 , 2007 , 2008 , 2009 , 2010 , 2011
2007-11-11 23:03:38 +00:00
*
2010-02-04 00:53:56 +00:00
* This program tests / controls a radio using Hamlib .
2010-01-24 23:24:20 +00:00
* It takes commands in interactive mode as well as
2007-11-11 23:03:38 +00:00
* from command line options .
*
*
2011-08-22 01:51:06 +00:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
2010-01-24 23:24:20 +00:00
*
2011-08-22 01:51:06 +00:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2010-01-24 23:24:20 +00:00
*
2011-08-22 01:51:06 +00:00
* You should have received a copy of the GNU General Public License along
* with this program ; if not , write to the Free Software Foundation , Inc . ,
* 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2010-01-24 23:24:20 +00:00
*
2007-11-11 23:03:38 +00:00
*/
2022-02-04 13:41:36 +00:00
# include <hamlib/config.h>
2007-11-11 23:03:38 +00:00
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <unistd.h>
# include <ctype.h>
# include <errno.h>
2021-08-29 05:03:27 +00:00
// If true adds some debug statements to see flow of rigctl parsing
int debugflow = 0 ;
2013-02-18 18:23:34 +00:00
# ifdef HAVE_LIBREADLINE
# if defined(HAVE_READLINE_READLINE_H)
# include <readline / readline.h>
# elif defined(HAVE_READLINE_H) /* !defined(HAVE_READLINE_READLINE_H) */
# include <readline.h>
# else /* !defined(HAVE_READLINE_H) */
2019-11-30 16:19:08 +00:00
extern char * readline ( ) ;
2013-02-18 18:23:34 +00:00
# endif /* HAVE_READLINE_H */
# else
/* no readline */
# endif /* HAVE_LIBREADLINE */
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
# if defined(HAVE_READLINE_HISTORY_H)
# include <readline / history.h>
# elif defined(HAVE_HISTORY_H)
# include <history.h>
# else /* !defined(HAVE_HISTORY_H) */
2017-08-09 18:09:55 +00:00
extern void add_history ( ) ;
extern int write_history ( ) ;
extern int read_history ( ) ;
2013-02-19 02:42:42 +00:00
# endif /* defined(HAVE_READLINE_HISTORY_H) */
2017-08-09 18:09:55 +00:00
/* no history */
2013-02-19 02:42:42 +00:00
# endif /* HAVE_READLINE_HISTORY */
2007-11-11 23:03:38 +00:00
# include <hamlib/rig.h>
# include "misc.h"
# include "iofunc.h"
# include "sprintflst.h"
# include "rigctl_parse.h"
2012-02-13 21:22:02 +00:00
/* Hash table implementation See: http://uthash.sourceforge.net/ */
# include "uthash.h"
2014-04-30 02:05:34 +00:00
# define STR1(S) #S
# define STR(S) STR1(S)
2007-11-11 23:03:38 +00:00
# define MAXNAMSIZ 32
2017-08-09 18:09:55 +00:00
# define MAXNBOPT 100 /* max number of different options */
2020-10-25 11:43:48 +00:00
# define MAXARGSZ 511
2007-11-11 23:03:38 +00:00
# define ARG_IN1 0x01
# define ARG_OUT1 0x02
# define ARG_IN2 0x04
# define ARG_OUT2 0x08
# define ARG_IN3 0x10
# define ARG_OUT3 0x20
# define ARG_IN4 0x40
# define ARG_OUT4 0x80
2022-05-14 22:36:28 +00:00
# define ARG_OUT5 0x100
2007-11-11 23:03:38 +00:00
# define ARG_IN_LINE 0x4000
# define ARG_NOVFO 0x8000
# define ARG_IN (ARG_IN1|ARG_IN2|ARG_IN3|ARG_IN4)
2022-05-14 22:36:28 +00:00
# define ARG_OUT (ARG_OUT1|ARG_OUT2|ARG_OUT3|ARG_OUT4|ARG_OUT5)
2007-11-11 23:03:38 +00:00
2020-06-23 16:21:22 +00:00
static int chk_vfo_executed ;
2022-02-24 23:13:18 +00:00
char rigctld_password [ 64 ] ;
2022-05-13 21:50:13 +00:00
int is_passwordOK ;
2022-02-24 23:13:18 +00:00
int is_rigctld ;
2022-06-07 03:54:10 +00:00
extern int lock_mode ; // used by rigctld
2022-02-24 23:13:18 +00:00
2020-06-23 16:21:22 +00:00
2013-02-18 18:23:34 +00:00
/* variables for readline support */
# ifdef HAVE_LIBREADLINE
static char * input_line = ( char * ) NULL ;
static char * result = ( char * ) NULL ;
2017-08-09 18:09:55 +00:00
static char * parsed_input [ sizeof ( char * ) * 5 ] ;
2013-02-18 18:23:34 +00:00
static const int have_rl = 1 ;
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
static char * rp_hist_buf = ( char * ) NULL ;
# endif
2013-02-18 18:23:34 +00:00
# else /* no readline */
static const int have_rl = 0 ;
# endif
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
struct test_table
{
2017-08-09 18:09:55 +00:00
unsigned char cmd ;
const char * name ;
int ( * rig_routine ) ( RIG * ,
FILE * ,
FILE * ,
int ,
2019-08-25 07:58:19 +00:00
int ,
2020-05-27 17:21:41 +00:00
int * ,
2019-08-25 07:58:19 +00:00
char ,
int ,
char ,
2017-08-09 18:09:55 +00:00
const struct test_table * ,
vfo_t ,
const char * ,
const char * ,
const char * ) ;
int flags ;
const char * arg1 ;
const char * arg2 ;
const char * arg3 ;
const char * arg4 ;
2021-04-27 15:32:12 +00:00
const char * arg5 ;
2022-05-14 22:36:28 +00:00
const char * arg6 ;
2007-11-11 23:03:38 +00:00
} ;
2022-01-31 15:34:32 +00:00
# define CHKSCN1ARG(a) if ((a) != 1) { rig_debug(RIG_DEBUG_ERR,"%s: chkarg err\n", __func__);RETURNFUNC(-RIG_EINVAL);} else do {} while(0)
2010-04-05 10:15:36 +00:00
2014-05-02 18:09:35 +00:00
# define ACTION(f) rigctl_##f
2017-08-09 18:09:55 +00:00
# define declare_proto_rig(f) static int (ACTION(f))(RIG *rig, \
FILE * fout , \
FILE * fin , \
int interactive , \
2019-08-25 07:58:19 +00:00
int prompt , \
2020-05-27 17:21:41 +00:00
int * vfo_opt , \
2019-08-25 07:58:19 +00:00
char send_cmd_term , \
int ext_resp , \
char resp_sep , \
2017-08-09 18:09:55 +00:00
const struct test_table * cmd , \
vfo_t vfo , \
const char * arg1 , \
const char * arg2 , \
const char * arg3 )
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_freq ) ;
declare_proto_rig ( get_freq ) ;
declare_proto_rig ( set_rit ) ;
declare_proto_rig ( get_rit ) ;
declare_proto_rig ( set_xit ) ;
declare_proto_rig ( get_xit ) ;
declare_proto_rig ( set_mode ) ;
declare_proto_rig ( get_mode ) ;
2021-05-03 14:24:02 +00:00
declare_proto_rig ( get_modes ) ;
2021-05-03 20:35:56 +00:00
declare_proto_rig ( get_mode_bandwidths ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_vfo ) ;
declare_proto_rig ( get_vfo ) ;
2021-04-27 16:51:43 +00:00
declare_proto_rig ( get_rig_info ) ;
2021-02-07 18:45:59 +00:00
declare_proto_rig ( get_vfo_info ) ;
2021-02-10 23:30:46 +00:00
declare_proto_rig ( get_vfo_list ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_ptt ) ;
declare_proto_rig ( get_ptt ) ;
declare_proto_rig ( get_ptt ) ;
2008-09-21 19:24:47 +00:00
declare_proto_rig ( get_dcd ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_rptr_shift ) ;
declare_proto_rig ( get_rptr_shift ) ;
declare_proto_rig ( set_rptr_offs ) ;
declare_proto_rig ( get_rptr_offs ) ;
declare_proto_rig ( set_ctcss_tone ) ;
declare_proto_rig ( get_ctcss_tone ) ;
declare_proto_rig ( set_dcs_code ) ;
declare_proto_rig ( get_dcs_code ) ;
2008-09-21 19:24:47 +00:00
declare_proto_rig ( set_ctcss_sql ) ;
declare_proto_rig ( get_ctcss_sql ) ;
declare_proto_rig ( set_dcs_sql ) ;
declare_proto_rig ( get_dcs_sql ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_split_freq ) ;
declare_proto_rig ( get_split_freq ) ;
declare_proto_rig ( set_split_mode ) ;
declare_proto_rig ( get_split_mode ) ;
2014-04-28 21:25:06 +00:00
declare_proto_rig ( set_split_freq_mode ) ;
declare_proto_rig ( get_split_freq_mode ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_split_vfo ) ;
declare_proto_rig ( get_split_vfo ) ;
declare_proto_rig ( set_ts ) ;
declare_proto_rig ( get_ts ) ;
declare_proto_rig ( power2mW ) ;
2010-02-06 15:05:17 +00:00
declare_proto_rig ( mW2power ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_level ) ;
declare_proto_rig ( get_level ) ;
declare_proto_rig ( set_func ) ;
declare_proto_rig ( get_func ) ;
declare_proto_rig ( set_parm ) ;
declare_proto_rig ( get_parm ) ;
declare_proto_rig ( set_bank ) ;
declare_proto_rig ( set_mem ) ;
declare_proto_rig ( get_mem ) ;
declare_proto_rig ( vfo_op ) ;
declare_proto_rig ( scan ) ;
declare_proto_rig ( set_channel ) ;
declare_proto_rig ( get_channel ) ;
declare_proto_rig ( set_trn ) ;
declare_proto_rig ( get_trn ) ;
declare_proto_rig ( get_info ) ;
declare_proto_rig ( dump_caps ) ;
2008-05-23 14:30:12 +00:00
declare_proto_rig ( dump_conf ) ;
2008-09-21 19:24:47 +00:00
declare_proto_rig ( dump_state ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_ant ) ;
declare_proto_rig ( get_ant ) ;
declare_proto_rig ( reset ) ;
declare_proto_rig ( send_morse ) ;
2020-10-16 13:41:57 +00:00
declare_proto_rig ( stop_morse ) ;
2020-10-18 19:22:42 +00:00
declare_proto_rig ( wait_morse ) ;
2020-02-06 00:00:34 +00:00
declare_proto_rig ( send_voice_mem ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( send_cmd ) ;
declare_proto_rig ( set_powerstat ) ;
declare_proto_rig ( get_powerstat ) ;
2008-09-21 19:24:47 +00:00
declare_proto_rig ( send_dtmf ) ;
declare_proto_rig ( recv_dtmf ) ;
2010-02-04 00:53:56 +00:00
declare_proto_rig ( chk_vfo ) ;
2020-05-27 17:21:41 +00:00
declare_proto_rig ( set_vfo_opt ) ;
2020-02-24 15:34:02 +00:00
declare_proto_rig ( set_twiddle ) ;
declare_proto_rig ( get_twiddle ) ;
2020-10-23 16:34:42 +00:00
declare_proto_rig ( set_uplink ) ;
2020-04-30 21:52:11 +00:00
declare_proto_rig ( set_cache ) ;
declare_proto_rig ( get_cache ) ;
2011-06-14 21:09:33 +00:00
declare_proto_rig ( halt ) ;
2014-05-02 17:41:50 +00:00
declare_proto_rig ( pause ) ;
2021-10-16 14:20:24 +00:00
declare_proto_rig ( password ) ;
2022-04-15 18:21:35 +00:00
//declare_proto_rig(set_password);
2021-12-01 17:50:33 +00:00
declare_proto_rig ( set_clock ) ;
declare_proto_rig ( get_clock ) ;
2022-05-21 17:33:00 +00:00
declare_proto_rig ( set_separator ) ;
declare_proto_rig ( get_separator ) ;
2022-05-29 17:00:03 +00:00
declare_proto_rig ( set_lock_mode ) ;
declare_proto_rig ( get_lock_mode ) ;
2007-11-11 23:03:38 +00:00
/*
* convention : upper case cmd is set , lowercase is get
*
* TODO : add missing rig_set_ / rig_get_ : sql , dcd , etc .
* NB : ' q ' ' Q ' ' ? ' are reserved by interactive mode interface
2017-08-09 18:09:55 +00:00
* do NOT use - W since it ' s reserved by POSIX .
2007-11-11 23:03:38 +00:00
*
2017-08-09 18:09:55 +00:00
* Available alphabetic letters : - . - - - - - - - - - - - - - - * - - - - - W - Y -
2007-11-11 23:03:38 +00:00
*/
2017-10-06 23:58:42 +00:00
static struct test_table test_list [ ] =
{
2020-05-13 22:44:17 +00:00
#if 0 // implement set_freq VFO later if it can be detected
2021-05-01 20:51:52 +00:00
{ ' F ' , " set_freq " , ACTION ( set_freq ) , ARG_IN1 | ARG_OUT1 , " Frequency " } ,
2020-05-28 04:44:18 +00:00
{ ' f ' , " get_freq " , ACTION ( get_freq ) , ARG_OUT , " Frequency " , " VFO " } ,
2020-05-13 22:44:17 +00:00
# else
{ ' F ' , " set_freq " , ACTION ( set_freq ) , ARG_IN1 , " Frequency " } ,
# endif
2020-05-28 04:44:18 +00:00
{ ' f ' , " get_freq " , ACTION ( get_freq ) , ARG_OUT , " Frequency " } ,
2017-08-09 18:09:55 +00:00
{ ' M ' , " set_mode " , ACTION ( set_mode ) , ARG_IN , " Mode " , " Passband " } ,
2017-10-06 23:58:42 +00:00
{ ' m ' , " get_mode " , ACTION ( get_mode ) , ARG_OUT , " Mode " , " Passband " } ,
2017-08-09 18:09:55 +00:00
{ ' I ' , " set_split_freq " , ACTION ( set_split_freq ) , ARG_IN , " TX Frequency " } ,
2017-10-06 23:58:42 +00:00
{ ' i ' , " get_split_freq " , ACTION ( get_split_freq ) , ARG_OUT , " TX Frequency " } ,
2017-08-09 18:09:55 +00:00
{ ' X ' , " set_split_mode " , ACTION ( set_split_mode ) , ARG_IN , " TX Mode " , " TX Passband " } ,
2017-10-06 23:58:42 +00:00
{ ' x ' , " get_split_mode " , ACTION ( get_split_mode ) , ARG_OUT , " TX Mode " , " TX Passband " } ,
2017-08-09 18:09:55 +00:00
{ ' K ' , " set_split_freq_mode " , ACTION ( set_split_freq_mode ) , ARG_IN , " TX Frequency " , " TX Mode " , " TX Passband " } ,
{ ' k ' , " get_split_freq_mode " , ACTION ( get_split_freq_mode ) , ARG_OUT , " TX Frequency " , " TX Mode " , " TX Passband " } ,
{ ' S ' , " set_split_vfo " , ACTION ( set_split_vfo ) , ARG_IN , " Split " , " TX VFO " } ,
2017-10-06 23:58:42 +00:00
{ ' s ' , " get_split_vfo " , ACTION ( get_split_vfo ) , ARG_OUT , " Split " , " TX VFO " } ,
2017-08-09 18:09:55 +00:00
{ ' N ' , " set_ts " , ACTION ( set_ts ) , ARG_IN , " Tuning Step " } ,
2017-10-06 23:58:42 +00:00
{ ' n ' , " get_ts " , ACTION ( get_ts ) , ARG_OUT , " Tuning Step " } ,
2017-08-09 18:09:55 +00:00
{ ' L ' , " set_level " , ACTION ( set_level ) , ARG_IN , " Level " , " Level Value " } ,
{ ' l ' , " get_level " , ACTION ( get_level ) , ARG_IN1 | ARG_OUT2 , " Level " , " Level Value " } ,
{ ' U ' , " set_func " , ACTION ( set_func ) , ARG_IN , " Func " , " Func Status " } ,
{ ' u ' , " get_func " , ACTION ( get_func ) , ARG_IN1 | ARG_OUT2 , " Func " , " Func Status " } ,
{ ' P ' , " set_parm " , ACTION ( set_parm ) , ARG_IN | ARG_NOVFO , " Parm " , " Parm Value " } ,
{ ' p ' , " get_parm " , ACTION ( get_parm ) , ARG_IN1 | ARG_OUT2 | ARG_NOVFO , " Parm " , " Parm Value " } ,
{ ' G ' , " vfo_op " , ACTION ( vfo_op ) , ARG_IN , " Mem/VFO Op " } ,
{ ' g ' , " scan " , ACTION ( scan ) , ARG_IN , " Scan Fct " , " Scan Channel " } ,
{ ' A ' , " set_trn " , ACTION ( set_trn ) , ARG_IN | ARG_NOVFO , " Transceive " } ,
{ ' a ' , " get_trn " , ACTION ( get_trn ) , ARG_OUT | ARG_NOVFO , " Transceive " } ,
{ ' R ' , " set_rptr_shift " , ACTION ( set_rptr_shift ) , ARG_IN , " Rptr Shift " } ,
2017-10-06 23:58:42 +00:00
{ ' r ' , " get_rptr_shift " , ACTION ( get_rptr_shift ) , ARG_OUT , " Rptr Shift " } ,
2017-08-09 18:09:55 +00:00
{ ' O ' , " set_rptr_offs " , ACTION ( set_rptr_offs ) , ARG_IN , " Rptr Offset " } ,
2017-10-06 23:58:42 +00:00
{ ' o ' , " get_rptr_offs " , ACTION ( get_rptr_offs ) , ARG_OUT , " Rptr Offset " } ,
2017-08-09 18:09:55 +00:00
{ ' C ' , " set_ctcss_tone " , ACTION ( set_ctcss_tone ) , ARG_IN , " CTCSS Tone " } ,
2017-10-06 23:58:42 +00:00
{ ' c ' , " get_ctcss_tone " , ACTION ( get_ctcss_tone ) , ARG_OUT , " CTCSS Tone " } ,
2017-08-09 18:09:55 +00:00
{ ' D ' , " set_dcs_code " , ACTION ( set_dcs_code ) , ARG_IN , " DCS Code " } ,
2017-10-06 23:58:42 +00:00
{ ' d ' , " get_dcs_code " , ACTION ( get_dcs_code ) , ARG_OUT , " DCS Code " } ,
2017-08-09 18:09:55 +00:00
{ 0x90 , " set_ctcss_sql " , ACTION ( set_ctcss_sql ) , ARG_IN , " CTCSS Sql " } ,
2017-10-06 23:58:42 +00:00
{ 0x91 , " get_ctcss_sql " , ACTION ( get_ctcss_sql ) , ARG_OUT , " CTCSS Sql " } ,
2017-08-09 18:09:55 +00:00
{ 0x92 , " set_dcs_sql " , ACTION ( set_dcs_sql ) , ARG_IN , " DCS Sql " } ,
2017-10-06 23:58:42 +00:00
{ 0x93 , " get_dcs_sql " , ACTION ( get_dcs_sql ) , ARG_OUT , " DCS Sql " } ,
2020-05-27 17:21:41 +00:00
//
2020-05-15 19:17:59 +00:00
//{ 'V', "set_vfo", ACTION(set_vfo), ARG_IN | ARG_NOVFO | ARG_OUT, "VFO" },
{ ' V ' , " set_vfo " , ACTION ( set_vfo ) , ARG_IN | ARG_NOVFO , " VFO " } ,
2020-05-27 17:21:41 +00:00
{ ' v ' , " get_vfo " , ACTION ( get_vfo ) , ARG_NOVFO | ARG_OUT , " VFO " } ,
2017-08-09 18:09:55 +00:00
{ ' T ' , " set_ptt " , ACTION ( set_ptt ) , ARG_IN , " PTT " } ,
2017-10-06 23:58:42 +00:00
{ ' t ' , " get_ptt " , ACTION ( get_ptt ) , ARG_OUT , " PTT " } ,
2017-08-09 18:09:55 +00:00
{ ' E ' , " set_mem " , ACTION ( set_mem ) , ARG_IN , " Memory# " } ,
2017-10-06 23:58:42 +00:00
{ ' e ' , " get_mem " , ACTION ( get_mem ) , ARG_OUT , " Memory# " } ,
2020-05-06 13:06:14 +00:00
{ ' H ' , " set_channel " , ACTION ( set_channel ) , ARG_IN | ARG_NOVFO , " Channel " } ,
{ ' h ' , " get_channel " , ACTION ( get_channel ) , ARG_IN | ARG_NOVFO , " Channel " , " Read Only " } ,
2017-08-09 18:09:55 +00:00
{ ' B ' , " set_bank " , ACTION ( set_bank ) , ARG_IN , " Bank " } ,
{ ' _ ' , " get_info " , ACTION ( get_info ) , ARG_OUT | ARG_NOVFO , " Info " } ,
{ ' J ' , " set_rit " , ACTION ( set_rit ) , ARG_IN , " RIT " } ,
2017-10-06 23:58:42 +00:00
{ ' j ' , " get_rit " , ACTION ( get_rit ) , ARG_OUT , " RIT " } ,
2017-08-09 18:09:55 +00:00
{ ' Z ' , " set_xit " , ACTION ( set_xit ) , ARG_IN , " XIT " } ,
2017-10-06 23:58:42 +00:00
{ ' z ' , " get_xit " , ACTION ( get_xit ) , ARG_OUT , " XIT " } ,
2020-01-21 23:53:12 +00:00
{ ' Y ' , " set_ant " , ACTION ( set_ant ) , ARG_IN , " Antenna " , " Option " } ,
2020-02-23 17:26:09 +00:00
{ ' y ' , " get_ant " , ACTION ( get_ant ) , ARG_IN1 | ARG_OUT2 | ARG_NOVFO , " AntCurr " , " Option " , " AntTx " , " AntRx " } ,
2017-08-09 18:09:55 +00:00
{ 0x87 , " set_powerstat " , ACTION ( set_powerstat ) , ARG_IN | ARG_NOVFO , " Power Status " } ,
{ 0x88 , " get_powerstat " , ACTION ( get_powerstat ) , ARG_OUT | ARG_NOVFO , " Power Status " } ,
{ 0x89 , " send_dtmf " , ACTION ( send_dtmf ) , ARG_IN , " Digits " } ,
2017-10-06 23:58:42 +00:00
{ 0x8a , " recv_dtmf " , ACTION ( recv_dtmf ) , ARG_OUT , " Digits " } ,
2017-08-09 18:09:55 +00:00
{ ' * ' , " reset " , ACTION ( reset ) , ARG_IN , " Reset " } ,
{ ' w ' , " send_cmd " , ACTION ( send_cmd ) , ARG_IN1 | ARG_IN_LINE | ARG_OUT2 | ARG_NOVFO , " Cmd " , " Reply " } ,
2019-12-13 04:29:13 +00:00
{ ' W ' , " send_cmd_rx " , ACTION ( send_cmd ) , ARG_IN | ARG_OUT2 | ARG_NOVFO , " Cmd " , " Reply " } ,
2021-09-10 10:46:13 +00:00
{ ' b ' , " send_morse " , ACTION ( send_morse ) , ARG_IN | ARG_NOVFO | ARG_IN_LINE , " Morse " } ,
2021-10-23 15:13:30 +00:00
{ 0xbb , " stop_morse " , ACTION ( stop_morse ) , } ,
{ 0xbc , " wait_morse " , ACTION ( wait_morse ) , } ,
{ 0x94 , " send_voice_mem " , ACTION ( send_voice_mem ) , ARG_IN , " Voice Mem# " } ,
{ 0x8b , " get_dcd " , ACTION ( get_dcd ) , ARG_OUT , " DCD " } ,
2020-10-23 16:34:42 +00:00
{ 0x8d , " set_twiddle " , ACTION ( set_twiddle ) , ARG_IN | ARG_NOVFO , " Timeout (secs) " } ,
{ 0x8e , " get_twiddle " , ACTION ( get_twiddle ) , ARG_OUT | ARG_NOVFO , " Timeout (secs) " } ,
{ 0x97 , " uplink " , ACTION ( set_uplink ) , ARG_IN | ARG_NOVFO , " 1=Sub, 2=Main " } ,
2020-04-30 21:52:11 +00:00
{ 0x95 , " set_cache " , ACTION ( set_cache ) , ARG_IN | ARG_NOVFO , " Timeout (msecs) " } ,
{ 0x96 , " get_cache " , ACTION ( get_cache ) , ARG_OUT | ARG_NOVFO , " Timeout (msecs) " } ,
2017-08-09 18:09:55 +00:00
{ ' 2 ' , " power2mW " , ACTION ( power2mW ) , ARG_IN1 | ARG_IN2 | ARG_IN3 | ARG_OUT1 | ARG_NOVFO , " Power [0.0..1.0] " , " Frequency " , " Mode " , " Power mW " } ,
2020-10-18 17:28:15 +00:00
{ ' 4 ' , " mW2power " , ACTION ( mW2power ) , ARG_IN1 | ARG_IN2 | ARG_IN3 | ARG_OUT1 | ARG_NOVFO , " Pwr mW " , " Freq " , " Mode " , " Power [0.0..1.0] " } ,
2017-08-09 18:09:55 +00:00
{ ' 1 ' , " dump_caps " , ACTION ( dump_caps ) , ARG_NOVFO } ,
{ ' 3 ' , " dump_conf " , ACTION ( dump_conf ) , ARG_NOVFO } ,
{ 0x8f , " dump_state " , ACTION ( dump_state ) , ARG_OUT | ARG_NOVFO } ,
2019-09-10 03:45:55 +00:00
{ 0xf0 , " chk_vfo " , ACTION ( chk_vfo ) , ARG_NOVFO , " ChkVFO " } , /* rigctld only--check for VFO mode */
2020-05-27 17:23:08 +00:00
{ 0xf2 , " set_vfo_opt " , ACTION ( set_vfo_opt ) , ARG_NOVFO | ARG_IN , " Status " } , /* turn vfo option on/off */
2022-05-22 14:00:38 +00:00
{ 0xf3 , " get_vfo_info " , ACTION ( get_vfo_info ) , ARG_IN1 | ARG_NOVFO | ARG_OUT5 , " VFO " , " Freq " , " Mode " , " Width " , " Split " , " SatMode " } , /* get several vfo parameters at once */
2021-04-27 16:51:43 +00:00
{ 0xf5 , " get_rig_info " , ACTION ( get_rig_info ) , ARG_NOVFO | ARG_OUT , " RigInfo " } , /* get several vfo parameters at once */
2021-05-03 20:35:56 +00:00
{ 0xf4 , " get_vfo_list " , ACTION ( get_vfo_list ) , ARG_OUT | ARG_NOVFO , " VFOs " } ,
{ 0xf6 , " get_modes " , ACTION ( get_modes ) , ARG_OUT | ARG_NOVFO , " Modes " } ,
2021-12-02 04:52:55 +00:00
// { 0xf9, "get_clock", ACTION(get_clock), ARG_IN | ARG_NOVFO, "local/utc" },
{ 0xf9 , " get_clock " , ACTION ( get_clock ) , ARG_NOVFO } ,
2021-12-01 17:50:33 +00:00
{ 0xf8 , " set_clock " , ACTION ( set_clock ) , ARG_IN | ARG_NOVFO , " YYYYMMDDHHMMSS.sss+ZZ " } ,
2017-08-09 18:09:55 +00:00
{ 0xf1 , " halt " , ACTION ( halt ) , ARG_NOVFO } , /* rigctld only--halt the daemon */
{ 0x8c , " pause " , ACTION ( pause ) , ARG_IN , " Seconds " } ,
2022-02-24 23:13:18 +00:00
{ 0x98 , " password " , ACTION ( password ) , ARG_IN | ARG_NOVFO , " Password " } ,
2022-04-15 18:21:35 +00:00
// { 0x99, "set_password", ACTION(set_password), ARG_IN | ARG_NOVFO, "Password" },
2021-12-01 17:50:33 +00:00
{ 0xf7 , " get_mode_bandwidths " , ACTION ( get_mode_bandwidths ) , ARG_IN | ARG_NOVFO , " Mode " } ,
2022-05-21 17:33:00 +00:00
{ 0xa0 , " set_separator " , ACTION ( set_separator ) , ARG_IN | ARG_NOVFO , " Separator " } ,
2022-05-29 17:00:03 +00:00
{ 0xa1 , " get_separator " , ACTION ( get_separator ) , ARG_NOVFO , " Separator " } ,
2022-05-29 17:06:44 +00:00
{ 0xa2 , " set_lock_mode " , ACTION ( set_lock_mode ) , ARG_IN | ARG_NOVFO , " Locked " } ,
{ 0xa3 , " get_lock_mode " , ACTION ( get_lock_mode ) , ARG_NOVFO , " Locked " } ,
2017-08-09 18:09:55 +00:00
{ 0x00 , " " , NULL } ,
2007-11-11 23:03:38 +00:00
} ;
2017-08-09 18:09:55 +00:00
2019-11-30 16:19:08 +00:00
static struct test_table * find_cmd_entry ( int cmd )
2007-11-11 23:03:38 +00:00
{
2017-08-09 18:09:55 +00:00
int i ;
2019-12-06 18:13:38 +00:00
for ( i = 0 ; test_list [ i ] . cmd ! = 0x00 ; i + + )
2017-10-06 23:58:42 +00:00
{
if ( test_list [ i ] . cmd = = cmd )
{
2017-08-09 18:09:55 +00:00
break ;
}
}
2007-11-11 23:03:38 +00:00
2020-01-15 05:36:01 +00:00
if ( test_list [ i ] . cmd = = 0x00 )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
return NULL ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
return & test_list [ i ] ;
2007-11-11 23:03:38 +00:00
}
2012-02-13 21:22:02 +00:00
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
/* Structure for hash table provided by uthash.h
*
Fix spelling errors
Fixed using the following command:
codespell --write-changes --summary --skip=*.m4 --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
codespell --write-changes --summary --skip=aclocal.m4,lib --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
Codespell home page: https://github.com/codespell-project/codespell
2020-07-24 07:02:12 +00:00
* Structure and hash functions patterned after / copied from example . c
2012-02-13 21:22:02 +00:00
* distributed with the uthash package . See : http : //uthash.sourceforge.net/
*/
2017-10-06 23:58:42 +00:00
struct mod_lst
{
2017-08-09 18:09:55 +00:00
int id ; /* caps->rig_model This is the hash key */
char mfg_name [ 32 ] ; /* caps->mfg_name */
char model_name [ 32 ] ; /* caps->model_name */
char version [ 32 ] ; /* caps->version */
char status [ 32 ] ; /* caps->status */
2020-03-06 05:48:14 +00:00
char macro_name [ 32 ] ; /* caps->status */
2017-08-09 18:09:55 +00:00
UT_hash_handle hh ; /* makes this structure hashable */
2012-02-13 21:22:02 +00:00
} ;
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
/* Hash declaration. Must be initialized to NULL */
struct mod_lst * models = NULL ;
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
/* Add model information to the hash */
2017-08-09 18:09:55 +00:00
void hash_add_model ( int id ,
const char * mfg_name ,
const char * model_name ,
const char * version ,
2020-03-06 05:48:14 +00:00
const char * status ,
const char * macro_name )
2012-02-13 21:22:02 +00:00
{
2017-08-09 18:09:55 +00:00
struct mod_lst * s ;
2012-02-13 21:22:02 +00:00
2017-08-09 18:09:55 +00:00
s = ( struct mod_lst * ) malloc ( sizeof ( struct mod_lst ) ) ;
2012-02-13 21:22:02 +00:00
2017-08-09 18:09:55 +00:00
s - > id = id ;
2022-01-11 06:00:44 +00:00
SNPRINTF ( s - > mfg_name , sizeof ( s - > mfg_name ) , " %s " , mfg_name ) ;
SNPRINTF ( s - > model_name , sizeof ( s - > model_name ) , " %s " , model_name ) ;
SNPRINTF ( s - > version , sizeof ( s - > version ) , " %s " , version ) ;
SNPRINTF ( s - > status , sizeof ( s - > status ) , " %s " , status ) ;
SNPRINTF ( s - > macro_name , sizeof ( s - > macro_name ) , " %s " , macro_name ) ;
2012-02-13 21:22:02 +00:00
2017-08-09 18:09:55 +00:00
HASH_ADD_INT ( models , id , s ) ; /* id: name of key field */
2012-02-13 21:22:02 +00:00
}
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
/* Hash sorting functions */
int hash_model_id_sort ( struct mod_lst * a , struct mod_lst * b )
{
2019-12-06 18:13:38 +00:00
return ( a - > id > b - > id ) ;
2012-02-13 21:22:02 +00:00
}
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
void hash_sort_by_model_id ( )
{
2020-01-15 05:36:01 +00:00
if ( models ! = NULL )
{
HASH_SORT ( models , hash_model_id_sort ) ;
}
2020-02-23 17:26:09 +00:00
else
{
rig_debug ( RIG_DEBUG_ERR , " %s: models empty? \n " , __func__ ) ;
2020-01-15 05:36:01 +00:00
}
2012-02-13 21:22:02 +00:00
}
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
/* Delete hash */
2017-08-09 18:09:55 +00:00
void hash_delete_all ( )
{
struct mod_lst * current_model , * tmp ;
2012-02-13 21:22:02 +00:00
2017-10-06 23:58:42 +00:00
HASH_ITER ( hh , models , current_model , tmp )
{
2017-08-09 18:09:55 +00:00
HASH_DEL ( models , current_model ) ; /* delete it (models advances to next) */
free ( current_model ) ; /* free it */
}
2012-02-13 21:22:02 +00:00
}
2013-02-18 18:23:34 +00:00
# ifdef HAVE_LIBREADLINE
/* Frees allocated memory and sets pointers to NULL before calling readline
* and then parses the input into space separated tokens .
*/
static void rp_getline ( const char * s )
{
2017-08-09 18:09:55 +00:00
int i ;
2013-02-18 18:23:34 +00:00
2017-08-09 18:09:55 +00:00
/* free allocated memory and set pointers to NULL */
2017-10-06 23:58:42 +00:00
if ( input_line )
{
2017-08-09 18:09:55 +00:00
free ( input_line ) ;
input_line = ( char * ) NULL ;
}
2013-02-18 18:23:34 +00:00
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
result = ( char * ) NULL ;
}
2013-02-18 18:23:34 +00:00
2017-10-06 23:58:42 +00:00
for ( i = 0 ; i < 5 ; i + + )
{
2017-08-09 18:09:55 +00:00
parsed_input [ i ] = NULL ;
}
2013-02-18 18:23:34 +00:00
2017-08-09 18:09:55 +00:00
/* Action! Returns typed line with newline stripped. */
input_line = readline ( s ) ;
2013-02-18 18:23:34 +00:00
}
# endif
2007-11-11 23:03:38 +00:00
/*
* TODO : use Lex ?
*/
static char parse_arg ( const char * arg )
{
2017-08-09 18:09:55 +00:00
int i ;
2019-12-06 18:13:38 +00:00
for ( i = 0 ; test_list [ i ] . cmd ! = 0x00 ; i + + )
2017-10-06 23:58:42 +00:00
{
if ( ! strncmp ( arg , test_list [ i ] . name , MAXNAMSIZ ) )
{
2017-08-09 18:09:55 +00:00
return test_list [ i ] . cmd ;
}
}
return 0 ;
2007-11-11 23:03:38 +00:00
}
2010-01-24 23:24:20 +00:00
/*
2007-11-11 23:03:38 +00:00
* This scanf works even in presence of signals ( timer , SIGIO , . . )
*/
static int scanfc ( FILE * fin , const char * format , void * p )
{
2017-10-06 23:58:42 +00:00
do
{
2020-01-03 18:18:27 +00:00
int ret ;
2019-12-20 17:22:09 +00:00
* ( char * ) p = 0 ;
2020-02-23 17:26:09 +00:00
2017-08-09 18:09:55 +00:00
ret = fscanf ( fin , format , p ) ;
2017-10-06 23:58:42 +00:00
if ( ret < 0 )
{
if ( errno = = EINTR )
{
2017-08-09 18:09:55 +00:00
continue ;
}
2007-11-11 23:03:38 +00:00
2019-12-20 17:22:09 +00:00
if ( ! feof ( fin ) )
{
rig_debug ( RIG_DEBUG_ERR ,
" fscanf: parsing '%s' with '%s' \n " ,
( char * ) p ,
format ) ;
}
2017-08-09 18:09:55 +00:00
}
2020-04-22 16:47:56 +00:00
if ( ret < 1 ) { rig_debug ( RIG_DEBUG_TRACE , " %s: ret=%d \n " , __func__ , ret ) ; }
if ( ferror ( fin ) ) { rig_debug ( RIG_DEBUG_TRACE , " %s: errno=%d, %s \n " , __func__ , errno , strerror ( errno ) ) ; }
2017-08-09 18:09:55 +00:00
return ret ;
2017-10-06 23:58:42 +00:00
}
while ( 1 ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2014-04-30 02:05:34 +00:00
/*
* function to get the next word from the command line or from stdin
* until stdin exhausted . stdin is read if the special token ' - ' is
* found on the command line .
*
* returns EOF when words exhausted
* returns < 0 is error number
* returns > = 0 when successful
*/
2017-08-09 18:09:55 +00:00
static int next_word ( char * buffer , int argc , char * argv [ ] , int newline )
{
int ret ;
char c ;
static int reading_stdin ;
2017-10-06 23:58:42 +00:00
if ( ! reading_stdin )
{
if ( optind > = argc )
{
2017-08-09 18:09:55 +00:00
return EOF ;
2017-10-06 23:58:42 +00:00
}
else if ( newline & & ' - ' = = argv [ optind ] [ 0 ] & & 1 = = strlen ( argv [ optind ] ) )
{
2017-08-09 18:09:55 +00:00
+ + optind ;
reading_stdin = 1 ;
2014-04-30 02:05:34 +00:00
}
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( reading_stdin )
{
do
{
do
{
2017-08-09 18:09:55 +00:00
ret = scanf ( " %c% " STR ( MAXARGSZ ) " [^ \t \n #] " , & c , & buffer [ 1 ] ) ;
2017-10-06 23:58:42 +00:00
}
while ( EINTR = = ret ) ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( ret > 0 & & ' # ' = = c )
{
do
{
2017-08-09 18:09:55 +00:00
ret = scanf ( " %*[^ \n ] " ) ;
2017-10-06 23:58:42 +00:00
}
while ( EINTR = = ret ) ; /* consume comments */
2017-08-09 18:09:55 +00:00
ret = 0 ;
}
2017-10-06 23:58:42 +00:00
}
while ( ! ret ) ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( EOF = = ret )
{
2017-08-09 18:09:55 +00:00
reading_stdin = 0 ;
2017-10-06 23:58:42 +00:00
}
else if ( ret < 0 )
{
2017-08-09 18:09:55 +00:00
rig_debug ( RIG_DEBUG_ERR , " scanf: %s \n " , strerror ( errno ) ) ;
reading_stdin = 0 ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
buffer [ 0 ] = c ;
buffer [ 1 = = ret ? 1 : MAXARGSZ ] = ' \0 ' ;
2017-10-06 23:58:42 +00:00
if ( newline )
{
2017-08-09 18:09:55 +00:00
putchar ( ' \n ' ) ;
}
fputs ( buffer , stdout ) ;
putchar ( ' ' ) ;
2014-04-30 02:05:34 +00:00
}
}
2017-10-06 23:58:42 +00:00
if ( ! reading_stdin )
{
if ( optind < argc )
{
2017-08-09 18:09:55 +00:00
strncpy ( buffer , argv [ optind + + ] , MAXARGSZ ) ;
buffer [ MAXARGSZ ] = ' \0 ' ;
ret = 1 ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
ret = EOF ;
2014-04-30 02:05:34 +00:00
}
}
2017-08-09 18:09:55 +00:00
return ret ;
2014-04-30 02:05:34 +00:00
}
2017-08-09 18:09:55 +00:00
2020-01-15 05:36:01 +00:00
# define fprintf_flush(f, a...) \
( { fprintf ( ( f ) , a ) ; \
fflush ( ( f ) ) ; \
\
2017-08-09 18:09:55 +00:00
} )
2010-05-05 20:11:55 +00:00
2019-11-30 16:19:08 +00:00
int rigctl_parse ( RIG * my_rig , FILE * fin , FILE * fout , char * argv [ ] , int argc ,
sync_cb_t sync_cb ,
2020-05-26 17:01:44 +00:00
int interactive , int prompt , int * vfo_opt , char send_cmd_term ,
2022-02-24 23:13:18 +00:00
int * ext_resp_ptr , char * resp_sep_ptr , int use_password )
2007-11-11 23:03:38 +00:00
{
2017-08-09 18:09:55 +00:00
int retcode ; /* generic return code from functions */
unsigned char cmd ;
struct test_table * cmd_entry = NULL ;
char command [ MAXARGSZ + 1 ] ;
char arg1 [ MAXARGSZ + 1 ] , * p1 = NULL ;
char arg2 [ MAXARGSZ + 1 ] , * p2 = NULL ;
char arg3 [ MAXARGSZ + 1 ] , * p3 = NULL ;
vfo_t vfo = RIG_VFO_CURR ;
2020-04-25 16:28:38 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: called, interactive=%d \n " , __func__ ,
interactive ) ;
2017-08-09 18:09:55 +00:00
/* cmd, internal, rigctld */
2017-10-06 23:58:42 +00:00
if ( ! ( interactive & & prompt & & have_rl ) )
{
2019-12-13 04:29:13 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive )
{
2019-12-19 17:55:14 +00:00
static int last_was_ret = 1 ;
2022-05-10 17:20:54 +00:00
static int last_cmd ;
2019-12-20 17:22:09 +00:00
2017-10-06 23:58:42 +00:00
if ( prompt )
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n Rig command: " ) ;
}
2017-10-06 23:58:42 +00:00
do
{
2020-04-21 15:34:42 +00:00
if ( ( retcode = scanfc ( fin , " %c " , & cmd ) ) < 1 )
2017-10-06 23:58:42 +00:00
{
2022-05-13 21:50:13 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#1? retcode=%d, last_cmd=%c \n " ,
__func__ ,
2022-05-10 17:20:54 +00:00
retcode , last_cmd ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
2020-04-25 16:28:38 +00:00
2021-08-26 11:49:24 +00:00
if ( cmd ! = 0xa & & cmd ! = 0xd )
2020-05-27 17:21:41 +00:00
{
2022-05-12 03:58:46 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: cmd=%c(%02x) handle=%d \n " , __func__ ,
2022-05-11 16:53:20 +00:00
isprint ( cmd ) ? cmd : ' ' , cmd , fileno ( fin ) ) ;
2020-05-26 17:01:44 +00:00
}
2017-08-09 18:09:55 +00:00
/* Extended response protocol requested with leading '+' on command
* string - - rigctld only !
*/
2017-10-06 23:58:42 +00:00
if ( cmd = = ' + ' & & ! prompt )
{
2019-08-25 07:58:19 +00:00
* ext_resp_ptr = 1 ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( scanfc ( fin , " %c " , & cmd ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#2? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
}
else if ( cmd = = ' + ' & & prompt )
{
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
if ( cmd ! = ' \\ '
2019-11-30 16:19:08 +00:00
& & cmd ! = ' _ '
& & cmd ! = ' # '
2020-05-03 22:07:22 +00:00
& & cmd ! = ' ( '
& & cmd ! = ' ) '
2019-11-30 16:19:08 +00:00
& & ispunct ( cmd )
& & ! prompt )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
2019-08-25 07:58:19 +00:00
* ext_resp_ptr = 1 ;
* resp_sep_ptr = cmd ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( scanfc ( fin , " %c " , & cmd ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#3? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
}
else if ( cmd ! = ' \\ '
& & cmd ! = ' ? '
& & cmd ! = ' _ '
& & cmd ! = ' # '
2020-05-01 17:03:54 +00:00
& & cmd ! = ' ( '
& & cmd ! = ' ) '
2017-10-06 23:58:42 +00:00
& & ispunct ( cmd )
& & prompt )
{
2017-08-09 18:09:55 +00:00
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
/* command by name */
2017-10-06 23:58:42 +00:00
if ( cmd = = ' \\ ' )
{
2021-02-18 13:11:03 +00:00
char cmd_name [ MAXNAMSIZ ] , * pcmd = cmd_name ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( scanfc ( fin , " %c " , pcmd ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#4? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
2021-02-18 13:11:03 +00:00
retcode = fscanf ( fin , " %s " , + + pcmd ) ;
2021-02-28 15:46:01 +00:00
if ( retcode = = 0 ) { rig_debug ( RIG_DEBUG_WARN , " %s: unable to scan %c \n " , __func__ , * ( pcmd - 1 ) ) ; }
while ( * + + pcmd ) ;
2017-08-09 18:09:55 +00:00
* pcmd = ' \0 ' ;
cmd = parse_arg ( ( char * ) cmd_name ) ;
2022-05-13 21:50:13 +00:00
rig_debug ( RIG_DEBUG_VERBOSE , " %s: cmd=%s handle=%d \n " , __func__ , cmd_name ,
fileno ( fin ) ) ;
2017-08-09 18:09:55 +00:00
break ;
}
2021-06-01 12:17:11 +00:00
//rig_debug(RIG_DEBUG_VERBOSE, "%s: cmd==0x%02x\n", __func__, cmd);
2020-07-06 15:15:57 +00:00
2017-10-06 23:58:42 +00:00
if ( cmd = = 0x0a | | cmd = = 0x0d )
{
if ( last_was_ret )
{
if ( prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fprintf_flush ( fout , " \n Rig command: " ) ;
}
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
last_was_ret = 1 ;
}
2017-10-06 23:58:42 +00:00
}
while ( cmd = = 0x0a | | cmd = = 0x0d ) ;
2017-08-09 18:09:55 +00:00
last_was_ret = 0 ;
/* comment line */
2017-10-06 23:58:42 +00:00
if ( cmd = = ' # ' )
{
while ( cmd ! = ' \n ' & & cmd ! = ' \r ' )
{
if ( scanfc ( fin , " %c " , & cmd ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#6? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
}
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2020-05-26 17:01:44 +00:00
my_rig - > state . vfo_opt = * vfo_opt ;
2020-05-01 17:03:54 +00:00
2017-10-06 23:58:42 +00:00
if ( cmd = = ' Q ' | | cmd = = ' q ' )
{
2020-05-03 22:07:22 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: quit returning NETRIGCTL_RET 0 \n " , __func__ ) ;
if ( interactive & & ! prompt ) { fprintf ( fout , " %s0 \n " , NETRIGCTL_RET ) ; }
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( cmd = = ' ? ' )
{
2017-08-09 18:09:55 +00:00
usage_rig ( fout ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
/* parse rest of command line */
retcode = next_word ( command , argc , argv , 1 ) ;
2017-10-06 23:58:42 +00:00
if ( EOF = = retcode )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-10-06 23:58:42 +00:00
}
else if ( retcode < 0 )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-10-06 23:58:42 +00:00
}
else if ( ' \0 ' = = command [ 1 ] )
{
2017-08-09 18:09:55 +00:00
cmd = command [ 0 ] ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
cmd = parse_arg ( command ) ;
}
}
cmd_entry = find_cmd_entry ( cmd ) ;
2017-10-06 23:58:42 +00:00
if ( ! cmd_entry )
{
2020-05-01 17:03:54 +00:00
if ( cmd ! = ' ' )
{
2020-04-27 16:29:03 +00:00
fprintf ( stderr , " Command '%c' not found! \n " , cmd ) ;
}
2020-05-01 17:03:54 +00:00
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2020-05-26 17:01:44 +00:00
if ( ! ( cmd_entry - > flags & ARG_NOVFO ) & & * vfo_opt )
2017-10-06 23:58:42 +00:00
{
if ( interactive )
{
2021-02-08 16:42:24 +00:00
arg1 [ 0 ] = fgetc ( fin ) ;
arg1 [ 1 ] = 0 ;
if ( prompt & & arg1 [ 0 ] = = 0x0a )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " VFO: " ) ;
}
2017-10-06 23:58:42 +00:00
if ( scanfc ( fin , " %s " , arg1 ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#7? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
vfo = rig_parse_vfo ( arg1 ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
retcode = next_word ( arg1 , argc , argv , 0 ) ;
2017-10-06 23:58:42 +00:00
if ( EOF = = retcode )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Invalid arg for command '%s' \n " ,
cmd_entry - > name ) ;
2017-10-06 23:58:42 +00:00
}
else if ( retcode < 0 )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
vfo = rig_parse_vfo ( arg1 ) ;
}
}
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug1 \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
2017-08-09 18:09:55 +00:00
if ( ( cmd_entry - > flags & ARG_IN_LINE )
2019-11-30 16:19:08 +00:00
& & ( cmd_entry - > flags & ARG_IN1 )
& & cmd_entry - > arg1 )
2017-10-06 23:58:42 +00:00
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug2 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive )
{
2017-08-09 18:09:55 +00:00
char * nl ;
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug2a \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( fgets ( arg1 , MAXARGSZ , fin ) = = NULL )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( arg1 [ 0 ] = = 0xa )
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug2b \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
if ( prompt )
{
fprintf_flush ( fout , " %s: " , cmd_entry - > arg1 ) ;
}
2017-10-06 23:58:42 +00:00
if ( fgets ( arg1 , MAXARGSZ , fin ) = = NULL )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
}
nl = strchr ( arg1 , 0xa ) ;
2017-10-06 23:58:42 +00:00
if ( nl )
{
2017-08-09 18:09:55 +00:00
* nl = ' \0 ' ; /* chomp */
}
2019-11-30 16:19:08 +00:00
if ( cmd = = ' b ' )
{
2018-03-13 13:05:03 +00:00
p1 = arg1 ; /* CW must accept a space argument */
}
2019-11-30 16:19:08 +00:00
else /* skip a space arg if first arg...but why? */
{
2018-03-13 13:05:03 +00:00
p1 = arg1 [ 0 ] = = ' ' ? arg1 + 1 : arg1 ;
}
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
retcode = next_word ( arg1 , argc , argv , 0 ) ;
2017-10-06 23:58:42 +00:00
if ( EOF = = retcode )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Invalid arg for command '%s' \n " ,
cmd_entry - > name ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-10-06 23:58:42 +00:00
}
else if ( retcode < 0 )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
p1 = arg1 ;
}
2017-10-06 23:58:42 +00:00
}
else if ( ( cmd_entry - > flags & ARG_IN1 ) & & cmd_entry - > arg1 )
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug3 \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive )
{
2021-02-08 16:42:24 +00:00
arg1 [ 0 ] = fgetc ( fin ) ;
arg1 [ 1 ] = 0 ;
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug4 arg1=%c \n " , __func__ , arg1 [ 0 ] ) ; }
2017-08-09 18:09:55 +00:00
2021-02-08 16:42:24 +00:00
if ( prompt & & arg1 [ 0 ] = = 0x0a )
2017-10-06 23:58:42 +00:00
{
2020-05-06 13:54:34 +00:00
fprintf_flush ( fout , " %s: " , cmd_entry - > arg1 ) ;
2020-07-06 15:15:57 +00:00
}
2017-08-09 18:09:55 +00:00
2021-02-08 22:59:07 +00:00
if ( scanfc ( fin , " %s " , arg1 ) < 1 )
2019-12-13 04:29:13 +00:00
{
2020-05-06 13:54:34 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#8? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2019-12-13 04:29:13 +00:00
}
2017-08-09 18:09:55 +00:00
p1 = arg1 ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
retcode = next_word ( arg1 , argc , argv , 0 ) ;
2017-10-06 23:58:42 +00:00
if ( EOF = = retcode )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Invalid arg for command '%s' \n " ,
cmd_entry - > name ) ;
2022-02-05 21:27:43 +00:00
return ( 1 ) ;
2017-10-06 23:58:42 +00:00
}
else if ( retcode < 0 )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
p1 = arg1 ;
}
}
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug5 \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
2017-08-09 18:09:55 +00:00
if ( p1
2019-11-30 16:19:08 +00:00
& & p1 [ 0 ] ! = ' ? '
& & ( cmd_entry - > flags & ARG_IN2 )
& & cmd_entry - > arg2 )
2017-10-06 23:58:42 +00:00
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug6 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive )
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug7 \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
2021-08-29 14:59:47 +00:00
arg2 [ 0 ] = fgetc ( fin ) ;
arg2 [ 1 ] = 0 ;
2021-08-29 04:44:35 +00:00
2021-08-29 14:59:47 +00:00
if ( prompt & & arg2 [ 0 ] = = 0x0a )
2017-10-06 23:58:42 +00:00
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug8 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " %s: " , cmd_entry - > arg2 ) ;
}
2020-10-07 04:14:27 +00:00
2017-10-06 23:58:42 +00:00
if ( scanfc ( fin , " %s " , arg2 ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#9? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
p2 = arg2 ;
2017-10-06 23:58:42 +00:00
}
else
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug9 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
retcode = next_word ( arg2 , argc , argv , 0 ) ;
2017-10-06 23:58:42 +00:00
if ( EOF = = retcode )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Invalid arg for command '%s' \n " ,
cmd_entry - > name ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-10-06 23:58:42 +00:00
}
else if ( retcode < 0 )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
p2 = arg2 ;
}
}
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug10 \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
2017-08-09 18:09:55 +00:00
if ( p1
2019-11-30 16:19:08 +00:00
& & p1 [ 0 ] ! = ' ? '
& & ( cmd_entry - > flags & ARG_IN3 )
& & cmd_entry - > arg3 )
2017-10-06 23:58:42 +00:00
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug11 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive )
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug12 \n " , __func__ ) ; }
2019-12-13 04:29:13 +00:00
2017-10-06 23:58:42 +00:00
if ( prompt )
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug13 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " %s: " , cmd_entry - > arg3 ) ;
}
2017-10-06 23:58:42 +00:00
if ( scanfc ( fin , " %s " , arg3 ) < 1 )
{
2020-04-15 14:57:08 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: nothing to scan#10? \n " , __func__ ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
p3 = arg3 ;
2017-10-06 23:58:42 +00:00
}
else
{
2021-08-29 05:03:27 +00:00
if ( debugflow ) { rig_debug ( RIG_DEBUG_TRACE , " %s: debug14 \n " , __func__ ) ; }
2017-08-09 18:09:55 +00:00
retcode = next_word ( arg3 , argc , argv , 0 ) ;
2017-10-06 23:58:42 +00:00
if ( EOF = = retcode )
{
fprintf ( stderr ,
" Invalid arg for command '%s' \n " ,
2017-08-09 18:09:55 +00:00
cmd_entry - > name ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-10-06 23:58:42 +00:00
}
else if ( retcode < 0 )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_ERROR ) ;
2017-08-09 18:09:55 +00:00
}
p3 = arg3 ;
}
}
}
2007-11-11 23:03:38 +00:00
2013-02-18 18:23:34 +00:00
# ifdef HAVE_LIBREADLINE
2020-02-23 17:26:09 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt & & have_rl )
{
2017-08-09 18:09:55 +00:00
int j , x ;
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
/* Minimum space for 32+1+32+1+128+1+128+1+128+1 = 453 chars, so
* allocate 512 chars cleared to zero for safety .
*/
rp_hist_buf = ( char * ) calloc ( 512 , sizeof ( char ) ) ;
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
rp_getline ( " \n Rig command: " ) ;
/* EOF (Ctl-D) received on empty input line, bail out gracefully. */
2017-10-06 23:58:42 +00:00
if ( ! input_line )
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
/* Q or q to quit */
2017-10-06 23:58:42 +00:00
if ( ! ( strncasecmp ( input_line , " q " , 1 ) ) )
{
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
/* '?' for help */
2017-10-06 23:58:42 +00:00
if ( ! ( strncmp ( input_line , " ? " , 1 ) ) )
{
2017-08-09 18:09:55 +00:00
usage_rig ( fout ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
/* '#' for comment */
2017-10-06 23:58:42 +00:00
if ( ! ( strncmp ( input_line , " # " , 1 ) ) )
{
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
/* Blank line entered */
2017-10-06 23:58:42 +00:00
if ( ! ( strcmp ( input_line , " " ) ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2020-04-04 14:38:50 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: input_line: %s \n " , __func__ , input_line ) ;
2017-08-09 18:09:55 +00:00
/* Split input_line on any number of spaces to get the command token
* Tabs are intercepted by readline for completion and a newline
* causes readline to return the typed text . If more than one
* argument is given , it will be parsed out later .
*/
result = strtok ( input_line , " " ) ;
2021-05-24 15:51:08 +00:00
readline_repeat :
2021-08-26 11:49:24 +00:00
2017-08-09 18:09:55 +00:00
/* parsed_input stores pointers into input_line where the token strings
* start .
*/
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
parsed_input [ 0 ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
/* Oops! Invoke GDB!! */
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
/* At this point parsed_input contains the typed text of the command
* with surrounding space characters removed . If Readline History is
* available , copy the command string into a history buffer .
*/
/* Single character command */
2017-10-06 23:58:42 +00:00
if ( ( strlen ( parsed_input [ 0 ] ) = = 1 ) & & ( * parsed_input [ 0 ] ! = ' \\ ' ) )
{
2017-08-09 18:09:55 +00:00
cmd = * parsed_input [ 0 ] ;
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
/* Store what is typed, not validated, for history. */
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2017-08-09 18:09:55 +00:00
strncpy ( rp_hist_buf , parsed_input [ 0 ] , 1 ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
}
/* Test the command token, parsed_input[0] */
2017-10-06 23:58:42 +00:00
else if ( ( * parsed_input [ 0 ] = = ' \\ ' ) & & ( strlen ( parsed_input [ 0 ] ) > 1 ) )
{
2017-08-09 18:09:55 +00:00
char cmd_name [ MAXNAMSIZ ] ;
/* if there is no terminating '\0' character in the source string,
* srncpy ( ) doesn ' t add one even if the supplied length is less
* than the destination array . Truncate the source string here .
*/
2017-10-06 23:58:42 +00:00
if ( strlen ( parsed_input [ 0 ] + 1 ) > = MAXNAMSIZ )
{
2017-08-09 18:09:55 +00:00
* ( parsed_input [ 0 ] + MAXNAMSIZ ) = ' \0 ' ;
}
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2017-08-09 18:09:55 +00:00
strncpy ( rp_hist_buf , parsed_input [ 0 ] , MAXNAMSIZ ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
/* The starting position of the source string is the first
2019-11-30 16:19:08 +00:00
* character past the initial ' \ ' .
2017-08-09 18:09:55 +00:00
*/
2022-01-11 06:00:44 +00:00
SNPRINTF ( cmd_name , sizeof ( cmd_name ) , " %s " , parsed_input [ 0 ] + 1 ) ;
2017-08-09 18:09:55 +00:00
/* Sanity check as valid multiple character commands consist of
Fix spelling errors
Fixed using the following command:
codespell --write-changes --summary --skip=*.m4 --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
codespell --write-changes --summary --skip=aclocal.m4,lib --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
Codespell home page: https://github.com/codespell-project/codespell
2020-07-24 07:02:12 +00:00
* alphanumeric characters and the underscore ( ' _ ' ) character .
2017-08-09 18:09:55 +00:00
*/
2017-10-06 23:58:42 +00:00
for ( j = 0 ; cmd_name [ j ] ! = ' \0 ' ; j + + )
{
if ( ! ( isalnum ( ( int ) cmd_name [ j ] ) | | cmd_name [ j ] = = ' _ ' ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr ,
Fix spelling errors
Fixed using the following command:
codespell --write-changes --summary --skip=*.m4 --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
codespell --write-changes --summary --skip=aclocal.m4,lib --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
Codespell home page: https://github.com/codespell-project/codespell
2020-07-24 07:02:12 +00:00
" Valid multiple character command names contain alphanumeric characters plus '_' \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
}
cmd = parse_arg ( cmd_name ) ;
}
/* Single '\' entered, prompt again */
2017-10-06 23:58:42 +00:00
else if ( ( * parsed_input [ 0 ] = = ' \\ ' ) & & ( strlen ( parsed_input [ 0 ] ) = = 1 ) )
{
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
/* Multiple characters but no leading '\' */
2017-10-06 23:58:42 +00:00
else
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Precede multiple character command names with ' \\ ' \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
cmd_entry = find_cmd_entry ( cmd ) ;
2017-10-06 23:58:42 +00:00
if ( ! cmd_entry )
{
if ( cmd = = ' \0 ' )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Command '%s' not found! \n " , parsed_input [ 0 ] ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr , " Command '%c' not found! \n " , cmd ) ;
}
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2020-05-26 17:01:44 +00:00
/* If vfo_opt is enabled (-o|--vfo) check if already given
2017-08-09 18:09:55 +00:00
* or prompt for it .
*/
2020-05-26 17:01:44 +00:00
if ( ! ( cmd_entry - > flags & ARG_NOVFO ) & & * vfo_opt )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
/* Check if VFO was given with command. */
result = strtok ( NULL , " " ) ;
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
x = 1 ;
parsed_input [ x ] = result ;
}
/* Need to prompt if a VFO string was not given. */
2017-10-06 23:58:42 +00:00
else
{
2017-08-09 18:09:55 +00:00
x = 0 ;
rp_getline ( " VFO: " ) ;
2017-10-06 23:58:42 +00:00
if ( ! input_line )
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
/* Blank line entered */
2017-10-06 23:58:42 +00:00
if ( ! ( strcmp ( input_line , " " ) ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
/* Get the first token of input, the rest, if any, will be
* used later .
*/
result = strtok ( input_line , " " ) ;
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
}
/* VFO name tokens are presently quite short. Truncate excessively
* long strings .
*/
2017-10-06 23:58:42 +00:00
if ( strlen ( parsed_input [ x ] ) > = MAXNAMSIZ )
{
2017-08-09 18:09:55 +00:00
* ( parsed_input [ x ] + ( MAXNAMSIZ - 1 ) ) = ' \0 ' ;
}
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2018-04-16 03:54:27 +00:00
strncat ( rp_hist_buf , " " , 2 ) ;
2017-08-09 18:09:55 +00:00
strncat ( rp_hist_buf , parsed_input [ x ] , MAXNAMSIZ ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
/* Sanity check, VFO names are alpha only. */
2017-10-06 23:58:42 +00:00
for ( j = 0 ; j < MAXNAMSIZ & & parsed_input [ x ] [ j ] ! = ' \0 ' ; j + + )
{
if ( ! ( isalpha ( ( int ) parsed_input [ x ] [ j ] ) ) )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] [ j ] = ' \0 ' ;
break ;
}
}
vfo = rig_parse_vfo ( parsed_input [ x ] ) ;
2017-10-06 23:58:42 +00:00
if ( vfo = = RIG_VFO_NONE )
{
2017-08-09 18:09:55 +00:00
fprintf ( stderr ,
" Warning: VFO '%s' unrecognized, using 'currVFO' instead. \n " ,
parsed_input [ x ] ) ;
vfo = RIG_VFO_CURR ;
}
}
/* \send_cmd, \send_morse */
if ( ( cmd_entry - > flags & ARG_IN_LINE )
2019-11-30 16:19:08 +00:00
& & ( cmd_entry - > flags & ARG_IN1 )
& & cmd_entry - > arg1 )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
/* Check for a non-existent delimiter so as to not break up
* remaining line into separate tokens ( spaces OK ) .
*/
result = strtok ( NULL , " \0 " ) ;
2020-05-26 17:01:44 +00:00
if ( * vfo_opt & & result )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
x = 2 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else if ( result )
{
2017-08-09 18:09:55 +00:00
x = 1 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
char pmptstr [ ( strlen ( cmd_entry - > arg1 ) + 3 ) ] ;
2019-12-09 23:12:13 +00:00
x = 0 ;
2017-08-09 18:09:55 +00:00
strcpy ( pmptstr , cmd_entry - > arg1 ) ;
strcat ( pmptstr , " : " ) ;
rp_getline ( pmptstr ) ;
/* Blank line entered */
2019-12-09 05:37:46 +00:00
if ( input_line & & ! ( strcmp ( input_line , " " ) ) )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( input_line )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] = input_line ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
}
/* The arg1 array size is MAXARGSZ + 1 so truncate it to fit if larger. */
2017-10-06 23:58:42 +00:00
if ( strlen ( parsed_input [ x ] ) > MAXARGSZ )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] [ MAXARGSZ ] = ' \0 ' ;
}
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2018-04-16 03:54:27 +00:00
strncat ( rp_hist_buf , " " , 2 ) ;
2017-08-09 18:09:55 +00:00
strncat ( rp_hist_buf , parsed_input [ x ] , MAXARGSZ ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
strcpy ( arg1 , parsed_input [ x ] ) ;
p1 = arg1 ;
}
/* Normal argument parsing. */
2017-10-06 23:58:42 +00:00
else if ( ( cmd_entry - > flags & ARG_IN1 ) & & cmd_entry - > arg1 )
{
2017-08-09 18:09:55 +00:00
result = strtok ( NULL , " " ) ;
2020-05-26 17:01:44 +00:00
if ( * vfo_opt & & result )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
x = 2 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else if ( result )
{
2017-08-09 18:09:55 +00:00
x = 1 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
char pmptstr [ ( strlen ( cmd_entry - > arg1 ) + 3 ) ] ;
2019-12-09 23:12:13 +00:00
x = 0 ;
2017-08-09 18:09:55 +00:00
strcpy ( pmptstr , cmd_entry - > arg1 ) ;
strcat ( pmptstr , " : " ) ;
rp_getline ( pmptstr ) ;
2017-10-06 23:58:42 +00:00
if ( ! ( strcmp ( input_line , " " ) ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
result = strtok ( input_line , " " ) ;
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
}
2017-10-06 23:58:42 +00:00
if ( strlen ( parsed_input [ x ] ) > MAXARGSZ )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] [ MAXARGSZ ] = ' \0 ' ;
}
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2018-04-16 03:54:27 +00:00
strncat ( rp_hist_buf , " " , 2 ) ;
2017-08-09 18:09:55 +00:00
strncat ( rp_hist_buf , parsed_input [ x ] , MAXARGSZ ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
strcpy ( arg1 , parsed_input [ x ] ) ;
p1 = arg1 ;
}
if ( p1
2019-11-30 16:19:08 +00:00
& & p1 [ 0 ] ! = ' ? '
& & ( cmd_entry - > flags & ARG_IN2 )
& & cmd_entry - > arg2 )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
result = strtok ( NULL , " " ) ;
2020-05-26 17:01:44 +00:00
if ( * vfo_opt & & result )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
x = 3 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else if ( result )
{
2017-08-09 18:09:55 +00:00
x = 2 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
char pmptstr [ ( strlen ( cmd_entry - > arg2 ) + 3 ) ] ;
2019-12-09 23:12:13 +00:00
x = 0 ;
2017-08-09 18:09:55 +00:00
strcpy ( pmptstr , cmd_entry - > arg2 ) ;
strcat ( pmptstr , " : " ) ;
rp_getline ( pmptstr ) ;
2017-10-06 23:58:42 +00:00
if ( ! ( strcmp ( input_line , " " ) ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
result = strtok ( input_line , " " ) ;
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
}
2017-10-06 23:58:42 +00:00
if ( strlen ( parsed_input [ x ] ) > MAXARGSZ )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] [ MAXARGSZ ] = ' \0 ' ;
}
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2018-04-16 03:54:27 +00:00
strncat ( rp_hist_buf , " " , 2 ) ;
2017-08-09 18:09:55 +00:00
strncat ( rp_hist_buf , parsed_input [ x ] , MAXARGSZ ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
strcpy ( arg2 , parsed_input [ x ] ) ;
p2 = arg2 ;
}
if ( p1
2019-11-30 16:19:08 +00:00
& & p1 [ 0 ] ! = ' ? '
& & ( cmd_entry - > flags & ARG_IN3 )
& & cmd_entry - > arg3 )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
result = strtok ( NULL , " " ) ;
2020-05-26 17:01:44 +00:00
if ( * vfo_opt & & result )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
x = 4 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else if ( result )
{
2017-08-09 18:09:55 +00:00
x = 3 ;
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
char pmptstr [ ( strlen ( cmd_entry - > arg3 ) + 3 ) ] ;
2019-12-09 23:12:13 +00:00
x = 0 ;
2017-08-09 18:09:55 +00:00
strcpy ( pmptstr , cmd_entry - > arg3 ) ;
strcat ( pmptstr , " : " ) ;
rp_getline ( pmptstr ) ;
2017-10-06 23:58:42 +00:00
if ( ! ( strcmp ( input_line , " " ) ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ? for help, q to quit. \n " ) ;
fflush ( fout ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
result = strtok ( input_line , " " ) ;
2017-10-06 23:58:42 +00:00
if ( result )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] = result ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " \n " ) ;
2022-02-05 21:27:43 +00:00
return ( RIGCTL_PARSE_END ) ;
2017-08-09 18:09:55 +00:00
}
}
2017-10-06 23:58:42 +00:00
if ( strlen ( parsed_input [ x ] ) > MAXARGSZ )
{
2017-08-09 18:09:55 +00:00
parsed_input [ x ] [ MAXARGSZ ] = ' \0 ' ;
}
2013-02-18 18:23:34 +00:00
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2018-04-16 03:54:27 +00:00
strncat ( rp_hist_buf , " " , 2 ) ;
2017-08-09 18:09:55 +00:00
strncat ( rp_hist_buf , parsed_input [ x ] , MAXARGSZ ) ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
strcpy ( arg3 , parsed_input [ x ] ) ;
p3 = arg3 ;
}
2013-02-19 02:42:42 +00:00
# ifdef HAVE_READLINE_HISTORY
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( rp_hist_buf )
{
2017-08-09 18:09:55 +00:00
add_history ( rp_hist_buf ) ;
free ( rp_hist_buf ) ;
rp_hist_buf = ( char * ) NULL ;
}
2013-02-19 02:42:42 +00:00
# endif
2017-08-09 18:09:55 +00:00
}
2020-02-23 17:26:09 +00:00
2020-01-15 23:05:31 +00:00
# endif // HAVE_LIBREADLINE
2013-02-18 18:23:34 +00:00
2020-04-15 14:57:08 +00:00
if ( sync_cb ) { sync_cb ( 1 ) ; } /* lock if necessary */
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( ! prompt )
{
2017-08-09 18:09:55 +00:00
rig_debug ( RIG_DEBUG_TRACE ,
" rigctl(d): %c '%s' '%s' '%s' '%s' \n " ,
cmd ,
rig_strvfo ( vfo ) ,
p1 ? p1 : " " ,
p2 ? p2 : " " ,
p3 ? p3 : " " ) ;
}
2010-01-24 23:24:20 +00:00
2017-08-09 18:09:55 +00:00
/*
* Extended Response protocol : output received command name and arguments
* response . Don ' t send command header on ' \ chk_vfo ' command .
*/
2019-08-25 07:58:19 +00:00
if ( interactive & & * ext_resp_ptr & & ! prompt & & cmd ! = 0xf0 )
2017-10-06 23:58:42 +00:00
{
2019-05-22 14:27:01 +00:00
char a1 [ MAXARGSZ + 2 ] ;
char a2 [ MAXARGSZ + 2 ] ;
char a3 [ MAXARGSZ + 2 ] ;
char vfo_str [ MAXARGSZ + 2 ] ;
2017-08-09 18:09:55 +00:00
2020-05-26 17:01:44 +00:00
* vfo_opt = = 0 ? vfo_str [ 0 ] = ' \0 ' : snprintf ( vfo_str ,
2020-05-27 17:21:41 +00:00
sizeof ( vfo_str ) ,
" %s " ,
rig_strvfo ( vfo ) ) ;
2017-08-09 18:09:55 +00:00
p1 = = NULL ? a1 [ 0 ] = ' \0 ' : snprintf ( a1 , sizeof ( a1 ) , " %s " , p1 ) ;
p2 = = NULL ? a2 [ 0 ] = ' \0 ' : snprintf ( a2 , sizeof ( a2 ) , " %s " , p2 ) ;
p3 = = NULL ? a3 [ 0 ] = ' \0 ' : snprintf ( a3 , sizeof ( a3 ) , " %s " , p3 ) ;
fprintf ( fout ,
" %s:%s%s%s%s%c " ,
cmd_entry - > name ,
vfo_str ,
a1 ,
a2 ,
a3 ,
2019-08-25 07:58:19 +00:00
* resp_sep_ptr ) ;
2017-08-09 18:09:55 +00:00
}
2010-01-24 23:24:20 +00:00
2020-05-26 17:01:44 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: vfo_opt=%d \n " , __func__ , * vfo_opt ) ;
2021-04-22 04:48:29 +00:00
2021-04-10 19:22:53 +00:00
if ( my_rig - > state . comm_state = = 0 )
{
2022-02-05 21:27:43 +00:00
rig_debug ( RIG_DEBUG_WARN , " %s: %p rig not open...trying to reopen \n " , __func__ ,
& my_rig - > state . comm_state ) ;
2021-04-10 19:22:53 +00:00
rig_open ( my_rig ) ;
}
2021-04-22 04:48:29 +00:00
2022-02-24 23:13:18 +00:00
// chk_vfo is the one command we'll allow without a password
// since it's in the initial handshake
2022-03-01 17:40:14 +00:00
int preCmd =
0 ; // some command are allowed without passoword to satisfy rigctld initialization from rigctl -m 2
2022-02-28 19:08:41 +00:00
if ( cmd_entry - > arg1 ! = NULL )
2022-02-24 23:13:18 +00:00
{
2022-03-01 17:40:14 +00:00
if ( strcmp ( cmd_entry - > arg1 , " ChkVFO " ) = = 0 ) { preCmd = 1 ; }
else if ( strcmp ( cmd_entry - > arg1 , " VFO " ) = = 0 ) { preCmd = 1 ; }
else if ( strcmp ( cmd_entry - > arg1 , " Password " ) = = 0 ) { preCmd = 1 ; }
2022-02-28 19:08:41 +00:00
}
2022-03-01 17:40:14 +00:00
2022-02-28 19:08:41 +00:00
if ( use_password & & ! is_passwordOK & & ( cmd_entry - > arg1 ! = NULL ) & & ! preCmd )
{
2022-05-13 16:09:30 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: password has not been provided \n " , __func__ ) ;
2022-04-15 18:21:35 +00:00
fflush ( fin ) ;
2022-04-29 22:17:43 +00:00
retcode = - RIG_ESECURITY ;
2022-02-24 23:13:18 +00:00
}
2022-03-01 17:40:14 +00:00
2022-04-15 18:21:35 +00:00
else
2022-07-15 20:41:23 +00:00
{
if ( ( my_rig - > state . powerstat = = RIG_POWER_OFF | | my_rig - > state . powerstat = = RIG_POWER_STANDBY ) )
{
// Update power status
2022-07-15 21:06:06 +00:00
powerstat_t stat = RIG_POWER_ON ;
2022-07-15 21:16:11 +00:00
retcode = rig_get_powerstat ( my_rig , & stat ) ;
2022-07-15 20:41:23 +00:00
}
// only command allows when powered off is 135=set_powerstat
2022-07-15 21:16:11 +00:00
if ( retcode = = RIG_OK & & ( my_rig - > state . powerstat = = RIG_POWER_OFF | | my_rig - > state . powerstat = = RIG_POWER_STANDBY ) & & cmd_entry - > cmd ! = 135 )
2022-07-15 20:41:23 +00:00
{
//rig_debug(RIG_DEBUG_WARN, "%s: %s - only \\set_powerstat can be run \n", __func__, rigerror(-RIG_EPOWER));
rig_debug ( RIG_DEBUG_WARN , " %s: only \\ set_powerstat can be run when rig powered off \n " , __func__ ) ;
retcode = - RIG_EPOWER ;
}
else {
2022-04-15 18:21:35 +00:00
retcode = ( * cmd_entry - > rig_routine ) ( my_rig ,
2022-05-13 21:50:13 +00:00
fout ,
fin ,
interactive ,
prompt ,
vfo_opt ,
send_cmd_term ,
* ext_resp_ptr ,
* resp_sep_ptr ,
cmd_entry ,
vfo ,
p1 ,
p2 ? p2 : " " ,
p3 ? p3 : " " ) ;
2022-07-15 20:41:23 +00:00
}
2022-04-15 18:21:35 +00:00
}
2007-11-11 23:03:38 +00:00
2020-05-27 17:23:08 +00:00
2021-03-16 21:39:35 +00:00
if ( retcode = = - RIG_EIO )
2020-04-15 14:37:22 +00:00
{
2020-04-20 22:26:57 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: RIG_EIO? \n " , __func__ ) ;
2020-04-22 16:47:56 +00:00
2020-04-15 14:57:08 +00:00
if ( sync_cb ) { sync_cb ( 0 ) ; } /* unlock if necessary */
2020-04-15 14:37:22 +00:00
2022-02-05 21:27:43 +00:00
return ( retcode ) ;
2020-04-15 14:37:22 +00:00
}
2010-02-04 00:53:56 +00:00
2017-10-06 23:58:42 +00:00
if ( retcode ! = RIG_OK )
{
2017-08-09 18:09:55 +00:00
/* only for rigctld */
2017-10-06 23:58:42 +00:00
if ( interactive & & ! prompt )
{
2020-05-03 22:07:22 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: return#1 " NETRIGCTL_RET " %d \n " , __func__ ,
retcode ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , NETRIGCTL_RET " %d \n " , retcode ) ;
2019-08-25 07:58:19 +00:00
* ext_resp_ptr = 0 ;
* resp_sep_ptr = ' \n ' ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" %s: error = %s \n " ,
cmd_entry - > name ,
rigerror ( retcode ) ) ;
}
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
/* only for rigctld */
2017-10-06 23:58:42 +00:00
if ( interactive & & ! prompt )
{
2017-08-09 18:09:55 +00:00
/* netrigctl RIG_OK */
if ( ! ( cmd_entry - > flags & ARG_OUT )
2019-11-30 16:19:08 +00:00
& & ! * ext_resp_ptr & & cmd ! = 0xf0 )
2017-10-06 23:58:42 +00:00
{
2020-05-03 22:07:22 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: return#2 " NETRIGCTL_RET " 0 \n " , __func__ ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , NETRIGCTL_RET " 0 \n " ) ;
}
/* Extended Response protocol */
2019-08-25 07:58:19 +00:00
else if ( * ext_resp_ptr & & cmd ! = 0xf0 )
2017-10-06 23:58:42 +00:00
{
2020-05-03 22:07:22 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: return#3 " NETRIGCTL_RET " 0 \n " , __func__ ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , NETRIGCTL_RET " 0 \n " ) ;
2019-08-25 07:58:19 +00:00
* ext_resp_ptr = 0 ;
* resp_sep_ptr = ' \n ' ;
2017-08-09 18:09:55 +00:00
}
}
}
2022-05-21 18:23:51 +00:00
if ( * resp_sep_ptr ! = ' \n ' ) { fprintf ( fout , " \n " ) ; }
2017-08-09 18:09:55 +00:00
fflush ( fout ) ;
2021-05-24 15:51:08 +00:00
# ifdef HAVE_LIBREADLINE
2021-08-26 11:49:24 +00:00
if ( input_line ! = NULL & & ( result = strtok ( NULL , " " ) ) ) { goto readline_repeat ; }
2021-05-24 15:51:08 +00:00
# endif
2020-04-22 16:47:56 +00:00
2020-04-15 14:57:08 +00:00
if ( sync_cb ) { sync_cb ( 0 ) ; } /* unlock if necessary */
2020-04-15 14:37:22 +00:00
2022-02-05 21:27:43 +00:00
return ( retcode ) ;
2007-11-11 23:03:38 +00:00
}
void version ( )
{
2021-03-20 03:56:18 +00:00
printf ( " rigctl(d), %s \n \n " , hamlib_version2 ) ;
2017-08-09 18:09:55 +00:00
printf ( " %s \n " , hamlib_copyright ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-05 18:13:12 +00:00
void usage_rig ( FILE * fout )
2007-11-11 23:03:38 +00:00
{
2019-12-09 05:37:46 +00:00
int i ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " Commands (some may not be available for this rig): \n " ) ;
2017-10-06 23:58:42 +00:00
for ( i = 0 ; test_list [ i ] . cmd ! = 0 ; i + + )
{
2019-12-09 23:12:13 +00:00
int nbspaces = 18 ;
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" %c: %-16s( " ,
isprint ( test_list [ i ] . cmd ) ? test_list [ i ] . cmd : ' ? ' ,
test_list [ i ] . name ) ;
2017-10-06 23:58:42 +00:00
if ( test_list [ i ] . arg1 & & ( test_list [ i ] . flags & ARG_IN1 ) )
{
2017-08-09 18:09:55 +00:00
nbspaces - = fprintf ( fout , " %s " , test_list [ i ] . arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( test_list [ i ] . arg2 & & ( test_list [ i ] . flags & ARG_IN2 ) )
{
2017-08-09 18:09:55 +00:00
nbspaces - = fprintf ( fout , " ,%s " , test_list [ i ] . arg2 ) ;
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( test_list [ i ] . arg3 & & ( test_list [ i ] . flags & ARG_IN3 ) )
{
2017-08-09 18:09:55 +00:00
nbspaces - = fprintf ( fout , " ,%s " , test_list [ i ] . arg3 ) ;
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( i % 2 )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " ) \n " ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " )%*s " , nbspaces , " " ) ;
}
}
2013-02-18 18:23:34 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" \n \n In interactive mode prefix long command names with ' \\ ', e.g. ' \\ dump_state' \n \n "
" The special command '-' is used to read further commands from standard input \n "
" Commands and arguments read from standard input must be white space separated, \n "
" comments are allowed, comments start with the # character and continue to the \n "
" end of the line. \n " ) ;
2007-11-11 23:03:38 +00:00
}
int print_conf_list ( const struct confparams * cfp , rig_ptr_t data )
{
2017-08-09 18:09:55 +00:00
RIG * rig = ( RIG * ) data ;
int i ;
char buf [ 128 ] = " " ;
rig_get_conf ( rig , cfp - > token , buf ) ;
printf ( " %s: \" %s \" \n " " \t " " Default: %s, Value: %s \n " ,
cfp - > name ,
cfp - > tooltip ,
cfp - > dflt ,
buf ) ;
2017-10-06 23:58:42 +00:00
switch ( cfp - > type )
{
2017-08-09 18:09:55 +00:00
case RIG_CONF_NUMERIC :
printf ( " \t Range: %.1f..%.1f, step %.1f \n " ,
cfp - > u . n . min ,
cfp - > u . n . max ,
cfp - > u . n . step ) ;
break ;
case RIG_CONF_COMBO :
2017-10-06 23:58:42 +00:00
if ( ! cfp - > u . c . combostr [ 0 ] )
{
2017-08-09 18:09:55 +00:00
break ;
}
printf ( " \t Combo: %s " , cfp - > u . c . combostr [ 0 ] ) ;
2017-10-06 23:58:42 +00:00
for ( i = 1 ; i < RIG_COMBO_MAX & & cfp - > u . c . combostr [ i ] ; i + + )
{
2017-08-09 18:09:55 +00:00
printf ( " , %s " , cfp - > u . c . combostr [ i ] ) ;
}
printf ( " \n " ) ;
break ;
case RIG_CONF_STRING :
printf ( " \t String. \n " ) ;
break ;
case RIG_CONF_CHECKBUTTON :
printf ( " \t Check button. \n " ) ;
break ;
case RIG_CONF_BUTTON :
printf ( " \t Button. \n " ) ;
break ;
default :
printf ( " \t Unknown conf \n " ) ;
}
return 1 ; /* !=0, we want them all ! */
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
static int hash_model_list ( const struct rig_caps * caps , void * data )
2007-11-11 23:03:38 +00:00
{
2017-08-09 18:09:55 +00:00
hash_add_model ( caps - > rig_model ,
caps - > mfg_name ,
caps - > model_name ,
caps - > version ,
2020-03-06 05:48:14 +00:00
caps - > macro_name ,
2017-08-09 18:09:55 +00:00
rig_strstatus ( caps - > status ) ) ;
2012-02-13 21:22:02 +00:00
2017-08-09 18:09:55 +00:00
return 1 ; /* !=0, we want them all ! */
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2012-02-13 21:22:02 +00:00
void print_model_list ( )
{
2017-08-09 18:09:55 +00:00
struct mod_lst * s ;
2012-02-13 21:22:02 +00:00
2017-10-06 23:58:42 +00:00
for ( s = models ; s ! = NULL ; s = ( struct mod_lst * ) ( s - > hh . next ) )
{
2020-03-06 05:48:14 +00:00
printf ( " %6d %-23s%-24s%-16s%-12s%s \n " ,
2017-08-09 18:09:55 +00:00
s - > id ,
s - > mfg_name ,
s - > model_name ,
s - > version ,
2020-03-06 05:48:14 +00:00
s - > macro_name ,
2017-08-09 18:09:55 +00:00
s - > status ) ;
}
2012-02-13 21:22:02 +00:00
}
2017-08-09 18:09:55 +00:00
2007-11-11 23:03:38 +00:00
void list_models ( )
{
2017-08-09 18:09:55 +00:00
int status ;
rig_load_all_backends ( ) ;
2007-11-11 23:03:38 +00:00
2020-03-06 05:48:14 +00:00
printf ( " Rig # Mfg Model Version Status Macro \n " ) ;
2017-08-09 18:09:55 +00:00
status = rig_list_foreach ( hash_model_list , NULL ) ;
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2017-08-09 18:09:55 +00:00
printf ( " rig_list_foreach: error = %s \n " , rigerror ( status ) ) ;
exit ( 2 ) ;
}
2012-02-13 21:22:02 +00:00
2017-08-09 18:09:55 +00:00
hash_sort_by_model_id ( ) ;
print_model_list ( ) ;
hash_delete_all ( ) ;
2007-11-11 23:03:38 +00:00
}
int set_conf ( RIG * my_rig , char * conf_parms )
{
2019-12-09 05:37:46 +00:00
char * p , * n ;
2017-08-09 18:09:55 +00:00
p = conf_parms ;
2017-10-06 23:58:42 +00:00
while ( p & & * p ! = ' \0 ' )
{
2019-12-09 23:12:13 +00:00
int ret ;
2017-08-09 18:09:55 +00:00
/* FIXME: left hand value of = cannot be null */
2019-12-09 05:37:46 +00:00
char * q = strchr ( p , ' = ' ) ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( ! q )
{
2022-02-05 21:27:43 +00:00
return ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
}
* q + + = ' \0 ' ;
n = strchr ( q , ' , ' ) ;
2017-10-06 23:58:42 +00:00
if ( n )
{
2017-08-09 18:09:55 +00:00
* n + + = ' \0 ' ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
ret = rig_set_conf ( my_rig , rig_token_lookup ( my_rig , p ) , q ) ;
2017-10-06 23:58:42 +00:00
if ( ret ! = RIG_OK )
{
2022-02-05 21:27:43 +00:00
return ( ret ) ;
2017-08-09 18:09:55 +00:00
}
p = n ;
}
2007-11-11 23:03:38 +00:00
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2007-11-11 23:03:38 +00:00
}
/*
2010-01-24 23:24:20 +00:00
* static int ( f ) ( RIG * rig , FILE * fout , int interactive , const struct test_table * cmd ,
2017-08-09 18:09:55 +00:00
* vfo_t vfo , const void * arg1 , const void * arg2 , const void * arg3 )
2007-11-11 23:03:38 +00:00
*/
2008-01-10 03:42:35 +00:00
/* 'F' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_freq )
{
2017-08-09 18:09:55 +00:00
freq_t freq ;
2020-05-11 23:05:11 +00:00
int retval ;
2020-05-13 22:44:17 +00:00
#if 0 // implement set_freq VFO later if it can be detected
2020-05-11 23:05:11 +00:00
char * fmt = " % " PRIll " %c " ;
2020-05-13 22:44:17 +00:00
# endif
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " % " SCNfreq , & freq ) ) ;
2020-05-11 23:05:11 +00:00
retval = rig_set_freq ( rig , vfo , freq ) ;
if ( retval = = RIG_OK )
{
2020-05-13 22:44:17 +00:00
//fprintf(fout, "%s%c", rig_strvfo(vfo), resp_sep);
//fprintf(fout, fmt, (int64_t)freq, resp_sep);
2020-05-11 23:05:11 +00:00
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( retval ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'f' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_freq )
{
2017-08-09 18:09:55 +00:00
int status ;
freq_t freq ;
2020-06-22 03:31:31 +00:00
// cppcheck-suppress *
2020-03-23 15:13:02 +00:00
char * fmt = " % " PRIll " %c " ;
2017-08-09 18:09:55 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_freq ( rig , vfo , & freq ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ; /* i.e. "Frequency" */
}
2007-11-11 23:03:38 +00:00
2020-03-23 15:13:02 +00:00
fprintf ( fout , fmt , ( int64_t ) freq , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2020-05-20 14:39:43 +00:00
#if 0 // this extra VFO being returned was confusing Log4OM
2020-05-27 17:21:41 +00:00
2020-03-18 22:40:30 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2020-04-22 16:47:56 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ; /* i.e. "Frequency" */
2020-03-18 22:40:30 +00:00
}
2020-05-11 23:05:11 +00:00
fprintf ( fout , " %s%c " , rig_strvfo ( vfo ) , resp_sep ) ;
2020-05-20 14:39:43 +00:00
# endif
2020-03-18 22:40:30 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'J' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_rit )
{
2017-08-09 18:09:55 +00:00
shortfreq_t rit ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %ld " , & rit ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_rit ( rig , vfo , rit ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'j' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_rit )
{
2017-08-09 18:09:55 +00:00
int status ;
shortfreq_t rit ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_rit ( rig , vfo , & rit ) ;
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %ld%c " , rit , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'Z' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_xit )
{
2017-08-09 18:09:55 +00:00
shortfreq_t xit ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %ld " , & xit ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_xit ( rig , vfo , xit ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'z' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_xit )
{
2017-08-09 18:09:55 +00:00
int status ;
shortfreq_t xit ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_xit ( rig , vfo , & xit ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %ld%c " , xit , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'M' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_mode )
{
2017-08-09 18:09:55 +00:00
rmode_t mode ;
pbwidth_t width ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2022-06-07 03:54:10 +00:00
if ( rig - > state . lock_mode | | lock_mode ) { RETURNFUNC ( RIG_OK ) ; }
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_mode ( s , sizeof ( s ) , rig - > state . mode_list ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2010-04-05 10:01:09 +00:00
2017-08-09 18:09:55 +00:00
mode = rig_parse_mode ( arg1 ) ;
CHKSCN1ARG ( sscanf ( arg2 , " %ld " , & width ) ) ;
2022-05-29 17:06:44 +00:00
if ( rig - > state . lock_mode ) { RETURNFUNC ( RIG_OK ) ; }
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_mode ( rig , vfo , mode , width ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'm' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_mode )
{
2017-08-09 18:09:55 +00:00
int status ;
rmode_t mode ;
pbwidth_t width ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_mode ( rig , vfo , & mode , & width ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %s%c " , rig_strrmode ( mode ) , resp_sep ) ;
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
fprintf ( fout , " %ld%c " , width , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'V' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_vfo )
{
2020-05-11 23:05:11 +00:00
int retval ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_vfo ( s , sizeof ( s ) , rig - > state . vfo_list ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2015-02-19 22:52:13 +00:00
2020-05-11 23:05:11 +00:00
vfo = rig_parse_vfo ( arg1 ) ;
2022-07-08 21:21:34 +00:00
if ( vfo = = RIG_VFO_NONE )
{
int c ;
while ( ( c = fgetc ( fin ) ) ! = ' \n ' & & c ! = ' \r ' & & c > 0 ) ;
return - RIG_EINVAL ;
}
2020-05-11 23:05:11 +00:00
retval = rig_set_vfo ( rig , vfo ) ;
2020-05-15 19:17:59 +00:00
#if 0 // see if we can make this dynamic
2020-05-27 17:21:41 +00:00
2020-05-11 23:05:11 +00:00
if ( retval = = RIG_OK )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
// fprintf(fout, "%s: ", cmd->arg1);
}
fprintf ( fout , " %s%c " , rig_strvfo ( vfo ) , resp_sep ) ;
}
2020-05-27 17:21:41 +00:00
2020-05-15 19:17:59 +00:00
# endif
2020-05-11 23:05:11 +00:00
2021-02-10 23:30:46 +00:00
if ( retval ! = RIG_OK )
{
2021-02-28 15:46:01 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: set_vfo(%s) failed, requested %s \n " , __func__ ,
rig_strvfo ( vfo ) , arg1 ) ;
2021-02-10 23:30:46 +00:00
}
2021-02-28 15:46:01 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( retval ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'v' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_vfo )
{
2017-08-09 18:09:55 +00:00
int status ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_vfo ( rig , & vfo ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %s%c " , rig_strvfo ( vfo ) , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2021-04-27 16:51:43 +00:00
declare_proto_rig ( get_rig_info )
{
char buf [ 1024 ] ; // big enough to last numerous years hopefully
int ret ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-04-27 16:51:43 +00:00
ret = rig_get_rig_info ( rig , buf , sizeof ( buf ) ) ;
2021-04-29 22:23:37 +00:00
2022-01-31 15:34:32 +00:00
if ( ret ! = RIG_OK ) { RETURNFUNC ( ret ) ; }
2021-04-29 22:23:37 +00:00
fprintf ( fout , " %s \n " , buf ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2021-04-27 16:51:43 +00:00
}
2021-02-07 18:45:59 +00:00
/* '\get_vfo_info' */
declare_proto_rig ( get_vfo_info )
{
int retval ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-12-05 15:46:00 +00:00
ELAPSED1 ;
2021-02-28 15:46:01 +00:00
2021-02-07 18:45:59 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_vfo ( s , sizeof ( s ) , rig - > state . vfo_list ) ;
2021-02-07 18:45:59 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2021-02-07 18:45:59 +00:00
}
vfo = rig_parse_vfo ( arg1 ) ;
2021-02-28 15:46:01 +00:00
freq_t freq = 0 ;
rmode_t mode = RIG_MODE_NONE ;
2021-02-07 18:45:59 +00:00
pbwidth_t width = 0 ;
2021-03-01 20:56:21 +00:00
split_t split ;
2021-04-27 15:32:12 +00:00
int satmode = 0 ;
retval = rig_get_vfo_info ( rig , vfo , & freq , & mode , & width , & split , & satmode ) ;
2021-02-07 18:45:59 +00:00
2021-03-20 16:21:11 +00:00
if ( retval ! = RIG_OK )
{
rig_debug ( RIG_DEBUG_ERR , " %s: vfo=%s \n " , __func__ , rig_strvfo ( vfo ) ) ;
}
2021-02-28 15:46:01 +00:00
2021-03-26 19:26:56 +00:00
const char * modestr = rig_strrmode ( mode ) ;
if ( strlen ( modestr ) = = 0 ) { modestr = " None " ; }
2021-02-07 18:45:59 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2022-05-23 03:35:21 +00:00
fprintf ( fout , " %s: %.0f%c " , cmd - > arg2 , freq , resp_sep ) ;
fprintf ( fout , " %s: %s%c " , cmd - > arg3 , modestr , resp_sep ) ;
fprintf ( fout , " %s: %d%c " , cmd - > arg4 , ( int ) width , resp_sep ) ;
fprintf ( fout , " %s: %d%c " , cmd - > arg5 , ( int ) split , resp_sep ) ;
fprintf ( fout , " %s: %d%c " , cmd - > arg6 , ( int ) satmode , resp_sep ) ;
2021-02-07 18:45:59 +00:00
}
else
{
2022-05-29 17:06:44 +00:00
fprintf ( fout , " %.0f%c%s%c%d%c%d%c%d \n " , freq , resp_sep , modestr , resp_sep ,
( int ) width , resp_sep , ( int ) split , resp_sep ,
2022-05-22 14:00:38 +00:00
( int ) satmode ) ;
2021-02-07 18:45:59 +00:00
}
2021-02-28 15:46:01 +00:00
2021-12-05 15:46:00 +00:00
ELAPSED2 ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( retval ) ;
2021-02-07 18:45:59 +00:00
}
2021-02-10 23:30:46 +00:00
/* '\get_vfo_list' */
declare_proto_rig ( get_vfo_list )
{
static char prntbuf [ 256 ] ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2021-03-03 14:03:18 +00:00
rig_sprintf_vfo ( prntbuf , sizeof ( prntbuf ) , rig - > state . vfo_list ) ;
2021-02-10 23:30:46 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2021-05-13 03:44:33 +00:00
fprintf ( fout , " %s%c \n " , prntbuf [ 0 ] ? prntbuf : " None " , ext_resp ) ;
2021-02-10 23:30:46 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2021-02-10 23:30:46 +00:00
}
2021-05-03 14:24:02 +00:00
/* '\get_modes' */
declare_proto_rig ( get_modes )
{
static char prntbuf [ 1024 ] ;
2021-05-03 16:26:41 +00:00
int i ;
char freqbuf [ 32 ] ;
2021-05-03 14:24:02 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-05-03 14:24:02 +00:00
rig_strrmodes ( rig - > state . mode_list , prntbuf , sizeof ( prntbuf ) ) ;
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %s%c " , prntbuf [ 0 ] ? prntbuf : " None " , ext_resp ) ;
2021-05-03 16:26:41 +00:00
fprintf ( fout , " \n Bandwidths: " ) ;
for ( i = 1 ; i < RIG_MODE_TESTS_MAX ; i < < = 1 )
{
pbwidth_t pbnorm = rig_passband_normal ( rig , i ) ;
if ( pbnorm = = 0 )
{
continue ;
}
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , pbnorm ) ;
fprintf ( fout , " \n \t %s \t Normal: %s, \t " , rig_strrmode ( i ) , freqbuf ) ;
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , rig_passband_narrow ( rig , i ) ) ;
fprintf ( fout , " Narrow: %s, \t " , freqbuf ) ;
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , rig_passband_wide ( rig , i ) ) ;
fprintf ( fout , " Wide: %s " , freqbuf ) ;
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2021-05-03 14:24:02 +00:00
}
2021-05-03 20:35:56 +00:00
declare_proto_rig ( get_mode_bandwidths )
{
int i ;
char freqbuf [ 32 ] ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-05-03 20:35:56 +00:00
rmode_t mode = rig_parse_mode ( arg1 ) ;
for ( i = 1 ; i < RIG_MODE_TESTS_MAX ; i < < = 1 )
{
if ( i ! = mode ) { continue ; }
if ( mode = = RIG_MODE_CWR ) { mode = RIG_MODE_CW ; }
if ( mode = = RIG_MODE_RTTYR ) { mode = RIG_MODE_RTTY ; }
pbwidth_t pbnorm = rig_passband_normal ( rig , i ) ;
if ( pbnorm = = 0 )
{
continue ;
}
// sprintf_freq(freqbuf, sizeof(freqbuf), pbnorm);
2022-01-11 06:00:44 +00:00
SNPRINTF ( freqbuf , sizeof ( freqbuf ) , " %ldHz " , pbnorm ) ;
2021-05-03 20:35:56 +00:00
fprintf ( fout , " Mode=%s \n " , rig_strrmode ( i ) ) ;
fprintf ( fout , " Normal=%s \n " , freqbuf ) ;
2022-01-11 06:00:44 +00:00
SNPRINTF ( freqbuf , sizeof ( freqbuf ) , " %ldHz " , rig_passband_narrow ( rig , i ) ) ;
2021-05-03 20:35:56 +00:00
fprintf ( fout , " Narrow=%s \n " , freqbuf ) ;
2022-01-11 06:00:44 +00:00
SNPRINTF ( freqbuf , sizeof ( freqbuf ) , " %ldHz " , rig_passband_wide ( rig , i ) ) ;
2021-05-03 20:35:56 +00:00
fprintf ( fout , " Wide=%s " , freqbuf ) ;
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2021-05-03 20:35:56 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'T' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_ptt )
{
2017-08-09 18:09:55 +00:00
int scr ;
ptt_t ptt ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & scr ) ) ;
ptt = scr ;
2022-05-15 16:53:38 +00:00
rig_debug ( RIG_DEBUG_VERBOSE , " %s: set_ptt ptt=%d \n " , __func__ , ptt ) ;
2017-08-09 18:09:55 +00:00
/*
* We allow RIG_PTT_ON_MIC and RIG_PTT_ON_DATA arriving from netrigctl .
* However , if the rig does not have two separate CAT commands , or if
* the rig is actually switched by a hardware signal ( DTR etc . ) , then
* we map this to RIG_PTT_ON .
* Currently , this is not really necessary here because it is taken
* case of in rig_set_ptt , but you never know . . . .
*/
2017-10-06 23:58:42 +00:00
switch ( ptt )
{
2017-08-09 18:09:55 +00:00
case RIG_PTT_ON_MIC :
case RIG_PTT_ON_DATA :
2022-05-15 16:53:38 +00:00
// No longer map this -- is confusing rigctld and MICDATA rigs
// https://github.com/Hamlib/Hamlib/issues/998
#if 0
2022-05-21 18:23:51 +00:00
2017-08-09 18:09:55 +00:00
// map to a legal value
2022-05-15 16:53:38 +00:00
if ( rig - > caps - > ptt_type ! = RIG_PTT_RIG_MICDATA )
2017-10-06 23:58:42 +00:00
{
2022-05-21 18:23:51 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: pttport.type.ptt=%d \n " , __func__ ,
rig - > state . pttport . type . ptt ) ;
2017-08-09 18:09:55 +00:00
ptt = RIG_PTT_ON ;
}
2022-05-21 18:23:51 +00:00
2022-05-15 16:53:38 +00:00
# endif
2017-08-09 18:09:55 +00:00
break ;
case RIG_PTT_ON :
case RIG_PTT_OFF :
// nothing to do
break ;
default :
// this case is not handled in hamlib, but we guard against
// illegal parameters here. The hamlib behaviour is to switch
// on PTT whenever ptt != RIG_PTT_OFF.
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
}
2022-05-15 16:53:38 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: ptt=%d \n " , __func__ , ptt ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ptt ( rig , vfo , ptt ) ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2008-01-10 03:42:35 +00:00
/* 't' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_ptt )
{
2017-08-09 18:09:55 +00:00
int status ;
2020-05-13 12:22:46 +00:00
ptt_t ptt = 0 ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_ptt ( rig , vfo , & ptt ) ;
2008-01-10 03:42:35 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
/* TODO MICDATA */
fprintf ( fout , " %d%c " , ptt , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2010-01-24 23:24:20 +00:00
/* '0x8b' */
2008-09-21 19:24:47 +00:00
declare_proto_rig ( get_dcd )
{
2017-08-09 18:09:55 +00:00
int status ;
dcd_t dcd ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_dcd ( rig , vfo , & dcd ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2008-09-21 19:24:47 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d%c " , dcd , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'R' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_rptr_shift )
{
2017-08-09 18:09:55 +00:00
rptr_shift_t rptr_shift ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
rptr_shift = rig_parse_rptr_shift ( arg1 ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_rptr_shift ( rig , vfo , rptr_shift ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'r' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_rptr_shift )
{
2017-08-09 18:09:55 +00:00
int status ;
rptr_shift_t rptr_shift ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_rptr_shift ( rig , vfo , & rptr_shift ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %s%c " , rig_strptrshift ( rptr_shift ) , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'O' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_rptr_offs )
{
2017-08-09 18:09:55 +00:00
unsigned long rptr_offs ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %lu " , & rptr_offs ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_rptr_offs ( rig , vfo , rptr_offs ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'o' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_rptr_offs )
{
2017-08-09 18:09:55 +00:00
int status ;
shortfreq_t rptr_offs ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_rptr_offs ( rig , vfo , & rptr_offs ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2008-01-10 03:42:35 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %ld%c " , rptr_offs , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'C' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_ctcss_tone )
{
2017-08-09 18:09:55 +00:00
tone_t tone ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %u " , & tone ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ctcss_tone ( rig , vfo , tone ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'c' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_ctcss_tone )
{
2017-08-09 18:09:55 +00:00
int status ;
tone_t tone ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_ctcss_tone ( rig , vfo , & tone ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d%c " , tone , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'D' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_dcs_code )
{
2017-08-09 18:09:55 +00:00
tone_t code ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %u " , & code ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_dcs_code ( rig , vfo , code ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'd' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_dcs_code )
{
2017-08-09 18:09:55 +00:00
int status ;
tone_t code ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_dcs_code ( rig , vfo , & code ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d%c " , code , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2010-01-24 23:24:20 +00:00
/* '0x90' */
2008-09-21 19:24:47 +00:00
declare_proto_rig ( set_ctcss_sql )
{
2017-08-09 18:09:55 +00:00
tone_t tone ;
2008-09-21 19:24:47 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %u " , & tone ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ctcss_sql ( rig , vfo , tone ) ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2010-01-24 23:24:20 +00:00
/* '0x91' */
2008-09-21 19:24:47 +00:00
declare_proto_rig ( get_ctcss_sql )
{
2017-08-09 18:09:55 +00:00
int status ;
tone_t tone ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_ctcss_sql ( rig , vfo , & tone ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2008-09-21 19:24:47 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %d%c " , tone , resp_sep ) ;
2008-09-21 19:24:47 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2010-01-24 23:24:20 +00:00
/* '0x92' */
2008-09-21 19:24:47 +00:00
declare_proto_rig ( set_dcs_sql )
{
2017-08-09 18:09:55 +00:00
tone_t code ;
2008-09-21 19:24:47 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %u " , & code ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_dcs_sql ( rig , vfo , code ) ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2010-01-24 23:24:20 +00:00
/* '0x93' */
2008-09-21 19:24:47 +00:00
declare_proto_rig ( get_dcs_sql )
{
2017-08-09 18:09:55 +00:00
int status ;
tone_t code ;
2008-09-21 19:24:47 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_dcs_sql ( rig , vfo , & code ) ;
2008-01-10 03:42:35 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %d%c " , code , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'I' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_split_freq )
{
2017-08-09 18:09:55 +00:00
freq_t txfreq ;
vfo_t txvfo = RIG_VFO_TX ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " % " SCNfreq , & txfreq ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_split_freq ( rig , txvfo , txfreq ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'i' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_split_freq )
{
2017-08-09 18:09:55 +00:00
int status ;
freq_t txfreq ;
vfo_t txvfo = RIG_VFO_TX ;
2010-01-24 23:24:20 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_split_freq ( rig , txvfo , & txfreq ) ;
2008-01-10 03:42:35 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " % " PRIll " %c " , ( int64_t ) txfreq , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'X' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_split_mode )
{
2017-08-09 18:09:55 +00:00
rmode_t mode ;
int width ;
vfo_t txvfo = RIG_VFO_TX ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_mode ( s , sizeof ( s ) , rig - > state . mode_list ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2010-04-05 10:01:09 +00:00
2021-10-16 14:45:24 +00:00
// mode could be RIG_MODE_NONE here
2021-11-28 18:41:10 +00:00
// we treat it as non-fatal
2021-10-16 14:45:24 +00:00
// rig_parse_mode will spit out error msg
2017-08-09 18:09:55 +00:00
mode = rig_parse_mode ( arg1 ) ;
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & width ) ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_split_mode ( rig , txvfo , mode , ( pbwidth_t ) width ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'x' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_split_mode )
{
2017-08-09 18:09:55 +00:00
int status ;
rmode_t mode ;
pbwidth_t width ;
vfo_t txvfo = RIG_VFO_TX ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_split_mode ( rig , txvfo , & mode , & width ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %s%c " , rig_strrmode ( mode ) , resp_sep ) ;
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %ld%c " , width , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2014-04-28 21:25:06 +00:00
/* 'K' */
declare_proto_rig ( set_split_freq_mode )
{
2017-08-09 18:09:55 +00:00
freq_t freq ;
rmode_t mode ;
int width ;
vfo_t txvfo = RIG_VFO_TX ;
2014-04-28 21:25:06 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_mode ( s , sizeof ( s ) , rig - > state . mode_list ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2014-04-28 21:25:06 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " % " SCNfreq , & freq ) ) ;
mode = rig_parse_mode ( arg2 ) ;
CHKSCN1ARG ( sscanf ( arg3 , " %d " , & width ) ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_split_freq_mode ( rig , txvfo , freq , mode , ( pbwidth_t ) width ) ) ;
2014-04-28 21:25:06 +00:00
}
2017-08-09 18:09:55 +00:00
2014-04-28 21:25:06 +00:00
/* 'k' */
declare_proto_rig ( get_split_freq_mode )
{
2017-08-09 18:09:55 +00:00
int status ;
freq_t freq ;
rmode_t mode ;
pbwidth_t width ;
vfo_t txvfo = RIG_VFO_TX ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_split_freq_mode ( rig , txvfo , & freq , & mode , & width ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2014-04-28 21:25:06 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " % " PRIll " %c " , ( int64_t ) freq , resp_sep ) ;
2014-04-28 21:25:06 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
fprintf ( fout , " %s%c " , rig_strrmode ( mode ) , resp_sep ) ;
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg3 ) ;
}
fprintf ( fout , " %ld%c " , width , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2014-04-28 21:25:06 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'S' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_split_vfo )
{
2017-08-09 18:09:55 +00:00
int split ;
vfo_t tx_vfo ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & split ) ) ;
2015-02-19 22:52:13 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg2 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_vfo ( s , sizeof ( s ) , rig - > state . vfo_list ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
tx_vfo = rig_parse_vfo ( arg2 ) ;
2017-10-06 23:58:42 +00:00
if ( tx_vfo = = RIG_VFO_NONE )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
}
2022-02-24 23:13:18 +00:00
rig_debug ( RIG_DEBUG_VERBOSE , " %s(%d): rx_vfo = %s, tx_vfo = %s \n " , __func__ ,
__LINE__ , rig_strvfo ( vfo ) , rig_strvfo ( tx_vfo ) ) ;
2015-02-19 22:52:13 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_split_vfo ( rig , vfo , ( split_t ) split , tx_vfo ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 's' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_split_vfo )
{
2017-08-09 18:09:55 +00:00
int status ;
split_t split ;
vfo_t tx_vfo ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_split_vfo ( rig , vfo , & split , & tx_vfo ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %d%c " , split , resp_sep ) ;
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
2008-01-10 03:42:35 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s%c " , rig_strvfo ( tx_vfo ) , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'N' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_ts )
{
2017-08-09 18:09:55 +00:00
unsigned long ts ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %lu " , & ts ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ts ( rig , vfo , ts ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'n' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_ts )
{
2017-08-09 18:09:55 +00:00
int status ;
shortfreq_t ts ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_ts ( rig , vfo , & ts ) ;
2008-01-10 03:42:35 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %ld%c " , ts , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* '2' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( power2mW )
{
2017-08-09 18:09:55 +00:00
int status ;
float power ;
freq_t freq ;
rmode_t mode ;
unsigned int mwp ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %f " , & power ) ) ;
CHKSCN1ARG ( sscanf ( arg2 , " % " SCNfreq , & freq ) ) ;
mode = rig_parse_mode ( arg3 ) ;
2010-02-06 15:05:17 +00:00
2017-08-09 18:09:55 +00:00
status = rig_power2mW ( rig , & mwp , power , freq , mode ) ;
2010-02-06 15:05:17 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2010-02-06 15:05:17 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg4 ) ;
}
fprintf ( fout , " %i%c " , mwp , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2010-02-06 15:05:17 +00:00
}
2017-08-09 18:09:55 +00:00
2010-02-06 15:05:17 +00:00
/* '4' */
declare_proto_rig ( mW2power )
{
2017-08-09 18:09:55 +00:00
int status ;
float power ;
freq_t freq ;
rmode_t mode ;
unsigned int mwp ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-12-13 04:29:13 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %u " , & mwp ) ) ;
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " % " SCNfreq , & freq ) ) ;
mode = rig_parse_mode ( arg3 ) ;
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
status = rig_mW2power ( rig , & power , mwp , freq , mode ) ;
2010-02-06 15:05:17 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg4 ) ;
}
2008-01-12 00:36:58 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %f%c " , power , resp_sep ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2007-11-11 23:03:38 +00:00
/*
* RIG_CONF_ extparm ' s type :
* NUMERIC : val . f
* COMBO : val . i , starting from 0
* STRING : val . s
* CHECKBUTTON : val . i 0 / 1
2008-01-10 03:42:35 +00:00
*
* ' L '
2007-11-11 23:03:38 +00:00
*/
declare_proto_rig ( set_level )
{
2017-08-09 18:09:55 +00:00
setting_t level ;
value_t val ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_level ( s , sizeof ( s ) , rig - > state . has_set_level ) ;
2017-08-09 18:09:55 +00:00
fputs ( s , fout ) ;
2017-10-06 23:58:42 +00:00
if ( rig - > caps - > set_ext_level )
{
2021-03-03 14:03:18 +00:00
sprintf_level_ext ( s , sizeof ( s ) , rig - > caps - > extlevels ) ;
2017-08-09 18:09:55 +00:00
fputs ( s , fout ) ;
}
fputc ( ' \n ' , fout ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
level = rig_parse_level ( arg1 ) ;
2021-02-11 21:52:29 +00:00
// some Java apps send comma in international setups so substitute period
2021-02-28 15:46:01 +00:00
char * p = strchr ( arg2 , ' , ' ) ;
if ( p ) { * p = ' . ' ; }
2021-02-11 21:52:29 +00:00
2017-10-06 23:58:42 +00:00
if ( ! rig_has_set_level ( rig , level ) )
{
2017-08-09 18:09:55 +00:00
const struct confparams * cfp ;
cfp = rig_ext_lookup ( rig , arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! cfp )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ENAVAIL ) ; /* no such parameter */
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
switch ( cfp - > type )
{
2017-08-09 18:09:55 +00:00
case RIG_CONF_BUTTON :
/* arg is ignored */
val . i = 0 ; // avoid passing uninitialized data
break ;
case RIG_CONF_CHECKBUTTON :
case RIG_CONF_COMBO :
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & val . i ) ) ;
break ;
case RIG_CONF_NUMERIC :
CHKSCN1ARG ( sscanf ( arg2 , " %f " , & val . f ) ) ;
break ;
case RIG_CONF_STRING :
val . cs = arg2 ;
break ;
default :
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ECONF ) ;
2017-08-09 18:09:55 +00:00
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ext_level ( rig , vfo , cfp - > token , val ) ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( RIG_LEVEL_IS_FLOAT ( level ) )
{
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %f " , & val . f ) ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & val . i ) ) ;
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_level ( rig , vfo , level , val ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'l' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_level )
{
2017-08-09 18:09:55 +00:00
int status ;
setting_t level ;
value_t val ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_level ( s , sizeof ( s ) , rig - > state . has_get_level ) ;
2017-08-09 18:09:55 +00:00
fputs ( s , fout ) ;
2017-10-06 23:58:42 +00:00
if ( rig - > caps - > get_ext_level )
{
2021-03-03 14:03:18 +00:00
sprintf_level_ext ( s , sizeof ( s ) , rig - > caps - > extlevels ) ;
2022-05-23 03:35:21 +00:00
fprintf ( fout , " %s%c " , s , resp_sep ) ;
2017-08-09 18:09:55 +00:00
}
2022-05-23 03:45:25 +00:00
//fputc('\n', fout);
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
level = rig_parse_level ( arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! rig_has_get_level ( rig , level ) )
{
2017-08-09 18:09:55 +00:00
const struct confparams * cfp ;
cfp = rig_ext_lookup ( rig , arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! cfp )
{
2021-03-08 15:54:24 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: level not found=%s \n " , __func__ , arg1 ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ; /* no such parameter */
2017-08-09 18:09:55 +00:00
}
status = rig_get_ext_level ( rig , vfo , cfp - > token , & val ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
2017-10-06 23:58:42 +00:00
switch ( cfp - > type )
{
2017-08-09 18:09:55 +00:00
case RIG_CONF_BUTTON :
/* there's no sense in retrieving value of stateless button */
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
case RIG_CONF_CHECKBUTTON :
case RIG_CONF_COMBO :
fprintf ( fout , " %d \n " , val . i ) ;
break ;
case RIG_CONF_NUMERIC :
fprintf ( fout , " %f \n " , val . f ) ;
break ;
case RIG_CONF_STRING :
fprintf ( fout , " %s \n " , val . s ) ;
break ;
default :
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ECONF ) ;
2017-08-09 18:09:55 +00:00
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
status = rig_get_level ( rig , vfo , level , & val ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
2017-10-06 23:58:42 +00:00
if ( RIG_LEVEL_IS_FLOAT ( level ) )
{
2022-05-23 04:01:14 +00:00
fprintf ( fout , " %f%c " , val . f , resp_sep ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2022-05-23 04:01:14 +00:00
fprintf ( fout , " %d%c " , val . i , resp_sep ) ;
2017-08-09 18:09:55 +00:00
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'U' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_func )
{
2017-08-09 18:09:55 +00:00
setting_t func ;
int func_stat ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_func ( s , sizeof ( s ) , rig - > state . has_set_func ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
func = rig_parse_func ( arg1 ) ;
2008-05-23 14:30:12 +00:00
2020-02-11 09:48:13 +00:00
if ( ! rig_has_set_func ( rig , func ) )
2017-10-06 23:58:42 +00:00
{
2020-02-11 09:48:13 +00:00
const struct confparams * cfp ;
cfp = rig_ext_lookup ( rig , arg1 ) ;
if ( ! cfp )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ENAVAIL ) ; /* no such parameter */
2020-02-11 09:48:13 +00:00
}
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & func_stat ) ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ext_func ( rig , vfo , cfp - > token , func_stat ) ) ;
2017-08-09 18:09:55 +00:00
}
2010-12-01 21:41:55 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & func_stat ) ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_func ( rig , vfo , func , func_stat ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'u' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_func )
{
2017-08-09 18:09:55 +00:00
int status ;
setting_t func ;
int func_stat ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_func ( s , sizeof ( s ) , rig - > state . has_get_func ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
func = rig_parse_func ( arg1 ) ;
2008-05-23 14:30:12 +00:00
2020-02-11 09:48:13 +00:00
if ( ! rig_has_get_func ( rig , func ) )
2017-10-06 23:58:42 +00:00
{
2020-02-11 09:48:13 +00:00
const struct confparams * cfp ;
cfp = rig_ext_lookup ( rig , arg1 ) ;
if ( ! cfp )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ; /* no such parameter */
2020-02-11 09:48:13 +00:00
}
status = rig_get_ext_func ( rig , vfo , cfp - > token , & func_stat ) ;
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2020-02-11 09:48:13 +00:00
}
if ( interactive & & prompt )
{
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
fprintf ( fout , " %d \n " , func_stat ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
status = rig_get_func ( rig , vfo , func , & func_stat ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2010-12-01 21:41:55 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
fprintf ( fout , " %d \n " , func_stat ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'P' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_parm )
{
2017-08-09 18:09:55 +00:00
setting_t parm ;
value_t val ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_parm ( s , sizeof ( s ) , rig - > state . has_set_parm ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
parm = rig_parse_parm ( arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! rig_has_set_parm ( rig , parm ) )
{
2017-08-09 18:09:55 +00:00
const struct confparams * cfp ;
cfp = rig_ext_lookup ( rig , arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! cfp )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ; /* no such parameter */
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
switch ( cfp - > type )
{
2017-08-09 18:09:55 +00:00
case RIG_CONF_BUTTON :
/* arg is ignored */
val . i = 0 ; // avoid passing uninitialized data
break ;
case RIG_CONF_CHECKBUTTON :
case RIG_CONF_COMBO :
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & val . i ) ) ;
break ;
case RIG_CONF_NUMERIC :
CHKSCN1ARG ( sscanf ( arg2 , " %f " , & val . f ) ) ;
break ;
case RIG_CONF_STRING :
val . cs = arg2 ;
break ;
2020-01-04 05:59:44 +00:00
case RIG_CONF_BINARY :
2020-01-06 19:54:09 +00:00
val . b . d = ( unsigned char * ) arg2 ;
2020-01-04 05:59:44 +00:00
break ;
2017-08-09 18:09:55 +00:00
default :
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ECONF ) ;
2017-08-09 18:09:55 +00:00
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ext_parm ( rig , cfp - > token , val ) ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( RIG_PARM_IS_FLOAT ( parm ) )
{
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %f " , & val . f ) ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & val . i ) ) ;
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_parm ( rig , parm , val ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'p' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_parm )
{
2017-08-09 18:09:55 +00:00
int status ;
setting_t parm ;
value_t val ;
2020-01-04 05:59:44 +00:00
char buffer [ RIG_BIN_MAX ] ;
2017-08-09 18:09:55 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_parm ( s , sizeof ( s ) , rig - > state . has_get_parm ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
parm = rig_parse_parm ( arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! rig_has_get_parm ( rig , parm ) )
{
2017-08-09 18:09:55 +00:00
const struct confparams * cfp ;
cfp = rig_ext_lookup ( rig , arg1 ) ;
2017-10-06 23:58:42 +00:00
if ( ! cfp )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ; /* no such parameter */
2017-08-09 18:09:55 +00:00
}
2020-01-04 05:59:44 +00:00
switch ( cfp - > type )
{
case RIG_CONF_STRING :
memset ( buffer , ' 0 ' , sizeof ( buffer ) ) ;
2020-02-23 17:26:09 +00:00
buffer [ sizeof ( buffer ) - 1 ] = 0 ;
2020-01-04 05:59:44 +00:00
val . s = buffer ;
break ;
2020-02-23 17:26:09 +00:00
2020-01-04 05:59:44 +00:00
case RIG_CONF_BINARY :
memset ( buffer , 0 , sizeof ( buffer ) ) ;
val . b . d = ( unsigned char * ) buffer ;
val . b . l = RIG_BIN_MAX ;
break ;
2020-02-23 17:26:09 +00:00
2020-01-04 05:59:44 +00:00
default :
break ;
}
2017-08-09 18:09:55 +00:00
status = rig_get_ext_parm ( rig , cfp - > token , & val ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
2017-10-06 23:58:42 +00:00
switch ( cfp - > type )
{
2017-08-09 18:09:55 +00:00
case RIG_CONF_BUTTON :
/* there's not sense in retrieving value of stateless button */
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
case RIG_CONF_CHECKBUTTON :
case RIG_CONF_COMBO :
fprintf ( fout , " %d \n " , val . i ) ;
break ;
case RIG_CONF_NUMERIC :
fprintf ( fout , " %f \n " , val . f ) ;
break ;
case RIG_CONF_STRING :
fprintf ( fout , " %s \n " , val . s ) ;
break ;
2020-01-04 05:59:44 +00:00
case RIG_CONF_BINARY :
dump_hex ( ( unsigned char * ) buffer , val . b . l ) ;
break ;
2017-08-09 18:09:55 +00:00
default :
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ECONF ) ;
2017-08-09 18:09:55 +00:00
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
status = rig_get_parm ( rig , parm , & val ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
2017-10-06 23:58:42 +00:00
if ( RIG_PARM_IS_FLOAT ( parm ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %f \n " , val . f ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d \n " , val . i ) ;
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'B' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_bank )
{
2017-08-09 18:09:55 +00:00
int bank ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & bank ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_bank ( rig , vfo , bank ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'E' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_mem )
{
2017-08-09 18:09:55 +00:00
int ch ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & ch ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_mem ( rig , vfo , ch ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'e' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_mem )
{
2017-08-09 18:09:55 +00:00
int status ;
int ch ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_mem ( rig , vfo , & ch ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d%c " , ch , resp_sep ) ;
2008-01-12 00:36:58 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'G' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( vfo_op )
{
2017-08-09 18:09:55 +00:00
vfo_op_t op ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_vfop ( s , sizeof ( s ) , rig - > caps - > vfo_ops ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
op = rig_parse_vfo_op ( arg1 ) ;
2008-05-23 14:30:12 +00:00
2017-10-06 23:58:42 +00:00
if ( RIG_OP_NONE = = op )
{
2021-11-28 18:41:10 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: rig_parse_vfo failed with '%s' \n " , __func__ ,
arg1 ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
}
2010-12-01 21:41:55 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_vfo_op ( rig , vfo , op ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'g' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( scan )
{
2017-08-09 18:09:55 +00:00
scan_t op ;
int ch ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-10-06 23:58:42 +00:00
if ( ! strcmp ( arg1 , " ? " ) )
{
2017-08-09 18:09:55 +00:00
char s [ SPRINTF_MAX_SIZE ] ;
2021-03-03 14:03:18 +00:00
rig_sprintf_scan ( s , sizeof ( s ) , rig - > caps - > scan_ops ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s \n " , s ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2017-08-09 18:09:55 +00:00
}
2008-05-23 14:30:12 +00:00
2017-08-09 18:09:55 +00:00
op = rig_parse_scan ( arg1 ) ;
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & ch ) ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_scan ( rig , vfo , op , ch ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'H' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_channel )
{
2017-08-09 18:09:55 +00:00
const channel_cap_t * mem_caps = NULL ;
const chan_t * chan_list ;
channel_t chan ;
int status ;
char s [ 16 ] ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
memset ( & chan , 0 , sizeof ( channel_t ) ) ;
2017-10-06 23:58:42 +00:00
if ( isdigit ( ( int ) arg1 [ 0 ] ) )
{
2017-08-09 18:09:55 +00:00
chan . vfo = RIG_VFO_MEM ;
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & chan . channel_num ) ) ;
/*
* find mem_caps in caps , we ' ll need it later
*/
chan_list = rig_lookup_mem_caps ( rig , chan . channel_num ) ;
2017-10-06 23:58:42 +00:00
if ( chan_list )
{
2017-08-09 18:09:55 +00:00
mem_caps = & chan_list - > mem_caps ;
}
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
chan . vfo = rig_parse_vfo ( arg1 ) ;
chan . channel_num = 0 ;
/* TODO: mem_caps for VFO! */
/* either from mem, or reverse computed from caps */
}
2017-10-06 23:58:42 +00:00
if ( ! mem_caps )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_ECONF ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > bank_num )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf_flush ( fout , " Bank Num: " ) ;
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . bank_num ) ) ;
}
2010-05-28 19:47:35 +00:00
#if 0
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( mem_caps - > vfo )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " vfo (VFOA,MEM,etc...): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %s " , s ) ) ;
chan . vfo = rig_parse_vfo ( s ) ;
}
2010-05-28 19:47:35 +00:00
# endif
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( mem_caps - > ant )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " ant: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . ant ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > freq )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " Frequency: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " % " SCNfreq , & chan . freq ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > mode )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " mode (FM,LSB,etc...): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %s " , s ) ) ;
chan . mode = rig_parse_mode ( s ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > width )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " width: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %ld " , & chan . width ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > tx_freq )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " tx freq: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " % " SCNfreq , & chan . tx_freq ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > tx_mode )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " tx mode (FM,LSB,etc...): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %s " , s ) ) ;
chan . tx_mode = rig_parse_mode ( s ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > tx_width )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " tx width: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %ld " , & chan . tx_width ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > split )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " split (0,1): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & status ) ) ;
chan . split = status ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > tx_vfo )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " tx vfo (VFOA,MEM,etc...): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %s " , s ) ) ;
chan . tx_vfo = rig_parse_vfo ( s ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > rptr_shift )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " rptr shift (+-0): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %s " , s ) ) ;
chan . rptr_shift = rig_parse_rptr_shift ( s ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > rptr_offs )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " rptr offset: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %ld " , & chan . rptr_offs ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > tuning_step )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " tuning step: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %ld " , & chan . tuning_step ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > rit )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " rit (Hz,0=off): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %ld " , & chan . rit ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > xit )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " xit (Hz,0=off): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %ld " , & chan . xit ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > funcs )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " funcs: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %lx " , & chan . funcs ) ) ;
}
2007-11-11 23:03:38 +00:00
#if 0
2017-08-09 18:09:55 +00:00
/* for all levels (except READONLY), ask */
2017-10-06 23:58:42 +00:00
if ( mem_caps - > levels )
{
2017-08-09 18:09:55 +00:00
sscanf ( arg1 , " %d " , & chan . levels ) ;
}
2007-11-11 23:03:38 +00:00
# endif
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( mem_caps - > ctcss_tone )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " ctcss tone freq in tenth of Hz (0=off): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . ctcss_tone ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > ctcss_sql )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " ctcss sql freq in tenth of Hz (0=off): " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . ctcss_sql ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > dcs_code )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " dcs code: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . dcs_code ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > dcs_sql )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " dcs sql: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . dcs_sql ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > scan_group )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " scan group: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . scan_group ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > flags )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " flags: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %d " , & chan . flags ) ) ;
}
2017-10-06 23:58:42 +00:00
if ( mem_caps - > channel_desc )
{
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2010-05-28 19:47:35 +00:00
fprintf_flush ( fout , " channel desc: " ) ;
2017-08-09 18:09:55 +00:00
}
CHKSCN1ARG ( scanfc ( fin , " %s " , s ) ) ;
strcpy ( chan . channel_desc , s ) ;
}
2007-11-11 23:03:38 +00:00
#if 0
2017-08-09 18:09:55 +00:00
/* TODO: same as levels, allocate/free the array */
2017-10-06 23:58:42 +00:00
if ( mem_caps - > ext_levels )
{
2017-08-09 18:09:55 +00:00
sscanf ( arg1 , " %d " , & chan . ext_levels [ i ] . val . i ) ;
}
2007-11-11 23:03:38 +00:00
# endif
2020-11-30 05:32:14 +00:00
status = rig_set_channel ( rig , vfo , & chan ) ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'h' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_channel )
{
2017-08-09 18:09:55 +00:00
int status ;
2020-05-06 13:06:14 +00:00
int read_only = 0 ;
2017-08-09 18:09:55 +00:00
channel_t chan ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
memset ( & chan , 0 , sizeof ( channel_t ) ) ;
2010-01-24 23:24:20 +00:00
2017-10-06 23:58:42 +00:00
if ( isdigit ( ( int ) arg1 [ 0 ] ) )
{
2017-08-09 18:09:55 +00:00
chan . vfo = RIG_VFO_MEM ;
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & chan . channel_num ) ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
chan . vfo = rig_parse_vfo ( arg1 ) ;
chan . channel_num = 0 ;
}
2007-11-11 23:03:38 +00:00
2020-05-06 13:06:14 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & read_only ) ) ;
2020-11-30 05:32:14 +00:00
status = rig_get_channel ( rig , RIG_VFO_NONE , & chan , read_only ) ;
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2010-05-28 19:47:35 +00:00
2017-08-09 18:09:55 +00:00
status = dump_chan ( fout , rig , & chan ) ;
2010-05-28 19:47:35 +00:00
2017-10-06 23:58:42 +00:00
if ( chan . ext_levels )
{
2017-08-09 18:09:55 +00:00
free ( chan . ext_levels ) ;
}
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'A' */
2021-11-28 18:52:29 +00:00
/**
* \ deprecated Function deprecated . Use the new async data functionality instead .
*/
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_trn )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
RETURNFUNC ( - RIG_EDEPRECATED ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'a' */
2021-11-28 18:52:29 +00:00
/**
* \ deprecated Function deprecated . Use the new async data functionality instead .
*/
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_trn )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
RETURNFUNC ( - RIG_EDEPRECATED ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* '_' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_info )
{
2017-08-09 18:09:55 +00:00
const char * s ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
s = rig_get_info ( rig ) ;
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s%c " , s ? s : " None " , resp_sep ) ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2010-05-28 19:47:35 +00:00
int dump_chan ( FILE * fout , RIG * rig , channel_t * chan )
2007-11-11 23:03:38 +00:00
{
2017-08-09 18:09:55 +00:00
int idx , firstloop = 1 ;
char freqbuf [ 16 ] ;
char widthbuf [ 16 ] ;
char prntbuf [ 256 ] ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" Channel: %d, Name: '%s' \n " ,
chan - > channel_num ,
chan - > channel_desc ) ;
fprintf ( fout ,
" VFO: %s, Antenna: %d, Split: %s \n " ,
rig_strvfo ( chan - > vfo ) ,
chan - > ant ,
chan - > split = = RIG_SPLIT_ON ? " ON " : " OFF " ) ;
2021-03-03 14:03:18 +00:00
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , chan - > freq ) ;
sprintf_freq ( widthbuf , sizeof ( widthbuf ) , chan - > width ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" Freq: %s \t Mode: %s \t Width: %s \n " ,
freqbuf ,
rig_strrmode ( chan - > mode ) ,
widthbuf ) ;
2021-03-03 14:03:18 +00:00
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , chan - > tx_freq ) ;
sprintf_freq ( widthbuf , sizeof ( widthbuf ) , chan - > tx_width ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" txFreq: %s \t txMode: %s \t txWidth: %s \n " ,
freqbuf ,
rig_strrmode ( chan - > tx_mode ) ,
widthbuf ) ;
2021-03-03 14:03:18 +00:00
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , chan - > rptr_offs ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
" Shift: %s, Offset: %s%s, " ,
rig_strptrshift ( chan - > rptr_shift ) ,
chan - > rptr_offs > 0 ? " + " : " " ,
freqbuf ) ;
2021-03-03 14:03:18 +00:00
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , chan - > tuning_step ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " Step: %s, " , freqbuf ) ;
2021-03-03 14:03:18 +00:00
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , chan - > rit ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " RIT: %s%s, " , chan - > rit > 0 ? " + " : " " , freqbuf ) ;
2021-03-03 14:03:18 +00:00
sprintf_freq ( freqbuf , sizeof ( freqbuf ) , chan - > xit ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " XIT: %s%s \n " , chan - > xit > 0 ? " + " : " " , freqbuf ) ;
2020-01-15 05:36:01 +00:00
fprintf ( fout , " CTCSS: %u.%uHz, " , chan - > ctcss_tone / 10 , chan - > ctcss_tone % 10 ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
2020-01-15 05:36:01 +00:00
" CTCSSsql: %u.%uHz, " ,
2017-08-09 18:09:55 +00:00
chan - > ctcss_sql / 10 ,
chan - > ctcss_sql % 10 ) ;
2020-01-15 05:36:01 +00:00
fprintf ( fout , " DCS: %u.%u, " , chan - > dcs_code / 10 , chan - > dcs_code % 10 ) ;
fprintf ( fout , " DCSsql: %u.%u \n " , chan - > dcs_sql / 10 , chan - > dcs_sql % 10 ) ;
2017-08-09 18:09:55 +00:00
2021-03-03 14:03:18 +00:00
rig_sprintf_func ( prntbuf , sizeof ( prntbuf ) , chan - > funcs ) ;
2017-08-09 18:09:55 +00:00
fprintf ( fout , " Functions: %s \n " , prntbuf ) ;
fprintf ( fout , " Levels: " ) ;
2017-10-06 23:58:42 +00:00
for ( idx = 0 ; idx < RIG_SETTING_MAX ; idx + + )
{
2017-08-09 18:09:55 +00:00
setting_t level = rig_idx2setting ( idx ) ;
const char * level_s ;
if ( ! RIG_LEVEL_SET ( level )
2019-11-30 16:19:08 +00:00
| | ( ! rig_has_set_level ( rig , level )
& & ! rig_has_get_level ( rig , level ) ) )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
continue ;
}
level_s = rig_strlevel ( level ) ;
2017-10-06 23:58:42 +00:00
if ( ! level_s | | level_s [ 0 ] = = ' \0 ' )
{
2017-08-09 18:09:55 +00:00
continue ; /* duh! */
}
2017-10-06 23:58:42 +00:00
if ( firstloop )
{
2017-08-09 18:09:55 +00:00
firstloop = 0 ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " , \t " ) ;
}
2017-10-06 23:58:42 +00:00
if ( RIG_LEVEL_IS_FLOAT ( level ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: %g%% " , level_s , 100 * chan - > levels [ idx ] . f ) ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: %d " , level_s , chan - > levels [ idx ] . i ) ;
}
}
/* ext_levels */
for ( idx = 0 ; chan - > ext_levels
2019-11-30 16:19:08 +00:00
& & ! RIG_IS_EXT_END ( chan - > ext_levels [ idx ] ) ; idx + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
const struct confparams * cfp ;
char lstr [ 32 ] ;
cfp = rig_ext_lookup_tok ( rig , chan - > ext_levels [ idx ] . token ) ;
2017-10-06 23:58:42 +00:00
if ( ! cfp )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
switch ( cfp - > type )
{
2017-08-09 18:09:55 +00:00
case RIG_CONF_STRING :
strcpy ( lstr , chan - > ext_levels [ idx ] . val . s ) ;
break ;
case RIG_CONF_COMBO :
2022-01-11 06:00:44 +00:00
SNPRINTF ( lstr , sizeof ( lstr ) , " %d " , chan - > ext_levels [ idx ] . val . i ) ;
2017-08-09 18:09:55 +00:00
break ;
case RIG_CONF_NUMERIC :
2022-01-11 06:00:44 +00:00
SNPRINTF ( lstr , sizeof ( lstr ) , " %f " , chan - > ext_levels [ idx ] . val . f ) ;
2017-08-09 18:09:55 +00:00
break ;
case RIG_CONF_CHECKBUTTON :
2022-01-11 06:00:44 +00:00
SNPRINTF ( lstr , sizeof ( lstr ) , " %s " , chan - > ext_levels [ idx ] . val . i ? " ON " : " OFF " ) ;
2017-08-09 18:09:55 +00:00
break ;
case RIG_CONF_BUTTON :
continue ;
default :
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINTERNAL ) ;
2017-08-09 18:09:55 +00:00
}
fprintf ( fout , " , \t %s: %s " , cfp - > name , lstr ) ;
}
fprintf ( fout , " \n " ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* '1' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( dump_caps )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
dumpcaps ( rig , fout ) ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2008-09-21 19:24:47 +00:00
/* For rigctld internal use */
declare_proto_rig ( dump_state )
{
2017-08-09 18:09:55 +00:00
int i ;
struct rig_state * rs = & rig - > state ;
2008-09-21 19:24:47 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
/*
* - Protocol version
*/
2020-04-04 14:38:50 +00:00
# define RIGCTLD_PROT_VER 1
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d \n " , RIGCTLD_PROT_VER ) ;
fprintf ( fout , " %d \n " , rig - > caps - > rig_model ) ;
2020-07-24 17:57:33 +00:00
#if 0 // deprecated -- not one rig uses this
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d \n " , rs - > itu_region ) ;
2020-10-11 16:03:50 +00:00
# else // need to print something to maintain backward compatibility
2020-07-24 17:57:33 +00:00
fprintf ( fout , " %d \n " , 0 ) ;
# endif
2017-08-09 18:09:55 +00:00
2021-03-15 22:51:22 +00:00
for ( i = 0 ; i < HAMLIB_FRQRANGESIZ
& & ! RIG_IS_FRNG_END ( rs - > rx_range_list [ i ] ) ; i + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
2018-12-21 21:46:48 +00:00
" % " FREQFMT " % " FREQFMT " 0x% " PRXll " %d %d 0x%x 0x%x \n " ,
2019-08-18 04:20:48 +00:00
rs - > rx_range_list [ i ] . startf ,
rs - > rx_range_list [ i ] . endf ,
2018-12-23 04:56:30 +00:00
rs - > rx_range_list [ i ] . modes ,
2017-08-09 18:09:55 +00:00
rs - > rx_range_list [ i ] . low_power ,
rs - > rx_range_list [ i ] . high_power ,
rs - > rx_range_list [ i ] . vfo ,
rs - > rx_range_list [ i ] . ant ) ;
}
fprintf ( fout , " 0 0 0 0 0 0 0 \n " ) ;
2021-03-15 22:51:22 +00:00
for ( i = 0 ; i < HAMLIB_FRQRANGESIZ
& & ! RIG_IS_FRNG_END ( rs - > tx_range_list [ i ] ) ; i + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
2018-12-21 21:46:48 +00:00
" % " FREQFMT " % " FREQFMT " 0x% " PRXll " %d %d 0x%x 0x%x \n " ,
2019-08-18 04:20:48 +00:00
rs - > tx_range_list [ i ] . startf ,
rs - > tx_range_list [ i ] . endf ,
2018-12-23 04:56:30 +00:00
rs - > tx_range_list [ i ] . modes ,
2017-08-09 18:09:55 +00:00
rs - > tx_range_list [ i ] . low_power ,
rs - > tx_range_list [ i ] . high_power ,
rs - > tx_range_list [ i ] . vfo ,
rs - > tx_range_list [ i ] . ant ) ;
}
fprintf ( fout , " 0 0 0 0 0 0 0 \n " ) ;
2021-03-06 20:59:57 +00:00
for ( i = 0 ; i < HAMLIB_TSLSTSIZ & & ! RIG_IS_TS_END ( rs - > tuning_steps [ i ] ) ; i + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
2018-12-21 21:46:48 +00:00
" 0x% " PRXll " %ld \n " ,
2018-12-23 04:56:30 +00:00
rs - > tuning_steps [ i ] . modes ,
2017-08-09 18:09:55 +00:00
rs - > tuning_steps [ i ] . ts ) ;
}
fprintf ( fout , " 0 0 \n " ) ;
2021-03-06 20:59:57 +00:00
for ( i = 0 ; i < HAMLIB_FLTLSTSIZ & & ! RIG_IS_FLT_END ( rs - > filters [ i ] ) ; i + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout ,
2018-12-21 21:46:48 +00:00
" 0x% " PRXll " %ld \n " ,
2018-12-23 04:56:30 +00:00
rs - > filters [ i ] . modes ,
2017-08-09 18:09:55 +00:00
rs - > filters [ i ] . width ) ;
}
fprintf ( fout , " 0 0 \n " ) ;
2008-09-21 19:24:47 +00:00
#if 0
2021-03-06 20:59:57 +00:00
chan_t chan_list [ HAMLIB_CHANLSTSIZ ] ; /*!< Channel list, zero ended */
2008-09-21 19:24:47 +00:00
# endif
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %ld \n " , rs - > max_rit ) ;
fprintf ( fout , " %ld \n " , rs - > max_xit ) ;
fprintf ( fout , " %ld \n " , rs - > max_ifshift ) ;
fprintf ( fout , " %d \n " , rs - > announces ) ;
2021-03-06 20:59:57 +00:00
for ( i = 0 ; i < HAMLIB_MAXDBLSTSIZ & & rs - > preamp [ i ] ; i + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d " , rs - > preamp [ i ] ) ;
}
fprintf ( fout , " \n " ) ;
2021-03-06 20:59:57 +00:00
for ( i = 0 ; i < HAMLIB_MAXDBLSTSIZ & & rs - > attenuator [ i ] ; i + + )
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d " , rs - > attenuator [ i ] ) ;
}
fprintf ( fout , " \n " ) ;
2018-12-23 04:56:30 +00:00
fprintf ( fout , " 0x% " PRXll " \n " , rs - > has_get_func ) ;
fprintf ( fout , " 0x% " PRXll " \n " , rs - > has_set_func ) ;
fprintf ( fout , " 0x% " PRXll " \n " , rs - > has_get_level ) ;
fprintf ( fout , " 0x% " PRXll " \n " , rs - > has_set_level ) ;
fprintf ( fout , " 0x% " PRXll " \n " , rs - > has_get_parm ) ;
fprintf ( fout , " 0x% " PRXll " \n " , rs - > has_set_parm ) ;
2008-09-21 19:24:47 +00:00
2020-04-04 14:38:50 +00:00
// protocol 1 fields are "setting=value"
// protocol 1 allows fields can be listed/processed in any order
// protocol 1 fields can be multi-line -- just write the thing to allow for it
2020-04-04 20:49:26 +00:00
// backward compatible as new values will just generate warnings
2020-06-23 16:12:15 +00:00
if ( chk_vfo_executed ) // for 3.3 compatiblility
{
2020-07-01 13:52:44 +00:00
fprintf ( fout , " vfo_ops=0x%x \n " , rig - > caps - > vfo_ops ) ;
2021-08-26 11:49:24 +00:00
fprintf ( fout , " ptt_type=0x%x \n " ,
2022-05-20 14:06:17 +00:00
rig - > state . pttport . type . ptt ) ;
2020-10-06 20:50:37 +00:00
fprintf ( fout , " targetable_vfo=0x%x \n " , rig - > caps - > targetable_vfo ) ;
2021-01-09 16:13:17 +00:00
fprintf ( fout , " has_set_vfo=%d \n " , rig - > caps - > set_vfo ! = NULL ) ;
fprintf ( fout , " has_get_vfo=%d \n " , rig - > caps - > get_vfo ! = NULL ) ;
fprintf ( fout , " has_set_freq=%d \n " , rig - > caps - > set_freq ! = NULL ) ;
fprintf ( fout , " has_get_freq=%d \n " , rig - > caps - > get_freq ! = NULL ) ;
2021-04-28 22:39:08 +00:00
fprintf ( fout , " has_set_conf=%d \n " , rig - > caps - > set_conf ! = NULL ) ;
fprintf ( fout , " has_get_conf=%d \n " , rig - > caps - > get_conf ! = NULL ) ;
2021-04-29 22:25:54 +00:00
#if 0
2021-04-29 22:16:51 +00:00
fprintf ( fout , " has_set_parm=%d \n " , rig - > caps - > set_parm ! = NULL ) ;
fprintf ( fout , " has_get_parm=%d \n " , rig - > caps - > get_parm ! = NULL ) ;
fprintf ( fout , " parm_gran=0x%x \n " , rig - > caps - > parm_gran ) ;
2021-04-29 22:25:54 +00:00
# endif
2021-04-28 22:39:08 +00:00
// for the future
// fprintf(fout, "has_set_trn=%d\n", rig->caps->set_trn != NULL);
// fprintf(fout, "has_get_trn=%d\n", rig->caps->get_trn != NULL);
fprintf ( fout , " has_power2mW=%d \n " , rig - > caps - > power2mW ! = NULL ) ;
fprintf ( fout , " has_mW2power=%d \n " , rig - > caps - > mW2power ! = NULL ) ;
2021-04-09 20:35:30 +00:00
fprintf ( fout , " timeout=%d \n " , rig - > caps - > timeout ) ;
2021-12-12 04:54:54 +00:00
fprintf ( fout , " rig_model=%d \n " , rig - > caps - > rig_model ) ;
fprintf ( fout , " rigctld_version=%s \n " , hamlib_version2 ) ;
2021-04-29 22:23:37 +00:00
2021-04-30 20:42:03 +00:00
if ( rig - > caps - > ctcss_list )
2021-04-29 15:49:29 +00:00
{
2021-04-30 20:42:03 +00:00
fprintf ( fout , " ctcss_list= " ) ;
2021-04-29 22:23:37 +00:00
2021-04-30 20:42:03 +00:00
for ( i = 0 ; i < CTCSS_LIST_SIZE & & rig - > caps - > ctcss_list [ i ] ! = 0 ; i + + )
{
fprintf ( fout ,
" %u.%1u " ,
rig - > caps - > ctcss_list [ i ] / 10 , rig - > caps - > ctcss_list [ i ] % 10 ) ;
}
2021-04-29 22:23:37 +00:00
2021-04-30 20:42:03 +00:00
fprintf ( fout , " \n " ) ;
2021-04-29 15:49:29 +00:00
}
2021-04-29 22:23:37 +00:00
2021-04-30 20:42:03 +00:00
if ( rig - > caps - > dcs_list )
{
fprintf ( fout , " dcs_list= " ) ;
for ( i = 0 ; i < DCS_LIST_SIZE & & rig - > caps - > dcs_list [ i ] ! = 0 ; i + + )
{
fprintf ( fout ,
" %u " ,
rig - > caps - > dcs_list [ i ] ) ;
}
fprintf ( fout , " \n " ) ;
}
2021-04-29 15:49:29 +00:00
2020-07-01 13:52:44 +00:00
fprintf ( fout , " done \n " ) ;
2020-06-23 16:12:15 +00:00
}
2020-04-04 14:38:50 +00:00
#if 0 // why isn't this implemented? Does anybody care?
2017-08-09 18:09:55 +00:00
gran_t level_gran [ RIG_SETTING_MAX ] ; /*!< level granularity */
gran_t parm_gran [ RIG_SETTING_MAX ] ; /*!< parm granularity */
2008-09-21 19:24:47 +00:00
# endif
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-05-23 14:30:12 +00:00
/* '3' */
declare_proto_rig ( dump_conf )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
dumpconf ( rig , fout ) ;
2008-05-23 14:30:12 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2008-05-23 14:30:12 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'Y' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_ant )
{
2017-08-09 18:09:55 +00:00
ant_t ant ;
2020-01-21 23:53:12 +00:00
value_t option ; // some rigs have a another option for the antenna
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & ant ) ) ;
2020-01-21 23:53:12 +00:00
CHKSCN1ARG ( sscanf ( arg2 , " %d " , & option . i ) ) ; // assuming they are integer values
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_ant ( rig , vfo , rig_idx2setting ( ant - 1 ) , option ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'y' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_ant )
{
2017-08-09 18:09:55 +00:00
int status ;
2020-02-19 05:10:14 +00:00
ant_t ant , ant_curr , ant_tx , ant_rx ;
2020-01-21 23:53:12 +00:00
value_t option ;
2022-05-25 16:55:14 +00:00
char antbuf [ 64 ] ;
2017-08-09 18:09:55 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-02-04 13:40:24 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & ant ) ) ;
2020-02-02 14:38:10 +00:00
2020-02-10 18:17:30 +00:00
if ( ant = = 0 ) // then we want the current antenna info
{
2020-02-23 17:26:09 +00:00
status = rig_get_ant ( rig , vfo , RIG_ANT_CURR , & option , & ant_curr , & ant_tx ,
& ant_rx ) ;
2020-02-10 18:17:30 +00:00
}
else
{
2020-02-23 17:26:09 +00:00
status = rig_get_ant ( rig , vfo , rig_idx2setting ( ant - 1 ) , & option , & ant_curr ,
& ant_tx , & ant_rx ) ;
2020-02-10 18:17:30 +00:00
}
2007-11-11 23:03:38 +00:00
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2020-02-23 17:26:09 +00:00
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2021-03-15 22:51:22 +00:00
rig_sprintf_ant ( antbuf , sizeof ( antbuf ) , ant_curr ) ;
2020-02-19 05:10:14 +00:00
fprintf ( fout , " %s%c " , antbuf , resp_sep ) ;
//fprintf(fout, "%d%c", rig_setting2idx(ant_curr)+1, resp_sep);
2017-08-09 18:09:55 +00:00
2020-01-21 23:53:12 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg2 ) ;
}
fprintf ( fout , " %d%c " , option . i , resp_sep ) ;
2020-02-19 05:10:14 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg3 ) ;
}
2021-03-03 14:03:18 +00:00
rig_sprintf_ant ( antbuf , sizeof ( antbuf ) , ant_tx ) ;
2020-02-19 05:10:14 +00:00
fprintf ( fout , " %s%c " , antbuf , resp_sep ) ;
//fprintf(fout, "%d%c", rig_setting2idx(ant_tx)+1, resp_sep);
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg4 ) ;
}
2021-03-03 14:03:18 +00:00
rig_sprintf_ant ( antbuf , sizeof ( antbuf ) , ant_rx ) ;
2020-02-19 05:10:14 +00:00
fprintf ( fout , " %s%c " , antbuf , resp_sep ) ;
//fprintf(fout, "%d%c", rig_setting2idx(ant_rx)+1, resp_sep);
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* '*' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( reset )
{
2017-08-09 18:09:55 +00:00
int reset ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & reset ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_reset ( rig , ( reset_t ) reset ) ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* 'b' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( send_morse )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_send_morse ( rig , vfo , arg1 ) ) ;
2007-11-11 23:03:38 +00:00
}
2020-10-16 13:41:57 +00:00
/* 0xvv */
declare_proto_rig ( stop_morse )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_stop_morse ( rig , vfo ) ) ;
2020-10-16 13:41:57 +00:00
}
2020-10-18 19:22:42 +00:00
declare_proto_rig ( wait_morse )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_wait_morse ( rig , vfo ) ) ;
2020-10-18 19:22:42 +00:00
}
2020-02-06 00:00:34 +00:00
/* '8' */
declare_proto_rig ( send_voice_mem )
{
int ch ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-02-06 00:00:34 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & ch ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_send_voice_mem ( rig , vfo , ch ) ) ;
2020-02-06 00:00:34 +00:00
}
2017-08-09 18:09:55 +00:00
2008-09-21 19:24:47 +00:00
declare_proto_rig ( send_dtmf )
2021-03-15 22:51:22 +00:00
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_send_dtmf ( rig , vfo , arg1 ) ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2008-09-21 19:24:47 +00:00
declare_proto_rig ( recv_dtmf )
{
2017-08-09 18:09:55 +00:00
int status ;
int len ;
char digits [ MAXARGSZ ] ;
2008-09-21 19:24:47 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
len = MAXARGSZ - 1 ;
status = rig_recv_dtmf ( rig , vfo , digits , & len ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2008-09-21 19:24:47 +00:00
2017-10-06 23:58:42 +00:00
if ( interactive & & prompt )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %s \n " , digits ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2008-09-21 19:24:47 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* '0x87' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( set_powerstat )
{
2017-08-09 18:09:55 +00:00
int stat ;
2022-05-09 12:11:01 +00:00
int retval ;
2007-11-11 23:03:38 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & stat ) ) ;
2021-03-08 15:54:24 +00:00
2022-05-09 12:11:01 +00:00
retval = rig_set_powerstat ( rig , ( powerstat_t ) stat ) ;
2022-07-15 20:41:23 +00:00
rig - > state . powerstat = stat ;
2022-05-09 12:11:01 +00:00
fflush ( fin ) ;
RETURNFUNC ( retval ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2008-01-10 03:42:35 +00:00
/* '0x88' */
2007-11-11 23:03:38 +00:00
declare_proto_rig ( get_powerstat )
{
2017-08-09 18:09:55 +00:00
int status ;
powerstat_t stat ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
status = rig_get_powerstat ( rig , & stat ) ;
2017-10-06 23:58:42 +00:00
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
2007-11-11 23:03:38 +00:00
2017-08-09 18:09:55 +00:00
fprintf ( fout , " %d \n " , stat ) ;
2022-07-15 20:41:23 +00:00
rig - > state . powerstat = stat ;
2008-01-10 03:42:35 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2007-11-11 23:03:38 +00:00
}
2020-10-02 22:23:48 +00:00
static int hasbinary ( char * s , int len )
2019-12-13 04:29:13 +00:00
{
int i ;
2020-10-02 22:23:48 +00:00
for ( i = 0 ; i < len ; + + i )
2019-12-13 04:29:13 +00:00
{
2022-02-05 21:27:43 +00:00
if ( ! isascii ( s [ i ] ) ) { return ( 1 ) ; }
2019-12-13 04:29:13 +00:00
}
return 0 ;
}
2017-08-09 18:09:55 +00:00
2007-11-11 23:03:38 +00:00
/*
2017-08-09 18:09:55 +00:00
* Special debugging purpose send command display reply until there ' s a
* timeout .
2008-01-10 03:42:35 +00:00
*
2019-12-10 05:37:14 +00:00
* ' w ' and ' W '
2007-11-11 23:03:38 +00:00
*/
2022-04-25 17:42:27 +00:00
extern int flrig_cat_string ( RIG * rig , const char * arg ) ;
2007-11-11 23:03:38 +00:00
declare_proto_rig ( send_cmd )
{
2017-08-09 18:09:55 +00:00
int retval ;
struct rig_state * rs ;
int backend_num , cmd_len ;
2020-10-25 11:43:48 +00:00
# define BUFSZ 512
2020-10-07 04:14:27 +00:00
char bufcmd [ BUFSZ * 5 ] ; // allow for 5 chars for binary
2019-12-13 04:29:13 +00:00
unsigned char buf [ BUFSZ ] ;
2017-08-09 18:09:55 +00:00
char eom_buf [ 4 ] = { 0xa , 0xd , 0 , 0 } ;
2019-12-06 13:58:19 +00:00
int binary = 0 ;
2019-12-10 05:37:14 +00:00
int rxbytes = BUFSZ ;
2019-12-06 13:58:19 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2017-08-09 18:09:55 +00:00
/*
* binary protocols enter values as \ 0 xZZ \ 0 xYY . .
*/
backend_num = RIG_BACKEND_NUM ( rig - > caps - > rig_model ) ;
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: backend_num=%d \n " , __func__ , backend_num ) ;
2022-04-25 17:54:06 +00:00
if ( rig - > caps - > rig_model = = RIG_MODEL_FLRIG )
2022-04-25 17:42:27 +00:00
{
// call flrig raw send function cat_string or cat_priority_string
flrig_cat_string ( rig , arg1 ) ;
}
2019-12-13 04:29:13 +00:00
// need to move the eom_buf to rig-specifc backends
// we'll let KENWOOD backends use the ; char in the rigctl commands
2020-05-12 13:33:36 +00:00
if ( backend_num = = RIG_KENWOOD | | backend_num = = RIG_YAESU )
2019-12-13 04:29:13 +00:00
{
rig_debug ( RIG_DEBUG_TRACE , " %s: KENWOOD \n " , __func__ ) ;
2022-02-24 23:13:18 +00:00
// eom_buf[0] = 0;
2019-12-13 04:29:13 +00:00
send_cmd_term = 0 ;
}
rig_debug ( RIG_DEBUG_TRACE , " %s: arg1=%s \n " , __func__ , arg1 ) ;
2017-08-09 18:09:55 +00:00
if ( send_cmd_term = = - 1
2019-11-30 16:19:08 +00:00
| | backend_num = = RIG_ICOM
| | backend_num = = RIG_KACHINA
2019-12-13 04:29:13 +00:00
| | backend_num = = RIG_MICROTUNE
| | ( strstr ( arg1 , " \\ 0x " ) & & ( rig - > caps - > rig_model ! = RIG_MODEL_NETRIGCTL ) )
)
2017-10-06 23:58:42 +00:00
{
2017-08-09 18:09:55 +00:00
const char * p = arg1 , * pp = NULL ;
int i ;
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: send_cmd_term==-1, arg1=%s \n " , __func__ , arg1 ) ;
2020-05-11 23:05:11 +00:00
if ( arg1 [ strlen ( arg1 ) - 1 ] ! = ' ; ' & & strstr ( arg1 , " \\ 0x " ) = = NULL )
2019-12-13 04:29:13 +00:00
{
rig_debug ( RIG_DEBUG_ERR , " %s: expecting binary hex string here \n " , __func__ ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( - RIG_EINVAL ) ;
2019-12-13 04:29:13 +00:00
}
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
for ( i = 0 ; i < BUFSZ - 1 & & p ! = pp ; i + + )
{
2017-08-09 18:09:55 +00:00
pp = p + 1 ;
bufcmd [ i ] = strtol ( p + 1 , ( char * * ) & p , 0 ) ;
}
/* must save length to allow 0x00 to be sent as part of a command */
cmd_len = i - 1 ;
/* no End Of Message chars */
eom_buf [ 0 ] = ' \0 ' ;
2017-10-06 23:58:42 +00:00
}
2019-12-06 13:58:19 +00:00
else if ( rig - > caps - > rig_model = = RIG_MODEL_NETRIGCTL )
{
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: we're netrigctl#2 \n " , __func__ ) ;
2022-01-11 06:00:44 +00:00
//SNPRINTF(bufcmd, sizeof(bufcmd), "%s %s\n", cmd->cmd, arg1);
2019-12-13 04:29:13 +00:00
if ( cmd - > cmd = = ' w ' )
{
2022-01-11 06:00:44 +00:00
SNPRINTF ( bufcmd , sizeof ( bufcmd ) , " %c %s \n " , cmd - > cmd , arg1 ) ;
2019-12-13 04:29:13 +00:00
}
else
{
int nbytes = 0 ;
sscanf ( arg2 , " %d " , & nbytes ) ;
2022-01-11 06:00:44 +00:00
SNPRINTF ( bufcmd , sizeof ( bufcmd ) , " %c %s %d \n " , cmd - > cmd , arg1 , nbytes ) ;
2019-12-13 04:29:13 +00:00
}
2019-12-06 13:58:19 +00:00
cmd_len = strlen ( bufcmd ) ;
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_VERBOSE , " %s: cmd=%s, len=%d \n " , __func__ , bufcmd , cmd_len ) ;
2019-12-06 13:58:19 +00:00
}
2017-10-06 23:58:42 +00:00
else
{
2019-12-13 04:29:13 +00:00
char tmpbuf [ 64 ] ;
2017-08-09 18:09:55 +00:00
/* text protocol */
2019-12-20 17:22:09 +00:00
strncpy ( bufcmd , arg1 , BUFSZ - 1 ) ;
2019-12-13 04:29:13 +00:00
strtok ( bufcmd , " \0 xa \0 xd " ) ;
2017-08-09 18:09:55 +00:00
bufcmd [ BUFSZ - 2 ] = ' \0 ' ;
cmd_len = strlen ( bufcmd ) ;
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: bufcmd=%s \n " , __func__ , bufcmd ) ;
2017-08-09 18:09:55 +00:00
/* Automatic termination char */
2017-10-06 23:58:42 +00:00
if ( send_cmd_term ! = 0 )
{
2017-08-09 18:09:55 +00:00
bufcmd [ cmd_len + + ] = send_cmd_term ;
}
eom_buf [ 2 ] = send_cmd_term ;
2019-12-13 04:29:13 +00:00
2022-01-11 06:00:44 +00:00
SNPRINTF ( tmpbuf , sizeof ( tmpbuf ) , " 0x%02x 0x%02x 0x%02x " , eom_buf [ 0 ] , eom_buf [ 1 ] ,
2019-12-13 04:29:13 +00:00
eom_buf [ 2 ] ) ;
rig_debug ( RIG_DEBUG_TRACE , " %s: text protocol, send_cmd_term=%s \n " , __func__ ,
tmpbuf ) ;
2017-08-09 18:09:55 +00:00
}
rs = & rig - > state ;
2022-01-25 23:41:26 +00:00
rig_flush ( & rs - > rigport ) ;
2017-08-09 18:09:55 +00:00
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: rigport=%d, bufcmd=%s, cmd_len=%d \n " , __func__ ,
2022-01-25 23:41:26 +00:00
rs - > rigport . fd , hasbinary ( bufcmd , cmd_len ) ? " BINARY " : bufcmd , cmd_len ) ;
2022-02-06 14:24:37 +00:00
// we dont' want the 'w' command to wait too long
int save_retry = rs - > rigport . retry ;
rs - > rigport . retry = 0 ;
2022-01-25 23:41:26 +00:00
retval = write_block ( & rs - > rigport , ( unsigned char * ) bufcmd , cmd_len ) ;
2022-02-06 14:24:37 +00:00
rs - > rigport . retry = save_retry ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( retval ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( retval ) ;
2017-08-09 18:09:55 +00:00
}
2019-12-06 13:58:19 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
2017-10-06 23:58:42 +00:00
{
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: debug Cmd \n " , __func__ ) ;
fwrite ( cmd - > arg2 , 1 , strlen ( cmd - > arg2 ) , fout ) ; /* i.e. "Frequency" */
2020-10-02 22:23:48 +00:00
fwrite ( " : " , 1 , 2 , fout ) ; /* i.e. "Frequency" */
2017-08-09 18:09:55 +00:00
}
2017-10-06 23:58:42 +00:00
do
{
2019-12-13 04:29:13 +00:00
if ( arg2 ) { sscanf ( arg2 , " %d " , & rxbytes ) ; }
if ( rxbytes > 0 )
{
+ + rxbytes ; // need length + 1 for end of string
eom_buf [ 0 ] = 0 ;
}
2017-08-09 18:09:55 +00:00
/* Assumes CR or LF is end of line char for all ASCII protocols. */
2022-01-25 23:41:26 +00:00
retval = read_string ( & rs - > rigport , buf , rxbytes , eom_buf ,
2021-11-24 19:02:39 +00:00
strlen ( eom_buf ) , 0 , 1 ) ;
2017-08-09 18:09:55 +00:00
2017-10-06 23:58:42 +00:00
if ( retval < 0 )
{
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: read_string error %s \n " , __func__ ,
rigerror ( retval ) ) ;
2017-08-09 18:09:55 +00:00
break ;
}
2017-10-06 23:58:42 +00:00
if ( retval < BUFSZ )
{
2017-08-09 18:09:55 +00:00
buf [ retval ] = ' \0 ' ;
2017-10-06 23:58:42 +00:00
}
else
{
2017-08-09 18:09:55 +00:00
buf [ BUFSZ - 1 ] = ' \0 ' ;
}
2020-10-02 22:23:48 +00:00
//if (rig->caps->rig_model != RIG_MODEL_NETRIGCTL)
2019-12-06 13:58:19 +00:00
{
// see if we have binary being returned
2020-10-02 22:23:48 +00:00
binary = hasbinary ( ( char * ) buf , retval ) ;
2019-12-06 13:58:19 +00:00
}
2017-08-09 18:09:55 +00:00
Fix spelling errors
Fixed using the following command:
codespell --write-changes --summary --skip=*.m4 --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
codespell --write-changes --summary --skip=aclocal.m4,lib --ignore-words-list="develope,get's,quitt,setts,som,ue,vektor"
Codespell home page: https://github.com/codespell-project/codespell
2020-07-24 07:02:12 +00:00
if ( binary ) // convert our buf to a hex representation
2019-12-06 13:58:19 +00:00
{
int i ;
2019-12-13 04:29:13 +00:00
char hex [ 8 ] ;
2019-12-17 14:08:39 +00:00
int hexbufbytes = retval * 6 ;
char * hexbuf = calloc ( hexbufbytes , 1 ) ;
rig_debug ( RIG_DEBUG_VERBOSE , " %s: sending binary, hexbuf size=%d \n " , __func__ ,
hexbufbytes ) ;
2019-12-13 04:29:13 +00:00
hexbuf [ 0 ] = 0 ;
2019-12-06 13:58:19 +00:00
for ( i = 0 ; i < retval ; + + i )
{
2022-01-11 06:00:44 +00:00
SNPRINTF ( hex , sizeof ( hex ) , " \\ 0x%02X " , ( unsigned char ) buf [ i ] ) ;
2019-12-17 14:08:39 +00:00
if ( ( strlen ( hexbuf ) + strlen ( hex ) + 1 ) > = hexbufbytes )
{
hexbufbytes * = 2 ;
rig_debug ( RIG_DEBUG_TRACE , " %s: doubling hexbuf size to %d \n " , __func__ ,
hexbufbytes ) ;
hexbuf = realloc ( hexbuf , hexbufbytes ) ;
}
2019-12-20 17:22:09 +00:00
strncat ( hexbuf , hex , hexbufbytes - 1 ) ;
2019-12-06 13:58:19 +00:00
}
2019-12-13 04:29:13 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: binary=%s, retval=%d \n " , __func__ , hexbuf ,
retval ) ;
fprintf ( fout , " %s %d \n " , hexbuf , retval ) ;
free ( hexbuf ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2019-12-06 13:58:19 +00:00
}
else
{
2019-12-06 14:34:31 +00:00
// we should be in printable ASCII here
fprintf ( fout , " %s \n " , buf ) ;
2019-12-06 13:58:19 +00:00
}
2017-10-06 23:58:42 +00:00
}
2019-12-13 04:29:13 +00:00
while ( retval > 0 & & rxbytes = = BUFSZ ) ;
2017-08-09 18:09:55 +00:00
2019-12-06 13:58:19 +00:00
// we use fwrite in case of any nulls in binary return
if ( binary ) { fwrite ( buf , 1 , retval , fout ) ; }
if ( binary )
{
fwrite ( " \n " , 1 , 1 , fout ) ;
}
2017-10-06 23:58:42 +00:00
if ( retval > 0 | | retval = = - RIG_ETIMEOUT )
{
2017-08-09 18:09:55 +00:00
retval = RIG_OK ;
}
2022-01-31 15:34:32 +00:00
RETURNFUNC ( retval ) ;
2007-11-11 23:03:38 +00:00
}
2017-08-09 18:09:55 +00:00
2011-06-14 21:09:33 +00:00
/* '0xf0'--test if rigctld called with -o|--vfo option */
2010-02-04 00:53:56 +00:00
declare_proto_rig ( chk_vfo )
{
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2019-08-24 03:53:25 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg1 ) ; /* i.e. "Frequency" */
}
2020-05-26 17:01:44 +00:00
fprintf ( fout , " %d \n " , rig - > state . vfo_opt ) ;
2010-02-04 00:53:56 +00:00
2020-06-23 16:12:15 +00:00
chk_vfo_executed = 1 ; // this allows us to control dump_state version
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2010-02-04 00:53:56 +00:00
}
2020-05-27 17:21:41 +00:00
/* '(' -- turn vfo option on */
declare_proto_rig ( set_vfo_opt )
{
int opt = 0 ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-05-27 17:21:41 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & opt ) ) ;
* vfo_opt = rig - > state . vfo_opt = opt ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_vfo_opt ( rig , opt ) ) ;
2020-05-27 17:21:41 +00:00
}
2017-08-09 18:09:55 +00:00
2011-06-14 21:09:33 +00:00
/* '0xf1'--halt rigctld daemon */
declare_proto_rig ( halt )
{
/* a bit rough, TODO: clean daemon shutdown */
exit ( 0 ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2011-06-14 21:09:33 +00:00
}
2014-05-02 17:41:50 +00:00
2017-08-09 18:09:55 +00:00
2014-05-02 17:41:50 +00:00
/* '0x8c'--pause processing */
declare_proto_rig ( pause )
{
2017-08-09 18:09:55 +00:00
unsigned seconds ;
2021-03-08 15:54:24 +00:00
2017-08-09 18:09:55 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %u " , & seconds ) ) ;
sleep ( seconds ) ;
2021-03-08 15:54:24 +00:00
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2014-05-02 17:41:50 +00:00
}
2020-02-24 15:34:02 +00:00
2022-04-15 18:21:35 +00:00
int rigctld_password_check ( RIG * rig , const char * md5 )
2022-02-24 23:13:18 +00:00
{
int retval = - RIG_EINVAL ;
//fprintf(fout, "password %s\n", password);
2022-04-15 18:21:35 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: %s == %s \n " , __func__ , md5 , rigctld_password ) ;
2022-02-24 23:13:18 +00:00
is_passwordOK = 0 ;
2022-03-01 17:40:14 +00:00
2022-04-16 03:44:53 +00:00
char * mymd5 = rig_make_md5 ( rigctld_password ) ;
2022-04-15 18:21:35 +00:00
if ( strcmp ( md5 , mymd5 ) = = 0 )
2022-03-01 17:40:14 +00:00
{
retval = RIG_OK ;
2022-02-24 23:13:18 +00:00
is_passwordOK = 1 ;
}
2022-03-01 17:40:14 +00:00
return ( retval ) ;
2022-02-24 23:13:18 +00:00
}
2021-10-16 14:20:24 +00:00
/* 0x98 */
declare_proto_rig ( password )
{
2022-02-24 23:50:57 +00:00
int retval = - RIG_EPROTO ;
2022-04-15 18:21:35 +00:00
const char * key = arg1 ;
2021-11-28 18:41:10 +00:00
2022-02-24 23:13:18 +00:00
ENTERFUNC ;
2022-03-01 17:40:14 +00:00
2022-02-24 23:13:18 +00:00
if ( is_rigctld )
{
2022-04-15 18:21:35 +00:00
retval = rigctld_password_check ( rig , key ) ;
2022-03-01 17:39:11 +00:00
}
else
{
2022-04-15 18:21:35 +00:00
retval = rig_password ( rig , key ) ;
2022-03-01 17:40:14 +00:00
//retval = RIG_OK;
2022-03-01 17:39:11 +00:00
}
2022-02-24 23:13:18 +00:00
if ( retval = = RIG_OK )
2021-11-28 18:41:10 +00:00
{
rig_debug ( RIG_DEBUG_ERR , " %s: #1 password OK \n " , __func__ ) ;
2022-04-15 18:21:35 +00:00
//fprintf(fout, "Logged in\n");
2022-02-24 23:13:18 +00:00
}
else
{
rig_debug ( RIG_DEBUG_ERR , " %s: password error, '%s'!='%s' \n " , __func__ ,
2022-04-15 18:21:35 +00:00
key , rigctld_password ) ;
2022-02-24 23:13:18 +00:00
}
2021-11-28 18:41:10 +00:00
2022-02-24 23:13:18 +00:00
RETURNFUNC ( retval ) ;
2021-10-16 14:20:24 +00:00
}
2022-04-15 18:21:35 +00:00
#if 0 // don't think we need this yet
2021-10-16 14:20:24 +00:00
/* 0x99 */
declare_proto_rig ( set_password )
{
const char * passwd = arg1 ;
2022-02-24 23:13:18 +00:00
strncpy ( rigctld_password , passwd , sizeof ( passwd ) - 1 ) ;
rig_debug ( RIG_DEBUG_ERR , " %s: set_password %s \n " , __func__ , rigctld_password ) ;
2022-02-05 21:27:43 +00:00
return ( RIG_OK ) ;
2021-10-16 14:20:24 +00:00
}
2022-04-15 18:21:35 +00:00
# endif
2021-10-16 14:20:24 +00:00
2020-02-24 15:34:02 +00:00
/* '0x8d' */
declare_proto_rig ( set_twiddle )
{
int seconds ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-02-24 15:34:02 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & seconds ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_twiddle ( rig , seconds ) ) ;
2020-02-24 15:34:02 +00:00
}
2020-10-23 16:34:42 +00:00
/* '0x97' */
declare_proto_rig ( set_uplink )
{
int val ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-10-23 16:34:42 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & val ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_uplink ( rig , val ) ) ;
2020-10-23 16:34:42 +00:00
}
2020-02-24 15:34:02 +00:00
/* '0x8e' */
declare_proto_rig ( get_twiddle )
{
int status ;
int seconds ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-02-24 15:34:02 +00:00
status = rig_get_twiddle ( rig , & seconds ) ;
if ( status ! = RIG_OK )
{
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2020-02-24 15:34:02 +00:00
}
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %d \n " , seconds ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( status ) ;
2020-02-24 15:34:02 +00:00
}
2020-04-30 21:52:11 +00:00
/* '0x95' */
declare_proto_rig ( set_cache )
{
int ms ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-04-30 21:52:11 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & ms ) ) ;
2021-03-08 15:54:24 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_cache_timeout_ms ( rig , HAMLIB_CACHE_ALL , ms ) ) ;
2020-04-30 21:52:11 +00:00
}
/* '0x96' */
declare_proto_rig ( get_cache )
{
int ms ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-03-08 15:54:24 +00:00
2020-07-02 15:23:41 +00:00
ms = rig_get_cache_timeout_ms ( rig , HAMLIB_CACHE_ALL ) ;
2020-04-30 21:52:11 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
}
fprintf ( fout , " %d \n " , ms ) ;
2022-01-31 15:34:32 +00:00
RETURNFUNC ( RIG_OK ) ;
2020-04-30 21:52:11 +00:00
}
2021-12-01 17:50:33 +00:00
/* '0xf8' */
declare_proto_rig ( set_clock )
{
int year , mon , day , hour = - 1 , min = - 1 , sec = - 1 ;
double msec ;
int utc_offset = 0 ;
int n ;
2021-12-06 16:23:18 +00:00
char timebuf [ 64 ] ;
2021-12-01 17:50:33 +00:00
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-12-01 17:50:33 +00:00
2021-12-06 16:23:18 +00:00
if ( arg1 & & strcasecmp ( arg1 , " local " ) = = 0 )
{
date_strget ( timebuf , sizeof ( timebuf ) , 1 ) ;
rig_debug ( RIG_DEBUG_VERBOSE , " %s: local time set = %s \n " , __func__ , timebuf ) ;
n = sscanf ( timebuf , " %04d-%02d-%02dT%02d:%02d:%02d%lf%d " , & year , & mon , & day ,
& hour ,
& min , & sec , & msec , & utc_offset ) ;
}
else if ( arg1 & & strcasecmp ( arg1 , " utc " ) = = 0 )
{
date_strget ( timebuf , sizeof ( timebuf ) , 0 ) ;
rig_debug ( RIG_DEBUG_VERBOSE , " %s: utc time set = %s \n " , __func__ , timebuf ) ;
n = sscanf ( timebuf , " %04d-%02d-%02dT%02d:%02d:%02d%lf%d " , & year , & mon , & day ,
& hour ,
& min , & sec , & msec , & utc_offset ) ;
}
else
{
n = sscanf ( arg1 , " %04d-%02d-%02dT%02d:%02d:%02d%lf%d " , & year , & mon , & day , & hour ,
& min , & sec , & msec , & utc_offset ) ;
}
2021-12-01 17:50:33 +00:00
rig_debug ( RIG_DEBUG_VERBOSE ,
" %s: n=%d, %04d-%02d-%02dT%02d:%02d:%02d.%0.3f%s%02d \n " ,
__func__ , n , year , mon , day , hour , min , sec , msec , utc_offset > = 0 ? " + " : " - " ,
( unsigned ) abs ( utc_offset ) ) ;
2021-12-02 04:52:55 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: utc_offset=%d \n " , __func__ , utc_offset ) ;
2021-12-05 15:46:00 +00:00
if ( utc_offset < 24 ) { utc_offset * = 100 ; } // allow for minutes offset too
2021-12-02 04:52:55 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: utc_offset=%d \n " , __func__ , utc_offset ) ;
2021-12-05 15:46:00 +00:00
2022-01-31 15:34:32 +00:00
RETURNFUNC ( rig_set_clock ( rig , year , mon , day , hour , min , sec , msec ,
2021-12-01 17:50:33 +00:00
utc_offset ) ) ;
}
/* '0xf9' */
declare_proto_rig ( get_clock )
{
2021-12-02 04:52:55 +00:00
//char option[64];
int year , month , day , hour , min , sec , utc_offset , aoffset ;
2021-12-01 17:50:33 +00:00
int retval ;
double msec ;
2022-01-31 15:34:32 +00:00
ENTERFUNC ;
2021-12-01 17:50:33 +00:00
2021-12-02 04:52:55 +00:00
//CHKSCN1ARG(sscanf(arg1, "%63s", option));
2021-12-01 17:50:33 +00:00
retval = rig_get_clock ( rig , & year , & month , & day , & hour , & min , & sec , & msec ,
& utc_offset ) ;
2021-12-02 04:52:55 +00:00
aoffset = abs ( utc_offset ) ;
fprintf ( fout , " %04d-%02d-%02dT%02d:%02d:%06.3f%s%02d:%02d \n " , year , month , day ,
hour , min , sec + msec / 1000 , utc_offset > = 0 ? " + " : " - " ,
2021-12-05 15:46:00 +00:00
aoffset / 100 , aoffset % 100 ) ;
2021-12-01 17:50:33 +00:00
return retval ;
}
2022-05-21 17:33:00 +00:00
char rig_resp_sep = ' \n ' ;
/* '0xa0' */
declare_proto_rig ( set_separator )
{
CHKSCN1ARG ( sscanf ( arg1 , " %c " , & rig_resp_sep ) ) ;
2022-05-21 18:23:51 +00:00
rig_debug ( RIG_DEBUG_ERR , " %s: arg1=%s, resp_sep=0x%x, %p \n " , __func__ , arg1 ,
( unsigned int ) rig_resp_sep , & rig_resp_sep ) ;
2022-05-21 17:33:00 +00:00
return RIG_OK ;
}
/* '0xa1' */
declare_proto_rig ( get_separator )
{
char buf [ 32 ] ;
2022-05-21 18:23:51 +00:00
2022-05-29 17:06:03 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
2022-05-21 18:23:51 +00:00
{
2022-05-29 17:06:44 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
2022-05-21 18:23:51 +00:00
}
2022-05-29 17:06:44 +00:00
2022-05-29 17:06:03 +00:00
sprintf ( buf , " 0x%x " , rig_resp_sep ) ;
2022-05-21 18:23:51 +00:00
fprintf ( fout , " %s \n " , buf ) ;
2022-05-21 17:33:00 +00:00
return RIG_OK ;
}
2022-05-29 17:00:03 +00:00
/* '0xa2' */
declare_proto_rig ( set_lock_mode )
{
int lock ;
2022-06-07 03:54:10 +00:00
int retval ;
rig_debug ( RIG_DEBUG_TRACE , " %s: \n " , __func__ ) ;
2022-05-29 17:00:03 +00:00
CHKSCN1ARG ( sscanf ( arg1 , " %d " , & lock ) ) ;
2022-06-07 03:54:10 +00:00
if ( is_rigctld )
{
rig_debug ( RIG_DEBUG_ERR , " %s: rigctld lock \n " , __func__ ) ;
lock_mode = lock ;
retval = RIG_OK ;
}
else
{
rig_debug ( RIG_DEBUG_ERR , " %s: rig lock \n " , __func__ ) ;
retval = rig_set_lock_mode ( rig , lock ) ;
}
return retval ;
2022-05-29 17:00:03 +00:00
}
2022-06-02 20:55:56 +00:00
2022-05-29 17:00:03 +00:00
/* '0xa3' */
declare_proto_rig ( get_lock_mode )
{
2022-06-02 20:55:56 +00:00
int retval ;
int lock ;
2022-06-07 03:54:10 +00:00
rig_debug ( RIG_DEBUG_TRACE , " %s: \n " , __func__ ) ;
2022-05-29 17:00:03 +00:00
if ( ( interactive & & prompt ) | | ( interactive & & ! prompt & & ext_resp ) )
{
2022-05-29 17:06:44 +00:00
fprintf ( fout , " %s: " , cmd - > arg1 ) ;
2022-05-29 17:00:03 +00:00
}
2022-06-07 03:54:10 +00:00
if ( is_rigctld )
{
rig_debug ( RIG_DEBUG_ERR , " %s: rigctld lock \n " , __func__ ) ;
lock = lock_mode ;
retval = RIG_OK ;
}
else
{
rig_debug ( RIG_DEBUG_ERR , " %s: rig lock \n " , __func__ ) ;
retval = rig_get_lock_mode ( rig , & lock ) ;
}
2022-06-02 20:55:56 +00:00
if ( retval ! = RIG_OK )
{
return retval ;
}
fprintf ( fout , " %d \n " , lock ) ;
2022-05-29 17:00:03 +00:00
return RIG_OK ;
}