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