kopia lustrzana https://github.com/Hamlib/Hamlib
Fix 0x26 command in simic705.c - off by 1 byte
Reduce usage of rig.h idioms - use Icom values. Reduce/cleanup some debug output. Add width set (1A 03)pull/1762/head
rodzic
93434b6523
commit
df2bf0c634
|
@ -22,31 +22,42 @@ struct ip_mreq
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/* Simulators really shouldn't be using ANY of the definitions
|
||||||
|
* from the Hamlib rig.h parameters, but only those of the
|
||||||
|
* rig itself. This still won't be a clean room implementation,
|
||||||
|
* but lets try to use as many as possible of Icom's definitions
|
||||||
|
* for the rig parameters.
|
||||||
|
*/
|
||||||
|
#include "../rigs/icom/icom_defs.h"
|
||||||
|
|
||||||
#define BUFSIZE 256
|
#define BUFSIZE 256
|
||||||
#define X25
|
#define X25
|
||||||
|
#undef SATMODE
|
||||||
|
|
||||||
|
unsigned char civaddr = 0xA4;
|
||||||
int civ_731_mode = 0;
|
int civ_731_mode = 0;
|
||||||
vfo_t current_vfo = RIG_VFO_A;
|
int current_vfo = S_VFOA;
|
||||||
int split = 0;
|
int split = 0;
|
||||||
int keyspd = 85; // 85=20WPM
|
int keyspd = 85; // 85=20WPM
|
||||||
|
|
||||||
// we make B different from A to ensure we see a difference at startup
|
// we make B different from A to ensure we see a difference at startup
|
||||||
float freqA = 14074000;
|
float freqA = 14074000;
|
||||||
float freqB = 14074500;
|
float freqB = 14074500;
|
||||||
mode_t modeA = RIG_MODE_FM;
|
unsigned char modeA = S_FM;
|
||||||
mode_t modeB = RIG_MODE_FM;
|
unsigned char modeB = S_FM;
|
||||||
int datamodeA = 0;
|
int datamodeA = 0;
|
||||||
int datamodeB = 0;
|
int datamodeB = 0;
|
||||||
pbwidth_t widthA = 0;
|
int widthA = 0;
|
||||||
pbwidth_t widthB = 1;
|
int widthB = 1;
|
||||||
ant_t ant_curr = 0;
|
unsigned char filterA = 1, filterB = 1;
|
||||||
int ant_option = 0;
|
//ant_t ant_curr = 0;
|
||||||
|
//int ant_option = 0;
|
||||||
int ptt = 0;
|
int ptt = 0;
|
||||||
int satmode = 0;
|
int satmode = 0;
|
||||||
int agc_time = 1;
|
int agc_time = 1;
|
||||||
int ovf_status = 0;
|
int ovf_status = 0;
|
||||||
int powerstat = 1;
|
int powerstat = 1;
|
||||||
|
const char *vfonames[2] = {"VFOA", "VFOB"};
|
||||||
|
|
||||||
void dumphex(const unsigned char *buf, int n)
|
void dumphex(const unsigned char *buf, int n)
|
||||||
{
|
{
|
||||||
|
@ -69,7 +80,7 @@ again:
|
||||||
buf[i++] = c;
|
buf[i++] = c;
|
||||||
//printf("i=%d, c=0x%02x\n",i,c);
|
//printf("i=%d, c=0x%02x\n",i,c);
|
||||||
|
|
||||||
if (c == 0xfd)
|
if (c == FI) // End of message (EOM)
|
||||||
{
|
{
|
||||||
dumphex(buf, i);
|
dumphex(buf, i);
|
||||||
return i;
|
return i;
|
||||||
|
@ -100,6 +111,7 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
{
|
{
|
||||||
double freq;
|
double freq;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
unsigned char acknak = ACK; // Hope for the best
|
||||||
|
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
{
|
{
|
||||||
|
@ -110,7 +122,7 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
printf("Here#1\n");
|
printf("Here#1\n");
|
||||||
dumphex(frame, len);
|
dumphex(frame, len);
|
||||||
|
|
||||||
if (frame[0] != 0xfe && frame[1] != 0xfe)
|
if (frame[0] != 0xfe || frame[1] != 0xfe)
|
||||||
{
|
{
|
||||||
printf("expected fe fe, got ");
|
printf("expected fe fe, got ");
|
||||||
dumphex(frame, len);
|
dumphex(frame, len);
|
||||||
|
@ -119,10 +131,10 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
switch (frame[4])
|
switch (frame[4])
|
||||||
{
|
{
|
||||||
case 0x03:
|
case C_RD_FREQ: // 0x03
|
||||||
|
|
||||||
//from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
|
//from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2);
|
||||||
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
|
if (current_vfo == S_VFOA || current_vfo == S_MAIN)
|
||||||
{
|
{
|
||||||
printf("get_freqA\n");
|
printf("get_freqA\n");
|
||||||
to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
|
to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2);
|
||||||
|
@ -133,7 +145,7 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
|
to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame[10] = 0xfd;
|
frame[10] = FI;
|
||||||
|
|
||||||
if (powerstat)
|
if (powerstat)
|
||||||
{
|
{
|
||||||
|
@ -142,8 +154,8 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x04:
|
case C_RD_MODE: // 0x04
|
||||||
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN)
|
if (current_vfo == S_VFOA || current_vfo == S_MAIN)
|
||||||
{
|
{
|
||||||
printf("get_modeA\n");
|
printf("get_modeA\n");
|
||||||
frame[5] = modeA;
|
frame[5] = modeA;
|
||||||
|
@ -160,70 +172,75 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x05:
|
case C_SET_FREQ: // 0x05
|
||||||
freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
|
freq = from_bcd(&frame[5], (civ_731_mode ? 4 : 5) * 2);
|
||||||
printf("set_freq to %.0f\n", freq);
|
printf("set_freq to %.0f\n", freq);
|
||||||
|
|
||||||
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { freqA = freq; }
|
if (current_vfo == S_VFOA || current_vfo == S_MAIN) { freqA = freq; }
|
||||||
else { freqB = freq; }
|
else { freqB = freq; }
|
||||||
|
|
||||||
frame[4] = 0xfb;
|
frame[4] = ACK;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x06:
|
case C_SET_MODE: // 0x06
|
||||||
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { modeA = frame[6]; }
|
if (current_vfo == S_VFOA || current_vfo == S_MAIN) { modeA = frame[6]; }
|
||||||
else { modeB = frame[6]; }
|
else { modeB = frame[6]; }
|
||||||
|
|
||||||
frame[4] = 0xfb;
|
frame[4] = ACK;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x07:
|
case C_SET_VFO: // 0x07
|
||||||
|
|
||||||
switch (frame[5])
|
switch (frame[5])
|
||||||
{
|
{
|
||||||
case 0x00: current_vfo = RIG_VFO_A; break;
|
case S_VFOA:
|
||||||
|
case S_VFOB:
|
||||||
case 0x01: current_vfo = RIG_VFO_B; break;
|
current_vfo = frame[5];
|
||||||
|
break;
|
||||||
case 0xd0: current_vfo = RIG_VFO_MAIN; break;
|
case S_BTOA:
|
||||||
|
// Figure out what this really does
|
||||||
case 0xd1: current_vfo = RIG_VFO_SUB; break;
|
break;
|
||||||
|
case S_XCHNG:
|
||||||
|
// Ditto
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
acknak = NAK;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("set_vfo to %s\n", rig_strvfo(current_vfo));
|
printf("set_vfo to %s\n", vfonames[current_vfo]);
|
||||||
|
|
||||||
frame[4] = 0xfb;
|
frame[4] = acknak;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0f:
|
case C_CTL_SPLT: // 0x0F
|
||||||
if (frame[5] == 0) { split = 0; }
|
if (frame[5] == 0) { split = 0; }
|
||||||
else if (frame[5] == 1) { split = 1; }
|
else if (frame[5] == 1) { split = 1; }
|
||||||
else { frame[6] = split; }
|
else { frame[6] = split; }
|
||||||
|
|
||||||
if (frame[5] == 0xfd)
|
if (frame[5] == FI)
|
||||||
{
|
{
|
||||||
printf("get split %d\n", split);
|
printf("get split %d\n", split);
|
||||||
frame[7] = 0xfd;
|
frame[7] = FI;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("set split %d\n", 1);
|
printf("set split %d\n", split);
|
||||||
frame[4] = 0xfb;
|
frame[4] = ACK;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x12: // we're simulating the 3-byte version -- not the 2-byte
|
#if 0 // No antenna control
|
||||||
if (frame[5] != 0xfd)
|
case C_CTL_ANT: // 0x12 we're simulating the 3-byte version -- not the 2-byte
|
||||||
|
if (frame[5] != FI)
|
||||||
{
|
{
|
||||||
printf("Set ant %d\n", -1);
|
printf("Set ant %d\n", -1);
|
||||||
ant_curr = frame[5];
|
ant_curr = frame[5];
|
||||||
|
@ -242,16 +259,17 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
dump_hex(frame, 8);
|
dump_hex(frame, 8);
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case 0x14:
|
case C_CTL_LVL: // 0x14
|
||||||
printf("cmd=0x14\n");
|
printf("cmd=0x14\n");
|
||||||
|
|
||||||
switch (frame[5])
|
switch (frame[5])
|
||||||
{
|
{
|
||||||
static int power_level = 0;
|
static int power_level = 0;
|
||||||
|
|
||||||
case 0x07:
|
case S_LVL_PBTIN: // 0x07
|
||||||
case 0x08:
|
case S_LVL_PBTOUT: // 0x08
|
||||||
if (frame[6] != 0xfd)
|
if (frame[6] != 0xfd)
|
||||||
{
|
{
|
||||||
frame[6] = 0xfb;
|
frame[6] = 0xfb;
|
||||||
|
@ -270,31 +288,27 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0a:
|
case S_LVL_RFPOWER: // 0x0A
|
||||||
printf("Using power level %d\n", power_level);
|
|
||||||
power_level += 10;
|
power_level += 10;
|
||||||
|
|
||||||
if (power_level > 250) { power_level = 0; }
|
if (power_level > 250) { power_level = 0; }
|
||||||
|
printf("Using power level %d\n", power_level);
|
||||||
|
|
||||||
to_bcd(&frame[6], (long long)power_level, 2);
|
to_bcd(&frame[6], (long long)power_level, 2);
|
||||||
frame[8] = 0xfd;
|
frame[8] = 0xfd;
|
||||||
n = write(fd, frame, 9);
|
n = write(fd, frame, 9);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0c:
|
case S_LVL_KEYSPD: // 0x0C
|
||||||
dumphex(frame, 10);
|
//dumphex(frame, 10);
|
||||||
printf("subcmd=0x0c #1\n");
|
|
||||||
|
|
||||||
if (frame[6] != 0xfd) // then we have data
|
if (frame[6] != 0xfd) // then we have data
|
||||||
{
|
{
|
||||||
printf("subcmd=0x0c #1\n");
|
|
||||||
keyspd = from_bcd(&frame[6], 2);
|
keyspd = from_bcd(&frame[6], 2);
|
||||||
frame[6] = 0xfb;
|
frame[6] = 0xfb;
|
||||||
n = write(fd, frame, 7);
|
n = write(fd, frame, 7);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("subcmd=0x0c #1\n");
|
|
||||||
to_bcd(&frame[6], keyspd, 2);
|
to_bcd(&frame[6], keyspd, 2);
|
||||||
frame[8] = 0xfd;
|
frame[8] = 0xfd;
|
||||||
n = write(fd, frame, 9);
|
n = write(fd, frame, 9);
|
||||||
|
@ -305,41 +319,41 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x15:
|
case C_RD_SQSM: // 0x15
|
||||||
switch (frame[5])
|
switch (frame[5])
|
||||||
{
|
{
|
||||||
static int meter_level = 0;
|
static int meter_level = 0;
|
||||||
|
|
||||||
case 0x02:
|
case S_SML: // 0x02
|
||||||
frame[6] = 00;
|
frame[6] = 00;
|
||||||
frame[7] = 00;
|
frame[7] = 00;
|
||||||
frame[8] = 0xfd;
|
frame[8] = FI;
|
||||||
n = write(fd, frame, 9);
|
n = write(fd, frame, 9);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x07:
|
case S_OVF: // 0x07
|
||||||
frame[6] = ovf_status;
|
frame[6] = ovf_status;
|
||||||
frame[7] = 0xfd;
|
frame[7] = FI;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
ovf_status = ovf_status == 0 ? 1 : 0;
|
ovf_status = !ovf_status;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x11:
|
case S_RFML: // 0x11
|
||||||
printf("Using meter level %d\n", meter_level);
|
|
||||||
meter_level += 10;
|
meter_level += 10;
|
||||||
|
|
||||||
if (meter_level > 250) { meter_level = 0; }
|
if (meter_level > 250) { meter_level = 0; }
|
||||||
|
printf("Using meter level %d\n", meter_level);
|
||||||
|
|
||||||
to_bcd(&frame[6], (long long)meter_level, 2);
|
to_bcd(&frame[6], (long long)meter_level, 2);
|
||||||
frame[8] = 0xfd;
|
frame[8] = FI;
|
||||||
n = write(fd, frame, 9);
|
n = write(fd, frame, 9);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x16:
|
case C_CTL_FUNC: // 0x16
|
||||||
switch (frame[5])
|
switch (frame[5])
|
||||||
{
|
{
|
||||||
case 0x5a:
|
#ifdef SATMODE
|
||||||
|
case S_FUNC_SATM: // 0x5A
|
||||||
if (frame[6] == 0xfe)
|
if (frame[6] == 0xfe)
|
||||||
{
|
{
|
||||||
satmode = frame[6];
|
satmode = frame[6];
|
||||||
|
@ -347,45 +361,57 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
frame[6] = satmode;
|
frame[6] = satmode;
|
||||||
frame[7] = 0xfd;
|
frame[7] = FI;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x18: // miscellaneous things
|
case C_SET_PWR: // 0x18 miscellaneous things
|
||||||
frame[5] = 1;
|
frame[5] = 1;
|
||||||
frame[6] = 0xfd;
|
frame[6] = FI;
|
||||||
n = write(fd, frame, 7);
|
n = write(fd, frame, 7);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x19: // miscellaneous things
|
case C_RD_TRXID: // 0x19 miscellaneous things
|
||||||
frame[5] = 0x94;
|
frame[5] = 0xA4;
|
||||||
frame[6] = 0xfd;
|
frame[6] = FI;
|
||||||
n = write(fd, frame, 7);
|
n = write(fd, frame, 7);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1a: // miscellaneous things
|
case C_CTL_MEM: // 0x1A miscellaneous things
|
||||||
switch (frame[5])
|
switch (frame[5])
|
||||||
{
|
{
|
||||||
case 0x03: // width
|
case S_MEM_FILT_WDTH: // 0x03 width
|
||||||
if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { frame[6] = widthA; }
|
if (frame[6] == FI) // Query
|
||||||
else { frame[6] = widthB; }
|
{
|
||||||
|
if (current_vfo == S_VFOA || current_vfo == S_MAIN) { frame[6] = widthA; }
|
||||||
|
else { frame[6] = widthB; }
|
||||||
|
|
||||||
frame[7] = 0xfd;
|
frame[7] = FI;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
|
}
|
||||||
|
else // set
|
||||||
|
{
|
||||||
|
if (current_vfo == S_VFOA) { widthA = frame[6]; }
|
||||||
|
else { widthB = frame[6]; }
|
||||||
|
frame[4] = ACK;
|
||||||
|
frame[5] = FI;
|
||||||
|
n = write(fd, frame, 6);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x04: // AGC TIME
|
case 0x04: // AGC TIME
|
||||||
printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
|
printf("frame[6]==x%02x, frame[7]=0%02x\n", frame[6], frame[7]);
|
||||||
|
|
||||||
if (frame[6] == 0xfd) // the we are reading
|
if (frame[6] == FI) // then we are reading
|
||||||
{
|
{
|
||||||
frame[6] = agc_time;
|
frame[6] = agc_time;
|
||||||
frame[7] = 0xfd;
|
frame[7] = FI;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -399,31 +425,33 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef SATMODE
|
||||||
case 0x07: // satmode
|
case 0x07: // satmode
|
||||||
frame[4] = 0;
|
frame[4] = 0;
|
||||||
frame[7] = 0xfd;
|
frame[7] = 0xfd;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1c:
|
case C_CTL_PTT: //0x1C
|
||||||
switch (frame[5])
|
switch (frame[5])
|
||||||
{
|
{
|
||||||
case 0:
|
case S_PTT: // 0x00
|
||||||
if (frame[6] == 0xfd)
|
if (frame[6] == 0xfd)
|
||||||
{
|
{
|
||||||
frame[6] = ptt;
|
frame[6] = ptt;
|
||||||
frame[7] = 0xfd;
|
frame[7] = FI;
|
||||||
n = write(fd, frame, 8);
|
n = write(fd, frame, 8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ptt = frame[6];
|
ptt = frame[6];
|
||||||
frame[7] = 0xfb;
|
frame[7] = ACK;
|
||||||
frame[8] = 0xfd;
|
frame[8] = FI;
|
||||||
n = write(fd, frame, 9);
|
n = write(fd, frame, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,8 +464,8 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
#ifdef X25
|
#ifdef X25
|
||||||
|
|
||||||
case 0x25:
|
case C_SEND_SEL_FREQ: // 0x25
|
||||||
if (frame[6] == 0xfd)
|
if (frame[6] == FI)
|
||||||
{
|
{
|
||||||
if (frame[5] == 0x00)
|
if (frame[5] == 0x00)
|
||||||
{
|
{
|
||||||
|
@ -450,7 +478,7 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
printf("X25 get_freqB=%.0f\n", freqB);
|
printf("X25 get_freqB=%.0f\n", freqB);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame[11] = 0xfd;
|
frame[11] = FI;
|
||||||
#if 0
|
#if 0
|
||||||
unsigned char frame2[11];
|
unsigned char frame2[11];
|
||||||
|
|
||||||
|
@ -498,54 +526,53 @@ void frameParse(int fd, unsigned char *frame, int len)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x26:
|
case C_SEND_SEL_MODE: // 0x26
|
||||||
for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
|
|
||||||
|
|
||||||
if (frame[6] == 0xfd) // then a query
|
if (frame[6] == 0xfd) // then a query
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); }
|
|
||||||
|
|
||||||
frame[6] = frame[5] == 0 ? modeA : modeB;
|
frame[6] = frame[5] == 0 ? modeA : modeB;
|
||||||
frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
|
frame[7] = frame[5] == 0 ? datamodeA : datamodeB;
|
||||||
frame[8] = 0x01;
|
frame[8] = frame[5] == 0 ? filterA : filterB;
|
||||||
frame[9] = 0xfd;
|
frame[9] = 0xfd;
|
||||||
|
printf(" ->");
|
||||||
|
for (int i = 0; i < 10; ++i) { printf("%02x:", frame[i]); }
|
||||||
|
printf("\n");
|
||||||
n = write(fd, frame, 10);
|
n = write(fd, frame, 10);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); }
|
if (frame[5] == 0)
|
||||||
|
|
||||||
if (frame[6] == 0)
|
|
||||||
{
|
{
|
||||||
modeA = frame[7];
|
modeA = frame[6];
|
||||||
datamodeA = frame[8];
|
datamodeA = frame[7];
|
||||||
|
filterA = frame[8];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
modeB = frame[7];
|
modeB = frame[6];
|
||||||
datamodeB = frame[8];
|
datamodeB = frame[7];
|
||||||
|
filterB = frame[8];
|
||||||
}
|
}
|
||||||
|
|
||||||
frame[4] = 0xfb;
|
frame[4] = ACK;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
|
|
||||||
case 0x25:
|
case 0x25:
|
||||||
printf("x25 send nak\n");
|
printf("x25 send nak\n");
|
||||||
frame[4] = 0xfa;
|
frame[4] = NAK;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x26:
|
case 0x26:
|
||||||
printf("x26 send nak\n");
|
printf("x26 send nak\n");
|
||||||
frame[4] = 0xfa;
|
frame[4] = NAK;
|
||||||
frame[5] = 0xfd;
|
frame[5] = FI;
|
||||||
n = write(fd, frame, 6);
|
n = write(fd, frame, 6);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
@ -599,13 +626,13 @@ int openPort(char *comport) // doesn't matter for using pts devices
|
||||||
|
|
||||||
void rigStatus()
|
void rigStatus()
|
||||||
{
|
{
|
||||||
char vfoa = current_vfo == RIG_VFO_A ? '*' : ' ';
|
char vfoa = current_vfo == S_VFOA ? '*' : ' ';
|
||||||
char vfob = current_vfo == RIG_VFO_B ? '*' : ' ';
|
char vfob = current_vfo == S_VFOB ? '*' : ' ';
|
||||||
printf("%cVFOA: mode=%d datamode=%d width=%ld freq=%.0f\n", vfoa, modeA,
|
printf("%cVFOA: mode=%d datamode=%d width=%d freq=%.0f\n", vfoa, modeA,
|
||||||
datamodeA,
|
datamodeA,
|
||||||
widthA,
|
widthA,
|
||||||
freqA);
|
freqA);
|
||||||
printf("%cVFOB: mode=%d datamode=%d width=%ld freq=%.0f\n", vfob, modeB,
|
printf("%cVFOB: mode=%d datamode=%d width=%d freq=%.0f\n", vfob, modeB,
|
||||||
datamodeB,
|
datamodeB,
|
||||||
widthB,
|
widthB,
|
||||||
freqB);
|
freqB);
|
||||||
|
|
Ładowanie…
Reference in New Issue