[Hamlib-commits] Hamlib -- Ham radio control libraries branch master updated. 2e3e0df4d6be4bd9aad2f
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: n0nb <n0...@us...> - 2023-09-04 10:37:47
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Hamlib -- Ham radio control libraries". The branch, master has been updated via 2e3e0df4d6be4bd9aad2f0a155ee2370a45959a0 (commit) via 5963e149a97470d87bc4873748c76dc1bff31cd5 (commit) via 5d12e5f8bd5b2f36dd5cd178afc339240af33bf3 (commit) via 6e7aec3077da74b74cfc53beb32ae174b7260406 (commit) via 875214eb54a78146ac4b45a485fe314575ebeca5 (commit) via 8ede3518f1f2891654cab7190227f9c20e6fbabe (commit) via 42b6fb13f998a8ba5a28ee2457cb70ced954d7a3 (commit) via c1f24b2f7adf062d3378fed01ba042e53e2654c1 (commit) from 897faf00c08028c6f6567bf12cf309c7787b1fc6 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2e3e0df4d6be4bd9aad2f0a155ee2370a45959a0 Author: Mike Black W9MDB <mdb...@ya...> Date: Tue Aug 29 07:45:42 2023 -0500 Remove debug from serial.c diff --git a/src/serial.c b/src/serial.c index 23ccd1af8..cad1baa33 100644 --- a/src/serial.c +++ b/src/serial.c @@ -772,7 +772,7 @@ int HAMLIB_API serial_flush(hamlib_port_t *p) } timeout_save = p->timeout; - rig_debug(RIG_DEBUG_ERR, "%s: p->timeout=%d\n", __func__, p->timeout); + //rig_debug(RIG_DEBUG_ERR, "%s: p->timeout=%d\n", __func__, p->timeout); timeout_retry_save = p->timeout_retry; p->timeout = 0; p->timeout_retry = 0; commit 5963e149a97470d87bc4873748c76dc1bff31cd5 Author: Mike Black W9MDB <mdb...@ya...> Date: Mon Aug 28 23:34:28 2023 -0500 Fix IC-590 filter byte https://github.com/Hamlib/Hamlib/issues/1375 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index 305731f03..9bbc86454 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1345,7 +1345,7 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) if (RIG_IS_IC905) { - // 10Hz resolution and > 5.85MHz is 6 bytes + // > 5.85GHz is 6 bytes if (freq > 5.85e9) { freq_len = 6; } } @@ -2241,6 +2241,7 @@ int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode, || RIG_IS_IC9100 || RIG_IS_IC9700 || RIG_IS_IC705 + || RIG_IS_IC905 || RIG_IS_X6100; ENTERFUNC; diff --git a/simulators/simic905.c b/simulators/simic905.c index f9cfe2f56..4f6476a2d 100644 --- a/simulators/simic905.c +++ b/simulators/simic905.c @@ -32,7 +32,7 @@ vfo_t current_vfo = RIG_VFO_A; int split = 0; // we make B different from A to ensure we see a difference at startup -double freqA = 1407400; +double freqA = 145123456; double freqB = 1407450; mode_t modeA = RIG_MODE_PKTUSB; mode_t modeB = RIG_MODE_PKTUSB; @@ -50,6 +50,14 @@ int agc_time = 1; int ovf_status = 0; int powerstat = 1; int keyspd = 25; +int datamode = 0; +int filter = 0; + +int WRITE(int fd, unsigned char* buf, int buflen) +{ + dump_hex(buf,buflen); + return write(fd,buf,buflen); +} void dumphex(unsigned char *buf, int n) { @@ -121,22 +129,22 @@ void frameParse(int fd, unsigned char *frame, int len) int freq_len = 5; if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { - if (freqA > 5.85e5) freq_len = 6; + if (freqA > 5.85e9) freq_len = 6; printf("get_freqA len=%d\n", freq_len); to_bcd(&frame[5], (long long)freqA, freq_len * 2); } else { - if (freqB > 5.85e5) freq_len = 6; + if (freqB > 5.85e9) freq_len = 6; printf("get_freqB len=%d\n", freq_len); to_bcd(&frame[5], (long long)freqB, freq_len * 2); } - frame[4+freq_len] = 0xfd; + frame[5+freq_len] = 0xfd; if (powerstat) { - n = write(fd, frame, 11); + n = WRITE(fd, frame, 11); } break; @@ -156,7 +164,7 @@ void frameParse(int fd, unsigned char *frame, int len) } frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); break; case 0x05: @@ -168,7 +176,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); break; case 0x06: @@ -177,7 +185,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); break; case 0x07: @@ -197,7 +205,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); break; case 0x0f: @@ -206,7 +214,7 @@ void frameParse(int fd, unsigned char *frame, int len) printf("get split %d\n", split); frame[5] = split; frame[6] = 0xfd; - n = write(fd, frame, 7); + n = WRITE(fd, frame, 7); } else { @@ -214,7 +222,7 @@ void frameParse(int fd, unsigned char *frame, int len) split = frame[5]; frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); } break; @@ -235,9 +243,9 @@ void frameParse(int fd, unsigned char *frame, int len) frame[5] = ant_curr; frame[6] = ant_option; frame[7] = 0xfd; - printf("write 8 bytes\n"); + printf("WRITE 8 bytes\n"); dump_hex(frame, 8); - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); break; case 0x14: @@ -251,7 +259,7 @@ void frameParse(int fd, unsigned char *frame, int len) { frame[6] = 0xfb; dumphex(frame, 7); - n = write(fd, frame, 7); + n = WRITE(fd, frame, 7); printf("ACK x14 x08\n"); } else @@ -259,7 +267,7 @@ void frameParse(int fd, unsigned char *frame, int len) to_bcd(&frame[6], (long long)128, 2); frame[8] = 0xfb; dumphex(frame, 9); - n = write(fd, frame, 9); + n = WRITE(fd, frame, 9); printf("SEND x14 x08\n"); } @@ -273,7 +281,7 @@ void frameParse(int fd, unsigned char *frame, int len) to_bcd(&frame[6], (long long)power_level, 2); frame[8] = 0xfd; - n = write(fd, frame, 9); + n = WRITE(fd, frame, 9); break; case 0x0c: @@ -285,14 +293,14 @@ void frameParse(int fd, unsigned char *frame, int len) printf("subcmd=0x0c #1\n"); keyspd = from_bcd(&frame[6], 2); frame[6] = 0xfb; - n = write(fd, frame, 7); + n = WRITE(fd, frame, 7); } else { printf("subcmd=0x0c #1\n"); to_bcd(&frame[6], keyspd, 2); frame[8] = 0xfd; - n = write(fd, frame, 9); + n = WRITE(fd, frame, 9); } break; @@ -309,7 +317,7 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x07: frame[6] = ovf_status; frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); ovf_status = ovf_status == 0 ? 1 : 0; break; @@ -321,7 +329,7 @@ void frameParse(int fd, unsigned char *frame, int len) to_bcd(&frame[6], (long long)meter_level, 2); frame[8] = 0xfd; - n = write(fd, frame, 9); + n = WRITE(fd, frame, 9); break; } @@ -337,7 +345,7 @@ void frameParse(int fd, unsigned char *frame, int len) { frame[6] = satmode; frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); } break; @@ -348,13 +356,13 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x18: // miscellaneous things frame[5] = 1; frame[6] = 0xfd; - n = write(fd, frame, 7); + n = WRITE(fd, frame, 7); break; case 0x19: // miscellaneous things frame[5] = 0x94; frame[6] = 0xfd; - n = write(fd, frame, 7); + n = WRITE(fd, frame, 7); break; case 0x1a: // miscellaneous things @@ -365,7 +373,7 @@ void frameParse(int fd, unsigned char *frame, int len) else { frame[6] = widthB; } frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); break; case 0x04: // AGC TIME @@ -375,7 +383,7 @@ void frameParse(int fd, unsigned char *frame, int len) { frame[6] = agc_time; frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); } else { @@ -383,15 +391,31 @@ void frameParse(int fd, unsigned char *frame, int len) agc_time = frame[6]; frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); } break; + case 0x06: // datamode + if (frame[5] == 0xfd) + { + frame[6] = datamode; + frame[7] = filter; + frame[8] = 0xfd; + n = WRITE(fd, frame, 9); + } + else + { + datamode = frame[6]; + filter = frame[7]; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = WRITE(fd, frame, 6); + } case 0x07: // satmode frame[4] = 0; frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); break; } @@ -404,16 +428,22 @@ void frameParse(int fd, unsigned char *frame, int len) case 0: if (frame[6] == 0xfd) { + int tmp = frame[2]; + frame[2] = frame[3]; + frame[3] = tmp; frame[6] = ptt; frame[7] = 0xfd; - n = write(fd, frame, 8); + n = WRITE(fd, frame, 8); } else { ptt = frame[6]; - frame[7] = 0xfb; - frame[8] = 0xfd; - n = write(fd, frame, 9); + int tmp = frame[2]; + frame[2] = frame[3]; + frame[3] = tmp; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = WRITE(fd, frame, 6); } break; @@ -431,18 +461,21 @@ void frameParse(int fd, unsigned char *frame, int len) int freq_len = 5; if (frame[5] == 0x00) { - if (freqA > 5.85e5) freq_len = 6; + if (freqA > 5.85e9) freq_len = 6; to_bcd(&frame[6], (long long)freqA, freq_len * 2); printf("X25 get_freqA=%.0f\n", freqA); + frame[6+freq_len] = 0xfd; + n = WRITE(fd, frame, 7+freq_len); } else { - if (freqB > 5.85e5) freq_len = 6; + if (freqB > 5.85e9) freq_len = 6; to_bcd(&frame[6], (long long)freqB, freq_len * 2); printf("X25 get_freqB=%.0f\n", freqB); + frame[6+freq_len] = 0xfd; + n = WRITE(fd, frame, 7+freq_len); } - frame[6+freq_len] = 0xfd; //unsigned char frame2[12]; #if 0 @@ -458,9 +491,8 @@ void frameParse(int fd, unsigned char *frame, int len) frame2[9] = 0x00; frame2[10] = 0x00; frame2[11] = 0xfd; - n = write(fd, frame2, 12); + n = WRITE(fd, frame2, 12); #endif - n = write(fd, frame, 7+freq_len); } else { @@ -472,9 +504,12 @@ void frameParse(int fd, unsigned char *frame, int len) if (frame[5] == 0x00) { freqA = freq; } else { freqB = freq; } + int tmp = frame[2]; + frame[2] = frame[3]; + frame[3] = tmp; frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); #if 0 // send async frame frame[2] = 0x00; // async freq @@ -486,7 +521,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[8] = 0x96; frame[9] = 0x12; frame[10] = 0xfd; - n = write(fd, frame, 11); + n = WRITE(fd, frame, 11); #endif } @@ -503,7 +538,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[7] = frame[5] == 0 ? datamodeA : datamodeB; frame[8] = frame[5] == 0 ? filterA : filterB; frame[9] = 0xfd; - n = write(fd, frame, 10); + n = WRITE(fd, frame, 10); } else { @@ -522,7 +557,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[4] = 0xfb; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); } printf("\n"); @@ -533,14 +568,14 @@ void frameParse(int fd, unsigned char *frame, int len) printf("x25 send nak\n"); frame[4] = 0xfa; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); break; case 0x26: printf("x26 send nak\n"); frame[4] = 0xfa; frame[5] = 0xfd; - n = write(fd, frame, 6); + n = WRITE(fd, frame, 6); break; #endif commit 5d12e5f8bd5b2f36dd5cd178afc339240af33bf3 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Aug 27 15:43:28 2023 -0500 Fix IC-905 10Ghz+ set/get freq and lower frequencies too https://github.com/Hamlib/Hamlib/issues/1375 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index f049c77e8..305731f03 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1347,7 +1347,6 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) { // 10Hz resolution and > 5.85MHz is 6 bytes if (freq > 5.85e9) { freq_len = 6; } - freq /= 10; } /* @@ -1799,8 +1798,6 @@ int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) if (freq_len == 3) { *freq *= 10000; } // 3-byte freq for ID5100 is in 10000Hz units so convert to Hz -if (RIG_IS_IC905) { *freq *= 10; } - if (vfo == RIG_VFO_MEM && civ_731_mode) { priv->civ_731_mode = 1; } switch (vfo) diff --git a/simulators/simic7300.c b/simulators/simic7300.c index 86283a01c..978f72a8f 100644 --- a/simulators/simic7300.c +++ b/simulators/simic7300.c @@ -540,9 +540,8 @@ case 0x26: frame[6] = frame[5] == 0 ? modeA : modeB; frame[7] = frame[5] == 0 ? datamodeA : datamodeB; - frame[8] = 0xfb; - frame[9] = 0xfd; - n = write(fd, frame, 10); + frame[8] = 0xfd; + n = write(fd, frame, 9); } else { diff --git a/simulators/simic7851.c b/simulators/simic7851.c index 53fb10d27..41d76e25b 100644 --- a/simulators/simic7851.c +++ b/simulators/simic7851.c @@ -33,10 +33,12 @@ int split = 0; // we make B different from A to ensure we see a difference at startup float freqA = 14074000; float freqB = 14074500; -mode_t modeA = RIG_MODE_PKTUSB; -mode_t modeB = RIG_MODE_PKTUSB; -int datamodeA = 0; -int datamodeB = 0; +mode_t modeA = 1; +mode_t modeB = 0; +int datamodeA = 2; +int datamodeB = 1; +int filterA = 3; +int filterB = 2; pbwidth_t widthA = 0; pbwidth_t widthB = 1; ant_t ant_curr = 0; @@ -49,8 +51,9 @@ int powerstat = 1; int datamode = 0; int keyspd = 130; // 130=20WPM int attenuator; -int filterA = 2; -int filterB = 3; +int notch = 0; +int speechcompressor = 0; +int vox = 0; void dumphex(unsigned char *buf, int n) { @@ -75,7 +78,8 @@ again: if (c == 0xfd) { - dumphex(buf, i); +// printf("Read: "); +// dumphex(buf, i); return i; } @@ -105,7 +109,7 @@ void frameParse(int fd, unsigned char *frame, int len) double freq; int n = 0; - dumphex(frame, len); + //dumphex(frame, len); if (frame[0] != 0xfe && frame[1] != 0xfe) { @@ -114,7 +118,7 @@ void frameParse(int fd, unsigned char *frame, int len) return; } - int echo = 1; + int echo = 0; if (echo) { @@ -131,12 +135,12 @@ void frameParse(int fd, unsigned char *frame, int len) //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2); if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { - printf("get_freqA\n"); + //printf("get_freqA\n"); to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2); } else { - printf("get_freqB\n"); + //printf("get_freqB\n"); to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2); } @@ -152,13 +156,13 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x04: if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { - printf("get_modeA\n"); + //printf("get_modeA\n"); frame[5] = modeA; frame[6] = widthA; } else { - printf("get_modeB\n"); + //printf("get_modeB\n"); frame[5] = modeB; frame[6] = widthB; } @@ -169,7 +173,7 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x05: 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; } else { freqB = freq; } @@ -190,12 +194,12 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x07: - printf("******* [5] = 0x07\n"); + //printf("******* [5] = 0x07\n"); switch (frame[5]) { case 0xd2: - printf("******* [6] = 0x07\n"); + //printf("******* [6] = 0x07\n"); switch (frame[6]) { @@ -205,11 +209,11 @@ void frameParse(int fd, unsigned char *frame, int len) } } - printf("set_vfo to %s\n", rig_strvfo(current_vfo)); + //printf("set_vfo to %s\n", rig_strvfo(current_vfo)); frame[4] = 0xfb; frame[5] = 0xfd; - printf("0x07 0xd2 answer: \n"); + //printf("0x07 0xd2 answer: \n"); dump_hex(frame, 6); n = write(fd, frame, 6); break; @@ -221,13 +225,13 @@ void frameParse(int fd, unsigned char *frame, int len) if (frame[5] == 0xfd) { - printf("get split %d\n", 1); + //printf("get split %d\n", 1); frame[7] = 0xfd; n = write(fd, frame, 8); } else { - printf("set split %d\n", 1); + //printf("set split %d\n", 1); frame[4] = 0xfb; frame[5] = 0xfd; n = write(fd, frame, 6); @@ -245,37 +249,36 @@ void frameParse(int fd, unsigned char *frame, int len) } else { - frame[6] = attenuator; - frame[7] = 0xfd; - n = write(fd, frame, 8); + frame[5] = attenuator; + frame[6] = 0xfd; + n = write(fd, frame, 7); } break; - case 0x12: // we're simulating the 3-byte version -- not the 2-byte if (frame[5] != 0xfd) { - printf("Set ant %d\n", -1); + //printf("Set ant %d\n", -1); ant_curr = frame[5]; ant_option = frame[6]; dump_hex(frame, 8); } else { - printf("Get ant\n"); + //printf("Get ant\n"); } frame[5] = ant_curr; frame[6] = ant_option; frame[7] = 0xfd; - printf("write 8 bytes\n"); + //printf("write 8 bytes\n"); dump_hex(frame, 8); n = write(fd, frame, 8); break; case 0x14: - printf("******** 0x14 received frame[5]=0x%02x\n", frame[5]); + //printf("******** 0x14 received frame[5]=0x%02x\n", frame[5]); switch (frame[5]) { @@ -285,28 +288,28 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x08: if (frame[6] != 0xfd) { - printf("DEBUG#1\n"); + //printf("DEBUG#1\n"); frame[4] = 0xfb; frame[5] = 0xfd; dumphex(frame, 6); n = write(fd, frame, 6); - printf("ACK x14 x08\n"); + //printf("ACK x14 x08\n"); } else { - printf("DEBUG#2\n"); + //printf("DEBUG#2\n"); to_bcd(&frame[6], (long long)128, 2); frame[8] = 0xfb; frame[9] = 0xfd; dumphex(frame, 10); n = write(fd, frame, 10); - printf("SEND x14 x08\n"); + //printf("SEND x14 x08\n"); } break; case 0x0a: - printf("Using power level %d\n", power_level); + //printf("Using power level %d\n", power_level); power_level += 10; if (power_level > 250) { power_level = 0; } @@ -331,7 +334,7 @@ void frameParse(int fd, unsigned char *frame, int len) break; default: - printf("*********** NAK\n"); + //printf("*********** NAK\n"); frame[5] = 0xfa; frame[6] = 0xfd; n = write(fd, frame, 7); @@ -353,7 +356,7 @@ void frameParse(int fd, unsigned char *frame, int len) break; case 0x11: - printf("Using meter level %d\n", meter_level); + //printf("Using meter level %d\n", meter_level); meter_level += 10; if (meter_level > 250) { meter_level = 0; } @@ -374,6 +377,51 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x16: switch (frame[5]) { + case 0x44: + if (frame[6] == 0xfe) + { + frame[6] = speechcompressor; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + speechcompressor = frame[6]; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + break; + case 0x46: + if (frame[6] == 0xfe) + { + frame[6] = vox; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + vox = frame[6]; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + break; + case 0x48: + if (frame[6] == 0xfe) + { + frame[6] = notch; + frame[7] = 0xfd; + n = write(fd, frame, 8); + } + else + { + notch = frame[6]; + frame[4] = 0xfb; + frame[5] = 0xfd; + n = write(fd, frame, 6); + } + break; case 0x5a: if (frame[6] == 0xfe) { @@ -415,7 +463,7 @@ void frameParse(int fd, unsigned char *frame, int len) break; 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 { @@ -425,7 +473,7 @@ void frameParse(int fd, unsigned char *frame, int len) } else { - printf("AGC_TIME RESPONSE******************************"); + //printf("AGC_TIME RESPONSE******************************"); agc_time = frame[6]; frame[4] = 0xfb; frame[5] = 0xfd; @@ -494,12 +542,12 @@ void frameParse(int fd, unsigned char *frame, int len) if (frame[5] == 0x00) { to_bcd(&frame[6], (long long)freqA, (civ_731_mode ? 4 : 5) * 2); - printf("X25 get_freqA=%.0f\n", freqA); + //printf("X25 get_freqA=%.0f\n", freqA); } else { to_bcd(&frame[6], (long long)freqB, (civ_731_mode ? 4 : 5) * 2); - printf("X25 get_freqB=%.0f\n", freqB); + //printf("X25 get_freqB=%.0f\n", freqB); } frame[11] = 0xfd; @@ -524,7 +572,7 @@ void frameParse(int fd, unsigned char *frame, int len) else { freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2); - printf("set_freq to %.0f\n", freq); + //printf("set_freq to %.0f\n", freq); if (frame[5] == 0x00) { freqA = freq; } else { freqB = freq; } @@ -548,31 +596,36 @@ void frameParse(int fd, unsigned char *frame, int len) break; case 0x26: - for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); } + for (int i = 0; i < 7; ++i) { printf("%02x:", frame[i]); } if (frame[6] == 0xfd) // then a query { - for (int i = 0; i < 6; ++i) { printf("%02x:", frame[i]); } - + printf("GET MODE XXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n"); +// fe fe e0 8e 26 00 01 00 fd fd frame[6] = frame[5] == 0 ? modeA : modeB; frame[7] = frame[5] == 0 ? datamodeA : datamodeB; frame[8] = frame[5] == 0 ? filterA : filterB; frame[9] = 0xfd; + printf("x26 response: "); + dumphex(frame, 10); n = write(fd, frame, 10); } else { + printf("SET MODE YYYYYYYYYYYYYYYYYYYYYYYYYYYYY\n"); for (int i = 0; i < 12; ++i) { printf("%02x:", frame[i]); } - if (frame[6] == 0) + if (frame[5] == 0) { - modeA = frame[7]; - datamodeA = frame[8]; + modeA = frame[6]; + datamodeA = frame[7]; + filterA = frame[8]; } else { - modeB = frame[7]; - datamodeB = frame[8]; + modeB = frame[6]; + datamodeB = frame[7]; + filterB = frame[8]; } frame[4] = 0xfb; @@ -701,7 +754,7 @@ int main(int argc, char **argv) hl_usleep(1000 * 1000); } - rigStatus(); + //rigStatus(); } return 0; diff --git a/simulators/simic905.c b/simulators/simic905.c index be90e4666..f9cfe2f56 100644 --- a/simulators/simic905.c +++ b/simulators/simic905.c @@ -32,12 +32,14 @@ vfo_t current_vfo = RIG_VFO_A; int split = 0; // we make B different from A to ensure we see a difference at startup -float freqA = 14074000; -float freqB = 14074500; +double freqA = 1407400; +double freqB = 1407450; mode_t modeA = RIG_MODE_PKTUSB; mode_t modeB = RIG_MODE_PKTUSB; int datamodeA = 0; int datamodeB = 0; +int filterA = 1; +int filterB = 2; pbwidth_t widthA = 0; pbwidth_t widthB = 1; ant_t ant_curr = 0; @@ -47,6 +49,7 @@ int satmode = 0; int agc_time = 1; int ovf_status = 0; int powerstat = 1; +int keyspd = 25; void dumphex(unsigned char *buf, int n) { @@ -115,18 +118,21 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x03: //from_bcd(frameackbuf[2], (civ_731_mode ? 4 : 5) * 2); + int freq_len = 5; if (current_vfo == RIG_VFO_A || current_vfo == RIG_VFO_MAIN) { - printf("get_freqA\n"); - to_bcd(&frame[5], (long long)freqA, (civ_731_mode ? 4 : 5) * 2); + if (freqA > 5.85e5) freq_len = 6; + printf("get_freqA len=%d\n", freq_len); + to_bcd(&frame[5], (long long)freqA, freq_len * 2); } else { - printf("get_freqB\n"); - to_bcd(&frame[5], (long long)freqB, (civ_731_mode ? 4 : 5) * 2); + if (freqB > 5.85e5) freq_len = 6; + printf("get_freqB len=%d\n", freq_len); + to_bcd(&frame[5], (long long)freqB, freq_len * 2); } - frame[10] = 0xfd; + frame[4+freq_len] = 0xfd; if (powerstat) { @@ -182,9 +188,9 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x01: current_vfo = RIG_VFO_B; break; - case 0xd0: current_vfo = RIG_VFO_MAIN; break; + case 0xa0: freqB = freqA;modeB = modeA; break; - case 0xd1: current_vfo = RIG_VFO_SUB; break; + case 0xb0: current_vfo = RIG_VFO_SUB; exit(1);break; } printf("set_vfo to %s\n", rig_strvfo(current_vfo)); @@ -195,19 +201,17 @@ void frameParse(int fd, unsigned char *frame, int len) break; case 0x0f: - if (frame[5] == 0) { split = 0; } - else if (frame[5] == 1) { split = 1; } - else { frame[6] = split; } - if (frame[5] == 0xfd) { - printf("get split %d\n", 1); - frame[7] = 0xfd; - n = write(fd, frame, 8); + printf("get split %d\n", split); + frame[5] = split; + frame[6] = 0xfd; + n = write(fd, frame, 7); } else { printf("set split %d\n", 1); + split = frame[5]; frame[4] = 0xfb; frame[5] = 0xfd; n = write(fd, frame, 6); @@ -271,10 +275,32 @@ void frameParse(int fd, unsigned char *frame, int len) frame[8] = 0xfd; n = write(fd, frame, 9); break; + + case 0x0c: + dumphex(frame, 10); + printf("subcmd=0x0c #1\n"); + + if (frame[6] != 0xfd) // then we have data + { + printf("subcmd=0x0c #1\n"); + keyspd = from_bcd(&frame[6], 2); + frame[6] = 0xfb; + n = write(fd, frame, 7); + } + else + { + printf("subcmd=0x0c #1\n"); + to_bcd(&frame[6], keyspd, 2); + frame[8] = 0xfd; + n = write(fd, frame, 9); + } + + break; } break; + case 0x15: switch (frame[5]) { @@ -402,20 +428,24 @@ void frameParse(int fd, unsigned char *frame, int len) case 0x25: if (frame[6] == 0xfd) { + int freq_len = 5; if (frame[5] == 0x00) { - to_bcd(&frame[6], (long long)freqA, 6 * 2); + if (freqA > 5.85e5) freq_len = 6; + to_bcd(&frame[6], (long long)freqA, freq_len * 2); printf("X25 get_freqA=%.0f\n", freqA); } else { - to_bcd(&frame[6], (long long)freqB, 6 * 2); + if (freqB > 5.85e5) freq_len = 6; + to_bcd(&frame[6], (long long)freqB, freq_len * 2); printf("X25 get_freqB=%.0f\n", freqB); } - frame[12] = 0xfd; - unsigned char frame2[12]; + frame[6+freq_len] = 0xfd; + //unsigned char frame2[12]; +#if 0 frame2[0] = 0xfe; frame2[1] = 0xfe; frame2[2] = 0x00; // send transceive frame @@ -429,11 +459,14 @@ void frameParse(int fd, unsigned char *frame, int len) frame2[10] = 0x00; frame2[11] = 0xfd; n = write(fd, frame2, 12); - n = write(fd, frame, 13); +#endif + n = write(fd, frame, 7+freq_len); } else { - freq = from_bcd(&frame[6], (civ_731_mode ? 4 : 5) * 2); + int freq_len = 5; + if (frame[11] != 0xfd) freq_len = 6; + freq = from_bcd(&frame[6], freq_len * 2); printf("set_freq to %.0f\n", freq); if (frame[5] == 0x00) { freqA = freq; } @@ -442,6 +475,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[4] = 0xfb; frame[5] = 0xfd; n = write(fd, frame, 6); +#if 0 // send async frame frame[2] = 0x00; // async freq frame[3] = 0xa2; @@ -453,6 +487,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[9] = 0x12; frame[10] = 0xfd; n = write(fd, frame, 11); +#endif } break; @@ -466,7 +501,7 @@ void frameParse(int fd, unsigned char *frame, int len) frame[6] = frame[5] == 0 ? modeA : modeB; frame[7] = frame[5] == 0 ? datamodeA : datamodeB; - frame[8] = 0xfb; + frame[8] = frame[5] == 0 ? filterA : filterB; frame[9] = 0xfd; n = write(fd, frame, 10); } commit 6e7aec3077da74b74cfc53beb32ae174b7260406 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Aug 27 12:33:11 2023 -0500 Fix IC905 test for 5.8GHz (not MHz) vi simic905.c diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index fcdc196ee..f049c77e8 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1346,8 +1346,8 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) if (RIG_IS_IC905) { // 10Hz resolution and > 5.85MHz is 6 bytes - freq /= 10; - if (freq > 5.85e6) { freq_len = 6; } + if (freq > 5.85e9) { freq_len = 6; } + freq /= 10; } /* @@ -1355,7 +1355,6 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) */ to_bcd(freqbuf, freq, freq_len * 2); - // mike if (rig->caps->targetable_vfo & RIG_TARGETABLE_FREQ) { vfo_t vfo_unselected = RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B @@ -1834,8 +1833,8 @@ default: rig_strvfo(vfo)); } - rig_debug(RIG_DEBUG_VERBOSE, "%s exit vfo=%s, curr_vfo=%s\n", __func__, - rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo)); + rig_debug(RIG_DEBUG_VERBOSE, "%s exit vfo=%s, curr_vfo=%s ,freq=%g\n", __func__, + rig_strvfo(vfo), rig_strvfo(rig->state.current_vfo), *freq); RETURNFUNC2(RIG_OK); } commit 875214eb54a78146ac4b45a485fe314575ebeca5 Author: Mike Black W9MDB <mdb...@ya...> Date: Sun Aug 27 12:08:00 2023 -0500 Fix IC-905 set_freq -- get_freq should be working https://github.com/Hamlib/Hamlib/issues/1375 diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index daecdbf03..fcdc196ee 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1343,7 +1343,12 @@ int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) freq_len = priv->civ_731_mode ? 4 : 5; - if (RIG_IS_IC905) { freq /= 10; freq_len = 6; } + if (RIG_IS_IC905) + { + // 10Hz resolution and > 5.85MHz is 6 bytes + freq /= 10; + if (freq > 5.85e6) { freq_len = 6; } + } /* * to_bcd requires nibble len commit 8ede3518f1f2891654cab7190227f9c20e6fbabe Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 26 16:06:20 2023 -0500 Remove VFO_OP_XCHG from IC-905 as it's not working in firmware V1.11 anymore https://github.com/Hamlib/Hamlib/issues/1374 diff --git a/rigs/icom/ic7300.c b/rigs/icom/ic7300.c index 59acc14d5..e4da8a97f 100644 --- a/rigs/icom/ic7300.c +++ b/rigs/icom/ic7300.c @@ -135,6 +135,10 @@ int ic9700_set_vfo(RIG *rig, vfo_t vfo); } } +/* + * IC905 items that differ from IC7300 + */ +#define IC905_VFO_OPS (RIG_OP_CPY|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) /* * IC705 items that differ from IC7300 */ @@ -1523,7 +1527,7 @@ const struct rig_caps ic905_caps = RIG_MODEL(RIG_MODEL_IC905), .model_name = "IC-905", .mfg_name = "Icom", - .version = BACKEND_VER ".0", + .version = BACKEND_VER ".1", .copyright = "LGPL", .status = RIG_STATUS_STABLE, .rig_type = RIG_TYPE_TRANSCEIVER, @@ -1576,7 +1580,7 @@ const struct rig_caps ic905_caps = .agc_level_count = 3, .agc_levels = { RIG_AGC_OFF, RIG_AGC_FAST, RIG_AGC_MEDIUM, RIG_AGC_SLOW }, .targetable_vfo = RIG_TARGETABLE_FREQ | RIG_TARGETABLE_MODE, - .vfo_ops = IC7300_VFO_OPS, + .vfo_ops = IC905_VFO_OPS, .scan_ops = IC7300_SCAN_OPS, .transceive = RIG_TRN_RIG, .bank_qty = 5, commit 42b6fb13f998a8ba5a28ee2457cb70ced954d7a3 Author: Mike Black W9MDB <mdb...@ya...> Date: Sat Aug 26 10:13:54 2023 -0500 Remove hamlib/config.h from nobase_include_HEADERS https://github.com/Hamlib/Hamlib/issues/1373 diff --git a/include/Makefile.am b/include/Makefile.am index 324c082f4..bba8cdc13 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -3,4 +3,4 @@ noinst_HEADERS = bandplan.h num_stdio.h nobase_include_HEADERS = hamlib/rig.h hamlib/riglist.h hamlib/rig_dll.h \ hamlib/rotator.h hamlib/rotlist.h hamlib/rigclass.h \ hamlib/rotclass.h hamlib/amplifier.h hamlib/amplist.h \ - hamlib/ampclass.h hamlib/config.h hamlib/multicast.h + hamlib/ampclass.h hamlib/multicast.h commit c1f24b2f7adf062d3378fed01ba042e53e2654c1 Author: Mike Black W9MDB <mdb...@ya...> Date: Fri Aug 25 15:36:12 2023 -0500 Fix TS2000 SA command diff --git a/rigs/kenwood/kenwood.c b/rigs/kenwood/kenwood.c index 77480f5b3..883507a01 100644 --- a/rigs/kenwood/kenwood.c +++ b/rigs/kenwood/kenwood.c @@ -1262,7 +1262,7 @@ int kenwood_set_vfo(RIG *rig, vfo_t vfo) rig_debug(RIG_DEBUG_VERBOSE, "%s: checking satellite mode status\n", __func__); SNPRINTF(cmdbuf, sizeof(cmdbuf), "SA"); - retval = kenwood_transaction(rig, cmdbuf, retbuf, 4); + retval = kenwood_transaction(rig, cmdbuf, retbuf, 18); if (retval != RIG_OK) { @@ -5330,6 +5330,7 @@ int kenwood_send_morse(RIG *rig, vfo_t vfo, const char *msg) /* * kenwood_stop_morse + / */ int kenwood_stop_morse(RIG *rig, vfo_t vfo) { diff --git a/rigs/kenwood/kenwood.h b/rigs/kenwood/kenwood.h index 0fbaaa79f..33dafa3e7 100644 --- a/rigs/kenwood/kenwood.h +++ b/rigs/kenwood/kenwood.h @@ -28,7 +28,7 @@ #include "token.h" #include "idx_builtin.h" -#define BACKEND_VER "20230821" +#define BACKEND_VER "20230825" #define EOM_KEN ';' #define EOM_TH '\r' ----------------------------------------------------------------------- Summary of changes: include/Makefile.am | 2 +- rigs/icom/ic7300.c | 8 ++- rigs/icom/icom.c | 14 ++-- rigs/kenwood/kenwood.c | 3 +- rigs/kenwood/kenwood.h | 2 +- simulators/simic7300.c | 5 +- simulators/simic7851.c | 151 +++++++++++++++++++++++++++-------------- simulators/simic905.c | 178 ++++++++++++++++++++++++++++++++++--------------- src/serial.c | 2 +- 9 files changed, 247 insertions(+), 118 deletions(-) hooks/post-receive -- Hamlib -- Ham radio control libraries |