2
* TenTec 599 (Eagle) driver
6
* Copyright 2011, Dave Freese, W1HKJ
12
//=============================================================================
15
const char RIG_TT599name_[] = "Eagle";
17
const char *RIG_TT599modes_[] = {
18
"USB", "LSB", "CWU", "CWL", "AM", "FM", NULL};
19
static const int RIG_TT599_def_bw[] = { 19, 19, 7, 7, 24, 19 };
20
static const char RIG_TT599_mode_type[] = {'U', 'L', 'U', 'L', 'U', 'U'};
22
const char *RIG_TT599widths[] = {
23
"100", "200", "300", "400", "500",
24
"600", "700", "800", "900", "1000",
25
"1200", "1400", "1600", "1800", "2000",
26
"2200", "2400", "2600", "2800", "3000",
27
"3200", "3400", "3600", "3800", "4000",
30
static GUI rig_widgets[]= {
31
{ (Fl_Widget *)sldrPOWER, 266, 105, 156 },
32
{ (Fl_Widget *)NULL, 0, 0, 0 }
35
RIG_TT599::RIG_TT599() {
36
name_ = RIG_TT599name_;
37
modes_ = RIG_TT599modes_;
38
bandwidths_ = RIG_TT599widths;
40
widgets = rig_widgets;
42
comm_baudrate = BR57600;
56
can_change_alt_vfo = true;
66
has_bandwidth_control =
70
has_attenuator_control =
71
has_power_control = true;
72
// has_agc_level = true;
79
void RIG_TT599::initialize()
81
rig_widgets[0].W = sldrPOWER;
87
showresp(WARN, ASC, "init", cmd, replystr);
94
showresp(WARN, ASC, "normal", cmd, replystr);
97
void RIG_TT599::shutdown()
102
showresp(WARN, ASC, "Enable BW control", cmd, replystr);
105
long RIG_TT599::get_vfoA ()
110
showresp(WARN, ASC, "get vfoA", cmd, replystr);
111
if ((p = replystr.rfind("@AF")) != string::npos) {
112
freqA = fm_decimal(&replystr[p+3], 8);
117
void RIG_TT599::set_vfoA (long freq)
121
cmd.append( to_decimal( freq, 8 ) );
124
showresp(WARN, ASC, "set vfoA", cmd, replystr);
127
long RIG_TT599::get_vfoB ()
132
showresp(WARN, ASC, "get vfoB", cmd, replystr);
133
if ((p = replystr.rfind("@BF")) != string::npos) {
134
freqB = fm_decimal(&replystr[p+3], 8);
139
void RIG_TT599::set_vfoB (long freq)
143
cmd.append( to_decimal( freq, 8 ) );
145
LOG_WARN("set B : %s", cmd.c_str());
147
showresp(WARN, ASC, "set vfoB", cmd, replystr);
150
void RIG_TT599::set_PTT_control(int val)
152
cmd = val ? "*TK\r" : "*TU\r";
154
showresp(WARN, ASC, "set PTT", cmd, replystr);
157
void RIG_TT599::set_modeA(int md)
164
showresp(WARN, ASC, "set modeA", cmd, replystr);
167
int RIG_TT599::get_modeA()
172
showresp(WARN, ASC, "get modeA", cmd, replystr);
173
if ((p = replystr.rfind("@RMM")) != string::npos) {
174
modeA = replystr[p+4] - '0';
179
void RIG_TT599::set_modeB(int md)
186
showresp(WARN, ASC, "set modeB", cmd, replystr);
189
int RIG_TT599::get_modeB()
194
showresp(WARN, ASC, "get modeB", cmd, replystr);
195
if ((p = replystr.rfind("@RMM")) != string::npos) {
196
modeB = replystr[p+4] - '0';
201
void RIG_TT599::set_bwA(int bw)
204
cmd.append(RIG_TT599widths[bw]);
207
showresp(WARN, ASC, "set bwA", cmd, replystr);
211
int RIG_TT599::get_bwA()
216
showresp(WARN, ASC, "get bwA", cmd, replystr);
218
if ((p = replystr.rfind("@RMF")) != string::npos) {
219
string bwstr = replystr.substr(p+4);
220
p = bwstr.find("\r");
221
if ( p != string::npos)
222
bwstr.erase(p, string::npos);
223
if (bwstr.empty()) return bwA;
225
while( RIG_TT599widths[i] != NULL) {
226
if (bwstr == RIG_TT599widths[i]) {
236
void RIG_TT599::set_bwB(int bw)
239
cmd.append(RIG_TT599widths[bw]);
242
showresp(WARN, ASC, "set bwB", cmd, replystr);
246
int RIG_TT599::get_bwB()
251
showresp(WARN, ASC, "get bwB", cmd, replystr);
253
if ((p = replystr.rfind("@RMF")) != string::npos) {
254
string bwstr = replystr.substr(p+4);
255
p = bwstr.find("\r");
256
if ( p != string::npos)
257
bwstr.erase(p, string::npos);
258
if (bwstr.empty()) return bwB;
260
while( RIG_TT599widths[i] != NULL) {
261
if (bwstr == RIG_TT599widths[i]) {
271
int RIG_TT599::adjust_bandwidth(int m)
273
return RIG_TT599_def_bw[m];
276
int RIG_TT599::def_bandwidth(int m)
278
return RIG_TT599_def_bw[m];
281
int RIG_TT599::get_modetype(int n)
283
return RIG_TT599_mode_type[n];
286
void RIG_TT599::set_preamp(int val)
288
cmd = val ? "*RME1\r" : "*RME0\r";
290
showresp(WARN, ASC, "set preamp", cmd, replystr);
293
int RIG_TT599::get_preamp()
298
showresp(WARN, ASC, "get preamp", cmd, replystr);
300
if ((p = replystr.rfind("@RME")) != string::npos)
301
return replystr[p+4] - '0';
305
//void RIG_TT599::set_agc_level()
307
// *RMAF - fast *RMAM - medium *RMAS - slow
310
int RIG_TT599::get_power_control(void)
315
showresp(WARN, ASC, "get pc", cmd, replystr);
317
if ((p = replystr.rfind("@TP")) != string::npos) {
319
sscanf(&replystr[p+3], "%d", &pwr);
322
return progStatus.power_level;//0;
325
void RIG_TT599::set_power_control(double val)
328
snprintf(szCmd, sizeof(szCmd), "*TP%d\r", (int)val);
330
showresp(WARN, ASC, "set pc", cmd, replystr);
333
void RIG_TT599::set_auto_notch(int v)
335
cmd = v ? "*RMNA1\r" : "*RMNA0\r";
337
showresp(WARN, ASC, "set AN", cmd, replystr);
340
int RIG_TT599::get_auto_notch()
344
showresp(WARN, ASC, "get AN", cmd, replystr);
346
if (replystr.rfind("@RMNA1") == string::npos)
351
void RIG_TT599::set_attenuator(int val)
353
cmd = val ? "*RMT1\r" : "*RMT0\r";
355
showresp(WARN, ASC, "set ATT", cmd, replystr);
358
int RIG_TT599::get_attenuator()
363
showresp(WARN, ASC, "get ATT", cmd, replystr);
365
if ((p = replystr.rfind("@RMT1")) != string::npos)
370
int smeter_count = 10;
371
int RIG_TT599::get_smeter()
377
showresp(WARN, ASC, "get Smeter", cmd, replystr);
379
if ((p = replystr.rfind("@SRM")) != string::npos)
380
sscanf(&replystr[p+4], "%d", &dbm);
384
int RIG_TT599::get_swr()
386
float swr = (sqrtf(fwdpwr) + sqrtf(refpwr))/(sqrt(fwdpwr) - sqrt(refpwr) + .0001);
389
if (swr < 0) swr = 0;
390
if (swr > 100) swr = 100;
395
int RIG_TT599::get_power_out()
398
fwdpwr = 0; refpwr = 0;
401
showresp(WARN, ASC, "get pout", cmd, replystr);
403
if ((p = replystr.rfind ("@STF")) != string::npos) {
404
sscanf(&replystr[p+4], "%d", &fwdpwr);
405
p = replystr.find("R", p+4);
406
if (p != string::npos) {
407
sscanf(&replystr[p+1], "%d", &refpwr);
414
void RIG_TT599:: set_split(bool val)
417
cmd = val ? "*KVAAB\r" : "*KVAAA\r";
419
showresp(WARN, ASC, "set split", cmd, replystr);
422
int RIG_TT599::get_split()
426
showresp(WARN, ASC, "get split", cmd, replystr);
427
size_t p = replystr.find("@KVAA");
428
if ((p != string::npos) && (replystr[p+5] == 'B')) split = 1;