1 // ----------------------------------------------------------------------------
2 // Copyright (C) 2014
3 //              David Freese, W1HKJ
4 //
5 // This file is part of flrig.
6 //
7 // flrig is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // flrig is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // aunsigned long int with this program.  If not, see <http://www.gnu.org/licenses/>.
19 // ----------------------------------------------------------------------------
20 
21 #ifndef _RIG_BASE_H
22 #define _RIG_BASE_H
23 
24 #include <string>
25 #include <cmath>
26 #include <cstdlib>
27 
28 #include <FL/Fl.H>
29 #include "util.h"
30 #include "debug.h"
31 #include "trace.h"
32 #include "rig_io.h"
33 
34 #include "rigpanel.h"
35 
36 using namespace std;
37 
38 enum {onA, onB};
39 enum {UI, XML, SRVR, RIG};
40 enum {BINARY, STRING};
41 
42 struct XCVR_STATE {
43 	unsigned long int freq;
44 	int  imode;
45 	int  iBW;
46 	int  filter;
47 	int  src;
48 
49 	int		split;
50 	int		power_control;
51 	int		volume_control;
52 	int		attenuator;
53 	int		preamp;
54 	int		if_shift;
55 	int		shift_val;
56 	int		auto_notch;
57 	int		notch;
58 	int		notch_val;
59 	int		noise;
60 	int		nb_level;
61 	int		nr;
62 	int		nr_val;
63 	int		mic_gain;
64 	int		rf_gain;
65 	int		agc_level;
66 	int		squelch;
67 	int		compression;
68 	int		compON;
69 
XCVR_STATEXCVR_STATE70 	XCVR_STATE() {
71 		freq = 0;
72 		imode = 0;
73 		iBW = 0;
74 		filter = 0;
75 		src = UI;
76 
77 		split = 0;
78 		power_control = 0;
79 		volume_control = 0;
80 		attenuator = 0;
81 		preamp = 0;
82 		if_shift = 0;
83 		shift_val = 0;
84 		auto_notch = 0;
85 		notch = 0;
86 		notch_val = 0;
87 		noise = 0;
88 		nb_level = 0;
89 		nr = 0;
90 		nr_val = 0;
91 		mic_gain = 0;
92 		rf_gain = 0;
93 		agc_level = 0;
94 		squelch = 0;
95 		compression = 0;
96 		compON = 0;
97 	}
XCVR_STATEXCVR_STATE98 	XCVR_STATE(int a, int b, int c, int d) {
99 		XCVR_STATE();
100 		freq = a;
101 		imode = b;
102 		iBW = c;
103 		src = d;
104 	}
105 //	bool equals(XCVR_STATE alt) {
106 //		if (freq != alt.freq) return false;
107 //		if (iBW != alt.iBW) return false;
108 //		if (imode != alt.imode) return false;
109 //		return true;
110 //	}
111 };
112 
113 enum {
114 	vA,   // apply to vfoA
115 	vB,   // apply to vfoB
116 	vX,   // apply to current vfo
117 	sA,  // select vfoA
118 	sB,  // select vfoB
119 	ON,  // ptt ON
120 	OFF, // ptt OFF
121 	sON, // split ON
122 	sOFF, // split OFF
123 	A2B,  // active to inactive vfo
124 	SWAP  // swap vfo's
125 };
126 
127 struct VFOQUEUE {
128 	int change; // A B AA BB ON OFF
129 	XCVR_STATE vfo;
VFOQUEUEVFOQUEUE130 	VFOQUEUE() {}
VFOQUEUEVFOQUEUE131 	VFOQUEUE(int c, XCVR_STATE v) { change = c; vfo = v; }
132 };
133 
134 struct GUI {
135 	Fl_Widget*	W;
136 	int			x;
137 	int			y;
138 	int			w;
139 };
140 
141 class rigbase {
142 #define WVALS_LIMIT -1
143 public:
144 	string name_;
145 	const char ** modes_;
146 	const char ** bandwidths_;
147 	const char ** dsp_SL;
148 	const char *  SL_tooltip;
149 	const char *  SL_label;
150 	const char ** dsp_SH;
151 	const char *  SH_tooltip;
152 	const char *  SH_label;
153 	const int  * bw_vals_;
154 
155 	GUI *widgets;
156 
157 	int  comm_baudrate;
158 	int  stopbits;
159 	int  comm_retries;
160 	int  comm_wait;
161 	int  comm_timeout;
162 	bool comm_echo;
163 	bool comm_rtscts;
164 	bool comm_rtsplus;
165 	bool comm_dtrplus;
166 	bool comm_catptt;
167 	bool comm_rtsptt;
168 	bool comm_dtrptt;
169 	int  serloop_timing;
170 	int  CIV;
171 	int  defaultCIV;
172 	bool USBaudio;
173 
174 	XCVR_STATE A;
175 	XCVR_STATE B;
176 	int  inuse;
177 
178 	int  modeA;
179 	int  bwA;
180 	unsigned long int freqA;
181 	int  modeB;
182 	int  bwB;
183 	unsigned long int freqB;
184 	int  precision;
185 	int  ndigits;
186 	bool can_change_alt_vfo;
187 	int  active_mode;		// wbx
188 
189 	int  def_mode;
190 	int  def_bw;
191 	unsigned long int def_freq;
192 	int  max_power;
193 	int  last_bw;
194 	int  bpf_center;
195 	int  pbt;
196 
197 	bool PbtActive;
198 	int  RitFreq;
199 	bool RitActive;
200 	int  XitFreq;
201 	bool XitActive;
202 	int  split;
203 
204 	int  if_shift_min;
205 	int  if_shift_max;
206 	int  if_shift_step;
207 	int  if_shift_mid;
208 
209 	int  atten_level;
210 	int  preamp_level;
211 
212 	int  rTONE;  // index into szTONES, PL_tones arrar of receive PL tones
213 	int  tTONE;
214 
215 	bool has_xcvr_auto_on_off;
216 	bool has_a2b;
217 	bool has_b2a;
218 	bool has_vfo_adj;
219 	bool has_rit;
220 	bool has_xit;
221 	bool has_bfo;
222 	bool has_power_control;
223 	bool has_volume_control;
224 	bool has_mode_control;
225 	bool has_bandwidth_control;
226 	bool has_dsp_controls;
227 	bool has_FILTER;
228 	bool has_micgain_control;
229 	bool has_mic_line_control;
230 	bool has_notch_control;
231 	bool has_auto_notch;
232 	bool has_noise_control;
233 	bool has_noise_reduction_control;
234 	bool has_noise_reduction;
235 	bool has_attenuator_control;
236 	bool has_preamp_control;
237 	bool has_ifshift_control;
238 	bool has_pbt_controls;
239 	bool has_ptt_control;
240 	bool has_tune_control;
241 	bool has_swr_control;
242 	bool has_alc_control;
243 	bool has_agc_control;
244 	bool has_rf_control;
245 	bool has_sql_control;
246 	bool has_smeter;
247 	bool has_power_out;
248 	bool has_line_out;
249 	bool has_split;
250 	bool has_split_AB;
251 	bool has_data_port;
252 	bool has_getvfoAorB;
253 
254 	bool has_extras;
255 	bool has_nb_level;
256 	bool has_agc_level;
257 	bool has_cw_wpm;
258 	bool has_cw_vol;
259 	bool has_cw_spot;
260 	bool has_cw_spot_tone;
261 	bool has_cw_qsk;
262 	bool has_cw_break_in;
263 	bool has_cw_delay;
264 	bool has_cw_weight;
265 	bool has_cw_keyer;
266 	bool has_vox_onoff;
267 	bool has_vox_gain;
268 	bool has_vox_anti;
269 	bool has_vox_hang;
270 	bool has_vox_on_dataport;
271 	bool has_compression;
272 	bool has_compON;
273 	bool use_line_in;
274 	bool has_bpf_center;
275 	bool has_special;
276 	bool has_ext_tuner;
277 	bool has_band_selection;
278 
279 	bool has_vfoAB;
280 
281 	bool restore_mbw;
282 
283 	bool has_get_info;
284 
285 // Icom Xcvr
286 	bool ICOMrig;
287 	bool ICOMmainsub;
288 	string pre_to;
289 	string pre_fm;
290 	string post;
291 	string ok;
292 	string bad;
293 
294 	int filA;
295 	int filB;
296 
297 	int  data_type;
298 
299 // for pia TS2000 without a front panel
300 	int  _noise_reduction_level;
301 	int  _nrval1;
302 	int  _nrval2;
303 	int  _currmode;
304 
305 	std::string replystr;
306 
307 protected:
308 	string cmd; // command string
309 	string rsp; // expected response string (header etc)
310 
311 	string to_bcd_be(unsigned long int freq, int len);
312 	string to_bcd(unsigned long int freq, int len);
313 	unsigned long int fm_bcd (string bcd, int len);
314 	unsigned long int fm_bcd_be(string bcd, int len);
315 	string to_binary_be(unsigned long int freq, int len);
316 	string to_binary(unsigned long int freq, int len);
317 	unsigned long int fm_binary(string binary, int len);
318 	unsigned long int fm_binary_be(string binary_be, int len);
319 	string to_decimal_be(unsigned long int d, int len);
320 	string to_decimal(unsigned long int d, int len);
321 	unsigned long int fm_decimal(string decimal, int len);
322 	unsigned long int fm_decimal_be(string decimal_be, int len);
323 
324 public:
325 	rigbase();
~rigbase()326 	virtual ~rigbase(){}
327 
initialize()328 	virtual void initialize() {}
post_initialize()329 	virtual void post_initialize() {}
shutdown()330 	virtual void shutdown() {}
331 
check()332 	virtual bool check() { return false; }
333 
set_data_port()334 	virtual void set_data_port() {}
335 
get_info(void)336 	virtual bool get_info(void) {return false;}
get_vfoA(void)337 	virtual unsigned long int get_vfoA(void) {return A.freq;}
set_vfoA(unsigned long int f)338 	virtual void set_vfoA(unsigned long int f) {A.freq = f;}
get_vfoB(void)339 	virtual unsigned long int get_vfoB(void) {return B.freq;}
set_vfoB(unsigned long int f)340 	virtual void set_vfoB(unsigned long int f) {B.freq = f; set_vfoA(f);}
341 
set_modeA(int val)342 	virtual void set_modeA(int val) {A.imode = val;}
get_modeA()343 	virtual int  get_modeA() {return A.imode;}
get_modetype(int n)344 	virtual int  get_modetype(int n) {return 'U';}
set_modeB(int val)345 	virtual void set_modeB(int val) {B.imode = val; set_modeA(val);}
get_modeB()346 	virtual int  get_modeB() {return B.imode;}
selectA()347 	virtual void selectA(){ inuse = onA;}
selectB()348 	virtual void selectB(){ inuse = onB;}
A2B()349 	virtual void A2B(){}
B2A()350 	virtual void B2A(){}
get_vfoAorB()351 	virtual int  get_vfoAorB(){return inuse;}
isOnA()352 	virtual bool isOnA(){return inuse == onA;}
isOnB()353 	virtual bool isOnB(){return inuse == onB;}
354 
swapAB()355 	virtual void swapAB(){inuse = isOnA() ? onB : onA;}
356 
set_bwA(int val)357 	virtual void set_bwA(int val) {A.iBW = val;}
get_bwA()358 	virtual int  get_bwA() {return A.iBW;}
set_bwB(int val)359 	virtual void set_bwB(int val) {B.iBW = val; set_bwA(val);}
get_bwB()360 	virtual int  get_bwB() {return B.iBW;}
adjust_bandwidth(int m)361 	virtual int  adjust_bandwidth(int m) {return 0;}
def_bandwidth(int m)362 	virtual int  def_bandwidth(int m) {return 0;}
bwtable(int m)363 	virtual const char **bwtable(int m) {return bandwidths_;}
lotable(int m)364 	virtual const char **lotable(int m) {return NULL;}
hitable(int m)365 	virtual const char **hitable(int m) {return NULL;}
366 
FILT(int val)367 	virtual const char *FILT(int val) { return "1"; }
nextFILT()368 	virtual const char *nextFILT() { return "1";}
369 
get_FILT(int mode)370 	virtual int  get_FILT(int mode) { return 1; }
set_FILT(int filter)371 	virtual void set_FILT(int filter) {}
372 
set_BANDWIDTHS(std::string s)373 	virtual void set_BANDWIDTHS(std::string s) {}
get_BANDWIDTHS()374 	virtual std::string get_BANDWIDTHS() { return ""; }
375 
set_FILTERS(std::string s)376 	virtual void set_FILTERS(std::string s) {}
get_FILTERS()377 	virtual std::string get_FILTERS() { return ""; }
378 
can_split()379 	virtual bool can_split() { return false;}
380 	virtual void set_split(bool val);
381 	virtual int  get_split();
382 
twovfos()383 	virtual bool twovfos() {return false;}
384 
canswap()385 	virtual bool canswap() { return false; }
386 
get_agc()387 	virtual int  get_agc() { return 0; }
incr_agc()388 	virtual int  incr_agc() { return 0;}
agc_label()389 	virtual const char *agc_label() { return "";}
agc_val()390 	virtual int  agc_val() { return 0; }
391 
get_smeter(void)392 	virtual int  get_smeter(void) {return -1;}
get_swr(void)393 	virtual int  get_swr(void) {return -1;}
get_alc(void)394 	virtual int  get_alc(void) {return -1;}
select_swr()395 	virtual void select_swr() {}
select_alc()396 	virtual void select_alc() {}
get_power_out(void)397 	virtual int  get_power_out(void) {return -1;}
398 
399 int po_, po_val;
400 int pmax;
get_power_control(void)401 	virtual int  get_power_control(void) {return po_;}
set_power_control(double val)402 	virtual void set_power_control(double val) {po_ = val;}
get_pc_min_max_step(double & min,double & max,double & step)403 	virtual void get_pc_min_max_step(double &min, double &max, double &step) {
404 		min = 0; pmax = max = 100; step = 1; }
405 
406 int vl_;
set_volume_control(int val)407 	virtual void set_volume_control(int val) {vl_ = val;}
get_volume_control()408 	virtual int  get_volume_control() {return vl_;}
get_vol_min_max_step(int & min,int & max,int & step)409 	virtual void get_vol_min_max_step(int &min, int &max, int &step) {
410 		min = 0; max = 100; step = 1; }
411 
412 int ptt_;
413 int tune_;
set_PTT_control(int val)414 	virtual void set_PTT_control(int val) {ptt_ = val;}
get_PTT()415 	virtual int  get_PTT() {return ptt_;}
tune_rig(int how)416 	virtual void tune_rig(int how) {}
get_tune()417 	virtual int  get_tune() { return tune_; }
418 
set_attenuator(int val)419 	virtual void set_attenuator(int val) {atten_level = val;}
next_attenuator()420 	virtual int  next_attenuator() { atten_level = !atten_level; return atten_level; }
get_attenuator()421 	virtual int  get_attenuator() {return atten_level;}
422 
set_preamp(int val)423 	virtual void set_preamp(int val) {preamp_level = val;}
next_preamp()424 	virtual int  next_preamp() { preamp_level = !preamp_level; return preamp_level; }
get_preamp()425 	virtual int  get_preamp() {return preamp_level;}
426 
427 // CTCSS tones / offset
set_tones(int tx_tone,int rx_tone)428 	virtual void set_tones(int tx_tone, int rx_tone) { return; }
set_offset(int indx,int offset)429 	virtual void set_offset(int indx, int offset) { return; }
430 
431 int sh_;
432 bool sh_on_;
set_if_shift(int val)433 	virtual void set_if_shift(int val) {sh_ = val;}
set_if_shift_on(int on)434 	virtual void set_if_shift_on(int on) { sh_on_ = on; }
get_if_shift(int & val)435 	virtual bool get_if_shift(int &val) {val = sh_; return sh_on_;}
get_if_min_max_step(int & min,int & max,int & step)436 	virtual void get_if_min_max_step(int &min, int &max, int &step) {
437 		min = 0; max = 100; step = 1; }
get_if_mid()438 	virtual void get_if_mid() {};
439 
440 int no_, noval_;
set_notch(bool on,int val)441 	virtual void set_notch(bool on, int val) { no_ = on; noval_ = val;}
get_notch(int & val)442 	virtual bool get_notch(int &val) {val = noval_; return no_;}
get_notch_min_max_step(int & min,int & max,int & step)443 	virtual void get_notch_min_max_step(int &min, int &max, int &step) {
444 		min = 0; max = 100; step = 1; }
445 
446 int nb_, nbval_;
set_noise(bool on)447 	virtual void set_noise(bool on) {nb_ = on;}
get_noise()448 	virtual int  get_noise(){return nb_;}
set_nb_level(int val)449 	virtual void set_nb_level(int val) {nbval_ = val;}
get_nb_level()450 	virtual int  get_nb_level() { return nbval_; }
get_nb_min_max_step(int & min,int & max,int & step)451 	virtual void get_nb_min_max_step(int &min, int &max, int &step) {
452 		min = 0; max = 100; step = 1; }
453 
454 int nr_, nrval_;
set_noise_reduction(int val)455 	virtual void set_noise_reduction(int val) {nr_ = val;}
get_noise_reduction()456 	virtual int  get_noise_reduction() {return nr_;}
set_noise_reduction_val(int val)457 	virtual void set_noise_reduction_val(int val) {nrval_ = val;}
get_noise_reduction_val()458 	virtual int  get_noise_reduction_val() {return nrval_;}
get_nr_min_max_step(int & min,int & max,int & step)459 	virtual void get_nr_min_max_step(int &min, int &max, int &step) {
460 		min = 0; max = 100; step = 1; }
461 
set_pbt_inner(int val)462 	virtual void set_pbt_inner(int val) {}
set_pbt_outer(int val)463 	virtual void set_pbt_outer(int val) {}
get_pbt_inner()464 	virtual int  get_pbt_inner() {return 0;}
get_pbt_outer()465 	virtual int  get_pbt_outer() {return 0;}
466 
467 int mcval_;
set_mic_gain(int val)468 	virtual void set_mic_gain(int val) {mcval_ = val;}
get_mic_gain()469 	virtual int  get_mic_gain() {return mcval_;}
get_mic_min_max_step(int & min,int & max,int & step)470 	virtual void get_mic_min_max_step(int &min, int &max, int &step) {
471 		min = 0; max = 100; step = 1; }
set_mic_line(int val)472 	virtual void set_mic_line(int val) {}
473 
474 int sqval_;
set_squelch(int val)475 	virtual void set_squelch(int val) {sqval_ = val;}
get_squelch()476 	virtual int  get_squelch() {return sqval_;}
get_squelch_min_max_step(int & min,int & max,int & step)477 	virtual void get_squelch_min_max_step(int &min, int &max, int &step) {
478 		min = 0; max = 100; step = 1; }
479 
480 int rfg_;
set_rf_gain(int val)481 	virtual void set_rf_gain(int val) {rfg_ = val;}
get_rf_gain()482 	virtual int  get_rf_gain() {return rfg_;}
get_rf_min_max_step(int & min,int & max,int & step)483 	virtual void get_rf_min_max_step(int &min, int &max, int &step) {
484 		min = 0; max = 100; step = 1; }
485 
get_modename_(int n)486 	virtual const char * get_modename_(int n){
487 		if (modes_ == NULL) return "";
488 		int nmodes = 0;
489 		while (modes_[nmodes] != NULL) nmodes++;
490 		if (n < nmodes && n > -1)
491 			return modes_[n];
492 		else
493 			return modes_[0];
494 	}
495 
get_bwname_(int bw,int md)496 	virtual const char * get_bwname_(int bw, int md) {
497 // read bw based on mode
498 		const char ** pbwt;
499 		pbwt = bwtable(md);
500 		if (pbwt == NULL) return "";
501 		int nbw = 0;
502 		while (pbwt[nbw] != NULL) nbw++;
503 		if (bw < nbw && bw > -1)
504 			return pbwt[bw];
505 		else
506 			return pbwt[0];
507 	}
508 
509 int ritval_;
setRit(int v)510 	virtual void setRit(int v) {ritval_ = v;}
getRit()511 	virtual int  getRit() {return ritval_;}
get_RIT_min_max_step(int & min,int & max,int & step)512 	virtual void get_RIT_min_max_step(int &min, int &max, int &step) {
513 		min = -100; max = 100; step = 1; }
514 
setXit(int v)515 	virtual void setXit(int v) { XitFreq = v;}
getXit()516 	virtual int  getXit() {return XitFreq;}
get_XIT_min_max_step(int & min,int & max,int & step)517 	virtual void get_XIT_min_max_step(int &min, int &max, int &step) {
518 		min = -100; max = 100; step = 1; }
519 
520 int bfo_;
setBfo(int v)521 	virtual void setBfo(int v) {bfo_ = v;}
getBfo()522 	virtual int  getBfo() {return bfo_;}
get_BFO_min_max_step(int & min,int & max,int & step)523 	virtual void get_BFO_min_max_step(int &min, int &max, int &step) {
524 		min = -100; max = 100; step = 1; }
525 
526 int vfo_;
setVfoAdj(double v)527 	virtual void setVfoAdj(double v) {vfo_ = v;}
getVfoAdj()528 	virtual double getVfoAdj() {return vfo_;}
get_vfoadj_min_max_step(int & min,int & max,int & step)529 	virtual void get_vfoadj_min_max_step(int &min, int &max, int &step) {
530 		min = -100; max = 100; step = 1; }
531 
set_line_out()532 	virtual void set_line_out() {}
get_line_out()533 	virtual int  get_line_out() { return 100; }
set_agc_level()534 	virtual void set_agc_level() {}
535 
set_cw_weight()536 	virtual void set_cw_weight() {}
get_cw_weight_min_max_step(double & min,double & max,double & step)537 	virtual void get_cw_weight_min_max_step(double &min, double &max, double &step) {
538 		min = 2.5; max = 4.5; step = 0.1; } // default for FT950/FT450D
set_cw_wpm()539 	virtual void set_cw_wpm() {}
get_cw_wpm_min_max(int & min,int & max)540 	virtual void get_cw_wpm_min_max(int &min, int &max) {
541 		min = 5; max = 50; } // default for FT950/FT450D
enable_keyer()542 	virtual void enable_keyer() {}
set_break_in()543 	virtual void set_break_in() {}
get_break_in()544 	virtual int  get_break_in() {return 0;}
545 
set_cw_qsk()546 	virtual void set_cw_qsk() {}
get_cw_qsk_min_max_step(double & min,double & max,double & step)547 	virtual void get_cw_qsk_min_max_step(double &min, double &max, double &step) {
548 		min = 15; max = 30; step = 5; } // default for FT950/FT450D
549 
set_cw_delay()550 	virtual void set_cw_delay() {}
get_cw_delay_min_max_step(double & min,double & max,double & step)551 	virtual void get_cw_delay_min_max_step(double &min, double &max, double &step) {
552 		min = 30; max = 3000; step = 10; } // default for FT950/FT450D
553 
set_cw_vol()554 	virtual void set_cw_vol() {}
set_cw_spot()555 	virtual bool set_cw_spot() {return false;}
set_cw_spot_tone()556 	virtual void set_cw_spot_tone() {}
get_cw_spot_tone_min_max_step(int & min,int & max,int & step)557 	virtual void get_cw_spot_tone_min_max_step(int &min, int &max, int &step) {
558 		min = 300; max = 1050; step = 50; } // default for FT950/FT450D
set_spot_onoff()559 	virtual void set_spot_onoff() {}
set_vox_onoff()560 	virtual void set_vox_onoff() {}
set_vox_gain()561 	virtual void set_vox_gain() {}
get_vox_gain_min_max_step(int & min,int & max,int & step)562 	virtual void get_vox_gain_min_max_step(int &min, int &max, int &step) {
563 		min = 0; max = 100; step = 1; } // default for FT950/FT450D
set_vox_anti()564 	virtual void set_vox_anti() {}
get_vox_anti_min_max_step(int & min,int & max,int & step)565 	virtual void get_vox_anti_min_max_step(int &min, int &max, int &step) {
566 		min = 0; max = 100; step = 1; } // default for FT950/FT450D
set_vox_hang()567 	virtual void set_vox_hang() {}
get_vox_hang_min_max_step(int & min,int & max,int & step)568 	virtual void get_vox_hang_min_max_step(int &min, int &max, int &step) {
569 		min = 30; max = 3000; step = 10; } // default for FT950/FT450D
set_vox_on_dataport()570 	virtual void set_vox_on_dataport() {}
set_mon_vol()571 	virtual void set_mon_vol() {}
set_squelch_level()572 	virtual void set_squelch_level() {}
set_compression(int,int)573 	virtual void set_compression(int, int) {}
get_compression(int & on,int & val)574 	virtual void get_compression(int &on, int &val) { on = 0; val = 0; }
get_comp_min_max_step(int & min,int & max,int & step)575 	virtual void get_comp_min_max_step(int &min, int &max, int &step) {
576 		min = 0; max = 100; step = 1; }
set_auto_notch(int v)577 	virtual void set_auto_notch(int v) {}
get_auto_notch()578 	virtual int  get_auto_notch() {return 0;}
tuner_bypass()579 	virtual void tuner_bypass() {}
enable_xmtr()580 	virtual void enable_xmtr() {}
enable_tloop()581 	virtual void enable_tloop() {}
set_nb_level()582 	virtual void set_nb_level() {}
set_special(int v)583 	virtual void set_special(int v) {}
set_band_selection(int v)584 	virtual void set_band_selection(int v) {}
get_band_selection(int v)585 	virtual void get_band_selection(int v) {}
set_xcvr_auto_on()586 	virtual void set_xcvr_auto_on() {}
set_xcvr_auto_off()587 	virtual void set_xcvr_auto_off() {}
588 
adjustCIV(uchar adr)589 	virtual void adjustCIV(uchar adr) {}
590 
read_stream()591 	virtual void read_stream() {}
592 
parse_vfoA(string)593 	virtual int  parse_vfoA(string){return 0;}
parse_vfoB(string)594 	virtual int  parse_vfoB(string){return 0;}
parse_modeA(string)595 	virtual int  parse_modeA(string){return 0;}
parse_modeB(string)596 	virtual int  parse_modeB(string){return 0;}
parse_bwA(string)597 	virtual int  parse_bwA(string){return 0;}
parse_bwB(string)598 	virtual int  parse_bwB(string){return 0;}
parse_volume_control(string)599 	virtual int  parse_volume_control(string){return 0;}
parse_power_control(string)600 	virtual int  parse_power_control(string){return 0;}
parse_rf_gain(string)601 	virtual int  parse_rf_gain(string){return 0;}
parse_mic_gain(string)602 	virtual int  parse_mic_gain(string){return 0;}
parse_attenuator(string)603 	virtual int  parse_attenuator(string){return 0;}
parse_preamp(string)604 	virtual int  parse_preamp(string){return 0;}
parse_smeter(string)605 	virtual int  parse_smeter(string){return 0;}
parse_(string)606 	virtual int  parse_(string){return 0;}
parse_noise(string)607 	virtual int  parse_noise(string){return 0;}
parse_power_out(string)608 	virtual int  parse_power_out(string){return 0;}
parse_swr(string)609 	virtual int  parse_swr(string){return 0;}
parse_alc(string)610 	virtual int  parse_alc(string){return 0;}
parse_split(string)611 	virtual int  parse_split(string){return 0;}
612 
613 	int waitN(size_t n, int timeout, const char *, int pr = HEX);
614 	int wait_char(int ch, size_t n, int timeout, const char *, int pr = HEX);
615 
616 // IC-7610
set_digi_sel(bool)617 	virtual void set_digi_sel(bool) {}
set_digi_val(int)618 	virtual void set_digi_val(int) {}
get_digi_sel()619 	virtual int  get_digi_sel() {return 0;}
get_digi_val()620 	virtual int  get_digi_val() {return 0;}
set_dual_watch(bool)621 	virtual void set_dual_watch(bool) {}
get_dual_watch()622 	virtual int  get_dual_watch() {return 0;}
set_index_att(int)623 	virtual void set_index_att(int) {}
624 
625 // more pia TS2000 without front panel!
currmode()626 	int currmode() { return _currmode; }
nrval1()627 	int nrval1() { return _nrval1; }
nrval2()628 	int nrval2() { return _nrval2; }
noise_reduction_level()629 	int noise_reduction_level() { return _noise_reduction_level; }
630 
631 // TS990 monitor usurp'd use of IF shift control
set_monitor(bool)632 	virtual void set_monitor(bool) {}
633 
634 // TT-550 / at-11 internal tuner i/o commands
at11_bypass()635 	virtual void at11_bypass() {}
at11_autotune()636 	virtual void at11_autotune() {}
at11_cap_up()637 	virtual void at11_cap_up() {}
at11_cap_dn()638 	virtual void at11_cap_dn() {}
at11_ind_up()639 	virtual void at11_ind_up() {}
at11_ind_dn()640 	virtual void at11_ind_dn() {}
at11_loZ()641 	virtual void at11_loZ() {}
at11_hiZ()642 	virtual void at11_hiZ() {}
643 
644 	string bcd255(int val);
645 	int    num100(string bcd);
646 	int    hexval(int hex);
647 	int    hex2val(string hexval);
648 
649 // Yaesu force ID response before sending command
650 	std::string IDstr;
651 	bool id_OK(std::string ID, int wait);
652 	void sendOK(std::string cmd);
653 
654 // KX3 power scale
655 	int powerScale;
power_scale()656 	virtual int power_scale() {
657 		return 1;
658 	}
power_max()659 	virtual int power_max() {
660 		return pmax;
661 	}
662 };
663 
664 extern rigbase *rigs[];
665 
666 extern const char *szNORIG;
667 extern const char *szNOMODES[];
668 extern const char *szNOBWS[];
669 
670 extern char bcdval[];
671 
672 #endif
673