From 8d6e2fc781ab1e9aa9b82cd9a78af6d9486b8aa7 Mon Sep 17 00:00:00 2001 From: Michael Black Date: Fri, 17 Jan 2020 09:22:44 -0600 Subject: [PATCH] Directory migration to new layout --- Makefile.am | 12 +- README.developer | 122 +- configure.ac | 118 +- cppcheck.sh | 2 +- {gnuradio => extra/gnuradio}/HrAGC.h | 0 {gnuradio => extra/gnuradio}/Makefile.am | 0 {gnuradio => extra/gnuradio}/am.h | 0 {gnuradio => extra/gnuradio}/demod.h | 0 {gnuradio => extra/gnuradio}/gnuradio.cc | 0 {gnuradio => extra/gnuradio}/gnuradio.h | 0 {gnuradio => extra/gnuradio}/gr.c | 0 {gnuradio => extra/gnuradio}/gr_priv.h | 0 {gnuradio => extra/gnuradio}/graudio.c | 0 {gnuradio => extra/gnuradio}/mc4020.c | 0 {gnuradio => extra/gnuradio}/nfm.h | 0 {gnuradio => extra/gnuradio}/ssb.h | 0 {gnuradio => extra/gnuradio}/testgr.cc | 0 {gnuradio => extra/gnuradio}/wfm.h | 0 {kylix => extra/kylix}/HamlibComponents.pas | 0 {kylix => extra/kylix}/Makefile.am | 0 {kylix => extra/kylix}/README | 0 {kylix => extra/kylix}/hamlib_rigapi.pas | 0 {kylix => extra/kylix}/hamlib_rotapi.pas | 0 {kylix => extra/kylix}/tests/DemoProject.dpr | 0 {kylix => extra/kylix}/tests/DemoProject.res | Bin .../kylix}/tests/HamlibRadioForm.pas | 0 .../kylix}/tests/HamlibRadioForm.xfm | 0 .../kylix}/tests/HamlibSelectionDlg.pas | 0 .../kylix}/tests/HamlibSelectionDlg.xfm | 0 {kylix => extra/kylix}/tests/TestForm.pas | 0 {kylix => extra/kylix}/tests/TestForm.xfm | 0 icom/delta2.c | 168 - icom/frame.c | 606 -- icom/frame.h | 38 - icom/ic1275.c | 145 - icom/ic271.c | 155 - icom/ic2730.c | 211 - icom/ic275.c | 148 - icom/ic471.c | 154 - icom/ic475.c | 148 - icom/ic7000.c | 367 - icom/ic703.c | 228 - icom/ic706.c | 616 -- icom/ic707.c | 172 - icom/ic7100.c | 409 -- icom/ic718.c | 209 - icom/ic7200.c | 303 - icom/ic725.c | 168 - icom/ic726.c | 176 - icom/ic728.c | 170 - icom/ic7300.c | 726 -- icom/ic735.c | 174 - icom/ic736.c | 193 - icom/ic737.c | 184 - icom/ic738.c | 189 - icom/ic7410.c | 307 - icom/ic746.c | 1027 --- icom/ic751.c | 230 - icom/ic756.c | 1234 ---- icom/ic7600.c | 460 -- icom/ic761.c | 195 - icom/ic7610.c | 374 - icom/ic765.c | 190 - icom/ic7700.c | 359 - icom/ic775.c | 187 - icom/ic78.c | 190 - icom/ic7800.c | 407 -- icom/ic781.c | 194 - icom/ic785x.c | 365 - icom/ic820h.c | 178 - icom/ic821h.c | 178 - icom/ic910.c | 597 -- icom/ic9100.c | 323 - icom/ic92d.c | 255 - icom/ic970.c | 164 - icom/icom.c | 6052 ----------------- icom/icom.h | 345 - icom/icom_defs.h | 506 -- icom/icr10.c | 156 - icom/icr20.c | 162 - icom/icr30.c | 236 - icom/icr6.c | 173 - icom/icr7000.c | 321 - icom/icr71.c | 146 - icom/icr72.c | 161 - icom/icr75.c | 605 -- icom/icr8500.c | 224 - icom/icr8600.c | 329 - icom/icr9000.c | 207 - icom/icr9500.c | 220 - icom/icrx7.c | 152 - icom/id1.c | 201 - icom/id31.c | 205 - icom/id4100.c | 214 - icom/id51.c | 210 - icom/id5100.c | 214 - icom/omni.c | 277 - icom/optoscan.c | 837 --- icom/optoscan.h | 65 - icom/os456.c | 189 - icom/os535.c | 181 - icom/perseus.c | 212 - icom/x108g.c | 540 -- microtune/Makefile.am | 34 - microtune/i2c.cc | 146 - microtune/i2c.h | 66 - microtune/i2cio.cc | 33 - microtune/i2cio.h | 71 - microtune/i2cio_pp.cc | 94 - microtune/i2cio_pp.h | 56 - microtune/microtune.cc | 192 - microtune/microtune.h | 50 - microtune/microtune_4702.cc | 177 - microtune/microtune_4702.h | 59 - microtune/microtune_4937.cc | 134 - microtune/microtune_4937.h | 64 - microtune/microtune_eval_board.cc | 194 - microtune/microtune_eval_board.h | 105 - microtune/microtune_eval_board_defs.h | 71 - microtune/module_4702.c | 107 - microtune/module_4937.c | 113 - {adat => rigs/adat}/Android.mk | 0 {adat => rigs/adat}/Makefile.am | 0 {adat => rigs/adat}/adat.c | 0 {adat => rigs/adat}/adat.h | 0 {adat => rigs/adat}/adt_200a.c | 0 {adat => rigs/adat}/adt_200a.h | 0 {alinco => rigs/alinco}/Android.mk | 0 {alinco => rigs/alinco}/Makefile.am | 0 {alinco => rigs/alinco}/alinco.c | 0 {alinco => rigs/alinco}/alinco.h | 0 {alinco => rigs/alinco}/dx77.c | 0 {aor => rigs/aor}/Android.mk | 0 {aor => rigs/aor}/Makefile.am | 0 {aor => rigs/aor}/README.aor | 0 {aor => rigs/aor}/README.ar5000 | 0 {aor => rigs/aor}/README.ar7030 | 0 {aor => rigs/aor}/aor.c | 0 {aor => rigs/aor}/aor.h | 0 {aor => rigs/aor}/ar2700.c | 0 {aor => rigs/aor}/ar3000.c | 0 {aor => rigs/aor}/ar3030.c | 0 {aor => rigs/aor}/ar5000.c | 0 {aor => rigs/aor}/ar7030.c | 0 {aor => rigs/aor}/ar7030p.c | 0 {aor => rigs/aor}/ar7030p.h | 0 {aor => rigs/aor}/ar7030p_utils.c | 0 {aor => rigs/aor}/ar8000.c | 0 {aor => rigs/aor}/ar8200.c | 0 {aor => rigs/aor}/ar8600.c | 0 {aor => rigs/aor}/sr2200.c | 0 {barrett => rigs/barrett}/Android.mk | 0 {barrett => rigs/barrett}/Makefile.am | 0 {barrett => rigs/barrett}/README.barrett | 0 {barrett => rigs/barrett}/barrett.c | 0 {barrett => rigs/barrett}/barrett.h | 0 {dorji => rigs/dorji}/Android.mk | 0 {dorji => rigs/dorji}/Makefile.am | 0 {dorji => rigs/dorji}/dorji.c | 0 {dorji => rigs/dorji}/dorji.h | 0 {dorji => rigs/dorji}/dra818.c | 0 {dorji => rigs/dorji}/dra818.h | 0 {drake => rigs/drake}/Android.mk | 0 {drake => rigs/drake}/Makefile.am | 0 {drake => rigs/drake}/drake.c | 0 {drake => rigs/drake}/drake.h | 0 {drake => rigs/drake}/r8a.c | 0 {drake => rigs/drake}/r8b.c | 0 {elad => rigs/elad}/Android.mk | 0 {elad => rigs/elad}/Makefile.am | 0 {elad => rigs/elad}/elad.c | 0 {elad => rigs/elad}/elad.h | 0 {elad => rigs/elad}/fdm_duo.c | 0 {flexradio => rigs/flexradio}/Android.mk | 0 {flexradio => rigs/flexradio}/Makefile.am | 0 {flexradio => rigs/flexradio}/dttsp.c | 0 {flexradio => rigs/flexradio}/flexradio.c | 0 {flexradio => rigs/flexradio}/flexradio.h | 0 {flexradio => rigs/flexradio}/sdr1k.c | 0 {icmarine => rigs/icmarine}/Android.mk | 0 {icmarine => rigs/icmarine}/Makefile.am | 0 {icmarine => rigs/icmarine}/icm700pro.c | 0 {icmarine => rigs/icmarine}/icm710.c | 0 {icmarine => rigs/icmarine}/icm710.h | 0 {icmarine => rigs/icmarine}/icm802.c | 0 {icmarine => rigs/icmarine}/icmarine.c | 0 {icmarine => rigs/icmarine}/icmarine.h | 0 {icom => rigs/icom}/Android.mk | 0 {icom => rigs/icom}/Makefile.am | 0 {icom => rigs/icom}/README.icom | 0 {icom => rigs/icom}/TODO.icom | 0 {jrc => rigs/jrc}/Android.mk | 0 {jrc => rigs/jrc}/Makefile.am | 0 {jrc => rigs/jrc}/jrc.c | 0 {jrc => rigs/jrc}/jrc.h | 0 {jrc => rigs/jrc}/nrd525.c | 0 {jrc => rigs/jrc}/nrd535.c | 0 {jrc => rigs/jrc}/nrd545.c | 0 {kachina => rigs/kachina}/505dsp.c | 0 {kachina => rigs/kachina}/Android.mk | 0 {kachina => rigs/kachina}/Makefile.am | 0 {kachina => rigs/kachina}/kachina.c | 0 {kachina => rigs/kachina}/kachina.h | 0 {kenwood => rigs/kenwood}/Android.mk | 0 {kenwood => rigs/kenwood}/Makefile.am | 0 {kenwood => rigs/kenwood}/README.flex | 0 {kenwood => rigs/kenwood}/README.k2 | 0 {kenwood => rigs/kenwood}/README.k3 | 0 {kenwood => rigs/kenwood}/README.kenwood | 0 {kenwood => rigs/kenwood}/README.ts2k | 0 {kenwood => rigs/kenwood}/elecraft.c | 0 {kenwood => rigs/kenwood}/elecraft.h | 0 {kenwood => rigs/kenwood}/flex.c | 0 {kenwood => rigs/kenwood}/flex.h | 0 {kenwood => rigs/kenwood}/flex6xxx.c | 0 {kenwood => rigs/kenwood}/ic10.c | 0 {kenwood => rigs/kenwood}/ic10.h | 0 {kenwood => rigs/kenwood}/k2.c | 0 {kenwood => rigs/kenwood}/k3.c | 0 {kenwood => rigs/kenwood}/kenwood.c | 0 {kenwood => rigs/kenwood}/kenwood.h | 0 {kenwood => rigs/kenwood}/pihpsdr.c | 0 {kenwood => rigs/kenwood}/r5000.c | 0 {kenwood => rigs/kenwood}/th.c | 0 {kenwood => rigs/kenwood}/th.h | 0 {kenwood => rigs/kenwood}/thd7.c | 0 {kenwood => rigs/kenwood}/thd72.c | 0 {kenwood => rigs/kenwood}/thd74.c | 0 {kenwood => rigs/kenwood}/thf6a.c | 0 {kenwood => rigs/kenwood}/thf7.c | 0 {kenwood => rigs/kenwood}/thg71.c | 0 {kenwood => rigs/kenwood}/tmd700.c | 0 {kenwood => rigs/kenwood}/tmd710.c | 0 {kenwood => rigs/kenwood}/tmv7.c | 0 {kenwood => rigs/kenwood}/transfox.c | 0 {kenwood => rigs/kenwood}/trc80.c | 0 {kenwood => rigs/kenwood}/ts140.c | 0 {kenwood => rigs/kenwood}/ts2000.c | 0 {kenwood => rigs/kenwood}/ts2000.txt | 0 {kenwood => rigs/kenwood}/ts440.c | 0 {kenwood => rigs/kenwood}/ts450s.c | 0 {kenwood => rigs/kenwood}/ts480.c | 0 {kenwood => rigs/kenwood}/ts50s.c | 0 {kenwood => rigs/kenwood}/ts570.c | 0 {kenwood => rigs/kenwood}/ts590.c | 0 {kenwood => rigs/kenwood}/ts680.c | 0 {kenwood => rigs/kenwood}/ts690.c | 0 {kenwood => rigs/kenwood}/ts711.c | 0 {kenwood => rigs/kenwood}/ts790.c | 0 {kenwood => rigs/kenwood}/ts811.c | 0 {kenwood => rigs/kenwood}/ts850.c | 0 {kenwood => rigs/kenwood}/ts870s.c | 0 {kenwood => rigs/kenwood}/ts930.c | 0 {kenwood => rigs/kenwood}/ts940.c | 0 {kenwood => rigs/kenwood}/ts950.c | 0 {kenwood => rigs/kenwood}/ts990s.c | 0 {kenwood => rigs/kenwood}/ts990s.h | 0 {kenwood => rigs/kenwood}/xg3.c | 0 {kit => rigs/kit}/Android.mk | 0 {kit => rigs/kit}/Makefile.am | 0 {kit => rigs/kit}/README.funcubedongle | 0 {kit => rigs/kit}/dds60.c | 0 {kit => rigs/kit}/drt1.c | 0 {kit => rigs/kit}/dwt.c | 0 {kit => rigs/kit}/elektor304.c | 0 {kit => rigs/kit}/elektor507.c | 0 {kit => rigs/kit}/fifisdr.c | 0 {kit => rigs/kit}/funcube.c | 0 {kit => rigs/kit}/funcube.h | 0 {kit => rigs/kit}/hiqsdr.c | 0 {kit => rigs/kit}/kit.c | 0 {kit => rigs/kit}/kit.h | 0 {kit => rigs/kit}/miniVNA.c | 0 {kit => rigs/kit}/pcrotor.c | 0 {kit => rigs/kit}/rs_hfiq.c | 0 {kit => rigs/kit}/si570avrusb.c | 0 {kit => rigs/kit}/si570avrusb.h | 0 {kit => rigs/kit}/usrp.c | 0 {kit => rigs/kit}/usrp_impl.cc | 0 {kit => rigs/kit}/usrp_impl.h | 0 {lowe => rigs/lowe}/Android.mk | 0 {lowe => rigs/lowe}/Makefile.am | 0 {lowe => rigs/lowe}/hf235.c | 0 {lowe => rigs/lowe}/lowe.c | 0 {lowe => rigs/lowe}/lowe.h | 0 {pcr => rigs/pcr}/Android.mk | 0 {pcr => rigs/pcr}/Makefile.am | 0 {pcr => rigs/pcr}/pcr.c | 0 {pcr => rigs/pcr}/pcr.h | 0 {pcr => rigs/pcr}/pcr100.c | 0 {pcr => rigs/pcr}/pcr1000.c | 0 {pcr => rigs/pcr}/pcr1500.c | 0 {pcr => rigs/pcr}/pcr2500.c | 0 {prm80 => rigs/prm80}/Android.mk | 0 {prm80 => rigs/prm80}/Makefile.am | 0 {prm80 => rigs/prm80}/prm80.c | 0 {prm80 => rigs/prm80}/prm80.h | 0 {prm80 => rigs/prm80}/prm8060.c | 0 {racal => rigs/racal}/Android.mk | 0 {racal => rigs/racal}/Makefile.am | 0 {racal => rigs/racal}/ra3702.c | 0 {racal => rigs/racal}/ra37xx.c | 0 {racal => rigs/racal}/ra37xx.h | 0 {racal => rigs/racal}/ra6790.c | 0 {racal => rigs/racal}/racal.c | 0 {racal => rigs/racal}/racal.h | 0 {rft => rigs/rft}/Android.mk | 0 {rft => rigs/rft}/Makefile.am | 0 {rft => rigs/rft}/ekd500.c | 0 {rft => rigs/rft}/rft.c | 0 {rft => rigs/rft}/rft.h | 0 {rs => rigs/rs}/Android.mk | 0 {rs => rigs/rs}/Makefile.am | 0 {rs => rigs/rs}/eb200.c | 0 {rs => rigs/rs}/esmc.c | 0 {rs => rigs/rs}/gp2000.c | 0 {rs => rigs/rs}/gp2000.h | 0 {rs => rigs/rs}/rs.c | 0 {rs => rigs/rs}/rs.h | 0 {rs => rigs/rs}/xk2100.c | 0 {skanti => rigs/skanti}/Android.mk | 0 {skanti => rigs/skanti}/Makefile.am | 0 {skanti => rigs/skanti}/skanti.c | 0 {skanti => rigs/skanti}/skanti.h | 0 {skanti => rigs/skanti}/trp8000.c | 0 {skanti => rigs/skanti}/trp8255.c | 0 {tapr => rigs/tapr}/Android.mk | 0 {tapr => rigs/tapr}/Makefile.am | 0 {tapr => rigs/tapr}/dsp10.c | 0 {tapr => rigs/tapr}/tapr.c | 0 {tapr => rigs/tapr}/tapr.h | 0 {tentec => rigs/tentec}/Android.mk | 0 {tentec => rigs/tentec}/Makefile.am | 0 {tentec => rigs/tentec}/README | 0 {tentec => rigs/tentec}/argonaut.c | 0 {tentec => rigs/tentec}/jupiter.c | 0 {tentec => rigs/tentec}/omnivii.c | 0 {tentec => rigs/tentec}/orion.c | 0 {tentec => rigs/tentec}/orion.h | 0 {tentec => rigs/tentec}/paragon.c | 0 {tentec => rigs/tentec}/pegasus.c | 0 {tentec => rigs/tentec}/rx320.c | 0 {tentec => rigs/tentec}/rx331.c | 0 {tentec => rigs/tentec}/rx331.h | 0 {tentec => rigs/tentec}/rx340.c | 0 {tentec => rigs/tentec}/rx350.c | 0 {tentec => rigs/tentec}/tentec.c | 0 {tentec => rigs/tentec}/tentec.h | 0 {tentec => rigs/tentec}/tentec2.c | 0 {tentec => rigs/tentec}/tentec2.h | 0 {tentec => rigs/tentec}/tt550.c | 0 {tentec => rigs/tentec}/tt550.h | 0 {tuner => rigs/tuner}/Android.mk | 0 {tuner => rigs/tuner}/Makefile.am | 0 {tuner => rigs/tuner}/tuner.c | 0 {tuner => rigs/tuner}/tuner.h | 0 {tuner => rigs/tuner}/v4l.c | 0 {tuner => rigs/tuner}/v4l2.c | 0 {tuner => rigs/tuner}/videodev.h | 0 {tuner => rigs/tuner}/videodev2.h | 0 {uniden => rigs/uniden}/Android.mk | 0 {uniden => rigs/uniden}/Makefile.am | 0 {uniden => rigs/uniden}/bc245.c | 0 {uniden => rigs/uniden}/bc250.c | 0 {uniden => rigs/uniden}/bc780.c | 0 {uniden => rigs/uniden}/bc895.c | 0 {uniden => rigs/uniden}/bc898.c | 0 {uniden => rigs/uniden}/bcd396t.c | 0 {uniden => rigs/uniden}/bcd996t.c | 0 {uniden => rigs/uniden}/pro2052.c | 0 {uniden => rigs/uniden}/uniden.c | 0 {uniden => rigs/uniden}/uniden.h | 0 {uniden => rigs/uniden}/uniden_digital.c | 0 {uniden => rigs/uniden}/uniden_digital.h | 0 {winradio => rigs/winradio}/Android.mk | 0 {winradio => rigs/winradio}/Makefile.am | 0 {winradio => rigs/winradio}/NOTES | 0 {winradio => rigs/winradio}/g303.c | 0 {winradio => rigs/winradio}/g305.c | 0 {winradio => rigs/winradio}/g313-posix.c | 0 {winradio => rigs/winradio}/g313-win.c | 0 .../winradio}/linradio/radio_ioctl.h | 0 {winradio => rigs/winradio}/linradio/wrapi.h | 0 .../winradio}/linradio/wrg313api.c | 0 .../winradio}/linradio/wrg313api.h | 0 {winradio => rigs/winradio}/winradio.c | 0 {winradio => rigs/winradio}/winradio.h | 0 {winradio => rigs/winradio}/wr1000.c | 0 {winradio => rigs/winradio}/wr1500.c | 0 {winradio => rigs/winradio}/wr1550.c | 0 {winradio => rigs/winradio}/wr3100.c | 0 {winradio => rigs/winradio}/wr3150.c | 0 {winradio => rigs/winradio}/wr3500.c | 0 {winradio => rigs/winradio}/wr3700.c | 0 {wj => rigs/wj}/Android.mk | 0 {wj => rigs/wj}/Makefile.am | 0 {wj => rigs/wj}/wj.c | 0 {wj => rigs/wj}/wj.h | 0 {wj => rigs/wj}/wj8888.c | 0 {yaesu => rigs/yaesu}/Android.mk | 0 {yaesu => rigs/yaesu}/Makefile.am | 0 {yaesu => rigs/yaesu}/README.ft890 | 0 {yaesu => rigs/yaesu}/README.ft920 | 0 {yaesu => rigs/yaesu}/frg100.c | 0 {yaesu => rigs/yaesu}/frg100.h | 0 {yaesu => rigs/yaesu}/frg8800.c | 0 {yaesu => rigs/yaesu}/frg9600.c | 0 {yaesu => rigs/yaesu}/ft100.c | 0 {yaesu => rigs/yaesu}/ft100.h | 0 {yaesu => rigs/yaesu}/ft1000d.c | 0 {yaesu => rigs/yaesu}/ft1000d.h | 0 {yaesu => rigs/yaesu}/ft1000mp.c | 0 {yaesu => rigs/yaesu}/ft1000mp.h | 0 {yaesu => rigs/yaesu}/ft1200.c | 0 {yaesu => rigs/yaesu}/ft1200.h | 0 {yaesu => rigs/yaesu}/ft2000.c | 0 {yaesu => rigs/yaesu}/ft2000.h | 0 {yaesu => rigs/yaesu}/ft450.c | 0 {yaesu => rigs/yaesu}/ft450.h | 0 {yaesu => rigs/yaesu}/ft5000.c | 0 {yaesu => rigs/yaesu}/ft5000.h | 0 {yaesu => rigs/yaesu}/ft600.c | 0 {yaesu => rigs/yaesu}/ft600.h | 0 {yaesu => rigs/yaesu}/ft736.c | 0 {yaesu => rigs/yaesu}/ft747.c | 0 {yaesu => rigs/yaesu}/ft747.h | 0 {yaesu => rigs/yaesu}/ft757gx.c | 0 {yaesu => rigs/yaesu}/ft757gx.h | 0 {yaesu => rigs/yaesu}/ft767gx.c | 0 {yaesu => rigs/yaesu}/ft767gx.h | 0 {yaesu => rigs/yaesu}/ft817.c | 0 {yaesu => rigs/yaesu}/ft817.h | 0 {yaesu => rigs/yaesu}/ft840.c | 0 {yaesu => rigs/yaesu}/ft840.h | 0 {yaesu => rigs/yaesu}/ft847.c | 0 {yaesu => rigs/yaesu}/ft847.h | 0 {yaesu => rigs/yaesu}/ft857.c | 0 {yaesu => rigs/yaesu}/ft857.h | 0 {yaesu => rigs/yaesu}/ft890.c | 0 {yaesu => rigs/yaesu}/ft890.h | 0 {yaesu => rigs/yaesu}/ft891.c | 0 {yaesu => rigs/yaesu}/ft891.h | 0 {yaesu => rigs/yaesu}/ft897.c | 0 {yaesu => rigs/yaesu}/ft897.h | 0 {yaesu => rigs/yaesu}/ft900.c | 0 {yaesu => rigs/yaesu}/ft900.h | 0 {yaesu => rigs/yaesu}/ft9000.c | 0 {yaesu => rigs/yaesu}/ft9000.h | 0 {yaesu => rigs/yaesu}/ft920.c | 0 {yaesu => rigs/yaesu}/ft920.h | 0 {yaesu => rigs/yaesu}/ft950.c | 0 {yaesu => rigs/yaesu}/ft950.h | 0 {yaesu => rigs/yaesu}/ft980.c | 0 {yaesu => rigs/yaesu}/ft990.c | 0 {yaesu => rigs/yaesu}/ft990.h | 0 {yaesu => rigs/yaesu}/ft991.c | 0 {yaesu => rigs/yaesu}/ft991.h | 0 {yaesu => rigs/yaesu}/newcat.c | 0 {yaesu => rigs/yaesu}/newcat.h | 0 {yaesu => rigs/yaesu}/vr5000.c | 0 {yaesu => rigs/yaesu}/vx1700.c | 0 {yaesu => rigs/yaesu}/vx1700.h | 0 {yaesu => rigs/yaesu}/yaesu.c | 0 {yaesu => rigs/yaesu}/yaesu.h | 0 {amsat => rotators/amsat}/Android.mk | 0 {amsat => rotators/amsat}/Makefile.am | 0 {amsat => rotators/amsat}/if100.c | 0 {ars => rotators/ars}/Android.mk | 0 {ars => rotators/ars}/Makefile.am | 0 {ars => rotators/ars}/ars.c | 0 {ars => rotators/ars}/ars.h | 0 {celestron => rotators/celestron}/Android.mk | 0 {celestron => rotators/celestron}/Makefile.am | 0 {celestron => rotators/celestron}/celestron.c | 0 {celestron => rotators/celestron}/celestron.h | 0 {cnctrk => rotators/cnctrk}/Android.mk | 0 {cnctrk => rotators/cnctrk}/Makefile.am | 0 {cnctrk => rotators/cnctrk}/cnctrk.c | 0 {easycomm => rotators/easycomm}/Android.mk | 0 {easycomm => rotators/easycomm}/Makefile.am | 0 {easycomm => rotators/easycomm}/easycomm.c | 0 {easycomm => rotators/easycomm}/easycomm.h | 0 {easycomm => rotators/easycomm}/easycomm.txt | 0 {ether6 => rotators/ether6}/Android.mk | 0 {ether6 => rotators/ether6}/Makefile.am | 0 {ether6 => rotators/ether6}/README.ether6 | 0 {ether6 => rotators/ether6}/ether6.c | 0 {ether6 => rotators/ether6}/ether6.h | 0 {ether6 => rotators/ether6}/ether6.txt | 0 {fodtrack => rotators/fodtrack}/Android.mk | 0 {fodtrack => rotators/fodtrack}/Makefile.am | 0 {fodtrack => rotators/fodtrack}/fodtrack.c | 0 {fodtrack => rotators/fodtrack}/fodtrack.h | 0 {gs232a => rotators/gs232a}/Android.mk | 0 {gs232a => rotators/gs232a}/Makefile.am | 0 {gs232a => rotators/gs232a}/gs232.c | 0 {gs232a => rotators/gs232a}/gs232a.c | 0 {gs232a => rotators/gs232a}/gs232a.h | 0 {gs232a => rotators/gs232a}/gs232b.c | 0 {heathkit => rotators/heathkit}/Android.mk | 0 {heathkit => rotators/heathkit}/Makefile.am | 0 {heathkit => rotators/heathkit}/hd1780.c | 0 {heathkit => rotators/heathkit}/hd1780.h | 0 {ioptron => rotators/ioptron}/Android.mk | 0 {ioptron => rotators/ioptron}/Makefile.am | 0 {ioptron => rotators/ioptron}/README_ioptron | 0 {ioptron => rotators/ioptron}/rot_ioptron.c | 0 {ioptron => rotators/ioptron}/rot_ioptron.h | 0 {m2 => rotators/m2}/Android.mk | 0 {m2 => rotators/m2}/Makefile.am | 0 {m2 => rotators/m2}/rc2800.c | 0 {m2 => rotators/m2}/rc2800.h | 0 {meade => rotators/meade}/Android.mk | 0 {meade => rotators/meade}/Makefile.am | 0 {meade => rotators/meade}/README.md | 0 {meade => rotators/meade}/meade.c | 0 {meade => rotators/meade}/meade.h | 0 {prosistel => rotators/prosistel}/Android.mk | 0 {prosistel => rotators/prosistel}/Makefile.am | 0 {prosistel => rotators/prosistel}/prosistel.c | 0 {prosistel => rotators/prosistel}/prosistel.h | 0 {rotorez => rotators/rotorez}/Android.mk | 0 {rotorez => rotators/rotorez}/Makefile.am | 0 {rotorez => rotators/rotorez}/README.rotorez | 0 {rotorez => rotators/rotorez}/rotorez.c | 0 {rotorez => rotators/rotorez}/rotorez.h | 0 {rotorez => rotators/rotorez}/rotorez.txt | 0 {sartek => rotators/sartek}/Android.mk | 0 {sartek => rotators/sartek}/Makefile.am | 0 {sartek => rotators/sartek}/sartek.c | 0 {sartek => rotators/sartek}/sartek.h | 0 {spid => rotators/spid}/Android.mk | 0 {spid => rotators/spid}/Makefile.am | 0 {spid => rotators/spid}/spid.c | 0 {spid => rotators/spid}/spid.h | 0 {spid => rotators/spid}/spid.txt | 0 {ts7400 => rotators/ts7400}/Android.mk | 0 {ts7400 => rotators/ts7400}/Makefile.am | 0 .../ts7400}/include/ep93xx_adc.h | 0 {ts7400 => rotators/ts7400}/include/io.c | 0 {ts7400 => rotators/ts7400}/include/io.h | 0 .../ts7400}/include/peekpoke.c | 0 .../ts7400}/include/peekpoke.h | 0 {ts7400 => rotators/ts7400}/include/readADC.c | 0 {ts7400 => rotators/ts7400}/include/readADC.h | 0 .../ts7400}/include/test7400ADC.c | 0 {ts7400 => rotators/ts7400}/ts7400.c | 0 {ts7400 => rotators/ts7400}/ts7400.h | 0 src/Makefile.am | 4 +- 549 files changed, 144 insertions(+), 28691 deletions(-) rename {gnuradio => extra/gnuradio}/HrAGC.h (100%) rename {gnuradio => extra/gnuradio}/Makefile.am (100%) rename {gnuradio => extra/gnuradio}/am.h (100%) rename {gnuradio => extra/gnuradio}/demod.h (100%) rename {gnuradio => extra/gnuradio}/gnuradio.cc (100%) rename {gnuradio => extra/gnuradio}/gnuradio.h (100%) rename {gnuradio => extra/gnuradio}/gr.c (100%) rename {gnuradio => extra/gnuradio}/gr_priv.h (100%) rename {gnuradio => extra/gnuradio}/graudio.c (100%) rename {gnuradio => extra/gnuradio}/mc4020.c (100%) rename {gnuradio => extra/gnuradio}/nfm.h (100%) rename {gnuradio => extra/gnuradio}/ssb.h (100%) rename {gnuradio => extra/gnuradio}/testgr.cc (100%) rename {gnuradio => extra/gnuradio}/wfm.h (100%) rename {kylix => extra/kylix}/HamlibComponents.pas (100%) rename {kylix => extra/kylix}/Makefile.am (100%) rename {kylix => extra/kylix}/README (100%) rename {kylix => extra/kylix}/hamlib_rigapi.pas (100%) rename {kylix => extra/kylix}/hamlib_rotapi.pas (100%) rename {kylix => extra/kylix}/tests/DemoProject.dpr (100%) rename {kylix => extra/kylix}/tests/DemoProject.res (100%) rename {kylix => extra/kylix}/tests/HamlibRadioForm.pas (100%) rename {kylix => extra/kylix}/tests/HamlibRadioForm.xfm (100%) rename {kylix => extra/kylix}/tests/HamlibSelectionDlg.pas (100%) rename {kylix => extra/kylix}/tests/HamlibSelectionDlg.xfm (100%) rename {kylix => extra/kylix}/tests/TestForm.pas (100%) rename {kylix => extra/kylix}/tests/TestForm.xfm (100%) delete mode 100644 icom/delta2.c delete mode 100644 icom/frame.c delete mode 100644 icom/frame.h delete mode 100644 icom/ic1275.c delete mode 100644 icom/ic271.c delete mode 100644 icom/ic2730.c delete mode 100644 icom/ic275.c delete mode 100644 icom/ic471.c delete mode 100644 icom/ic475.c delete mode 100644 icom/ic7000.c delete mode 100644 icom/ic703.c delete mode 100644 icom/ic706.c delete mode 100644 icom/ic707.c delete mode 100644 icom/ic7100.c delete mode 100644 icom/ic718.c delete mode 100644 icom/ic7200.c delete mode 100644 icom/ic725.c delete mode 100644 icom/ic726.c delete mode 100644 icom/ic728.c delete mode 100644 icom/ic7300.c delete mode 100644 icom/ic735.c delete mode 100644 icom/ic736.c delete mode 100644 icom/ic737.c delete mode 100644 icom/ic738.c delete mode 100644 icom/ic7410.c delete mode 100644 icom/ic746.c delete mode 100644 icom/ic751.c delete mode 100644 icom/ic756.c delete mode 100644 icom/ic7600.c delete mode 100644 icom/ic761.c delete mode 100644 icom/ic7610.c delete mode 100644 icom/ic765.c delete mode 100644 icom/ic7700.c delete mode 100644 icom/ic775.c delete mode 100644 icom/ic78.c delete mode 100644 icom/ic7800.c delete mode 100644 icom/ic781.c delete mode 100644 icom/ic785x.c delete mode 100644 icom/ic820h.c delete mode 100644 icom/ic821h.c delete mode 100644 icom/ic910.c delete mode 100644 icom/ic9100.c delete mode 100644 icom/ic92d.c delete mode 100644 icom/ic970.c delete mode 100644 icom/icom.c delete mode 100644 icom/icom.h delete mode 100644 icom/icom_defs.h delete mode 100644 icom/icr10.c delete mode 100644 icom/icr20.c delete mode 100644 icom/icr30.c delete mode 100644 icom/icr6.c delete mode 100644 icom/icr7000.c delete mode 100644 icom/icr71.c delete mode 100644 icom/icr72.c delete mode 100644 icom/icr75.c delete mode 100644 icom/icr8500.c delete mode 100644 icom/icr8600.c delete mode 100644 icom/icr9000.c delete mode 100644 icom/icr9500.c delete mode 100644 icom/icrx7.c delete mode 100644 icom/id1.c delete mode 100644 icom/id31.c delete mode 100644 icom/id4100.c delete mode 100644 icom/id51.c delete mode 100644 icom/id5100.c delete mode 100644 icom/omni.c delete mode 100644 icom/optoscan.c delete mode 100644 icom/optoscan.h delete mode 100644 icom/os456.c delete mode 100644 icom/os535.c delete mode 100644 icom/perseus.c delete mode 100644 icom/x108g.c delete mode 100644 microtune/Makefile.am delete mode 100644 microtune/i2c.cc delete mode 100644 microtune/i2c.h delete mode 100644 microtune/i2cio.cc delete mode 100644 microtune/i2cio.h delete mode 100644 microtune/i2cio_pp.cc delete mode 100644 microtune/i2cio_pp.h delete mode 100644 microtune/microtune.cc delete mode 100644 microtune/microtune.h delete mode 100644 microtune/microtune_4702.cc delete mode 100644 microtune/microtune_4702.h delete mode 100644 microtune/microtune_4937.cc delete mode 100644 microtune/microtune_4937.h delete mode 100644 microtune/microtune_eval_board.cc delete mode 100644 microtune/microtune_eval_board.h delete mode 100644 microtune/microtune_eval_board_defs.h delete mode 100644 microtune/module_4702.c delete mode 100644 microtune/module_4937.c rename {adat => rigs/adat}/Android.mk (100%) rename {adat => rigs/adat}/Makefile.am (100%) rename {adat => rigs/adat}/adat.c (100%) rename {adat => rigs/adat}/adat.h (100%) rename {adat => rigs/adat}/adt_200a.c (100%) rename {adat => rigs/adat}/adt_200a.h (100%) rename {alinco => rigs/alinco}/Android.mk (100%) rename {alinco => rigs/alinco}/Makefile.am (100%) rename {alinco => rigs/alinco}/alinco.c (100%) rename {alinco => rigs/alinco}/alinco.h (100%) rename {alinco => rigs/alinco}/dx77.c (100%) rename {aor => rigs/aor}/Android.mk (100%) rename {aor => rigs/aor}/Makefile.am (100%) rename {aor => rigs/aor}/README.aor (100%) rename {aor => rigs/aor}/README.ar5000 (100%) rename {aor => rigs/aor}/README.ar7030 (100%) rename {aor => rigs/aor}/aor.c (100%) rename {aor => rigs/aor}/aor.h (100%) rename {aor => rigs/aor}/ar2700.c (100%) rename {aor => rigs/aor}/ar3000.c (100%) rename {aor => rigs/aor}/ar3030.c (100%) rename {aor => rigs/aor}/ar5000.c (100%) rename {aor => rigs/aor}/ar7030.c (100%) rename {aor => rigs/aor}/ar7030p.c (100%) rename {aor => rigs/aor}/ar7030p.h (100%) rename {aor => rigs/aor}/ar7030p_utils.c (100%) rename {aor => rigs/aor}/ar8000.c (100%) rename {aor => rigs/aor}/ar8200.c (100%) rename {aor => rigs/aor}/ar8600.c (100%) rename {aor => rigs/aor}/sr2200.c (100%) rename {barrett => rigs/barrett}/Android.mk (100%) rename {barrett => rigs/barrett}/Makefile.am (100%) rename {barrett => rigs/barrett}/README.barrett (100%) rename {barrett => rigs/barrett}/barrett.c (100%) rename {barrett => rigs/barrett}/barrett.h (100%) rename {dorji => rigs/dorji}/Android.mk (100%) rename {dorji => rigs/dorji}/Makefile.am (100%) rename {dorji => rigs/dorji}/dorji.c (100%) rename {dorji => rigs/dorji}/dorji.h (100%) rename {dorji => rigs/dorji}/dra818.c (100%) rename {dorji => rigs/dorji}/dra818.h (100%) rename {drake => rigs/drake}/Android.mk (100%) rename {drake => rigs/drake}/Makefile.am (100%) rename {drake => rigs/drake}/drake.c (100%) rename {drake => rigs/drake}/drake.h (100%) rename {drake => rigs/drake}/r8a.c (100%) rename {drake => rigs/drake}/r8b.c (100%) rename {elad => rigs/elad}/Android.mk (100%) rename {elad => rigs/elad}/Makefile.am (100%) rename {elad => rigs/elad}/elad.c (100%) rename {elad => rigs/elad}/elad.h (100%) rename {elad => rigs/elad}/fdm_duo.c (100%) rename {flexradio => rigs/flexradio}/Android.mk (100%) rename {flexradio => rigs/flexradio}/Makefile.am (100%) rename {flexradio => rigs/flexradio}/dttsp.c (100%) rename {flexradio => rigs/flexradio}/flexradio.c (100%) rename {flexradio => rigs/flexradio}/flexradio.h (100%) rename {flexradio => rigs/flexradio}/sdr1k.c (100%) rename {icmarine => rigs/icmarine}/Android.mk (100%) rename {icmarine => rigs/icmarine}/Makefile.am (100%) rename {icmarine => rigs/icmarine}/icm700pro.c (100%) rename {icmarine => rigs/icmarine}/icm710.c (100%) rename {icmarine => rigs/icmarine}/icm710.h (100%) rename {icmarine => rigs/icmarine}/icm802.c (100%) rename {icmarine => rigs/icmarine}/icmarine.c (100%) rename {icmarine => rigs/icmarine}/icmarine.h (100%) rename {icom => rigs/icom}/Android.mk (100%) rename {icom => rigs/icom}/Makefile.am (100%) rename {icom => rigs/icom}/README.icom (100%) rename {icom => rigs/icom}/TODO.icom (100%) rename {jrc => rigs/jrc}/Android.mk (100%) rename {jrc => rigs/jrc}/Makefile.am (100%) rename {jrc => rigs/jrc}/jrc.c (100%) rename {jrc => rigs/jrc}/jrc.h (100%) rename {jrc => rigs/jrc}/nrd525.c (100%) rename {jrc => rigs/jrc}/nrd535.c (100%) rename {jrc => rigs/jrc}/nrd545.c (100%) rename {kachina => rigs/kachina}/505dsp.c (100%) rename {kachina => rigs/kachina}/Android.mk (100%) rename {kachina => rigs/kachina}/Makefile.am (100%) rename {kachina => rigs/kachina}/kachina.c (100%) rename {kachina => rigs/kachina}/kachina.h (100%) rename {kenwood => rigs/kenwood}/Android.mk (100%) rename {kenwood => rigs/kenwood}/Makefile.am (100%) rename {kenwood => rigs/kenwood}/README.flex (100%) rename {kenwood => rigs/kenwood}/README.k2 (100%) rename {kenwood => rigs/kenwood}/README.k3 (100%) rename {kenwood => rigs/kenwood}/README.kenwood (100%) rename {kenwood => rigs/kenwood}/README.ts2k (100%) rename {kenwood => rigs/kenwood}/elecraft.c (100%) rename {kenwood => rigs/kenwood}/elecraft.h (100%) rename {kenwood => rigs/kenwood}/flex.c (100%) rename {kenwood => rigs/kenwood}/flex.h (100%) rename {kenwood => rigs/kenwood}/flex6xxx.c (100%) rename {kenwood => rigs/kenwood}/ic10.c (100%) rename {kenwood => rigs/kenwood}/ic10.h (100%) rename {kenwood => rigs/kenwood}/k2.c (100%) rename {kenwood => rigs/kenwood}/k3.c (100%) rename {kenwood => rigs/kenwood}/kenwood.c (100%) rename {kenwood => rigs/kenwood}/kenwood.h (100%) rename {kenwood => rigs/kenwood}/pihpsdr.c (100%) rename {kenwood => rigs/kenwood}/r5000.c (100%) rename {kenwood => rigs/kenwood}/th.c (100%) rename {kenwood => rigs/kenwood}/th.h (100%) rename {kenwood => rigs/kenwood}/thd7.c (100%) rename {kenwood => rigs/kenwood}/thd72.c (100%) rename {kenwood => rigs/kenwood}/thd74.c (100%) rename {kenwood => rigs/kenwood}/thf6a.c (100%) rename {kenwood => rigs/kenwood}/thf7.c (100%) rename {kenwood => rigs/kenwood}/thg71.c (100%) rename {kenwood => rigs/kenwood}/tmd700.c (100%) rename {kenwood => rigs/kenwood}/tmd710.c (100%) rename {kenwood => rigs/kenwood}/tmv7.c (100%) rename {kenwood => rigs/kenwood}/transfox.c (100%) rename {kenwood => rigs/kenwood}/trc80.c (100%) rename {kenwood => rigs/kenwood}/ts140.c (100%) rename {kenwood => rigs/kenwood}/ts2000.c (100%) rename {kenwood => rigs/kenwood}/ts2000.txt (100%) rename {kenwood => rigs/kenwood}/ts440.c (100%) rename {kenwood => rigs/kenwood}/ts450s.c (100%) rename {kenwood => rigs/kenwood}/ts480.c (100%) rename {kenwood => rigs/kenwood}/ts50s.c (100%) rename {kenwood => rigs/kenwood}/ts570.c (100%) rename {kenwood => rigs/kenwood}/ts590.c (100%) rename {kenwood => rigs/kenwood}/ts680.c (100%) rename {kenwood => rigs/kenwood}/ts690.c (100%) rename {kenwood => rigs/kenwood}/ts711.c (100%) rename {kenwood => rigs/kenwood}/ts790.c (100%) rename {kenwood => rigs/kenwood}/ts811.c (100%) rename {kenwood => rigs/kenwood}/ts850.c (100%) rename {kenwood => rigs/kenwood}/ts870s.c (100%) rename {kenwood => rigs/kenwood}/ts930.c (100%) rename {kenwood => rigs/kenwood}/ts940.c (100%) rename {kenwood => rigs/kenwood}/ts950.c (100%) rename {kenwood => rigs/kenwood}/ts990s.c (100%) rename {kenwood => rigs/kenwood}/ts990s.h (100%) rename {kenwood => rigs/kenwood}/xg3.c (100%) rename {kit => rigs/kit}/Android.mk (100%) rename {kit => rigs/kit}/Makefile.am (100%) rename {kit => rigs/kit}/README.funcubedongle (100%) rename {kit => rigs/kit}/dds60.c (100%) rename {kit => rigs/kit}/drt1.c (100%) rename {kit => rigs/kit}/dwt.c (100%) rename {kit => rigs/kit}/elektor304.c (100%) rename {kit => rigs/kit}/elektor507.c (100%) rename {kit => rigs/kit}/fifisdr.c (100%) rename {kit => rigs/kit}/funcube.c (100%) rename {kit => rigs/kit}/funcube.h (100%) rename {kit => rigs/kit}/hiqsdr.c (100%) rename {kit => rigs/kit}/kit.c (100%) rename {kit => rigs/kit}/kit.h (100%) rename {kit => rigs/kit}/miniVNA.c (100%) rename {kit => rigs/kit}/pcrotor.c (100%) rename {kit => rigs/kit}/rs_hfiq.c (100%) rename {kit => rigs/kit}/si570avrusb.c (100%) rename {kit => rigs/kit}/si570avrusb.h (100%) rename {kit => rigs/kit}/usrp.c (100%) rename {kit => rigs/kit}/usrp_impl.cc (100%) rename {kit => rigs/kit}/usrp_impl.h (100%) rename {lowe => rigs/lowe}/Android.mk (100%) rename {lowe => rigs/lowe}/Makefile.am (100%) rename {lowe => rigs/lowe}/hf235.c (100%) rename {lowe => rigs/lowe}/lowe.c (100%) rename {lowe => rigs/lowe}/lowe.h (100%) rename {pcr => rigs/pcr}/Android.mk (100%) rename {pcr => rigs/pcr}/Makefile.am (100%) rename {pcr => rigs/pcr}/pcr.c (100%) rename {pcr => rigs/pcr}/pcr.h (100%) rename {pcr => rigs/pcr}/pcr100.c (100%) rename {pcr => rigs/pcr}/pcr1000.c (100%) rename {pcr => rigs/pcr}/pcr1500.c (100%) rename {pcr => rigs/pcr}/pcr2500.c (100%) rename {prm80 => rigs/prm80}/Android.mk (100%) rename {prm80 => rigs/prm80}/Makefile.am (100%) rename {prm80 => rigs/prm80}/prm80.c (100%) rename {prm80 => rigs/prm80}/prm80.h (100%) rename {prm80 => rigs/prm80}/prm8060.c (100%) rename {racal => rigs/racal}/Android.mk (100%) rename {racal => rigs/racal}/Makefile.am (100%) rename {racal => rigs/racal}/ra3702.c (100%) rename {racal => rigs/racal}/ra37xx.c (100%) rename {racal => rigs/racal}/ra37xx.h (100%) rename {racal => rigs/racal}/ra6790.c (100%) rename {racal => rigs/racal}/racal.c (100%) rename {racal => rigs/racal}/racal.h (100%) rename {rft => rigs/rft}/Android.mk (100%) rename {rft => rigs/rft}/Makefile.am (100%) rename {rft => rigs/rft}/ekd500.c (100%) rename {rft => rigs/rft}/rft.c (100%) rename {rft => rigs/rft}/rft.h (100%) rename {rs => rigs/rs}/Android.mk (100%) rename {rs => rigs/rs}/Makefile.am (100%) rename {rs => rigs/rs}/eb200.c (100%) rename {rs => rigs/rs}/esmc.c (100%) rename {rs => rigs/rs}/gp2000.c (100%) rename {rs => rigs/rs}/gp2000.h (100%) rename {rs => rigs/rs}/rs.c (100%) rename {rs => rigs/rs}/rs.h (100%) rename {rs => rigs/rs}/xk2100.c (100%) rename {skanti => rigs/skanti}/Android.mk (100%) rename {skanti => rigs/skanti}/Makefile.am (100%) rename {skanti => rigs/skanti}/skanti.c (100%) rename {skanti => rigs/skanti}/skanti.h (100%) rename {skanti => rigs/skanti}/trp8000.c (100%) rename {skanti => rigs/skanti}/trp8255.c (100%) rename {tapr => rigs/tapr}/Android.mk (100%) rename {tapr => rigs/tapr}/Makefile.am (100%) rename {tapr => rigs/tapr}/dsp10.c (100%) rename {tapr => rigs/tapr}/tapr.c (100%) rename {tapr => rigs/tapr}/tapr.h (100%) rename {tentec => rigs/tentec}/Android.mk (100%) rename {tentec => rigs/tentec}/Makefile.am (100%) rename {tentec => rigs/tentec}/README (100%) rename {tentec => rigs/tentec}/argonaut.c (100%) rename {tentec => rigs/tentec}/jupiter.c (100%) rename {tentec => rigs/tentec}/omnivii.c (100%) rename {tentec => rigs/tentec}/orion.c (100%) rename {tentec => rigs/tentec}/orion.h (100%) rename {tentec => rigs/tentec}/paragon.c (100%) rename {tentec => rigs/tentec}/pegasus.c (100%) rename {tentec => rigs/tentec}/rx320.c (100%) rename {tentec => rigs/tentec}/rx331.c (100%) rename {tentec => rigs/tentec}/rx331.h (100%) rename {tentec => rigs/tentec}/rx340.c (100%) rename {tentec => rigs/tentec}/rx350.c (100%) rename {tentec => rigs/tentec}/tentec.c (100%) rename {tentec => rigs/tentec}/tentec.h (100%) rename {tentec => rigs/tentec}/tentec2.c (100%) rename {tentec => rigs/tentec}/tentec2.h (100%) rename {tentec => rigs/tentec}/tt550.c (100%) rename {tentec => rigs/tentec}/tt550.h (100%) rename {tuner => rigs/tuner}/Android.mk (100%) rename {tuner => rigs/tuner}/Makefile.am (100%) rename {tuner => rigs/tuner}/tuner.c (100%) rename {tuner => rigs/tuner}/tuner.h (100%) rename {tuner => rigs/tuner}/v4l.c (100%) rename {tuner => rigs/tuner}/v4l2.c (100%) rename {tuner => rigs/tuner}/videodev.h (100%) rename {tuner => rigs/tuner}/videodev2.h (100%) rename {uniden => rigs/uniden}/Android.mk (100%) rename {uniden => rigs/uniden}/Makefile.am (100%) rename {uniden => rigs/uniden}/bc245.c (100%) rename {uniden => rigs/uniden}/bc250.c (100%) rename {uniden => rigs/uniden}/bc780.c (100%) rename {uniden => rigs/uniden}/bc895.c (100%) rename {uniden => rigs/uniden}/bc898.c (100%) rename {uniden => rigs/uniden}/bcd396t.c (100%) rename {uniden => rigs/uniden}/bcd996t.c (100%) rename {uniden => rigs/uniden}/pro2052.c (100%) rename {uniden => rigs/uniden}/uniden.c (100%) rename {uniden => rigs/uniden}/uniden.h (100%) rename {uniden => rigs/uniden}/uniden_digital.c (100%) rename {uniden => rigs/uniden}/uniden_digital.h (100%) rename {winradio => rigs/winradio}/Android.mk (100%) rename {winradio => rigs/winradio}/Makefile.am (100%) rename {winradio => rigs/winradio}/NOTES (100%) rename {winradio => rigs/winradio}/g303.c (100%) rename {winradio => rigs/winradio}/g305.c (100%) rename {winradio => rigs/winradio}/g313-posix.c (100%) rename {winradio => rigs/winradio}/g313-win.c (100%) rename {winradio => rigs/winradio}/linradio/radio_ioctl.h (100%) rename {winradio => rigs/winradio}/linradio/wrapi.h (100%) rename {winradio => rigs/winradio}/linradio/wrg313api.c (100%) rename {winradio => rigs/winradio}/linradio/wrg313api.h (100%) rename {winradio => rigs/winradio}/winradio.c (100%) rename {winradio => rigs/winradio}/winradio.h (100%) rename {winradio => rigs/winradio}/wr1000.c (100%) rename {winradio => rigs/winradio}/wr1500.c (100%) rename {winradio => rigs/winradio}/wr1550.c (100%) rename {winradio => rigs/winradio}/wr3100.c (100%) rename {winradio => rigs/winradio}/wr3150.c (100%) rename {winradio => rigs/winradio}/wr3500.c (100%) rename {winradio => rigs/winradio}/wr3700.c (100%) rename {wj => rigs/wj}/Android.mk (100%) rename {wj => rigs/wj}/Makefile.am (100%) rename {wj => rigs/wj}/wj.c (100%) rename {wj => rigs/wj}/wj.h (100%) rename {wj => rigs/wj}/wj8888.c (100%) rename {yaesu => rigs/yaesu}/Android.mk (100%) rename {yaesu => rigs/yaesu}/Makefile.am (100%) rename {yaesu => rigs/yaesu}/README.ft890 (100%) rename {yaesu => rigs/yaesu}/README.ft920 (100%) rename {yaesu => rigs/yaesu}/frg100.c (100%) rename {yaesu => rigs/yaesu}/frg100.h (100%) rename {yaesu => rigs/yaesu}/frg8800.c (100%) rename {yaesu => rigs/yaesu}/frg9600.c (100%) rename {yaesu => rigs/yaesu}/ft100.c (100%) rename {yaesu => rigs/yaesu}/ft100.h (100%) rename {yaesu => rigs/yaesu}/ft1000d.c (100%) rename {yaesu => rigs/yaesu}/ft1000d.h (100%) rename {yaesu => rigs/yaesu}/ft1000mp.c (100%) rename {yaesu => rigs/yaesu}/ft1000mp.h (100%) rename {yaesu => rigs/yaesu}/ft1200.c (100%) rename {yaesu => rigs/yaesu}/ft1200.h (100%) rename {yaesu => rigs/yaesu}/ft2000.c (100%) rename {yaesu => rigs/yaesu}/ft2000.h (100%) rename {yaesu => rigs/yaesu}/ft450.c (100%) rename {yaesu => rigs/yaesu}/ft450.h (100%) rename {yaesu => rigs/yaesu}/ft5000.c (100%) rename {yaesu => rigs/yaesu}/ft5000.h (100%) rename {yaesu => rigs/yaesu}/ft600.c (100%) rename {yaesu => rigs/yaesu}/ft600.h (100%) rename {yaesu => rigs/yaesu}/ft736.c (100%) rename {yaesu => rigs/yaesu}/ft747.c (100%) rename {yaesu => rigs/yaesu}/ft747.h (100%) rename {yaesu => rigs/yaesu}/ft757gx.c (100%) rename {yaesu => rigs/yaesu}/ft757gx.h (100%) rename {yaesu => rigs/yaesu}/ft767gx.c (100%) rename {yaesu => rigs/yaesu}/ft767gx.h (100%) rename {yaesu => rigs/yaesu}/ft817.c (100%) rename {yaesu => rigs/yaesu}/ft817.h (100%) rename {yaesu => rigs/yaesu}/ft840.c (100%) rename {yaesu => rigs/yaesu}/ft840.h (100%) rename {yaesu => rigs/yaesu}/ft847.c (100%) rename {yaesu => rigs/yaesu}/ft847.h (100%) rename {yaesu => rigs/yaesu}/ft857.c (100%) rename {yaesu => rigs/yaesu}/ft857.h (100%) rename {yaesu => rigs/yaesu}/ft890.c (100%) rename {yaesu => rigs/yaesu}/ft890.h (100%) rename {yaesu => rigs/yaesu}/ft891.c (100%) rename {yaesu => rigs/yaesu}/ft891.h (100%) rename {yaesu => rigs/yaesu}/ft897.c (100%) rename {yaesu => rigs/yaesu}/ft897.h (100%) rename {yaesu => rigs/yaesu}/ft900.c (100%) rename {yaesu => rigs/yaesu}/ft900.h (100%) rename {yaesu => rigs/yaesu}/ft9000.c (100%) rename {yaesu => rigs/yaesu}/ft9000.h (100%) rename {yaesu => rigs/yaesu}/ft920.c (100%) rename {yaesu => rigs/yaesu}/ft920.h (100%) rename {yaesu => rigs/yaesu}/ft950.c (100%) rename {yaesu => rigs/yaesu}/ft950.h (100%) rename {yaesu => rigs/yaesu}/ft980.c (100%) rename {yaesu => rigs/yaesu}/ft990.c (100%) rename {yaesu => rigs/yaesu}/ft990.h (100%) rename {yaesu => rigs/yaesu}/ft991.c (100%) rename {yaesu => rigs/yaesu}/ft991.h (100%) rename {yaesu => rigs/yaesu}/newcat.c (100%) rename {yaesu => rigs/yaesu}/newcat.h (100%) rename {yaesu => rigs/yaesu}/vr5000.c (100%) rename {yaesu => rigs/yaesu}/vx1700.c (100%) rename {yaesu => rigs/yaesu}/vx1700.h (100%) rename {yaesu => rigs/yaesu}/yaesu.c (100%) rename {yaesu => rigs/yaesu}/yaesu.h (100%) rename {amsat => rotators/amsat}/Android.mk (100%) rename {amsat => rotators/amsat}/Makefile.am (100%) rename {amsat => rotators/amsat}/if100.c (100%) rename {ars => rotators/ars}/Android.mk (100%) rename {ars => rotators/ars}/Makefile.am (100%) rename {ars => rotators/ars}/ars.c (100%) rename {ars => rotators/ars}/ars.h (100%) rename {celestron => rotators/celestron}/Android.mk (100%) rename {celestron => rotators/celestron}/Makefile.am (100%) rename {celestron => rotators/celestron}/celestron.c (100%) rename {celestron => rotators/celestron}/celestron.h (100%) rename {cnctrk => rotators/cnctrk}/Android.mk (100%) rename {cnctrk => rotators/cnctrk}/Makefile.am (100%) rename {cnctrk => rotators/cnctrk}/cnctrk.c (100%) rename {easycomm => rotators/easycomm}/Android.mk (100%) rename {easycomm => rotators/easycomm}/Makefile.am (100%) rename {easycomm => rotators/easycomm}/easycomm.c (100%) rename {easycomm => rotators/easycomm}/easycomm.h (100%) rename {easycomm => rotators/easycomm}/easycomm.txt (100%) rename {ether6 => rotators/ether6}/Android.mk (100%) rename {ether6 => rotators/ether6}/Makefile.am (100%) rename {ether6 => rotators/ether6}/README.ether6 (100%) rename {ether6 => rotators/ether6}/ether6.c (100%) rename {ether6 => rotators/ether6}/ether6.h (100%) rename {ether6 => rotators/ether6}/ether6.txt (100%) rename {fodtrack => rotators/fodtrack}/Android.mk (100%) rename {fodtrack => rotators/fodtrack}/Makefile.am (100%) rename {fodtrack => rotators/fodtrack}/fodtrack.c (100%) rename {fodtrack => rotators/fodtrack}/fodtrack.h (100%) rename {gs232a => rotators/gs232a}/Android.mk (100%) rename {gs232a => rotators/gs232a}/Makefile.am (100%) rename {gs232a => rotators/gs232a}/gs232.c (100%) rename {gs232a => rotators/gs232a}/gs232a.c (100%) rename {gs232a => rotators/gs232a}/gs232a.h (100%) rename {gs232a => rotators/gs232a}/gs232b.c (100%) rename {heathkit => rotators/heathkit}/Android.mk (100%) rename {heathkit => rotators/heathkit}/Makefile.am (100%) rename {heathkit => rotators/heathkit}/hd1780.c (100%) rename {heathkit => rotators/heathkit}/hd1780.h (100%) rename {ioptron => rotators/ioptron}/Android.mk (100%) rename {ioptron => rotators/ioptron}/Makefile.am (100%) rename {ioptron => rotators/ioptron}/README_ioptron (100%) rename {ioptron => rotators/ioptron}/rot_ioptron.c (100%) rename {ioptron => rotators/ioptron}/rot_ioptron.h (100%) rename {m2 => rotators/m2}/Android.mk (100%) rename {m2 => rotators/m2}/Makefile.am (100%) rename {m2 => rotators/m2}/rc2800.c (100%) rename {m2 => rotators/m2}/rc2800.h (100%) rename {meade => rotators/meade}/Android.mk (100%) rename {meade => rotators/meade}/Makefile.am (100%) rename {meade => rotators/meade}/README.md (100%) rename {meade => rotators/meade}/meade.c (100%) rename {meade => rotators/meade}/meade.h (100%) rename {prosistel => rotators/prosistel}/Android.mk (100%) rename {prosistel => rotators/prosistel}/Makefile.am (100%) rename {prosistel => rotators/prosistel}/prosistel.c (100%) rename {prosistel => rotators/prosistel}/prosistel.h (100%) rename {rotorez => rotators/rotorez}/Android.mk (100%) rename {rotorez => rotators/rotorez}/Makefile.am (100%) rename {rotorez => rotators/rotorez}/README.rotorez (100%) rename {rotorez => rotators/rotorez}/rotorez.c (100%) rename {rotorez => rotators/rotorez}/rotorez.h (100%) rename {rotorez => rotators/rotorez}/rotorez.txt (100%) rename {sartek => rotators/sartek}/Android.mk (100%) rename {sartek => rotators/sartek}/Makefile.am (100%) rename {sartek => rotators/sartek}/sartek.c (100%) rename {sartek => rotators/sartek}/sartek.h (100%) rename {spid => rotators/spid}/Android.mk (100%) rename {spid => rotators/spid}/Makefile.am (100%) rename {spid => rotators/spid}/spid.c (100%) rename {spid => rotators/spid}/spid.h (100%) rename {spid => rotators/spid}/spid.txt (100%) rename {ts7400 => rotators/ts7400}/Android.mk (100%) rename {ts7400 => rotators/ts7400}/Makefile.am (100%) rename {ts7400 => rotators/ts7400}/include/ep93xx_adc.h (100%) rename {ts7400 => rotators/ts7400}/include/io.c (100%) rename {ts7400 => rotators/ts7400}/include/io.h (100%) rename {ts7400 => rotators/ts7400}/include/peekpoke.c (100%) rename {ts7400 => rotators/ts7400}/include/peekpoke.h (100%) rename {ts7400 => rotators/ts7400}/include/readADC.c (100%) rename {ts7400 => rotators/ts7400}/include/readADC.h (100%) rename {ts7400 => rotators/ts7400}/include/test7400ADC.c (100%) rename {ts7400 => rotators/ts7400}/ts7400.c (100%) rename {ts7400 => rotators/ts7400}/ts7400.h (100%) diff --git a/Makefile.am b/Makefile.am index 44b1f175d..fd1076170 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,19 +14,17 @@ doc_DATA = ChangeLog COPYING COPYING.LIB LICENSE \ SUBDIRS = macros include lib \ $(BACKEND_LIST) \ + $(RIG_BACKEND_LIST) \ $(ROT_BACKEND_LIST) \ $(AMP_BACKEND_LIST) \ src \ $(BINDINGS) \ tests doc -## Static list of distributed directories. $(BACKEND_LIST) is dynamically -## assigned by 'configure' so list rig backends statically. -DIST_SUBDIRS = macros include lib src c++ bindings tests doc android scripts\ - adat alinco aor barrett drake dorji dummy elad flexradio icom icmarine jrc\ - kachina kenwood kit lowe pcr prm80 racal rft rs skanti tapr tentec\ - tuner uniden wj yaesu winradio\ - $(ROT_BACKEND_LIST) $(AMP_BACKEND_LIST) +## Static list of distributed directories. +DIST_SUBDIRS = macros include lib src dummy c++ bindings tests doc android\ + scripts \ + $(BACKEND_LIST) $(RIG_BACKEND_LIST) $(ROT_BACKEND_LIST) $(AMP_BACKEND_LIST) # Install any third party macros into our tree for distribution ACLOCAL_AMFLAGS = -I macros --install diff --git a/README.developer b/README.developer index 40989368a..30e788264 100644 --- a/README.developer +++ b/README.developer @@ -38,75 +38,89 @@ utility), and USB. Other connectivity will follow afterwards. General Guidelines. ------------------- -0. The top level directory looks like this as of 07 May 2013 -(Note, it has grown considerably). +0. The top level directory looks like this as of 2020-01-163 $ tree -d -I .git . -├── adat -├── alinco -├── amsat +├── amplifiers +│   └── elecraft ├── android -├── aor -├── ars +├── autom4te.cache ├── bindings +├── build-aux ├── c++ -├── celestron ├── doc -├── drake +│   ├── man1 +│   └── man7 ├── dummy -├── easycomm -├── flexradio -├── fodtrack -├── gnuradio -├── gs232a -├── heathkit -├── icom +├── extra +│   ├── gnuradio +│   └── kylix +│   └── tests ├── include -│ └── hamlib -├── jrc -├── kachina -├── kenwood -├── kit -├── kylix -│ └── tests +│   └── hamlib ├── lib -├── lowe -├── m2 ├── macros -├── microtune -├── miniVNA -├── pcr ├── perl -├── prm80 -├── racal -├── rft -├── rotorez -├── rs -├── sartek +├── rigs +│   ├── adat +│   ├── alinco +│   ├── aor +│   ├── barrett +│   ├── dorji +│   ├── drake +│   ├── elad +│   ├── flexradio +│   ├── icmarine +│   ├── icom +│   ├── jrc +│   ├── kachina +│   ├── kenwood +│   ├── kit +│   ├── lowe +│   ├── pcr +│   ├── prm80 +│   ├── racal +│   ├── rft +│   ├── rs +│   ├── skanti +│   ├── tapr +│   ├── tentec +│   ├── tuner +│   ├── uniden +│   ├── winradio +│   │   └── linradio +│   ├── wj +│   └── yaesu +├── rotators +│   ├── amsat +│   ├── ars +│   ├── celestron +│   ├── cnctrk +│   ├── easycomm +│   ├── ether6 +│   ├── fodtrack +│   ├── gs232a +│   ├── heathkit +│   ├── ioptron +│   ├── m2 +│   ├── meade +│   ├── prosistel +│   ├── rotorez +│   ├── sartek +│   ├── spid +│   └── ts7400 +│   └── include ├── scripts -├── skanti -├── spid ├── src -├── tapr -├── tentec -├── tests -│ ├── config -│ ├── rigctl.test -│ ├── testbcd.test -│ ├── testfreq.test -│ └── testloc.test -├── ts7400 -│ └── include -├── tuner -├── uniden -├── winradio -│ └── linradio -├── wj -└── yaesu - -61 directories +└── tests + ├── config + ├── rigctl.test + ├── testbcd.test + ├── testfreq.test + └── testloc.test +77 directories 1. Building diff --git a/configure.ac b/configure.ac index 7646bf2d9..4ea53d9f0 100644 --- a/configure.ac +++ b/configure.ac @@ -51,8 +51,9 @@ dnl added to AC_CONFIG_FILES near the end of this file. See README.developer dnl Beware of duplication should a backend directory include both rig and dnl rotor definitions, e.g. "dummy". Optional backends will not be listed dnl here but will be added later, e.g. "winradio". -BACKEND_LIST="adat alinco aor barrett dorji drake dummy elad flexradio icom icmarine jrc kachina kenwood kit lowe pcr prm80 racal rft rs skanti tapr tentec tuner uniden wj yaesu" -ROT_BACKEND_LIST="amsat ars celestron cnctrk easycomm ether6 fodtrack gs232a heathkit m2 meade rotorez sartek spid ts7400 prosistel ioptron" +BACKEND_LIST="dummy" +RIG_BACKEND_LIST="rigs/adat rigs/alinco rigs/aor rigs/barrett rigs/dorji rigs/drake rigs/elad rigs/flexradio rigs/icom rigs/icmarine rigs/jrc rigs/kachina rigs/kenwood rigs/kit rigs/lowe rigs/pcr rigs/prm80 rigs/racal rigs/rft rigs/rs rigs/skanti rigs/tapr rigs/tentec rigs/tuner rigs/uniden rigs/wj rigs/yaesu" +ROT_BACKEND_LIST="rotators/amsat rotators/ars rotators/celestron rotators/cnctrk rotators/easycomm rotators/ether6 rotators/fodtrack rotators/gs232a rotators/heathkit rotators/m2 rotators/meade rotators/rotorez rotators/sartek rotators/spid rotators/ts7400 rotators/prosistel rotators/ioptron" # Amplifiers are all in the amplifiers directory AMP_BACKEND_LIST="amplifiers/elecraft" @@ -653,7 +654,7 @@ AC_MSG_RESULT([$cf_with_winradio]) DL_LIBS="" AS_IF([test x"${cf_with_winradio}" = "xyes"], - [BACKEND_LIST="$BACKEND_LIST winradio" + [RIGS_BACKEND_LIST="$RIGS_BACKEND_LIST rigs/winradio" dnl Check for libdl and set DL_LIBS if found--used for linradio WR-G313 backend. AC_CHECK_LIB([dl], [dlopen], [DL_LIBS="-ldl"], [AC_MSG_WARN([dlopen was not found in libdl--linradio backend will be disabled])]) @@ -704,6 +705,10 @@ AM_CONDITIONAL([HAVE_USRP], [test x"${cf_with_usrp}" = "xyes"]) dnl otherwise parallel 'make -jn' will fail +## ---------------------------------- ## +## Prepare toplevel backend dependencies ## +## ---------------------------------- ## + for be in ${BACKEND_LIST} ; do BACKENDEPS="${BACKENDEPS} \$(top_builddir)/${be}/libhamlib-${be}.la" done @@ -711,6 +716,18 @@ done AC_SUBST([BACKEND_LIST]) AC_SUBST([BACKENDEPS]) +## ---------------------------------- ## +## Prepare rig backend dependencies ## +## ---------------------------------- ## + +for be in ${RIG_BACKEND_LIST} ; do + RIGDIR=`echo $be | awk -F "/" '{print $2}'` + RIG_BACKENDEPS="${RIG_BACKENDEPS} \$(top_builddir)/rigs/${RIGDIR}/libhamlib-${RIGDIR}.la" +done + +AC_SUBST([RIG_BACKEND_LIST]) +AC_SUBST([RIG_BACKENDEPS]) + ## ---------------------------------- ## ## Prepare rotor backend dependencies ## @@ -719,7 +736,8 @@ AC_SUBST([BACKENDEPS]) # otherwise parallel 'make -jn' will fail for be in ${ROT_BACKEND_LIST} ; do - ROT_BACKENDEPS="${ROT_BACKENDEPS} \$(top_builddir)/${be}/libhamlib-${be}.la" + ROTDIR=`echo $be | awk -F "/" '{print $2}'` + ROT_BACKENDEPS="${ROT_BACKENDEPS} \$(top_builddir)/rotators/${ROTDIR}/libhamlib-${ROTDIR}.la" done AC_SUBST([ROT_BACKEND_LIST]) @@ -756,59 +774,59 @@ macros/Makefile include/Makefile lib/Makefile dummy/Makefile -elad/Makefile -yaesu/Makefile -icom/Makefile -icmarine/Makefile -aor/Makefile -kenwood/Makefile -winradio/Makefile -pcr/Makefile -alinco/Makefile -uniden/Makefile -tentec/Makefile -kachina/Makefile -jrc/Makefile -drake/Makefile -lowe/Makefile -rft/Makefile -rs/Makefile -kit/Makefile -tapr/Makefile -skanti/Makefile -prm80/Makefile -wj/Makefile -racal/Makefile -tuner/Makefile -ars/Makefile -easycomm/Makefile -fodtrack/Makefile -gs232a/Makefile -heathkit/Makefile -spid/Makefile -sartek/Makefile src/Makefile c++/Makefile bindings/Makefile -tests/Makefile doc/Makefile doc/hamlib.cfg -rotorez/Makefile -flexradio/Makefile -m2/Makefile -amsat/Makefile -adat/Makefile -ts7400/Makefile -celestron/Makefile -cnctrk/Makefile -ether6/Makefile +rotators/amsat/Makefile +rotators/ars/Makefile +rotators/celestron/Makefile +rotators/cnctrk/Makefile +rotators/easycomm/Makefile +rotators/ether6/Makefile +rotators/fodtrack/Makefile +rotators/gs232a/Makefile +rotators/heathkit/Makefile +rotators/ioptron/Makefile +rotators/m2/Makefile +rotators/meade/Makefile +rotators/prosistel/Makefile +rotators/rotorez/Makefile +rotators/sartek/Makefile +rotators/spid/Makefile +rotators/ts7400/Makefile +rigs/adat/Makefile +rigs/alinco/Makefile +rigs/aor/Makefile +rigs/barrett/Makefile +rigs/dorji/Makefile +rigs/drake/Makefile +rigs/elad/Makefile +rigs/flexradio/Makefile +rigs/icmarine/Makefile +rigs/icom/Makefile +rigs/jrc/Makefile +rigs/kachina/Makefile +rigs/kenwood/Makefile +rigs/kit/Makefile +rigs/lowe/Makefile +rigs/pcr/Makefile +rigs/prm80/Makefile +rigs/racal/Makefile +rigs/rft/Makefile +rigs/rs/Makefile +rigs/skanti/Makefile +rigs/tapr/Makefile +rigs/tentec/Makefile +rigs/tuner/Makefile +rigs/uniden/Makefile +rigs/winradio/Makefile +rigs/wj/Makefile +rigs/yaesu/Makefile +tests/Makefile scripts/Makefile android/Makefile -prosistel/Makefile -dorji/Makefile -barrett/Makefile -meade/Makefile -ioptron/Makefile amplifiers/elecraft/Makefile hamlib.pc ]) diff --git a/cppcheck.sh b/cppcheck.sh index 9834a08da..c8028fb9e 100755 --- a/cppcheck.sh +++ b/cppcheck.sh @@ -6,6 +6,6 @@ echo "As of cppcheck v1.90 should be one message about missing include files" echo "This takes several minutes to run" # We do suppress some errors which are expected or other code # There are quite a few C++ items to take care of still if anybody cares -SUPPRESS="-i bindings -i lib/getopt.c -i lib/getopt_long.c --suppress=*:gnuradio/demod.h --suppress=*:gnuradio/HrAGC.h --suppress=*:gnuradio/nfm.h --suppress=*:gnuradio/am.h --suppress=*:gnuradio/ssb.h --suppress=*:gnuradio/wfm.h --suppress=*:gnuradio/wfm.h --suppress=*:microtune/i2c.h --suppress=*:microtune/i2cio.h --suppress=*:microtune/i2cio_pp.h --suppress=*:microtune/microtune_4702.h --suppress=*:microtune/microtune_4937.h --suppress=*:microtune/microtune_eval_board.h -i microtune/microtune_eval_board.cc --suppress=*:gnuradio/HrAGC.h --suppress=knownConditionTrueFalse:tests/rotctl.c --suppress=knownConditionTrueFalse:tests/rigctl.c --suppress=knownConditionTrueFalse:tests/ampctl.c --suppress=knownConditionTrueFalse:tests/rotctl_parse.c --suppress=knownConditionTrueFalse:tests/rigctl_parse.c --suppress=knownConditionTrueFalse:tests/ampctl_parse.c" +SUPPRESS="-i bindings -i lib/getopt.c -i lib/getopt_long.c --suppress=*:extra/gnuradio/demod.h --suppress=*:extra/gnuradio/HrAGC.h --suppress=*:extra/gnuradio/nfm.h --suppress=*:extra/gnuradio/am.h --suppress=*:extra/gnuradio/ssb.h --suppress=*:extra/gnuradio/wfm.h --suppress=*:extra/gnuradio/wfm.h --suppress=*:extra/gnuradio/HrAGC.h --suppress=knownConditionTrueFalse:tests/rotctl.c --suppress=knownConditionTrueFalse:tests/rigctl.c --suppress=knownConditionTrueFalse:tests/ampctl.c --suppress=knownConditionTrueFalse:tests/rotctl_parse.c --suppress=knownConditionTrueFalse:tests/rigctl_parse.c --suppress=knownConditionTrueFalse:tests/ampctl_parse.c" CHECK="-D RIG_LEVEL_LINEOUT=1 -D SIGPIPE -D SIGINT -D IPV6_V6ONLY -D RIG_MODE_WFM -D ABI_VERSION=4 -D F_SETSIG=1 -U O_ASYNC -U SA_SIGINFO -U HASH_BLOOM -U HASH_EMIT_KEYS -U HASH_FUNCTION -U __USEP5P6__" cppcheck -q --force --enable=all --std=c99 $SUPPRESS $CHECK . &>cppcheck.log diff --git a/gnuradio/HrAGC.h b/extra/gnuradio/HrAGC.h similarity index 100% rename from gnuradio/HrAGC.h rename to extra/gnuradio/HrAGC.h diff --git a/gnuradio/Makefile.am b/extra/gnuradio/Makefile.am similarity index 100% rename from gnuradio/Makefile.am rename to extra/gnuradio/Makefile.am diff --git a/gnuradio/am.h b/extra/gnuradio/am.h similarity index 100% rename from gnuradio/am.h rename to extra/gnuradio/am.h diff --git a/gnuradio/demod.h b/extra/gnuradio/demod.h similarity index 100% rename from gnuradio/demod.h rename to extra/gnuradio/demod.h diff --git a/gnuradio/gnuradio.cc b/extra/gnuradio/gnuradio.cc similarity index 100% rename from gnuradio/gnuradio.cc rename to extra/gnuradio/gnuradio.cc diff --git a/gnuradio/gnuradio.h b/extra/gnuradio/gnuradio.h similarity index 100% rename from gnuradio/gnuradio.h rename to extra/gnuradio/gnuradio.h diff --git a/gnuradio/gr.c b/extra/gnuradio/gr.c similarity index 100% rename from gnuradio/gr.c rename to extra/gnuradio/gr.c diff --git a/gnuradio/gr_priv.h b/extra/gnuradio/gr_priv.h similarity index 100% rename from gnuradio/gr_priv.h rename to extra/gnuradio/gr_priv.h diff --git a/gnuradio/graudio.c b/extra/gnuradio/graudio.c similarity index 100% rename from gnuradio/graudio.c rename to extra/gnuradio/graudio.c diff --git a/gnuradio/mc4020.c b/extra/gnuradio/mc4020.c similarity index 100% rename from gnuradio/mc4020.c rename to extra/gnuradio/mc4020.c diff --git a/gnuradio/nfm.h b/extra/gnuradio/nfm.h similarity index 100% rename from gnuradio/nfm.h rename to extra/gnuradio/nfm.h diff --git a/gnuradio/ssb.h b/extra/gnuradio/ssb.h similarity index 100% rename from gnuradio/ssb.h rename to extra/gnuradio/ssb.h diff --git a/gnuradio/testgr.cc b/extra/gnuradio/testgr.cc similarity index 100% rename from gnuradio/testgr.cc rename to extra/gnuradio/testgr.cc diff --git a/gnuradio/wfm.h b/extra/gnuradio/wfm.h similarity index 100% rename from gnuradio/wfm.h rename to extra/gnuradio/wfm.h diff --git a/kylix/HamlibComponents.pas b/extra/kylix/HamlibComponents.pas similarity index 100% rename from kylix/HamlibComponents.pas rename to extra/kylix/HamlibComponents.pas diff --git a/kylix/Makefile.am b/extra/kylix/Makefile.am similarity index 100% rename from kylix/Makefile.am rename to extra/kylix/Makefile.am diff --git a/kylix/README b/extra/kylix/README similarity index 100% rename from kylix/README rename to extra/kylix/README diff --git a/kylix/hamlib_rigapi.pas b/extra/kylix/hamlib_rigapi.pas similarity index 100% rename from kylix/hamlib_rigapi.pas rename to extra/kylix/hamlib_rigapi.pas diff --git a/kylix/hamlib_rotapi.pas b/extra/kylix/hamlib_rotapi.pas similarity index 100% rename from kylix/hamlib_rotapi.pas rename to extra/kylix/hamlib_rotapi.pas diff --git a/kylix/tests/DemoProject.dpr b/extra/kylix/tests/DemoProject.dpr similarity index 100% rename from kylix/tests/DemoProject.dpr rename to extra/kylix/tests/DemoProject.dpr diff --git a/kylix/tests/DemoProject.res b/extra/kylix/tests/DemoProject.res similarity index 100% rename from kylix/tests/DemoProject.res rename to extra/kylix/tests/DemoProject.res diff --git a/kylix/tests/HamlibRadioForm.pas b/extra/kylix/tests/HamlibRadioForm.pas similarity index 100% rename from kylix/tests/HamlibRadioForm.pas rename to extra/kylix/tests/HamlibRadioForm.pas diff --git a/kylix/tests/HamlibRadioForm.xfm b/extra/kylix/tests/HamlibRadioForm.xfm similarity index 100% rename from kylix/tests/HamlibRadioForm.xfm rename to extra/kylix/tests/HamlibRadioForm.xfm diff --git a/kylix/tests/HamlibSelectionDlg.pas b/extra/kylix/tests/HamlibSelectionDlg.pas similarity index 100% rename from kylix/tests/HamlibSelectionDlg.pas rename to extra/kylix/tests/HamlibSelectionDlg.pas diff --git a/kylix/tests/HamlibSelectionDlg.xfm b/extra/kylix/tests/HamlibSelectionDlg.xfm similarity index 100% rename from kylix/tests/HamlibSelectionDlg.xfm rename to extra/kylix/tests/HamlibSelectionDlg.xfm diff --git a/kylix/tests/TestForm.pas b/extra/kylix/tests/TestForm.pas similarity index 100% rename from kylix/tests/TestForm.pas rename to extra/kylix/tests/TestForm.pas diff --git a/kylix/tests/TestForm.xfm b/extra/kylix/tests/TestForm.xfm similarity index 100% rename from kylix/tests/TestForm.xfm rename to extra/kylix/tests/TestForm.xfm diff --git a/icom/delta2.c b/icom/delta2.c deleted file mode 100644 index 28bed4799..000000000 --- a/icom/delta2.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Hamlib CI-V backend - description of the TenTenc DeltaII - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - * Delta II (aka TT 536) cloned after Omni VI. - * Needs RS-232 Serial Level Converter Model 305 or equivalent. - * - * For changing CI-V address of the rig, see: - * http://www.tentecwiki.org/doku.php?id=536addr - */ - -/* Known problems: - * - * To Do: get the datasheet, and testing on real hardware!! - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" - -#define DELTAII_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define DELTAII_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define DELTAII_ALL_RX_MODES (DELTAII_OTHER_TX_MODES|RIG_MODE_AM) - -#define DELTAII_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) -#define DELTAII_STR_CAL { 0, { } } - - -static const struct icom_priv_caps delta2_priv_caps = -{ - 0x01, /* default address */ - 1, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list /* TODO: ts_sc_list */ -}; - -const struct rig_caps delta2_caps = -{ - .rig_model = RIG_MODEL_DELTAII, - .model_name = "Delta II", - .mfg_name = "Ten-Tec", - .version = "0.1", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = DELTAII_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .str_cal = DELTAII_STR_CAL, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - /* TODO: 32 simplex, 16 duplex */ - { 0, 47, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - .rx_range_list1 = { - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - /* These limits measured on Omni VI SN 1A10473 */ - .rx_range_list2 = { - {kHz(100), kHz(29999), DELTAII_ALL_RX_MODES, -1, -1, DELTAII_VFO_ALL}, - RIG_FRNG_END, - }, - - /* Note: There is no AM mode. */ - .tx_range_list2 = { - {kHz(1800), MHz(2) - 1, DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {kHz(3500), MHz(4) - 1, DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {MHz(7), kHz(7300), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {kHz(10100), kHz(10150), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {MHz(14), kHz(14350), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {kHz(18068), kHz(18168), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {MHz(21), kHz(21450), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {kHz(24890), kHz(24990), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - {MHz(28), kHz(29700), DELTAII_OTHER_TX_MODES, 5000, 100000, DELTAII_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {DELTAII_ALL_RX_MODES, Hz(10)}, // This radio has 10 Hz steps. - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! - */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& delta2_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, // icom.c has no get_vfo - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, -}; - - diff --git a/icom/frame.c b/icom/frame.c deleted file mode 100644 index dee31df56..000000000 --- a/icom/frame.c +++ /dev/null @@ -1,606 +0,0 @@ -/* - * Hamlib CI-V backend - low level communication routines - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ -#include /* UNIX standard function definitions */ - -#include "hamlib/rig.h" -#include "serial.h" -#include "misc.h" -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - -/* - * Build a CI-V frame. - * The whole frame is placed in frame[], - * "re_id" is the transceiver's CI-V address, - * "cmd" is the Command number, - * "subcmd" is the Sub command number, set to -1 if not present in frame, - * if the frame has no data, then the "data" pointer must be NULL, - * and data_len==0. - * "data_len" holds the Data area length pointed by the "data" pointer. - * REM: if "data" is NULL, then "data_len" MUST be 0. - * - * NB: the frame array must be big enough to hold the frame. - * The smallest frame is 6 bytes, the biggest is at least 13 bytes. - */ -int make_cmd_frame(char frame[], char re_id, char ctrl_id, char cmd, int subcmd, - const unsigned char *data, int data_len) -{ - int i = 0; - -#if 0 - frame[i++] = PAD; /* give old rigs a chance to flush their rx buffers */ -#endif - frame[i++] = PR; /* Preamble code */ - frame[i++] = PR; - frame[i++] = re_id; - frame[i++] = ctrl_id; - frame[i++] = cmd; - - if (subcmd != -1) - { -#ifdef MULTIB_SUBCMD - register int j; - - if ((j = subcmd & 0xff0000)) /* allows multi-byte subcmd for dsp rigs */ - { - frame[i++] = j >> 16; - frame[i++] = (subcmd & 0xff00) >> 8; - } - else if ((j = subcmd & 0xff00)) { frame[i++] = j >> 8; } - -#endif - frame[i++] = subcmd & 0xff; - } - - if (data_len != 0) - { - memcpy(frame + i, data, data_len); - i += data_len; - } - - frame[i++] = FI; /* EOM code */ - - return i; -} - -/* - * icom_one_transaction - * - * We assume that rig!=NULL, rig->state!= NULL, payload!=NULL, data!=NULL, data_len!=NULL - * Otherwise, you'll get a nice seg fault. You've been warned! - * payload can be NULL if payload_len == 0 - * subcmd can be equal to -1 (no subcmd wanted) - * if no answer is to be expected, data_len must be set to NULL to tell so - * - * return RIG_OK if transaction completed, - * or a negative value otherwise indicating the error. - */ -int icom_one_transaction(RIG *rig, int cmd, int subcmd, - const unsigned char *payload, int payload_len, unsigned char *data, - int *data_len) -{ - struct icom_priv_data *priv; - const struct icom_priv_caps *priv_caps; - struct rig_state *rs; - // this buf needs to be large enough for 0xfe strings for power up - // at 115,200 this is now at least 150 - unsigned char buf[200]; - unsigned char sendbuf[MAXFRAMELEN]; - int frm_len, retval; - int ctrl_id; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - priv_caps = (struct icom_priv_caps *)rig->caps->priv; - - ctrl_id = priv_caps->serial_full_duplex == 0 ? CTRLID : 0x80; - - frm_len = make_cmd_frame((char *) sendbuf, priv->re_civ_addr, ctrl_id, cmd, - subcmd, payload, payload_len); - - /* - * should check return code and that write wrote cmd_len chars! - */ - Hold_Decode(rig); - - serial_flush(&rs->rigport); - - retval = write_block(&rs->rigport, (char *) sendbuf, frm_len); - - if (retval != RIG_OK) - { - Unhold_Decode(rig); - return retval; - } - - if (!priv_caps->serial_full_duplex && !priv->serial_USB_echo_off) - { - - /* - * read what we just sent, because TX and RX are looped, - * and discard it... - * - if what we read is not what we sent, then it means - * a collision on the CI-V bus occured! - * - if we get a timeout, then retry to send the frame, - * up to rs->retry times. - */ - - retval = read_icom_frame(&rs->rigport, buf, sizeof(buf)); - - if (retval == -RIG_ETIMEOUT || retval == 0) - { - /* Nothing recieved, CI-V interface is not echoing */ - Unhold_Decode(rig); - return -RIG_BUSERROR; - } - - if (retval < 0) - { - /* Other error, return it */ - Unhold_Decode(rig); - return retval; - } - - if (retval < 1) - { - return -RIG_EPROTO; - } - - switch (buf[retval - 1]) - { - case COL: - /* Collision */ - Unhold_Decode(rig); - return -RIG_BUSBUSY; - - case FI: - /* Ok, normal frame */ - break; - - default: - /* Timeout after reading at least one character */ - /* Problem on ci-v bus? */ - Unhold_Decode(rig); - return -RIG_BUSERROR; - } - - if (retval != frm_len) - { - /* Not the same length??? */ - /* Problem on ci-v bus? */ - /* Someone else got a packet in? */ - Unhold_Decode(rig); - return -RIG_EPROTO; - } - - if (memcmp(buf, sendbuf, frm_len)) - { - /* Frames are different? */ - /* Problem on ci-v bus? */ - /* Someone else got a packet in? */ - Unhold_Decode(rig); - return -RIG_EPROTO; - } - } - - /* - * expect an answer? - */ - if (data_len == NULL) - { - Unhold_Decode(rig); - return RIG_OK; - } - - /* - * wait for ACK ... - * FIXME: handle pading/collisions - * ACKFRMLEN is the smallest frame we can expect from the rig - */ - frm_len = read_icom_frame(&rs->rigport, buf, sizeof(buf)); - - if (memcmp(buf, sendbuf, frm_len) == 0 && priv->serial_USB_echo_off) - { - // Hmmm -- got an echo back when not expected so let's change - priv->serial_USB_echo_off = 0; - // And try again - frm_len = read_icom_frame(&rs->rigport, buf, sizeof(buf)); - } - - Unhold_Decode(rig); - - if (frm_len < 0) - { - /* RIG_TIMEOUT: timeout getting response, return timeout */ - /* other error: return it */ - return frm_len; - } - - if (frm_len < 1) - { - return -RIG_EPROTO; - } - - switch (buf[frm_len - 1]) - { - case COL: - /* Collision */ - return -RIG_BUSBUSY; - - case FI: - /* Ok, normal frame */ - break; - - default: - /* Timeout after reading at least one character */ - /* Problem on ci-v bus? */ - return -RIG_EPROTO; - } - - if (frm_len < ACKFRMLEN) { return -RIG_EPROTO; } - - if (NAK == buf[frm_len - 2]) { return -RIG_ERJCTED; } - - *data_len = frm_len - (ACKFRMLEN - 1); - memcpy(data, buf + 4, *data_len); - - /* - * TODO: check addresses in reply frame - */ - - return RIG_OK; -} - -/* - * icom_transaction - * - * This function honors rigport.retry count. - * - * We assume that rig!=NULL, rig->state!= NULL, payload!=NULL, data!=NULL, data_len!=NULL - * Otherwise, you'll get a nice seg fault. You've been warned! - * payload can be NULL if payload_len == 0 - * subcmd can be equal to -1 (no subcmd wanted) - * - * return RIG_OK if transaction completed, - * or a negative value otherwise indicating the error. - */ -int icom_transaction(RIG *rig, int cmd, int subcmd, - const unsigned char *payload, int payload_len, unsigned char *data, - int *data_len) -{ - int retval, retry; - - retry = rig->state.rigport.retry; - - do - { - retval = icom_one_transaction(rig, cmd, subcmd, payload, payload_len, data, - data_len); - - if (retval == RIG_OK || retval == -RIG_ERJCTED) - { - break; - } - hl_usleep(500*1000); // pause a half second - } - while (retry-- > 0); - - if (retval != RIG_OK) - { - rig_debug(RIG_DEBUG_VERBOSE, "%s: failed: %s\n", __func__, strerror(retval)); - } - - return retval; -} - -/* used in read_icom_frame as end of block */ -static const char icom_block_end[2] = {FI, COL}; -#define icom_block_end_length 2 - -/* - * read_icom_frame - * read a whole CI-V frame (until 0xfd is encountered) - * TODO: strips padding/collisions - * FIXME: check return codes/bytes read - */ -int read_icom_frame(hamlib_port_t *p, unsigned char rxbuffer[], - int rxbuffer_len) -{ - int read = 0; - int retries = 10; - char *rx_ptr = (char *)rxbuffer; - - /* - * OK, now sometimes we may time out, e.g. the IC7000 can time out - * during a PTT operation. So, we will insure that the last thing we - * read was a proper end marker - if not, we will try again. - */ - do - { - int i = read_string(p, rx_ptr, MAXFRAMELEN - read, - icom_block_end, icom_block_end_length); - - if (i < 0) /* die on errors */ - { - return i; - } - - if (i == 0) /* nothing read?*/ - { - if (--retries <= 0) /* Tried enough times? */ - { - return read; - } - } - - /* OK, we got something. add it in and continue */ - read += i; - rx_ptr += i; - } - while ((read < rxbuffer_len) && (rxbuffer[read - 1] != FI) - && (rxbuffer[read - 1] != COL)); - - return read; -} - - -/* - * convert mode and width as expressed by Hamlib frontend - * to mode and passband data understandable by a CI-V rig - * - * if pd == -1, no passband data is to be sent - * - * return RIG_OK if everything's fine, negative value otherwise - * - * TODO: be more exhaustive - * assumes rig!=NULL - */ -int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) -{ - unsigned char icmode; - signed char icmode_ext; - pbwidth_t medium_width; - - icmode_ext = -1; - - switch (mode) - { - case RIG_MODE_AM: icmode = S_AM; break; - - case RIG_MODE_AMN: icmode = S_AMN; break; - - case RIG_MODE_AMS: icmode = S_AMS; break; - - case RIG_MODE_CW: icmode = S_CW; break; - - case RIG_MODE_CWR: icmode = S_CWR; break; - - case RIG_MODE_USB: icmode = S_USB; break; - - case RIG_MODE_PKTUSB: icmode = S_USB; break; - - case RIG_MODE_LSB: icmode = S_LSB; break; - - case RIG_MODE_PKTLSB: icmode = S_LSB; break; - - case RIG_MODE_RTTY: icmode = S_RTTY; break; - - case RIG_MODE_RTTYR: icmode = S_RTTYR; break; - - case RIG_MODE_PSK: icmode = S_PSK; break; - - case RIG_MODE_PSKR: icmode = S_PSKR; break; - - case RIG_MODE_FM: icmode = S_FM; break; - - case RIG_MODE_FMN: icmode = S_FMN; break; - - case RIG_MODE_WFM: icmode = S_WFM; break; - - case RIG_MODE_P25: icmode = S_P25; break; - - case RIG_MODE_DSTAR: icmode = S_DSTAR; break; - - case RIG_MODE_DPMR: icmode = S_DPMR; break; - - case RIG_MODE_NXDNVN: icmode = S_NXDNVN; break; - - case RIG_MODE_NXDN_N: icmode = S_NXDN_N; break; - - case RIG_MODE_DCR: icmode = S_DCR; break; - - case RIG_MODE_DD: icmode = S_DD; break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: Unsupported Hamlib mode %s\n", __func__, - rig_strrmode(mode)); - return -RIG_EINVAL; - } - - if (width != RIG_PASSBAND_NOCHANGE) - { - medium_width = rig_passband_normal(rig, mode); - - if (width == medium_width || width == RIG_PASSBAND_NORMAL) - { - icmode_ext = - -1; /* medium, no passband data-> rig default. Is medium always the default? */ - } - else if (width < medium_width) - { - icmode_ext = PD_NARROW_3; - } - else - { - icmode_ext = PD_WIDE_3; - } - - if (rig->caps->rig_model == RIG_MODEL_ICR7000) - { - if (mode == RIG_MODE_USB || mode == RIG_MODE_LSB) - { - icmode = S_R7000_SSB; - icmode_ext = 0x00; - } - else if (mode == RIG_MODE_AM && icmode_ext == -1) - { - icmode_ext = PD_WIDE_3; /* default to Wide */ - } - } - } - - *md = icmode; - *pd = icmode_ext; - return RIG_OK; -} - -/* - * assumes rig!=NULL, mode!=NULL, width!=NULL - */ -void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, - pbwidth_t *width) -{ - *width = RIG_PASSBAND_NORMAL; - - switch (md) - { - case S_AM: if (rig->caps->rig_model == RIG_MODEL_ICR30 && pd == 0x02) - { - *mode = RIG_MODE_AMN; - } - else - { - *mode = RIG_MODE_AM; - } break; - - case S_AMS: *mode = RIG_MODE_AMS; break; - - case S_CW: *mode = RIG_MODE_CW; break; - - case S_CWR: *mode = RIG_MODE_CWR; break; - - case S_FM: if (rig->caps->rig_model == RIG_MODEL_ICR7000 - && pd == 0x00) - { - *mode = RIG_MODE_USB; - *width = rig_passband_normal(rig, RIG_MODE_USB); - return; - } - else if (rig->caps->rig_model == RIG_MODEL_ICR30 && pd == 0x02) - { - *mode = RIG_MODE_FMN; - } - else - { - *mode = RIG_MODE_FM; - } break; - - case S_WFM: *mode = RIG_MODE_WFM; break; - - case S_USB: *mode = RIG_MODE_USB; break; - - case S_LSB: *mode = RIG_MODE_LSB; break; - - case S_RTTY: *mode = RIG_MODE_RTTY; break; - - case S_RTTYR: *mode = RIG_MODE_RTTYR; break; - - case S_PSK: *mode = RIG_MODE_PSK; break; - - case S_PSKR: *mode = RIG_MODE_PSKR; break; - - case S_DSTAR: *mode = RIG_MODE_DSTAR; break; - - case S_P25: *mode = RIG_MODE_P25; break; - - case S_DPMR: *mode = RIG_MODE_DPMR; break; - - case S_NXDNVN: *mode = RIG_MODE_NXDNVN; break; - - case S_NXDN_N: *mode = RIG_MODE_NXDN_N; break; - - case S_DCR: *mode = RIG_MODE_DCR; break; - - case 0xff: *mode = RIG_MODE_NONE; break; /* blank mem channel */ - - default: - rig_debug(RIG_DEBUG_ERR, "icom: Unsupported Icom mode %#.2x\n", - md); - *mode = RIG_MODE_NONE; - } - - /* Most rigs return 1-wide, 2-narrow; or if it has 3 filters: 1-wide, 2-middle, - 3-narrow. (Except for the 706 mkIIg 0-wide, 1-middle, 2-narrow.) For DSP - rigs these are presets, which can be programmed for 30 - 41 bandwidths, - depending on mode */ - - if (rig->caps->rig_model == RIG_MODEL_IC706MKIIG || - rig->caps->rig_model == RIG_MODEL_IC706 || - rig->caps->rig_model == RIG_MODEL_IC706MKII) { pd++; } - - switch (pd) - { - case 0x01: - - /* if no wide filter defined it's the default */ - if (!(*width = rig_passband_wide(rig, *mode))) - { - *width = rig_passband_normal(rig, *mode); - } - - break; - - case 0x02: - if ((*width = rig_passband_wide(rig, *mode))) - { - *width = rig_passband_normal(rig, *mode); - } - else - /* This really just depends on how you program the table. */ - { - *width = rig_passband_narrow(rig, *mode); - } - - break; - - case 0x03: - *width = rig_passband_narrow(rig, *mode); - break; - - case -1: - break; /* no passband data */ - - default: - rig_debug(RIG_DEBUG_ERR, "icom: Unsupported Icom mode width %#.2x\n", pd); - } - - return ; -} - diff --git a/icom/frame.h b/icom/frame.h deleted file mode 100644 index 23b7e3bde..000000000 --- a/icom/frame.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Hamlib CI-V backend - low level communication header - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef _FRAME_H -#define _FRAME_H 1 - -#define MAXFRAMELEN 56 - -/* - * helper functions - */ -int make_cmd_frame(char frame[], char re_id, char ctrl_id, char cmd, int subcmd, const unsigned char *data, int data_len); - -int icom_transaction (RIG *rig, int cmd, int subcmd, const unsigned char *payload, int payload_len, unsigned char *data, int *data_len); -int read_icom_frame(hamlib_port_t *p, unsigned char rxbuffer[], int rxbuffer_len); - -int rig2icom_mode(RIG *rig, rmode_t mode, pbwidth_t width, unsigned char *md, signed char *pd); -void icom2rig_mode(RIG *rig, unsigned char md, int pd, rmode_t *mode, pbwidth_t *width); - -#endif /* _FRAME_H */ diff --git a/icom/ic1275.c b/icom/ic1275.c deleted file mode 100644 index 64c5f7288..000000000 --- a/icom/ic1275.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-1275 and variations - * Copyright (c) 2000-2012 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - - -#define IC1275_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define IC1275_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC1275_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - - -static const struct icom_priv_caps ic1275_priv_caps = -{ - 0x18, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic1275_caps = -{ - .rig_model = RIG_MODEL_IC1275, - .model_name = "IC-1275", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC1275_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - { 102, 102, RIG_MTYPE_CALL, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {MHz(1240), MHz(1300), IC1275_MODES, -1, -1, IC1275_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { {MHz(1240), MHz(1300), IC1275_MODES, W(1), W(10), IC1275_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { {MHz(1240), MHz(1300), IC1275_MODES, -1, -1, IC1275_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { {MHz(1240), MHz(1300), IC1275_MODES, W(1), W(10), IC1275_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC1275_MODES, 10}, /* TBC: does this rig supports settin tuning step? */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.3)}, - {RIG_MODE_CW, Hz(500)}, /* optional FL-83 CW narrow filter */ - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic1275_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic271.c b/icom/ic271.c deleted file mode 100644 index 3fc3cae2f..000000000 --- a/icom/ic271.c +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-271 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - - -#define IC271_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define IC271_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC271_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -/* - * IC-271 A/E - * IC-271 H is high power (75W) - * - * Independant transmit/receive - * - * specs: http://www.qsl.net/sm7vhs/radio/icom/Ic271/specs.htm - * - * Please report testing / patches. Some capabilities may be missing too. --sf - */ -static const struct icom_priv_caps ic271_priv_caps = -{ - 0x20, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic271_caps = -{ - .rig_model = RIG_MODEL_IC271, - .model_name = "IC-271", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC271_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 32, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(144), MHz(146), IC271_MODES, -1, -1, IC271_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), IC271_MODES, W(2.5), W(25), IC271_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(143.8), MHz(148.2), IC271_MODES, -1, -1, IC271_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(148), IC271_MODES, W(2.5), W(25), IC271_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC271_MODES, 10}, /* TBC: does this rig supports settin tuning step? */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.4)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic271_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic2730.c b/icom/ic2730.c deleted file mode 100644 index 3bf9e9c9e..000000000 --- a/icom/ic2730.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-2730 and variations - * Copyright (c) 2015 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" - -#define IC2730_MODES (RIG_MODE_FM) -#define IC2730_ALL_RX_MODES (RIG_MODE_AM|IC2730_MODES) - -#define IC2730_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB) - -#define IC2730_SCAN_OPS RIG_SCAN_NONE - -#define IC2730_VFO_OPS RIG_OP_NONE - -#define IC2730_FUNC_ALL ( \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_VOX) - -#define IC2730_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_VOXGAIN) - -#define IC2730_PARM_ALL RIG_PARM_NONE - - -/* - * FIXME: real measurement - */ -#define IC2730_STR_CAL UNKNOWN_IC_STR_CAL - -static const struct icom_priv_caps ic2730_priv_caps = -{ - 0x90, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG */ -}; - -const struct rig_caps ic2730_caps = -{ - .rig_model = RIG_MODEL_IC2730, - .model_name = "IC-2730", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC2730_FUNC_ALL, - .has_set_func = IC2730_FUNC_ALL, - .has_get_level = IC2730_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC2730_LEVEL_ALL), - .has_get_parm = IC2730_PARM_ALL, - .has_set_parm = IC2730_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC2730_VFO_OPS, - .scan_ops = IC2730_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - // There's no memory support through CI-V, - // but there is a clone mode apart. - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(118), MHz(174), IC2730_ALL_RX_MODES, -1, -1, IC2730_VFO_ALL}, - {MHz(375), MHz(550), IC2730_ALL_RX_MODES, -1, -1, IC2730_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), IC2730_MODES, W(5), W(25), IC2730_VFO_ALL}, - {MHz(430), MHz(440), IC2730_MODES, W(5), W(25), IC2730_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(118), MHz(174), IC2730_ALL_RX_MODES, -1, -1, IC2730_VFO_ALL}, - {MHz(375), MHz(550), IC2730_ALL_RX_MODES, -1, -1, IC2730_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(148), IC2730_MODES, W(5), W(50), IC2730_VFO_ALL}, - {MHz(430), MHz(450), IC2730_MODES, W(5), W(50), IC2730_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - // Rem: no support for changing tuning step - {IC2730_ALL_RX_MODES, kHz(5)}, - {IC2730_ALL_RX_MODES, kHz(6.25)}, - // The 8.33 kHz step is not selectable, depending on the operating band or mode. - {IC2730_ALL_RX_MODES, kHz(8.33)}, - {IC2730_ALL_RX_MODES, kHz(10)}, - {IC2730_ALL_RX_MODES, 12500}, - {IC2730_ALL_RX_MODES, kHz(15)}, - {IC2730_ALL_RX_MODES, kHz(20)}, - {IC2730_ALL_RX_MODES, kHz(25)}, - {IC2730_ALL_RX_MODES, kHz(30)}, - {IC2730_ALL_RX_MODES, kHz(50)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM | RIG_MODE_AM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, - RIG_FLT_END, - }, - .str_cal = IC2730_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic2730_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .decode_event = icom_decode_event, - - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_code, - .get_dcs_sql = icom_get_dcs_code, - - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - -}; diff --git a/icom/ic275.c b/icom/ic275.c deleted file mode 100644 index 729c17568..000000000 --- a/icom/ic275.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-275 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - - -#define IC275_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define IC275_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC275_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - - -/* - * FIXME: this appears to be the IC-275A/E - * what about the IC-275H ? please give it a fix. --SF - */ -static const struct icom_priv_caps ic275_priv_caps = -{ - 0x10, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic275_caps = -{ - .rig_model = RIG_MODEL_IC275, - .model_name = "IC-275", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC275_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - { 102, 102, RIG_MTYPE_CALL, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {MHz(138), MHz(174), IC275_MODES, -1, -1, IC275_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { {MHz(144), MHz(146), IC275_MODES, W(2.5), W(25), IC275_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { {MHz(138), MHz(174), IC275_MODES, -1, -1, IC275_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { {MHz(144), MHz(148), IC275_MODES, W(2.5), W(25), IC275_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC275_MODES, 10}, /* TBC: does this rig supports settin tuning step? */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.2)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic275_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic471.c b/icom/ic471.c deleted file mode 100644 index 1c2ba7c98..000000000 --- a/icom/ic471.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-471 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - - -#define IC471_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define IC471_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC471_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -#define IC471_STR_CAL { 0, { } } - -/* - * IC-471 A/E - * IC-471 H is high power (75W) - * specs: http://www.qsl.net/sm7vhs/radio/icom/ic471/specs.htm - * - * Please report testing / patches. Some capabilities may be missing too. --sf - */ -static const struct icom_priv_caps ic471_priv_caps = -{ - 0x22, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic471_caps = -{ - .rig_model = RIG_MODEL_IC471, - .model_name = "IC-471", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC471_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 38, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(430), MHz(450), IC471_MODES, -1, -1, IC471_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(430), MHz(440), IC471_MODES, W(2.5), W(25), IC471_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(430), MHz(450), IC471_MODES, -1, -1, IC471_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(430), MHz(450), IC471_MODES, W(2.5), W(25), IC471_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC471_MODES, 10}, /* TBC: does this rig supports settin tuning step? */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.3)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic471_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic475.c b/icom/ic475.c deleted file mode 100644 index 123ac6283..000000000 --- a/icom/ic475.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-475 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - - -#define IC475_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define IC475_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC475_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - - -/* - * FIXME: this appears to be the IC-475A/E - * what about the IC-475H ? please give it a fix. --SF - */ -static const struct icom_priv_caps ic475_priv_caps = -{ - 0x14, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic475_caps = -{ - .rig_model = RIG_MODEL_IC475, - .model_name = "IC-475", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC475_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - { 102, 102, RIG_MTYPE_CALL, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {MHz(430), MHz(450), IC475_MODES, -1, -1, IC475_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { {MHz(430), MHz(440), IC475_MODES, W(2.5), W(25), IC475_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { {MHz(430), MHz(450), IC475_MODES, -1, -1, IC475_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { {MHz(430), MHz(450), IC475_MODES, W(2.5), W(25), IC475_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC475_MODES, 10}, /* TBC: does this rig supports settin tuning step? */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.3)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic475_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic7000.c b/icom/ic7000.c deleted file mode 100644 index 3a5688d31..000000000 --- a/icom/ic7000.c +++ /dev/null @@ -1,367 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7000 and variations - * Adapted from IC-7800 code 2006 by Kent Hill - * Copyright (c) 2004-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC7000_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_WFM) -#define IC7000_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define IC7000_NOT_TS_MODES (IC7000_ALL_RX_MODES &~IC7000_1HZ_TS_MODES) - -#define IC7000_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC7000_AM_TX_MODES (RIG_MODE_AM) - -#define IC7000_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO) - -#define IC7000_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC7000_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define IC7000_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP) - -#define IC7000_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7000_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -#define IC7000_ANTS (RIG_ANT_1|RIG_ANT_2) /* ant-1 is Hf-6m, ant-2 is 2m-70cm */ - -/* - * Measurement by Mark, WA0TOP - * - * s/n 0503103. - * Preamp off, ATT off, mode AM, f=10 MHz - */ -#define IC7000_STR_CAL { 14, \ - { \ - { 0, -54 }, /* first one is made up */ \ - { 5, -29 }, \ - { 15, -27 }, \ - { 43, -22 }, \ - { 68, -17 }, \ - { 92, -12 }, \ - { 120, -6 }, \ - { 141, 2 }, \ - { 162, 13 }, \ - { 182, 25 }, \ - { 202, 38 }, \ - { 222, 47 }, \ - { 241, 57 }, \ - { 255, 63 } \ - } } - -#define IC7000_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7000_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7000_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC7000_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -/* - * - * IC7000 channel caps. - */ -#define IC7000_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .split = 1, \ - .tx_freq = 1, \ - .tx_mode = 1, \ - .tx_width = 1, \ - .rptr_offs = 1, \ - .rptr_shift = 1, \ - .ctcss_tone = 1, \ - .ctcss_sql = 1, \ - .funcs = IC7000_FUNCS, \ - .levels = RIG_LEVEL_SET(IC7000_LEVELS), \ -} - -int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7000 rig capabilities. - */ -static const struct icom_priv_caps IC7000_priv_caps = -{ - 0x70, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic7000_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic7000_caps = -{ - .rig_model = RIG_MODEL_IC7000, - .model_name = "IC-7000", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7000_FUNCS, - .has_set_func = IC7000_FUNCS, - .has_get_level = IC7000_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7000_LEVELS), - .has_get_parm = IC7000_PARMS, - .has_set_parm = RIG_PARM_SET(IC7000_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/ - .attenuator = { 12, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), /* TODO */ - .targetable_vfo = 0, - .vfo_ops = IC7000_VFO_OPS, - .scan_ops = IC7000_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 5, - .chan_desc_sz = 0, /* TODO */ - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC7000_MEM_CAP }, - { 100, 105, RIG_MTYPE_EDGE, IC7000_MEM_CAP }, /* two by two */ - { 106, 107, RIG_MTYPE_CALL, IC7000_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(199.999999), IC7000_ALL_RX_MODES, -1, -1, IC7000_VFOS}, - {MHz(400), MHz(470), IC7000_ALL_RX_MODES, -1, -1, IC7000_VFOS}, RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7000_OTHER_TX_MODES, W(2), W(100), IC7000_VFOS, RIG_ANT_1), - FRQ_RNG_6m(1, IC7000_OTHER_TX_MODES, W(2), W(100), IC7000_VFOS, RIG_ANT_1), - FRQ_RNG_2m(1, IC7000_OTHER_TX_MODES, W(2), W(50), IC7000_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(1, IC7000_OTHER_TX_MODES, W(2), W(35), IC7000_VFOS, RIG_ANT_2), - FRQ_RNG_HF(1, IC7000_AM_TX_MODES, W(1), W(40), IC7000_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(1, IC7000_AM_TX_MODES, W(1), W(40), IC7000_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_2m(1, IC7000_AM_TX_MODES, W(2), W(20), IC7000_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(1, IC7000_OTHER_TX_MODES, W(2), W(14), IC7000_VFOS, RIG_ANT_2), - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(199.999999), IC7000_ALL_RX_MODES, -1, -1, IC7000_VFOS}, - {MHz(400), MHz(470), IC7000_ALL_RX_MODES, -1, -1, IC7000_VFOS}, RIG_FRNG_END, - }, - .tx_range_list2 = { /* needs the 5 mhz channels added */ - FRQ_RNG_HF(2, IC7000_OTHER_TX_MODES, W(2), W(100), IC7000_VFOS, RIG_ANT_1), - FRQ_RNG_6m(2, IC7000_OTHER_TX_MODES, W(2), W(100), IC7000_VFOS, RIG_ANT_1), - FRQ_RNG_2m(2, IC7000_OTHER_TX_MODES, W(2), W(50), IC7000_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(2, IC7000_OTHER_TX_MODES, W(2), W(35), IC7000_VFOS, RIG_ANT_2), - FRQ_RNG_HF(2, IC7000_AM_TX_MODES, W(1), W(40), IC7000_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(2, IC7000_AM_TX_MODES, W(1), W(40), IC7000_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_2m(2, IC7000_AM_TX_MODES, W(2), W(20), IC7000_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(2, IC7000_OTHER_TX_MODES, W(2), W(14), IC7000_VFOS, RIG_ANT_2), - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7000_1HZ_TS_MODES, 1}, - {IC7000_NOT_TS_MODES, 10}, - {IC7000_ALL_RX_MODES, Hz(100)}, - {IC7000_ALL_RX_MODES, kHz(1)}, - {IC7000_ALL_RX_MODES, kHz(5)}, - {IC7000_ALL_RX_MODES, kHz(9)}, - {IC7000_ALL_RX_MODES, kHz(10)}, - {IC7000_ALL_RX_MODES, kHz(12.5)}, - {IC7000_ALL_RX_MODES, kHz(20)}, - {IC7000_ALL_RX_MODES, kHz(25)}, - {IC7000_ALL_RX_MODES, kHz(100)}, - {IC7000_NOT_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB, kHz(2.4)}, - {RIG_MODE_SSB, kHz(1.8)}, - {RIG_MODE_SSB, kHz(3)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(7)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(3)}, - {RIG_MODE_AM, kHz(9)}, - {RIG_MODE_WFM, kHz(280)}, - RIG_FLT_END, - }, - - .str_cal = IC7000_STR_CAL, - .swr_cal = IC7000_SWR_CAL, - .alc_cal = IC7000_ALC_CAL, - .rfpower_meter_cal = IC7000_RFPOWER_METER_CAL, - .comp_meter_cal = IC7000_COMP_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& IC7000_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = NULL, /*automatically set by rig depending band */ - .get_ant = NULL, - - .decode_event = icom_decode_event, - .set_level = ic7000_set_level, - .get_level = ic7000_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = NULL, - .get_parm = NULL, - .set_mem = icom_set_mem, - .set_bank = icom_set_bank, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = NULL, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = NULL, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_code = icom_set_dcs_code, - .get_dcs_code = icom_get_dcs_code, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - -}; - -int ic7000_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x17; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7000_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x17; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic703.c b/icom/ic703.c deleted file mode 100644 index c510a678b..000000000 --- a/icom/ic703.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-703 - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "bandplan.h" -#include "idx_builtin.h" - -#define IC703_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) - -#define IC703_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC703_AM_TX_MODES (RIG_MODE_AM) - -#define IC703_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_ANF|RIG_FUNC_MON) - -#define IC703_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_ALC|RIG_LEVEL_SWR|RIG_LEVEL_METER|RIG_LEVEL_COMP|RIG_LEVEL_RF|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_RF|RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_NR|RIG_LEVEL_IF|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT) - -#define IC703_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC703_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define IC703_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) - -#define IC703_ANTS (RIG_ANT_1) - -/* - * IC703_REAL_STR_CAL is accurate measurements - * IC703_STR_CAL is what the S-meter displays - * - * FIXME: calibration data cloned from IC706 - */ -#define IC703_STR_CAL { 17, \ - { \ - { 45, -60 }, \ - { 46, -54 }, /* S0 */ \ - { 54, -48 }, \ - { 64, -42 }, \ - { 76, -36 }, \ - { 84, -30 }, \ - { 94, -24 }, \ - { 104, -18 }, \ - { 113, -12 }, \ - { 123, -6 }, \ - { 133, 0 }, /* S9 */ \ - { 144, 10 }, /* +10 */ \ - { 156, 20 }, /* +20 */ \ - { 170, 30 }, /* +30 */ \ - { 181, 40 }, /* +40 */ \ - { 192, 50 }, /* +50 */ \ - { 204, 60 } /* +60 */ \ - } } - -/* - * ic703 rigs capabilities. - */ -static const struct icom_priv_caps ic703_priv_caps = -{ - 0x68, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic706_ts_sc_list -}; - -const struct rig_caps ic703_caps = -{ - .rig_model = RIG_MODEL_IC703, - .model_name = "IC-703", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC703_FUNC_ALL, - .has_set_func = IC703_FUNC_ALL, - .has_get_level = IC703_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC703_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: 2 levels */ - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC703_VFO_OPS, - .scan_ops = IC703_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 105, RIG_MTYPE_EDGE }, /* two by two */ - { 106, 107, RIG_MTYPE_CALL }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(60), IC703_ALL_RX_MODES, -1, -1, IC703_VFO_ALL, IC703_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC703_OTHER_TX_MODES, W(0.1), W(10), IC703_VFO_ALL, IC703_ANTS), - FRQ_RNG_6m(1, IC703_OTHER_TX_MODES, W(0.1), W(10), IC703_VFO_ALL, IC703_ANTS), - FRQ_RNG_HF(1, IC703_AM_TX_MODES, W(0.1), W(4), IC703_VFO_ALL, IC703_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC703_AM_TX_MODES, W(0.1), W(4), IC703_VFO_ALL, IC703_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(30), MHz(60), IC703_ALL_RX_MODES, -1, -1, IC703_VFO_ALL, IC703_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC703_OTHER_TX_MODES, W(0.1), W(10), IC703_VFO_ALL, IC703_ANTS), - FRQ_RNG_6m(2, IC703_OTHER_TX_MODES, W(0.1), W(10), IC703_VFO_ALL, IC703_ANTS), - FRQ_RNG_HF(2, IC703_AM_TX_MODES, W(0.1), W(4), IC703_VFO_ALL, IC703_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC703_AM_TX_MODES, W(0.1), W(4), IC703_VFO_ALL, IC703_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - - .tuning_steps = { - {IC703_ALL_RX_MODES, 10}, - {IC703_ALL_RX_MODES, 100}, - {IC703_ALL_RX_MODES, kHz(1)}, - {IC703_ALL_RX_MODES, kHz(5)}, - {IC703_ALL_RX_MODES, kHz(9)}, - {IC703_ALL_RX_MODES, kHz(10)}, - {IC703_ALL_RX_MODES, 12500}, - {IC703_ALL_RX_MODES, kHz(20)}, - {IC703_ALL_RX_MODES, kHz(25)}, - {IC703_ALL_RX_MODES, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY | RIG_MODE_CWR | RIG_MODE_RTTYR, kHz(2.4)}, /* bultin FL-272 */ - {RIG_MODE_AM, kHz(9)}, /* mid w/ bultin FL-94 */ - {RIG_MODE_AM, kHz(2.4)}, /* narrow w/ bultin FL-272 */ - {RIG_MODE_FM, kHz(15)}, /* ?? TBC, mid w/ bultin FL-23+SFPC455E */ - {RIG_MODE_FM, kHz(9)}, /* narrow w/ bultin FL-94 */ - RIG_FLT_END, - }, - .str_cal = IC703_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic703_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .set_rptr_shift = icom_set_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - -}; - - diff --git a/icom/ic706.c b/icom/ic706.c deleted file mode 100644 index edc92d684..000000000 --- a/icom/ic706.c +++ /dev/null @@ -1,616 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-706 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "idx_builtin.h" -#include "bandplan.h" - - -/* - * This function does the special bandwidth coding for IC-706, IC-706MKII - * and IC-706MKIIG - * (0 - wide, 1 - normal, 2 - narrow) - */ -static int ic706_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) -{ - int err; - - err = rig2icom_mode(rig, mode, width, md, pd); - - if (err != RIG_OK) - { - return err; - } - - if (width != RIG_PASSBAND_NOCHANGE) - { - if (*pd == -1) - { - *pd = PD_MEDIUM_2; - } - else - { - (*pd)--; - } - } - - return RIG_OK; -} - - -#define IC706_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_WFM) -#define IC706_1MHZ_TS_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) -#define IC706_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY) - -/* tx doesn't have WFM. - * 100W in all modes but AM (40W) - */ -#define IC706_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC706_AM_TX_MODES (RIG_MODE_AM) - -#define IC706IIG_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN) - -#define IC706IIG_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR) - -#define IC706_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC706_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define IC706_SCAN_OPS (RIG_SCAN_MEM) - -/* - * IC706IIG_REAL_STR_CAL is accurate measurements - * IC706IIG_STR_CAL is what the S-meter displays - * - * calibration data was obtained from W8WWV - * http://www.seed-solutions.com/gregordy/ - */ -#define IC706IIG_REAL_STR_CAL { 16, \ - { \ - { 46, -27 }, /* S0 */ \ - { 54, -25 }, \ - { 64, -24 }, \ - { 76, -23 }, \ - { 84, -22 }, \ - { 94, -20 }, \ - { 104, -16 }, \ - { 113, -11 }, \ - { 123, -5 }, \ - { 133, 0 }, /* S9 */ \ - { 144, 5 }, /* +10 */ \ - { 156, 10 }, /* +20 */ \ - { 170, 16 }, /* +30 */ \ - { 181, 21 }, /* +40 */ \ - { 192, 26 }, /* +50 */ \ - { 204, 35 } /* +60 */ \ - } } - -#define IC706IIG_STR_CAL { 17, \ - { \ - { 45, -60 }, \ - { 46, -54 }, /* S0 */ \ - { 54, -48 }, \ - { 64, -42 }, \ - { 76, -36 }, \ - { 84, -30 }, \ - { 94, -24 }, \ - { 104, -18 }, \ - { 113, -12 }, \ - { 123, -6 }, \ - { 133, 0 }, /* S9 */ \ - { 144, 10 }, /* +10 */ \ - { 156, 20 }, /* +20 */ \ - { 170, 30 }, /* +30 */ \ - { 181, 40 }, /* +40 */ \ - { 192, 50 }, /* +50 */ \ - { 204, 60 } /* +60 */ \ - } } - -/* - * ic706 rigs capabilities. - * Notice that some rigs share the same functions. - * Also this struct is READONLY! - */ -static const struct icom_priv_caps ic706_priv_caps = -{ - 0x48, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic706_ts_sc_list, - .serial_USB_echo_check = 1, /* USB CI-V may not echo */ - .r2i_mode = ic706_r2i_mode -}; - -const struct rig_caps ic706_caps = -{ - .rig_model = RIG_MODEL_IC706, - .model_name = "IC-706", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = {}, /* granularity */ - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC706_VFO_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { RIG_CHAN_END, }, /* FIXME: memory channel list */ - - .rx_range_list1 = { RIG_FRNG_END, }, /* FIXME: enter region 1 setting */ - .tx_range_list1 = { RIG_FRNG_END, }, - .rx_range_list2 = { {kHz(30), 199999999, IC706_ALL_RX_MODES, -1, -1, IC706_VFO_ALL}, RIG_FRNG_END, }, /* rx range */ - .tx_range_list2 = { {kHz(1800), 1999999, IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, /* 100W class */ - {kHz(1800), 1999999, IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, /* 40W class */ - {kHz(3500), 3999999, IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(3500), 3999999, IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(7), kHz(7300), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(7), kHz(7300), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(10100), kHz(10150), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(10100), kHz(10150), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(14), kHz(14350), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(14), kHz(14350), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(18068), kHz(18168), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(18068), kHz(18168), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(21), kHz(21450), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(21), kHz(21450), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(24890), kHz(24990), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(24890), kHz(24990), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(28), kHz(29700), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(28), kHz(29700), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(50), MHz(54), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(50), MHz(54), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(144), MHz(148), IC706_OTHER_TX_MODES, 5000, 20000, IC706_VFO_ALL}, /* not sure.. */ - {MHz(144), MHz(148), IC706_AM_TX_MODES, 2000, 8000, IC706_VFO_ALL}, /* anyone? */ - RIG_FRNG_END, - }, - - .tuning_steps = {{IC706_1HZ_TS_MODES, 1}, - {IC706_ALL_RX_MODES, 10}, - {IC706_ALL_RX_MODES, 100}, - {IC706_ALL_RX_MODES, kHz(1)}, - {IC706_ALL_RX_MODES, kHz(5)}, - {IC706_ALL_RX_MODES, kHz(9)}, - {IC706_ALL_RX_MODES, kHz(10)}, - {IC706_ALL_RX_MODES, 12500}, - {IC706_ALL_RX_MODES, kHz(20)}, - {IC706_ALL_RX_MODES, kHz(25)}, - {IC706_ALL_RX_MODES, kHz(100)}, - {IC706_1MHZ_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, /* bultin FL-272 */ - {RIG_MODE_AM, kHz(8)}, /* mid w/ bultin FL-94 */ - {RIG_MODE_AM, kHz(2.4)}, /* narrow w/ bultin FL-272 */ - {RIG_MODE_FM, kHz(15)}, /* ?? TBC, mid w/ bultin FL-23+SFPC455E */ - {RIG_MODE_FM, kHz(8)}, /* narrow w/ bultin FL-94 */ - {RIG_MODE_WFM, kHz(230)}, /* WideFM, filter FL?? */ - RIG_FLT_END, - }, - .str_cal = IC706IIG_STR_CAL, - .priv = (void *)& ic706_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - - .set_rptr_shift = icom_set_rptr_shift, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - - -}; - - -static const struct icom_priv_caps ic706mkii_priv_caps = -{ - 0x4e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic706_ts_sc_list, - .serial_USB_echo_check = 1, /* USB CI-V may not echo */ - .r2i_mode = ic706_r2i_mode -}; - -const struct rig_caps ic706mkii_caps = -{ - .rig_model = RIG_MODEL_IC706MKII, - .model_name = "IC-706MkII", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = {}, /* granularity */ - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC706_VFO_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { RIG_CHAN_END, }, /* FIXME: memory channel list */ - - .rx_range_list1 = { RIG_FRNG_END, }, /* FIXME: enter region 1 setting */ - .tx_range_list1 = { RIG_FRNG_END, }, - .rx_range_list2 = { {kHz(30), 199999999, IC706_ALL_RX_MODES, -1, -1, IC706_VFO_ALL}, - RIG_FRNG_END, - }, /* rx range */ - .tx_range_list2 = { {kHz(1800), 1999999, IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, /* 100W class */ - {kHz(1800), 1999999, IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, /* 40W class */ - {kHz(3500), 3999999, IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(3500), 3999999, IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(7), kHz(7300), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(7), kHz(7300), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(10100), kHz(10150), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(10100), kHz(10150), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(14), kHz(14350), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(14), kHz(14350), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(18068), kHz(18168), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(18068), kHz(18168), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(21), kHz(21450), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(21), kHz(21450), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(24890), kHz(24990), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(24890), kHz(24990), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(28), kHz(29700), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(28), kHz(29700), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(50), MHz(54), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(50), MHz(54), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(144), MHz(148), IC706_OTHER_TX_MODES, 5000, 20000, IC706_VFO_ALL}, /* not sure.. */ - {MHz(144), MHz(148), IC706_AM_TX_MODES, 2000, 8000, IC706_VFO_ALL}, /* anyone? */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC706_1HZ_TS_MODES, 1}, - {IC706_ALL_RX_MODES, 10}, - {IC706_ALL_RX_MODES, 100}, - {IC706_ALL_RX_MODES, kHz(1)}, - {IC706_ALL_RX_MODES, kHz(5)}, - {IC706_ALL_RX_MODES, kHz(9)}, - {IC706_ALL_RX_MODES, kHz(10)}, - {IC706_ALL_RX_MODES, 12500}, - {IC706_ALL_RX_MODES, kHz(20)}, - {IC706_ALL_RX_MODES, kHz(25)}, - {IC706_ALL_RX_MODES, kHz(100)}, - {IC706_1MHZ_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, /* bultin FL-272 */ - {RIG_MODE_AM, kHz(8)}, /* mid w/ bultin FL-94 */ - {RIG_MODE_AM, kHz(2.4)}, /* narrow w/ bultin FL-272 */ - {RIG_MODE_FM, kHz(15)}, /* ?? TBC, mid w/ bultin FL-23+SFPC455E */ - {RIG_MODE_FM, kHz(8)}, /* narrow w/ bultin FL-94 */ - {RIG_MODE_WFM, kHz(230)}, /* WideFM, filter FL?? */ - RIG_FLT_END, - }, - .str_cal = IC706IIG_STR_CAL, - - .priv = (void *)& ic706mkii_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - - .set_rptr_shift = icom_set_rptr_shift, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - -}; - - -/* - * IC706MkIIG channel caps. - */ -#define IC706MKIIG_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .split = 1, \ - .tx_freq = 1, \ - .tx_mode = 1, \ - .tx_width = 1, \ - .rptr_offs = 1, \ - .rptr_shift = 1, /* only set */ \ - .funcs = IC706IIG_FUNC_ALL, \ - .levels = RIG_LEVEL_SET(IC706IIG_LEVEL_ALL), \ -} - -/* - * Basically, the IC706MKIIG is an IC706MKII plus UHF, a DSP - * and 50W VHF - */ -static const struct icom_priv_caps ic706mkiig_priv_caps = -{ - 0x58, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic706_ts_sc_list, - .serial_USB_echo_check = 1, /* USB CI-V may not echo */ - .r2i_mode = ic706_r2i_mode -}; - -const struct rig_caps ic706mkiig_caps = -{ - .rig_model = RIG_MODEL_IC706MKIIG, - .model_name = "IC-706MkIIG", - .mfg_name = "Icom", - .version = BACKEND_VER ".3", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC706IIG_FUNC_ALL, - .has_set_func = IC706IIG_FUNC_ALL, - .has_get_level = IC706IIG_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC706IIG_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC706_VFO_OPS, - .scan_ops = IC706_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC706MKIIG_MEM_CAP }, - { 100, 105, RIG_MTYPE_EDGE, IC706MKIIG_MEM_CAP }, /* two by two */ - { 106, 107, RIG_MTYPE_CALL, IC706MKIIG_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(200) - 1, IC706_ALL_RX_MODES, -1, -1, IC706_VFO_ALL}, /* this trx also has UHF */ - {MHz(400), MHz(470), IC706_ALL_RX_MODES, -1, -1, IC706_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC706_OTHER_TX_MODES, W(5), W(100), IC706_VFO_ALL, RIG_ANT_1), - FRQ_RNG_HF(1, IC706_AM_TX_MODES, W(2), W(40), IC706_VFO_ALL, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(1, IC706_OTHER_TX_MODES, W(5), W(100), IC706_VFO_ALL, RIG_ANT_1), - FRQ_RNG_6m(1, IC706_AM_TX_MODES, W(2), W(40), IC706_VFO_ALL, RIG_ANT_1), /* AM class */ - FRQ_RNG_2m(1, IC706_OTHER_TX_MODES, W(5), W(50), IC706_VFO_ALL, RIG_ANT_1), - FRQ_RNG_2m(1, IC706_AM_TX_MODES, W(2), W(20), IC706_VFO_ALL, RIG_ANT_1), /* AM class */ - FRQ_RNG_70cm(1, IC706_OTHER_TX_MODES, W(5), W(20), IC706_VFO_ALL, RIG_ANT_1), - FRQ_RNG_70cm(1, IC706_AM_TX_MODES, W(2), W(8), IC706_VFO_ALL, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(200) - 1, IC706_ALL_RX_MODES, -1, -1, IC706_VFO_ALL}, /* this trx also has UHF */ - {MHz(400), MHz(470), IC706_ALL_RX_MODES, -1, -1, IC706_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { {kHz(1800), MHz(2) - 1, IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, /* 100W class */ - {kHz(1800), MHz(2) - 1, IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, /* 40W class */ - {kHz(3500), MHz(4) - 1, IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(3500), MHz(4) - 1, IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(7), kHz(7300), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(7), kHz(7300), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(10100), kHz(10150), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(10100), kHz(10150), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(14), kHz(14350), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(14), kHz(14350), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(18068), kHz(18168), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(18068), kHz(18168), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(21), kHz(21450), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(21), kHz(21450), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {kHz(24890), kHz(24990), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {kHz(24890), kHz(24990), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(28), kHz(29700), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(28), kHz(29700), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(50), MHz(54), IC706_OTHER_TX_MODES, 5000, 100000, IC706_VFO_ALL}, - {MHz(50), MHz(54), IC706_AM_TX_MODES, 2000, 40000, IC706_VFO_ALL}, - {MHz(144), MHz(148), IC706_OTHER_TX_MODES, 5000, 50000, IC706_VFO_ALL}, /* 50W */ - {MHz(144), MHz(148), IC706_AM_TX_MODES, 2000, 20000, IC706_VFO_ALL}, /* AM VHF is 20W */ - {MHz(430), MHz(450), IC706_OTHER_TX_MODES, 5000, 20000, IC706_VFO_ALL}, - {MHz(430), MHz(450), IC706_AM_TX_MODES, 2000, 8000, IC706_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC706_1HZ_TS_MODES, 1}, - {IC706_ALL_RX_MODES, 10}, - {IC706_ALL_RX_MODES, 100}, - {IC706_ALL_RX_MODES, kHz(1)}, - {IC706_ALL_RX_MODES, kHz(5)}, - {IC706_ALL_RX_MODES, kHz(9)}, - {IC706_ALL_RX_MODES, kHz(10)}, - {IC706_ALL_RX_MODES, 12500}, - {IC706_ALL_RX_MODES, kHz(20)}, - {IC706_ALL_RX_MODES, kHz(25)}, - {IC706_ALL_RX_MODES, kHz(100)}, - {IC706_1MHZ_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, /* bultin FL-272 */ - {RIG_MODE_AM, kHz(8)}, /* mid w/ bultin FL-94 */ - {RIG_MODE_AM, kHz(2.4)}, /* narrow w/ bultin FL-272 */ - {RIG_MODE_FM, kHz(15)}, /* ?? TBC, mid w/ bultin FL-23+SFPC455E */ - {RIG_MODE_FM, kHz(8)}, /* narrow w/ bultin FL-94 */ - {RIG_MODE_WFM, kHz(230)}, /* WideFM, filter FL?? */ - RIG_FLT_END, - }, - .str_cal = IC706IIG_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic706mkiig_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .set_rptr_shift = icom_set_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_mem_get_split_vfo, - -}; - - diff --git a/icom/ic707.c b/icom/ic707.c deleted file mode 100644 index 3a8b83f35..000000000 --- a/icom/ic707.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-707 - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC707_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * IC-707 - * specs: http://www.qsl.net/sm7vhs/radio/icom/ic707/specs.htm - * - */ -#define IC707_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC707_AM_TX_MODES (RIG_MODE_AM) - -#define IC707_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC707_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC707_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) /* TBC */ - -#define IC707_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic707_priv_caps = -{ - 0x3e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic707_caps = -{ - .rig_model = RIG_MODEL_IC707, - .model_name = "IC-707", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 2, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC707_VFO_OPS, - .scan_ops = IC707_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 26, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 27, 30, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - { 31, 35, RIG_MTYPE_SAT, IC_MIN_MEM_CAP }, /* split ? */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(500), MHz(30), IC707_ALL_RX_MODES, -1, -1, IC707_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC707_OTHER_TX_MODES, W(5), W(100), IC707_VFO_ALL, IC707_ANTS), - FRQ_RNG_HF(1, IC707_AM_TX_MODES, W(5), W(25), IC707_VFO_ALL, IC707_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(500), MHz(30), IC707_ALL_RX_MODES, -1, -1, IC707_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC707_OTHER_TX_MODES, W(5), W(100), IC707_VFO_ALL, IC707_ANTS), - FRQ_RNG_HF(2, IC707_AM_TX_MODES, W(5), W(25), IC707_VFO_ALL, IC707_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC707_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.1)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(12)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic707_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - - .scan = icom_scan, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic7100.c b/icom/ic7100.c deleted file mode 100644 index d208e190d..000000000 --- a/icom/ic7100.c +++ /dev/null @@ -1,409 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-9100 (HF/VHF/UHF All-Mode Tranceiver) - * Copyright (c) 2000-2011 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "idx_builtin.h" -#include "bandplan.h" - - -#define IC7100_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|\ - RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|\ - RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM|\ - RIG_MODE_DSTAR) - -#define IC7100_OTHER_TX_MODES ((IC7100_MODES) & ~(RIG_MODE_AM|RIG_MODE_PKTAM)) - -#define IC7100_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) - -#define IC7100_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -#define IC7100_VFO_OPS (RIG_OP_FROM_VFO| \ - RIG_OP_TO_VFO| \ - RIG_OP_CPY| \ - RIG_OP_MCL| \ - RIG_OP_XCHG| \ - RIG_OP_TUNE) - -#define IC7100_FUNC_ALL (RIG_FUNC_NB| \ - RIG_FUNC_NR| \ - RIG_FUNC_ANF| \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_COMP| \ - RIG_FUNC_VOX| \ - RIG_FUNC_FBKIN| \ - RIG_FUNC_AFC| \ - RIG_FUNC_SATMODE| \ - RIG_FUNC_VSC| \ - RIG_FUNC_MN| \ - RIG_FUNC_LOCK| \ - RIG_FUNC_SCOPE| \ - RIG_FUNC_TUNER) - -#define IC7100_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_RF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_IF| \ - RIG_LEVEL_NR| \ - RIG_LEVEL_CWPITCH| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_KEYSPD| \ - RIG_LEVEL_COMP| \ - RIG_LEVEL_VOXGAIN| \ - RIG_LEVEL_VOXDELAY| \ - RIG_LEVEL_ANTIVOX| \ - RIG_LEVEL_APF| \ - RIG_LEVEL_AGC| \ - RIG_LEVEL_PBT_IN| \ - RIG_LEVEL_PBT_OUT| \ - RIG_LEVEL_NOTCHF_RAW| \ - RIG_LEVEL_ATT| \ - RIG_LEVEL_PREAMP| \ - RIG_LEVEL_RAWSTR| \ - RIG_LEVEL_STRENGTH| \ - RIG_LEVEL_SWR| \ - RIG_LEVEL_ALC| \ - RIG_LEVEL_RFPOWER_METER| \ - RIG_LEVEL_COMP_METER| \ - RIG_LEVEL_VD_METER| \ - RIG_LEVEL_ID_METER| \ - RIG_LEVEL_MONITOR_GAIN| \ - RIG_LEVEL_NB) - -#define IC7100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -// IC-7100 S-meter calibration data based on manual -#define IC7100_STR_CAL { 14, \ - { \ - { 0, -54 }, \ - { 120, 0 }, \ - { 241, 60 } \ - } } - -#define IC7100_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7100_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7100_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC7100_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC7100_VD_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 13, 10.0f }, \ - { 241, 16.0f } \ - } } - -#define IC7100_ID_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 97, 10.0f }, \ - { 146, 15.0f }, \ - { 241, 25.0f } \ - } } - -#define IC7100_HF_ANTS (RIG_ANT_1|RIG_ANT_2) - -int ic7100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7100 rig capabilities. - */ -static const struct icom_priv_caps ic7100_priv_caps = -{ - 0x88, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic7100_ts_sc_list, /* FIXME */ - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic7100_caps = -{ - .rig_model = RIG_MODEL_IC7100, - .model_name = "IC-7100", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7100_FUNC_ALL, - .has_set_func = IC7100_FUNC_ALL | RIG_FUNC_RESUME, - .has_get_level = IC7100_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC7100_LEVEL_ALL), - .has_get_parm = IC7100_PARM_ALL, - .has_set_parm = IC7100_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = {20, RIG_DBLST_END, }, - .attenuator = {20, RIG_DBLST_END, }, - .max_rit = kHz(9.999), - .max_xit = kHz(9.999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7100_VFO_OPS, - .scan_ops = IC7100_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 9, /* TODO */ - - .chan_list = { /* TBC */ - { 1, 396, RIG_MTYPE_MEM }, - { 397, 400, RIG_MTYPE_CALL }, - { 401, 424, RIG_MTYPE_EDGE }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { /* Europe */ - {kHz(30), MHz(60), IC7100_MODES, -1, -1, IC7100_VFO_ALL, IC7100_HF_ANTS}, - {kHz(136), MHz(174), IC7100_MODES, -1, -1, IC7100_VFO_ALL, RIG_ANT_3}, - {MHz(420), MHz(480), IC7100_MODES, -1, -1, IC7100_VFO_ALL, RIG_ANT_4}, - {MHz(1240), MHz(1320), IC7100_MODES, -1, -1, IC7100_VFO_ALL, RIG_ANT_5}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, IC7100_HF_ANTS), - FRQ_RNG_HF(1, RIG_MODE_AM, W(2), W(25), IC7100_VFO_ALL, IC7100_HF_ANTS), /* only HF */ - FRQ_RNG_6m(1, IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, IC7100_HF_ANTS), - FRQ_RNG_2m(1, IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, RIG_ANT_3), - FRQ_RNG_70cm(1, IC7100_OTHER_TX_MODES, W(2), W(75), IC7100_VFO_ALL, RIG_ANT_4), - /* option */ - FRQ_RNG_23cm_REGION1(IC7100_OTHER_TX_MODES, W(1), W(10), IC7100_VFO_ALL, RIG_ANT_5), - RIG_FRNG_END, - }, - - .rx_range_list2 = { /* USA */ - {kHz(30), MHz(60), IC7100_MODES, -1, -1, IC7100_VFO_ALL, IC7100_HF_ANTS}, - {kHz(136), MHz(174), IC7100_MODES, -1, -1, IC7100_VFO_ALL, RIG_ANT_3}, - {MHz(420), MHz(480), IC7100_MODES, -1, -1, IC7100_VFO_ALL, RIG_ANT_4}, - {MHz(1240), MHz(1320), IC7100_MODES, -1, -1, IC7100_VFO_ALL, RIG_ANT_5}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, IC7100_HF_ANTS), - FRQ_RNG_HF(2, RIG_MODE_AM, W(2), W(25), IC7100_VFO_ALL, IC7100_HF_ANTS), /* only HF */ - /* USA only, TBC: end of range and modes */ - {MHz(5.255), MHz(5.405), IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, IC7100_HF_ANTS}, /* USA only */ - {MHz(5.255), MHz(5.405), RIG_MODE_AM, W(2), W(100), IC7100_VFO_ALL, IC7100_HF_ANTS}, /* USA only */ - FRQ_RNG_6m(2, IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, IC7100_HF_ANTS), - FRQ_RNG_2m(2, IC7100_OTHER_TX_MODES, W(2), W(100), IC7100_VFO_ALL, RIG_ANT_3), - FRQ_RNG_70cm(2, IC7100_OTHER_TX_MODES, W(2), W(75), IC7100_VFO_ALL, RIG_ANT_4), - /* option */ - FRQ_RNG_23cm_REGION2(IC7100_OTHER_TX_MODES, W(1), W(10), IC7100_VFO_ALL, RIG_ANT_5), - RIG_FRNG_END, - }, - - .tuning_steps = { - {RIG_MODE_SSB | RIG_MODE_CW, 1}, - {RIG_MODE_SSB | RIG_MODE_CW, 10}, - {RIG_MODE_SSB | RIG_MODE_CW, 50}, - {RIG_MODE_SSB | RIG_MODE_CW, 100}, - {RIG_MODE_FM, kHz(0.1)}, - {RIG_MODE_FM, kHz(5)}, - {RIG_MODE_FM, kHz(6.25)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(12.5)}, - {RIG_MODE_FM, kHz(20)}, - {RIG_MODE_FM, kHz(25)}, - {RIG_MODE_FM, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(10)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(7)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - RIG_FLT_END, - }, - .str_cal = IC7100_STR_CAL, - .swr_cal = IC7100_SWR_CAL, - .alc_cal = IC7100_ALC_CAL, - .rfpower_meter_cal = IC7100_RFPOWER_METER_CAL, - .comp_meter_cal = IC7100_COMP_METER_CAL, - .vd_meter_cal = IC7100_VD_METER_CAL, - .id_meter_cal = IC7100_ID_METER_CAL, - - .priv = (void *)& ic7100_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .get_freq = icom_get_freq, - .set_freq = icom_set_freq, - - .get_mode = icom_get_mode_with_data, - .set_mode = icom_set_mode_with_data, - - .get_vfo = NULL, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - .get_ts = icom_get_ts, - .set_ts = icom_set_ts, - .get_func = icom_get_func, - .set_func = icom_set_func, - .get_level = ic7100_get_level, - .set_level = ic7100_set_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - - .set_rit = icom_set_rit, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_code, - .get_dcs_sql = icom_get_dcs_code, - - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .decode_event = icom_decode_event, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .send_morse = icom_send_morse -}; - -int ic7100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x65; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x65; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic718.c b/icom/ic718.c deleted file mode 100644 index 3722fc708..000000000 --- a/icom/ic718.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-718 caps - * Copyright (c) 2000-2010 by Stephane Fillod - * Caps submitted by Chuck Gilkes WD0FCL/4 - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "idx_builtin.h" -#include "bandplan.h" - - -#define IC718_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define IC718_1MHZ_TS_MODES (RIG_MODE_AM) -#define IC718_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) - -/* tx doesn't have WFM. - * 100W in all modes but AM (40W) - */ -#define IC718_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define IC718_AM_TX_MODES (RIG_MODE_AM) - -#define IC718_FUNC_ALL (RIG_FUNC_NR|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_ANF) - -#define IC718_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_MICGAIN|RIG_LEVEL_NR|RIG_LEVEL_CWPITCH|RIG_LEVEL_KEYSPD|RIG_LEVEL_RFPOWER|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_RAWSTR|RIG_LEVEL_SQL) - -#define IC718_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC718_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) - -#define IC718_SCAN_OPS (RIG_SCAN_MEM) - -/* - * TODO: check whether func and levels are stored in memory - */ -#define IC718_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .tx_freq = 1, \ - .tx_mode = 1, \ - .tx_width = 1, \ -} - -#define IC718_STR_CAL UNKNOWN_IC_STR_CAL - - - -static const struct icom_priv_caps IC718_priv_caps = -{ - 0x5e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic718_ts_sc_list -}; - -const struct rig_caps ic718_caps = -{ - .rig_model = RIG_MODEL_IC718, - .model_name = "IC-718", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC718_FUNC_ALL, - .has_set_func = IC718_FUNC_ALL, - .has_get_level = IC718_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC718_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .str_cal = IC718_STR_CAL, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC718_VFO_OPS, - .scan_ops = IC718_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC718_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC718_MEM_CAP }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(30) - 1, IC718_ALL_RX_MODES, -1, -1, IC718_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC718_OTHER_TX_MODES, W(5), W(100), IC718_VFO_ALL, RIG_ANT_1), - FRQ_RNG_HF(1, IC718_AM_TX_MODES, W(2), W(40), IC718_VFO_ALL, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(30) - 1, IC718_ALL_RX_MODES, -1, -1, IC718_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC718_OTHER_TX_MODES, W(5), W(100), IC718_VFO_ALL, RIG_ANT_1), - FRQ_RNG_HF(2, IC718_AM_TX_MODES, W(2), W(40), IC718_VFO_ALL, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC718_1HZ_TS_MODES, 1}, - {IC718_ALL_RX_MODES, 10}, - {IC718_ALL_RX_MODES, 100}, - {IC718_ALL_RX_MODES, kHz(1)}, - {IC718_ALL_RX_MODES, kHz(5)}, - {IC718_ALL_RX_MODES, kHz(9)}, - {IC718_ALL_RX_MODES, kHz(10)}, - {IC718_ALL_RX_MODES, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.1)}, /* bultin */ - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(500)}, /* FL-52A */ - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(250)}, /* FL-53A */ - {RIG_MODE_SSB, kHz(2.8)}, /* FL-96 */ - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(1.8)}, /* FL-222 */ - {RIG_MODE_AM, kHz(6)}, /* mid w/ bultin FL-94 */ - {RIG_MODE_AM, kHz(2.4)}, /* narrow w/ bultin FL-272 */ - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& IC718_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_mem_get_split_vfo, - -}; - - diff --git a/icom/ic7200.c b/icom/ic7200.c deleted file mode 100644 index a30906728..000000000 --- a/icom/ic7200.c +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7200 and variations - * Adapted by J.Watson from IC-7000 code (c) 2004 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -/* - * 26Mar09: Corrected tuning steps and added data modes. - * 25Mar09: Initial release - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - - -/* AM Data mode needs adding - this would require one more mode 'RIG_MODE_PKTAM' to rig.h */ -#define IC7200_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) -#define IC7200_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB) -#define IC7200_NOT_TS_MODES (IC7200_ALL_RX_MODES &~IC7200_1HZ_TS_MODES) - -#define IC7200_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define IC7200_AM_TX_MODES (RIG_MODE_AM) - -#define IC7200_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_ARO|RIG_FUNC_TUNER) - -#define IC7200_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_NB) - -#define IC7200_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define IC7200_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP) - -#define IC7200_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7200_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -#define IC7200_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */ - -#define IC7200_STR_CAL { 3, \ - { \ - { 0, -54 }, \ - { 120, 0 }, \ - { 241, 60 } \ - } } - -#define IC7200_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7200_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7200_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -int ic7200_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7200_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7200 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps IC7200_priv_caps = -{ - 0x76, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic7200_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_SLOW, .icom_level = 2 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic7200_caps = -{ - .rig_model = RIG_MODEL_IC7200, - .model_name = "IC-7200", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7200_FUNCS, - .has_set_func = IC7200_FUNCS, - .has_get_level = IC7200_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7200_LEVELS), - .has_get_parm = IC7200_PARMS, - .has_set_parm = RIG_PARM_SET(IC7200_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/ - .attenuator = { 20, RIG_DBLST_END, }, /* value taken from p.45 of manual*/ - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7200_VFO_OPS, - .scan_ops = IC7200_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 1, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 199, RIG_MTYPE_MEM }, - { 200, 201, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC7200_ALL_RX_MODES, -1, -1, IC7200_VFOS}, RIG_FRNG_END, }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7200_OTHER_TX_MODES, W(2), W(100), IC7200_VFOS, RIG_ANT_1), - FRQ_RNG_6m(1, IC7200_OTHER_TX_MODES, W(2), W(100), IC7200_VFOS, RIG_ANT_1), - FRQ_RNG_HF(1, IC7200_AM_TX_MODES, W(1), W(40), IC7200_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(1, IC7200_AM_TX_MODES, W(1), W(40), IC7200_VFOS, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC7200_ALL_RX_MODES, -1, -1, IC7200_VFOS}, RIG_FRNG_END, }, - .tx_range_list2 = { /* needs the 5 mhz channels added */ - FRQ_RNG_HF(2, IC7200_OTHER_TX_MODES, W(2), W(100), IC7200_VFOS, RIG_ANT_1), - FRQ_RNG_6m(2, IC7200_OTHER_TX_MODES, W(2), W(100), IC7200_VFOS, RIG_ANT_1), - FRQ_RNG_HF(2, IC7200_AM_TX_MODES, W(1), W(40), IC7200_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(2, IC7200_AM_TX_MODES, W(1), W(40), IC7200_VFOS, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7200_1HZ_TS_MODES, 1}, - {IC7200_NOT_TS_MODES, 10}, - {IC7200_ALL_RX_MODES, Hz(100)}, - {IC7200_ALL_RX_MODES, kHz(1)}, - {IC7200_ALL_RX_MODES, kHz(5)}, - {IC7200_ALL_RX_MODES, kHz(9)}, - {IC7200_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB, kHz(2.4)}, - {RIG_MODE_SSB, kHz(1.8)}, - {RIG_MODE_SSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(3)}, - {RIG_MODE_AM, kHz(9)}, - RIG_FLT_END, - }, - - .str_cal = IC7200_STR_CAL, - .swr_cal = IC7200_SWR_CAL, - .alc_cal = IC7200_ALC_CAL, - .rfpower_meter_cal = IC7200_RFPOWER_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& IC7200_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = NULL, /*automatically set by rig depending band */ - .get_ant = NULL, - - .decode_event = icom_decode_event, - .set_level = ic7200_set_level, - .get_level = ic7200_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = NULL, - .get_parm = NULL, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = NULL, - .set_rptr_shift = NULL, - .get_rptr_shift = NULL, - .set_rptr_offs = NULL, - .get_rptr_offs = NULL, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - -}; - -int ic7200_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x55; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x03, 1, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7200_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x55; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x03, 1, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic725.c b/icom/ic725.c deleted file mode 100644 index 8a786a8f1..000000000 --- a/icom/ic725.c +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-725 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC725_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * 100W in all modes but AM (40W) - */ -#define IC725_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC725_AM_TX_MODES (RIG_MODE_AM) - -#define IC725_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC725_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC725_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) /* TBC */ - -#define IC725_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic725_priv_caps = -{ - 0x28, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic725_caps = -{ - .rig_model = RIG_MODEL_IC725, - .model_name = "IC-725", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC725_VFO_OPS, - .scan_ops = IC725_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 26, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(33) - 10, IC725_ALL_RX_MODES, -1, -1, IC725_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(2, IC725_OTHER_TX_MODES, W(10), W(100), IC725_VFO_ALL, IC725_ANTS), - FRQ_RNG_HF(2, IC725_AM_TX_MODES, W(10), W(40), IC725_VFO_ALL, IC725_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(30), MHz(33) - 10, IC725_ALL_RX_MODES, -1, -1, IC725_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC725_OTHER_TX_MODES, W(10), W(100), IC725_VFO_ALL, IC725_ANTS), - FRQ_RNG_HF(2, IC725_AM_TX_MODES, W(10), W(40), IC725_VFO_ALL, IC725_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC725_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.3)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic725_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - - .scan = icom_scan, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic726.c b/icom/ic726.c deleted file mode 100644 index ebe590060..000000000 --- a/icom/ic726.c +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-726 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC726_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * IC-726 - * specs: http://www.qsl.net/sm7vhs/radio/icom/ic726/specs.htm - * - */ -#define IC726_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC726_AM_TX_MODES (RIG_MODE_AM) - -#define IC726_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC726_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC726_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) /* TBC */ - -#define IC726_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic726_priv_caps = -{ - 0x30, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic726_caps = -{ - .rig_model = RIG_MODEL_IC726, - .model_name = "IC-726", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC726_VFO_OPS, - .scan_ops = IC726_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 26, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(500), MHz(30), IC726_ALL_RX_MODES, -1, -1, IC726_VFO_ALL}, - {MHz(50), MHz(54), IC726_ALL_RX_MODES, -1, -1, IC726_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC726_OTHER_TX_MODES, W(10), W(100), IC726_VFO_ALL, IC726_ANTS), - FRQ_RNG_HF(1, IC726_AM_TX_MODES, W(10), W(40), IC726_VFO_ALL, IC726_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC726_OTHER_TX_MODES, W(1), W(10), IC726_VFO_ALL, IC726_ANTS), - FRQ_RNG_6m(1, IC726_AM_TX_MODES, W(1), W(4), IC726_VFO_ALL, IC726_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(500), MHz(30), IC726_ALL_RX_MODES, -1, -1, IC726_VFO_ALL}, - {MHz(50), MHz(54), IC726_ALL_RX_MODES, -1, -1, IC726_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC726_OTHER_TX_MODES, W(10), W(100), IC726_VFO_ALL, IC726_ANTS), - FRQ_RNG_HF(2, IC726_AM_TX_MODES, W(10), W(40), IC726_VFO_ALL, IC726_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC726_OTHER_TX_MODES, W(1), W(10), IC726_VFO_ALL, IC726_ANTS), - FRQ_RNG_6m(2, IC726_AM_TX_MODES, W(1), W(4), IC726_VFO_ALL, IC726_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC726_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.3)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic726_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - - .scan = icom_scan, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic728.c b/icom/ic728.c deleted file mode 100644 index 8b09b2bfa..000000000 --- a/icom/ic728.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-728 - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC728_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * IC-728 - * specs: http://www.qsl.net/sm7vhs/radio/icom/ic728/specs.htm - * - */ -#define IC728_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC728_AM_TX_MODES (RIG_MODE_AM) - -#define IC728_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC728_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC728_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) /* TBC */ - -#define IC728_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic728_priv_caps = -{ - 0x38, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic728_caps = -{ - .rig_model = RIG_MODEL_IC728, - .model_name = "IC-728", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 2, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC728_VFO_OPS, - .scan_ops = IC728_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 26, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(500), MHz(30), IC728_ALL_RX_MODES, -1, -1, IC728_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC728_OTHER_TX_MODES, W(10), W(100), IC728_VFO_ALL, IC728_ANTS), - FRQ_RNG_HF(1, IC728_AM_TX_MODES, W(10), W(40), IC728_VFO_ALL, IC728_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(500), MHz(30), IC728_ALL_RX_MODES, -1, -1, IC728_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC728_OTHER_TX_MODES, W(10), W(100), IC728_VFO_ALL, IC728_ANTS), - FRQ_RNG_HF(2, IC728_AM_TX_MODES, W(10), W(40), IC728_VFO_ALL, IC728_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC728_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.1)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(12)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic728_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - - .scan = icom_scan, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic7300.c b/icom/ic7300.c deleted file mode 100644 index bcbed2d9a..000000000 --- a/icom/ic7300.c +++ /dev/null @@ -1,726 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7300 and variations - * Adapted by J.Watson from IC-7000 code (c) 2004 by Stephane Fillod - * Adapted from IC-7200 (c) 2016 by Michael Black W9MDB - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" -#include "tones.h" - -#define IC7300_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM) -#define IC7300_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PKTAM) -#define IC7300_NOT_TS_MODES (IC7300_ALL_RX_MODES &~IC7300_1HZ_TS_MODES) - -#define IC7300_OTHER_TX_MODES (RIG_MODE_FM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define IC7300_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) - -#define IC7300_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_SCOPE|RIG_FUNC_TUNER) - -#define IC7300_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC7300_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define IC7300_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_TIME|RIG_PARM_BEEP) - -#define IC7300_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7300_SCAN_OPS (RIG_SCAN_STOP|RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT) - -#define IC7300_ANTS (RIG_ANT_1) /* ant-1 is Hf-6m */ - -/* - * IC-7300 S-meter levels measured from live signals on multiple bands. Provides a good approximation. - */ -#define IC7300_STR_CAL { 7, \ - { \ - { 0, -54 }, \ - { 10, -48 }, \ - { 30, -36 }, \ - { 60, -24 }, \ - { 90, -12 }, \ - { 120, 0 }, \ - { 241, 64 } \ - } } - -#define IC7300_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7300_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7300_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC7300_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC7300_VD_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 13, 10.0f }, \ - { 241, 16.0f } \ - } } - -#define IC7300_ID_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 97, 10.0f }, \ - { 146, 15.0f }, \ - { 241, 25.0f } \ - } } - - -/* - * IC9700 items that differ from IC7300 - */ -#define IC9700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM|RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B) -#define IC9700_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_SCOPE|RIG_FUNC_SATMODE|RIG_FUNC_AFC) - -#define IC9700_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define IC9700_ALL_TX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD) -#define IC9700_ALL_RX_MODES (RIG_MODE_FM|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_DSTAR|RIG_MODE_DD) - -#define IC9700_STR_CAL { 7, \ - { \ - { 0, -54 }, \ - { 10, -48 }, \ - { 30, -36 }, \ - { 60, -24 }, \ - { 90, -12 }, \ - { 120, 0 }, \ - { 241, 64 } \ - } } - -#define IC9700_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC9700_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC9700_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC9700_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 210, 25.5f } \ - } } - -#define IC9700_VD_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 13, 10.0f }, \ - { 241, 16.0f } \ - } } - -#define IC9700_ID_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 121, 10.0f }, \ - { 241, 20.0f } \ - } } - -/* - * IC-7300 rig capabilities. - */ -static const struct icom_priv_caps IC7300_priv_caps = -{ - 0x94, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG to avoid display flickering */ - ic7300_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -static const struct icom_priv_caps IC9700_priv_caps = -{ - 0xA2, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG to avoid display flickering */ - ic7300_ts_sc_list, - .serial_USB_echo_check = 1, /* USB CI-V may not echo */ - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -int ic7300_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7300_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); -int ic9700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic9700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); -int ic7300_set_parm(RIG *rig, setting_t parm, value_t val); -int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val); - -const struct rig_caps ic7300_caps = -{ - .rig_model = RIG_MODEL_IC7300, - .model_name = "IC-7300", - .mfg_name = "Icom", - .version = BACKEND_VER ".5", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7300_FUNCS, - .has_set_func = IC7300_FUNCS, - .has_get_level = IC7300_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7300_LEVELS), - .has_get_parm = IC7300_PARMS, - .has_set_parm = RIG_PARM_SET(IC7300_PARMS), - .level_gran = { - [LVL_RAWSTR] = {.min = {.i = 0}, .max = {.i = 255}}, - [LVL_VOXDELAY] = {.min = {.i = 0}, .max = {.i = 20}, .step = {.i = 1}}, - [LVL_KEYSPD] = {.min = {.i = 6}, .max = {.i = 48}, .step = {.i = 1}}, - [LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 900}, .step = {.i = 1}}, - }, - .parm_gran = {}, - .extlevels = NULL, - .ctcss_list = full_ctcss_list, - .dcs_list = NULL, - .preamp = { 1, 2, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7300_VFO_OPS, - .scan_ops = IC7300_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 1, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(74.8), IC7300_ALL_RX_MODES, -1, -1, IC7300_VFOS}, RIG_FRNG_END, }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_60m(1, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_6m(1, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_4m(1, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_HF(1, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_60m(1, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(1, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_4m(1, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(74.8), IC7300_ALL_RX_MODES, -1, -1, IC7300_VFOS}, RIG_FRNG_END, }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_60m(2, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_6m(2, IC7300_OTHER_TX_MODES, W(2), W(100), IC7300_VFOS, RIG_ANT_1), - FRQ_RNG_HF(2, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_60m(2, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(2, IC7300_AM_TX_MODES, W(1), W(40), IC7300_VFOS, RIG_ANT_1), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7300_ALL_RX_MODES, Hz(1)}, - {IC7300_ALL_RX_MODES, kHz(1)}, - {IC7300_ALL_RX_MODES, kHz(5)}, - {IC7300_ALL_RX_MODES, kHz(9)}, - {IC7300_ALL_RX_MODES, kHz(10)}, - {IC7300_ALL_RX_MODES, kHz(12.5)}, - {IC7300_ALL_RX_MODES, kHz(20)}, - {IC7300_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(10)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(7)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - RIG_FLT_END, - }, - - .str_cal = IC7300_STR_CAL, - .swr_cal = IC7300_SWR_CAL, - .alc_cal = IC7300_ALC_CAL, - .rfpower_meter_cal = IC7300_RFPOWER_METER_CAL, - .comp_meter_cal = IC7300_COMP_METER_CAL, - .vd_meter_cal = IC7300_VD_METER_CAL, - .id_meter_cal = IC7300_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& IC7300_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, -//.get_vfo = icom_get_vfo, - .set_vfo = icom_set_vfo, - .set_ant = NULL, - .get_ant = NULL, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - .get_xit = icom_get_rit_new, - .set_xit = icom_set_xit_new, - - .decode_event = icom_decode_event, - .set_level = ic7300_set_level, - .get_level = ic7300_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = ic7300_set_parm, - .get_parm = ic7300_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .power2mW = icom_power2mW, - .mW2power = icom_mW2power, - .send_morse = icom_send_morse - -}; - -const struct rig_caps ic9700_caps = -{ - .rig_model = RIG_MODEL_IC9700, - .model_name = "IC-9700", - .mfg_name = "Icom", - .version = BACKEND_VER ".3", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, - .serial_rate_max = 38400, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC9700_FUNCS, - .has_set_func = IC9700_FUNCS, - .has_get_level = IC7300_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7300_LEVELS), - .has_get_parm = IC7300_PARMS, - .has_set_parm = RIG_PARM_SET(IC7300_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = {.min = {.i = 6}, .max = {.i = 48}, .step = {.i = 1}}, - [LVL_CWPITCH] = {.min = {.i = 300}, .max = {.i = 900}, .step = {.i = 1}}, - }, - .parm_gran = {}, - .extlevels = NULL, - .ctcss_list = full_ctcss_list, - .dcs_list = NULL, - .preamp = { 1, 2, 3, RIG_DBLST_END, }, - .attenuator = { 10, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = RIG_TARGETABLE_FREQ, - .vfo_ops = IC9700_VFO_OPS, - .scan_ops = IC7300_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 1, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(74.8), IC7300_ALL_RX_MODES, -1, -1, IC9700_VFOS}, RIG_FRNG_END, }, - .tx_range_list1 = { - FRQ_RNG_2m(1, IC9700_ALL_TX_MODES, W(2), W(100), IC9700_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(1, IC9700_ALL_TX_MODES, W(2), W(75), IC9700_VFOS, RIG_ANT_2), - FRQ_RNG_23cm(1, IC9700_ALL_TX_MODES, W(2), W(23), IC9700_VFOS, RIG_ANT_3), - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(74.8), IC7300_ALL_RX_MODES, -1, -1, IC9700_VFOS}, RIG_FRNG_END, }, - .tx_range_list2 = { - FRQ_RNG_2m(1, IC9700_ALL_TX_MODES, W(2), W(100), IC9700_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(1, IC9700_ALL_TX_MODES, W(2), W(75), IC9700_VFOS, RIG_ANT_2), - FRQ_RNG_23cm(1, IC9700_ALL_TX_MODES, W(2), W(23), IC9700_VFOS, RIG_ANT_3), - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC9700_ALL_RX_MODES, Hz(1)}, - {IC9700_ALL_RX_MODES, Hz(10)}, - {IC9700_ALL_RX_MODES, Hz(100)}, - {IC9700_ALL_RX_MODES, Hz(500)}, - {IC9700_ALL_RX_MODES, kHz(1)}, - {IC9700_ALL_RX_MODES, kHz(5)}, - {IC9700_ALL_RX_MODES, kHz(6.25)}, - {IC9700_ALL_RX_MODES, kHz(10)}, - {IC9700_ALL_RX_MODES, kHz(12.5)}, - {IC9700_ALL_RX_MODES, kHz(20)}, - {IC9700_ALL_RX_MODES, kHz(25)}, - {IC9700_ALL_RX_MODES, kHz(50)}, - {IC9700_ALL_RX_MODES, kHz(100)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB, kHz(2.4)}, - {RIG_MODE_SSB, kHz(1.8)}, - {RIG_MODE_SSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(7)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(10)}, - RIG_FLT_END, - }, - - .str_cal = IC9700_STR_CAL, - .swr_cal = IC9700_SWR_CAL, - .alc_cal = IC9700_ALC_CAL, - .rfpower_meter_cal = IC9700_RFPOWER_METER_CAL, - .comp_meter_cal = IC9700_COMP_METER_CAL, - .vd_meter_cal = IC9700_VD_METER_CAL, - .id_meter_cal = IC9700_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& IC9700_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, -//.get_vfo = icom_get_vfo, - .set_vfo = icom_set_vfo, - .set_ant = NULL, - .get_ant = NULL, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - - .decode_event = icom_decode_event, - .set_level = ic9700_set_level, - .get_level = ic9700_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .power2mW = icom_power2mW, - .mW2power = icom_mW2power, - .send_morse = icom_send_morse - -}; - -int ic7300_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x91; - return icom_set_level_raw(rig, level, C_CTL_MEM, S_MEM_PARM, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7300_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x91; - return icom_get_level_raw(rig, level, C_CTL_MEM, S_MEM_PARM, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} - -int ic9700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x03; - cmdbuf[1] = 0x30; - return icom_set_level_raw(rig, level, C_CTL_MEM, S_MEM_PARM, 2, cmdbuf, 1, val); - - default: - return ic7300_set_level(rig, vfo, level, val); - } -} - -int ic9700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x03; - cmdbuf[1] = 0x30; - return icom_get_level_raw(rig, level, C_CTL_MEM, S_MEM_PARM, 2, cmdbuf, val); - - default: - return ic7300_get_level(rig, vfo, level, val); - } -} - -int ic7300_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x23; - return icom_set_custom_parm(rig, 2, parmbuf, 1, val.i ? 1 : 0); - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x00; - parmbuf[1] = 0x81; - return icom_set_custom_parm(rig, 2, parmbuf, 2, (int)(val.f * 255.0f)); - - case RIG_PARM_TIME: - parmbuf[0] = 0x00; - parmbuf[1] = 0x95; - return icom_set_custom_parm_time(rig, 2, parmbuf, val.i); - - default: - return icom_set_parm(rig, parm, val); - } -} - -int ic7300_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - int retval; - int icom_val; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x23; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->i = icom_val ? 1 : 0; - break; - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x00; - parmbuf[1] = 0x81; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val / 255.0f; - break; - - case RIG_PARM_TIME: - parmbuf[0] = 0x00; - parmbuf[1] = 0x95; - return icom_get_custom_parm_time(rig, 2, parmbuf, &val->i); - - default: - return icom_get_parm(rig, parm, val); - } - - return RIG_OK; -} diff --git a/icom/ic735.c b/icom/ic735.c deleted file mode 100644 index aea24029d..000000000 --- a/icom/ic735.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-735 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" -#include "bandplan.h" - - -#define IC735_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * 100W in all modes but AM (40W) - */ -#define IC735_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC735_AM_TX_MODES (RIG_MODE_AM) - -#define IC735_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC735_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -#define IC735_ANTS RIG_ANT_1 - - -/* - */ -static const struct icom_priv_caps ic735_priv_caps = -{ - 0x04, /* default address */ - 1, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic735_caps = -{ - .rig_model = RIG_MODEL_IC735, - .model_name = "IC-735", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC735_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 10, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 11, 12, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(30), IC735_ALL_RX_MODES, -1, -1, IC735_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC735_OTHER_TX_MODES, W(10), W(100), IC735_VFO_ALL, IC735_ANTS), - FRQ_RNG_HF(1, IC735_AM_TX_MODES, W(10), W(40), IC735_VFO_ALL, IC735_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(30), IC735_ALL_RX_MODES, -1, -1, IC735_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { {kHz(1800), MHz(2) - 1, IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, /* 100W class */ - {kHz(1800), MHz(2) - 1, IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, /* 40W class */ - {kHz(3500), MHz(4) - 1, IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {kHz(3500), MHz(4) - 1, IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {MHz(7), kHz(7300), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {MHz(7), kHz(7300), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {kHz(10100), kHz(10150), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {kHz(10100), kHz(10150), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {MHz(14), kHz(14350), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {MHz(14), kHz(14350), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {kHz(18068), kHz(18168), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {kHz(18068), kHz(18168), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {MHz(21), kHz(21450), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {MHz(21), kHz(21450), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {kHz(24890), kHz(24990), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {kHz(24890), kHz(24990), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - {MHz(28), kHz(29700), IC735_OTHER_TX_MODES, 5000, 100000, IC735_VFO_ALL}, - {MHz(28), kHz(29700), IC735_AM_TX_MODES, 2000, 40000, IC735_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC735_ALL_RX_MODES, 1}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.4)}, - {RIG_MODE_AM, kHz(8)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic735_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic736.c b/icom/ic736.c deleted file mode 100644 index 2170d3f45..000000000 --- a/icom/ic736.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-736 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include "icom.h" - - -/* - * IC-736 - */ - - -#define IC736_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * 100W in all modes but AM (40W) - */ -#define IC736_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC736_AM_TX_MODES (RIG_MODE_AM) - -#define IC736_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC736_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY) -#define IC736_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_VFO) - -#define IC736_ANTS 0 /* FIXME: declare both antenna connectors */ - -#define IC736_STR_CAL { 0, { } } - -/* - */ -static const struct icom_priv_caps ic736_priv_caps = -{ - 0x40, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic736_caps = -{ - .rig_model = RIG_MODEL_IC736, - .model_name = "IC-736", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC736_VFO_OPS, - .scan_ops = IC736_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 89, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 90, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, /* FIXME: split */ - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(500), MHz(30), IC736_ALL_RX_MODES, -1, -1, IC736_VFO_ALL, IC736_ANTS}, - {MHz(50), MHz(54), IC736_ALL_RX_MODES, -1, -1, IC736_VFO_ALL, IC736_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC736_OTHER_TX_MODES, W(5), W(100), IC736_VFO_ALL, IC736_ANTS), - FRQ_RNG_6m(1, IC736_OTHER_TX_MODES, W(5), W(100), IC736_VFO_ALL, IC736_ANTS), - FRQ_RNG_HF(1, IC736_AM_TX_MODES, W(4), W(40), IC736_VFO_ALL, IC736_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC736_AM_TX_MODES, W(4), W(40), IC736_VFO_ALL, IC736_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(500), MHz(30), IC736_ALL_RX_MODES, -1, -1, IC736_VFO_ALL, IC736_ANTS}, - {MHz(50), MHz(54), IC736_ALL_RX_MODES, -1, -1, IC736_VFO_ALL, IC736_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC736_OTHER_TX_MODES, W(5), W(100), IC736_VFO_ALL, IC736_ANTS), - FRQ_RNG_6m(2, IC736_OTHER_TX_MODES, W(5), W(100), IC736_VFO_ALL, IC736_ANTS), - FRQ_RNG_HF(2, IC736_AM_TX_MODES, W(4), W(40), IC736_VFO_ALL, IC736_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC736_AM_TX_MODES, W(4), W(40), IC736_VFO_ALL, IC736_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { /* TBC */ - {IC736_ALL_RX_MODES, 10}, - {IC736_ALL_RX_MODES, kHz(1)}, - {IC736_ALL_RX_MODES, kHz(2)}, - {IC736_ALL_RX_MODES, kHz(3)}, - {IC736_ALL_RX_MODES, kHz(4)}, - {IC736_ALL_RX_MODES, kHz(5)}, - {IC736_ALL_RX_MODES, kHz(6)}, - {IC736_ALL_RX_MODES, kHz(7)}, - {IC736_ALL_RX_MODES, kHz(8)}, - {IC736_ALL_RX_MODES, kHz(9)}, - {IC736_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.1)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(12)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic736_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - -}; - diff --git a/icom/ic737.c b/icom/ic737.c deleted file mode 100644 index 48d83d6f1..000000000 --- a/icom/ic737.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-737 - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include "icom.h" - - -/* - * IC-737 - */ - - -#define IC737_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * 100W in all modes but AM (40W) - */ -#define IC737_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC737_AM_TX_MODES (RIG_MODE_AM) - -#define IC737_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC737_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY) -#define IC737_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_VFO) - -#define IC737_ANTS (RIG_ANT_1|RIG_ANT_2) - -static const struct icom_priv_caps ic737_priv_caps = -{ - 0x3c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic737_caps = -{ - .rig_model = RIG_MODEL_IC737, - .model_name = "IC-737", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC737_VFO_OPS, - .scan_ops = IC737_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 100, RIG_MTYPE_MEM }, - { 101, 101, RIG_MTYPE_EDGE }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(30), IC737_ALL_RX_MODES, -1, -1, IC737_VFO_ALL, IC737_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC737_OTHER_TX_MODES, W(10), W(100), IC737_VFO_ALL, IC737_ANTS), - FRQ_RNG_HF(1, IC737_AM_TX_MODES, W(10), W(40), IC737_VFO_ALL, IC737_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(30), MHz(30), IC737_ALL_RX_MODES, -1, -1, IC737_VFO_ALL, IC737_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC737_OTHER_TX_MODES, W(10), W(100), IC737_VFO_ALL, IC737_ANTS), - FRQ_RNG_HF(2, IC737_AM_TX_MODES, W(10), W(40), IC737_VFO_ALL, IC737_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC737_ALL_RX_MODES, 10}, - {IC737_ALL_RX_MODES, kHz(1)}, - {IC737_ALL_RX_MODES, kHz(2)}, - {IC737_ALL_RX_MODES, kHz(3)}, - {IC737_ALL_RX_MODES, kHz(4)}, - {IC737_ALL_RX_MODES, kHz(5)}, - {IC737_ALL_RX_MODES, kHz(6)}, - {IC737_ALL_RX_MODES, kHz(7)}, - {IC737_ALL_RX_MODES, kHz(8)}, - {IC737_ALL_RX_MODES, kHz(9)}, - {IC737_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.1)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(12)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic737_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - -}; - diff --git a/icom/ic738.c b/icom/ic738.c deleted file mode 100644 index bd00fd619..000000000 --- a/icom/ic738.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-738 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include "icom.h" - - -/* - * IC-738, like the IC-736 but without 6m - */ - - -#define IC738_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -/* - * 100W in all modes but AM (40W) - */ -#define IC738_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) -#define IC738_AM_TX_MODES (RIG_MODE_AM) - -#define IC738_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC738_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY) -#define IC738_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_VFO) - -#define IC738_ANTS 0 /* TODO: declare both antenna connectors? */ - -#define IC738_STR_CAL { 0, { } } - -/* - */ -static const struct icom_priv_caps ic738_priv_caps = -{ - 0x44, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic738_caps = -{ - .rig_model = RIG_MODEL_IC738, - .model_name = "IC-738", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC738_VFO_OPS, - .scan_ops = IC738_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 89, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 90, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, /* FIXME: split */ - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(500), MHz(30), IC738_ALL_RX_MODES, -1, -1, IC738_VFO_ALL, IC738_ANTS}, - {MHz(50), MHz(54), IC738_ALL_RX_MODES, -1, -1, IC738_VFO_ALL, IC738_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC738_OTHER_TX_MODES, W(5), W(100), IC738_VFO_ALL, IC738_ANTS), - FRQ_RNG_HF(1, IC738_AM_TX_MODES, W(4), W(40), IC738_VFO_ALL, IC738_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(500), MHz(30), IC738_ALL_RX_MODES, -1, -1, IC738_VFO_ALL, IC738_ANTS}, - {MHz(50), MHz(54), IC738_ALL_RX_MODES, -1, -1, IC738_VFO_ALL, IC738_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC738_OTHER_TX_MODES, W(5), W(100), IC738_VFO_ALL, IC738_ANTS), - FRQ_RNG_HF(2, IC738_AM_TX_MODES, W(4), W(40), IC738_VFO_ALL, IC738_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { /* TBC */ - {IC738_ALL_RX_MODES, 10}, - {IC738_ALL_RX_MODES, kHz(1)}, - {IC738_ALL_RX_MODES, kHz(2)}, - {IC738_ALL_RX_MODES, kHz(3)}, - {IC738_ALL_RX_MODES, kHz(4)}, - {IC738_ALL_RX_MODES, kHz(5)}, - {IC738_ALL_RX_MODES, kHz(6)}, - {IC738_ALL_RX_MODES, kHz(7)}, - {IC738_ALL_RX_MODES, kHz(8)}, - {IC738_ALL_RX_MODES, kHz(9)}, - {IC738_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.1)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(12)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic738_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - -}; - diff --git a/icom/ic7410.c b/icom/ic7410.c deleted file mode 100644 index 2930dd8f0..000000000 --- a/icom/ic7410.c +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7410 - * Copyright (c) 2011 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC7410_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) -#define IC7410_AM_TX_MODES (RIG_MODE_AM) -#define IC7410_ALL_RX_MODES IC7410_OTHER_TX_MODES | IC7410_AM_TX_MODES -#define IC7410_1HZ_TS_MODES IC7410_ALL_RX_MODES - -#define IC7410_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_TUNER) - -#define IC7410_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER) - -#define IC7410_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define IC7410_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -#define IC7410_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7410_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC7410_ANTS (RIG_ANT_1|RIG_ANT_2) - -/* - * Guess from IC7600 - */ -#define IC7410_STR_CAL { 16, \ - { \ - { 0, -54 }, /* S0 */ \ - { 124, 0 }, /* S9 */ \ - { 246, 60 } /* S9+60dB */ \ - } } - -#define IC7410_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7410_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7410_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7410 rig capabilities. - */ -static const struct icom_priv_caps ic7410_priv_caps = -{ - 0x80, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_SLOW, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_FAST, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - - -const struct rig_caps ic7410_caps = -{ - .rig_model = RIG_MODEL_IC7410, - .model_name = "IC-7410", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7410_FUNCS, - .has_set_func = IC7410_FUNCS, - .has_get_level = IC7410_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7410_LEVELS), - .has_get_parm = IC7410_PARMS, - .has_set_parm = RIG_PARM_SET(IC7410_PARMS), /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7410_VFO_OPS, - .scan_ops = IC7410_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC7410_ALL_RX_MODES, -1, -1, IC7410_VFOS, IC7410_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS), - FRQ_RNG_6m(1, IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS), - FRQ_RNG_HF(1, IC7410_AM_TX_MODES, W(1), W(27), IC7410_VFOS, IC7410_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC7410_AM_TX_MODES, W(1), W(27), IC7410_VFOS, IC7410_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC7410_ALL_RX_MODES, -1, -1, IC7410_VFOS, IC7410_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS), - FRQ_RNG_6m(2, IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS), - FRQ_RNG_HF(2, IC7410_AM_TX_MODES, W(2), W(27), IC7410_VFOS, IC7410_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC7410_AM_TX_MODES, W(2), W(27), IC7410_VFOS, IC7410_ANTS), /* AM class */ - /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC7410_OTHER_TX_MODES, W(2), W(100), IC7410_VFOS, IC7410_ANTS}, /* USA only */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7410_1HZ_TS_MODES, 1}, - {IC7410_ALL_RX_MODES, Hz(100)}, - {IC7410_ALL_RX_MODES, kHz(1)}, - {IC7410_ALL_RX_MODES, kHz(5)}, - {IC7410_ALL_RX_MODES, kHz(9)}, - {IC7410_ALL_RX_MODES, kHz(10)}, - {IC7410_ALL_RX_MODES, kHz(12.5)}, - {IC7410_ALL_RX_MODES, kHz(20)}, - {IC7410_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR, Hz(350)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(2.4)}, - {RIG_MODE_FM, kHz(12)}, - {RIG_MODE_FM, kHz(8)}, /* TBC */ - RIG_FLT_END, - }, - .str_cal = IC7410_STR_CAL, - .swr_cal = IC7410_SWR_CAL, - .alc_cal = IC7410_ALC_CAL, - .rfpower_meter_cal = IC7410_RFPOWER_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic7410_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_rit = icom_set_rit, - - .decode_event = icom_decode_event, - .set_level = ic7410_set_level, - .get_level = ic7410_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_mem_get_split_vfo, - .send_morse = icom_send_morse, - -}; - -int ic7410_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x75; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7410_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x75; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic746.c b/icom/ic746.c deleted file mode 100644 index e588f1c86..000000000 --- a/icom/ic746.c +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-746 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "bandplan.h" -#include "misc.h" - - -/* - * IC-746 and IC-746pro - * - * TODO: - * - advanced scanning functions - * - set_channel - * - set_ctcss_tone/ctcss_sql - * - set keyer? - * - test all that stuff.. - */ - -#define IC746_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC746_1HZ_TS_MODES IC746_ALL_RX_MODES - -/* - * 100W in all modes but AM (40W) - * deleted rig_mode_tx_modes - */ -#define IC746_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC746_AM_TX_MODES (RIG_MODE_AM) - -#define IC746_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_RF|RIG_FUNC_ANF|RIG_FUNC_APF|RIG_FUNC_RESUME|RIG_FUNC_ARO) - -#define IC746_LEVEL_ALL (RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_APF) - -#define IC746_GET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP) -#define IC746_SET_PARM (RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_ANN) - -#define IC746_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define IC746_ANTS (RIG_ANT_1|RIG_ANT_2) - -#define IC746_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) - -#define IC746_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM|RIG_SCAN_SLCT|RIG_SCAN_PROG|RIG_SCAN_DELTA) - -#define IC746_STR_CAL { 16, \ - { \ - { 0, -60 }, \ - { 10, -55 }, \ - { 27, -49 }, \ - { 45, -42 }, \ - { 60, -35 }, \ - { 76, -28 }, \ - { 89, -21 }, \ - { 100, -14 }, \ - { 110, -7 }, \ - { 120, 0 }, \ - { 125, 10 }, \ - { 129, 20 }, \ - { 133, 30 }, \ - { 138, 40 }, \ - { 142, 50 }, \ - { 146, 60 } \ - } } - -#define IC746PRO_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .tx_freq = 1, \ - .tx_mode = 1, \ - .tx_width = 1, \ - .split = 1, \ - .rptr_shift = 1,\ - .ctcss_tone = 1,\ - .ctcss_sql = 1, \ - .dcs_code = 1, \ - .flags = 1, \ - .channel_desc = 1, \ -} - -/* Memory channel buffer structure for IC-746 pro and ? - Note requires an ack_buff of 64 bytes and data length is 46. - */ - - -typedef struct -{ - unsigned char freq[5]; /* little endian frequency */ - unsigned char mode; - unsigned char pb; /* passband or filter selection*/ - unsigned char data; /* data port 0=off 1=on */ - unsigned char dup; /* duplex, tone, tonesql and DTCS - Values in hex are "or"ed together - 00 = Simplex - 10 = -DUP - 20 = +DUP - 01 = ctcss tone on - 02 = tone_sql on - 03 = DTCS on */ - unsigned char tone[3]; /* ctcss tone bigendian first byte fixed 00 */ - unsigned char tone_sql[3]; /* tone squelch frequency as tone */ - struct - { - //unsigned char - //pol; /* DTCS polarity by nibbles Tx pol | Rx pol; 0 = normal; 1 = rev */ - unsigned char code[2]; /* DTCS code bigendian */ - } dcs; -} channel_str_t; - - - -typedef struct -{ - char chan_flag; /* split 0x10 = on; scan select 0x01 = on */ - channel_str_t rx; - channel_str_t tx; - char name[9]; /*name 9 ascii no null terminator */ -} mem_buf_t; - -#define MAX_MEM_BUF_LEN sizeof(mem_buf_t) - -/* IC-746 Pro has a 3 "band-stacking registers" defined for each hamband and general coverage. These are updated and rotated when band is changed from front panel. The most recent is rolled down and the oldest discarded. The structure of the register is roughly half a memory buffer. -*/ - -typedef channel_str_t band_stack_reg_t; - -static int ic746_set_parm(RIG *rig, setting_t parm, value_t val); -static int ic746_get_parm(RIG *rig, setting_t parm, value_t *val); -static int ic746pro_get_channel(RIG *rig, channel_t *chan); -static int ic746pro_set_ext_parm(RIG *rig, token_t token, value_t val); -static int ic746pro_get_ext_parm(RIG *rig, token_t token, value_t *val); - - -/* - * IC-746 rig capabilities. - */ -static const struct icom_priv_caps ic746_priv_caps = -{ - 0x56, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_SLOW, .icom_level = 2 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic746_caps = -{ - .rig_model = RIG_MODEL_IC746, - .model_name = "IC-746", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC746_FUNC_ALL, - .has_set_func = IC746_FUNC_ALL, - .has_get_level = IC746_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC746_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_ANN, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC746_VFO_OPS, - .scan_ops = IC746_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(60), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - {MHz(108), MHz(174), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_6m(1, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_2m(1, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_HF(1, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_2m(1, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - /* most it2 rigs have 108-174 coverage*/ - .rx_range_list2 = { - {kHz(30), MHz(60), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - {MHz(108), MHz(174), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_6m(2, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_2m(2, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_HF(2, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_2m(2, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC746_1HZ_TS_MODES, 1}, - {IC746_ALL_RX_MODES, 100}, - {IC746_ALL_RX_MODES, kHz(1)}, - {IC746_ALL_RX_MODES, kHz(5)}, - {IC746_ALL_RX_MODES, kHz(9)}, - {IC746_ALL_RX_MODES, kHz(10)}, - {IC746_ALL_RX_MODES, kHz(12.5)}, - {IC746_ALL_RX_MODES, kHz(20)}, - {IC746_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_RTTYR | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_CW, kHz(2.1)}, - {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, - {RIG_MODE_FM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(9)}, - RIG_FLT_END, - }, - .str_cal = IC746_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic746_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = ic746_set_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_mem_get_split_vfo, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - -}; - - -/* IC-746Pro Rig parameters Only available in this namespace. This is a partial list */ -#define S_MEM_SC_LEN 2 /* 756PRO S_MEM subcmd length */ -#define S_MEM_LCD_CONT 0x501 /* LCD Contrast 0-256/0-100% */ -#define S_MEM_BKLIT 0x502 /* Backlight 0-256/0-100% */ -#define S_MEM_BEEP 0x506 /* Button confirmation */ -#define S_MEM_SQL_CTL 0x508 /* RF/SQL ctl set 0=auto; 1 = sql; 2 = RF+SQL */ -#define S_MEM_QSPLT 0x511 /* enable quick split mode */ -/* values -9.999 MHz to + 9.999 Mhz */ -#define S_MEM_SPLT_OFST 0x512 /* default split offset 4 bytes little endian last byte sign*/ -#define S_MEM_SPLT_LOCK 0x513 /* split lock set */ -/* values 0.000 MHz to + 9.999 Mhz */ -#define S_MEM_HF_DUP_OFST 0x514 /* default HF band duplex offset 3 byte little endian */ -#define S_MEM_6M_DUP_OFST 0x515 /* default 50 mHz duplex offset 3 byte little endian */ -#define S_MEM_2M_DUP_OFST 0x516 /* default 144 MHz duplex offset 3 byte little endian */ -#define S_MEM_AUTO_RPTR 0x518 /* auto repeater set 0=OFF; 1=ON-1; 2=ON-2 */ -#define S_MEM_LANG 0x523 /* 0=English 1=Japanese for voice announcer */ -#define S_MEM_TRCV 0x536 /* CI-V trancieve mode */ -#define S_MEM_CMP_LVL 0x538 /* speech compressor level 0-10 */ -#define S_MEM_SBASS 0x539 /* SSB TX tone bass level */ -#define S_MEM_RTTY_FL_PB 0x562 /* 0=250 Hz, 1=300' 2 = 350, 3 = 500, 4 = 1 KHz */ -#define S_MEM_RTTY_TWNPK 0x563 /* rtty twin peak filter off/on */ -#define S_MEM_SCN_SPD 0x570 /* 0 = low; 1 = high */ -#define S_MEM_NB_LVL 0x572 /* NB level 0-255 */ -#define S_MEM_VOX_GN_LVL 0x573 /* vox gain */ -#define S_MEM_AVOX_GN_LVL 0x574 /* anti-vox gain */ -#define S_MEM_VOX_DEL_LVL 0x575 /* vox delay 0=0 - 20=2.0 sec */ - -static const struct confparams ic746pro_ext_parms[] = -{ - { - TOK_SSBBASS, "ssbbass", "SSB Tx Tone (Bass)", "SSB Tx Tone (Bass)", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 10, 1 } } - }, - { - TOK_SQLCTRL, "sqlctrl", "RF/Sql control", "set RF/Squelch control", - NULL, RIG_CONF_COMBO, { .c = {{ "Auto", "Sql", "RF+Sql", NULL }} } - }, - { - TOK_RTTY_FLTR, "rttyfltr", "RTTY Fltr Width preset", "Set/Read RTTY preset filter width", - "350", RIG_CONF_COMBO, { .c = {{"250", "300", "350", "500", "1000", NULL }} } - }, - { RIG_CONF_END, NULL, } -}; - - -/* - * NUMERIC: val.f - * COMBO: val.i, starting from 0 Index to a string table. - * STRING: val.cs for set, val.s for get - * CHECKBUTTON: val.i 0/1 - */ - - -/* - * IC-746pro rig capabilities. - */ -static const struct icom_priv_caps ic746pro_priv_caps = -{ - 0x66, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_SLOW, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_FAST, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic746pro_caps = -{ - .rig_model = RIG_MODEL_IC746PRO, - .model_name = "IC-746PRO", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC746_FUNC_ALL | RIG_FUNC_TUNER | RIG_FUNC_VSC, - .has_set_func = IC746_FUNC_ALL | RIG_FUNC_TUNER | RIG_FUNC_VSC, - .has_get_level = IC746_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC746_LEVEL_ALL), - .has_get_parm = IC746_GET_PARM, - .has_set_parm = IC746_SET_PARM, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .extparms = ic746pro_ext_parms, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC746_VFO_OPS | RIG_OP_TUNE, - .scan_ops = IC746_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 9, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC746PRO_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC746PRO_MEM_CAP }, /* two by two */ - { 102, 102, RIG_MTYPE_CALL, IC746PRO_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(60), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - {MHz(144), MHz(146), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_6m(1, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_2m(1, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_HF(1, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_2m(1, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - /* most it2 rigs have 108-174 coverage*/ - .rx_range_list2 = { - {kHz(30), MHz(60), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - {MHz(108), MHz(174), IC746_ALL_RX_MODES, -1, -1, IC746_VFO_ALL, IC746_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_6m(2, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_2m(2, IC746_OTHER_TX_MODES, W(5), W(100), IC746_VFO_ALL, IC746_ANTS), - FRQ_RNG_HF(2, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - FRQ_RNG_2m(2, IC746_AM_TX_MODES, W(2), W(40), IC746_VFO_ALL, IC746_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC746_1HZ_TS_MODES, 1}, - {IC746_ALL_RX_MODES, 100}, - {IC746_ALL_RX_MODES, kHz(1)}, - {IC746_ALL_RX_MODES, kHz(5)}, - {IC746_ALL_RX_MODES, kHz(9)}, - {IC746_ALL_RX_MODES, kHz(10)}, - {IC746_ALL_RX_MODES, kHz(12.5)}, - {IC746_ALL_RX_MODES, kHz(20)}, - {IC746_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! It might be better to rewrite and just put all filter widths for 1 mode together in 1 record. Remember these are defaults, with dsp rigs you can change them to anything you want (except rtty filter modes). */ - .filters = { - {RIG_MODE_SSB, kHz(2.4)}, - {RIG_MODE_SSB, kHz(1.8)}, - {RIG_MODE_SSB, kHz(3)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(7)}, - - /* There are 5 rtty filters when rtty filter mode is set (default condition) { 1k, 500, 350, 300, 250 }. These are fixed. If rtty filter mode is unset there are 3 general IF filters { 2.4k, 500, 250 are the defaults }. These can be changed. There is a "twin-peak" filter mode as well. It boosts the 2125 and 2295 recieve frequency reponse. The S_FUNC_RF (rtty filter) turns the rtty filter mode on and off. */ - - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, /* RTTY & "normal" IF Filters */ - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, /* RTTY & "narrow" IF Filters */ - {RIG_MODE_CW | RIG_MODE_CWR, kHz(2.4)}, /* "wide" IF filter */ - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(1)}, /*RTTY mode Filter*/ - {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(350)}, /*"Default " rtty mode filter*/ - {RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(300)}, /* RTTY mode Filter */ - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(3)}, - {RIG_MODE_AM, kHz(9)}, - RIG_FLT_END, - }, - .str_cal = IC746_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic746pro_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = ic746_set_parm, - .get_parm = ic746_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = NULL, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = NULL, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - .set_ext_parm = ic746pro_set_ext_parm, - .get_ext_parm = ic746pro_get_ext_parm, - .get_channel = ic746pro_get_channel, -}; - - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -static int ic746pro_set_ext_parm(RIG *rig, token_t token, value_t val) -{ - unsigned char epbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len, ep_len, val_len; - int ep_cmd = C_CTL_MEM; - int ep_sc; /* Subcommand in $1A $05xx */ - int icom_val = 0; - int retval; - - ep_len = 0; /* 0 implies BCD data */ - val_len = 1; - - switch (token) - { - case TOK_SSBBASS: - ep_sc = S_MEM_SBASS ; - icom_val = val.f; - break; - - case TOK_SQLCTRL: - ep_sc = S_MEM_SQL_CTL; - /* TODO: check range this actually doesn't decode the input type 'string' */ - icom_val = val.i; - break; - - case TOK_RTTY_FLTR: /* RTTY filter mode 0 - 4 = 250, 300, 350, 500, 1000 */ - if (val.i < 0 || val.i > 4) { return -RIG_EINVAL; } - - ep_sc = S_MEM_RTTY_FL_PB; - icom_val = val.i; - break; - - default: - return -RIG_EINVAL; - } - - if (ep_len == 0) - { - to_bcd_be(epbuf, (long long)icom_val, val_len * 2); - ep_len += val_len; - } - - retval = icom_transaction(rig, ep_cmd, ep_sc, epbuf, ep_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - * and val points to a buffer big enough to hold the conf value. - */ -static int ic746pro_get_ext_parm(RIG *rig, token_t token, value_t *val) -{ - const struct confparams *cfp; - - unsigned char resbuf[MAXFRAMELEN]; - int res_len, icom_val = 0; - int cmdhead; - int retval; - - int ep_cmd = C_CTL_MEM; - int ep_sc; /* Subcommand in $1A $05xx */ - - switch (token) - { - case TOK_SSBBASS: - ep_sc = S_MEM_SBASS ; - break; - - case TOK_SQLCTRL: - ep_sc = S_MEM_SQL_CTL; - break; - - case TOK_RTTY_FLTR: /* RTTY filter mode 0 - 4 */ - ep_sc = S_MEM_RTTY_FL_PB; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported get_ext_parm %s", rig_strparm(token)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, ep_cmd, ep_sc, NULL, 0, - resbuf, &res_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * strbuf should contain Cn,Sc,Data area - */ - cmdhead = (ep_sc == -1) ? 1 : S_MEM_SC_LEN + 1; - res_len -= cmdhead; - - /* should echo cmd, subcmd and then data, if you get an ack something is wrong */ - if (resbuf[0] != ep_cmd) - { - if (resbuf[0] == ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_EPROTO; - } - else - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_ERJCTED; - } - } - - cfp = rig_ext_lookup_tok(rig, token); - - switch (cfp->type) - { - case RIG_CONF_STRING: - memcpy(val->s, resbuf, res_len); - break; - - case RIG_CONF_CHECKBUTTON: - case RIG_CONF_COMBO: - val->i = from_bcd_be(resbuf + cmdhead, res_len * 2); - break; - - case RIG_CONF_NUMERIC: - val->f = from_bcd_be(resbuf + cmdhead, res_len * 2); - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_EPROTO; - - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %d %d %d %f\n", - __func__, res_len, icom_val, val->i, val->f); - - return RIG_OK; -} - - -/* - * icom_set_parm - * Assumes rig!=NULL - * These are very much rig specific and should probably be in rig files. These are for IC-746Pro. - * The 746 has no parameters. - */ -int ic746_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char prmbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len, prm_len; - int prm_cn, prm_sc; - int retval, icom_val; - - prm_cn = C_CTL_MEM; /* Most parm are 0x05xx */ - prm_sc = S_MEM_PARM; - - switch (parm) - { - case RIG_PARM_ANN: - if ((val.i == RIG_ANN_FREQ) || (val.i == RIG_ANN_RXMODE)) - { - prm_cn = C_CTL_ANN; - prm_sc = val.i; - prm_len = 0; - } - else - { - if ((val.i == RIG_ANN_ENG) || (val.i == RIG_ANN_JAP)) - { - prm_cn = C_CTL_MEM; - prm_sc = S_MEM_LANG; - prm_len = 1; - prmbuf[0] = (val.i == RIG_ANN_ENG ? 0 : 1); - } - else - { - rig_debug(RIG_DEBUG_ERR, "Unsupported set_parm_ann %d\n", val.i); - return -RIG_EINVAL; - } - } - - break; - - case RIG_PARM_BACKLIGHT: - prm_sc = S_MEM_BKLIT; - prm_len = 2; - icom_val = val.f * 255 ; - to_bcd_be(prmbuf + 1, (long long)icom_val, 4); - break; - - case RIG_PARM_BEEP: - prm_sc = S_MEM_BEEP; - prm_len = 1; - prmbuf[1] = val.i; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported set_parm %s\n", rig_strparm(parm)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, prm_cn, prm_sc, prmbuf, prm_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "icom_set_parm: wrong frame len=%d\n", - ack_len); - return -RIG_EPROTO; - } - - return RIG_OK; -} - -/* - * icom_get_parm - * Assumes rig!=NULL - */ -int ic746_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char resbuf[MAXFRAMELEN]; - int res_len, icom_val; - int prm_cn, prm_sc; - int cmdhead; - int retval; - - prm_cn = C_CTL_MEM; - - switch (parm) - { - case RIG_PARM_BACKLIGHT: - prm_sc = S_MEM_BKLIT; - break; - - case RIG_PARM_BEEP: - prm_sc = S_MEM_BEEP; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported get_parm %s", rig_strparm(parm)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, prm_cn, prm_sc, NULL, 0, - resbuf, &res_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * strbuf should contain Cn,Sc,Data area - */ - cmdhead = (prm_sc == -1) ? 1 : 3; - res_len -= cmdhead; - - /* should echo cmd, subcmd and then data, if you get an ack something is wrong */ - if (resbuf[0] != prm_cn) - { - if (resbuf[0] == ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_EPROTO; - } - else - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_ERJCTED; - } - } - - icom_val = from_bcd_be(resbuf + cmdhead, res_len * 2); - - if (RIG_PARM_IS_FLOAT(parm)) - { - val->f = (float)icom_val / 255; - } - else - { - val->i = icom_val; - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %d %d %d %f\n", - __func__, res_len, icom_val, val->i, val->f); - - return RIG_OK; -} - -/* - * ic746pro_get_channel - * Assumes rig!=NULL, rig->state.priv!=NULL, chan!=NULL - * - * If memory is empty it will return RIG_OK,but every thing will be null. Where do we boundary check? - */ -int ic746pro_get_channel(RIG *rig, channel_t *chan) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char chanbuf[46]; - mem_buf_t *membuf; - int chan_len, freq_len, retval, data_len; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - to_bcd_be(chanbuf, chan->channel_num, 4); - chan_len = 2; - - freq_len = priv->civ_731_mode ? 4 : 5; - - retval = icom_transaction(rig, C_CTL_MEM, S_MEM_CNTNT, - chanbuf, chan_len, chanbuf, &chan_len); - - if (retval != RIG_OK) - { - return retval; - } - - chan->vfo = RIG_VFO_MEM; - chan->ant = RIG_ANT_NONE; - chan->freq = 0; - chan->mode = RIG_MODE_NONE; - chan->width = RIG_PASSBAND_NORMAL; - chan->rptr_shift = RIG_RPT_SHIFT_NONE; - chan->rptr_offs = 0; - chan->tuning_step = 0; - chan->tx_freq = 0; - chan->tx_mode = RIG_MODE_NONE; - chan->tx_width = RIG_PASSBAND_NORMAL; - chan->tx_vfo = RIG_VFO_NONE; - chan->rit = 0; - chan->xit = 0; - chan->funcs = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_PREAMP)].i = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_ATT)].i = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_AF)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_SQL)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_NR)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_PBT_IN)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_PBT_OUT)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_CWPITCH)].i = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_AGC)].i = RIG_AGC_OFF; - chan->ctcss_tone = 0; - chan->ctcss_sql = 0; - chan->dcs_code = 0; - chan->dcs_sql = 0; - chan->scan_group = 0; - chan->flags = RIG_CHFLAG_SKIP; - strcpy(chan->channel_desc, " "); - - /* - * chanbuf should contain Cn,Sc, Chan #, Data area - */ - if ((chan_len != freq_len * 2 + 40) && (chan_len != 1)) - { - rig_debug(RIG_DEBUG_ERR, "ic746pro_get_channel: wrong frame len=%d\n", - chan_len); - return -RIG_ERJCTED; - } - - /* do this only if not a blank channel */ - if (chan_len != 1) - { - int band; - int sc; - unsigned char databuf[32]; - - membuf = (mem_buf_t *)(chanbuf + 4); - - chan->flags = membuf->chan_flag && 0x01 ? RIG_CHFLAG_SKIP : RIG_CHFLAG_NONE; - - /* data mode on */ - if (membuf->rx.data) { chan->flags |= RIG_CHFLAG_DATA; } - - /* - * from_bcd requires nibble len - */ - chan->freq = from_bcd(membuf->rx.freq, freq_len * 2); - - icom2rig_mode(rig, membuf->rx.mode, membuf->rx.pb, - &chan->mode, &chan->width); - - chan->rptr_shift = (rptr_shift_t)(membuf->rx.dup >> 8); - - /* offset is default for the band & is not stored in channel memory. - The following retrieves the system default for the band */ - band = (int) chan->freq / 1000000; /* hf, 2m or 6 m */ - - if (band < 50) { sc = S_MEM_HF_DUP_OFST; } - else if (band < 108) { sc = S_MEM_6M_DUP_OFST; } - else { sc = S_MEM_2M_DUP_OFST; } - - retval = icom_transaction(rig, C_CTL_MEM, sc, - NULL, 0, databuf, &data_len); - - if (retval != RIG_OK) - { - return retval; - } - - chan->rptr_offs = from_bcd(databuf + 3, 6) * 100; - - chan->ctcss_tone = from_bcd_be(membuf->rx.tone, 6); - chan->ctcss_sql = from_bcd_be(membuf->rx.tone_sql, 6); - chan->dcs_code = from_bcd_be(membuf->rx.dcs.code, 4); - /* The dcs information include in the channel includes polarity information - for both tx and receive. Both directions are enabled when in dcs mode */ - - chan->tx_freq = from_bcd(membuf->tx.freq, freq_len * 2); - icom2rig_mode(rig, membuf->tx.mode, membuf->tx.pb, - &chan->tx_mode, &chan->tx_width); - strncpy(chan->channel_desc, membuf->name, 9); - chan->channel_desc[9] = '\0'; /* add null terminator */ - } - - return RIG_OK; -} diff --git a/icom/ic751.c b/icom/ic751.c deleted file mode 100644 index 425e6d010..000000000 --- a/icom/ic751.c +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-751 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" -#include "idx_builtin.h" - -/* - * FM is an option on the Icom IC-751, and built-in in the Icom IC-751A - */ -#define IC751_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) - -/* - * 200W in all modes but AM (40W) - */ -#define IC751_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC751_AM_TX_MODES (RIG_MODE_AM) - -#define IC751_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) - -#define IC751_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -#define IC751_SCAN_OPS (RIG_SCAN_NONE) - -#define IC751_ANTS RIG_ANT_1 - -/* - * S-Meter measurements - * (Only the Piexx UX-14px rev.2 and up has an S-meter option.) - * Values based on the readings of my IC-751A S-meter, i.e. not - * actual signal strength. -- Lars, sm6rpz - */ -#define IC751_STR_CAL { 16, { \ - { 3, -52 }, /* S0.5 */ \ - { 12, -48 }, /* S1 */ \ - { 33, -42 }, /* S2 */ \ - { 45, -36 }, /* S3 */ \ - { 60, -30 }, /* S4 */ \ - { 73, -24 }, /* S5 */ \ - { 86, -18 }, /* S6 */ \ - { 100, -12 }, /* S7 */ \ - { 115, -6 }, /* S8 */ \ - { 129, 0 }, /* S9 */ \ - { 160, 10 }, /* S9+10 */ \ - { 186, 20 }, /* S9+20 */ \ - { 208, 30 }, /* S9+30 */ \ - { 226, 40 }, /* S9+40 */ \ - { 241, 50 }, /* S9+50 */ \ - { 255, 60 } /* S9+60 */ \ - } } - -/* - */ -static const struct icom_priv_caps ic751_priv_caps = -{ - 0x1c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic751_caps = -{ - .rig_model = RIG_MODEL_IC751, - .model_name = "IC-751", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, /* Piexx UX-14px has a PTT option */ - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, /* Piexx UX-14px can use 9600 */ - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - /* Piexx UX-14px has an S-meter option */ - .has_get_level = (RIG_LEVEL_RAWSTR | RIG_LEVEL_STRENGTH), - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC751_VFO_OPS, - .scan_ops = IC751_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 32, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(30), IC751_ALL_RX_MODES, -1, -1, IC751_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(1.8), MHz(1.99999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, /* 100W class */ - {MHz(1.8), MHz(1.99999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, /* 40W class */ - {MHz(3.45), MHz(4.09999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(3.45), MHz(4.09999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(27.95), MHz(30), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(27.95), MHz(30), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(100), MHz(30), IC751_ALL_RX_MODES, -1, -1, IC751_VFO_ALL}, - RIG_FRNG_END, - }, - /* weird transmit ranges ... --sf */ - .tx_range_list2 = { - {MHz(1.8), MHz(1.99999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, /* 100W class */ - {MHz(1.8), MHz(1.99999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, /* 40W class */ - {MHz(3.45), MHz(4.09999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(3.45), MHz(4.09999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - {MHz(27.95), MHz(30), IC751_OTHER_TX_MODES, W(10), W(200), IC751_VFO_ALL}, - {MHz(27.95), MHz(30), IC751_AM_TX_MODES, W(10), W(40), IC751_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC751_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB, kHz(2.3)}, - {RIG_MODE_RTTY | RIG_MODE_CW, Hz(500)}, - {RIG_MODE_RTTY | RIG_MODE_CW, Hz(250)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .str_cal = IC751_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic751_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - - .get_level = icom_get_level, - .set_ptt = icom_set_ptt,/* Piexx UX-14px has no get_ptt only set_ptt */ -}; diff --git a/icom/ic756.c b/icom/ic756.c deleted file mode 100644 index c8943125e..000000000 --- a/icom/ic756.c +++ /dev/null @@ -1,1234 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-756 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - - -#define IC756_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC756_1HZ_TS_MODES IC756_ALL_RX_MODES - -/* - * 100W in all modes but AM (40W) - */ -#define IC756_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC756_AM_TX_MODES (RIG_MODE_AM) - -#define IC756PRO_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_RF|RIG_FUNC_ANF) -#define IC756PRO_FUNC_SET (IC756PRO_FUNC_ALL|RIG_FUNC_DUAL_WATCH) - -#define IC756PRO_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_COMP) - -/* Note that RIG_LEVEL_VOXGAIN and RIG_LEVEL_ANTIVOX are incorrectly handled in icom.c for - * this model. - */ - -#define IC756_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) - -#define IC756_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define IC756_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC756_ANTS (RIG_ANT_1|RIG_ANT_2) - -#define IC756PRO_STR_CAL { 16, \ - { \ - { 0, -60 }, \ - { 14, -52 }, \ - { 29, -44 }, \ - { 44, -36 }, \ - { 60, -28 }, \ - { 75, -20 }, \ - { 91, -12 }, \ - { 107, -4 }, \ - { 124, 4 }, \ - { 141, 12 }, \ - { 158, 20 }, \ - { 175, 28 }, \ - { 192, 36 }, \ - { 210, 44 }, \ - { 228, 52 }, \ - { 247 ,60 } \ - } } - -int ic756_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); -int ic756pro2_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic756pro2_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); -int ic756pro2_set_parm(RIG *rig, setting_t parm, value_t val); -int ic756pro2_get_parm(RIG *rig, setting_t parm, value_t *val); - -/* - * This function deals with the older type radios with only 2 filter widths - * (0 - normal, 1 - narrow) - */ -static int r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) -{ - int err; - - err = rig2icom_mode(rig, mode, width, md, pd); - - if (err != RIG_OK) - { - return err; - } - - if (PD_WIDE_3 == *pd) - { - *pd = PD_MEDIUM_2; - } - else if (*pd > PD_WIDE_3) - { - (*pd)--; - } - - return RIG_OK; -} - -/* - * IC-756 rig capabilities. - */ -static const struct icom_priv_caps ic756_priv_caps = -{ - 0x50, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756_ts_sc_list, - .r2i_mode = r2i_mode, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic756_caps = -{ - .rig_model = RIG_MODEL_IC756, - .model_name = "IC-756", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC756_VFO_OPS, - .scan_ops = IC756_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC756_ALL_RX_MODES, -1, -1, IC756_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(1, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(1, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC756_ALL_RX_MODES, -1, -1, IC756_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(2, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(2, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC756_1HZ_TS_MODES, 1}, - {IC756_ALL_RX_MODES, kHz(1)}, - {IC756_ALL_RX_MODES, kHz(5)}, - {IC756_ALL_RX_MODES, kHz(9)}, - {IC756_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_CW, kHz(2.4)}, - {RIG_MODE_CW, Hz(500)}, - {RIG_MODE_AM, kHz(9)}, - {RIG_MODE_AM, kHz(2.4)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(9)}, - RIG_FLT_END, - }, - .str_cal = IC756PRO_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic756_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = ic756_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_freq_mode = icom_set_split_freq_mode, - .get_split_freq_mode = icom_get_split_freq_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - -}; - - -/* - * IC-756pro rig capabilities. - * - * TODO: check every parameter, add antenna capabilities - */ -static const struct icom_priv_caps ic756pro_priv_caps = -{ - 0x5c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct rig_caps ic756pro_caps = -{ - .rig_model = RIG_MODEL_IC756PRO, - .model_name = "IC-756PRO", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC756PRO_FUNC_ALL, - .has_set_func = IC756PRO_FUNC_SET, - .has_get_level = IC756PRO_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 6, 12, 18, 20, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC756_VFO_OPS, - .scan_ops = IC756_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC756_ALL_RX_MODES, -1, -1, IC756_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(1, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(1, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC756_ALL_RX_MODES, -1, -1, IC756_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(2, IC756_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(2, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC756_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC756_1HZ_TS_MODES, 1}, - {IC756_ALL_RX_MODES, kHz(1)}, - {IC756_ALL_RX_MODES, kHz(5)}, - {IC756_ALL_RX_MODES, kHz(9)}, - {IC756_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_CW, Hz(500)}, - {RIG_MODE_AM, kHz(8)}, - {RIG_MODE_AM, kHz(2.4)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(8)}, - RIG_FLT_END, - }, - .str_cal = IC756PRO_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic756pro_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = ic756_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_freq_mode = icom_set_split_freq_mode, - .get_split_freq_mode = icom_get_split_freq_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - -}; - -/* - * IC-756proII rig capabilities. - * - * TODO: check every parameter, add antenna capabilities - */ -static const struct icom_priv_caps ic756pro2_priv_caps = -{ - 0x64, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -/* - * These TOKEN_BACKEND's are on a different name space than conf's - */ -#define TOK_MEMNAME TOKEN_BACKEND(1) -#define TOK_MYCALL TOKEN_BACKEND(2) - -static const struct confparams ic756pro2_ext_parms[] = -{ - { - TOK_SSBBASS, "ssbbass", "SSB Tx Tone (Bass)", "SSB Tx Tone (Bass)", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 10, 1 } } - }, - { - TOK_MEMNAME, "showmem", "Show mem name", "Show memory name", - NULL, RIG_CONF_CHECKBUTTON, { } - }, - { - TOK_SQLCTRL, "sqlctrl", "RF/Sql control", "set RF/Squelch control", - NULL, RIG_CONF_COMBO, { .c = {{ "Auto", "Sql", "RF+Sql", NULL }} } - }, - { - TOK_MYCALL, "mycall", "Callsign", "My call sign", - NULL, RIG_CONF_STRING, { } - }, - { - TOK_RTTY_FLTR, "rttyfltr", "RTTY Fltr Width preset", "Set/Read RTTY preset filter width", - "350", RIG_CONF_COMBO, { .c = {{"250", "300", "350", "500", "1000", NULL }} } - }, - { RIG_CONF_END, NULL, } -}; - - -/* - * NUMERIC: val.f - * COMBO: val.i, starting from 0 - * STRING: val.cs for set, val.s for get - * CHECKBUTTON: val.i 0/1 - */ - -/*IC-756Pro Rig parameters Only available in this namespace*/ -#define S_MEM_SC_LEN 2 /* 756PRO S_MEM subcmd length */ -#define S_MEM_SBASS 0x501 /* SSB TX tone bass level */ -#define S_MEM_NAME 0x514 /* send/read memory name */ -#define S_MEM_MYCALL 0x515 -#define S_MEM_BEEP 0x520 /* Button confirmation */ -#define S_MEM_SQL_CTL 0x522 /* RF/SQL ctl set 0=auto; 1 = sql; 2 = RF+SQL */ -#define S_MEM_QSPLT 0x524 /* enable quick split mode */ -#define S_MEM_TRCV 0x532 /* CI-V trancieve mode */ -#define S_MEM_LANG 0x536 /* 0=English 1=Japanese for voice announcer */ -#define S_MEM_SCN_SPD 0x556 /* 0 = low; 1 = high */ -#define S_MEM_RTTY_FL_PB 0x561 /* 0=250 Hz, 1=300' 2 = 350, 3 = 500, 4 = 1 KHz */ -#define S_MEM_RTTY_TWNPK 0x562 /* rtty twin peak filter off/on */ - - -static int ic756pro2_set_ext_parm(RIG *rig, token_t token, value_t val); -static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val); - -#define IC756PROII_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC756PROII_1HZ_TS_MODES IC756PROII_ALL_RX_MODES -#define IC756PROII_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC756PROII_AM_TX_MODES (RIG_MODE_AM) - -#define IC756PROII_LEVEL_ALL (IC756PRO_LEVEL_ALL|RIG_LEVEL_VOXDELAY) - -#define IC756PROII_PARMS (RIG_PARM_ANN|RIG_PARM_BEEP|RIG_PARM_BACKLIGHT|RIG_PARM_TIME) - -const struct rig_caps ic756pro2_caps = -{ - .rig_model = RIG_MODEL_IC756PROII, - .model_name = "IC-756PROII", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC756PRO_FUNC_ALL, - .has_set_func = IC756PRO_FUNC_SET, - .has_get_level = IC756PROII_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC756PROII_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extparms = ic756pro2_ext_parms, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 6, 12, 18, 20, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC756_VFO_OPS, - .scan_ops = IC756_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC756PROII_ALL_RX_MODES, -1, -1, IC756_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC756PROII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(1, IC756PROII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(1, IC756PROII_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC756PROII_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC756PROII_ALL_RX_MODES, -1, -1, IC756_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC756PROII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(2, IC756PROII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(2, IC756PROII_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC756PROII_AM_TX_MODES, W(2), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC756PROII_1HZ_TS_MODES, 1}, - {IC756PROII_ALL_RX_MODES, kHz(1)}, - {IC756PROII_ALL_RX_MODES, kHz(5)}, - {IC756PROII_ALL_RX_MODES, kHz(9)}, - {IC756PROII_ALL_RX_MODES, kHz(10)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_CW, Hz(500)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(2.4)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(8)}, - RIG_FLT_END, - }, - .str_cal = IC756PRO_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic756pro2_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_parm = ic756pro2_set_parm, - .get_parm = ic756pro2_get_parm, - .set_level = ic756pro2_set_level, - .get_level = ic756pro2_get_level, - .set_func = ic756_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_freq_mode = icom_set_split_freq_mode, - .get_split_freq_mode = icom_get_split_freq_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - - .set_ext_parm = ic756pro2_set_ext_parm, - .get_ext_parm = ic756pro2_get_ext_parm, -}; - - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -static int ic756pro2_set_ext_parm(RIG *rig, token_t token, value_t val) -{ - unsigned char epbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len, ep_len, val_len; - int ep_cmd = C_CTL_MEM; - int ep_sc; /* Subcommand in $1A $05xx */ - int icom_val = 0; - int retval; - - ep_len = 0; /* 0 implies BCD data */ - val_len = 1; - - switch (token) - { - case TOK_SSBBASS: - ep_sc = S_MEM_SBASS ; - icom_val = val.f; - break; - - case TOK_MEMNAME: - ep_sc = S_MEM_NAME; - icom_val = val.i ? 1 : 0; - break; - - case TOK_SQLCTRL: - ep_sc = S_MEM_SQL_CTL; - /* TODO: check range this actually doesn't decode the input type 'string' */ - icom_val = val.i; - break; - - case TOK_MYCALL: /* max 10 ASCII char */ - ep_len = strlen(val.cs); - - if (ep_len > 10) - { - return -RIG_EINVAL; - } - - ep_sc = S_MEM_MYCALL; - memcpy(epbuf, val.cs, ep_len); - break; - - case TOK_RTTY_FLTR: /* RTTY filter mode 0 - 4 = 250, 300, 350, 500, 1000 */ - if (val.i < 0 || val.i > 4) { return -RIG_EINVAL; } - - ep_sc = S_MEM_RTTY_FL_PB; - icom_val = val.i; - break; - - default: - return -RIG_EINVAL; - } - - if (ep_len == 0) - { - to_bcd_be(epbuf, (long long)icom_val, val_len * 2); - ep_len += val_len; - } - - retval = icom_transaction(rig, ep_cmd, ep_sc, epbuf, ep_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - * and val points to a buffer big enough to hold the conf value. - */ -static int ic756pro2_get_ext_parm(RIG *rig, token_t token, value_t *val) -{ - const struct confparams *cfp; - - unsigned char resbuf[MAXFRAMELEN]; - int res_len, icom_val = 0; - int cmdhead; - int retval; - - int ep_cmd = C_CTL_MEM; - int ep_sc; /* Subcommand in $1A $05xx */ - - switch (token) - { - case TOK_SSBBASS: - ep_sc = S_MEM_SBASS ; - break; - - case TOK_MEMNAME: - ep_sc = S_MEM_NAME; - break; - - case TOK_SQLCTRL: - ep_sc = S_MEM_SQL_CTL; - break; - - case TOK_MYCALL: /* max 10 ASCII char */ - ep_sc = S_MEM_MYCALL; - break; - - case TOK_RTTY_FLTR: /* RTTY filter mode 0 - 4 */ - ep_sc = S_MEM_RTTY_FL_PB; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported get_ext_parm %s", rig_strparm(token)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, ep_cmd, ep_sc, NULL, 0, - resbuf, &res_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * strbuf should contain Cn,Sc,Data area - */ - cmdhead = (ep_sc == -1) ? 1 : S_MEM_SC_LEN + 1; - res_len -= cmdhead; - - /* should echo cmd, subcmd and then data, if you get an ack something is wrong */ - if (resbuf[0] != ep_cmd) - { - if (resbuf[0] == ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_EPROTO; - } - else - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_ERJCTED; - } - } - - cfp = rig_ext_lookup_tok(rig, token); - - switch (cfp->type) - { - case RIG_CONF_STRING: - memcpy(val->s, resbuf, res_len); - break; - - case RIG_CONF_CHECKBUTTON: - case RIG_CONF_COMBO: - val->i = from_bcd_be(resbuf + cmdhead, res_len * 2); - break; - - case RIG_CONF_NUMERIC: - val->f = from_bcd_be(resbuf + cmdhead, res_len * 2); - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return -RIG_EPROTO; - - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %d %d %d %f\n", - __func__, res_len, icom_val, val->i, val->f); - - return RIG_OK; -} - - - -/* - * IC-756proIII rig capabilities. - * - * TODO: check every parameter, add antenna capabilities - */ -static const struct icom_priv_caps ic756pro3_priv_caps = -{ - 0x6e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - - -#define IC756PROIII_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC756PROIII_1HZ_TS_MODES IC756PROIII_ALL_RX_MODES -#define IC756PROIII_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define IC756PROIII_AM_TX_MODES (RIG_MODE_AM) - -#define IC756PROIII_LEVEL_ALL (IC756PROII_LEVEL_ALL|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_NB) - -/* - * TODO: check whether all func and levels are stored in memory - * - * No memory split support. - * .rptr_offs = 1, to be done for FM special mode - * - * Channel description should be possible through: 0x1a 0x00 - * c.f. http://www.plicht.de/ekki/civ/civ-p4305-756pro.html - */ -#define IC756PROIII_MEM_CAP { \ - .ant = 1, \ - .tuning_step = 1, \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .ctcss_tone = 1, \ - .ctcss_sql = 1, \ - .funcs = IC756PRO_FUNC_ALL, \ - .levels = RIG_LEVEL_SET(IC756PRO_LEVEL_ALL), \ -} - -#define IC756PROIII_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC756PROIII_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC756PROIII_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC756PROIII_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -const struct rig_caps ic756pro3_caps = -{ - .rig_model = RIG_MODEL_IC756PROIII, - .model_name = "IC-756PROIII", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC756PRO_FUNC_ALL | RIG_FUNC_TUNER, - .has_set_func = IC756PRO_FUNC_SET | RIG_FUNC_TUNER, - .has_get_level = IC756PROIII_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC756PROIII_LEVEL_ALL), - .has_get_parm = IC756PROII_PARMS, - .has_set_parm = RIG_PARM_SET(IC756PROII_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extparms = ic756pro2_ext_parms, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC values */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC756_VFO_OPS | RIG_OP_TUNE, - .scan_ops = IC756_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 10, /* TODO */ - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC756PROIII_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC756PROIII_MEM_CAP }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC756PROIII_ALL_RX_MODES, -1, -1, IC756_VFO_ALL, IC756_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC756PROIII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(1, IC756PROIII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(1, IC756PROIII_AM_TX_MODES, W(5), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC756PROIII_AM_TX_MODES, W(5), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC756PROIII_ALL_RX_MODES, -1, -1, IC756_VFO_ALL, IC756_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC756PROIII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_6m(2, IC756PROIII_OTHER_TX_MODES, W(5), W(100), IC756_VFO_ALL, IC756_ANTS), - FRQ_RNG_HF(2, IC756PROIII_AM_TX_MODES, W(5), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC756PROIII_AM_TX_MODES, W(5), W(40), IC756_VFO_ALL, IC756_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC756PROIII_1HZ_TS_MODES, 1}, - {IC756PROIII_1HZ_TS_MODES, 100}, - {IC756PROIII_ALL_RX_MODES, kHz(1)}, - {IC756PROIII_ALL_RX_MODES, kHz(5)}, - {IC756PROIII_ALL_RX_MODES, kHz(9)}, - {IC756PROIII_ALL_RX_MODES, kHz(10)}, - {IC756PROIII_ALL_RX_MODES, kHz(12.5)}, - {IC756PROIII_ALL_RX_MODES, kHz(20)}, - {IC756PROIII_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_CW | RIG_MODE_CWR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_SSB | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(3.6)}, /* wide */ - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_SSB | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(50)}, /* narrow */ - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(2.4)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(8)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_SSB | RIG_MODE_RTTY | RIG_MODE_RTTYR, RIG_FLT_ANY}, /* almost any filter */ - RIG_FLT_END, - }, - .str_cal = IC756PRO_STR_CAL, - .swr_cal = IC756PROIII_SWR_CAL, - .alc_cal = IC756PROIII_ALC_CAL, - .rfpower_meter_cal = IC756PROIII_RFPOWER_METER_CAL, - .comp_meter_cal = IC756PROIII_COMP_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic756pro3_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_parm = ic756pro2_set_parm, - .get_parm = ic756pro2_get_parm, - .set_level = ic756pro2_set_level, - .get_level = ic756pro2_get_level, - .set_func = ic756_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_freq_mode = icom_set_split_freq_mode, - .get_split_freq_mode = icom_get_split_freq_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = NULL, - - .set_ext_parm = ic756pro2_set_ext_parm, - .get_ext_parm = ic756pro2_get_ext_parm, -}; - -int ic756_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) -{ - unsigned char fctbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int fct_len = 0, acklen, retval; - int fct_cn, fct_sc; /* Command Number, Subcommand */ - - switch (func) - { - case RIG_FUNC_DUAL_WATCH: - fct_cn = C_SET_VFO; - fct_sc = status ? S_DUAL_ON : S_DUAL_OFF; - break; - - default: - return icom_set_func(rig, vfo, func, status); - } - - retval = icom_transaction(rig, fct_cn, fct_sc, fctbuf, fct_len, ackbuf, - &acklen); - - if (retval != RIG_OK) - { - return retval; - } - - if (acklen != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, acklen); - return -RIG_EPROTO; - } - - return RIG_OK; -} - -int ic756pro2_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x60; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic756pro2_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x60; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 1, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} - -int ic756pro2_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x20; - return icom_set_custom_parm(rig, 1, parmbuf, 1, val.i ? 1 : 0); - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x09; - return icom_set_custom_parm(rig, 1, parmbuf, 2, (int)(val.f * 255.0f)); - - case RIG_PARM_TIME: - parmbuf[0] = 0x16; - return icom_set_custom_parm_time(rig, 1, parmbuf, val.i); - - default: - return icom_set_parm(rig, parm, val); - } -} - -int ic756pro2_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - int retval; - int icom_val; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x20; - retval = icom_get_custom_parm(rig, 1, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->i = icom_val ? 1 : 0; - break; - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x09; - retval = icom_get_custom_parm(rig, 1, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val / 255.0f; - break; - - case RIG_PARM_TIME: - parmbuf[0] = 0x16; - return icom_get_custom_parm_time(rig, 1, parmbuf, &val->i); - - default: - return icom_get_parm(rig, parm, val); - } - - return RIG_OK; -} diff --git a/icom/ic7600.c b/icom/ic7600.c deleted file mode 100644 index 1ec95e931..000000000 --- a/icom/ic7600.c +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7600 - * Copyright (c) 2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC7600_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM) -#define IC7600_1HZ_TS_MODES IC7600_ALL_RX_MODES -#define IC7600_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) -#define IC7600_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) - -#define IC7600_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF|RIG_FUNC_DUAL_WATCH) - -#define IC7600_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC7600_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) -#define IC7600_PARMS (RIG_PARM_ANN|RIG_PARM_BEEP|RIG_PARM_TIME|RIG_PARM_BACKLIGHT|RIG_PARM_KEYLIGHT) - -#define IC7600_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7600_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC7600_ANTS (RIG_ANT_1|RIG_ANT_2) - -/* - * Measurement by Roeland, PA3MET - */ -#define IC7600_STR_CAL { 16, \ - { \ - { 0, -54 }, /* S0 */ \ - { 11, -48 }, \ - { 21, -42 }, \ - { 34, -36 }, \ - { 50, -30 }, \ - { 59, -24 }, \ - { 75, -18 }, \ - { 93, -12 }, \ - { 103, -6 }, \ - { 124, 0 }, /* S9 */ \ - { 145, 10 }, \ - { 160, 20 }, \ - { 183, 30 }, \ - { 204, 40 }, \ - { 222, 50 }, \ - { 246, 60 } /* S9+60dB */ \ - } } - -#define IC7600_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7600_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7600_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC7600_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC7600_VD_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 152, 10.0f }, \ - { 181, 13.0f }, \ - { 212, 16.0f } \ - } } - -#define IC7600_ID_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 97, 10.0f }, \ - { 241, 25.0f } \ - } } - -int ic7600_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7600_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); -int ic7600_set_parm(RIG *rig, setting_t parm, value_t val); -int ic7600_get_parm(RIG *rig, setting_t parm, value_t *val); - -/* - * IC-7600 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps ic7600_priv_caps = -{ - 0x7a, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct confparams ic7600_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } -}; - -const struct rig_caps ic7600_caps = -{ - .rig_model = RIG_MODEL_IC7600, - .model_name = "IC-7600", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7600_FUNCS, - .has_set_func = IC7600_FUNCS, - .has_get_level = IC7600_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7600_LEVELS), - .has_get_parm = IC7600_PARMS, - .has_set_parm = RIG_PARM_SET(IC7600_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extlevels = ic7600_ext_levels, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7600_VFO_OPS, - .scan_ops = IC7600_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC7600_ALL_RX_MODES, -1, -1, IC7600_VFOS, IC7600_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS), - FRQ_RNG_6m(1, IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS), - FRQ_RNG_HF(1, IC7600_AM_TX_MODES, W(1), W(30), IC7600_VFOS, IC7600_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC7600_AM_TX_MODES, W(1), W(30), IC7600_VFOS, IC7600_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC7600_ALL_RX_MODES, -1, -1, IC7600_VFOS, IC7600_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS), - FRQ_RNG_6m(2, IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS), - FRQ_RNG_HF(2, IC7600_AM_TX_MODES, W(1), W(30), IC7600_VFOS, IC7600_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC7600_AM_TX_MODES, W(1), W(30), IC7600_VFOS, IC7600_ANTS), /* AM class */ - /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC7600_OTHER_TX_MODES, W(2), W(100), IC7600_VFOS, IC7600_ANTS}, /* USA only */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7600_1HZ_TS_MODES, 1}, - {IC7600_ALL_RX_MODES, Hz(100)}, - {IC7600_ALL_RX_MODES, kHz(1)}, - {IC7600_ALL_RX_MODES, kHz(5)}, - {IC7600_ALL_RX_MODES, kHz(9)}, - {IC7600_ALL_RX_MODES, kHz(10)}, - {IC7600_ALL_RX_MODES, kHz(12.5)}, - {IC7600_ALL_RX_MODES, kHz(20)}, - {IC7600_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_PSK | RIG_MODE_PSKR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(10)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(7)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - RIG_FLT_END, - }, - .str_cal = IC7600_STR_CAL, - .swr_cal = IC7600_SWR_CAL, - .alc_cal = IC7600_ALC_CAL, - .rfpower_meter_cal = IC7600_RFPOWER_METER_CAL, - .comp_meter_cal = IC7600_COMP_METER_CAL, - .vd_meter_cal = IC7600_VD_METER_CAL, - .id_meter_cal = IC7600_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic7600_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - .get_xit = icom_get_rit_new, - .set_xit = icom_set_xit_new, - - .decode_event = icom_decode_event, - .set_level = ic7600_set_level, - .get_level = ic7600_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = ic7600_set_parm, - .get_parm = ic7600_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .send_morse = icom_send_morse -}; - -int ic7600_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x67; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7600_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x67; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} - -int ic7600_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x59; - return icom_set_custom_parm(rig, 2, parmbuf, 1, val.i ? 1 : 0); - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x00; - parmbuf[1] = 0x38; - return icom_set_custom_parm(rig, 2, parmbuf, 2, (int)(val.f * 255.0f)); - - case RIG_PARM_KEYLIGHT: - parmbuf[0] = 0x00; - parmbuf[1] = 0x39; - return icom_set_custom_parm(rig, 2, parmbuf, 2, val.f != 0 ? 255 : 0); - - case RIG_PARM_TIME: - parmbuf[0] = 0x00; - parmbuf[1] = 0x54; - return icom_set_custom_parm_time(rig, 2, parmbuf, val.i); - - default: - return icom_set_parm(rig, parm, val); - } -} - -int ic7600_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - int retval; - int icom_val; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x59; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->i = icom_val ? 1 : 0; - break; - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x00; - parmbuf[1] = 0x38; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val / 255.0f; - break; - - case RIG_PARM_KEYLIGHT: - parmbuf[0] = 0x00; - parmbuf[1] = 0x39; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = icom_val > 0 ? 1 : 0; - break; - - case RIG_PARM_TIME: - parmbuf[0] = 0x00; - parmbuf[1] = 0x54; - return icom_get_custom_parm_time(rig, 2, parmbuf, &val->i); - - default: - return icom_get_parm(rig, parm, val); - } - - return RIG_OK; -} diff --git a/icom/ic761.c b/icom/ic761.c deleted file mode 100644 index 36bfec48e..000000000 --- a/icom/ic761.c +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-761 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC761_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) - -/* - * 100W in all modes but AM (40W) - */ -#define IC761_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC761_AM_TX_MODES (RIG_MODE_AM) - -#define IC761_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) - -#define IC761_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -#define IC761_SCAN_OPS (RIG_SCAN_NONE) - -#define IC761_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic761_priv_caps = -{ - 0x1e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic761_caps = -{ - .rig_model = RIG_MODEL_IC761, - .model_name = "IC-761", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC761_VFO_OPS, - .scan_ops = IC761_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 26, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, /* TBC */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(30), IC761_ALL_RX_MODES, -1, -1, IC761_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(1.8), MHz(1.99999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, /* 100W class */ - {MHz(1.8), MHz(1.99999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, /* 40W class */ - {MHz(3.45), MHz(4.09999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(3.45), MHz(4.09999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(27.95), MHz(30), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(27.95), MHz(30), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(100), MHz(30), IC761_ALL_RX_MODES, -1, -1, IC761_VFO_ALL}, - RIG_FRNG_END, - }, - /* weird transmit ranges ... --sf */ - .tx_range_list2 = { - {MHz(1.8), MHz(1.99999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, /* 100W class */ - {MHz(1.8), MHz(1.99999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, /* 40W class */ - {MHz(3.45), MHz(4.09999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(3.45), MHz(4.09999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(6.95), MHz(7.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(9.95), MHz(10.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(13.95), MHz(14.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(17.95), MHz(18.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(20.95), MHz(21.49999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(24.45), MHz(25.09999), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - {MHz(27.95), MHz(30), IC761_OTHER_TX_MODES, W(10), W(100), IC761_VFO_ALL}, - {MHz(27.95), MHz(30), IC761_AM_TX_MODES, W(10), W(40), IC761_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC761_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_RTTY | RIG_MODE_CW, Hz(500)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic761_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic7610.c b/icom/ic7610.c deleted file mode 100644 index cc2fac54c..000000000 --- a/icom/ic7610.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7610 - * Stolen from IC7610.c by Michael Black W9MDB - * Copyright (c) 2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC7610_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM) -#define IC7610_1HZ_TS_MODES IC7610_ALL_RX_MODES -#define IC7610_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) -#define IC7610_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) - -#define IC7610_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF|RIG_FUNC_DUAL_WATCH) - -#define IC7610_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC7610_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) -#define IC7610_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -#define IC7610_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7610_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC7610_ANTS (RIG_ANT_1|RIG_ANT_2) - -/* - * Measurement by Roeland, PA3MET - */ -#define IC7610_STR_CAL { 16, \ - { \ - { 0, -54 }, /* S0 */ \ - { 11, -48 }, \ - { 21, -42 }, \ - { 34, -36 }, \ - { 50, -30 }, \ - { 59, -24 }, \ - { 75, -18 }, \ - { 93, -12 }, \ - { 103, -6 }, \ - { 124, 0 }, /* S9 */ \ - { 145, 10 }, \ - { 160, 20 }, \ - { 183, 30 }, \ - { 204, 40 }, \ - { 222, 50 }, \ - { 246, 60 } /* S9+60dB */ \ - } } - -#define IC7610_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7610_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7610_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 212, 1.0f } \ - } } - -#define IC7610_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC7610_VD_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 151, 10.0f }, \ - { 211, 16.0f } \ - } } - -#define IC7610_ID_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 77, 10.0f }, \ - { 165, 20.0f }, \ - { 241, 30.0f } \ - } } - -int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7610 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps ic7610_priv_caps = -{ - 0x98, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct confparams ic7610_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } -}; - -const struct rig_caps ic7610_caps = -{ - .rig_model = RIG_MODEL_IC7610, - .model_name = "IC-7610", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 115200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7610_FUNCS, - .has_set_func = IC7610_FUNCS, - .has_get_level = IC7610_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7610_LEVELS), - .has_get_parm = IC7610_PARMS, - .has_set_parm = RIG_PARM_SET(IC7610_PARMS), /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extlevels = ic7610_ext_levels, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7610_VFO_OPS, - .scan_ops = IC7610_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC7610_ALL_RX_MODES, -1, -1, IC7610_VFOS, IC7610_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS), - FRQ_RNG_6m(1, IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS), - FRQ_RNG_HF(1, IC7610_AM_TX_MODES, W(1), W(30), IC7610_VFOS, IC7610_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC7610_AM_TX_MODES, W(1), W(30), IC7610_VFOS, IC7610_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC7610_ALL_RX_MODES, -1, -1, IC7610_VFOS, IC7610_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS), - FRQ_RNG_6m(2, IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS), - FRQ_RNG_HF(2, IC7610_AM_TX_MODES, W(1), W(30), IC7610_VFOS, IC7610_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC7610_AM_TX_MODES, W(1), W(30), IC7610_VFOS, IC7610_ANTS), /* AM class */ - /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC7610_OTHER_TX_MODES, W(2), W(100), IC7610_VFOS, IC7610_ANTS}, /* USA only */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7610_1HZ_TS_MODES, 1}, - {IC7610_ALL_RX_MODES, Hz(100)}, - {IC7610_ALL_RX_MODES, kHz(1)}, - {IC7610_ALL_RX_MODES, kHz(5)}, - {IC7610_ALL_RX_MODES, kHz(9)}, - {IC7610_ALL_RX_MODES, kHz(10)}, - {IC7610_ALL_RX_MODES, kHz(12.5)}, - {IC7610_ALL_RX_MODES, kHz(20)}, - {IC7610_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_PSK | RIG_MODE_PSKR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(10)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(7)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - RIG_FLT_END, - }, - .str_cal = IC7610_STR_CAL, - .swr_cal = IC7610_SWR_CAL, - .alc_cal = IC7610_ALC_CAL, - .rfpower_meter_cal = IC7610_RFPOWER_METER_CAL, - .comp_meter_cal = IC7610_COMP_METER_CAL, - .vd_meter_cal = IC7610_VD_METER_CAL, - .id_meter_cal = IC7610_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic7610_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - .get_xit = icom_get_rit_new, - .set_xit = icom_set_xit_new, - - .decode_event = icom_decode_event, - .set_level = ic7610_set_level, - .get_level = ic7610_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .send_morse = icom_send_morse -}; - -int ic7610_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x02; - cmdbuf[1] = 0x92; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7610_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x02; - cmdbuf[1] = 0x92; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic765.c b/icom/ic765.c deleted file mode 100644 index 92e8b1551..000000000 --- a/icom/ic765.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-765 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC765_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) - -/* - * IC-765 - * specs: http://www.qsl.net/sm7vhs/radio/icom/ic765/specs.htm - * - */ -#define IC765_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) -#define IC765_AM_TX_MODES (RIG_MODE_AM) - -#define IC765_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC765_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC765_SCAN_OPS (RIG_SCAN_PROG|RIG_SCAN_MEM) - -#define IC765_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic765_priv_caps = -{ - 0x2c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic765_caps = -{ - .rig_model = RIG_MODEL_IC765, - .model_name = "IC-765", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC765_VFO_OPS, - .scan_ops = IC765_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(30), IC765_ALL_RX_MODES, -1, -1, IC765_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC765_OTHER_TX_MODES, W(10), W(100), IC765_VFO_ALL, IC765_ANTS), - FRQ_RNG_HF(1, IC765_AM_TX_MODES, W(10), W(40), IC765_VFO_ALL, IC765_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(100), MHz(30), IC765_ALL_RX_MODES, -1, -1, IC765_VFO_ALL}, - RIG_FRNG_END, - }, - - /* weird transmit ranges ... --sf */ - .tx_range_list2 = { - {kHz(1800), 1999999, IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, /* 100W class */ - {kHz(1800), 1999999, IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, /* 40W class */ - {kHz(3400), 4099999, IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {kHz(3400), 4099999, IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {MHz(6.9), kHz(7499.99), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {MHz(6.9), kHz(7499.99), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {MHz(9.9), MHz(1049999), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {MHz(9.9), MHz(1049999), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {kHz(17900), kHz(18499.99), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {kHz(17900), kHz(18499.99), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {MHz(20.9), kHz(21499.99), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {MHz(20.9), kHz(21499.99), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {kHz(24400), kHz(25099.99), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {kHz(24400), kHz(25099.99), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - {MHz(28), MHz(30), IC765_OTHER_TX_MODES, 5000, 100000, IC765_VFO_ALL}, - {MHz(28), MHz(30), IC765_AM_TX_MODES, 2000, 40000, IC765_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC765_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.2)}, - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(500)}, /* narrow */ - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic765_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - - .scan = icom_scan, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic7700.c b/icom/ic7700.c deleted file mode 100644 index 1e29d75b6..000000000 --- a/icom/ic7700.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7700 and variations - * Copyright (c) 2009-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Stre -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC7700_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM|RIG_MODE_PSK|RIG_MODE_PSKR) -#define IC7700_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) -#define IC7700_ALL_RX_MODES IC7700_OTHER_TX_MODES | IC7700_AM_TX_MODES -#define IC7700_1HZ_TS_MODES IC7700_ALL_RX_MODES - -#define IC7700_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF) - -#define IC7700_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC7700_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define IC7700_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -#define IC7700_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7700_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC7700_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) - -// IC-7700 S-meter calibration data based on manual -#define IC7700_STR_CAL { 3, \ - { \ - { 0,-54 }, \ - { 120, 0 }, \ - { 241, 60 } \ - } } - -#define IC7700_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7700_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7700_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC7700_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC7700_VD_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 151, 44.0f }, \ - { 180, 48.0f }, \ - { 211, 52.0f } \ - } } - -#define IC7700_ID_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 165, 10.0f }, \ - { 241, 15.0f } \ - } } - -int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7700 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps ic7700_priv_caps = -{ - 0x74, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct confparams ic7700_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } -}; - -const struct rig_caps ic7700_caps = -{ - .rig_model = RIG_MODEL_IC7700, - .model_name = "IC-7700", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7700_FUNCS, - .has_set_func = IC7700_FUNCS, - .has_get_level = IC7700_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7700_LEVELS), - .has_get_parm = IC7700_PARMS, - .has_set_parm = RIG_PARM_SET(IC7700_PARMS), /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extlevels = ic7700_ext_levels, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 6, 12, 18, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7700_VFO_OPS, - .scan_ops = IC7700_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC7700_ALL_RX_MODES, -1, -1, IC7700_VFOS, IC7700_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS), - FRQ_RNG_6m(1, IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS), - FRQ_RNG_HF(1, IC7700_AM_TX_MODES, W(5), W(50), IC7700_VFOS, IC7700_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC7700_AM_TX_MODES, W(5), W(50), IC7700_VFOS, IC7700_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC7700_ALL_RX_MODES, -1, -1, IC7700_VFOS, IC7700_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS), - FRQ_RNG_6m(2, IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS), - FRQ_RNG_HF(2, IC7700_AM_TX_MODES, W(5), W(50), IC7700_VFOS, IC7700_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC7700_AM_TX_MODES, W(5), W(50), IC7700_VFOS, IC7700_ANTS), /* AM class */ - /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC7700_OTHER_TX_MODES, W(5), W(200), IC7700_VFOS, IC7700_ANTS}, /* USA only */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7700_1HZ_TS_MODES, 1}, - {IC7700_ALL_RX_MODES, Hz(100)}, - {IC7700_ALL_RX_MODES, kHz(1)}, - {IC7700_ALL_RX_MODES, kHz(5)}, - {IC7700_ALL_RX_MODES, kHz(9)}, - {IC7700_ALL_RX_MODES, kHz(10)}, - {IC7700_ALL_RX_MODES, kHz(12.5)}, - {IC7700_ALL_RX_MODES, kHz(20)}, - {IC7700_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(400)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(50)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_PSK | RIG_MODE_PSKR, kHz(1.0)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(8)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - RIG_FLT_END, - }, - .str_cal = IC7700_STR_CAL, - .swr_cal = IC7700_SWR_CAL, - .alc_cal = IC7700_ALC_CAL, - .rfpower_meter_cal = IC7700_RFPOWER_METER_CAL, - .comp_meter_cal = IC7700_COMP_METER_CAL, - .vd_meter_cal = IC7700_VD_METER_CAL, - .id_meter_cal = IC7700_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic7700_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - .get_xit = icom_get_rit_new, - .set_xit = icom_set_xit_new, - - .decode_event = icom_decode_event, - .set_level = ic7700_set_level, - .get_level = ic7700_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .send_morse = icom_send_morse -}; - -int ic7700_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x82; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic7700_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x82; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic775.c b/icom/ic775.c deleted file mode 100644 index 7b8a9f18d..000000000 --- a/icom/ic775.c +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-775 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" -#include "bandplan.h" - -#define IC775_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC775_1MHZ_TS_MODES (RIG_MODE_AM|RIG_MODE_FM) -#define IC775_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY) - -/* - * 100W in all modes but AM (40W) - */ -#define IC775_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM) -#define IC775_AM_TX_MODES (RIG_MODE_AM) - -#define IC775_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC775_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -#define IC775_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic775_priv_caps = -{ - 0x46, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic775_caps = -{ - .rig_model = RIG_MODEL_IC775, - .model_name = "IC-775", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC775_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 10, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 11, 12, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(30), IC775_ALL_RX_MODES, -1, -1, IC775_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC775_OTHER_TX_MODES, W(10), W(100), IC775_VFO_ALL, IC775_ANTS), - FRQ_RNG_HF(1, IC775_AM_TX_MODES, W(10), W(40), IC775_VFO_ALL, IC775_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(30), IC775_ALL_RX_MODES, -1, -1, IC775_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { {kHz(1800), MHz(2) - 1, IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, /* 100W class */ - {kHz(1800), MHz(2) - 1, IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, /* 40W class */ - {kHz(3500), MHz(4) - 1, IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {kHz(3500), MHz(4) - 1, IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {MHz(7), kHz(7300), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {MHz(7), kHz(7300), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {kHz(10100), kHz(10150), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {kHz(10100), kHz(10150), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {MHz(14), kHz(14350), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {MHz(14), kHz(14350), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {kHz(18068), kHz(18168), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {kHz(18068), kHz(18168), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {MHz(21), kHz(21450), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {MHz(21), kHz(21450), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {kHz(24890), kHz(24990), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {kHz(24890), kHz(24990), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - {MHz(28), kHz(29700), IC775_OTHER_TX_MODES, 5000, 100000, IC775_VFO_ALL}, - {MHz(28), kHz(29700), IC775_AM_TX_MODES, 2000, 40000, IC775_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC775_1HZ_TS_MODES, 1}, - {IC775_ALL_RX_MODES, 10}, - {IC775_ALL_RX_MODES, 100}, - {IC775_ALL_RX_MODES, kHz(1)}, - {IC775_ALL_RX_MODES, kHz(5)}, - {IC775_ALL_RX_MODES, kHz(9)}, - {IC775_ALL_RX_MODES, kHz(10)}, - {IC775_ALL_RX_MODES, 12500}, - {IC775_ALL_RX_MODES, kHz(20)}, - {IC775_ALL_RX_MODES, kHz(25)}, - {IC775_ALL_RX_MODES, kHz(100)}, - {IC775_1MHZ_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, /* bultin FL-272 */ - {RIG_MODE_AM, kHz(8)}, /* mid w/ bultin FL-94 */ - {RIG_MODE_AM, kHz(2.4)}, /* narrow w/ bultin FL-272 */ - {RIG_MODE_FM, kHz(15)}, /* ?? TBC, mid w/ bultin FL-23+SFPC455E */ - {RIG_MODE_FM, kHz(8)}, /* narrow w/ bultin FL-94 */ - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic775_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/ic78.c b/icom/ic78.c deleted file mode 100644 index 85c791f44..000000000 --- a/icom/ic78.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-78 - * Copyright (c) 2004 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "bandplan.h" -#include "idx_builtin.h" - -#define IC78_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) - -#define IC78_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define IC78_AM_TX_MODES (RIG_MODE_AM) - -#define IC78_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_COMP) - -#define IC78_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_RAWSTR|RIG_LEVEL_RF|RIG_LEVEL_AF|RIG_LEVEL_SQL) - -#define IC78_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) - -#define IC78_VFO_OPS (RIG_OP_NONE) -#define IC78_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) - -#define IC78_ANTS (RIG_ANT_1) - -/* - * IC78_STR_CAL is what the S-meter displays - * - * FIXME: real measures! - */ -#define IC78_STR_CAL { 2, \ - { \ - { 0, -60 }, \ - { 255, 60 } \ - } } - -/* - * ic78 rigs capabilities. - */ -static const struct icom_priv_caps ic78_priv_caps = -{ - 0x62, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic706_ts_sc_list -}; - -const struct rig_caps ic78_caps = -{ - .rig_model = RIG_MODEL_IC78, - .model_name = "IC-78", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC78_FUNC_ALL, - .has_set_func = IC78_FUNC_ALL, - .has_get_level = IC78_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC78_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .preamp = { 10, 20, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC78_VFO_OPS, - .scan_ops = IC78_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 100, RIG_MTYPE_CALL }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(30) - 1, IC78_ALL_RX_MODES, -1, -1, IC78_VFO_ALL, IC78_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC78_OTHER_TX_MODES, W(2), W(100), IC78_VFO_ALL, IC78_ANTS), - FRQ_RNG_HF(1, IC78_AM_TX_MODES, W(2), W(40), IC78_VFO_ALL, IC78_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(30), MHz(30) - 1, IC78_ALL_RX_MODES, -1, -1, IC78_VFO_ALL, IC78_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC78_OTHER_TX_MODES, W(2), W(100), IC78_VFO_ALL, IC78_ANTS), - FRQ_RNG_HF(2, IC78_AM_TX_MODES, W(2), W(40), IC78_VFO_ALL, IC78_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - - .tuning_steps = { - {IC78_ALL_RX_MODES, 10}, - {IC78_ALL_RX_MODES, 100}, - {IC78_ALL_RX_MODES, kHz(1)}, - {IC78_ALL_RX_MODES, kHz(5)}, - {IC78_ALL_RX_MODES, kHz(9)}, - {IC78_ALL_RX_MODES, kHz(10)}, - {IC78_ALL_RX_MODES, 12500}, - {IC78_ALL_RX_MODES, kHz(20)}, - {IC78_ALL_RX_MODES, kHz(25)}, - {IC78_ALL_RX_MODES, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY | RIG_MODE_CWR | RIG_MODE_RTTYR | RIG_MODE_AM, kHz(2.4)}, - RIG_FLT_END, - }, - .str_cal = IC78_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic78_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - -}; - - diff --git a/icom/ic7800.c b/icom/ic7800.c deleted file mode 100644 index d543788f2..000000000 --- a/icom/ic7800.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-7800 and variations - * Copyright (c) 2009-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC7800_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM) -#define IC7800_1HZ_TS_MODES IC7800_ALL_RX_MODES -#define IC7800_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) -#define IC7800_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) - -#define IC7800_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF|RIG_FUNC_DUAL_WATCH) - -#define IC7800_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC7800_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) -#define IC7800_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -#define IC7800_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC7800_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC7800_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) - -// IC-7800 S-meter calibration data based on manual -#define IC7800_STR_CAL { 3, \ - { \ - { 0, -54 }, /* S0 */ \ - { 120, 0 }, /* S9 */ \ - { 241, 60 } /* S9+60 */ \ - } } - -#define IC7800_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC7800_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC7800_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC7800_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC7800_VD_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 151, 44.0f }, \ - { 180, 48.0f }, \ - { 211, 52.0f } \ - } } - -#define IC7800_ID_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 165, 10.0f }, \ - { 241, 15.0f } \ - } } - -int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-7800 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps ic7800_priv_caps = -{ - 0x6a, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct confparams ic7800_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } -}; - -const struct rig_caps ic7800_caps = -{ - .rig_model = RIG_MODEL_IC7800, - .model_name = "IC-7800", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC7800_FUNCS, - .has_set_func = IC7800_FUNCS, - .has_get_level = IC7800_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC7800_LEVELS), - .has_get_parm = IC7800_PARMS, - .has_set_parm = RIG_PARM_SET(IC7800_PARMS), /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extlevels = ic7800_ext_levels, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 3, 6, 9, 12, 15, 18, 21, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC7800_VFO_OPS, - .scan_ops = IC7800_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC7800_ALL_RX_MODES, -1, -1, IC7800_VFOS, IC7800_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC7800_OTHER_TX_MODES, W(5), W(200), IC7800_VFOS, IC7800_ANTS), - FRQ_RNG_6m(1, IC7800_OTHER_TX_MODES, W(5), W(200), IC7800_VFOS, IC7800_ANTS), - FRQ_RNG_HF(1, IC7800_AM_TX_MODES, W(5), W(50), IC7800_VFOS, IC7800_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC7800_AM_TX_MODES, W(5), W(50), IC7800_VFOS, IC7800_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC7800_ALL_RX_MODES, -1, -1, IC7800_VFOS, IC7800_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC7800_OTHER_TX_MODES, W(5), W(200), IC7800_VFOS, IC7800_ANTS), - FRQ_RNG_6m(2, IC7800_OTHER_TX_MODES, W(5), W(200), IC7800_VFOS, IC7800_ANTS), - FRQ_RNG_HF(2, IC7800_AM_TX_MODES, W(5), W(50), IC7800_VFOS, IC7800_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC7800_AM_TX_MODES, W(5), W(50), IC7800_VFOS, IC7800_ANTS), /* AM class */ - /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC7800_OTHER_TX_MODES, W(2), W(100), IC7800_VFOS, IC7800_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC7800_OTHER_TX_MODES, W(2), W(100), IC7800_VFOS, IC7800_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC7800_OTHER_TX_MODES, W(2), W(100), IC7800_VFOS, IC7800_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC7800_OTHER_TX_MODES, W(2), W(100), IC7800_VFOS, IC7800_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC7800_OTHER_TX_MODES, W(2), W(100), IC7800_VFOS, IC7800_ANTS}, /* USA only */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC7800_1HZ_TS_MODES, 1}, - {IC7800_ALL_RX_MODES, Hz(100)}, - {IC7800_ALL_RX_MODES, kHz(1)}, - {IC7800_ALL_RX_MODES, kHz(5)}, - {IC7800_ALL_RX_MODES, kHz(9)}, - {IC7800_ALL_RX_MODES, kHz(10)}, - {IC7800_ALL_RX_MODES, kHz(12.5)}, - {IC7800_ALL_RX_MODES, kHz(20)}, - {IC7800_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(400)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(50)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_PSK | RIG_MODE_PSKR, kHz(1.0)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(8)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - RIG_FLT_END, - }, - .str_cal = IC7800_STR_CAL, - .swr_cal = IC7800_SWR_CAL, - .alc_cal = IC7800_ALC_CAL, - .rfpower_meter_cal = IC7800_RFPOWER_METER_CAL, - .comp_meter_cal = IC7800_COMP_METER_CAL, - .vd_meter_cal = IC7800_VD_METER_CAL, - .id_meter_cal = IC7800_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic7800_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - .get_xit = icom_get_rit_new, - .set_xit = icom_set_xit_new, - - .decode_event = icom_decode_event, - .set_level = ic7800_set_level, - .get_level = ic7800_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .send_morse = icom_send_morse -}; - -/* - * IC-7800 has 0x11 command using index instead of backend's real dB value - * - * c.f. http://www.plicht.de/ekki/civ/civ-p42.html - */ -int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_ATT: - if (val.i != 0) - { - /* Convert dB to index */ - int i; - for (i = 0; i < 7; i++) - { - if (val.i == rig->state.attenuator[i]) - { - val.i = i + 1; - break; - } - } - - /* TODO: Should fail when not found? */ - } - - return icom_set_level(rig, vfo, level, val); - - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x83; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -/* - * IC-7800 has 0x11 command using index instead of backend's real dB value - */ -int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_ATT: - retval = icom_get_level(rig, vfo, level, val); - - if (retval != RIG_OK) - { - return retval; - } - - /* Convert index to dB - * Rem: ATT index 0 means attenuator Off - */ - if (val->i > 0 && val->i <= 7) - { - val->i = rig->state.attenuator[val->i - 1]; - } - - break; - - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x83; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } - - return RIG_OK; -} diff --git a/icom/ic781.c b/icom/ic781.c deleted file mode 100644 index 89878f7eb..000000000 --- a/icom/ic781.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-781 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "bandplan.h" -#include "icom.h" - - -#define IC781_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) - -/* - * IC-781 - * specs: http://www.qsl.net/sm7vhs/radio/icom/ic781/specs.htm - * - * TODO: selected memory scan, delta-f scan, dual watch - */ -#define IC781_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) -#define IC781_AM_TX_MODES (RIG_MODE_AM) - -#define IC781_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC781_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL|RIG_OP_XCHG) - -#define IC781_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) /* TBC */ - -#define IC781_ANTS RIG_ANT_1 - -/* - */ -static const struct icom_priv_caps ic781_priv_caps = -{ - 0x26, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic781_caps = -{ - .rig_model = RIG_MODEL_IC781, - .model_name = "IC-781", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC781_VFO_OPS, - .scan_ops = IC781_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(30), IC781_ALL_RX_MODES, -1, -1, IC781_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC781_OTHER_TX_MODES, W(10), W(150), IC781_VFO_ALL, IC781_ANTS), - FRQ_RNG_HF(1, IC781_AM_TX_MODES, W(10), W(75), IC781_VFO_ALL, IC781_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {kHz(100), MHz(30), IC781_ALL_RX_MODES, -1, -1, IC781_VFO_ALL}, - RIG_FRNG_END, - }, - - /* weird transmit ranges ... --sf */ - .tx_range_list2 = { - {kHz(1800), 1999999, IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, /* 150W class */ - {kHz(1800), 1999999, IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, /* 75W class */ - {kHz(3400), 4099999, IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {kHz(3400), 4099999, IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {MHz(6.9), kHz(7499.99), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {MHz(6.9), kHz(7499.99), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {MHz(9.9), MHz(1049999), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {MHz(9.9), MHz(1049999), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {MHz(13.9), kHz(14.49999), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {kHz(17900), kHz(18499.99), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {kHz(17900), kHz(18499.99), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {MHz(20.9), kHz(21499.99), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {MHz(20.9), kHz(21499.99), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {kHz(24400), kHz(25099.99), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {kHz(24400), kHz(25099.99), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - {MHz(27.9), MHz(30), IC781_OTHER_TX_MODES, 5000, 150000, IC781_VFO_ALL}, - {MHz(27.9), MHz(30), IC781_AM_TX_MODES, 2000, 75000, IC781_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC781_ALL_RX_MODES, 10}, /* basic resolution, there's no set_ts */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY | RIG_MODE_AM, kHz(2.4)}, - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(500)}, /* narrow */ - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(250)}, /* narrow, with [CW250Hz] ON */ - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic781_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - - .scan = icom_scan, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - - /* TODO: more capabilities */ - -}; - diff --git a/icom/ic785x.c b/icom/ic785x.c deleted file mode 100644 index 1600b7e68..000000000 --- a/icom/ic785x.c +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-785x and variations - * Derived from ic7800.c by W9MDB -- needs testing - * Copyright (c) 2009-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define IC785x_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTAM|RIG_MODE_PKTFM) -#define IC785x_1HZ_TS_MODES IC785x_ALL_RX_MODES -#define IC785x_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PSK|RIG_MODE_PSKR|RIG_MODE_PKTLSB|RIG_MODE_PKTUSB|RIG_MODE_PKTFM) -#define IC785x_AM_TX_MODES (RIG_MODE_AM|RIG_MODE_PKTAM) - -#define IC785x_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_RIT|RIG_FUNC_XIT|RIG_FUNC_TUNER|RIG_FUNC_APF|RIG_FUNC_DUAL_WATCH) - -#define IC785x_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_BALANCE|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_ANTIVOX|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC|RIG_LEVEL_RFPOWER_METER|RIG_LEVEL_COMP_METER|RIG_LEVEL_VD_METER|RIG_LEVEL_ID_METER|RIG_LEVEL_MONITOR_GAIN|RIG_LEVEL_NB) - -#define IC785x_VFOS (RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM) -#define IC785x_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -#define IC785x_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define IC785x_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_PROG|RIG_SCAN_DELTA|RIG_SCAN_PRIO) - -#define IC785x_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3|RIG_ANT_4) - -// IC-785x S-meter calibration data based on manual -#define IC785x_STR_CAL { 3, \ - { \ - { 0, -54 }, /* S0 */ \ - { 120, 0 }, /* S9 */ \ - { 241, 60 } /* S9+60 */ \ - } } - -#define IC785x_SWR_CAL { 5, \ - { \ - { 0, 1.0f }, \ - { 48, 1.5f }, \ - { 80, 2.0f }, \ - { 120, 3.0f }, \ - { 240, 6.0f } \ - } } - -#define IC785x_ALC_CAL { 2, \ - { \ - { 0, 0.0f }, \ - { 120, 1.0f } \ - } } - -#define IC785x_RFPOWER_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 143, 0.5f }, \ - { 213, 1.0f } \ - } } - -#define IC785x_COMP_METER_CAL { 3, \ - { \ - { 0, 0.0f }, \ - { 130, 15.0f }, \ - { 241, 30.0f } \ - } } - -#define IC785x_VD_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 151, 44.0f }, \ - { 180, 48.0f }, \ - { 211, 52.0f } \ - } } - -#define IC785x_ID_METER_CAL { 4, \ - { \ - { 0, 0.0f }, \ - { 97, 10.0f }, \ - { 146, 15.0f }, \ - { 241, 25.0f } \ - } } - -extern int ic7800_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -extern int ic7800_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); - -/* - * IC-785x rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps ic785x_priv_caps = -{ - 0x8e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic756pro_ts_sc_list, - .agc_levels_present = 1, - .agc_levels = { - { .level = RIG_AGC_OFF, .icom_level = 0 }, - { .level = RIG_AGC_FAST, .icom_level = 1 }, - { .level = RIG_AGC_MEDIUM, .icom_level = 2 }, - { .level = RIG_AGC_SLOW, .icom_level = 3 }, - { .level = -1, .icom_level = 0 }, - }, -}; - -const struct confparams ic785x_ext_levels[] = -{ - { - TOK_DRIVE_GAIN, "drive_gain", "Drive gain", "Drive gain", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { - TOK_DIGI_SEL_FUNC, "digi_sel", "DIGI-SEL enable", "DIGI-SEL enable", - NULL, RIG_CONF_CHECKBUTTON, { }, - }, - { - TOK_DIGI_SEL_LEVEL, "digi_sel_level", "DIGI-SEL level", "DIGI-SEL level", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 255, 1 } }, - }, - { RIG_CONF_END, NULL, } -}; - -const struct rig_caps ic785x_caps = -{ - .rig_model = RIG_MODEL_IC785x, - .model_name = "IC-785x", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC785x_FUNCS, - .has_set_func = IC785x_FUNCS, - .has_get_level = IC785x_LEVELS, - .has_set_level = RIG_LEVEL_SET(IC785x_LEVELS), - .has_get_parm = IC785x_PARMS, - .has_set_parm = RIG_PARM_SET(IC785x_PARMS), /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - [LVL_KEYSPD] = { .min = { .i = 6 }, .max = { .i = 48 }, .step = { .i = 1 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .extlevels = ic785x_ext_levels, - .ctcss_list = common_ctcss_list, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* FIXME: TBC */ - .attenuator = { 3, 6, 9, 12, 15, 18, 21, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC785x_VFO_OPS, - .scan_ops = IC785x_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(60), IC785x_ALL_RX_MODES, -1, -1, IC785x_VFOS, IC785x_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC785x_OTHER_TX_MODES, W(5), W(200), IC785x_VFOS, IC785x_ANTS), - FRQ_RNG_6m(1, IC785x_OTHER_TX_MODES, W(5), W(200), IC785x_VFOS, IC785x_ANTS), - FRQ_RNG_HF(1, IC785x_AM_TX_MODES, W(5), W(50), IC785x_VFOS, IC785x_ANTS), /* AM class */ - FRQ_RNG_6m(1, IC785x_AM_TX_MODES, W(5), W(50), IC785x_VFOS, IC785x_ANTS), /* AM class */ - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(60), IC785x_ALL_RX_MODES, -1, -1, IC785x_VFOS, IC785x_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC785x_OTHER_TX_MODES, W(5), W(200), IC785x_VFOS, IC785x_ANTS), - FRQ_RNG_6m(2, IC785x_OTHER_TX_MODES, W(5), W(200), IC785x_VFOS, IC785x_ANTS), - FRQ_RNG_HF(2, IC785x_AM_TX_MODES, W(5), W(50), IC785x_VFOS, IC785x_ANTS), /* AM class */ - FRQ_RNG_6m(2, IC785x_AM_TX_MODES, W(5), W(50), IC785x_VFOS, IC785x_ANTS), /* AM class */ - /* USA only, TBC: end of range and modes */ - {MHz(5.33050), MHz(5.33350), IC785x_OTHER_TX_MODES, W(2), W(100), IC785x_VFOS, IC785x_ANTS}, /* USA only */ - {MHz(5.34650), MHz(5.34950), IC785x_OTHER_TX_MODES, W(2), W(100), IC785x_VFOS, IC785x_ANTS}, /* USA only */ - {MHz(5.36650), MHz(5.36950), IC785x_OTHER_TX_MODES, W(2), W(100), IC785x_VFOS, IC785x_ANTS}, /* USA only */ - {MHz(5.37150), MHz(5.37450), IC785x_OTHER_TX_MODES, W(2), W(100), IC785x_VFOS, IC785x_ANTS}, /* USA only */ - {MHz(5.40350), MHz(5.40650), IC785x_OTHER_TX_MODES, W(2), W(100), IC785x_VFOS, IC785x_ANTS}, /* USA only */ - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC785x_1HZ_TS_MODES, 1}, - {IC785x_ALL_RX_MODES, Hz(100)}, - {IC785x_ALL_RX_MODES, kHz(1)}, - {IC785x_ALL_RX_MODES, kHz(5)}, - {IC785x_ALL_RX_MODES, kHz(9)}, - {IC785x_ALL_RX_MODES, kHz(10)}, - {IC785x_ALL_RX_MODES, kHz(12.5)}, - {IC785x_ALL_RX_MODES, kHz(20)}, - {IC785x_ALL_RX_MODES, kHz(25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(1.8)}, - {RIG_MODE_SSB | RIG_MODE_PKTLSB | RIG_MODE_PKTUSB, kHz(3)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(400)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR | RIG_MODE_PSK | RIG_MODE_PSKR, Hz(50)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_PSK | RIG_MODE_PSKR, kHz(1.0)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(3)}, - {RIG_MODE_AM | RIG_MODE_PKTAM, kHz(9)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(8)}, - {RIG_MODE_FM | RIG_MODE_PKTFM, kHz(15)}, - RIG_FLT_END, - }, - .str_cal = IC785x_STR_CAL, - .swr_cal = IC785x_SWR_CAL, - .alc_cal = IC785x_ALC_CAL, - .rfpower_meter_cal = IC785x_RFPOWER_METER_CAL, - .comp_meter_cal = IC785x_COMP_METER_CAL, - .vd_meter_cal = IC785x_VD_METER_CAL, - .id_meter_cal = IC785x_ID_METER_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic785x_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode_with_data, - .get_mode = icom_get_mode_with_data, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_rit = icom_set_rit_new, - .get_rit = icom_get_rit_new, - .get_xit = icom_get_rit_new, - .set_xit = icom_set_xit_new, - - .decode_event = icom_decode_event, - .set_level = ic785x_set_level, - .get_level = ic785x_get_level, - .set_ext_level = icom_set_ext_level, - .get_ext_level = icom_get_ext_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .send_morse = icom_send_morse - -}; - -int ic785x_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x03; - cmdbuf[1] = 0x09; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return ic7800_set_level(rig, vfo, level, val); - } -} - -int ic785x_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x03; - cmdbuf[1] = 0x09; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return ic7800_get_level(rig, vfo, level, val); - } -} diff --git a/icom/ic820h.c b/icom/ic820h.c deleted file mode 100644 index 45b2b2230..000000000 --- a/icom/ic820h.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-820H (VHF/UHF All-Mode Tranceiver) - * Contributed by Francois Retief - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" - - -#define IC820H_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_FM) - -#define IC820H_VFO_ALL (RIG_VFO_A|RIG_VFO_C|RIG_VFO_MEM) -/* FIXME: What about MAIN/SUB mode? And satellite mode? */ - -#define IC820H_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC820H_SCAN_OPS (RIG_SCAN_MEM) -/* FIXME: Manual talks about 3 modes: Programmed scan, Memory scan and - * Mode select memory scan operation. How do i encode these? - */ - - -#define IC820H_STR_CAL { 0, { } } -/* - */ -static const struct icom_priv_caps ic820h_priv_caps = -{ - 0x42, /* default address */ - 1, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic820h_caps = -{ - .rig_model = RIG_MODEL_IC820, - .model_name = "IC-820H", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, /* Attanuator 15dB for each band. manual button */ - .max_rit = Hz(0), /* SSB,CW: +-1.0kHz FM: +-5.0kHz */ - .max_xit = Hz(0), - .max_ifshift = Hz(0), /* 1.2kHz manual knob */ - .targetable_vfo = 0, - .vfo_ops = IC820H_VFO_OPS, - .scan_ops = IC820H_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - /* FIXME: Each band has 80 channels (2*80) ?? */ - { 1, 80, RIG_MTYPE_MEM }, - { 81, 82, RIG_MTYPE_EDGE }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(136), MHz(174), IC820H_MODES, -1, -1, IC820H_VFO_ALL}, - {MHz(430), MHz(450), IC820H_MODES, -1, -1, IC820H_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), RIG_MODE_SSB, W(6), W(35), IC820H_VFO_ALL}, - {MHz(144), MHz(146), RIG_MODE_FM | RIG_MODE_CW, W(6), W(45), IC820H_VFO_ALL}, - {MHz(430), MHz(440), RIG_MODE_SSB, W(6), W(30), IC820H_VFO_ALL}, - {MHz(430), MHz(440), RIG_MODE_FM | RIG_MODE_CW, W(6), W(40), IC820H_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(136), MHz(174), IC820H_MODES, -1, -1, IC820H_VFO_ALL}, - {MHz(430), MHz(450), IC820H_MODES, -1, -1, IC820H_VFO_ALL}, - RIG_FRNG_END, - }, - /* - * From manual: VHF UHF - * USA 144.0-148.0 MHz 430.0-450.0 MHz - * Europe 144.0-146.0 MHz 430.0-440.0 MHz - * Australia 144.0-148.0 MHz 430.0-450.0 MHz - * Sweden 144.0-146.0 MHz 432.0-438.0 MHz - */ - .tx_range_list2 = { - {MHz(144), MHz(148), RIG_MODE_SSB, W(6), W(35), IC820H_VFO_ALL}, - {MHz(144), MHz(148), RIG_MODE_FM | RIG_MODE_CW, W(6), W(45), IC820H_VFO_ALL}, - {MHz(430), MHz(450), RIG_MODE_SSB, W(6), W(30), IC820H_VFO_ALL}, - {MHz(430), MHz(450), RIG_MODE_FM | RIG_MODE_CW, W(6), W(40), IC820H_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {RIG_MODE_SSB | RIG_MODE_CW, 1}, - {RIG_MODE_SSB | RIG_MODE_CW, 10}, - {RIG_MODE_SSB | RIG_MODE_CW, 50}, - {RIG_MODE_SSB | RIG_MODE_CW, 100}, - {RIG_MODE_FM, kHz(5)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* builtin */ - {RIG_MODE_FM, kHz(15)}, /* builtin */ - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic820h_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - -}; - diff --git a/icom/ic821h.c b/icom/ic821h.c deleted file mode 100644 index be7c8e15c..000000000 --- a/icom/ic821h.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-821H (VHF/UHF All-Mode Tranceiver) - * Contributed by Francois Retief - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" - - -#define IC821H_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_FM) - -#define IC821H_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM|RIG_VFO_MAIN|RIG_VFO_SUB) -/* FIXME: What about MAIN/SUB mode? And satellite mode? */ - -#define IC821H_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_CPY|RIG_OP_MCL) - -#define IC821H_SCAN_OPS (RIG_SCAN_MEM) -/* FIXME: Manual talks about 3 modes: Programmed scan, Memory scan and - * Mode select memory scan operation. How do i encode these? - */ - - -#define IC821H_STR_CAL { 0, { } } -/* - */ -static const struct icom_priv_caps ic821h_priv_caps = -{ - 0x4c, /* default address */ - 1, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic821h_caps = -{ - .rig_model = RIG_MODEL_IC821H, - .model_name = "IC-821H", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, /* Attanuator 15dB for each band. manual button */ - .max_rit = Hz(0), /* SSB,CW: +-1.0kHz FM: +-5.0kHz */ - .max_xit = Hz(0), - .max_ifshift = Hz(0), /* 1.2kHz manual knob */ - .targetable_vfo = 0, - .vfo_ops = IC821H_VFO_OPS, - .scan_ops = IC821H_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - /* FIXME: Each band has 80 channels (2*80) */ - { 1, 80, RIG_MTYPE_MEM }, - { 81, 82, RIG_MTYPE_EDGE }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(136), MHz(174), IC821H_MODES, -1, -1, IC821H_VFO_ALL}, - {MHz(430), MHz(450), IC821H_MODES, -1, -1, IC821H_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), RIG_MODE_SSB, W(6), W(35), IC821H_VFO_ALL}, - {MHz(144), MHz(146), RIG_MODE_FM | RIG_MODE_CW, W(6), W(45), IC821H_VFO_ALL}, - {MHz(430), MHz(440), RIG_MODE_SSB, W(6), W(30), IC821H_VFO_ALL}, - {MHz(430), MHz(440), RIG_MODE_FM | RIG_MODE_CW, W(6), W(40), IC821H_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(136), MHz(174), IC821H_MODES, -1, -1, IC821H_VFO_ALL}, - {MHz(430), MHz(450), IC821H_MODES, -1, -1, IC821H_VFO_ALL}, - RIG_FRNG_END, - }, - /* - * From manual: VHF UHF - * USA 144.0-148.0 MHz 430.0-450.0 MHz - * Europe 144.0-146.0 MHz 430.0-440.0 MHz - * Australia 144.0-148.0 MHz 430.0-450.0 MHz - * Sweden 144.0-146.0 MHz 432.0-438.0 MHz - */ - .tx_range_list2 = { - {MHz(144), MHz(148), RIG_MODE_SSB, W(6), W(35), IC821H_VFO_ALL}, - {MHz(144), MHz(148), RIG_MODE_FM | RIG_MODE_CW, W(6), W(45), IC821H_VFO_ALL}, - {MHz(430), MHz(450), RIG_MODE_SSB, W(6), W(30), IC821H_VFO_ALL}, - {MHz(430), MHz(450), RIG_MODE_FM | RIG_MODE_CW, W(6), W(40), IC821H_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {RIG_MODE_SSB | RIG_MODE_CW, 1}, - {RIG_MODE_SSB | RIG_MODE_CW, 10}, - {RIG_MODE_SSB | RIG_MODE_CW, 50}, - {RIG_MODE_SSB | RIG_MODE_CW, 100}, - {RIG_MODE_FM, kHz(5)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* buildin */ - {RIG_MODE_FM, kHz(15)}, /* buildin */ - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic821h_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - -}; - diff --git a/icom/ic910.c b/icom/ic910.c deleted file mode 100644 index 2dbe4913e..000000000 --- a/icom/ic910.c +++ /dev/null @@ -1,597 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-910 (VHF/UHF All-Mode Transceiver) - * Contributed by Francois Retief - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "misc.h" -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "idx_builtin.h" - -/* - * It seems some IC910 out there have weird firmware. Uncomment the following - * if your modes are wrong, and please report to hamlib-developer maillist - * with firmware number. That'd be interesting to have a word from Icom - * on this subject, and if firmware updates are possible. - */ -#ifdef HAVE_WEIRD_IC910_MODES -static int ic910_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) -{ - /* FIX: The IC-910 has "Set FM" = 4, which is RTTY in for other radios */ - if (mode == RIG_MODE_FM) - { - mode = RIG_MODE_RTTY; - } - - return icom_set_mode(rig, vfo, mode, width); -} - -static int ic910_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) -{ - /* FIX: The IC-910 has "Set FM" = 4, which is RTTY in for other radios */ - int retval = icom_get_mode(rig, vfo, mode, width); - - if (*mode == RIG_MODE_RTTY) - { - *mode = RIG_MODE_FM; - } - - return retval; -} -#endif /* HAVE_WEIRD_IC910_MODES */ - -/* this function compares 2 frequencies - * returns 1 if they are in the same band - * returns 0 if they are in different bands - */ - -static int compareFrequencies(RIG *rig, freq_t freq1, freq_t freq2) -{ - int freq1band = 0, freq2band = 0; - freq_range_t noband = RIG_FRNG_END; - - while (rig->caps->rx_range_list1[freq1band].startf != noband.startf) - { - if (freq1 >= rig->caps->rx_range_list1[freq1band].startf && - freq1 <= rig->caps->rx_range_list1[freq1band].endf) - { - break; - } - - ++freq1band; - //fprintf(stderr, "%i\n", freq1band); - } - - while (rig->caps->rx_range_list1[freq2band].startf != noband.startf) - { - if (freq2 >= rig->caps->rx_range_list1[freq2band].startf && - freq2 <= rig->caps->rx_range_list1[freq2band].endf) - { - break; - } - - ++freq2band; - } - - if (freq2band == freq1band) { return 1; } - else { return 0; } -} - -static int ic910_set_freq(RIG *rig, vfo_t vfo, freq_t freq) -{ - int retval; - freq_t otherfreq; - freq_t origfreq; - - if ((retval = icom_get_freq(rig, RIG_VFO_CURR, &origfreq)) != RIG_OK) { return retval; } - - if (compareFrequencies(rig, freq, origfreq)) - { - /* correct band already */ - if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) - { - /* switch to desired VFO and read its frequency */ - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - - if (otherfreq != origfreq) - { - /* swap VFOs back as original was the other one */ - icom_set_vfo(rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); - } - } - else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) - { - /* switch to the desired of MAIN and SUB and read its frequency */ - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } - - if (otherfreq != origfreq) - { - /* started on a different so band exchange MAIN and SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - /* swap MAIN/SUB back as original was the other one */ - icom_set_vfo(rig, RIG_VFO_MAIN == vfo ? RIG_VFO_SUB : RIG_VFO_MAIN); - } - else - { - /* already correct one of MAIN and SUB */ - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - } - } - else if (RIG_VFO_CURR == vfo) - { - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - } - else { retval = -RIG_EVFO; } - } - else - { - /* wrong band */ - if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) - { - /* try and set frequency, may fail if band is already on other of MAIN/SUB */ - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - - if (-RIG_ERJCTED == retval) - { - /* exchange MAIN & SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, &origfreq)) != RIG_OK) { return retval; } - - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - - if (-RIG_ERJCTED == retval) - { - /* band not fitted so swap MAIN & SUB back and give up */ - icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG); - return retval; - } - else if (retval != RIG_OK) { return retval; } - - if (otherfreq != origfreq) - { - /* swap VFOs back as original was the other one */ - icom_set_vfo(rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); - } - - /* we do not exchange bands back as this is taken to - mean set VFOA/B on MAIN to the specified frequency - as Hamlib does not recognize A on MAIN or B on SUB - etc. This is probably reasonable since we cannot Tx - on SUB */ - return retval; - } - - /* we changed band to the "third band" which always makes - VFO A current so just make the requested one the - specified frequency as well if it is VFO B. There is no - way of going to the "third band" without changing VFO - A */ - if (RIG_VFO_B == vfo) - { - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - icom_set_vfo(rig, RIG_VFO_A); - } - } - else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) - { - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, &otherfreq)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - - if (-RIG_ERJCTED == retval) - { - /* required band is on other of MAIN or SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - } - else if (retval != RIG_OK) { return retval; } - - if (otherfreq != origfreq) - { - /* started on other of MAIN & SUB so switch back */ - icom_set_vfo(rig, - RIG_VFO_MAIN == vfo ? - RIG_VFO_SUB : RIG_VFO_MAIN); - } - } - else if (RIG_VFO_CURR == vfo) - { - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - - if (-RIG_ERJCTED == retval) - { - /* exchange MAIN & SUB */ - if ((retval = icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG)) != RIG_OK) { return retval; } - - retval = icom_set_freq(rig, RIG_VFO_CURR, freq); - - if (-RIG_ERJCTED == retval) - { - /* band not fitted so swap MAIN & SUB back and give up */ - icom_vfo_op(rig, RIG_VFO_CURR, RIG_OP_XCHG); - return retval; - } - } - } - else { retval = -RIG_EVFO; } - } - - return retval; -} - -static int ic910_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) -{ - int retval; - freq_t origfreq; - - /* start off by reading the current VFO frequency */ - if ((retval = icom_get_freq(rig, RIG_VFO_CURR, &origfreq)) != RIG_OK) { return retval; } - - if (RIG_VFO_A == vfo || RIG_VFO_B == vfo) - { - /* switch to desired VFO and read its frequency */ - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, freq)) != RIG_OK) { return retval; } - - if (*freq != origfreq) - { - /* swap VFOs back as original was the other one */ - icom_set_vfo(rig, RIG_VFO_A == vfo ? RIG_VFO_B : RIG_VFO_A); - } - } - else if (RIG_VFO_MAIN == vfo || RIG_VFO_SUB == vfo) - { - /* switch to the desired of MAIN and SUB and read its frequency */ - if ((retval = icom_set_vfo(rig, vfo)) != RIG_OK) { return retval; } - - if ((retval = icom_get_freq(rig, vfo, freq)) != RIG_OK) { return retval; } - - if (*freq != origfreq) - { - /* started on a different so switch back MAIN or SUB */ - icom_set_vfo(rig, RIG_VFO_MAIN == vfo ? RIG_VFO_SUB : RIG_VFO_MAIN); - } - } - else if (RIG_VFO_CURR == vfo) - { - *freq = origfreq; - } - else { retval = -RIG_EVFO; } - - return retval; -} - -/* - * This function does the special bandwidth coding for IC-910 - * (1 - normal, 2 - narrow) - */ -static int ic910_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) -{ - int err; - - err = rig2icom_mode(rig, mode, width, md, pd); - - if (*pd == PD_NARROW_3) - { - *pd = PD_NARROW_2; - } - - return err; -} - - -#define IC910_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_FM) - -#define IC910_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_FM) - -#define IC910_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM|RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B) - -#define IC910_SCAN_OPS (RIG_SCAN_MEM) - -#define IC910_VFO_OPS (RIG_OP_FROM_VFO| \ - RIG_OP_TO_VFO| \ - RIG_OP_CPY| \ - RIG_OP_MCL| \ - RIG_OP_XCHG) - -#define IC910_FUNC_ALL (RIG_FUNC_NB| \ - RIG_FUNC_NR| \ - RIG_FUNC_ANF| \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_COMP| \ - RIG_FUNC_VOX| \ - RIG_FUNC_FBKIN| \ - RIG_FUNC_AFC| \ - RIG_FUNC_SATMODE| \ - RIG_FUNC_SCOPE) - -#define IC910_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_RF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_IF| \ - RIG_LEVEL_NR| \ - RIG_LEVEL_CWPITCH| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_KEYSPD| \ - RIG_LEVEL_COMP| \ - RIG_LEVEL_VOXGAIN| \ - RIG_LEVEL_VOXDELAY| \ - RIG_LEVEL_ANTIVOX| \ - RIG_LEVEL_ATT| \ - RIG_LEVEL_PREAMP) - -#define IC910_STR_CAL UNKNOWN_IC_STR_CAL /* FIXME */ - -static const struct icom_priv_caps ic910_priv_caps = -{ - 0x60, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG to avoid display flicker */ - ic910_ts_sc_list, - .r2i_mode = ic910_r2i_mode -}; - -int ic910_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) -{ - switch (func) - { - case RIG_FUNC_SCOPE: - return icom_set_raw(rig, C_CTL_MEM, S_MEM_BANDSCOPE, 0, NULL, 1, - status ? 1 : 0); - - case RIG_FUNC_SATMODE: - return icom_set_raw(rig, C_CTL_MEM, S_MEM_SATMODE910, 0, NULL, 1, - status ? 1 : 0); - - default: - return icom_set_func(rig, vfo, func, status); - } -} - -int ic910_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) -{ - switch (func) - { - case RIG_FUNC_SCOPE: - return icom_get_raw(rig, C_CTL_MEM, S_MEM_BANDSCOPE, 0, NULL, status); - - case RIG_FUNC_SATMODE: - return icom_get_raw(rig, C_CTL_MEM, S_MEM_SATMODE910, 0, NULL, status); - - default: - return icom_get_func(rig, vfo, func, status); - } -} - -int ic910_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - return icom_set_level_raw(rig, level, C_CTL_MEM, S_MEM_VOXDELAY, 0, NULL, 1, - val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} - -int ic910_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - return icom_get_level_raw(rig, level, C_CTL_MEM, S_MEM_VOXDELAY, 0, NULL, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} - -const struct rig_caps ic910_caps = -{ - .rig_model = RIG_MODEL_IC910, - .model_name = "IC-910", - .mfg_name = "Icom", - .version = BACKEND_VER ".2", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC910_FUNC_ALL, - .has_set_func = IC910_FUNC_ALL | RIG_FUNC_RESUME, - .has_get_level = IC910_LEVEL_ALL | (RIG_LEVEL_RAWSTR), - .has_set_level = IC910_LEVEL_ALL, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - - .dcs_list = NULL, - .preamp = { 20, RIG_DBLST_END, }, - .attenuator = { 20, RIG_DBLST_END, }, - .max_rit = Hz(0), /* SSB,CW: +-1.0kHz FM: +-5.0kHz */ - .max_xit = Hz(0), - .max_ifshift = Hz(0), /* 1.2kHz manual knob */ - .targetable_vfo = RIG_TARGETABLE_FREQ, - .vfo_ops = IC910_VFO_OPS, - .scan_ops = IC910_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 105, RIG_MTYPE_EDGE }, - { 106, 106, RIG_MTYPE_CALL }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { /* USA */ - {MHz(144), MHz(148), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(430), MHz(450), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(148), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, - {MHz(430), MHz(450), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { /* Europe */ - {MHz(144), MHz(146), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(430), MHz(440), IC910_MODES, -1, -1, IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(146), IC910_MODES, W(5), W(100), IC910_VFO_ALL}, - {MHz(430), MHz(440), IC910_MODES, W(5), W(75), IC910_VFO_ALL}, - {MHz(1240), MHz(1300), IC910_MODES, -1, -1, IC910_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {RIG_MODE_SSB | RIG_MODE_CW, 1}, - {RIG_MODE_SSB | RIG_MODE_CW, 10}, - {RIG_MODE_SSB | RIG_MODE_CW, 50}, - {RIG_MODE_SSB | RIG_MODE_CW, 100}, - {RIG_MODE_FM, kHz(0.1)}, - {RIG_MODE_FM, kHz(5)}, - {RIG_MODE_FM, kHz(6.25)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(12.5)}, - {RIG_MODE_FM, kHz(20)}, - {RIG_MODE_FM, kHz(25)}, - {RIG_MODE_FM, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_CW | RIG_MODE_SSB, kHz(2.3)}, /* builtin */ - {RIG_MODE_CW, Hz(600)}, /* with optional FL-132/Fl133 CW filters */ - {RIG_MODE_FM, kHz(15)}, /* builtin */ - {RIG_MODE_FM, kHz(6)}, /* builtin */ - RIG_FLT_END, - }, - .str_cal = IC910_STR_CAL, - - .priv = &ic910_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .get_freq = ic910_get_freq, - .set_freq = ic910_set_freq, - -#ifdef HAVE_WEIRD_IC910_MODES - .get_mode = ic910_get_mode, - .set_mode = ic910_set_mode, -#else - .get_mode = icom_get_mode, - .set_mode = icom_set_mode, -#endif - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .set_vfo = icom_set_vfo, - .get_ts = icom_get_ts, - .set_ts = icom_set_ts, - .get_func = ic910_get_func, - .set_func = ic910_set_func, - .get_level = ic910_get_level, - .set_level = ic910_set_level, - - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .decode_event = icom_decode_event, - .set_split_vfo = icom_set_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_freq_mode = icom_set_split_freq_mode, - .get_split_freq_mode = icom_get_split_freq_mode, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_rptr_shift = icom_set_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - -}; diff --git a/icom/ic9100.c b/icom/ic9100.c deleted file mode 100644 index 5c7ed320b..000000000 --- a/icom/ic9100.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-9100 (HF/VHF/UHF All-Mode Tranceiver) - * Copyright (c) 2000-2011 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "idx_builtin.h" -#include "bandplan.h" - - -#define IC9100_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_CWR|\ - RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR) - -#define IC9100_OTHER_TX_MODES ((IC9100_MODES) & ~RIG_MODE_AM) - -#define IC9100_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MAIN|RIG_VFO_SUB|RIG_VFO_MEM|RIG_VFO_MAIN_A|RIG_VFO_MAIN_B|RIG_VFO_SUB_A|RIG_VFO_SUB_B) - -#define IC9100_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -#define IC9100_VFO_OPS (RIG_OP_FROM_VFO| \ - RIG_OP_TO_VFO| \ - RIG_OP_CPY| \ - RIG_OP_MCL| \ - RIG_OP_XCHG| \ - RIG_OP_TUNE) - -#define IC9100_FUNC_ALL (RIG_FUNC_NB| \ - RIG_FUNC_NR| \ - RIG_FUNC_ANF| \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_COMP| \ - RIG_FUNC_VOX| \ - RIG_FUNC_FBKIN| \ - RIG_FUNC_AFC| \ - RIG_FUNC_SATMODE| \ - RIG_FUNC_VSC| \ - RIG_FUNC_MN| \ - RIG_FUNC_LOCK| \ - RIG_FUNC_SCOPE) - -#define IC9100_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_RF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_IF| \ - RIG_LEVEL_NR| \ - RIG_LEVEL_CWPITCH| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_KEYSPD| \ - RIG_LEVEL_COMP| \ - RIG_LEVEL_VOXGAIN| \ - RIG_LEVEL_VOXDELAY| \ - RIG_LEVEL_ANTIVOX| \ - RIG_LEVEL_APF| \ - RIG_LEVEL_AGC| \ - RIG_LEVEL_PBT_IN| \ - RIG_LEVEL_PBT_OUT| \ - RIG_LEVEL_NOTCHF_RAW| \ - RIG_LEVEL_ATT| \ - RIG_LEVEL_PREAMP| \ - RIG_LEVEL_MONITOR_GAIN) - -#define IC9100_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) - -#define IC9100_STR_CAL UNKNOWN_IC_STR_CAL /* FIXME */ - -#define IC9100_HF_ANTS (RIG_ANT_1|RIG_ANT_2) - -/* - */ -static const struct icom_priv_caps ic9100_priv_caps = -{ - 0x7c, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG to avoid display flicker */ - ic910_ts_sc_list, /* FIXME */ -}; - -const struct rig_caps ic9100_caps = -{ - .rig_model = RIG_MODEL_IC9100, - .model_name = "IC-9100", - .mfg_name = "Icom", - .version = BACKEND_VER".2", - .copyright = "LGPL", - .status = RIG_STATUS_STABLE, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC9100_FUNC_ALL, - .has_set_func = IC9100_FUNC_ALL | RIG_FUNC_RESUME, - .has_get_level = IC9100_LEVEL_ALL | RIG_LEVEL_RAWSTR | RIG_LEVEL_SWR, - .has_set_level = IC9100_LEVEL_ALL, - .has_get_parm = IC9100_PARM_ALL, - .has_set_parm = IC9100_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_VOXDELAY] = { .min = { .i = 0 }, .max = { .i = 20 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = {20, RIG_DBLST_END, }, - .attenuator = {20, RIG_DBLST_END, }, - .max_rit = kHz(9.999), - .max_xit = kHz(9.999), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC9100_VFO_OPS, - .scan_ops = IC9100_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 9, /* TODO */ - - .chan_list = { /* TBC */ - { 1, 396, RIG_MTYPE_MEM }, - { 397, 400, RIG_MTYPE_CALL }, - { 401, 424, RIG_MTYPE_EDGE }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { /* Europe */ - {kHz(30), MHz(60), IC9100_MODES, -1, -1, IC9100_VFO_ALL, IC9100_HF_ANTS}, - {kHz(136), MHz(174), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_3}, - {MHz(420), MHz(480), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_4}, - {MHz(1240), MHz(1320), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_5}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), - FRQ_RNG_HF(1, RIG_MODE_AM, W(2), W(25), IC9100_VFO_ALL, IC9100_HF_ANTS), /* only HF */ - FRQ_RNG_6m(1, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), - FRQ_RNG_2m(1, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, RIG_ANT_3), - FRQ_RNG_70cm(1, IC9100_OTHER_TX_MODES, W(2), W(75), IC9100_VFO_ALL, RIG_ANT_4), - /* option */ - FRQ_RNG_23cm_REGION1(IC9100_OTHER_TX_MODES, W(1), W(10), IC9100_VFO_ALL, RIG_ANT_5), - RIG_FRNG_END, - }, - - .rx_range_list2 = { /* USA */ - {kHz(30), MHz(60), IC9100_MODES, -1, -1, IC9100_VFO_ALL, IC9100_HF_ANTS}, - {kHz(136), MHz(174), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_3}, - {MHz(420), MHz(480), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_4}, - {MHz(1240), MHz(1320), IC9100_MODES, -1, -1, IC9100_VFO_ALL, RIG_ANT_5}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - FRQ_RNG_HF(2, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), - FRQ_RNG_HF(2, RIG_MODE_AM, W(2), W(25), IC9100_VFO_ALL, IC9100_HF_ANTS), /* only HF */ - /* USA only, TBC: end of range and modes */ - {MHz(5.255), MHz(5.405), IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS}, /* USA only */ - {MHz(5.255), MHz(5.405), RIG_MODE_AM, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS}, /* USA only */ - FRQ_RNG_6m(2, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, IC9100_HF_ANTS), - FRQ_RNG_2m(2, IC9100_OTHER_TX_MODES, W(2), W(100), IC9100_VFO_ALL, RIG_ANT_3), - FRQ_RNG_70cm(2, IC9100_OTHER_TX_MODES, W(2), W(75), IC9100_VFO_ALL, RIG_ANT_4), - /* option */ - FRQ_RNG_23cm_REGION2(IC9100_OTHER_TX_MODES, W(1), W(10), IC9100_VFO_ALL, RIG_ANT_5), - RIG_FRNG_END, - }, - - .tuning_steps = { - {RIG_MODE_SSB | RIG_MODE_CW, 1}, - {RIG_MODE_SSB | RIG_MODE_CW, 10}, - {RIG_MODE_SSB | RIG_MODE_CW, 50}, - {RIG_MODE_SSB | RIG_MODE_CW, 100}, - {RIG_MODE_FM, kHz(0.1)}, - {RIG_MODE_FM, kHz(5)}, - {RIG_MODE_FM, kHz(6.25)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(12.5)}, - {RIG_MODE_FM, kHz(20)}, - {RIG_MODE_FM, kHz(25)}, - {RIG_MODE_FM, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_CW | RIG_MODE_SSB | RIG_MODE_RTTY, kHz(2.4)}, /* builtin */ - {RIG_MODE_CW | RIG_MODE_RTTY, Hz(500)}, - {RIG_MODE_FM, kHz(15)}, /* builtin */ - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, /* builtin */ - RIG_FLT_END, - }, - .str_cal = IC9100_STR_CAL, - - .priv = (void *)& ic9100_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .get_freq = icom_get_freq, - .set_freq = icom_set_freq, - - .get_mode = icom_get_mode_with_data, - .set_mode = icom_set_mode_with_data, - - .get_vfo = NULL, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - .get_ts = icom_get_ts, - .set_ts = icom_set_ts, - .get_func = icom_get_func, - .set_func = icom_set_func, - .get_level = icom_get_level, - .set_level = icom_set_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - - .set_rit = icom_set_rit, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_code, - .get_dcs_sql = icom_get_dcs_code, - - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, - .decode_event = icom_decode_event, - .set_split_vfo = icom_set_split_vfo, - .get_split_vfo = icom_get_split_vfo, - .set_split_freq = icom_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = icom_set_split_mode, - .get_split_mode = icom_get_split_mode, - -}; - -#ifdef XXREMOVEDXX -// Not referenced anywhere -int ic9100_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x27; - return icom_set_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, 1, val); - - default: - return icom_set_level(rig, vfo, level, val); - } -} -#endif - -#ifdef XXREMOVEDXX -// Not referenced anywhere -int ic9100_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (level) - { - case RIG_LEVEL_VOXDELAY: - cmdbuf[0] = 0x01; - cmdbuf[1] = 0x27; - return icom_get_level_raw(rig, level, C_CTL_MEM, 0x05, 2, cmdbuf, val); - - default: - return icom_get_level(rig, vfo, level, val); - } -} -#endif diff --git a/icom/ic92d.c b/icom/ic92d.c deleted file mode 100644 index a36c49bb9..000000000 --- a/icom/ic92d.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-E92D/IC-92AD and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" -#include "frame.h" -#include "icom_defs.h" - -/* TODO: DV (GMSK 4.8 kbps voice) */ -#define IC92D_MODES (RIG_MODE_FM) -#define IC92D_MODES_TX (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) - -#define IC92D_FUNC_ALL (RIG_FUNC_MUTE|RIG_FUNC_MON|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|RIG_FUNC_AFC) - -#define IC92D_LEVEL_ALL (RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RFPOWER|RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_RAWSTR) - -#define IC92D_PARM_ALL (RIG_PARM_BEEP|RIG_PARM_BACKLIGHT) - -#define IC92D_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC92D_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define IC92D_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) - -/* - * FIXME: real measurement - */ -#define IC92D_STR_CAL UNKNOWN_IC_STR_CAL - -/* FIXME */ -#define IC92D_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .rptr_offs = 1, \ - .rptr_shift = 1, \ - .funcs = IC92D_FUNC_ALL, \ - .levels = RIG_LEVEL_SET(IC92D_LEVEL_ALL), \ -} - -static const char *ic92d_get_info(RIG *rig); - -/* FIXME: tuning step sub-commands */ -const struct ts_sc_list ic92d_ts_sc_list[] = -{ - { kHz(5), 0x00 }, - { kHz(6.25), 0x01 }, - { kHz(8.33), 0x02 }, - { kHz(9), 0x03 }, - { kHz(10), 0x04 }, - { kHz(12.5), 0x05 }, - { kHz(15), 0x06 }, - { kHz(20), 0x07 }, - { kHz(25), 0x08 }, - { kHz(30), 0x09 }, - { kHz(50), 0x0a }, - { kHz(100), 0x0b }, - { kHz(125), 0x0c }, - { kHz(200), 0x0d }, - { 0, 0 }, -}; - - -/* - */ -static const struct icom_priv_caps ic92d_priv_caps = -{ - 0x01, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic92d_ts_sc_list, - .serial_full_duplex = 1 -}; - -const struct rig_caps ic92d_caps = -{ - .rig_model = RIG_MODEL_IC92D, - .model_name = "IC-92D", /* IC-E92D/IC-92AD */ - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_HANDHELD, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 38400, - .serial_rate_max = 38400, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = IC92D_FUNC_ALL, - .has_set_func = IC92D_FUNC_ALL, - .has_get_level = IC92D_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(IC92D_LEVEL_ALL), - .has_get_parm = IC92D_PARM_ALL, - .has_set_parm = IC92D_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { 10, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC92D_VFO_OPS, - .scan_ops = IC92D_SCAN_OPS, - .transceive = RIG_TRN_OFF, - .bank_qty = 26, - .chan_desc_sz = 8, - - /* The IC-E92D has a total 1304 memory channels with 26 memory banks. - * The VFO A has 800 regular channels, 50 scan edges and 2 call channels, - * while the VFO B has 400 regular, 50 scan edges and 2 call channels. - */ - .chan_list = { - { 1, 1200, RIG_MTYPE_MEM, IC92D_MEM_CAP }, - { 1201, 1300, RIG_MTYPE_EDGE, IC92D_MEM_CAP }, - { 1301, 1304, RIG_MTYPE_CALL, IC92D_MEM_CAP }, - RIG_CHAN_END, - }, - - /* IC-E92D */ - .rx_range_list1 = { - {kHz(495), MHz(999.99), RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_WFM, -1, -1, RIG_VFO_A}, - {MHz(118), MHz(174), RIG_MODE_AM | RIG_MODE_FM, -1, -1, RIG_VFO_B}, // TODO: MODE_DV - {MHz(350), MHz(470), RIG_MODE_AM | RIG_MODE_FM, -1, -1, RIG_VFO_B}, // TODO: MODE_DV - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146) - 1, IC92D_MODES_TX, mW(100), W(5), IC92D_VFO_ALL}, - {MHz(430), MHz(440) - 1, IC92D_MODES_TX, mW(100), W(5), IC92D_VFO_ALL}, - RIG_FRNG_END, - }, - - /* IC-92AD */ - .rx_range_list2 = { - {kHz(495), MHz(999.99), RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_WFM, -1, -1, RIG_VFO_A}, - {MHz(118), MHz(174), RIG_MODE_AM | RIG_MODE_FM, -1, -1, RIG_VFO_B}, // TODO: MODE_DV - {MHz(350), MHz(470), RIG_MODE_AM | RIG_MODE_FM, -1, -1, RIG_VFO_B}, // TODO: MODE_DV - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(148) - 1, IC92D_MODES_TX, mW(100), W(5), IC92D_VFO_ALL}, - {MHz(430), MHz(440) - 1, IC92D_MODES_TX, mW(100), W(5), IC92D_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC92D_MODES, kHz(5)}, - {IC92D_MODES, kHz(6.25)}, - {IC92D_MODES, kHz(8.33)}, - {IC92D_MODES, kHz(9)}, - {IC92D_MODES, kHz(10)}, - {IC92D_MODES, 12500}, - {IC92D_MODES, kHz(15)}, - {IC92D_MODES, kHz(20)}, - {IC92D_MODES, kHz(25)}, - {IC92D_MODES, kHz(50)}, - {IC92D_MODES, kHz(100)}, - {IC92D_MODES, kHz(125)}, - {IC92D_MODES, kHz(200)}, - RIG_TS_END, - }, - /* FIXME: mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(9)}, /* N-FM & AM */ - {RIG_MODE_WFM, kHz(230)}, - RIG_FLT_END, - }, - .str_cal = IC92D_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic92d_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .get_info = ic92d_get_info, - -}; - -const char *ic92d_get_info(RIG *rig) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[16]; - int ack_len, retval; - static char info[64]; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - // 018019fd - - priv->re_civ_addr = 0x01; - - retval = icom_transaction(rig, C_RD_TRXID, -1, - NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return NULL; - } - - if (ack_len <= 3) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, ackbuf[0], ack_len); - return NULL; - } - - sprintf(info, "ID %02x%02x%02x\n", ackbuf[1], ackbuf[2], ackbuf[3]); - - return info; -} - diff --git a/icom/ic970.c b/icom/ic970.c deleted file mode 100644 index 893f16874..000000000 --- a/icom/ic970.c +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-970 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" - - -#define IC970_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define IC970_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define IC970_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) - -#define IC970_STR_CAL { 0, { } } - -/* - * FIXME: this appears to be the IC-970A/E - * what about the IC-970H ? please give it a fix. --SF - */ -static const struct icom_priv_caps ic970_priv_caps = -{ - 0x2e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps ic970_caps = -{ - .rig_model = RIG_MODEL_IC970, - .model_name = "IC-970", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = IC970_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, - { 102, 102, RIG_MTYPE_CALL }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(144), MHz(146), IC970_MODES, -1, -1, IC970_VFO_ALL}, - {MHz(430), MHz(440), IC970_MODES, -1, -1, IC970_VFO_ALL}, - /* 1200MHz band module is optional */ -// {MHz(1240),MHz(1300),IC970_MODES,-1,-1,IC970_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), IC970_MODES, W(3.5), W(25), IC970_VFO_ALL}, - {MHz(430), MHz(440), IC970_MODES, W(3.5), W(25), IC970_VFO_ALL}, -// {MHz(1240),MHz(1300),IC970_MODES,W(1),W(10),IC970_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(144), MHz(150), IC970_MODES, -1, -1, IC970_VFO_ALL}, - {MHz(430), MHz(450), IC970_MODES, -1, -1, IC970_VFO_ALL}, - /* 1200MHz band module is optional */ -// {MHz(1240),MHz(1300),IC970_MODES,-1,-1,IC970_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(150), IC970_MODES, W(3.5), W(25), IC970_VFO_ALL}, - {MHz(430), MHz(450), IC970_MODES, W(3.5), W(25), IC970_VFO_ALL}, -// {MHz(1240),MHz(1300),IC970_MODES,W(1),W(10),IC970_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {IC970_MODES, 10}, /* TBC: does this rig supports settin tuning step? */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.3)}, - // {RIG_MODE_FM, Hz(500)}, /* optional CW NARROW FILTER */ - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& ic970_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - diff --git a/icom/icom.c b/icom/icom.c deleted file mode 100644 index e68a113d0..000000000 --- a/icom/icom.c +++ /dev/null @@ -1,6052 +0,0 @@ -/* - * Hamlib CI-V backend - main file - * Copyright (c) 2000-2016 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include /* String function definitions */ -#include /* UNIX standard function definitions */ -#include - -#include -#include -#include -#include -#include -#include - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - -// Newer Icoms like the 9700 and 910 have VFOA/B on both Main & Sub -// Compared to older rigs which have one or the other -// So we need to distinguish between them -#define VFO_HAS_A_B ((rig->state.vfo_list & (RIG_VFO_A|RIG_VFO_B)) == (RIG_VFO_A|RIG_VFO_B)) -#define VFO_HAS_MAIN_SUB ((rig->state.vfo_list & (RIG_VFO_MAIN|RIG_VFO_SUB)) == (RIG_VFO_MAIN|RIG_VFO_SUB)) -#define VFO_HAS_MAIN_SUB_ONLY ((!VFO_HAS_A_B) & VFO_HAS_MAIN_SUB) -#define VFO_HAS_MAIN_SUB_A_B_ONLY (VFO_HAS_A_B & VFO_HAS_MAIN_SUB) -#define VFO_HAS_A_B_ONLY (VFO_HAS_A_B & (!VFO_HAS_MAIN_SUB)) - -static int set_vfo_curr(RIG *rig, vfo_t vfo, vfo_t curr_vfo); - -const cal_table_float_t icom_default_swr_cal = -{ - 5, - { - {0, 1.0f}, - {48, 1.5f}, - {80, 2.0f}, - {120, 3.0f}, - {240, 6.0f} - } -}; - -const cal_table_float_t icom_default_alc_cal = -{ - 2, - { - {0, 0.0f}, - {120, 1.0f} - } -}; - -const cal_table_float_t icom_default_rfpower_meter_cal = -{ - 3, - { - {0, 0.0f}, - {143, 0.5f}, - {213, 1.0f} - } -}; - -const cal_table_float_t icom_default_comp_meter_cal = -{ - 3, - { - {0, 0.0f}, - {130, 15.0f}, - {241, 30.0f} - } -}; - -const cal_table_float_t icom_default_vd_meter_cal = -{ - 3, - { - {0, 0.0f}, - {13, 10.0f}, - {241, 16.0f} - } -}; - -const cal_table_float_t icom_default_id_meter_cal = -{ - 4, - { - {0, 0.0f}, - {97, 10.0f}, - {146, 15.0f}, - {241, 25.0f} - } -}; - -const struct ts_sc_list r8500_ts_sc_list[] = -{ - {10, 0x00}, - {50, 0x01}, - {100, 0x02}, - {kHz(1), 0x03}, - {12500, 0x04}, - {kHz(5), 0x05}, - {kHz(9), 0x06}, - {kHz(10), 0x07}, - {12500, 0x08}, - {kHz(20), 0x09}, - {kHz(25), 0x10}, - {kHz(100), 0x11}, - {MHz(1), 0x12}, - {0, 0x13}, /* programmable tuning step not supported */ - {0, 0}, -}; - -const struct ts_sc_list ic737_ts_sc_list[] = -{ - {10, 0x00}, - {kHz(1), 0x01}, - {kHz(2), 0x02}, - {kHz(3), 0x03}, - {kHz(4), 0x04}, - {kHz(5), 0x05}, - {kHz(6), 0x06}, - {kHz(7), 0x07}, - {kHz(8), 0x08}, - {kHz(9), 0x09}, - {kHz(10), 0x10}, - {0, 0}, -}; - -const struct ts_sc_list r75_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {6250, 0x04}, - {kHz(9), 0x05}, - {kHz(10), 0x06}, - {12500, 0x07}, - {kHz(20), 0x08}, - {kHz(25), 0x09}, - {kHz(100), 0x10}, - {MHz(1), 0x11}, - {0, 0}, -}; - -const struct ts_sc_list r7100_ts_sc_list[] = -{ - {100, 0x00}, - {kHz(1), 0x01}, - {kHz(5), 0x02}, - {kHz(10), 0x03}, - {12500, 0x04}, - {kHz(20), 0x05}, - {kHz(25), 0x06}, - {kHz(100), 0x07}, - {0, 0}, -}; - -const struct ts_sc_list r9000_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(9), 0x04}, - {kHz(10), 0x05}, - {12500, 0x06}, - {kHz(20), 0x07}, - {kHz(25), 0x08}, - {kHz(100), 0x09}, - {0, 0}, -}; - -const struct ts_sc_list r9500_ts_sc_list[] = -{ - {1, 0x00}, - {10, 0x01}, - {100, 0x02}, - {kHz(1), 0x03}, - {kHz(2.5), 0x04}, - {kHz(5), 0x05}, - {6250, 0x06}, - {kHz(9), 0x07}, - {kHz(10), 0x08}, - {12500, 0x09}, - {kHz(20), 0x10}, - {kHz(25), 0x11}, - {kHz(100), 0x12}, - {MHz(1), 0x13}, - {0, 0}, -}; - -const struct ts_sc_list ic718_ts_sc_list[] = -{ - {10, 0x00}, - {kHz(1), 0x01}, - {kHz(5), 0x01}, - {kHz(9), 0x01}, - {kHz(10), 0x04}, - {kHz(100), 0x05}, - {0, 0}, -}; - -const struct ts_sc_list ic756_ts_sc_list[] = -{ - {10, 0x00}, - {kHz(1), 0x01}, - {kHz(5), 0x02}, - {kHz(9), 0x03}, - {kHz(10), 0x04}, - {0, 0}, -}; - -const struct ts_sc_list ic756pro_ts_sc_list[] = -{ - {10, 0x00}, /* 1 if step turned off */ - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(9), 0x04}, - {kHz(10), 0x05}, - {kHz(12.5), 0x06}, - {kHz(20), 0x07}, - {kHz(25), 0x08}, - {0, 0}, -}; - -const struct ts_sc_list ic706_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(9), 0x04}, - {kHz(10), 0x05}, - {12500, 0x06}, - {kHz(20), 0x07}, - {kHz(25), 0x08}, - {kHz(100), 0x09}, - {0, 0}, -}; - -const struct ts_sc_list ic7000_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(9), 0x04}, - {kHz(10), 0x05}, - {12500, 0x06}, - {kHz(20), 0x07}, - {kHz(25), 0x08}, - {kHz(100), 0x09}, - {MHz(1), 0x10}, - {0, 0}, -}; - -const struct ts_sc_list ic7100_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(6.25), 0x04}, - {kHz(9), 0x05}, - {kHz(10), 0x06}, - {kHz(12.5), 0x07}, - {kHz(20), 0x08}, - {kHz(25), 0x09}, - {kHz(50), 0x0A}, - {kHz(100), 0x0B}, - {MHz(1), 0x0C}, - {0, 0x00}, -}; - -const struct ts_sc_list ic7200_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(9), 0x04}, - {kHz(10), 0x05}, - {0, 0}, -}; - -const struct ts_sc_list ic7300_ts_sc_list[] = -{ - {1, 0x00}, /* Manual says "Send/read the tuning step OFF" */ - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(5), 0x03}, - {kHz(9), 0x04}, - {kHz(10), 0x05}, - {kHz(12.5), 0x06}, - {kHz(20), 0x07}, - {kHz(25), 0x08}, - {0, 0}, -}; - -const struct ts_sc_list ic910_ts_sc_list[] = -{ - {Hz(1), 0x00}, - {Hz(10), 0x01}, - {Hz(50), 0x02}, - {Hz(100), 0x03}, - {kHz(1), 0x04}, - {kHz(5), 0x05}, - {kHz(6.25), 0x06}, - {kHz(10), 0x07}, - {kHz(12.5), 0x08}, - {kHz(20), 0x09}, - {kHz(25), 0x10}, - {kHz(100), 0x11}, - {0, 0}, -}; - -const struct ts_sc_list r8600_ts_sc_list[] = -{ - {10, 0x00}, - {100, 0x01}, - {kHz(1), 0x02}, - {kHz(2.5), 0x03}, - {3125, 0x04}, - {kHz(5), 0x05}, - {6250, 0x06}, - {8330, 0x07}, - {kHz(9), 0x08}, - {kHz(10), 0x09}, - {kHz(12.5), 0x10}, - {kHz(20), 0x11}, - {kHz(25), 0x12}, - {kHz(100), 0x13}, - {0, 0x14}, /* programmable tuning step not supported */ - {0, 0}, -}; - - - -/* rtty filter list for some DSP rigs ie PRO */ -#define RTTY_FIL_NB 5 -const pbwidth_t rtty_fil[] = -{ - Hz(250), - Hz(300), - Hz(350), - Hz(500), - kHz(1), - 0, -}; - -struct icom_addr -{ - rig_model_t model; - unsigned char re_civ_addr; -}; - - -#define TOK_CIVADDR TOKEN_BACKEND(1) -#define TOK_MODE731 TOKEN_BACKEND(2) -#define TOK_NOXCHG TOKEN_BACKEND(3) - -const struct confparams icom_cfg_params[] = -{ - { - TOK_CIVADDR, "civaddr", "CI-V address", "Transceiver's CI-V address", - "0", RIG_CONF_NUMERIC, {.n = {0, 0xff, 1}} - }, - { - TOK_MODE731, "mode731", "CI-V 731 mode", "CI-V operating frequency " - "data length, needed for IC731 and IC735", - "0", RIG_CONF_CHECKBUTTON - }, - { - TOK_NOXCHG, "no_xchg", "No VFO XCHG", - "Don't Use VFO XCHG to set other VFO mode and Frequency", - "0", RIG_CONF_CHECKBUTTON - }, - {RIG_CONF_END, NULL,} -}; - -/* - * Please, if the default CI-V address of your rig is listed as UNKNOWN_ADDR, - * send the value to for inclusion. Thanks --SF - */ -static const struct icom_addr icom_addr_list[] = -{ - {RIG_MODEL_IC703, 0x68}, - {RIG_MODEL_IC706, 0x48}, - {RIG_MODEL_IC706MKII, 0x4e}, - {RIG_MODEL_IC706MKIIG, 0x58}, - {RIG_MODEL_IC271, 0x20}, - {RIG_MODEL_IC275, 0x10}, - {RIG_MODEL_IC375, 0x12}, - {RIG_MODEL_IC471, 0x22}, - {RIG_MODEL_IC475, 0x14}, - {RIG_MODEL_IC575, 0x16}, - {RIG_MODEL_IC707, 0x3e}, - {RIG_MODEL_IC725, 0x28}, - {RIG_MODEL_IC726, 0x30}, - {RIG_MODEL_IC728, 0x38}, - {RIG_MODEL_IC729, 0x3a}, - {RIG_MODEL_IC731, 0x02}, /* need confirmation */ - {RIG_MODEL_IC735, 0x04}, - {RIG_MODEL_IC736, 0x40}, - {RIG_MODEL_IC7410, 0x80}, - {RIG_MODEL_IC746, 0x56}, - {RIG_MODEL_IC746PRO, 0x66}, - {RIG_MODEL_IC737, 0x3c}, - {RIG_MODEL_IC738, 0x44}, - {RIG_MODEL_IC751, 0x1c}, - {RIG_MODEL_IC751A, 0x1c}, - {RIG_MODEL_IC756, 0x50}, - {RIG_MODEL_IC756PRO, 0x5c}, - {RIG_MODEL_IC756PROII, 0x64}, - {RIG_MODEL_IC756PROIII, 0x6e}, - {RIG_MODEL_IC7600, 0x7a}, - {RIG_MODEL_IC761, 0x1e}, - {RIG_MODEL_IC765, 0x2c}, - {RIG_MODEL_IC775, 0x46}, - {RIG_MODEL_IC7800, 0x6a}, - {RIG_MODEL_IC785x, 0x8e}, - {RIG_MODEL_IC781, 0x26}, - {RIG_MODEL_IC820, 0x42}, - {RIG_MODEL_IC821, 0x4c}, - {RIG_MODEL_IC821H, 0x4c}, - {RIG_MODEL_IC910, 0x60}, - {RIG_MODEL_IC9100, 0x7c}, - {RIG_MODEL_IC9700, 0xa2}, - {RIG_MODEL_IC970, 0x2e}, - {RIG_MODEL_IC1271, 0x24}, - {RIG_MODEL_IC1275, 0x18}, - {RIG_MODEL_ICR10, 0x52}, - {RIG_MODEL_ICR20, 0x6c}, - {RIG_MODEL_ICR6, 0x7e}, - {RIG_MODEL_ICR71, 0x1a}, - {RIG_MODEL_ICR72, 0x32}, - {RIG_MODEL_ICR75, 0x5a}, - {RIG_MODEL_ICRX7, 0x78}, - {RIG_MODEL_IC78, 0x62}, - {RIG_MODEL_ICR7000, 0x08}, - {RIG_MODEL_ICR7100, 0x34}, - {RIG_MODEL_ICR8500, 0x4a}, - {RIG_MODEL_ICR9000, 0x2a}, - {RIG_MODEL_ICR9500, 0x72}, - {RIG_MODEL_MINISCOUT, 0x94}, - {RIG_MODEL_IC718, 0x5e}, - {RIG_MODEL_OS535, 0x80}, /* same address as IC-7410 */ - {RIG_MODEL_ICID1, 0x01}, - {RIG_MODEL_IC7000, 0x70}, - {RIG_MODEL_IC7100, 0x88}, - {RIG_MODEL_IC7200, 0x76}, - {RIG_MODEL_IC7610, 0x98}, - {RIG_MODEL_IC7700, 0x74}, - {RIG_MODEL_PERSEUS, 0xE1}, - {RIG_MODEL_X108G, 0x70}, - {RIG_MODEL_ICR8600, 0x96}, - {RIG_MODEL_ICR30, 0x9c}, - {RIG_MODEL_NONE, 0}, -}; - -/* - * This is a generic icom_init function. - * You might want to define yours, so you can customize it for your rig - * - * Basically, it sets up *priv - * REM: serial port is already open (rig->state.rigport.fd) - */ -int -icom_init(RIG *rig) -{ - struct icom_priv_data *priv; - const struct icom_priv_caps *priv_caps; - const struct rig_caps *caps; - int retval; - int satmode; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (!rig->caps) - { - return -RIG_EINVAL; - } - - caps = rig->caps; - - if (!caps->priv) - { - return -RIG_ECONF; - } - - priv_caps = (const struct icom_priv_caps *) caps->priv; - - - rig->state.priv = (struct icom_priv_data *) calloc(1, sizeof(struct icom_priv_data)); - - if (!rig->state.priv) - { - /* whoops! memory shortage! */ - return -RIG_ENOMEM; - } - - priv = rig->state.priv; - - /* TODO: CI-V address should be customizable */ - - /* - * init the priv_data from static struct - * + override with preferences - */ - - priv->re_civ_addr = priv_caps->re_civ_addr; - priv->civ_731_mode = priv_caps->civ_731_mode; - priv->no_xchg = priv_caps->no_xchg; - priv->tx_vfo = RIG_VFO_NONE; - priv->rx_vfo = RIG_VFO_NONE; - priv->curr_vfo = RIG_VFO_NONE; - retval = rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_SATMODE, &satmode); - rig_debug(RIG_DEBUG_VERBOSE, "%s: satmode=%d\n", __func__, satmode); - - if (retval == RIG_OK && satmode) - { - priv->rx_vfo = RIG_VFO_MAIN; - priv->tx_vfo = RIG_VFO_SUB; - } - - rig_debug(RIG_DEBUG_TRACE, "%s: done\n", __func__); - - return RIG_OK; -} - -/* - * ICOM Generic icom_cleanup routine - * the serial port is closed by the frontend - */ -int -icom_cleanup(RIG *rig) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (!rig) - { - return -RIG_EINVAL; - } - - if (rig->state.priv) - { - free(rig->state.priv); - } - - rig->state.priv = NULL; - - return RIG_OK; -} - -/** - * Returns 1 when USB ECHO is off - * Returns 0 when USB ECHO is on - * \return Returns < 0 when error occurs (e.g. timeout, nimple, navail) - */ -int icom_get_usb_echo_off(RIG *rig) -{ - int retval; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - struct rig_state *rs = &rig->state; - int retry_save = rs->rigport.retry; - struct icom_priv_data *priv = (struct icom_priv_data *) rs->priv; - - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - // reduce the retry here so it's quicker - rs->rigport.retry = 1; - // Check for echo on first - priv->serial_USB_echo_off = 0; - retval = icom_transaction(rig, C_RD_TRXID, 0x00, NULL, 0, ackbuf, &ack_len); - - if (retval == RIG_OK) - { - rig_debug(RIG_DEBUG_VERBOSE, "%s: USB echo on detected\n", - __func__); - rs->rigport.retry = retry_save; - return RIG_OK; - } - else - { - rig_debug(RIG_DEBUG_VERBOSE, "%s %d \n", __func__, __LINE__); - priv->serial_USB_echo_off = 1; - - retval = icom_transaction(rig, C_RD_TRXID, 0x00, NULL, 0, ackbuf, &ack_len); - - if (retval == RIG_OK) - { - rig_debug(RIG_DEBUG_VERBOSE, "%s: USB echo off detected\n", - __func__); - rs->rigport.retry = retry_save; - return RIG_OK; - } - } - - rs->rigport.retry = retry_save; - return retval; -} - - -/* - * ICOM rig open routine - * Detect echo state of USB serial port - */ -int -icom_rig_open(RIG *rig) -{ - int retval = RIG_OK; - - rig_debug(RIG_DEBUG_VERBOSE, "%s %d \n", __func__, __LINE__); - - retval = icom_get_usb_echo_off(rig); - - if (retval >= 0) { return RIG_OK; } - - // maybe we need power on? - rig_debug(RIG_DEBUG_VERBOSE, "%s trying power on\n", __func__); - retval = abs(rig_set_powerstat(rig, 1)); - - // this is only a fatal error if powerstat is implemented - // if not iplemented than we're at an error here - if (retval != RIG_OK && retval != RIG_ENIMPL && retval != RIG_ENAVAIL) - { - rig_debug(RIG_DEBUG_WARN, "%s: unexpected retval here: %s\n", - __func__, rigerror(retval)); - - rig_debug(RIG_DEBUG_WARN, "%s: rig_set_powerstat failed: =%s\n", __func__, - rigerror(retval)); - return retval; - } - - // Now that we're powered up let's try again - retval = icom_get_usb_echo_off(rig); - - if (retval >= 0) { return RIG_OK; } - - rig_debug(RIG_DEBUG_ERR, "%s: Unable to determine USB echo status\n", __func__); - return retval; -} - - -/* - * icom_set_freq - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char freqbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int freq_len, ack_len = sizeof(ackbuf), retval; - int cmd, subcmd; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called %s=%" PRIfreq "\n", __func__, - rig_strvfo(vfo), freq); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - // IC-9700 cannot set freq MAIN to same band as SUB - // So we query both and ensure they won't match - // If a potential collision we just swap VFOs - // This covers setting VFOA, VFOB, Main or Sub -#if 0 - - if (rig->caps->rig_model == RIG_MODEL_IC9700) - { - // the 0x07 0xd2 is not working as of IC-9700 firmwave 1.05 - // When it does work this can be unblocked - freq_t freqMain, freqSub; - retval = rig_get_freq(rig, RIG_VFO_MAIN, &freqMain); - - if (retval != RIG_OK) - { - return retval; - } - - retval = rig_get_freq(rig, RIG_VFO_SUB, &freqSub); - - if (retval != RIG_OK) - { - return retval; - } - - // Make our 2M = 1, 70cm = 4, and 23cm=12 - freqMain = freqMain / 1e8; - freqSub = freqMain / 1e8; - freq_t freq2 = freq / 1e8; - // Check if changing bands on Main and it matches Sub band - int mainCollides = freq2 != freqMain && freq2 == freqSub; - - if (mainCollides) - { - // we'll just swap Main/Sub - retval = icom_vfo_op(rig, vfo, RIG_OP_XCHG); - - if (retval != RIG_OK) - { - return retval; - } - } - } - -#endif - retval = set_vfo_curr(rig, vfo, priv->curr_vfo); - - if (retval != RIG_OK) - { - return retval; - } - - freq_len = priv->civ_731_mode ? 4 : 5; - /* - * to_bcd requires nibble len - */ - to_bcd(freqbuf, freq, freq_len * 2); - - cmd = C_SET_FREQ; - subcmd = -1; - retval = icom_transaction(rig, cmd, subcmd, freqbuf, freq_len, ackbuf, - &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_freq - * Assumes rig!=NULL, rig->state.priv!=NULL, freq!=NULL, Main=VFOA, Sub=VFOB - * Note: old rig may return less than 4/5 bytes for get_freq - */ -int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char freqbuf[MAXFRAMELEN]; - int freq_len, retval; - int cmd, subcmd; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called for %s\n", __func__, - rig_strvfo(vfo)); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - cmd = C_RD_FREQ; - subcmd = -1; - - // Pick the appropriate VFO when VFO_TX is requested - if (vfo == RIG_VFO_TX) - { - rig_debug(RIG_DEBUG_TRACE, "%s: VFO_TX requested, vfo=%s\n", __func__, - rig_strvfo(vfo)); - - if (priv->split_on) - { - vfo = (rig->state.vfo_list & RIG_VFO_B) ? RIG_VFO_B : RIG_VFO_SUB; - } - else - { - vfo = (rig->state.vfo_list & RIG_VFO_B) ? RIG_VFO_A : RIG_VFO_MAIN; - } - } - - retval = set_vfo_curr(rig, vfo, priv->curr_vfo); - - if (retval != RIG_OK) - { - return retval; - } - - // Pick the appropriate VFO when VFO_RX is requested - if (vfo == RIG_VFO_RX) - { - rig_debug(RIG_DEBUG_TRACE, "%s: VFO_RX requested, vfo=%s\n", __func__, - rig_strvfo(vfo)); - vfo = (rig->state.vfo_list & RIG_VFO_B) ? RIG_VFO_A : RIG_VFO_MAIN; - } - - rig_debug(RIG_DEBUG_VERBOSE, "%s: using vfo=%s\n", __func__, - rig_strvfo(vfo)); - - retval = icom_transaction(rig, cmd, subcmd, NULL, 0, freqbuf, &freq_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * freqbuf should contain Cn,Data area - */ - freq_len--; - - /* - * is it a blank mem channel ? - */ - if (freq_len == 1 && freqbuf[1] == 0xff) - { - *freq = RIG_FREQ_NONE; - - return RIG_OK; - } - - if (freq_len != 4 && freq_len != 5) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", - __func__, freq_len); - return -RIG_ERJCTED; - } - - if (freq_len != (priv->civ_731_mode ? 4 : 5)) - { - rig_debug(RIG_DEBUG_WARN, "%s: freq len (%d) differs from expected\n", - __func__, freq_len); - } - - /* - * from_bcd requires nibble len - */ - *freq = from_bcd(freqbuf + 1, freq_len * 2); - - return RIG_OK; -} - -int icom_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit) -{ - unsigned char freqbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int freq_len, ack_len = sizeof(ackbuf), retval; - - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - freq_len = 2; - /* - * to_bcd requires nibble len - */ - to_bcd(freqbuf, rit, freq_len * 2); - - retval = icom_transaction(rig, C_SET_OFFS, -1, freqbuf, freq_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -int icom_get_rit_new(RIG *rig, vfo_t vfo, shortfreq_t *ts) -{ - unsigned char tsbuf[MAXFRAMELEN]; - int ts_len, retval; - - retval = - icom_transaction(rig, C_CTL_RIT, S_RIT_FREQ, NULL, 0, tsbuf, &ts_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * tsbuf nibbles should contain 10,1,1000,100 hz digits and 00=+, 01=- bit - */ - rig_debug(RIG_DEBUG_VERBOSE, "%s: ts_len=%d\n", __func__, ts_len); - - if (ts_len != 5) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, ts_len); - return -RIG_ERJCTED; - } - - *ts = (shortfreq_t) from_bcd(tsbuf + 2, 4); - - if (tsbuf[4] != 0) - { - *ts *= -1; - } - - return RIG_OK; -} - -// The Icom rigs have only one register for both RIT and Delta TX -// you can turn one or both on -- but both end up just being in sync. -static int icom_set_it_new(RIG *rig, vfo_t vfo, shortfreq_t ts, int set_xit) -{ - unsigned char tsbuf[8]; - unsigned char ackbuf[16]; - int ack_len; - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s: ts=%d\n", __func__, (int) ts); - - to_bcd(tsbuf, abs((int) ts), 4); - // set sign bit - tsbuf[2] = (ts < 0) ? 1 : 0; - - retval = icom_transaction(rig, C_CTL_RIT, S_RIT_FREQ, tsbuf, 3, ackbuf, - &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ts == 0) // Turn off both RIT/XIT - { - if (rig->caps->has_get_func & RIG_FUNC_XIT) - { - rig_debug(RIG_DEBUG_TRACE, "%s: turning of XIT too\n", __func__); - retval = icom_set_func(rig, vfo, RIG_FUNC_XIT, 0); - - if (retval != RIG_OK) - { - return retval; - } - } - else // some rigs don't have XIT like the 9700 - { - rig_debug(RIG_DEBUG_TRACE, - "%s: rig does not have xit command enabled\n", __func__); - } - - retval = icom_set_func(rig, vfo, RIG_FUNC_RIT, 0); - } - else - { - retval = - icom_set_func(rig, vfo, set_xit ? RIG_FUNC_XIT : RIG_FUNC_RIT, 1); - } - - return retval; -} - -int icom_set_rit_new(RIG *rig, vfo_t vfo, shortfreq_t ts) -{ - return icom_set_it_new(rig, vfo, ts, 0); -} - -int icom_set_xit_new(RIG *rig, vfo_t vfo, shortfreq_t ts) -{ - return icom_set_it_new(rig, vfo, ts, 1); -} - -/* icom_get_dsp_flt - returns the dsp filter width in hz or 0 if the command is not implemented or error. - This allows the default parameters to be assigned from the get_mode routine if the command is not implemented. - Assumes rig != null and the current mode is in mode. - - Has been tested for IC-746pro, Should work on the all dsp rigs ie pro models. - The 746 documentation says it has the get_if_filter, but doesn't give any decoding information ? Please test. -*/ - -pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode) -{ - - int retval, res_len, rfstatus; - unsigned char resbuf[MAXFRAMELEN]; - value_t rfwidth; - unsigned char fw_sub_cmd = RIG_MODEL_IC7200 == rig->caps->rig_model ? 0x02 : - S_MEM_FILT_WDTH; - struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (rig_has_get_func(rig, RIG_FUNC_RF) - && (mode & (RIG_MODE_RTTY | RIG_MODE_RTTYR))) - { - if (!rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_RF, &rfstatus) - && (rfstatus)) - { - retval = rig_get_ext_parm(rig, TOK_RTTY_FLTR, &rfwidth); - - if (retval != RIG_OK || rfwidth.i >= RTTY_FIL_NB) - { - return 0; /* use default */ - } - else - { - return rtty_fil[rfwidth.i]; - } - } - } - - if (RIG_MODEL_X108G == rig->caps->rig_model) - { - priv->no_1a_03_cmd = 1; - } - - if (priv->no_1a_03_cmd) - { - return 0; - } - - retval = icom_transaction(rig, C_CTL_MEM, fw_sub_cmd, 0, 0, - resbuf, &res_len); - - if (-RIG_ERJCTED == retval) - { - priv->no_1a_03_cmd = -1; /* do not keep asking */ - return 0; - } - - if (retval != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, resbuf[0], res_len); - return 0; /* use default */ - } - - if (res_len == 3 && resbuf[0] == C_CTL_MEM) - { - int i; - i = (int) from_bcd(resbuf + 2, 2); - - if (mode & RIG_MODE_AM) - { - return (i + 1) * 200; /* Ic_7800 */ - } - else if (mode & - (RIG_MODE_CW | RIG_MODE_USB | RIG_MODE_LSB | RIG_MODE_RTTY | - RIG_MODE_RTTYR)) - { - return i < 10 ? (i + 1) * 50 : (i - 4) * 100; - } - } - - return 0; -} - -#ifdef XXREMOVEDXX -// not referenced anywhere -int icom_set_dsp_flt(RIG *rig, rmode_t mode, pbwidth_t width) -{ - int retval, rfstatus; - unsigned char ackbuf[MAXFRAMELEN]; - unsigned char flt_ext; - value_t rfwidth; - int ack_len = sizeof(ackbuf), flt_idx; - unsigned char fw_sub_cmd = RIG_MODEL_IC7200 == rig->caps->rig_model ? 0x02 : - S_MEM_FILT_WDTH; - - if (RIG_PASSBAND_NOCHANGE == width) - { - return RIG_OK; - } - - if (width == RIG_PASSBAND_NORMAL) - { - width = rig_passband_normal(rig, mode); - } - - if (rig_has_get_func(rig, RIG_FUNC_RF) - && (mode & (RIG_MODE_RTTY | RIG_MODE_RTTYR))) - { - if (!rig_get_func(rig, RIG_VFO_CURR, RIG_FUNC_RF, &rfstatus) - && (rfstatus)) - { - int i; - - for (i = 0; i < RTTY_FIL_NB; i++) - { - if (rtty_fil[i] == width) - { - rfwidth.i = i; - return rig_set_ext_parm(rig, TOK_RTTY_FLTR, rfwidth); - } - } - - /* not found */ - return -RIG_EINVAL; - } - } - - if (mode & RIG_MODE_AM) - { - flt_idx = (width / 200) - 1; /* TBC: Ic_7800? */ - } - else if (mode & (RIG_MODE_CW | RIG_MODE_USB | RIG_MODE_LSB | RIG_MODE_RTTY | - RIG_MODE_RTTYR)) - { - if (width == 0) - { - width = 1; - } - - flt_idx = - width <= 500 ? ((width + 49) / 50) - 1 : ((width + 99) / 100) + 4; - } - else - { - return RIG_OK; - } - - to_bcd(&flt_ext, flt_idx, 2); - - retval = icom_transaction(rig, C_CTL_MEM, fw_sub_cmd, &flt_ext, 1, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), " - "len=%d\n", __func__, ackbuf[0], ack_len); - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: command not supported ? (%#.2x), " - "len=%d\n", __func__, ackbuf[0], ack_len); - return retval; - } - - return RIG_OK; -} -#endif - -/* - * icom_set_mode_with_data - */ -int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode, - pbwidth_t width) -{ - int retval; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - rmode_t icom_mode; - unsigned char dm_sub_cmd = RIG_MODEL_IC7200 == rig->caps->rig_model ? 0x04 : - S_MEM_DATA_MODE; - int filter_byte = rig->caps->rig_model == RIG_MODEL_IC7300 - || rig->caps->rig_model == RIG_MODEL_IC7610; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (mode) - { - case RIG_MODE_PKTUSB: - icom_mode = RIG_MODE_USB; - break; - - case RIG_MODE_PKTLSB: - icom_mode = RIG_MODE_LSB; - break; - - case RIG_MODE_PKTFM: - icom_mode = RIG_MODE_FM; - break; - - case RIG_MODE_PKTAM: - icom_mode = RIG_MODE_AM; - break; - - default: - icom_mode = mode; - break; - } - - retval = icom_set_mode(rig, vfo, icom_mode, width); - - if (RIG_OK == retval) - { - unsigned char datamode[2]; - - switch (mode) - { - case RIG_MODE_PKTUSB: - case RIG_MODE_PKTLSB: - case RIG_MODE_PKTFM: - case RIG_MODE_PKTAM: - /* some rigs (e.g. IC-7700 & IC-7800) - have D1/2/3 but we cannot know - which to set so just set D1 */ - datamode[0] = 0x01; - break; - - default: - datamode[0] = 0x00; - break; - } - - if (filter_byte) // then we need the width byte too - { - unsigned char mode_icom; // not used as it will map to USB/LSB - signed char width_icom; - rig2icom_mode(rig, mode, width, &mode_icom, &width_icom); - // since width_icom is 0-2 for rigs that need this here we have to make it 1-3 - datamode[1] = datamode[0] ? width_icom : 0; - retval = - icom_transaction(rig, C_CTL_MEM, dm_sub_cmd, datamode, 2, ackbuf, - &ack_len); - } - else - { - retval = - icom_transaction(rig, C_CTL_MEM, dm_sub_cmd, datamode, 1, ackbuf, - &ack_len); - } - - if (retval != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), len=%d\n", - __func__, ackbuf[0], ack_len); - } - else - { - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, - "%s: command not supported ? (%#.2x), len=%d\n", - __func__, ackbuf[0], ack_len); - } - } - } - - return retval; -} - -/* - * icom_set_mode - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) -{ - struct icom_priv_data *priv; - const struct icom_priv_caps *priv_caps; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - unsigned char icmode; - signed char icmode_ext; - int ack_len = sizeof(ackbuf), retval, err; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - priv_caps = (const struct icom_priv_caps *) rig->caps->priv; - - if (priv_caps->r2i_mode != NULL) /* call priv code if defined */ - { - err = priv_caps->r2i_mode(rig, mode, width, &icmode, &icmode_ext); - } - else /* else call default */ - { - err = rig2icom_mode(rig, mode, width, &icmode, &icmode_ext); - } - - if (err < 0) - { - return err; - } - - /* IC-731 and IC-735 don't support passband data */ - /* IC-726 & IC-475A/E also limited support - only on CW */ - /* TODO: G4WJS CW wide/narrow are possible with above two radios */ - if (priv->civ_731_mode || rig->caps->rig_model == RIG_MODEL_OS456 - || rig->caps->rig_model == RIG_MODEL_IC726 - || rig->caps->rig_model == RIG_MODEL_IC475) - { - icmode_ext = -1; - } - - retval = icom_transaction(rig, C_SET_MODE, icmode, - (unsigned char *) &icmode_ext, - (icmode_ext == -1 ? 0 : 1), ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - -#if 0 - - /* Tentative DSP filter setting ($1A$03), but not supported by every rig, - * and some models like IC910/Omni VI Plus have a different meaning for - * this subcommand - */ - if ((rig->caps->rig_model != RIG_MODEL_IC910) && - (rig->caps->rig_model != RIG_MODEL_OMNIVIP)) - { - icom_set_dsp_flt(rig, mode, width); - } - -#endif - - return RIG_OK; -} - -/* - * icom_get_mode_with_data - * - * newer Icom rigs support data mode with ACC-1 audio input and MIC muted - */ -int icom_get_mode_with_data(RIG *rig, vfo_t vfo, rmode_t *mode, - pbwidth_t *width) -{ - unsigned char databuf[MAXFRAMELEN]; - int data_len, retval; - unsigned char dm_sub_cmd = RIG_MODEL_IC7200 == rig->caps->rig_model ? 0x04 : - S_MEM_DATA_MODE; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_get_mode(rig, vfo, mode, width); - - if (retval != RIG_OK) - { - return retval; - } - - switch (*mode) - { - case RIG_MODE_USB: - case RIG_MODE_LSB: - case RIG_MODE_AM: - case RIG_MODE_FM: - /* - * fetch data mode on/off - */ - retval = - icom_transaction(rig, C_CTL_MEM, dm_sub_cmd, 0, 0, databuf, - &data_len); - - if (retval != RIG_OK) - { - rig_debug(RIG_DEBUG_ERR, "%s: protocol error (%#.2x), len=%d\n", - __func__, databuf[0], data_len); - return -RIG_ERJCTED; - } - - /* - * databuf should contain Cn,Sc,D0[,D1] - */ - data_len -= 2; - - if (1 > data_len || data_len > 2) - { - /* manual says 1 byte answer - but at least IC756 ProIII - sends 2 - second byte - appears to be same as - second byte from 04 command - which is filter preset - number, whatever it is we - ignore it */ - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, - data_len); - return -RIG_ERJCTED; - } - - if (databuf[2]) /* 0x01/0x02/0x03 -> data mode, 0x00 -> not data mode */ - { - switch (*mode) - { - case RIG_MODE_USB: - *mode = RIG_MODE_PKTUSB; - break; - - case RIG_MODE_LSB: - *mode = RIG_MODE_PKTLSB; - break; - - case RIG_MODE_AM: - *mode = RIG_MODE_PKTAM; - break; - - case RIG_MODE_FM: - *mode = RIG_MODE_PKTFM; - break; - - default: - break; - } - } - - default: - break; - } - - return retval; -} - -/* - * icom_get_mode - * Assumes rig!=NULL, rig->state.priv!=NULL, mode!=NULL, width!=NULL - * - * TODO: some IC781's, when sending mode info, in wide filter mode, no - * width data is send along, making the frame 1 byte short. - * (Thank to Mel, VE2DC for this info) - */ -int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) -{ - unsigned char modebuf[MAXFRAMELEN]; - const struct icom_priv_caps *priv_caps; - int mode_len, retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - priv_caps = (const struct icom_priv_caps *) rig->caps->priv; - - retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0, modebuf, &mode_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * modebuf should contain Cn,Data area - */ - mode_len--; - - if (mode_len != 2 && mode_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", - __func__, mode_len); - return -RIG_ERJCTED; - } - - if (priv_caps->i2r_mode != NULL) /* call priv code if defined */ - { - priv_caps->i2r_mode(rig, modebuf[1], - mode_len == 2 ? modebuf[2] : -1, mode, width); - } - else /* else call default */ - { - icom2rig_mode(rig, modebuf[1], - mode_len == 2 ? modebuf[2] : -1, mode, width); - } - - /* IC910H has different meaning of command 1A, subcommand 03. So do - * not ask for DSP filter settings */ - /* Likewise, don't ask if we happen to be an Omni VI Plus */ - /* Likewise, don't ask if we happen to be an IC-R30 */ - if ((rig->caps->rig_model == RIG_MODEL_IC910) || - (rig->caps->rig_model == RIG_MODEL_OMNIVIP) || - (rig->caps->rig_model == RIG_MODEL_ICR30)) - { - return RIG_OK; - } - - /* Most rigs return 1-wide, 2-normal,3-narrow - * For DSP rigs these are presets, can be programmed for 30 - 41 bandwidths, depending on mode. - * Lets check for dsp filters - */ - - if ((retval = icom_get_dsp_flt(rig, *mode)) != 0) - { - *width = retval; - } - - return RIG_OK; -} - -#ifdef XXREMOVEDXX -// not implemented yet -/* - * icom_get_vfo - * The IC-9700 has introduced the ability to see MAIN/SUB selection - * Maybe we'll see this in future ICOMs or firmware upgrades - * Command 0x07 0XD2 -- but as of version 1.05 it doesn't work - * We will, by default, force Main=VFOA and Sub=VFOB, and may want - * an option to not force that behavior - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_get_vfo(RIG *rig, vfo_t *vfo) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - retval = icom_transaction(rig, C_SET_VFO, S_SUB_SEL, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 3) - { - rig_debug(RIG_DEBUG_ERR, "%s wrong frame len=%d\n", __func__, ack_len); - return -RIG_ERJCTED; - } - - *vfo = ackbuf[2] == 0 ? RIG_VFO_A : RIG_VFO_B; - return RIG_OK; -} -#endif - -/* - * icom_get_vfo - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_vfo(RIG *rig, vfo_t vfo) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), icvfo, retval; - struct rig_state *rs = &rig->state; - struct icom_priv_data *priv = (struct icom_priv_data *) rs->priv; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (vfo == RIG_VFO_CURR) - { - return RIG_OK; - } - - if ((vfo == RIG_VFO_A || vfo == RIG_VFO_B) && !VFO_HAS_A_B) - { - rig_debug(RIG_DEBUG_ERR, "%s: Rig does not have VFO A/B?\n", __func__); - return -RIG_EINVAL; - } - - if ((vfo == RIG_VFO_MAIN || vfo == RIG_VFO_SUB) && !VFO_HAS_MAIN_SUB) - { - rig_debug(RIG_DEBUG_ERR, "%s: Rig does not have VFO Main/Sub?\n", - __func__); - return -RIG_EINVAL; - } - - switch (vfo) - { - case RIG_VFO_A: - icvfo = S_VFOA; - break; - - case RIG_VFO_B: - icvfo = S_VFOB; - break; - - case RIG_VFO_MAIN: - icvfo = S_MAIN; - break; - - case RIG_VFO_SUB: - icvfo = S_SUB; - break; - - case RIG_VFO_TX: - icvfo = priv->split_on ? S_VFOB : S_VFOA; - break; - - case RIG_VFO_VFO: - retval = icom_transaction(rig, C_SET_VFO, -1, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; - - case RIG_VFO_MEM: - retval = icom_transaction(rig, C_SET_MEM, -1, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; - - case RIG_VFO_MAIN_A: // we need to select Main before setting VFO - case RIG_VFO_MAIN_B: - retval = icom_transaction(rig, C_SET_VFO, RIG_VFO_MAIN, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; - - break; - - case RIG_VFO_SUB_A: // we need to select Sub before setting VFO - case RIG_VFO_SUB_B: - retval = icom_transaction(rig, C_SET_VFO, RIG_VFO_SUB, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; - - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported VFO %s\n", __func__, - rig_strvfo(vfo)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, C_SET_VFO, icvfo, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - priv->curr_vfo = vfo; - return RIG_OK; -} - -/* - * icom_set_level - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - struct rig_state *rs; - unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), lvl_len; - int lvl_cn, lvl_sc; /* Command Number, Subcommand */ - int icom_val; - int i, retval; - const struct icom_priv_caps *priv_caps = - (const struct icom_priv_caps *) rig->caps->priv; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - - /* - * So far, levels of float type are in [0.0..1.0] range - */ - if (RIG_LEVEL_IS_FLOAT(level)) - { - icom_val = val.f * 255; - } - else - { - icom_val = val.i; - } - - /* convert values to 0 .. 255 range */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) - { - switch (level) - { - case RIG_LEVEL_NR: - icom_val = val.f * 240; - break; - - case RIG_LEVEL_PBT_IN: - case RIG_LEVEL_PBT_OUT: - icom_val = (val.f / 10.0) + 128; - - if (icom_val > 255) - { - icom_val = 255; - } - - break; - - default: - break; - } - } - - switch (level) - { - case RIG_LEVEL_KEYSPD: - if (val.i < 6) - { - icom_val = 6; - } - else if (val.i > 48) - { - icom_val = 48; - } - - icom_val = (int) lroundf(((float) icom_val - 6.0f) * (255.0f / 42.0f)); - break; - - case RIG_LEVEL_CWPITCH: - if (val.i < 300) - { - icom_val = 300; - } - else if (val.i >= 900) - { - icom_val = 900; - } - - icom_val = (int) lroundf(((float) icom_val - 300) * (255.0f / 600.0f)); - break; - - default: - break; - } - - /* - * Most of the time, the data field is a 3 digit BCD, - * but in *big endian* order: 0000..0255 - * (from_bcd is little endian) - */ - lvl_len = 2; - to_bcd_be(lvlbuf, (long long) icom_val, lvl_len * 2); - - switch (level) - { - case RIG_LEVEL_PREAMP: - lvl_cn = C_CTL_FUNC; - lvl_sc = S_FUNC_PAMP; - lvl_len = 1; - - if (val.i == 0) - { - lvlbuf[0] = 0; /* 0=OFF */ - break; - } - - for (i = 0; i < MAXDBLSTSIZ; i++) - { - if (rs->preamp[i] == val.i) - { - break; - } - } - - if (i == MAXDBLSTSIZ || rs->preamp[i] == 0) - { - rig_debug(RIG_DEBUG_ERR, "%s: unsupported preamp set_level %ddB", - __func__, val.i); - return -RIG_EINVAL; - } - - lvlbuf[0] = i + 1; /* 1=P.AMP1, 2=P.AMP2 */ - break; - - case RIG_LEVEL_ATT: - lvl_cn = C_CTL_ATT; - /* attenuator level is dB, in BCD mode */ - lvl_sc = (val.i / 10) << 4 | (val.i % 10); - lvl_len = 0; - break; - - case RIG_LEVEL_AF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_AF; - break; - - case RIG_LEVEL_RF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_RF; - break; - - case RIG_LEVEL_SQL: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_SQL; - break; - - case RIG_LEVEL_IF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_IF; - break; - - case RIG_LEVEL_APF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_APF; - break; - - case RIG_LEVEL_NR: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_NR; - break; - - case RIG_LEVEL_NB: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_NB; - break; - - case RIG_LEVEL_PBT_IN: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_PBTIN; - break; - - case RIG_LEVEL_PBT_OUT: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_PBTOUT; - break; - - case RIG_LEVEL_CWPITCH: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_CWPITCH; - - /* use 'set mode' call for CWPITCH on IC-R75 */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) - { - lvl_cn = C_CTL_MEM; - lvl_sc = S_MEM_MODE_SLCT; - lvl_len = 3; - lvlbuf[0] = S_PRM_CWPITCH; - to_bcd_be(lvlbuf + 1, (long long) icom_val, 4); - } - - break; - - case RIG_LEVEL_RFPOWER: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_RFPOWER; - break; - - case RIG_LEVEL_MICGAIN: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_MICGAIN; - break; - - case RIG_LEVEL_KEYSPD: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_KEYSPD; - break; - - case RIG_LEVEL_NOTCHF_RAW: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_NOTCHF; - break; - - case RIG_LEVEL_COMP: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_COMP; - break; - - case RIG_LEVEL_AGC: - lvl_cn = C_CTL_FUNC; - lvl_sc = S_FUNC_AGC; - lvl_len = 1; - - if (priv_caps->agc_levels_present) - { - int found = 0; - - for (i = 0; - i <= RIG_AGC_LAST && priv_caps->agc_levels[i].level >= 0; i++) - { - if (priv_caps->agc_levels[i].level == val.i) - { - lvlbuf[0] = priv_caps->agc_levels[i].icom_level; - found = 1; - break; - } - } - - if (!found) - { - return -RIG_EINVAL; - } - } - else - { - // Legacy mapping that does not apply to all rigs - switch (val.i) - { - case RIG_AGC_SLOW: - lvlbuf[0] = D_AGC_SLOW; - break; - - case RIG_AGC_MEDIUM: - lvlbuf[0] = D_AGC_MID; - break; - - case RIG_AGC_FAST: - lvlbuf[0] = D_AGC_FAST; - break; - - case RIG_AGC_SUPERFAST: - lvlbuf[0] = D_AGC_SUPERFAST; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported LEVEL_AGC %d", - __func__, val.i); - return -RIG_EINVAL; - } - } - - break; - - case RIG_LEVEL_BKINDL: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_BKINDL; - break; - - case RIG_LEVEL_BALANCE: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_BALANCE; - break; - - case RIG_LEVEL_VOXGAIN: - if (rig->caps->rig_model == RIG_MODEL_IC910) - { - /* IC-910H */ - lvl_cn = C_CTL_MEM; - lvl_sc = S_MEM_VOXGAIN; - } - else - { - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_VOXGAIN; - } - - break; - - case RIG_LEVEL_ANTIVOX: - if (rig->caps->rig_model == RIG_MODEL_IC910) - { - /* IC-910H */ - lvl_cn = C_CTL_MEM; - lvl_sc = S_MEM_ANTIVOX; - } - else - { - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_ANTIVOX; - } - - break; - - case RIG_LEVEL_MONITOR_GAIN: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_MON; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_level %s", __func__, - rig_strlevel(level)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, lvl_cn, lvl_sc, lvlbuf, lvl_len, ackbuf, - &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_level - * Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL - * - */ -int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - struct rig_state *rs; - unsigned char lvlbuf[MAXFRAMELEN], lvl2buf[MAXFRAMELEN]; - int lvl_len, lvl2_len; - int lvl_cn, lvl_sc; /* Command Number, Subcommand */ - int icom_val; - int cmdhead; - int retval; - const struct icom_priv_caps *priv_caps = - (const struct icom_priv_caps *) rig->caps->priv; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - - lvl2_len = 0; - - switch (level) - { - case RIG_LEVEL_STRENGTH: - case RIG_LEVEL_RAWSTR: - lvl_cn = C_RD_SQSM; - lvl_sc = S_SML; - break; - - case RIG_LEVEL_ALC: - lvl_cn = C_RD_SQSM; - lvl_sc = S_ALC; - break; - - case RIG_LEVEL_SWR: - lvl_cn = C_RD_SQSM; - lvl_sc = S_SWR; - break; - - case RIG_LEVEL_RFPOWER_METER: - lvl_cn = C_RD_SQSM; - lvl_sc = S_RFML; - break; - - case RIG_LEVEL_COMP_METER: - lvl_cn = C_RD_SQSM; - lvl_sc = S_CMP; - break; - - case RIG_LEVEL_VD_METER: - lvl_cn = C_RD_SQSM; - lvl_sc = S_VD; - break; - - case RIG_LEVEL_ID_METER: - lvl_cn = C_RD_SQSM; - lvl_sc = S_ID; - break; - - case RIG_LEVEL_PREAMP: - lvl_cn = C_CTL_FUNC; - lvl_sc = S_FUNC_PAMP; - break; - - case RIG_LEVEL_ATT: - lvl_cn = C_CTL_ATT; - lvl_sc = -1; - break; - - case RIG_LEVEL_AF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_AF; - break; - - case RIG_LEVEL_RF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_RF; - break; - - case RIG_LEVEL_SQL: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_SQL; - break; - - case RIG_LEVEL_IF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_IF; - break; - - case RIG_LEVEL_APF: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_APF; - break; - - case RIG_LEVEL_NR: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_NR; - break; - - case RIG_LEVEL_NB: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_NB; - break; - - case RIG_LEVEL_PBT_IN: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_PBTIN; - break; - - case RIG_LEVEL_PBT_OUT: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_PBTOUT; - break; - - case RIG_LEVEL_CWPITCH: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_CWPITCH; - - /* use 'set mode' call for CWPITCH on IC-R75 */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) - { - lvl_cn = C_CTL_MEM; - lvl_sc = S_MEM_MODE_SLCT; - lvl2_len = 1; - lvl2buf[0] = S_PRM_CWPITCH; - } - - break; - - case RIG_LEVEL_RFPOWER: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_RFPOWER; - break; - - case RIG_LEVEL_MICGAIN: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_MICGAIN; - break; - - case RIG_LEVEL_KEYSPD: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_KEYSPD; - break; - - case RIG_LEVEL_NOTCHF_RAW: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_NOTCHF; - break; - - case RIG_LEVEL_COMP: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_COMP; - break; - - case RIG_LEVEL_AGC: - lvl_cn = C_CTL_FUNC; - lvl_sc = S_FUNC_AGC; - break; - - case RIG_LEVEL_BKINDL: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_BKINDL; - break; - - case RIG_LEVEL_BALANCE: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_BALANCE; - break; - - case RIG_LEVEL_VOXGAIN: /* IC-910H */ - if (rig->caps->rig_model == RIG_MODEL_IC910) - { - /* IC-910H */ - lvl_cn = C_CTL_MEM; - lvl_sc = S_MEM_VOXGAIN; - } - else - { - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_VOXGAIN; - } - - break; - - case RIG_LEVEL_ANTIVOX: - if (rig->caps->rig_model == RIG_MODEL_IC910) - { - /* IC-910H */ - lvl_cn = C_CTL_MEM; - lvl_sc = S_MEM_ANTIVOX; - } - else - { - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_ANTIVOX; - } - - break; - - case RIG_LEVEL_MONITOR_GAIN: - lvl_cn = C_CTL_LVL; - lvl_sc = S_LVL_MON; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_level %s", __func__, - rig_strlevel(level)); - return -RIG_EINVAL; - } - - /* use lvl2buf and lvl2_len for 'set mode' subcommand */ - retval = icom_transaction(rig, lvl_cn, lvl_sc, lvl2buf, lvl2_len, lvlbuf, - &lvl_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * strbuf should contain Cn,Sc,Data area - */ - cmdhead = (lvl_sc == -1) ? 1 : 2; - lvl_len -= cmdhead; - - /* back off one char since first char in buffer is now 'set mode' subcommand */ - if ((rig->caps->rig_model == RIG_MODEL_ICR75) - && (level == RIG_LEVEL_CWPITCH)) - { - cmdhead = 3; - lvl_len--; - } - - if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - lvlbuf[0], lvl_len); - return -RIG_ERJCTED; - } - - /* - * The result is a 3 digit BCD, but in *big endian* order: 0000..0255 - * (from_bcd is little endian) - */ - icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2); - - switch (level) - { - case RIG_LEVEL_STRENGTH: - val->i = round(rig_raw2val(icom_val, &rig->caps->str_cal)); - break; - - case RIG_LEVEL_RAWSTR: - /* raw value */ - val->i = icom_val; - break; - - case RIG_LEVEL_AGC: - if (priv_caps->agc_levels_present) - { - int found = 0; - int i; - - for (i = 0; - i <= RIG_AGC_LAST && priv_caps->agc_levels[i].level >= 0; i++) - { - if (priv_caps->agc_levels[i].icom_level == icom_val) - { - val->i = priv_caps->agc_levels[i].level; - found = 1; - break; - } - } - - if (!found) - { - rig_debug(RIG_DEBUG_ERR, "%s: unexpected AGC 0x%02x", __func__, - icom_val); - return -RIG_EPROTO; - } - } - else - { - switch (icom_val) - { - case D_AGC_SLOW: - val->i = RIG_AGC_SLOW; - break; - - case D_AGC_MID: - val->i = RIG_AGC_MEDIUM; - break; - - case D_AGC_FAST: - val->i = RIG_AGC_FAST; - break; - - case D_AGC_SUPERFAST: - val->i = RIG_AGC_SUPERFAST; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unexpected AGC 0x%02x", __func__, - icom_val); - return -RIG_EPROTO; - } - } - - break; - - case RIG_LEVEL_ALC: - if (rig->caps->alc_cal.size == 0) - { - val->f = rig_raw2val_float(icom_val, &icom_default_alc_cal); - } - else - { - val->f = rig_raw2val_float(icom_val, &rig->caps->alc_cal); - } - - break; - - case RIG_LEVEL_SWR: - if (rig->caps->swr_cal.size == 0) - { - val->f = rig_raw2val_float(icom_val, &icom_default_swr_cal); - } - else - { - val->f = rig_raw2val_float(icom_val, &rig->caps->swr_cal); - } - - break; - - case RIG_LEVEL_RFPOWER_METER: - if (rig->caps->rfpower_meter_cal.size == 0) - { - val->f = - rig_raw2val_float(icom_val, &icom_default_rfpower_meter_cal); - } - else - { - val->f = - rig_raw2val_float(icom_val, &rig->caps->rfpower_meter_cal); - } - - break; - - case RIG_LEVEL_COMP_METER: - if (rig->caps->comp_meter_cal.size == 0) - { - val->f = rig_raw2val_float(icom_val, &icom_default_comp_meter_cal); - } - else - { - val->f = rig_raw2val_float(icom_val, &rig->caps->comp_meter_cal); - } - - break; - - case RIG_LEVEL_VD_METER: - if (rig->caps->vd_meter_cal.size == 0) - { - val->f = rig_raw2val_float(icom_val, &icom_default_vd_meter_cal); - } - else - { - val->f = rig_raw2val_float(icom_val, &rig->caps->vd_meter_cal); - } - - break; - - case RIG_LEVEL_ID_METER: - if (rig->caps->id_meter_cal.size == 0) - { - val->f = rig_raw2val_float(icom_val, &icom_default_id_meter_cal); - } - else - { - val->f = rig_raw2val_float(icom_val, &rig->caps->id_meter_cal); - } - - break; - - case RIG_LEVEL_CWPITCH: - val->i = (int) lroundf(300.0f + ((float) icom_val * 600.0f / 255.0f)); - break; - - case RIG_LEVEL_KEYSPD: - val->i = (int) lroundf((float) icom_val * (42.0f / 255.0f) + 6.0f); - break; - - case RIG_LEVEL_PREAMP: - if (icom_val == 0) - { - val->i = 0; - break; - } - - if (icom_val > MAXDBLSTSIZ || rs->preamp[icom_val - 1] == 0) - { - rig_debug(RIG_DEBUG_ERR, "%s: unsupported preamp get_level %ddB", - __func__, icom_val); - return -RIG_EPROTO; - } - - val->i = rs->preamp[icom_val - 1]; - break; - - /* RIG_LEVEL_ATT: returned value is already an integer in dB (coded in BCD) */ - default: - if (RIG_LEVEL_IS_FLOAT(level)) - { - val->f = (float) icom_val / 255; - } - else - { - val->i = icom_val; - } - } - - /* convert values from 0 .. 255 range */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) - { - switch (level) - { - case RIG_LEVEL_NR: - val->f = (float) icom_val / 240; - break; - - case RIG_LEVEL_PBT_IN: - case RIG_LEVEL_PBT_OUT: - if (icom_val == 255) - { - val->f = 1280.0; - } - else - { - val->f = (float)(icom_val - 128) * 10.0; - } - - break; - - default: - break; - } - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %d %d %d %f\n", __func__, lvl_len, - icom_val, val->i, val->f); - - return RIG_OK; -} - -/* - * icom_set_ext_level - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (token) - { - case TOK_DRIVE_GAIN: - return icom_set_raw(rig, C_CTL_LVL, S_LVL_DRIVE, 0, NULL, 2, - (int) val.f); - - case TOK_DIGI_SEL_FUNC: - return icom_set_raw(rig, C_CTL_FUNC, S_FUNC_DIGISEL, 0, NULL, 1, - val.i ? 1 : 0); - - case TOK_DIGI_SEL_LEVEL: - return icom_set_raw(rig, C_CTL_LVL, S_LVL_DIGI, 0, NULL, 2, - (int) val.f); - - default: - return -RIG_EINVAL; - } -} - -/* - * icom_get_ext_level - * Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL - */ -int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val) -{ - int icom_val; - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (token) - { - case TOK_DRIVE_GAIN: - retval = icom_get_raw(rig, C_CTL_LVL, S_LVL_DRIVE, 0, NULL, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val; - break; - - case TOK_DIGI_SEL_FUNC: - retval = - icom_get_raw(rig, C_CTL_FUNC, S_FUNC_DIGISEL, 0, NULL, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->i = icom_val ? 1 : 0; - break; - - case TOK_DIGI_SEL_LEVEL: - retval = icom_get_raw(rig, C_CTL_LVL, S_LVL_DIGI, 0, NULL, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val; - break; - - default: - return -RIG_EINVAL; - } - - return RIG_OK; -} - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_conf(RIG *rig, token_t token, const char *val) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - switch (token) - { - case TOK_CIVADDR: - if (val[0] == '0' && val[1] == 'x') - { - priv->re_civ_addr = strtol(val, (char **) NULL, 16); - } - else - { - priv->re_civ_addr = atoi(val); - } - - break; - - case TOK_MODE731: - priv->civ_731_mode = atoi(val) ? 1 : 0; - break; - - case TOK_NOXCHG: - priv->no_xchg = atoi(val) ? 1 : 0; - break; - - default: - return -RIG_EINVAL; - } - - return RIG_OK; -} - -/* - * assumes rig!=NULL, - * Assumes rig!=NULL, rig->state.priv!=NULL - * and val points to a buffer big enough to hold the conf value. - */ -int icom_get_conf(RIG *rig, token_t token, char *val) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - switch (token) - { - case TOK_CIVADDR: - sprintf(val, "%d", priv->re_civ_addr); - break; - - case TOK_MODE731: sprintf(val, "%d", priv->civ_731_mode); - break; - - case TOK_NOXCHG: sprintf(val, "%d", priv->no_xchg); - break; - - default: return -RIG_EINVAL; - } - - return RIG_OK; -} - - -/* - * icom_set_ptt - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) -{ - unsigned char ackbuf[MAXFRAMELEN], pttbuf[1]; - int ack_len = sizeof(ackbuf), retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - pttbuf[0] = ptt == RIG_PTT_ON ? 1 : 0; - - retval = icom_transaction(rig, C_CTL_PTT, S_PTT, pttbuf, 1, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_ptt - * Assumes rig!=NULL, rig->state.priv!=NULL, ptt!=NULL - */ -int icom_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt) -{ - unsigned char pttbuf[MAXFRAMELEN]; - int ptt_len, retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_transaction(rig, C_CTL_PTT, S_PTT, NULL, 0, - pttbuf, &ptt_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * pttbuf should contain Cn,Sc,Data area - */ - ptt_len -= 2; - - if (ptt_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", - __func__, ptt_len); - return -RIG_ERJCTED; - } - - *ptt = pttbuf[2] == 1 ? RIG_PTT_ON : RIG_PTT_OFF; - - return RIG_OK; -} - -/* - * icom_get_dcd - * Assumes rig!=NULL, rig->state.priv!=NULL, ptt!=NULL - */ -int icom_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd) -{ - unsigned char dcdbuf[MAXFRAMELEN]; - int dcd_len, retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_transaction(rig, C_RD_SQSM, S_SQL, NULL, 0, - dcdbuf, &dcd_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * dcdbuf should contain Cn,Data area - */ - dcd_len -= 2; - - if (dcd_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", - __func__, dcd_len); - return -RIG_ERJCTED; - } - - /* - * 0x00=sql closed, 0x01=sql open - */ - - *dcd = dcdbuf[2] == 1 ? RIG_DCD_ON : RIG_DCD_OFF; - - return RIG_OK; -} - -/* - * icom_set_rptr_shift - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - int rptr_sc; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (rptr_shift) - { - case RIG_RPT_SHIFT_NONE: - rptr_sc = S_DUP_OFF; /* Simplex mode */ - break; - - case RIG_RPT_SHIFT_MINUS: - rptr_sc = S_DUP_M; /* Duplex - mode */ - break; - - case RIG_RPT_SHIFT_PLUS: - rptr_sc = S_DUP_P; /* Duplex + mode */ - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported shift %d", __func__, - rptr_shift); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, C_CTL_SPLT, rptr_sc, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - - -/* - * icom_get_rptr_shift - * Assumes rig!=NULL, rig->state.priv!=NULL, rptr_shift!=NULL - * will not work for IC-746 Pro - * NOTE: seems not to work (tested on IC-706MkIIG), please report --SF - */ -int icom_get_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift) -{ - unsigned char rptrbuf[MAXFRAMELEN]; - int rptr_len, retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_transaction(rig, C_CTL_SPLT, -1, NULL, 0, - rptrbuf, &rptr_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * rptrbuf should contain Cn,Sc - */ - rptr_len--; - - if (rptr_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", - __func__, rptr_len); - return -RIG_ERJCTED; - } - - switch (rptrbuf[1]) - { - case S_DUP_OFF: - *rptr_shift = RIG_RPT_SHIFT_NONE; /* Simplex mode */ - break; - - case S_DUP_M: - *rptr_shift = RIG_RPT_SHIFT_MINUS; /* Duplex - mode */ - break; - - case S_DUP_P: - *rptr_shift = RIG_RPT_SHIFT_PLUS; /* Duplex + mode */ - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported shift %d", __func__, - rptrbuf[1]); - return -RIG_EPROTO; - } - - return RIG_OK; -} - -/* - * icom_set_rptr_offs - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t rptr_offs) -{ - int offs_len; - unsigned char offsbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - const struct icom_priv_caps *priv_caps; - - priv_caps = (const struct icom_priv_caps *) rig->caps->priv; - offs_len = (priv_caps->offs_len) ? priv_caps->offs_len : OFFS_LEN; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - /* - * Icoms are using a 100Hz unit (at least on 706MKIIg) -- SF - */ - to_bcd(offsbuf, rptr_offs / 100, offs_len * 2); - - retval = icom_transaction(rig, C_SET_OFFS, -1, offsbuf, offs_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - - -/* - * icom_get_rptr_offs - * Assumes rig!=NULL, rig->state.priv!=NULL, rptr_offs!=NULL - */ -int icom_get_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t *rptr_offs) -{ - int offs_len; - unsigned char offsbuf[MAXFRAMELEN]; - int buf_len, retval; - const struct icom_priv_caps *priv_caps; - - priv_caps = (const struct icom_priv_caps *) rig->caps->priv; - offs_len = (priv_caps->offs_len) ? priv_caps->offs_len : OFFS_LEN; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_transaction(rig, C_RD_OFFS, -1, NULL, 0, offsbuf, &buf_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * offsbuf should contain Cn - */ - buf_len--; - - if (buf_len != offs_len) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, - buf_len); - return -RIG_ERJCTED; - } - - /* - * Icoms are using a 100Hz unit (at least on 706MKIIg) -- SF - */ - *rptr_offs = from_bcd(offsbuf + 1, buf_len * 2) * 100; - - return RIG_OK; -} - -/* - * Helper function to go back and forth split VFO - */ -int icom_get_split_vfos(const RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - rs = (struct rig_state *) &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - - if (VFO_HAS_A_B_ONLY) - { - *rx_vfo = RIG_VFO_A; - *tx_vfo = RIG_VFO_B; /* rig doesn't enforce this but - convention is needed here */ - } - else if (VFO_HAS_MAIN_SUB_ONLY) - { - *rx_vfo = RIG_VFO_MAIN; - *tx_vfo = RIG_VFO_SUB; - } - else if (VFO_HAS_MAIN_SUB_A_B_ONLY) - { - // TBD -- newer rigs we need to find active VFO - // priv->curvfo if VFOA then A/B response else priv->curvfo=Main Main/Sub response - // For now we return Main/Sub - *rx_vfo = priv->rx_vfo; - *tx_vfo = priv->tx_vfo; - } - else - { - rig_debug(RIG_DEBUG_ERR, "%s invalid vfo setup?\n", __func__); - return -RIG_ENAVAIL; - } - - return RIG_OK; -} - -/* - * icom_set_split_freq - * Assumes rig!=NULL, rig->state.priv!=NULL, - * icom_set_vfo,icom_set_freq works for this rig - * - * Assumes also that the current VFO is the rx VFO. - */ -int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if (VFO_HAS_A_B_ONLY - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = rig_set_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) - { - return rc; - } - - if (VFO_HAS_A_B_ONLY && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - } - - return rc; -} - -/* - * icom_get_split_freq - * Assumes rig!=NULL, rig->state.priv!=NULL, rx_freq!=NULL, tx_freq!=NULL - * icom_set_vfo,icom_get_freq works for this rig - */ -int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - if (RIG_OK != (rc = icom_get_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if (VFO_HAS_A_B_ONLY - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_get_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) - { - return rc; - } - - if (VFO_HAS_A_B_ONLY && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - } - - return rc; -} - -/* - * icom_set_split_mode - * Assumes rig!=NULL, rig->state.priv!=NULL, - * icom_set_vfo,icom_set_mode works for this rig - */ -int icom_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, - pbwidth_t tx_width) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->set_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if (VFO_HAS_A_B_ONLY - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->set_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) - { - return rc; - } - - if (VFO_HAS_A_B_ONLY && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - } - - return rc; -} - -/* - * icom_get_split_mode - * Assumes rig!=NULL, rig->state.priv!=NULL, - * rx_mode!=NULL, rx_width!=NULL, tx_mode!=NULL, tx_width!=NULL - * icom_set_vfo,icom_get_mode works for this rig - */ -int icom_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, - pbwidth_t *tx_width) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->get_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if (VFO_HAS_A_B_ONLY - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->get_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) - { - return rc; - } - - if (VFO_HAS_A_B_ONLY && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - } - - return rc; -} - -/* - * icom_set_split_freq_mode - * Assumes rig!=NULL, rig->state.priv!=NULL, - * icom_set_vfo,icom_set_mode works for this rig - */ -int icom_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t tx_freq, - rmode_t tx_mode, pbwidth_t tx_width) -{ - int rc; - struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - vfo_t rx_vfo, tx_vfo; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s\n", __func__, - rig_strvfo(vfo)); - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - if (RIG_OK != (rc = rig_set_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->set_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if (VFO_HAS_A_B - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - rig_debug(RIG_DEBUG_VERBOSE, - "%s: before get_split_vfos rx_vfo=%s tx_vfo=%s\n", __func__, - rig_strvfo(priv->rx_vfo), rig_strvfo(priv->tx_vfo)); - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) - { - return rc; - } - - rig_debug(RIG_DEBUG_VERBOSE, - "%s: after get_split_vfos rx_vfo=%s tx_vfo=%s\n", __func__, - rig_strvfo(priv->rx_vfo), rig_strvfo(priv->tx_vfo)); - - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = rig_set_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->set_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) - { - return rc; - } - - if (VFO_HAS_A_B && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - } - - return rc; -} - -/* - * icom_get_split_freq_mode - * Assumes rig!=NULL, rig->state.priv!=NULL, - * rx_mode!=NULL, rx_width!=NULL, tx_mode!=NULL, tx_width!=NULL - * icom_set_vfo,icom_get_mode works for this rig - */ -int icom_get_split_freq_mode(RIG *rig, vfo_t vfo, freq_t *tx_freq, - rmode_t *tx_mode, pbwidth_t *tx_width) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - if (RIG_OK != (rc = rig_get_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->get_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) - { - return rc; - } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if (VFO_HAS_A_B_ONLY - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) - { - return rc; - } - - if (RIG_OK != (rc = icom_get_freq(rig, RIG_VFO_CURR, tx_freq))) - { - return rc; - } - - if (RIG_OK != (rc = rig->caps->get_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) - { - return rc; - } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) - { - return rc; - } - - if (VFO_HAS_A_B_ONLY && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != - (rc = - icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, ackbuf, - &ack_len))) - { - return rc; - } - } - - return rc; -} - - -/* - * icom_set_split - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) -{ - struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), rc; - int split_sc; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (split) - { - case RIG_SPLIT_OFF: - - // if either VFOA or B is the vfo we set to VFOA when split is turned off - if (vfo == RIG_VFO_A || vfo == RIG_VFO_B) - { - rig_set_vfo(rig, RIG_VFO_A); - } - // otherwise if Main or Sub we set Main as the current vfo - else if (vfo == RIG_VFO_MAIN || vfo == RIG_VFO_SUB) - { - rig_set_vfo(rig, RIG_VFO_MAIN); - } - - split_sc = S_SPLT_OFF; - break; - - case RIG_SPLIT_ON: - split_sc = S_SPLT_ON; - - // Need to allow for SATMODE split in here - /* ensure VFO A is Rx and VFO B is Tx as we assume that elsewhere */ - if (VFO_HAS_A_B) - { - if (RIG_OK != (rc = icom_set_vfo(rig, RIG_VFO_A))) - { - return rc; - } - } - - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported split %d", __func__, split); - return -RIG_EINVAL; - } - - if (RIG_OK != (rc = icom_transaction(rig, C_CTL_SPLT, split_sc, NULL, 0, - ackbuf, &ack_len))) - { - return rc; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - priv->rx_vfo = vfo; - priv->tx_vfo = tx_vfo; - priv->split_on = RIG_SPLIT_ON == split; - rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s rx_vfo=%s tx_vfo=%s split=%d\n", - __func__, rig_strvfo(vfo), rig_strvfo(priv->rx_vfo), - rig_strvfo(priv->tx_vfo), split); - return RIG_OK; -} - -/* - * icom_get_split_vfo - * Assumes rig!=NULL, rig->state.priv!=NULL, split!=NULL - * - * Does not appear to be supported by any mode? - * \sa icom_mem_get_split_vfo() - */ -int icom_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo) -{ - unsigned char splitbuf[MAXFRAMELEN]; - int split_len, retval; - struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_transaction(rig, C_CTL_SPLT, -1, NULL, 0, - splitbuf, &split_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * splitbuf should contain Cn,Sc - */ - split_len--; - - if (split_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", - __func__, split_len); - return -RIG_ERJCTED; - } - - switch (splitbuf[1]) - { - case S_SPLT_OFF: - *split = RIG_SPLIT_OFF; - break; - - case S_SPLT_ON: - *split = RIG_SPLIT_ON; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported split %d", __func__, - splitbuf[1]); - return -RIG_EPROTO; - } - - *tx_vfo = priv->tx_vfo; - priv->split_on = RIG_SPLIT_ON == *split; - rig_debug(RIG_DEBUG_VERBOSE, "%s: vfo=%s rx_vfo=%s tx_vfo=%s split=%d\n", - __func__, rig_strvfo(vfo), rig_strvfo(priv->rx_vfo), - rig_strvfo(priv->tx_vfo), *split); - return RIG_OK; -} - - -/* - * icom_mem_get_split_vfo - * Assumes rig!=NULL, rig->state.priv!=NULL, split!=NULL - */ -int icom_mem_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, - vfo_t *tx_vfo) -{ - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - /* this hacks works only when in memory mode - * I have no clue how to detect split in regular VFO mode - */ - if (rig->state.current_vfo != RIG_VFO_MEM || - !rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - return -RIG_ENAVAIL; - } - - retval = icom_vfo_op(rig, vfo, RIG_OP_XCHG); - - if (retval == RIG_OK) - { - *split = RIG_SPLIT_ON; - /* get it back to normal */ - retval = icom_vfo_op(rig, vfo, RIG_OP_XCHG); - if (retval != RIG_OK) return retval; - } - else if (retval == -RIG_ERJCTED) - { - *split = RIG_SPLIT_OFF; - } - else - { - /* this is really an error! */ - return retval; - } - - return RIG_OK; -} - -/* - * icom_set_ts - * Assumes rig!=NULL, rig->caps->priv!=NULL - */ -int icom_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts) -{ - const struct icom_priv_caps *priv_caps; - unsigned char ackbuf[MAXFRAMELEN]; - int i, ack_len = sizeof(ackbuf), retval; - int ts_sc = 0; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - priv_caps = (const struct icom_priv_caps *) rig->caps->priv; - - for (i = 0; i < TSLSTSIZ; i++) - { - if (priv_caps->ts_sc_list[i].ts == ts) - { - ts_sc = priv_caps->ts_sc_list[i].sc; - break; - } - } - - if (i >= TSLSTSIZ) - { - return -RIG_EINVAL; /* not found, unsupported */ - } - - retval = icom_transaction(rig, C_SET_TS, ts_sc, NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_ts - * Assumes rig!=NULL, rig->caps->priv!=NULL, ts!=NULL - * NOTE: seems not to work (tested on IC-706MkIIG), please report --SF Not available on 746pro - */ -int icom_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts) -{ - const struct icom_priv_caps *priv_caps; - unsigned char tsbuf[MAXFRAMELEN]; - int ts_len, i, retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - priv_caps = (const struct icom_priv_caps *) rig->caps->priv; - - retval = icom_transaction(rig, C_SET_TS, -1, NULL, 0, tsbuf, &ts_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * tsbuf should contain Cn,Sc - */ - ts_len--; - - if (ts_len != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, ts_len); - return -RIG_ERJCTED; - } - - for (i = 0; i < TSLSTSIZ; i++) - { - if (priv_caps->ts_sc_list[i].sc == tsbuf[1]) - { - *ts = priv_caps->ts_sc_list[i].ts; - break; - } - } - - if (i >= TSLSTSIZ) - { - return -RIG_EPROTO; /* not found, unsupported */ - } - - return RIG_OK; -} - - -/* - * icom_set_func - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) -{ - unsigned char fctbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int fct_len, acklen, retval; - int fct_cn, fct_sc; /* Command Number, Subcommand */ - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - fctbuf[0] = status ? 0x01 : 0x00; - fct_len = 1; - - switch (func) - { - case RIG_FUNC_NB: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_NB; - break; - - case RIG_FUNC_COMP: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_COMP; - break; - - case RIG_FUNC_VOX: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_VOX; - break; - - case RIG_FUNC_TONE: /* repeater tone */ - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_TONE; - break; - - case RIG_FUNC_TSQL: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_TSQL; - break; - - case RIG_FUNC_SBKIN: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_BKIN; - - if (status != 0) - { - fctbuf[0] = 0x01; - } - else - { - fctbuf[0] = 0x00; - } - - break; - - case RIG_FUNC_FBKIN: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_BKIN; - - if (status != 0) - { - fctbuf[0] = 0x02; - } - else - { - fctbuf[0] = 0x00; - } - - break; - - case RIG_FUNC_ANF: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_ANF; - break; - - case RIG_FUNC_NR: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_NR; - break; - - case RIG_FUNC_APF: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_APF; - break; - - case RIG_FUNC_MON: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_MON; - break; - - case RIG_FUNC_MN: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_MN; - break; - - case RIG_FUNC_RF: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_RF; - break; - - case RIG_FUNC_VSC: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_VSC; - break; - - case RIG_FUNC_LOCK: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_DIAL_LK; - break; - - case RIG_FUNC_AFC: /* IC-910H */ - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_AFC; - break; - - case RIG_FUNC_SCOPE: - // The command 0x27 0x10 is supported by many newer Icom rigs - fct_cn = 0x27; - fct_sc = 0x10; - fctbuf[0] = status; - fct_len = 1; - break; - - case RIG_FUNC_RESUME: /* IC-910H & IC-746-Pro */ - fct_cn = C_CTL_SCAN; - fct_sc = status ? S_SCAN_RSMON : S_SCAN_RSMOFF; - fct_len = 0; - break; - - case RIG_FUNC_CSQL: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_CSQL; - break; - - case RIG_FUNC_DSQL: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_DSSQL; - - if (status <= 2) - { - fctbuf[0] = status; - } - else - { - fctbuf[0] = 0; - } - - break; - - case RIG_FUNC_AFLT: - fct_cn = C_CTL_MEM; - fct_sc = S_MEM_AFLT; - break; - - case RIG_FUNC_ANL: - fct_cn = C_CTL_MEM; - fct_sc = S_MEM_ANL; - break; - - case RIG_FUNC_AIP: /* IC-R8600 IP+ function, misusing AIP since RIG_FUNC_ word is full (32 bit) */ - fct_cn = C_CTL_MEM; - fct_sc = S_FUNC_IPPLUS; - break; - - case RIG_FUNC_RIT: - fct_cn = C_CTL_RIT; - fct_sc = S_RIT; - break; - - case RIG_FUNC_XIT: - fct_cn = C_CTL_RIT; - fct_sc = S_XIT; - break; - - case RIG_FUNC_TUNER: - fct_cn = C_CTL_PTT; - fct_sc = S_ANT_TUN; - break; - - case RIG_FUNC_DUAL_WATCH: - fct_cn = C_SET_VFO; - fct_sc = S_DUAL; - break; - - case RIG_FUNC_SATMODE: - if (rig->caps->rig_model == RIG_MODEL_IC910) - { - // Is the 910 the only one that uses this command? - fct_cn = C_CTL_MEM; - fct_sc = S_MEM_SATMODE910; - } - else - { - fct_cn = C_CTL_FUNC; - fct_sc = S_MEM_SATMODE; - } - - break; - - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_func %s", __func__, - rig_strfunc(func)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, fct_cn, fct_sc, fctbuf, fct_len, ackbuf, - &acklen); - - if (retval != RIG_OK) - { - return retval; - } - - if (acklen != 1) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, acklen); - return -RIG_EPROTO; - } - - return RIG_OK; -} - -/* - * icom_get_func - * Assumes rig!=NULL, rig->state.priv!=NULL - * FIXME: IC8500 and no-sc, any support? - */ -int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - int fct_cn, fct_sc; /* Command Number, Subcommand */ - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (func) - { - case RIG_FUNC_NB: - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_NB; - break; - - case RIG_FUNC_COMP: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_COMP; - break; - - case RIG_FUNC_VOX: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_VOX; - break; - - case RIG_FUNC_TONE: /* repeater tone */ - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_TONE; - break; - - case RIG_FUNC_TSQL: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_TSQL; - break; - - case RIG_FUNC_SBKIN: /* returns 1 for semi and 2 for full adjusted below */ - case RIG_FUNC_FBKIN: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_BKIN; - break; - - case RIG_FUNC_ANF: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_ANF; - break; - - case RIG_FUNC_NR: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_NR; - break; - - case RIG_FUNC_APF: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_APF; - break; - - case RIG_FUNC_MON: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_MON; - break; - - case RIG_FUNC_MN: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_MN; - break; - - case RIG_FUNC_RF: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_RF; - break; - - case RIG_FUNC_VSC: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_VSC; - break; - - case RIG_FUNC_LOCK: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_DIAL_LK; - break; - - case RIG_FUNC_AFC: /* IC-910H */ - fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_AFC; - break; - - case RIG_FUNC_SCOPE: - // The command 0x27 0x10 is supported by many newer Icom rigs - fct_cn = 0x27; - fct_sc = 0x10; - break; - - case RIG_FUNC_AIP: /* IC-R8600 IP+ function, misusing AIP since RIG_FUNC_ word is full (32 bit) */ - fct_cn = C_CTL_MEM; /* 1a */ - fct_sc = S_FUNC_IPPLUS; - break; - - case RIG_FUNC_CSQL: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_CSQL; - break; - - case RIG_FUNC_DSQL: fct_cn = C_CTL_FUNC; - fct_sc = S_FUNC_DSSQL; - break; - - case RIG_FUNC_AFLT: fct_cn = C_CTL_MEM; - fct_sc = S_MEM_AFLT; - break; - - case RIG_FUNC_ANL: fct_cn = C_CTL_MEM; - fct_sc = S_MEM_ANL; - break; - - case RIG_FUNC_RIT: fct_cn = C_CTL_RIT; - fct_sc = S_RIT; - break; - - case RIG_FUNC_XIT: fct_cn = C_CTL_RIT; - fct_sc = S_XIT; - break; - - case RIG_FUNC_TUNER: fct_cn = C_CTL_PTT; - fct_sc = S_ANT_TUN; - break; - - case RIG_FUNC_DUAL_WATCH: fct_cn = C_SET_VFO; - fct_sc = S_DUAL; - break; - - case RIG_FUNC_SATMODE: if (rig->caps->rig_model == RIG_MODEL_IC910) - { - // Is the 910 the only one that uses this command? - fct_cn = C_CTL_MEM; - fct_sc = S_MEM_SATMODE910; - } - else - { - fct_cn = C_CTL_FUNC; - fct_sc = S_MEM_SATMODE; - } - - break; - - - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_func %s\n", __func__, - rig_strfunc(func)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, fct_cn, fct_sc, NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 3) - { - rig_debug(RIG_DEBUG_ERR, "%s: wrong frame len=%d\n", __func__, - ack_len); - return -RIG_EPROTO; - } - - if (func != RIG_FUNC_FBKIN) - { - *status = ackbuf[2]; - } - else - { - *status = ackbuf[2] == 2 ? 1 : 0; - } - - return RIG_OK; -} - -/* - * icom_set_parm - * Assumes rig!=NULL - * - * NOTE: Most of the parm commands are rig-specific. - * - * See the IC-7300 backend how to implement them for newer rigs that have 0x1A 0x05-based commands where - * icom_set_custom_parm()/icom_get_custom_parm() can be used. - * - * For older rigs, see the IC-R75 backend where icom_set_raw()/icom_get_raw() are used. - */ -int icom_set_parm(RIG *rig, setting_t parm, value_t val) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_ANN: - { - int ann_mode; - - switch (val.i) - { - case RIG_ANN_OFF: - ann_mode = S_ANN_ALL; - break; - - case RIG_ANN_FREQ: - ann_mode = S_ANN_FREQ; - break; - - case RIG_ANN_RXMODE: - ann_mode = S_ANN_MODE; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported RIG_PARM_ANN %d\n", - __func__, val.i); - return -RIG_EINVAL; - } - - return icom_set_raw(rig, C_CTL_ANN, ann_mode, 0, NULL, 0, 0); - } - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported set_parm %s\n", __func__, - rig_strparm(parm)); - return -RIG_EINVAL; - } -} - -/* - * icom_get_parm - * Assumes rig!=NULL - * - * NOTE: Most of the parm commands are rig-specific. - * - * See the IC-7300 backend how to implement them for newer rigs that have 0x1A 0x05-based commands where - * icom_set_custom_parm()/icom_get_custom_parm() can be used. - * - * For older rigs, see the IC-R75 backend where icom_set_raw()/icom_get_raw() are used. - */ -int icom_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported get_parm %s", __func__, - rig_strparm(parm)); - return -RIG_EINVAL; - } - - return RIG_OK; -} - -/* - * icom_set_ctcss_tone - * Assumes rig!=NULL, rig->state.priv!=NULL - * - * Works for 746 pro and should work for 756 xx and 7800 - */ -int icom_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone) -{ - const struct rig_caps *caps; - unsigned char tonebuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int tone_len, ack_len = sizeof(ackbuf), retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - if (caps->ctcss_list) - { - int i; - - for (i = 0; caps->ctcss_list[i] != 0; i++) - { - if (caps->ctcss_list[i] == tone) - { - break; - } - } - - if (caps->ctcss_list[i] != tone) - { - return -RIG_EINVAL; - } - } - - /* Sent as frequency in tenth of Hz */ - - tone_len = 3; - to_bcd_be(tonebuf, tone, tone_len * 2); - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_RPTR, - tonebuf, tone_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_ctcss_tone - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone) -{ - const struct rig_caps *caps; - unsigned char tonebuf[MAXFRAMELEN]; - int tone_len, retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_RPTR, NULL, 0, - tonebuf, &tone_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* cn,sc,data*3 */ - if (tone_len != 5) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - tonebuf[0], tone_len); - return -RIG_ERJCTED; - } - - tone_len -= 2; - *tone = from_bcd_be(tonebuf + 2, tone_len * 2); - - if (!caps->ctcss_list) - { - return RIG_OK; - } - - /* check this tone exists. That's better than nothing. */ - for (i = 0; caps->ctcss_list[i] != 0; i++) - { - if (caps->ctcss_list[i] == *tone) - { - return RIG_OK; - } - } - - rig_debug(RIG_DEBUG_ERR, "%s: CTCSS NG (%#.2x)\n", __func__, tonebuf[2]); - return -RIG_EPROTO; -} - -/* - * icom_set_ctcss_sql - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_ctcss_sql(RIG *rig, vfo_t vfo, tone_t tone) -{ - const struct rig_caps *caps; - unsigned char tonebuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int tone_len, ack_len = sizeof(ackbuf), retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - for (i = 0; caps->ctcss_list[i] != 0; i++) - { - if (caps->ctcss_list[i] == tone) - { - break; - } - } - - if (caps->ctcss_list[i] != tone) - { - return -RIG_EINVAL; - } - - /* Sent as frequency in tenth of Hz */ - - tone_len = 3; - to_bcd_be(tonebuf, tone, tone_len * 2); - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_SQL, - tonebuf, tone_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_ctcss_sql - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_get_ctcss_sql(RIG *rig, vfo_t vfo, tone_t *tone) -{ - const struct rig_caps *caps; - unsigned char tonebuf[MAXFRAMELEN]; - int tone_len, retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_SQL, NULL, 0, - tonebuf, &tone_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (tone_len != 5) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - tonebuf[0], tone_len); - return -RIG_ERJCTED; - } - - tone_len -= 2; - *tone = from_bcd_be(tonebuf + 2, tone_len * 2); - - /* check this tone exists. That's better than nothing. */ - for (i = 0; caps->ctcss_list[i] != 0; i++) - { - if (caps->ctcss_list[i] == *tone) - { - return RIG_OK; - } - } - - rig_debug(RIG_DEBUG_ERR, "%s: CTCSS NG (%#.2x)\n", __func__, tonebuf[2]); - return -RIG_EPROTO; -} - -/* - * icom_set_dcs_code - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_dcs_code(RIG *rig, vfo_t vfo, tone_t code) -{ - const struct rig_caps *caps; - unsigned char codebuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int code_len, ack_len = sizeof(ackbuf), retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - for (i = 0; caps->dcs_list[i] != 0; i++) - { - if (caps->dcs_list[i] == code) - { - break; - } - } - - if (caps->dcs_list[i] != code) - { - return -RIG_EINVAL; - } - - /* DCS Polarity ignored, by setting code_len to 3 it's forced to 0 (= Tx:norm, Rx:norm). */ - code_len = 3; - to_bcd_be(codebuf, code, code_len * 2); - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_DTCS, - codebuf, code_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_dcs_code - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code) -{ - const struct rig_caps *caps; - unsigned char codebuf[MAXFRAMELEN]; - int code_len, retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_DTCS, NULL, 0, - codebuf, &code_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* cn,sc,data*3 */ - if (code_len != 5) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - codebuf[0], code_len); - return -RIG_ERJCTED; - } - - /* buf is cn,sc, polarity, code_lo, code_hi, so code bytes start at 3, len is 2 - polarity is not decoded yet, hard to do without breaking ABI - */ - - code_len -= 3; - *code = from_bcd_be(codebuf + 3, code_len * 2); - - /* check this code exists. That's better than nothing. */ - for (i = 0; caps->dcs_list[i] != 0; i++) - { - if (caps->dcs_list[i] == *code) - { - return RIG_OK; - } - } - - rig_debug(RIG_DEBUG_ERR, "%s: DTCS NG (%#.2x)\n", __func__, codebuf[2]); - return -RIG_EPROTO; -} - -/* - * icom_set_dcs_sql - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_dcs_sql(RIG *rig, vfo_t vfo, tone_t code) -{ - const struct rig_caps *caps; - unsigned char codebuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int code_len, ack_len = sizeof(ackbuf), retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - for (i = 0; caps->dcs_list[i] != 0; i++) - { - if (caps->dcs_list[i] == code) - { - break; - } - } - - if (caps->dcs_list[i] != code) - { - return -RIG_EINVAL; - } - - /* DCS Polarity ignored, by setting code_len to 3 it's forced to 0 (= Tx:norm, Rx:norm). */ - code_len = 3; - to_bcd_be(codebuf, code, code_len * 2); - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_DTCS, - codebuf, code_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_dcs_sql - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_get_dcs_sql(RIG *rig, vfo_t vfo, tone_t *code) -{ - const struct rig_caps *caps; - unsigned char codebuf[MAXFRAMELEN]; - int code_len, retval; - int i; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - caps = rig->caps; - - retval = icom_transaction(rig, C_SET_TONE, S_TONE_DTCS, NULL, 0, - codebuf, &code_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* cn,sc,data*3 */ - if (code_len != 5) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - codebuf[0], code_len); - return -RIG_ERJCTED; - } - - /* buf is cn,sc, polarity, code_lo, code_hi, so code bytes start at 3, len is 2 - polarity is not decoded yet, hard to do without breaking ABI - */ - - code_len -= 3; - *code = from_bcd_be(codebuf + 3, code_len * 2); - - /* check this code exists. That's better than nothing. */ - for (i = 0; caps->dcs_list[i] != 0; i++) - { - if (caps->dcs_list[i] == *code) - { - return RIG_OK; - } - } - - rig_debug(RIG_DEBUG_ERR, "%s: DTCS NG (%#.2x)\n", __func__, codebuf[2]); - return -RIG_EPROTO; -} - -/* - * icom_set_powerstat - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_powerstat(RIG *rig, powerstat_t status) -{ - unsigned char ackbuf[200]; - int ack_len = sizeof(ackbuf), retval = RIG_OK; - int pwr_sc; - // so we'll do up to 175 for 115,200 - int fe_max = 175; - unsigned char fe_buf[fe_max]; // for FE's to power up - int i; - int retry; - struct rig_state *rs = &rig->state; - struct icom_priv_data *priv = (struct icom_priv_data *) rs->priv; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called status=%d\n", __func__, - (int) status); - - switch (status) - { - case RIG_POWER_ON: - - sleep(1); // let serial bus idle for a while - rig_debug(RIG_DEBUG_TRACE, "%s: PWR_ON failed, trying 0xfe's\n", - __func__); - // ic7300 manual says ~150 for 115,200 - // we'll just send a few more to be sure for all speeds - memset(fe_buf, 0xfe, fe_max); - // sending more than enough 0xfe's to wake up the rs232 - write_block(&rs->rigport, (char *) fe_buf, fe_max); - - hl_usleep(100 * 1000); - // we'll try 0x18 0x01 now -- should work on STBY rigs too - pwr_sc = S_PWR_ON; - fe_buf[0] = 0; - retry = rs->rigport.retry; - rs->rigport.retry = 0; - priv->serial_USB_echo_off = 1; - retval = - icom_transaction(rig, C_SET_PWR, pwr_sc, NULL, 0, ackbuf, &ack_len); - rs->rigport.retry = retry; - - break; - - default: - pwr_sc = S_PWR_OFF; - fe_buf[0] = 0; - retry = rs->rigport.retry; - rs->rigport.retry = 0; - retval = - icom_transaction(rig, C_SET_PWR, pwr_sc, NULL, 0, ackbuf, &ack_len); - rs->rigport.retry = retry; - } - - i = 0; - retry = 10; - - if (status == RIG_POWER_ON) // wait for wakeup only - { - - for (i = 0; i < retry; ++i) // up to 10 attempts - { - freq_t freq; - sleep(1); - // need to see if echo is on or not first - // until such time as rig is awake we don't know - icom_get_usb_echo_off(rig); - - // Use get_freq as all rigs should repond to this - retval = rig_get_freq(rig, RIG_VFO_CURR, &freq); - - if (retval == RIG_OK) - { - return retval; - } - else - { - rig_debug(RIG_DEBUG_TRACE, "%s: get_freq err=%s\n", __func__, - rigerror(retval)); - } - - rig_debug(RIG_DEBUG_TRACE, "%s: Wait %d of %d for get_powerstat\n", - __func__, i + 1, retry); - } - } - - if (i == retry) - { - rig_debug(RIG_DEBUG_TRACE, "%s: Wait failed for get_powerstat\n", - __func__); - retval = -RIG_ETIMEOUT; - } - - if (retval != RIG_OK) - { - rig_debug(RIG_DEBUG_TRACE, "%s: retval != RIG_OK, =%s\n", __func__, - rigerror(retval)); - return retval; - } - - if (status == RIG_POWER_OFF && (ack_len != 1 || ackbuf[0] != ACK)) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_powerstat - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_get_powerstat(RIG *rig, powerstat_t *status) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - /* r75 has no way to get power status, so fake it */ - if (rig->caps->rig_model == RIG_MODEL_ICR75) - { - /* getting the mode doesn't work if a memory is blank */ - /* so use one of the more innculous 'set mode' commands instead */ - int cmd_len = 1; - unsigned char cmdbuf[MAXFRAMELEN]; - cmdbuf[0] = S_PRM_TIME; - retval = icom_transaction(rig, C_CTL_MEM, S_MEM_MODE_SLCT, - cmdbuf, cmd_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - *status = ((ack_len == 6) && (ackbuf[0] == C_CTL_MEM)) ? - RIG_POWER_ON : RIG_POWER_OFF; - } - else - { - retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - *status = ackbuf[1] == S_PWR_ON ? RIG_POWER_ON : RIG_POWER_OFF; - } - - return RIG_OK; -} - - -/* - * icom_set_mem - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_mem(RIG *rig, vfo_t vfo, int ch) -{ - unsigned char membuf[2]; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - int chan_len; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - chan_len = ch < 100 ? 1 : 2; - - to_bcd_be(membuf, ch, chan_len * 2); - retval = icom_transaction(rig, C_SET_MEM, -1, membuf, chan_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_set_bank - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_bank(RIG *rig, vfo_t vfo, int bank) -{ - unsigned char bankbuf[2]; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - to_bcd_be(bankbuf, bank, BANK_NB_LEN * 2); - retval = icom_transaction(rig, C_SET_MEM, S_BANK, - bankbuf, CHAN_NB_LEN, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_set_ant - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_set_ant(RIG *rig, vfo_t vfo, ant_t ant) -{ - unsigned char antarg; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval, i_ant = 0; - int ant_len; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - /* - * TODO: IC-756* and [RX ANT] - */ - switch (ant) - { - case RIG_ANT_1: - i_ant = 0; - break; - - case RIG_ANT_2: - i_ant = 1; - break; - - case RIG_ANT_3: - i_ant = 2; - break; - - case RIG_ANT_4: - i_ant = 3; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported ant %#x", __func__, ant); - return -RIG_EINVAL; - } - - antarg = 0; - ant_len = ((rig->caps->rig_model == RIG_MODEL_ICR75) - || (rig->caps->rig_model == RIG_MODEL_ICR8600) || - (rig->caps->rig_model == RIG_MODEL_ICR6) - || (rig->caps->rig_model == RIG_MODEL_ICR30)) ? 0 : 1; - retval = icom_transaction(rig, C_CTL_ANT, i_ant, - &antarg, ant_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_get_ant - * Assumes rig!=NULL, rig->state.priv!=NULL - * only meaningfull for HF - */ -int icom_get_ant(RIG *rig, vfo_t vfo, ant_t *ant) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - retval = icom_transaction(rig, C_CTL_ANT, -1, NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if ((ack_len != 2 && ack_len != 3) || ackbuf[0] != C_CTL_ANT || - ackbuf[1] > 3) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - /* Note: with IC756/IC-756Pro/IC-7800, ackbuf[2] deals with [RX ANT] */ - - *ant = RIG_ANT_N(ackbuf[1]); - - return RIG_OK; -} - - -/* - * icom_vfo_op, Mem/VFO operation - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op) -{ - unsigned char mvbuf[MAXFRAMELEN]; - unsigned char ackbuf[MAXFRAMELEN]; - int mv_len = 0, ack_len = sizeof(ackbuf), retval; - int mv_cn, mv_sc; - int vfo_list; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (op) - { - case RIG_OP_CPY: - mv_cn = C_SET_VFO; - vfo_list = rig->state.vfo_list; - - if ((vfo_list & (RIG_VFO_A | RIG_VFO_B)) == (RIG_VFO_A | RIG_VFO_B)) - { - mv_sc = S_BTOA; - } - else if ((vfo_list & (RIG_VFO_MAIN | RIG_VFO_SUB)) == (RIG_VFO_MAIN | - RIG_VFO_SUB)) - { - mv_sc = S_SUBTOMAIN; - } - else - { - return -RIG_ENAVAIL; - } - - break; - - case RIG_OP_XCHG: - mv_cn = C_SET_VFO; - mv_sc = S_XCHNG; - break; - - case RIG_OP_FROM_VFO: - mv_cn = C_WR_MEM; - mv_sc = -1; - break; - - case RIG_OP_TO_VFO: - mv_cn = C_MEM2VFO; - mv_sc = -1; - break; - - case RIG_OP_MCL: - mv_cn = C_CLR_MEM; - mv_sc = -1; - break; - - case RIG_OP_TUNE: - mv_cn = C_CTL_PTT; - mv_sc = S_ANT_TUN; - mvbuf[0] = 2; - mv_len = 1; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported mem/vfo op %#x", __func__, - op); - return -RIG_EINVAL; - } - - retval = - icom_transaction(rig, mv_cn, mv_sc, mvbuf, mv_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - if (op != RIG_OP_XCHG) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - } - - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_scan, scan operation - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int icom_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch) -{ - unsigned char scanbuf[MAXFRAMELEN]; - unsigned char ackbuf[MAXFRAMELEN]; - int scan_len, ack_len = sizeof(ackbuf), retval; - int scan_cn, scan_sc; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - scan_len = 0; - scan_cn = C_CTL_SCAN; - - switch (scan) - { - case RIG_SCAN_STOP: - scan_sc = S_SCAN_STOP; - break; - - case RIG_SCAN_MEM: retval = icom_set_vfo(rig, RIG_VFO_MEM); - - if (retval != RIG_OK) - { - return retval; - } - - /* Looks like all the IC-R* have this command, - * but some old models don't have it. - * Should be put in icom_priv_caps ? - */ - if (rig->caps->rig_type == RIG_TYPE_RECEIVER) - { - scan_sc = S_SCAN_MEM2; - } - else - { - scan_sc = S_SCAN_START; - } - - break; - - case RIG_SCAN_SLCT: - retval = icom_set_vfo(rig, RIG_VFO_MEM); - - if (retval != RIG_OK) - { - return retval; - } - - scan_sc = S_SCAN_START; - break; - - case RIG_SCAN_PRIO: - case RIG_SCAN_PROG: - /* TODO: for SCAN_PROG, check this is an edge chan */ - /* BTW, I'm wondering if this is possible with CI-V */ - retval = icom_set_mem(rig, RIG_VFO_CURR, ch); - - if (retval != RIG_OK) - { - return retval; - } - - retval = icom_set_vfo(rig, RIG_VFO_VFO); - - if (retval != RIG_OK) - { - return retval; - } - - scan_sc = S_SCAN_START; - break; - - case RIG_SCAN_DELTA: - scan_sc = S_SCAN_DELTA; /* TODO: delta-f support */ - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unsupported scan %#x", __func__, scan); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, scan_cn, scan_sc, scanbuf, scan_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icom_send_morse - * Assumes rig!=NULL, msg!=NULL - */ -int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), retval; - int len; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - len = strlen(msg); - - if (len > 30) - { - len = 30; - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %s\n", __func__, msg); - - retval = icom_transaction(rig, C_SND_CW, -1, (unsigned char *) msg, len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -int icom_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq, - rmode_t mode) -{ - int rig_id; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rig_id = rig->caps->rig_model; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (rig_id) - { - default: - /* Normal 100 Watts */ - *mwpower = power * 100000; - break; - } - - return RIG_OK; -} - -int icom_mW2power(RIG *rig, float *power, unsigned int mwpower, freq_t freq, - rmode_t mode) -{ - int rig_id; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rig_id = rig->caps->rig_model; - - rig_debug(RIG_DEBUG_TRACE, "%s: passed mwpower = %i\n", __func__, - mwpower); - rig_debug(RIG_DEBUG_TRACE, "%s: passed freq = %" PRIfreq " Hz\n", - __func__, freq); - rig_debug(RIG_DEBUG_TRACE, "%s: passed mode = %s\n", __func__, - rig_strrmode(mode)); - - if (mwpower > 100000) - { - return -RIG_EINVAL; - } - - switch (rig_id) - { - default: /* Default to a 100W radio */ - *power = ((float) mwpower / 100000); - break; - } - - return RIG_OK; -} - - - -/* - * icom_decode is called by sa_sigio, when some asynchronous - * data has been received from the rig - */ -int icom_decode_event(RIG *rig) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char buf[MAXFRAMELEN]; - int frm_len; - freq_t freq; - rmode_t mode; - pbwidth_t width; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - rs = &rig->state; - priv = (struct icom_priv_data *) rs->priv; - - frm_len = read_icom_frame(&rs->rigport, buf, sizeof(buf)); - - if (frm_len == -RIG_ETIMEOUT) - { - rig_debug(RIG_DEBUG_VERBOSE, - "%s: got a timeout before the first character\n", __func__); - } - - if (frm_len < 1) - { - return 0; - } - - switch (buf[frm_len - 1]) - { - case COL: - rig_debug(RIG_DEBUG_VERBOSE, "%s: saw a collision\n", __func__); - /* Collision */ - return -RIG_BUSBUSY; - - case FI: - /* Ok, normal frame */ - break; - - default: - /* Timeout after reading at least one character */ - /* Problem on ci-v bus? */ - return -RIG_EPROTO; - } - - if (buf[3] != BCASTID && buf[3] != priv->re_civ_addr) - { - rig_debug(RIG_DEBUG_WARN, "%s: CI-V %#x called for %#x!\n", __func__, - priv->re_civ_addr, buf[3]); - } - - /* - * the first 2 bytes must be 0xfe - * the 3rd one the emitter - * the 4rd one 0x00 since this is transceive mode - * then the command number - * the rest is data - * and don't forget one byte at the end for the EOM - */ - switch (buf[4]) - { - case C_SND_FREQ: - - /* - * TODO: the freq length might be less than 4 or 5 bytes - * on older rigs! - */ - if (rig->callbacks.freq_event) - { - freq = from_bcd(buf + 5, (priv->civ_731_mode ? 4 : 5) * 2); - return rig->callbacks.freq_event(rig, RIG_VFO_CURR, freq, - rig->callbacks.freq_arg); - } - else - { - return -RIG_ENAVAIL; - } - - break; - - case C_SND_MODE: - if (rig->callbacks.mode_event) - { - icom2rig_mode(rig, buf[5], buf[6], &mode, &width); - return rig->callbacks.mode_event(rig, RIG_VFO_CURR, - mode, width, - rig->callbacks.mode_arg); - } - else - { - return -RIG_ENAVAIL; - } - - break; - - default: - rig_debug(RIG_DEBUG_VERBOSE, "%s: transceive cmd unsupported %#2.2x\n", - __func__, buf[4]); - return -RIG_ENIMPL; - } - - return RIG_OK; -} - -int icom_set_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, - unsigned char *subcmdbuf, int val_bytes, int val) -{ - unsigned char cmdbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int acklen = sizeof(ackbuf); - int cmdbuflen = subcmdbuflen; - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (subcmdbuflen > 0) - { - if (subcmdbuf == NULL) - { - return -RIG_EINTERNAL; - } - - memcpy(cmdbuf, subcmdbuf, subcmdbuflen); - } - - if (val_bytes > 0) - { - to_bcd_be(cmdbuf + subcmdbuflen, (long long) val, val_bytes * 2); - cmdbuflen += val_bytes; - } - - retval = - icom_transaction(rig, cmd, subcmd, cmdbuf, cmdbuflen, ackbuf, &acklen); - - if (retval != RIG_OK) - { - return retval; - } - - if (acklen != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], acklen); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen, - unsigned char *subcmdbuf, int *reslen, - unsigned char *res) -{ - unsigned char ackbuf[MAXFRAMELEN]; - int acklen = sizeof(ackbuf); - int cmdhead = subcmdbuflen; - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - retval = - icom_transaction(rig, cmd, subcmd, subcmdbuf, subcmdbuflen, ackbuf, - &acklen); - - if (retval != RIG_OK) - { - return retval; - } - - cmdhead += (subcmd == -1) ? 1 : 2; - acklen -= cmdhead; - - if (ackbuf[0] != ACK && ackbuf[0] != cmd) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], acklen); - return -RIG_ERJCTED; - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %d\n", __func__, acklen); - - if (*reslen < acklen || res == NULL) - { - return -RIG_EINTERNAL; - } - - memcpy(res, ackbuf + cmdhead, acklen); - *reslen = acklen; - - return RIG_OK; -} - -int icom_get_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, - unsigned char *subcmdbuf, int *val) -{ - unsigned char resbuf[MAXFRAMELEN]; - int reslen = sizeof(resbuf); - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - retval = - icom_get_raw_buf(rig, cmd, subcmd, subcmdbuflen, subcmdbuf, &reslen, - resbuf); - - if (retval != RIG_OK) - { - return retval; - } - - * val = from_bcd_be(resbuf, reslen * 2); - - rig_debug(RIG_DEBUG_TRACE, "%s: %d %d\n", __func__, reslen, *val); - - return RIG_OK; -} - -int icom_set_level_raw(RIG *rig, setting_t level, int cmd, int subcmd, - int subcmdbuflen, unsigned char *subcmdbuf, - int val_bytes, value_t val) -{ - int icom_val; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (RIG_LEVEL_IS_FLOAT(level)) - { - icom_val = (int)(val.f * 255.0f); - } - else - { - icom_val = val.i; - } - - return icom_set_raw(rig, cmd, subcmd, subcmdbuflen, subcmdbuf, val_bytes, - icom_val); -} - -int icom_get_level_raw(RIG *rig, setting_t level, int cmd, int subcmd, - int subcmdbuflen, unsigned char *subcmdbuf, - value_t *val) -{ - int icom_val; - int retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - retval = - icom_get_raw(rig, cmd, subcmd, subcmdbuflen, subcmdbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - if (RIG_LEVEL_IS_FLOAT(level)) - { - val->f = (float) icom_val / 255.0f; - } - else - { - val->i = icom_val; - } - - return RIG_OK; -} - -int icom_set_custom_parm(RIG *rig, int parmbuflen, unsigned char *parmbuf, - int val_bytes, int value) -{ - return icom_set_raw(rig, C_CTL_MEM, S_MEM_PARM, parmbuflen, parmbuf, - val_bytes, value); -} - -int icom_get_custom_parm(RIG *rig, int parmbuflen, unsigned char *parmbuf, - int *value) -{ - return icom_get_raw(rig, C_CTL_MEM, S_MEM_PARM, parmbuflen, parmbuf, - value); -} - -int icom_set_custom_parm_time(RIG *rig, int parmbuflen, - unsigned char *parmbuf, int seconds) -{ - unsigned char cmdbuf[MAXFRAMELEN]; - int hour = (int)((float) seconds / 3600.0); - int min = (int)((float)(seconds - (hour * 3600)) / 60.0); - - if (parmbuflen > 0) - { - memcpy(cmdbuf, parmbuf, parmbuflen); - } - - to_bcd_be(cmdbuf + parmbuflen, (long long) hour, 2); - to_bcd_be(cmdbuf + parmbuflen + 1, (long long) min, 2); - - return icom_set_raw(rig, C_CTL_MEM, S_MEM_PARM, parmbuflen + 2, cmdbuf, 0, - 0); -} - -int icom_get_custom_parm_time(RIG *rig, int parmbuflen, - unsigned char *parmbuf, int *seconds) -{ - unsigned char resbuf[MAXFRAMELEN]; - int reslen = sizeof(resbuf); - int retval; - int hour, min; - - retval = - icom_get_raw_buf(rig, C_CTL_MEM, S_MEM_PARM, parmbuflen, parmbuf, - &reslen, resbuf); - - if (retval != RIG_OK) - { - return retval; - } - - hour = from_bcd_be(resbuf, 2); - min = from_bcd_be(resbuf + 1, 2); - *seconds = (hour * 3600) + (min * 60); - - return RIG_OK; -} - -// Sets rig vfo && priv->curr_vfo to default VFOA, or current vfo, or the vfo requested -static int set_vfo_curr(RIG *rig, vfo_t vfo, vfo_t curr_vfo) -{ - int retval; - struct icom_priv_data *priv = (struct icom_priv_data *) rig->state.priv; - - rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s, curr_vfo=%s\n", __func__, - rig_strvfo(vfo), rig_strvfo(curr_vfo)); - - // first time we will set default to VFOA or Main as - // So if you ask for frequency or such without setting VFO first you'll get VFOA - if (priv->curr_vfo == RIG_VFO_NONE && vfo == RIG_VFO_CURR) - { - - if (VFO_HAS_MAIN_SUB_ONLY) - { - rig_debug(RIG_DEBUG_TRACE, "%s: setting default as MAIN\n", - __func__); - retval = rig_set_vfo(rig, RIG_VFO_MAIN); // we'll default to Main in this case - } - else if (VFO_HAS_A_B) - { - rig_debug(RIG_DEBUG_TRACE, "%s: setting default as VFOA\n", - __func__); - retval = rig_set_vfo(rig, - RIG_VFO_A); // we'll default to VFOA for all others - } - else - { - // we don't have any VFO selection - rig_debug(RIG_DEBUG_TRACE, "%s: setting default as VFO_CURR\n", - __func__); - - vfo = RIG_VFO_CURR; - retval = RIG_OK; - } - - if (retval != RIG_OK) - { - return retval; - } - - priv->curr_vfo = RIG_VFO_A; - } - // asking for vfo_curr so give it to them - else if (priv->curr_vfo != RIG_VFO_NONE && vfo == RIG_VFO_CURR) - { - rig_debug(RIG_DEBUG_TRACE, "%s: using curr_vfo=%s\n", __func__, - rig_strvfo(priv->curr_vfo)); - vfo = priv->curr_vfo; - } - // only need to set vfo if it's changed - else if (priv->curr_vfo != vfo) - { - rig_debug(RIG_DEBUG_TRACE, "%s: setting new vfo=%s\n", __func__, - rig_strvfo(vfo)); - retval = rig_set_vfo(rig, vfo); - - if (retval != RIG_OK) - { - return retval; - } - - priv->curr_vfo = vfo; - } - - return RIG_OK; -} - -/* - * init_icom is called by rig_probe_all (register.c) - * - * probe_icom reports all the devices on the CI-V bus. - * - * rig_model_t probeallrigs_icom(port_t *port, rig_probe_func_t cfunc, rig_ptr_t data) - */ -DECLARE_PROBERIG_BACKEND(icom) -{ - unsigned char buf[MAXFRAMELEN], civ_addr, civ_id; - int frm_len, i; - rig_model_t model = RIG_MODEL_NONE; - int rates[] = { 19200, 9600, 300, 0 }; - int rates_idx; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - if (!port) - { - return RIG_MODEL_NONE; - } - - if (port->type.rig != RIG_PORT_SERIAL) - { - return RIG_MODEL_NONE; - } - - port->write_delay = port->post_write_delay = 0; - port->retry = 1; - - /* - * try for all different baud rates - */ - for (rates_idx = 0; rates[rates_idx]; rates_idx++) - { - int retval; - port->parm.serial.rate = rates[rates_idx]; - port->timeout = 2 * 1000 / rates[rates_idx] + 40; - - retval = serial_open(port); - - if (retval != RIG_OK) - { - return RIG_MODEL_NONE; - } - - /* - * try all possible addresses on the CI-V bus - * FIXME: actualy, old rigs do not support C_RD_TRXID cmd! - * Try to be smart, and deduce model depending - * on freq range, return address, and - * available commands. - */ - for (civ_addr = 0x01; civ_addr <= 0x7f; civ_addr++) - { - - frm_len = make_cmd_frame((char *) buf, civ_addr, CTRLID, - C_RD_TRXID, S_RD_TRXID, NULL, 0); - - serial_flush(port); - write_block(port, (char *) buf, frm_len); - - /* read out the bytes we just sent - * TODO: check this is what we expect - */ - read_icom_frame(port, buf, sizeof(buf)); - - /* this is the reply */ - frm_len = read_icom_frame(port, buf, sizeof(buf)); - - /* timeout.. nobody's there */ - if (frm_len <= 0) - { - continue; - } - - if (buf[7] != FI && buf[5] != FI) - { - /* protocol error, unexpected reply. - * is this a CI-V device? - */ - close(port->fd); - return RIG_MODEL_NONE; - } - else if (buf[4] == NAK) - { - /* - * this is an Icom, but it does not support transceiver ID - * try to guess from the return address - */ - civ_id = buf[3]; - } - else - { - civ_id = buf[6]; - } - - for (i = 0; icom_addr_list[i].model != RIG_MODEL_NONE; i++) - { - if (icom_addr_list[i].re_civ_addr == civ_id) - { - rig_debug(RIG_DEBUG_VERBOSE, "%s: found %#x at %#x\n", - __func__, civ_id, buf[3]); - model = icom_addr_list[i].model; - - if (cfunc) - { - (*cfunc)(port, model, data); - } - - break; - } - } - - /* - * not found in known table.... - * update icom_addr_list[]! - */ - if (icom_addr_list[i].model == RIG_MODEL_NONE) - rig_debug(RIG_DEBUG_WARN, "%s: found unknown device " - "with CI-V ID %#x, please report to Hamlib " - "developers.\n", __func__, civ_id); - } - - /* - * Try to identify OptoScan - */ - for (civ_addr = 0x80; civ_addr <= 0x8f; civ_addr++) - { - - frm_len = make_cmd_frame((char *) buf, civ_addr, CTRLID, - C_CTL_MISC, S_OPTO_RDID, NULL, 0); - - serial_flush(port); - write_block(port, (char *) buf, frm_len); - - /* read out the bytes we just sent - * TODO: check this is what we expect - */ - read_icom_frame(port, buf, sizeof(buf)); - - /* this is the reply */ - frm_len = read_icom_frame(port, buf, sizeof(buf)); - - /* timeout.. nobody's there */ - if (frm_len <= 0) - { - continue; - } - - /* wrong protocol? */ - if (frm_len != 7 || buf[4] != C_CTL_MISC || buf[5] != S_OPTO_RDID) - { - continue; - } - - rig_debug(RIG_DEBUG_VERBOSE, "%s: " - "found OptoScan%c%c%c, software version %d.%d, " - "interface version %d.%d, at %#x\n", - __func__, - buf[2], buf[3], buf[4], - buf[5] >> 4, buf[5] & 0xf, - buf[6] >> 4, buf[6] & 0xf, civ_addr); - - if (buf[6] == '5' && buf[7] == '3' && buf[8] == '5') - { - model = RIG_MODEL_OS535; - } - else if (buf[6] == '4' && buf[7] == '5' && buf[8] == '6') - { - model = RIG_MODEL_OS456; - } - else - { - continue; - } - - if (cfunc) - { - (*cfunc)(port, model, data); - } - - break; - } - - close(port->fd); - - /* - * Assumes all the rigs on the bus are running at same speed. - * So if one at least has been found, none will be at lower speed. - */ - if (model != RIG_MODEL_NONE) - { - return model; - } - } - - return model; -} - -/* - * initrigs_icom is called by rig_backend_load - */ -DECLARE_INITRIG_BACKEND(icom) -{ - rig_debug(RIG_DEBUG_VERBOSE, "%s: _init called\n", __func__); - - rig_register(&ic703_caps); - rig_register(&ic706_caps); - rig_register(&ic706mkii_caps); - rig_register(&ic706mkiig_caps); - rig_register(&ic718_caps); - rig_register(&ic725_caps); - rig_register(&ic726_caps); - rig_register(&ic735_caps); - rig_register(&ic736_caps); - rig_register(&ic737_caps); - rig_register(&ic738_caps); - rig_register(&ic7410_caps); - rig_register(&ic746_caps); - rig_register(&ic746pro_caps); - rig_register(&ic751_caps); - rig_register(&ic761_caps); - rig_register(&ic775_caps); - rig_register(&ic756_caps); - rig_register(&ic756pro_caps); - rig_register(&ic756pro2_caps); - rig_register(&ic756pro3_caps); - rig_register(&ic7600_caps); - rig_register(&ic765_caps); - rig_register(&ic7700_caps); - rig_register(&ic78_caps); - rig_register(&ic7800_caps); - rig_register(&ic785x_caps); - rig_register(&ic7000_caps); - rig_register(&ic7100_caps); - rig_register(&ic7200_caps); - rig_register(&ic7300_caps); - rig_register(&ic7610_caps); - rig_register(&ic781_caps); - rig_register(&ic707_caps); - rig_register(&ic728_caps); - - rig_register(&ic820h_caps); - rig_register(&ic821h_caps); - rig_register(&ic910_caps); - rig_register(&ic9100_caps); - rig_register(&ic970_caps); - rig_register(&ic9700_caps); - - rig_register(&icrx7_caps); - rig_register(&icr6_caps); - rig_register(&icr10_caps); - rig_register(&icr20_caps); - rig_register(&icr30_caps); - rig_register(&icr71_caps); - rig_register(&icr72_caps); - rig_register(&icr75_caps); - rig_register(&icr7000_caps); - rig_register(&icr7100_caps); - rig_register(&icr8500_caps); - rig_register(&icr8600_caps); - rig_register(&icr9000_caps); - rig_register(&icr9500_caps); - - rig_register(&ic271_caps); - rig_register(&ic275_caps); - rig_register(&ic471_caps); - rig_register(&ic475_caps); - rig_register(&ic1275_caps); - - rig_register(&os535_caps); - rig_register(&os456_caps); - - rig_register(&omnivip_caps); - rig_register(&delta2_caps); - - rig_register(&ic92d_caps); - rig_register(&id1_caps); - rig_register(&id31_caps); - rig_register(&id51_caps); - rig_register(&id4100_caps); - rig_register(&id5100_caps); - rig_register(&ic2730_caps); - - rig_register(&perseus_caps); - - rig_register(&x108g_caps); - - return RIG_OK; -} diff --git a/icom/icom.h b/icom/icom.h deleted file mode 100644 index b23a29b8a..000000000 --- a/icom/icom.h +++ /dev/null @@ -1,345 +0,0 @@ -/* - * Hamlib CI-V backend - main header - * Copyright (c) 2000-2016 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef _ICOM_H -#define _ICOM_H 1 - -#include "hamlib/rig.h" -#include "cal.h" -#include "tones.h" - -#ifdef HAVE_SYS_TIME_H -#include -#endif - -#define BACKEND_VER "0.22" - -/* - * defines used by comp_cal_str in rig.c - * STR_CAL_LENGTH is the length of the S Meter calibration table - * STR_CAL_S0 is the value in dB of the lowest value (not even in table) - * MULTIB_SUBCMD allows the dsp rigs ie pro models to use multibyte subcommands for all the extra - * parameters and levels. - */ -#define STR_CAL_LENGTH 16 -#define STR_CAL_S0 -54 -#define MULTIB_SUBCMD - -/* - * minimal channel caps. - * If your rig has better/lesser, don't modify this define but clone it, - * so you don't change other rigs. - */ -#define IC_MIN_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ -} - -/* - * common channel caps. - * If your rig has better/lesser, don't modify this define but clone it, - * so you don't change other rigs. - */ -#define IC_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .tx_freq = 1, \ - .tx_mode = 1, \ - .tx_width = 1, \ - .rptr_offs = 1, \ -} - -/* - * S-Meter data for uncalibrated rigs - */ -#define UNKNOWN_IC_STR_CAL { 2, {{ 0, -60}, { 255, 60}} } - - -struct ts_sc_list -{ - shortfreq_t ts; /* tuning step */ - unsigned char sc; /* sub command */ -}; - -/** - * \brief Pipelined tuning state data structure. - */ -typedef struct rig_pltstate -{ - freq_t freq; - freq_t next_freq; - rmode_t mode; - rmode_t next_mode; - pbwidth_t width; - pbwidth_t next_width; - struct timeval timer_start; - struct timeval timer_current; - int usleep_time; /* dependent on radio module & serial data rate */ -} pltstate_t; - -struct icom_agc_level -{ - enum agc_level_e - level; /* Hamlib AGC level from agc_level_e enum, the last entry should have level -1 */ - unsigned char - icom_level; /* Icom AGC level for C_CTL_FUNC (0x16), S_FUNC_AGC (0x12) command */ -}; - -struct icom_priv_caps -{ - unsigned char re_civ_addr; /* the remote dlft equipment's CI-V address*/ - int civ_731_mode; /* Off: freqs on 10 digits, On: freqs on 8 digits */ - int no_xchg; /* Off: use VFO XCHG to set other VFO, On: use set VFO to set other VFO */ - const struct ts_sc_list *ts_sc_list; - int settle_time; /*!< Receiver settle time, in ms */ - int (*r2i_mode)(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd); /*< backend specific code - to convert bandwidth and - mode to cmd tokens */ - void (*i2r_mode)(RIG *rig, unsigned char md, int pd, - rmode_t *mode, pbwidth_t *width); /*< backend specific code - to convert response - tokens to bandwidth and - mode */ - int serial_full_duplex; /*!< Whether RXD&TXD are not tied together */ - int offs_len; /* Number of bytes in offset frequency field. 0 defaults to 3 */ - int serial_USB_echo_check; /* Flag to test USB echo state */ - int agc_levels_present; /* Flag to indicate that agc_levels array is populated */ - struct icom_agc_level agc_levels[RIG_AGC_LAST + - 1]; /* Icom rig-specific AGC levels, the last entry should have level -1 */ -}; - - -struct icom_priv_data -{ - unsigned char re_civ_addr; /* the remote equipment's CI-V address*/ - int civ_731_mode; /* Off: freqs on 10 digits, On: freqs on 8 digits */ - int no_xchg; /* Off: use VFO XCHG to set other VFO, On: use set VFO to set other VFO */ - int no_1a_03_cmd; /* rig doesn't tell IF widths */ - int split_on; /* record split state */ - pltstate_t *pltstate; /* only on optoscan */ - int serial_USB_echo_off; /* USB is not set to echo */ - /* we track vfos internallhy for use with different functions like split */ - /* this allows queries using CURR_VFO and Main/Sub to behave */ - vfo_t curr_vfo; - vfo_t rx_vfo; - vfo_t tx_vfo; -}; - -extern const struct ts_sc_list r8500_ts_sc_list[]; -extern const struct ts_sc_list r8600_ts_sc_list[]; -extern const struct ts_sc_list ic737_ts_sc_list[]; -extern const struct ts_sc_list r75_ts_sc_list[]; -extern const struct ts_sc_list r7100_ts_sc_list[]; -extern const struct ts_sc_list r9000_ts_sc_list[]; -extern const struct ts_sc_list r9500_ts_sc_list[]; -extern const struct ts_sc_list ic756_ts_sc_list[]; -extern const struct ts_sc_list ic756pro_ts_sc_list[]; -extern const struct ts_sc_list ic706_ts_sc_list[]; -extern const struct ts_sc_list ic7000_ts_sc_list[]; -extern const struct ts_sc_list ic7100_ts_sc_list[]; -extern const struct ts_sc_list ic7200_ts_sc_list[]; -extern const struct ts_sc_list ic7300_ts_sc_list[]; -extern const struct ts_sc_list ic910_ts_sc_list[]; -extern const struct ts_sc_list ic718_ts_sc_list[]; -extern const struct ts_sc_list x108g_ts_sc_list[]; - -extern const pbwidth_t -rtty_fil[]; /* rtty filter passband width; available on 746pro and 756pro rigs */ - -pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode); - -int icom_init(RIG *rig); -int icom_rig_open(RIG *rig); -int icom_cleanup(RIG *rig); -int icom_set_freq(RIG *rig, vfo_t vfo, freq_t freq); -int icom_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); -int icom_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit); -int icom_get_rit_new(RIG *rig, vfo_t vfo, shortfreq_t *ts); -int icom_set_rit_new(RIG *rig, vfo_t vfo, shortfreq_t ts); -int icom_set_xit_new(RIG *rig, vfo_t vfo, shortfreq_t ts); -int icom_set_mode_with_data(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); -int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); -int icom_get_mode_with_data(RIG *rig, vfo_t vfo, rmode_t *mode, - pbwidth_t *width); -int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); -int icom_get_vfo(RIG *rig, vfo_t *vfo); -int icom_set_vfo(RIG *rig, vfo_t vfo); -int icom_set_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t rptr_shift); -int icom_get_rptr_shift(RIG *rig, vfo_t vfo, rptr_shift_t *rptr_shift); -int icom_set_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t rptr_offs); -int icom_get_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t *rptr_offs); -int icom_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq); -int icom_get_split_freq(RIG *rig, vfo_t vfo, freq_t *tx_freq); -int icom_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, - pbwidth_t tx_width); -int icom_get_split_mode(RIG *rig, vfo_t vfo, rmode_t *tx_mode, - pbwidth_t *tx_width); -int icom_set_split_freq_mode(RIG *rig, vfo_t vfo, freq_t tx_freq, - rmode_t tx_mode, pbwidth_t tx_width); -int icom_get_split_freq_mode(RIG *rig, vfo_t vfo, freq_t *tx_freq, - rmode_t *tx_mode, pbwidth_t *tx_width); -int icom_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo); -int icom_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo); -int icom_mem_get_split_vfo(RIG *rig, vfo_t vfo, split_t *split, vfo_t *tx_vfo); -int icom_set_ts(RIG *rig, vfo_t vfo, shortfreq_t ts); -int icom_get_ts(RIG *rig, vfo_t vfo, shortfreq_t *ts); -int icom_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); -int icom_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt); -int icom_get_dcd(RIG *rig, vfo_t vfo, dcd_t *dcd); -int icom_set_ctcss_tone(RIG *rig, vfo_t vfo, tone_t tone); -int icom_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone); -int icom_set_ctcss_sql(RIG *rig, vfo_t vfo, tone_t tone); -int icom_get_ctcss_sql(RIG *rig, vfo_t vfo, tone_t *tone); -int icom_set_dcs_code(RIG *rig, vfo_t vfo, tone_t code); -int icom_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code); -int icom_set_dcs_sql(RIG *rig, vfo_t vfo, tone_t code); -int icom_get_dcs_sql(RIG *rig, vfo_t vfo, tone_t *code); -int icom_set_bank(RIG *rig, vfo_t vfo, int bank); -int icom_set_mem(RIG *rig, vfo_t vfo, int ch); -int icom_vfo_op(RIG *rig, vfo_t vfo, vfo_op_t op); -int icom_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch); -int icom_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int icom_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); -int icom_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val); -int icom_get_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t *val); -int icom_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); -int icom_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status); -int icom_set_parm(RIG *rig, setting_t parm, value_t val); -int icom_get_parm(RIG *rig, setting_t parm, value_t *val); -int icom_set_conf(RIG *rig, token_t token, const char *val); -int icom_get_conf(RIG *rig, token_t token, char *val); -int icom_set_powerstat(RIG *rig, powerstat_t status); -int icom_get_powerstat(RIG *rig, powerstat_t *status); -int icom_set_ant(RIG *rig, vfo_t vfo, ant_t ant); -int icom_get_ant(RIG *rig, vfo_t vfo, ant_t *ant); -int icom_decode_event(RIG *rig); -int icom_power2mW(RIG *rig, unsigned int *mwpower, float power, freq_t freq, - rmode_t mode); -int icom_mW2power(RIG *rig, float *power, unsigned int mwpower, freq_t freq, - rmode_t mode); -int icom_send_morse(RIG *rig, vfo_t vfo, const char *msg); -/* Exposed routines */ -int icom_get_split_vfos(const RIG *rig, vfo_t *rx_vfo, vfo_t *tx_vfo); -int icom_set_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, - unsigned char *subcmdbuf, int val_bytes, int val); -int icom_get_raw_buf(RIG *rig, int cmd, int subcmd, int subcmdbuflen, - unsigned char *subcmdbuf, int *reslen, unsigned char *res); -int icom_get_raw(RIG *rig, int cmd, int subcmd, int subcmdbuflen, - unsigned char *subcmdbuf, int *val); -int icom_set_level_raw(RIG *rig, setting_t level, int cmd, int subcmd, - int subcmdbuflen, unsigned char *subcmdbuf, int val_bytes, value_t val); -int icom_get_level_raw(RIG *rig, setting_t level, int cmd, int subcmd, - int subcmdbuflen, unsigned char *subcmdbuf, value_t *val); -int icom_set_custom_parm(RIG *rig, int parmbuflen, unsigned char *parmbuf, - int val_bytes, int value); -int icom_get_custom_parm(RIG *rig, int parmbuflen, unsigned char *parmbuf, - int *value); -int icom_set_custom_parm_time(RIG *rig, int parmbuflen, unsigned char *parmbuf, - int seconds); -int icom_get_custom_parm_time(RIG *rig, int parmbuflen, unsigned char *parmbuf, - int *seconds); - -extern const struct confparams icom_cfg_params[]; - -extern const struct rig_caps ic703_caps; -extern const struct rig_caps ic706_caps; -extern const struct rig_caps ic706mkii_caps; -extern const struct rig_caps ic706mkiig_caps; -extern const struct rig_caps ic707_caps; -extern const struct rig_caps ic718_caps; -extern const struct rig_caps ic725_caps; -extern const struct rig_caps ic726_caps; -extern const struct rig_caps ic728_caps; -extern const struct rig_caps ic735_caps; -extern const struct rig_caps ic736_caps; -extern const struct rig_caps ic737_caps; -extern const struct rig_caps ic738_caps; -extern const struct rig_caps ic746_caps; -extern const struct rig_caps ic7410_caps; -extern const struct rig_caps ic746pro_caps; -extern const struct rig_caps ic756_caps; -extern const struct rig_caps ic756pro_caps; -extern const struct rig_caps ic756pro2_caps; -extern const struct rig_caps ic756pro3_caps; -extern const struct rig_caps ic751_caps; -extern const struct rig_caps ic7600_caps; -extern const struct rig_caps ic7610_caps; -extern const struct rig_caps ic761_caps; -extern const struct rig_caps ic765_caps; -extern const struct rig_caps ic7700_caps; -extern const struct rig_caps ic775_caps; -extern const struct rig_caps ic78_caps; -extern const struct rig_caps ic7800_caps; -extern const struct rig_caps ic785x_caps; -extern const struct rig_caps ic7000_caps; -extern const struct rig_caps ic7100_caps; -extern const struct rig_caps ic7200_caps; -extern const struct rig_caps ic7300_caps; -extern const struct rig_caps ic781_caps; -extern const struct rig_caps ic820h_caps; -extern const struct rig_caps ic821h_caps; -extern const struct rig_caps ic910_caps; -extern const struct rig_caps ic9100_caps; -extern const struct rig_caps ic970_caps; -extern const struct rig_caps ic9700_caps; -extern const struct rig_caps icrx7_caps; -extern const struct rig_caps icr10_caps; -extern const struct rig_caps icr20_caps; -extern const struct rig_caps icr6_caps; -extern const struct rig_caps icr71_caps; -extern const struct rig_caps icr72_caps; -extern const struct rig_caps icr75_caps; -extern const struct rig_caps icr7000_caps; -extern const struct rig_caps icr7100_caps; -extern const struct rig_caps icr8500_caps; -extern const struct rig_caps icr9000_caps; -extern const struct rig_caps icr9500_caps; -extern const struct rig_caps ic271_caps; -extern const struct rig_caps ic275_caps; -extern const struct rig_caps ic471_caps; -extern const struct rig_caps ic475_caps; -extern const struct rig_caps ic1275_caps; - -extern const struct rig_caps omnivip_caps; -extern const struct rig_caps delta2_caps; - -extern const struct rig_caps os456_caps; -extern const struct rig_caps os535_caps; - -extern const struct rig_caps ic92d_caps; -extern const struct rig_caps id1_caps; -extern const struct rig_caps id31_caps; -extern const struct rig_caps id51_caps; -extern const struct rig_caps id4100_caps; -extern const struct rig_caps id5100_caps; -extern const struct rig_caps ic2730_caps; - -extern const struct rig_caps perseus_caps; - -extern const struct rig_caps x108g_caps; - -extern const struct rig_caps icr8600_caps; -extern const struct rig_caps icr30_caps; - -#endif /* _ICOM_H */ diff --git a/icom/icom_defs.h b/icom/icom_defs.h deleted file mode 100644 index de5c5cf00..000000000 --- a/icom/icom_defs.h +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Hamlib CI-V backend - defines for the ICOM "CI-V" interface. - * Copyright (c) 2000-2016 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef _ICOM_DEFS_H -#define _ICOM_DEFS_H 1 - -/* - * CI-V frame codes - */ -#define PR 0xfe /* Preamble code */ -#define CTRLID 0xe0 /* Controllers's default address */ -#define BCASTID 0x00 /* Broadcast address */ -#define FI 0xfd /* End of message code */ -#define ACK 0xfb /* OK code */ -#define NAK 0xfa /* NG code */ -#define COL 0xfc /* CI-V bus collision detected */ -#define PAD 0xff /* Transmit padding */ - -#define ACKFRMLEN 6 /* reply frame length */ - -#define S_NONE -1 - - -/* - * Arguments length in bytes - */ -#define CHAN_NB_LEN 2 -#define BANK_NB_LEN 2 -#define OFFS_LEN 3 - -/* - * Cn controller commands - * - - Most radios have 2 or 3 receive passbands available. Where only 2 are available they - are selected by 01 for wide and 02 for narrow Actual bandwidth is determined by the filters - installed. With the newer DSP rigs there are 3 presets 01 = wide 02 = middle and 03 = narrow. - Actually, you can set change any of these presets to any thing you want. - - * Notes: - * The following only applies to IC-706. - * 1. When wide or normal op available: add "00" for wide, "01" normal - * Normal or narrow op: add "00" for normal, "01" for narrow - * Wide, normal or narrow op: add "00" for wide, "01" normal, "02" narrow - * 2. Memory channel number 1A=0100/1b=0101, 2A=0102/2b=0103, - * 3A=0104/3b=0105, C1=0106, C2=0107 - */ -#define C_SND_FREQ 0x00 /* Send frequency data transceive mode does not ack*/ -#define C_SND_MODE 0x01 /* Send mode data, Sc for transceive mode does not ack */ -#define C_RD_BAND 0x02 /* Read band edge frequencies */ -#define C_RD_FREQ 0x03 /* Read display frequency */ -#define C_RD_MODE 0x04 /* Read display mode */ -#define C_SET_FREQ 0x05 /* Set frequency data(1) */ -#define C_SET_MODE 0x06 /* Set mode data, Sc */ -#define C_SET_VFO 0x07 /* Set VFO */ -#define C_SET_MEM 0x08 /* Set channel, Sc(2) */ -#define C_WR_MEM 0x09 /* Write memory */ -#define C_MEM2VFO 0x0a /* Memory to VFO */ -#define C_CLR_MEM 0x0b /* Memory clear */ -#define C_RD_OFFS 0x0c /* Read duplex offset frequency; default changes with HF/6M/2M */ -#define C_SET_OFFS 0x0d /* Set duplex offset frequency */ -#define C_CTL_SCAN 0x0e /* Control scan, Sc */ -#define C_CTL_SPLT 0x0f /* Control split, and duplex mode Sc */ -#define C_SET_TS 0x10 /* Set tuning step, Sc */ -#define C_CTL_ATT 0x11 /* Set/get attenuator, Sc */ -#define C_CTL_ANT 0x12 /* Set/get antenna, Sc */ -#define C_CTL_ANN 0x13 /* Control announce (speech synth.), Sc */ -#define C_CTL_LVL 0x14 /* Set AF/RF/squelch, Sc */ -#define C_RD_SQSM 0x15 /* Read squelch condition/S-meter level, Sc */ -#define C_CTL_FUNC 0x16 /* Function settings (AGC,NB,etc.), Sc */ -#define C_SND_CW 0x17 /* Send CW message */ -#define C_SET_PWR 0x18 /* Set Power ON/OFF, Sc */ -#define C_RD_TRXID 0x19 /* Read transceiver ID code */ -#define C_CTL_MEM 0x1a /* Misc memory/bank/rig control functions, Sc */ -#define C_SET_TONE 0x1b /* Set tone frequency */ -#define C_CTL_PTT 0x1c /* Control Transmit On/Off, Sc */ -#define C_CTL_DIG 0x20 /* Digital modes settings & status */ -#define C_CTL_RIT 0x21 /* RIT/XIT control */ -#define C_SEND_SEL_FREQ 0x25 /* Send/Recv sel/unsel VFO frequency */ -#define C_CTL_MTEXT 0x70 /* Microtelecom Extension */ -#define C_CTL_MISC 0x7f /* Miscellaneous control, Sc */ - -/* - * Sc controller sub commands - */ - - -/* - * Set mode data (C_SET_MODE) sub commands - */ -#define S_LSB 0x00 /* Set to LSB */ -#define S_USB 0x01 /* Set to USB */ -#define S_AM 0x02 /* Set to AM */ -#define S_AMN 0x02 /* Set to AM-N */ -#define S_CW 0x03 /* Set to CW */ -#define S_RTTY 0x04 /* Set to RTTY */ -#define S_FM 0x05 /* Set to FM */ -#define S_FMN 0x05 /* Set to FM-N */ -#define S_WFM 0x06 /* Set to Wide FM */ -#define S_CWR 0x07 /* Set to CW Reverse */ -#define S_RTTYR 0x08 /* Set to RTTY Reverse */ -#define S_AMS 0x11 /* Set to AMS */ -#define S_PSK 0x12 /* 7800 PSK USB */ -#define S_PSKR 0x13 /* 7800 PSK LSB */ -#define S_SAML 0x14 /* Set to AMS-L */ -#define S_SAMU 0x15 /* Set to AMS-U */ -#define S_P25 0x16 /* Set to P25 */ -#define S_DSTAR 0x17 /* Set to D-STAR */ -#define S_DPMR 0x18 /* Set to dPMR */ -#define S_NXDNVN 0x19 /* Set to NXDN_VN */ -#define S_NXDN_N 0x20 /* Set to NXDN-N */ -#define S_DCR 0x21 /* Set to DCR */ -#define S_DD 0x22 /* Set to DD 1200Mhz only? */ - -#define S_R7000_SSB 0x05 /* Set to SSB on R-7000 */ - -/* filter width coding for older ICOM rigs with 2 filter width */ -/* there is no special 'wide' for that rigs */ -#define PD_MEDIUM_2 0x01 /* Medium */ -#define PD_NARROW_2 0x02 /* Narrow */ - -/* filter width coding for newer ICOM rigs with 3 filter width */ -#define PD_WIDE_3 0x01 /* Wide */ -#define PD_MEDIUM_3 0x02 /* Medium */ -#define PD_NARROW_3 0x03 /* Narrow */ - -/* - * Set VFO (C_SET_VFO) sub commands - */ -#define S_VFOA 0x00 /* Set to VFO A */ -#define S_VFOB 0x01 /* Set to VFO B */ -#define S_BTOA 0xa0 /* VFO A=B */ -#define S_XCHNG 0xb0 /* Switch VFO A and B */ -#define S_SUBTOMAIN 0xb1 /* MAIN = SUB */ -#define S_DUAL_OFF 0xc0 /* Dual watch off */ -#define S_DUAL_ON 0xc1 /* Dual watch on */ -#define S_DUAL 0xc2 /* Dual watch (0 = off, 1 = on) */ -#define S_MAIN 0xd0 /* Select MAIN band */ -#define S_SUB 0xd1 /* Select SUB band */ -#define S_SUB_SEL 0xd2 /* Read/Set Main/Sub selection */ -#define S_FRONTWIN 0xe0 /* Select front window */ - -/* - * Set MEM (C_SET_MEM) sub commands - */ -#define S_BANK 0xa0 /* Select memory bank (aka 'memory group' with IC-R8600) */ - -/* - * Scan control (C_CTL_SCAN) subcommands - */ -#define S_SCAN_STOP 0x00 /* Stop scan/window scan */ -#define S_SCAN_START 0x01 /* Programmed/Memory scan */ -#define S_SCAN_PROG 0x02 /* Programmed scan */ -#define S_SCAN_DELTA 0x03 /* Delta-f scan */ -#define S_SCAN_WRITE 0x04 /* auto memory-write scan */ -#define S_SCAN_FPROG 0x12 /* Fine programmed scan */ -#define S_SCAN_FDELTA 0x13 /* Fine delta-f scan */ -#define S_SCAN_MEM2 0x22 /* Memory scan */ -#define S_SCAN_SLCTN 0x23 /* Selected number memory scan */ -#define S_SCAN_SLCTM 0x24 /* Selected mode memory scan */ -#define S_SCAN_PRIO 0x42 /* Priority / window scan */ -#define S_SCAN_FDFOF 0xA0 /* Fix dF OFF */ -#define S_SCAN_FDF5I 0xA1 /* Fix range +/-5kHz */ -#define S_SCAN_FDF1X 0xA2 /* Fix range +/-10kHz */ -#define S_SCAN_FDF2X 0xA3 /* Fix range +/-20kHz */ -#define S_SCAN_FDF5X 0xA4 /* Fix range +/-50kHz */ -#define S_SCAN_FDF1C 0xA5 /* Fix range +/-100kHz */ -#define S_SCAN_FDF5C 0xA6 /* Fix range +/-500kHz */ -#define S_SCAN_FDF1M 0xA7 /* Fix range +/-1MHz */ -#define S_SCAN_FDFON 0xAA /* Fix dF ON */ -#define S_SCAN_NSLCT 0xB0 /* Set as non select channel */ -#define S_SCAN_SLCT 0xB1 /* Set as select channel */ -#define S_SCAN_SL_NUM 0xB2 /* select programed mem scan 7800 only */ -#define S_SCAN_RSMOFF 0xD0 /* Set scan resume OFF */ -#define S_SCAN_RSMONP 0xD1 /* Set scan resume ON + pause time */ -#define S_SCAN_RSMON 0xD3 /* Set scan resume ON */ - - -/* - * Split control (S_CTL_SPLT) subcommands - */ -#define S_SPLT_OFF 0x00 /* Split OFF */ -#define S_SPLT_ON 0x01 /* Split ON */ -#define S_DUP_OFF 0x10 /* Simplex mode */ -#define S_DUP_M 0x11 /* Duplex - mode */ -#define S_DUP_P 0x12 /* Duplex + mode */ - -/* - * Set Attenuator (C_CTL_ATT) subcommands - */ -#define S_ATT_RD -1 /* Without subcommand, reads out setting */ -#define S_ATT_OFF 0x00 /* Off */ -#define S_ATT_6dB 0x06 /* 6 dB, IC-756Pro */ -#define S_ATT_10dB 0x10 /* 10 dB */ -#define S_ATT_12dB 0x12 /* 12 dB, IC-756Pro */ -#define S_ATT_18dB 0x18 /* 18 dB, IC-756Pro */ -#define S_ATT_20dB 0x20 /* 20 dB */ -#define S_ATT_30dB 0x30 /* 30 dB, or Att on for IC-R75 */ - -/* - * Set Preamp (S_FUNC_PAMP) data - */ -#define D_PAMP_OFF 0x00 -#define D_PAMP1 0x01 -#define D_PAMP2 0x02 - -/* - * Set AGC (S_FUNC_AGC) data - */ -#define D_AGC_FAST 0x00 -#define D_AGC_MID 0x01 -#define D_AGC_SLOW 0x02 -#define D_AGC_SUPERFAST 0x03 /* IC746 pro */ - -/* - * Set antenna (C_SET_ANT) subcommands - */ -#define S_ANT_RD -1 /* Without subcommand, reads out setting */ -#define S_ANT1 0x00 /* Antenna 1 */ -#define S_ANT2 0x01 /* Antenna 2 */ - -/* - * Announce control (C_CTL_ANN) subcommands - */ -#define S_ANN_ALL 0x00 /* Announce all */ -#define S_ANN_FREQ 0x01 /* Announce freq */ -#define S_ANN_MODE 0x02 /* Announce operating mode */ - -/* - * Function settings (C_CTL_LVL) subcommands - */ -#define S_LVL_AF 0x01 /* AF level setting */ -#define S_LVL_RF 0x02 /* RF level setting */ -#define S_LVL_SQL 0x03 /* SQL level setting */ -#define S_LVL_IF 0x04 /* IF shift setting */ -#define S_LVL_APF 0x05 /* APF level setting */ -#define S_LVL_NR 0x06 /* NR level setting */ -#define S_LVL_PBTIN 0x07 /* Twin PBT setting (inside) */ -#define S_LVL_PBTOUT 0x08 /* Twin PBT setting (outside) */ -#define S_LVL_CWPITCH 0x09 /* CW pitch setting */ -#define S_LVL_RFPOWER 0x0a /* RF power setting */ -#define S_LVL_MICGAIN 0x0b /* MIC gain setting */ -#define S_LVL_KEYSPD 0x0c /* Key Speed setting */ -#define S_LVL_NOTCHF 0x0d /* Notch freq. setting */ -#define S_LVL_COMP 0x0e /* Compressor level setting */ -#define S_LVL_BKINDL 0x0f /* BKin delay setting */ -#define S_LVL_BALANCE 0x10 /* Balance setting (Dual watch) */ -#define S_LVL_AGC 0x11 /* AGC (7800) */ -#define S_LVL_NB 0x12 /* NB setting */ -#define S_LVL_DIGI 0x13 /* DIGI-SEL (7800) */ -#define S_LVL_DRIVE 0x14 /* DRIVE gain setting */ -#define S_LVL_MON 0x15 /* Monitor gain setting */ -#define S_LVL_VOXGAIN 0x16 /* VOX gain setting */ -#define S_LVL_ANTIVOX 0x17 /* Anti VOX gain setting */ -#define S_LVL_CONTRAST 0x18 /* CONTRAST level setting */ -#define S_LVL_BRIGHT 0x19 /* BRIGHT level setting */ -#define S_LVL_BASS 0x1B /* Bass level setting */ -#define S_LVL_TREBLE 0x1C /* Treble level setting */ -#define S_LVL_SCNSPD 0x1D /* Scan speed */ -#define S_LVL_SCNDEL 0x1E /* Scan delay */ -#define S_LVL_PRIINT 0x1F /* PRIO interval */ -#define S_LVL_RESTIM 0x20 /* Resume time */ - -/* - * Read squelch condition/S-meter level/other meter levels (C_RD_SQSM) subcommands - */ -#define S_SQL 0x01 /* Read squelch condition */ -#define S_SML 0x02 /* Read S-meter level */ -#define S_SMF 0x03 /* Read S-meter level in AAAABBCC format */ -#define S_CML 0x04 /* Read centre -meter level */ -#define S_CSQL 0x05 /* Read combined squelch conditions */ -#define S_SAMS 0x06 /* Read S-AM Sync indicator */ -#define S_OVF 0x07 /* Read OVF indicator status */ -#define S_RFML 0x11 /* Read RF-meter level */ -#define S_SWR 0x12 /* Read SWR-meter level */ -#define S_ALC 0x13 /* Read ALC-meter level */ -#define S_CMP 0x14 /* Read COMP-meter level */ -#define S_VD 0x15 /* Read Vd-meter level */ -#define S_ID 0x16 /* Read Id-meter level */ - -/* - * Function settings (C_CTL_FUNC) subcommands Set and Read - */ -#define S_FUNC_PAMP 0x02 /* Preamp setting */ -#define S_FUNC_AGCOFF 0x10 /* IC-R8500 only */ -#define S_FUNC_AGCON 0x11 /* IC-R8500 only */ -#define S_FUNC_AGC 0x12 /* AGC setting presets: the dsp models allow these to be modified */ -#define S_FUNC_NBOFF 0x20 /* IC-R8500 only */ -#define S_FUNC_NBON 0x21 /* IC-R8500 only */ -#define S_FUNC_NB 0x22 /* NB setting */ -#define S_FUNC_APFOFF 0x30 /* IC-R8500 only */ -#define S_FUNC_APFON 0x31 /* IC-R8500 only */ -#define S_FUNC_APF 0x32 /* APF setting */ -#define S_FUNC_NR 0x40 /* NR setting */ -#define S_FUNC_ANF 0x41 /* ANF setting */ -#define S_FUNC_TONE 0x42 /* TONE setting */ -#define S_FUNC_TSQL 0x43 /* TSQL setting */ -#define S_FUNC_COMP 0x44 /* COMP setting */ -#define S_FUNC_MON 0x45 /* Monitor setting */ -#define S_FUNC_VOX 0x46 /* VOX setting */ -#define S_FUNC_BKIN 0x47 /* BK-IN setting */ -#define S_FUNC_MN 0x48 /* Manual notch setting */ -#define S_FUNC_RF 0x49 /* RTTY Filter setting */ -#define S_FUNC_AFC 0x4A /* Auto Frequency Control (AFC) setting */ -#define S_FUNC_CSQL 0x4B /* DTCS tone code squelch setting*/ -#define S_FUNC_VSC 0x4C /* voice squelch control useful for scanning*/ -#define S_FUNC_MANAGC 0x4D /* manual AGC */ -#define S_FUNC_DIGISEL 0x4E /* DIGI-SEL */ -#define S_FUNC_TW_PK 0x4F /* RTTY Twin Peak filter 0= off 1 = on */ -#define S_FUNC_DIAL_LK 0x50 /* Dial lock */ -#define S_FUNC_P25SQL 0x52 /* P25 DSQL */ -#define S_FUNC_ANTRX 0x53 /* ANT-RX */ -#define S_FUNC_IF1F 0x55 /* 1st IF filter */ -#define S_FUNC_DSPF 0x56 /* DSP filter */ -#define S_FUNC_MANN 0x57 /* Manual notch width */ -#define S_FUNC_SSBT 0x58 /* SSB Tx bandwidth */ -#define S_FUNC_SUBB 0x59 /* Sub band */ -#define S_FUNC_SATM 0x5A /* Satellite mode */ -#define S_FUNC_DSSQL 0x5B /* D-STAR DSQL */ -#define S_FUNC_DPSQL 0x5F /* dPMR DSQL */ -#define S_FUNC_NXSQL 0x60 /* NXDN DSQL */ -#define S_FUNC_DCSQL 0x61 /* DCR DSQL */ -#define S_FUNC_DPSCM 0x62 /* dPMR scrambler */ -#define S_FUNC_NXENC 0x63 /* NXDN encryption */ -#define S_FUNC_DCENC 0x64 /* DCR encryption */ -#define S_FUNC_IPP 0x65 /* IP+ setting */ - -/* - * Set Power On/Off (C_SET_PWR) subcommands - */ -#define S_PWR_OFF 0x00 -#define S_PWR_ON 0x01 -#define S_PWR_STDBY 0x02 - -/* - * Transmit control (C_CTL_PTT) subcommands - */ -#define S_PTT 0x00 -#define S_ANT_TUN 0x01 /* Auto tuner 0=OFF, 1 = ON, 2=Start Tuning */ - -/* - * RIT/XIT control (C_CTL_RIT) subcommands - */ -#define S_RIT_FREQ 0x00 -#define S_RIT 0x01 /* RIT 0 = OFF, 1 = ON */ -#define S_XIT 0x02 /* XIT (delta TX) 0 = OFF, 1 = ON */ - -/* - * Misc contents (C_CTL_MEM) subcommands applies to newer rigs. - * - * Beware the IC-7200 which is non-standard. - */ -#define S_MEM_CNTNT 0x00 /* Memory content 2 bigendian */ -#define S_MEM_BAND_REG 0x01 /* band stacking register */ -#define S_MEM_FILT_WDTH 0x03 /* current passband filter width */ -#define S_MEM_PARM 0x05 /* rig parameters; extended parm # + param value: should be coded */ - /* in the rig files because they are different for each rig */ -#define S_MEM_DATA_MODE 0x06 /* data mode */ -#define S_MEM_TX_PB 0x07 /* SSB tx passband */ -#define S_MEM_FLTR_SHAPE 0x08 /* DSP filter shape 0=sharp 1=soft */ - - /* Icr75c */ -#define S_MEM_CNTNT_SLCT 0x01 -#define S_MEM_FLT_SLCT 0x01 -#define S_MEM_MODE_SLCT 0x02 - /* For IC-910H rig. */ -#define S_MEM_RDWR_MEM 0x00 /* Read/write memory channel */ -#define S_MEM_SATMEM 0x01 /* Satellite memory */ -#define S_MEM_VOXGAIN 0x02 /* VOX gain level (0=0%, 255=100%) */ -#define S_MEM_VOXDELAY 0x03 /* VOX delay (0=0.0 sec, 20=2.0 sec) */ -#define S_MEM1_VOXDELAY 0x05 /* VOX delay (0=0.0 sec, 20=2.0 sec) */ -#define S_MEM_ANTIVOX 0x04 /* anti VOX setting */ -#define S_MEM_RIT 0x06 /* RIT (0=off, 1=on, 2=sub dial) */ -#define S_MEM_SATMODE910 0x07 /* Satellite mode (on/off) */ -#define S_MEM_BANDSCOPE 0x08 /* Simple bandscope (on/off) */ - -/* For IC9700 and IC9100 and likely future Icoms */ -#define S_MEM_SATMODE 0x5a /* Satellite mode (on/off) */ - -/* IC-R8600 and others */ -#define S_MEM_SKIP_SLCT_OFF 0x00 -#define S_MEM_SKIP_SLCT_ON 0x10 -#define S_MEM_PSKIP_SLCT_ON 0x20 -#define S_MEM_DUP_OFF 0x00 -#define S_MEM_DUP_MINUS 0x01 -#define S_MEM_DUP_PLUS 0x02 -#define S_MEM_TSTEP_OFF 0x00 -#define S_MEM_TSTEP_ON 0x01 -#define S_FUNC_IPPLUS 0x07 /* IP+ subcommand 0x1a 0x07 */ - -/* IC-R6 */ -#define S_MEM_AFLT 0x00 /* AF LPF Off/On */ - -/* IC-R30 */ -#define S_MEM_ANL 0x00 /* ANL Off/On */ - -/* - * Tone control (C_SET_TONE) subcommands - */ -#define S_TONE_RPTR 0x00 /* Tone frequency setting for repeater receive */ -#define S_TONE_SQL 0x01 /* Tone frequency setting for squelch */ -#define S_TONE_DTCS 0x02 /* DTCS code and polarity for squelch */ -#define S_TONE_P25NAC 0x03 /* P25 NAC */ -#define S_TONE_DSCSQL 0x07 /* D-STAR CSQL */ -#define S_TONE_DPCOM 0x08 /* dPMR COM ID */ -#define S_TONE_DPCC 0x09 /* dPMR CC */ -#define S_TONE_NXRAN 0x0A /* NXDN RAN */ -#define S_TONE_DCUC 0x0B /* DCR UC */ -#define S_TONE_DPSCK 0x0C /* dPMR scrambler key */ -#define S_TONE_NXENK 0x0D /* NXDN encryption key */ -#define S_TONE_DCENK 0x0E /* DCR encryption key */ - -/* - * Transceiver ID (C_RD_TRXID) subcommands - */ -#define S_RD_TRXID 0x00 - -/* - * Digital modes settings & status subcommands - */ -#define S_DIG_DSCALS 0x00 /* D-STAR Call sign */ -#define S_DIG_DSMESS 0x01 /* D-STAR Message */ -#define S_DIG_DSRSTS 0x02 /* D-STAR Rx status */ -#define S_DIG_DSGPSD 0x03 /* D-STAR GPS data */ -#define S_DIG_DSGPSM 0x04 /* D-STAR GPS message */ -#define S_DIG_DSCSQL 0x05 /* D-STAR CSQL */ -#define S_DIG_P25ID 0x06 /* P25 ID */ -#define S_DIG_P25STS 0x07 /* P25 Rx status */ -#define S_DIG_DPRXID 0x08 /* dPMR Rx ID */ -#define S_DIG_DPRSTS 0x09 /* dPMR Rx status */ -#define S_DIG_NXRXID 0x0A /* NXDN Rx ID */ -#define S_DIG_NXRSTS 0x0B /* NXDN Rx status */ -#define S_DIG_DCRXID 0x0C /* DCR Rx ID */ -#define S_DIG_DCRSTS 0x0D /* DCR Rx status */ - -/* - * C_CTL_MISC OptoScan extension - */ -#define S_OPTO_LOCAL 0x01 -#define S_OPTO_REMOTE 0x02 -#define S_OPTO_TAPE_ON 0x03 -#define S_OPTO_TAPE_OFF 0x04 -#define S_OPTO_RDSTAT 0x05 -#define S_OPTO_RDCTCSS 0x06 -#define S_OPTO_RDDCS 0x07 -#define S_OPTO_RDDTMF 0x08 -#define S_OPTO_RDID 0x09 -#define S_OPTO_SPKRON 0x0a -#define S_OPTO_SPKROFF 0x0b -#define S_OPTO_5KSCON 0x0c -#define S_OPTO_5KSCOFF 0x0d -#define S_OPTO_NXT 0x0e -#define S_OPTO_SCON 0x0f -#define S_OPTO_SCOFF 0x10 - -/* - * OmniVIPlus (Omni VI) extensions - */ -#define C_OMNI6_XMT 0x16 - -/* - * S_MEM_MODE_SLCT Misc CI-V Mode settings - */ -#define S_PRM_BEEP 0x02 -#define S_PRM_CWPITCH 0x10 -#define S_PRM_LANG 0x15 -#define S_PRM_BACKLT 0x21 -#define S_PRM_SLEEP 0x32 -#define S_PRM_SLPTM 0x33 -#define S_PRM_TIME 0x27 - -/* - * Tokens for Extra Level and Parameters common to multiple rigs. Use token # > 99. Defined here so they - * will be available in ICOM name space. They have different internal commands primarily in dsp rigs. These - * tokens are used ext_lvl and ext_parm funtions in the individual rig files. - * Extra parameters which are rig specific should be coded in the individual rig files and token #s < 100. - */ - -#define TOKEN_BACKEND(t) (t) - -#define TOK_RTTY_FLTR TOKEN_BACKEND(100) -#define TOK_SSBBASS TOKEN_BACKEND(101) -#define TOK_SQLCTRL TOKEN_BACKEND(102) -#define TOK_DRIVE_GAIN TOKEN_BACKEND(103) -#define TOK_DIGI_SEL_FUNC TOKEN_BACKEND(104) -#define TOK_DIGI_SEL_LEVEL TOKEN_BACKEND(105) - -#endif /* _ICOM_DEFS_H */ diff --git a/icom/icr10.c b/icom/icr10.c deleted file mode 100644 index f8b7d69b8..000000000 --- a/icom/icr10.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R10 - * Copyright (c) 2000-2004 by Stephane Fillod - * Copyright (c) 2017 Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "idx_builtin.h" - -#define ICR10_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM) - -#define ICR10_FUNC_ALL (RIG_FUNC_NONE) - -#define ICR10_LEVEL_ALL (RIG_LEVEL_RAWSTR) - -#define ICR10_VFO_ALL (RIG_VFO_A) - -#define ICR10_VFO_OPS (RIG_OP_NONE) -#define ICR10_SCAN_OPS (RIG_SCAN_NONE) - -#define ICR10_STR_CAL { 2, \ - { \ - { 0, -60 }, /* S0 */ \ - { 160, 60 } /* +60 */ \ - } } - -static const struct icom_priv_caps icr10_priv_caps = -{ - 0x52, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ -}; - -const struct rig_caps icr10_caps = -{ - .rig_model = RIG_MODEL_ICR10, - .model_name = "IC-R10", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR10_FUNC_ALL, - .has_set_func = ICR10_FUNC_ALL, - .has_get_level = ICR10_LEVEL_ALL, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR10_VFO_OPS, - .scan_ops = ICR10_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(500), GHz(1.3), ICR10_MODES, -1, -1, ICR10_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(500), MHz(823.9999), ICR10_MODES, -1, -1, ICR10_VFO_ALL}, - {MHz(849), MHz(868.9999), ICR10_MODES, -1, -1, ICR10_VFO_ALL}, - {MHz(894), GHz(1.3), ICR10_MODES, -1, -1, ICR10_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR10_MODES, Hz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(4)}, - {RIG_MODE_AM | RIG_MODE_FM, kHz(15)}, - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICR10_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr10_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, /* TODO: do not pass bandwidth data */ - .get_mode = icom_get_mode, - - .decode_event = icom_decode_event, - .get_level = icom_get_level, - .get_dcd = icom_get_dcd, - -}; - - diff --git a/icom/icr20.c b/icom/icr20.c deleted file mode 100644 index 9e7569a3e..000000000 --- a/icom/icr20.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R20 - * Copyright (c) 2004 by Stephane Fillod - * Copyright (c) 2004 by Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "idx_builtin.h" - -#define ICR20_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM) - -#define ICR20_FUNC_ALL (RIG_FUNC_NONE) - -#define ICR20_LEVEL_ALL (RIG_LEVEL_RAWSTR) - -#define ICR20_VFO_ALL (RIG_VFO_A) - -#define ICR20_VFO_OPS (RIG_OP_NONE) -#define ICR20_SCAN_OPS (RIG_SCAN_NONE) - -#define ICR20_STR_CAL { 2, \ - { \ - { 0, -60 }, /* S0 */ \ - { 255, 60 } /* +60 */ \ - } } - -static const struct icom_priv_caps icr20_priv_caps = -{ - 0x6c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ -}; - -const struct rig_caps icr20_caps = -{ - .rig_model = RIG_MODEL_ICR20, - .model_name = "IC-R20", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR20_FUNC_ALL, - .has_set_func = ICR20_FUNC_ALL, - .has_get_level = ICR20_LEVEL_ALL, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR20_VFO_OPS, - .scan_ops = ICR20_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - /* Only through cloning mode OPC-1382 */ - .chan_list = { - { 1, 999, RIG_MTYPE_MEM }, /* TBC */ - { 1000, 1199, RIG_MTYPE_MEM }, /* auto-write */ - { 1200, 1249, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { /* Other countries but France */ - {kHz(150), GHz(3.304999), ICR20_MODES, -1, -1, ICR20_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { /* USA */ - {kHz(150), MHz(821.999), ICR20_MODES, -1, -1, ICR20_VFO_ALL}, - {MHz(851), MHz(866.999), ICR20_MODES, -1, -1, ICR20_VFO_ALL}, - {MHz(896), GHz(1.304999), ICR20_MODES, -1, -1, ICR20_VFO_ALL}, - {GHz(1.305), GHz(3.304999), ICR20_MODES, -1, -1, ICR20_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR20_MODES, Hz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(1.8)}, - {RIG_MODE_AM | RIG_MODE_FM, kHz(12)}, - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICR20_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr20_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, /* TODO: do not pass bandwidth data */ - .get_mode = icom_get_mode, - /* .set_vfo = icom_set_vfo, */ - - .decode_event = icom_decode_event, - .get_level = icom_get_level, - .get_dcd = icom_get_dcd, - -}; - - diff --git a/icom/icr30.c b/icom/icr30.c deleted file mode 100644 index 24e6ad920..000000000 --- a/icom/icr30.c +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R30 - * Copyright (c) 2018 Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "idx_builtin.h" -#include "icom_defs.h" -#include "frame.h" - -#define ICR30_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_AM|RIG_MODE_AMN|\ - RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_FMN|RIG_MODE_WFM|\ - RIG_MODE_RTTYR|RIG_MODE_SAM|RIG_MODE_SAL|RIG_MODE_SAH|RIG_MODE_P25|\ - RIG_MODE_DSTAR|RIG_MODE_DPMR|RIG_MODE_NXDNVN|RIG_MODE_NXDN_N|RIG_MODE_DCR) - -#define ICR30_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_TSQL|RIG_FUNC_AFC|RIG_FUNC_VSC|\ - RIG_FUNC_CSQL|RIG_FUNC_DSQL|RIG_FUNC_ANL|RIG_FUNC_CSQL|RIG_FUNC_SCEN) - -#define ICR30_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|\ - RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) - -#define ICR30_VFO_ALL (RIG_VFO_A) - -#define ICR30_VFO_OPS (RIG_VFO_MAIN|RIG_VFO_SUB) -#define ICR30_SCAN_OPS (RIG_SCAN_NONE) - -#define ICR30_STR_CAL { 2, \ - { \ - { 0, -60 }, /* S0 */ \ - { 255, 60 } /* +60 */ \ - } } - -/* - * This function does the special bandwidth coding for IC-R30 - * (1 - normal, 2 - narrow) - */ - -static int icr30_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) -{ - int err; - - err = rig2icom_mode(rig, mode, width, md, pd); - - if (*pd == PD_NARROW_3) - { - *pd = PD_NARROW_2; - } - - return err; -} - -/* - * This function handles the -N modes for IC-R30 - */ - -int icr30_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) -{ - if (mode & (RIG_MODE_AMN | RIG_MODE_FMN)) - { - return icom_set_mode(rig, vfo, mode, (pbwidth_t)1); - } - else - { - return icom_set_mode(rig, vfo, mode, width); - } -} - -static const struct icom_priv_caps icr30_priv_caps = -{ - 0x9c, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list, /* wrong, but don't have set_ts anyway */ - .r2i_mode = icr30_r2i_mode, - .offs_len = 4 -}; - -const struct rig_caps icr30_caps = -{ - .rig_model = RIG_MODEL_ICR30, - .model_name = "IC-R30", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR30_FUNC_ALL, - .has_set_func = ICR30_FUNC_ALL, - .has_get_level = ICR30_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR30_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { 15, 30, 35, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR30_VFO_OPS, - .scan_ops = ICR30_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 999, RIG_MTYPE_MEM }, /* TBC */ - { 1000, 1199, RIG_MTYPE_MEM }, /* auto-write */ - { 1200, 1299, RIG_MTYPE_EDGE }, /* two by two */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { /* Other countries but France */ - {kHz(100), GHz(3.3049999), ICR30_MODES, -1, -1, ICR30_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { /* USA */ - {kHz(100), MHz(821.995), ICR30_MODES, -1, -1, ICR30_VFO_ALL}, - {MHz(851), MHz(866.995), ICR30_MODES, -1, -1, ICR30_VFO_ALL}, - {MHz(896), GHz(3.3049999), ICR30_MODES, -1, -1, ICR30_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR30_MODES, Hz(10)}, - {ICR30_MODES, Hz(100)}, - {ICR30_MODES, Hz(1000)}, - {ICR30_MODES, Hz(3125)}, - {ICR30_MODES, Hz(5000)}, - {ICR30_MODES, Hz(6250)}, - {ICR30_MODES, Hz(8330)}, - {ICR30_MODES, Hz(9000)}, - {ICR30_MODES, Hz(10000)}, - {ICR30_MODES, Hz(12500)}, - {ICR30_MODES, kHz(15)}, - {ICR30_MODES, kHz(20)}, - {ICR30_MODES, kHz(25)}, - {ICR30_MODES, kHz(30)}, - {ICR30_MODES, kHz(50)}, - {ICR30_MODES, kHz(100)}, - {ICR30_MODES, kHz(125)}, - {ICR30_MODES, kHz(200)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_USB | RIG_MODE_LSB, kHz(1.8)}, - {RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_AMN | RIG_MODE_FMN, kHz(12)}, - {RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_AMN | RIG_MODE_FMN, kHz(6)}, - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICR30_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr30_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icr30_set_mode, - .get_mode = icom_get_mode, - .vfo_op = icom_vfo_op, - .set_vfo = icom_set_vfo, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - .set_bank = icom_set_bank, - .set_mem = icom_set_mem, - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .get_dcd = icom_get_dcd, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, -}; diff --git a/icom/icr6.c b/icom/icr6.c deleted file mode 100644 index e0c1dfe59..000000000 --- a/icom/icr6.c +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R6 - * Copyright (c) 2017 Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "idx_builtin.h" - -#define ICR6_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) - -#define ICR6_FUNC_ALL (RIG_FUNC_TSQL|RIG_FUNC_VSC|RIG_FUNC_CSQL|RIG_FUNC_AFLT|RIG_FUNC_DSQL) - -#define ICR6_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) - -#define ICR6_VFO_ALL (RIG_VFO_A) - -#define ICR6_VFO_OPS (RIG_OP_NONE) -#define ICR6_SCAN_OPS (RIG_SCAN_NONE) - -#define ICR6_STR_CAL { 2, \ - { \ - { 0, -60 }, /* S0 */ \ - { 255, 60 } /* +60 */ \ - } } - -static const struct icom_priv_caps icr6_priv_caps = -{ - 0x7e, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ -}; - -const struct rig_caps icr6_caps = -{ - .rig_model = RIG_MODEL_ICR6, - .model_name = "IC-R6", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR6_FUNC_ALL, - .has_set_func = ICR6_FUNC_ALL, - .has_get_level = ICR6_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR6_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR6_VFO_OPS, - .scan_ops = ICR6_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = {RIG_CHAN_END,}, - - .rx_range_list1 = { /* Other countries but France */ - {kHz(100), GHz(1.309995), ICR6_MODES, -1, -1, ICR6_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { /* USA */ - {kHz(100), MHz(821.995), ICR6_MODES, -1, -1, ICR6_VFO_ALL}, - {MHz(851), MHz(866.995), ICR6_MODES, -1, -1, ICR6_VFO_ALL}, - {MHz(896), GHz(1.309995), ICR6_MODES, -1, -1, ICR6_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR6_MODES, Hz(5000)}, - {ICR6_MODES, Hz(6250)}, - {ICR6_MODES, Hz(10000)}, - {ICR6_MODES, Hz(12500)}, - {ICR6_MODES, kHz(15)}, - {ICR6_MODES, kHz(20)}, - {ICR6_MODES, kHz(25)}, - {ICR6_MODES, kHz(30)}, - {ICR6_MODES, kHz(50)}, - {ICR6_MODES, kHz(100)}, - {ICR6_MODES, kHz(125)}, - {ICR6_MODES, kHz(200)}, - /* Air band only */ - {ICR6_MODES, Hz(8330)}, - /* AM broadcast band only */ - {ICR6_MODES, Hz(9000)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_AM | RIG_MODE_FM, kHz(12)}, - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICR6_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr6_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .get_dcd = icom_get_dcd, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, -}; diff --git a/icom/icr7000.c b/icom/icr7000.c deleted file mode 100644 index 420a1b863..000000000 --- a/icom/icr7000.c +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Hamlib CI-V backend - IC-R7000 and IC-R7100 descriptions - * Copyright (c) 2000-2004 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "serial.h" -#include "misc.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - - -#define ICR7000_MODES (RIG_MODE_AM|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM) - -#define ICR7000_OPS (RIG_OP_FROM_VFO|RIG_OP_MCL) - -static int r7000_set_freq(RIG *rig, vfo_t vfo, freq_t freq); - -#define ICR7100_FUNCS (RIG_FUNC_VSC) -#define ICR7100_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR) -#define ICR7100_PARMS (RIG_PARM_ANN) -#define ICR7100_SCAN_OPS (RIG_SCAN_MEM) /* TBC */ - -/* FIXME: S-Meter measurements */ -#define ICR7100_STR_CAL UNKNOWN_IC_STR_CAL - -static const struct icom_priv_caps icr7000_priv_caps = -{ - 0x08, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r7100_ts_sc_list -}; -/* - * ICR7000 rigs capabilities. - */ -const struct rig_caps icr7000_caps = -{ - .rig_model = RIG_MODEL_ICR7000, - .model_name = "IC-R7000", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR7000_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(25), MHz(1000), ICR7000_MODES, -1, -1, RIG_VFO_A}, - {MHz(1025), MHz(2000), ICR7000_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {MHz(25), MHz(1000), ICR7000_MODES, -1, -1, RIG_VFO_A}, - {MHz(1025), MHz(2000), ICR7000_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ - - .tuning_steps = { - {ICR7000_MODES, 100}, /* resolution */ -#if 0 - {ICR7000_MODES, kHz(1)}, - {ICR7000_MODES, kHz(5)}, - {ICR7000_MODES, kHz(10)}, - {ICR7000_MODES, 12500}, - {ICR7000_MODES, kHz(25)}, -#endif - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB, kHz(2.8)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(15)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, /* narrow */ - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr7000_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = r7000_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, -}; - - -static const struct icom_priv_caps icr7100_priv_caps = -{ - 0x34, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r7100_ts_sc_list -}; -/* - * ICR7100A rig capabilities. - */ -const struct rig_caps icr7100_caps = -{ - .rig_model = RIG_MODEL_ICR7100, - .model_name = "IC-R7100", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - - .has_get_func = ICR7100_FUNCS, - .has_set_func = ICR7100_FUNCS, - .has_get_level = ICR7100_LEVELS, - .has_set_level = RIG_LEVEL_SET(ICR7100_LEVELS), - .has_get_parm = ICR7100_PARMS, - .has_set_parm = RIG_PARM_SET(ICR7100_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END }, - .attenuator = { 20, RIG_DBLST_END }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR7000_OPS, - .scan_ops = ICR7100_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, /* TBC */ - { 0x0900, 0x0909, RIG_MTYPE_EDGE }, /* 2 by 2 */ - { 0x0910, 0x0919, RIG_MTYPE_EDGE }, /* 2 by 2 */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(25), MHz(1999.9999), ICR7000_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {MHz(25), MHz(1999.9999), ICR7000_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ - - .tuning_steps = { - {ICR7000_MODES, 100}, /* resolution */ - {ICR7000_MODES, kHz(1)}, - {ICR7000_MODES, kHz(5)}, - {ICR7000_MODES, kHz(10)}, - {ICR7000_MODES, 12500}, - {ICR7000_MODES, kHz(20)}, - {ICR7000_MODES, kHz(25)}, - {ICR7000_MODES, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB, kHz(2.4)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(15)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, /* narrow */ - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICR7100_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr7100_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = r7000_set_freq, /* TBC for R7100 */ - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, -#ifdef XXREMOVEDXX - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, -#endif - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, -}; - - -/* - * Function definitions below - */ - - -/* - * r7000_set_freq - */ -static int r7000_set_freq(RIG *rig, vfo_t vfo, freq_t freq) -{ - long long f = (long long)freq; - - /* - * The R7000 cannot set freqencies higher than 1GHz, - * this is done by flipping a switch on the front panel and - * stripping the most significant digit. - * This is the only change with the common icom_set_freq - */ - f %= (long long)GHz(1); - - return icom_set_freq(rig, vfo, (freq_t)f); -} - diff --git a/icom/icr71.c b/icom/icr71.c deleted file mode 100644 index 794cb65b7..000000000 --- a/icom/icr71.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R71 - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - -/* FM optional */ -#define ICR71_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) - -#define ICR71_FUNC_ALL (RIG_FUNC_NONE) - -#define ICR71_LEVEL_ALL (RIG_LEVEL_NONE) - -#define ICR71_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) - -#define ICR71_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) -#define ICR71_SCAN_OPS (RIG_SCAN_NONE) - -static const struct icom_priv_caps icr71_priv_caps = -{ - 0x1a, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list /* none actually */ -}; - -const struct rig_caps icr71_caps = -{ - .rig_model = RIG_MODEL_ICR71, - .model_name = "IC-R71", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR71_FUNC_ALL, - .has_set_func = ICR71_FUNC_ALL, - .has_get_level = ICR71_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR71_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR71_VFO_OPS, - .scan_ops = ICR71_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(30), ICR71_MODES, -1, -1, ICR71_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(100), MHz(30), ICR71_MODES, -1, -1, ICR71_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR71_MODES, Hz(10)}, /* resolution */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.3)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, /* optional w/ IC-EX257 unit */ - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr71_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - -}; - - diff --git a/icom/icr72.c b/icom/icr72.c deleted file mode 100644 index bac7ae91a..000000000 --- a/icom/icr72.c +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R72 - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" - -#define ICR72_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY) - -#define ICR72_FUNC_ALL (RIG_FUNC_NONE) - -#define ICR72_LEVEL_ALL (RIG_LEVEL_NONE) - -#define ICR72_VFO_OPS (RIG_OP_TO_VFO|RIG_OP_FROM_VFO|RIG_OP_MCL) - -#define ICR72_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) - -#define ICR71_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define ICR72_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -static const struct icom_priv_caps icr72_priv_caps = -{ - 0x32, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic737_ts_sc_list -}; - -const struct rig_caps icr72_caps = -{ - .rig_model = RIG_MODEL_ICR72, - .model_name = "IC-R72", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 9600, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR72_FUNC_ALL, - .has_set_func = ICR72_FUNC_ALL, - .has_get_level = ICR72_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR72_LEVEL_ALL), - .has_get_parm = RIG_PARM_ANN, - .has_set_parm = RIG_PARM_ANN, - .level_gran = {}, /* granularity */ - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR72_VFO_OPS, - .scan_ops = ICR72_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(30), ICR72_MODES, -1, -1, ICR72_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(100), MHz(30), ICR72_MODES, -1, -1, ICR72_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR72_MODES, Hz(10)}, - {ICR72_MODES, kHz(1)}, - {ICR72_MODES, kHz(2)}, - {ICR72_MODES, kHz(3)}, - {ICR72_MODES, kHz(4)}, - {ICR72_MODES, kHz(5)}, - {ICR72_MODES, kHz(6)}, - {ICR72_MODES, kHz(7)}, - {ICR72_MODES, kHz(8)}, - {ICR72_MODES, kHz(9)}, - {ICR72_MODES, kHz(10)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.3)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr72_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .get_level = icom_get_level, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .scan = icom_scan, - -}; - diff --git a/icom/icr75.c b/icom/icr75.c deleted file mode 100644 index 8d23e64e8..000000000 --- a/icom/icr75.c +++ /dev/null @@ -1,605 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R75 - * Copyright (c) 2000-2004 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "hamlib/rig.h" -#include "misc.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - - -/* - * IC-R75 - * - * TODO: - * $1A command: - * - set_parm, set_trn, IF filter setting, etc. - */ - -#define ICR75_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_AMS) - -#define ICR75_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_ANF|RIG_FUNC_NR) - -#define ICR75_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_PREAMP|RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) - -#define ICR75_PARM_ALL (RIG_PARM_ANN|RIG_PARM_APO|RIG_PARM_BACKLIGHT|RIG_PARM_BEEP|RIG_PARM_TIME) - -#define ICR75_VFO_ALL (RIG_VFO_VFO|RIG_VFO_MEM) - -#define ICR75_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define ICR75_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO) - -#define ICR75_ANTS (RIG_ANT_1|RIG_ANT_2) - -#define ICR75_STR_CAL { 17, { \ - { 0, -60 }, \ - { 37, -54 }, \ - { 52, -48 }, \ - { 61, -42 }, \ - { 72, -36 }, \ - { 86, -30 }, \ - { 95, -24 }, \ - { 109, -18 }, \ - { 124, -12 }, \ - { 128, -6 }, \ - { 146, 0 }, \ - { 166, 10 }, \ - { 186, 20 }, \ - { 199, 30 }, \ - { 225, 40 }, \ - { 233, 50 }, \ - { 255, 60 }, \ - } } - -/* - * channel caps. - */ -#define ICR75_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .ant = 1, \ - .levels = RIG_LEVEL_ATT|RIG_LEVEL_PREAMP, \ - .channel_desc = 1, \ - .flags = 1, \ -} - -static int icr75_set_channel(RIG *rig, const channel_t *chan); -static int icr75_get_channel(RIG *rig, channel_t *chan); -int icr75_set_parm(RIG *rig, setting_t parm, value_t val); -int icr75_get_parm(RIG *rig, setting_t parm, value_t *val); - -static const struct icom_priv_caps icr75_priv_caps = -{ - 0x5a, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r75_ts_sc_list -}; - -const struct rig_caps icr75_caps = -{ - .rig_model = RIG_MODEL_ICR75, - .model_name = "IC-R75", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 1, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR75_FUNC_ALL, - .has_set_func = ICR75_FUNC_ALL, - .has_get_level = ICR75_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR75_LEVEL_ALL), - .has_get_parm = ICR75_PARM_ALL, - .has_set_parm = RIG_PARM_SET(ICR75_PARM_ALL), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_PBT_IN] = { .min = { .f = -1280 }, .max = { .f = +1280 }, .step = { .f = 15 } }, - [LVL_PBT_OUT] = { .min = { .f = -1280 }, .max = { .f = +1280 }, .step = { .f = 15 } }, - [LVL_CWPITCH] = { .min = { .i = 300 }, .max = { .i = 900 }, .step = { .i = 10 } }, - [LVL_NR] = { .min = { .f = 0.0 }, .max = { .f = 1.0 }, .step = { .f = 0.066666667 } }, - }, - .parm_gran = { - [PARM_APO] = { .min = { .i = 1 }, .max = { .i = 1439} }, - [PARM_TIME] = { .min = { .i = 0 }, .max = { .i = 86399} }, - }, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { 10, 20, RIG_DBLST_END, }, /* TBC */ - .attenuator = { 20, RIG_DBLST_END, }, /* TBC */ - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR75_VFO_OPS, - .scan_ops = ICR75_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 8, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, ICR75_MEM_CAP }, - { 100, 101, RIG_MTYPE_EDGE, ICR75_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(30), MHz(60), ICR75_MODES, -1, -1, ICR75_VFO_ALL, ICR75_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(30), MHz(60), ICR75_MODES, -1, -1, ICR75_VFO_ALL, ICR75_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR75_MODES, Hz(10)}, - {ICR75_MODES, Hz(100)}, - {ICR75_MODES, kHz(1)}, - {ICR75_MODES, kHz(5)}, - {ICR75_MODES, kHz(6.25)}, - {ICR75_MODES, kHz(9)}, - {ICR75_MODES, kHz(10)}, - {ICR75_MODES, kHz(12.5)}, - {ICR75_MODES, kHz(20)}, - {ICR75_MODES, kHz(25)}, - {ICR75_MODES, kHz(100)}, - {ICR75_MODES, MHz(1)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(1.9)}, - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(15)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(6)}, - RIG_FLT_END, - }, - .str_cal = ICR75_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr75_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_parm = icr75_set_parm, - .get_parm = icr75_get_parm, - .get_dcd = icom_get_dcd, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - - .set_channel = icr75_set_channel, - .get_channel = icr75_get_channel, - -}; - - -/* - * icr75_set_channel - * Assumes rig!=NULL, rig->state.priv!=NULL, chan!=NULL - * TODO: still a WIP --SF - */ -int icr75_set_channel(RIG *rig, const channel_t *chan) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char chanbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int chan_len, freq_len, ack_len, retval; - unsigned char icmode; - signed char icmode_ext; - int err; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - to_bcd_be(chanbuf, chan->channel_num, 4); - - chanbuf[2] = S_MEM_CNTNT_SLCT; - - freq_len = priv->civ_731_mode ? 4 : 5; - /* - * to_bcd requires nibble len - */ - to_bcd(chanbuf + 3, chan->freq, freq_len * 2); - - chan_len = 2 + freq_len + 1; - - err = rig2icom_mode(rig, chan->mode, chan->width, - &icmode, &icmode_ext); - - if (err != RIG_OK) - { - return err; - } - - chanbuf[chan_len++] = icmode; - chanbuf[chan_len++] = icmode_ext; - - to_bcd_be(chanbuf + chan_len++, - chan->levels[rig_setting2idx(RIG_LEVEL_ATT)].i, 2); - to_bcd_be(chanbuf + chan_len++, - chan->levels[rig_setting2idx(RIG_LEVEL_PREAMP)].i, 2); - - to_bcd_be(chanbuf + chan_len++, chan->ant, 2); - memset(chanbuf + chan_len, 0, 8); - snprintf((char *)(chanbuf + chan_len), 9, "%.8s", chan->channel_desc); - chan_len += 8; - - retval = icom_transaction(rig, C_CTL_MEM, S_MEM_CNTNT, - chanbuf, chan_len, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "icom_set_channel: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * icr75_get_channel - * Assumes rig!=NULL, rig->state.priv!=NULL, chan!=NULL - * TODO: still a WIP --SF - */ -int icr75_get_channel(RIG *rig, channel_t *chan) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char chanbuf[24]; - int chan_len, freq_len, retval; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - to_bcd_be(chanbuf, chan->channel_num, 4); - chan_len = 2; - - freq_len = priv->civ_731_mode ? 4 : 5; - - retval = icom_transaction(rig, C_CTL_MEM, S_MEM_CNTNT, - chanbuf, chan_len, chanbuf, &chan_len); - - if (retval != RIG_OK) - { - return retval; - } - - chan->vfo = RIG_VFO_MEM; - chan->ant = RIG_ANT_NONE; - chan->freq = 0; - chan->mode = RIG_MODE_NONE; - chan->width = RIG_PASSBAND_NORMAL; - chan->tx_freq = 0; - chan->tx_mode = RIG_MODE_NONE; - chan->tx_width = RIG_PASSBAND_NORMAL; - chan->split = RIG_SPLIT_OFF; - chan->tx_vfo = RIG_VFO_NONE; - chan->rptr_shift = RIG_RPT_SHIFT_NONE; - chan->rptr_offs = 0; - chan->tuning_step = 0; - chan->rit = 0; - chan->xit = 0; - chan->funcs = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_PREAMP)].i = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_ATT)].i = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_AF)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_RF)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_SQL)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_NR)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_PBT_IN)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_PBT_OUT)].f = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_CWPITCH)].i = 0; - chan->levels[rig_setting2idx(RIG_LEVEL_AGC)].i = RIG_AGC_OFF; - chan->ctcss_tone = 0; - chan->ctcss_sql = 0; - chan->dcs_code = 0; - chan->dcs_sql = 0; - chan->scan_group = 0; - chan->flags = RIG_CHFLAG_SKIP; - strcpy(chan->channel_desc, " "); - - /* - * freqbuf should contain Cn,Data area - */ - if ((chan_len != freq_len + 18) && (chan_len != 5)) - { - rig_debug(RIG_DEBUG_ERR, "icr75_get_channel: wrong frame len=%d\n", - chan_len); - return -RIG_ERJCTED; - } - - /* do this only if not a blank channel */ - if (chan_len != 5) - { - /* - * from_bcd requires nibble len - */ - chan->flags = RIG_CHFLAG_NONE; - - chan->freq = from_bcd(chanbuf + 5, freq_len * 2); - - chan_len = 4 + freq_len + 1; - - icom2rig_mode(rig, chanbuf[chan_len], chanbuf[chan_len + 1], - &chan->mode, &chan->width); - chan_len += 2; - - if (from_bcd_be(chanbuf + chan_len++, 2) != 0) - { - chan->levels[rig_setting2idx(RIG_LEVEL_ATT)].i = 20; - } - - if (from_bcd_be(chanbuf + chan_len++, 2) != 0) - { - chan->levels[rig_setting2idx(RIG_LEVEL_PREAMP)].i = 20; - } - - chan->ant = from_bcd_be(chanbuf + chan_len++, 2); - strncpy(chan->channel_desc, (char *)(chanbuf + chan_len), 8); - } - - return RIG_OK; -} - -int icr75_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char prmbuf[MAXFRAMELEN]; - int min, hr, sec; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_ANN: - { - int ann_mode = -1; - int ann_lang = -1; - - switch (val.i) - { - case RIG_ANN_OFF: - ann_mode = S_ANN_ALL; - break; - - case RIG_ANN_FREQ: - ann_mode = S_ANN_FREQ; - break; - - case RIG_ANN_RXMODE: - ann_mode = S_ANN_MODE; - break; - - case RIG_ANN_ENG: - case RIG_ANN_JAP: - ann_lang = (val.i == RIG_ANN_ENG) ? 0 : 1; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported RIG_PARM_ANN %d\n", val.i); - return -RIG_EINVAL; - } - - if (ann_mode >= 0) - { - return icom_set_raw(rig, C_CTL_ANN, ann_mode, 0, NULL, 0, 0); - } - else if (ann_lang >= 0) - { - prmbuf[0] = S_PRM_LANG; - prmbuf[1] = ann_lang; - return icom_set_raw(rig, C_CTL_MEM, S_MEM_MODE_SLCT, 2, prmbuf, 0, 0); - } - - rig_debug(RIG_DEBUG_ERR, "Unsupported RIG_PARM_ANN %d\n", val.i); - return -RIG_EINVAL; - } - - case RIG_PARM_APO: - prmbuf[0] = S_PRM_SLPTM; - hr = (int)((float) val.i / 60.0f); - min = val.i - (hr * 60); - to_bcd_be(prmbuf + 1, (long long) hr, 2); - to_bcd_be(prmbuf + 2, (long long) min, 2); - return icom_set_raw(rig, C_CTL_MEM, S_MEM_MODE_SLCT, 3, prmbuf, 0, 0); - - case RIG_PARM_BACKLIGHT: - prmbuf[0] = S_PRM_BACKLT; - to_bcd_be(prmbuf + 1, (long long)(val.f * 255.0f), 2 * 2); - return icom_set_raw(rig, C_CTL_MEM, S_MEM_MODE_SLCT, 3, prmbuf, 0, 0); - - case RIG_PARM_BEEP: - prmbuf[0] = S_PRM_BEEP; - prmbuf[1] = val.i ? 1 : 0; - return icom_set_raw(rig, C_CTL_MEM, S_MEM_MODE_SLCT, 2, prmbuf, 0, 0); - - case RIG_PARM_TIME: - hr = (int)((float) val.i / 3600.0); - min = (int)((float)(val.i - (hr * 3600)) / 60.0); - sec = (val.i - (hr * 3600) - (min * 60)); - - prmbuf[0] = S_PRM_TIME; - to_bcd_be(prmbuf + 1, (long long) hr, 2); - to_bcd_be(prmbuf + 2, (long long) min, 2); - to_bcd_be(prmbuf + 3, (long long) sec, 2); - return icom_set_raw(rig, C_CTL_MEM, S_MEM_MODE_SLCT, 4, prmbuf, 0, 0); - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported set_parm %s\n", rig_strparm(parm)); - return -RIG_EINVAL; - } -} - -int icr75_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char prmbuf[MAXFRAMELEN], resbuf[MAXFRAMELEN]; - int prm_len, res_len; - int prm_cn, prm_sc; - int icom_val = 0; - int cmdhead; - int retval; - int min, hr, sec; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_APO: - prm_cn = C_CTL_MEM; - prm_sc = S_MEM_MODE_SLCT; - prm_len = 1; - prmbuf[0] = S_PRM_SLPTM; - break; - - case RIG_PARM_BACKLIGHT: - prm_cn = C_CTL_MEM; - prm_sc = S_MEM_MODE_SLCT; - prm_len = 1; - prmbuf[0] = S_PRM_BACKLT; - break; - - case RIG_PARM_BEEP: - prm_cn = C_CTL_MEM; - prm_sc = S_MEM_MODE_SLCT; - prm_len = 1; - prmbuf[0] = S_PRM_BEEP; - break; - - case RIG_PARM_TIME: - prm_cn = C_CTL_MEM; - prm_sc = S_MEM_MODE_SLCT; - prm_len = 1; - prmbuf[0] = S_PRM_TIME; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported get_parm %s", rig_strparm(parm)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, prm_cn, prm_sc, prmbuf, prm_len, resbuf, - &res_len); - - if (retval != RIG_OK) - { - return retval; - } - - cmdhead = 3; - res_len -= cmdhead; - - if (resbuf[0] != ACK && resbuf[0] != prm_cn) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, resbuf[0], - res_len); - return -RIG_ERJCTED; - } - - switch (parm) - { - case RIG_PARM_APO: - hr = from_bcd_be(resbuf + cmdhead, 2); - min = from_bcd_be(resbuf + cmdhead + 1, 2); - icom_val = (hr * 60) + min; - val->i = icom_val; - break; - - case RIG_PARM_TIME: - hr = from_bcd_be(resbuf + cmdhead, 2); - min = from_bcd_be(resbuf + cmdhead + 1, 2); - sec = from_bcd_be(resbuf + cmdhead + 2, 2); - icom_val = (hr * 3600) + (min * 60) + sec; - val->i = icom_val; - break; - - case RIG_PARM_BACKLIGHT: - icom_val = from_bcd_be(resbuf + cmdhead, res_len * 2); - val->f = (float) icom_val / 255.0; - break; - - case RIG_PARM_BEEP: - icom_val = from_bcd_be(resbuf + cmdhead, res_len * 2); - val->i = icom_val; - break; - } - - rig_debug(RIG_DEBUG_TRACE, "%s: %d %d %d %f\n", __func__, res_len, icom_val, - val->i, val->f); - - return RIG_OK; -} diff --git a/icom/icr8500.c b/icom/icr8500.c deleted file mode 100644 index e77726eeb..000000000 --- a/icom/icr8500.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Hamlib CI-V backend - IC-R8500 description - * Copyright (c) 2000-2004 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" -#include "icom_defs.h" - -#define ICR8500_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_FM|RIG_MODE_WFM) -#define ICR8500_1MHZ_TS_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) - -#define ICR8500_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_TSQL|RIG_FUNC_APF) - -#define ICR8500_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_APF|RIG_LEVEL_SQL|RIG_LEVEL_IF|RIG_LEVEL_RAWSTR) - -#define ICR8500_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) - -#define ICR8500_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -/* FIXME: real measure */ -#define ICR8500_STR_CAL { 16, { \ - { 0, -54 }, /* S0 */ \ - { 10, -48 }, \ - { 32, -42 }, \ - { 46, -36 }, \ - { 62, -30 }, \ - { 82, -24 }, \ - { 98, -18 }, \ - { 112, -12 }, \ - { 124, -6 }, \ - { 134, 0 }, /* S9 */ \ - { 156, 10 }, \ - { 177, 20 }, \ - { 192, 30 }, \ - { 211, 40 }, \ - { 228, 50 }, \ - { 238, 60 }, \ - } } - -int icr8500_set_func(RIG *rig, vfo_t vfo, setting_t func, int status); - -static const struct icom_priv_caps icr8500_priv_caps = -{ - 0x4a, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list -}; - -/* - * IC-R8500 rig capabilities. - */ -const struct rig_caps icr8500_caps = -{ - .rig_model = RIG_MODEL_ICR8500, - .model_name = "ICR-8500", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - - .has_get_func = RIG_FUNC_NONE, - .has_set_func = ICR8500_FUNC_ALL, - .has_get_level = ICR8500_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR8500_LEVEL_ALL | RIG_LEVEL_AF), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, /* FIXME: parms */ - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - [LVL_IF] = { .min = { .i = 0 }, .max = { .i = 255 }, .step = { .i = 1 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, /* FIXME: CTCSS/DCS list */ - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { 10, 20, 30, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(0), - .max_ifshift = kHz(1.2), - .targetable_vfo = 0, - .vfo_ops = ICR8500_OPS, - .scan_ops = ICR8500_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 12, - .chan_desc_sz = 0, - .str_cal = ICR8500_STR_CAL, - - .chan_list = { /* FIXME: memory channel list */ - { 1, 999, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - - - .rx_range_list1 = { - {kHz(100), MHz(824) - 10, ICR8500_MODES, -1, -1, RIG_VFO_A}, - {MHz(849) + 10, MHz(869) - 10, ICR8500_MODES, -1, -1, RIG_VFO_A}, - {MHz(894) + 10, GHz(2) - 10, ICR8500_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(100), MHz(824) - 10, ICR8500_MODES, -1, -1, RIG_VFO_A}, - {MHz(849) + 10, MHz(869) - 10, ICR8500_MODES, -1, -1, RIG_VFO_A}, - {MHz(894) + 10, GHz(2) - 10, ICR8500_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ - - .tuning_steps = { - {ICR8500_MODES, 10}, - {ICR8500_MODES, 50}, - {ICR8500_MODES, 100}, - {ICR8500_MODES, kHz(1)}, - {ICR8500_MODES, 2500}, - {ICR8500_MODES, kHz(5)}, - {ICR8500_MODES, kHz(9)}, - {ICR8500_MODES, kHz(10)}, - {ICR8500_MODES, 12500}, - {ICR8500_MODES, kHz(20)}, - {ICR8500_MODES, kHz(25)}, - {ICR8500_MODES, kHz(100)}, - {ICR8500_1MHZ_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - /* FIXME: To be confirmed! --SF */ - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_AM, kHz(8)}, - {RIG_MODE_AM, kHz(2.4)}, /* narrow */ - {RIG_MODE_AM, kHz(15)}, /* wide */ - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(8)}, /* narrow */ - {RIG_MODE_WFM, kHz(230)}, - RIG_FLT_END, - }, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr8500_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icr8500_set_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .get_dcd = icom_get_dcd, -}; - -int icr8500_set_func(RIG *rig, vfo_t vfo, setting_t func, int status) -{ - switch (func) - { - case RIG_FUNC_NB: - return icom_set_raw(rig, C_CTL_FUNC, status ? S_FUNC_NBON : S_FUNC_NBOFF, 0, - NULL, 0, 0); - - case RIG_FUNC_FAGC: - return icom_set_raw(rig, C_CTL_FUNC, status ? S_FUNC_AGCON : S_FUNC_AGCOFF, 0, - NULL, 0, 0); - - case RIG_FUNC_APF: - return icom_set_raw(rig, C_CTL_FUNC, status ? S_FUNC_APFON : S_FUNC_APFOFF, 0, - NULL, 0, 0); - - default: - return icom_set_func(rig, vfo, func, status); - } -} diff --git a/icom/icr8600.c b/icom/icr8600.c deleted file mode 100644 index 932c7e476..000000000 --- a/icom/icr8600.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-R8600 - * Copyright (c) 2000-2004 by Stephane Fillod - * Copyright (c) 2018 by Ekki Plicht - * Copyright (c) 2019 by Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -#include "hamlib/rig.h" -#include "misc.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - -#define ICR8600_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_RTTY|\ - RIG_MODE_FM|RIG_MODE_WFM|RIG_MODE_CWR|RIG_MODE_RTTYR|RIG_MODE_SAM|RIG_MODE_SAL|\ - RIG_MODE_SAH|RIG_MODE_P25|RIG_MODE_DSTAR|RIG_MODE_DPMR|RIG_MODE_NXDNVN|\ - RIG_MODE_NXDN_N|RIG_MODE_DCR) - -#define ICR8600_FUNC_ALL (RIG_FUNC_NB|RIG_FUNC_ANF|RIG_FUNC_MN|RIG_FUNC_AFC|\ - RIG_FUNC_NR|RIG_FUNC_AIP|RIG_FUNC_LOCK|RIG_FUNC_VSC|RIG_FUNC_RESUME|RIG_FUNC_TSQL|\ - RIG_FUNC_CSQL|RIG_FUNC_DSQL) - -#define ICR8600_LEVEL_ALL (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|\ - RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_PREAMP|\ - RIG_LEVEL_AGC|RIG_LEVEL_RAWSTR|RIG_LEVEL_STRENGTH) - -#define ICR8600_PARM_ALL (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|\ - RIG_PARM_BEEP|RIG_PARM_TIME|RIG_PARM_KEYLIGHT) - -#define ICR8600_VFO_ALL (RIG_VFO_VFO|RIG_VFO_MEM) - -#define ICR8600_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define ICR8600_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|\ - RIG_SCAN_PRIO|RIG_SCAN_PRIO|RIG_SCAN_DELTA|RIG_SCAN_STOP) - -#define ICR8600_ANTS_HF (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3) -#define ICR8600_ANTS_VHF (RIG_ANT_1) - -#define ICR8600_STR_CAL { 2, {\ - { 0, -60 }, \ - { 255, 60 }, \ -} } - -/* - * channel caps. - */ -#define ICR8600_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .ant = 1, \ - .levels = RIG_LEVEL_ATT|RIG_LEVEL_PREAMP, \ - .channel_desc = 1, \ - .flags = 1, \ -} - -int icr8600_set_parm(RIG *rig, setting_t parm, value_t val); -int icr8600_get_parm(RIG *rig, setting_t parm, value_t *val); - -static const struct icom_priv_caps icr8600_priv_caps = -{ - 0x96, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8600_ts_sc_list, /* list of tuning steps */ - .offs_len = 4, /* Repeater offset is 4 bytes */ - .serial_USB_echo_check = 1 /* USB CI-V may not echo */ -}; - -const struct rig_caps icr8600_caps = -{ - .rig_model = RIG_MODEL_ICR8600, - .model_name = "IC-R8600", - .mfg_name = "Icom", - .version = "0.8", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, // USB can do up to 115000 - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 1, - .timeout = 1000, - .retry = 3, - .has_get_func = ICR8600_FUNC_ALL, - .has_set_func = ICR8600_FUNC_ALL, - .has_get_level = ICR8600_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICR8600_LEVEL_ALL), - .has_get_parm = ICR8600_PARM_ALL, - .has_set_parm = RIG_PARM_SET(ICR8600_PARM_ALL), - .level_gran = { [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } } }, - .parm_gran = { [PARM_TIME] = { .min = { .i = 0 }, .max = { .i = 86399} } }, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = { 20, RIG_DBLST_END, }, /* 20 on HF, 14 on VHF, UHF, same setting */ - .attenuator = { 10, 20, 30, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR8600_VFO_OPS, - .scan_ops = ICR8600_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 100, - .chan_desc_sz = 16, - - .chan_list = { - { 0, 99, RIG_MTYPE_MEM, ICR8600_MEM_CAP }, - { 0, 99, RIG_MTYPE_EDGE, ICR8600_MEM_CAP }, - /* to be extended */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - { kHz(10), MHz(3000), ICR8600_MODES, -1, -1, ICR8600_VFO_ALL, ICR8600_ANTS_VHF }, - { kHz(10), MHz(30), ICR8600_MODES, -1, -1, ICR8600_VFO_ALL, ICR8600_ANTS_HF }, - RIG_FRNG_END, - }, - - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - { kHz(10), MHz(3000), ICR8600_MODES, -1, -1, ICR8600_VFO_ALL, ICR8600_ANTS_VHF }, - { kHz(10), MHz(30), ICR8600_MODES, -1, -1, ICR8600_VFO_ALL, ICR8600_ANTS_HF }, - RIG_FRNG_END, - }, - - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICR8600_MODES, Hz(100)}, - {ICR8600_MODES, kHz(1)}, - {ICR8600_MODES, kHz(2.5)}, - {ICR8600_MODES, kHz(3.125)}, - {ICR8600_MODES, kHz(5)}, - {ICR8600_MODES, kHz(6.25)}, - {ICR8600_MODES, kHz(8.33)}, - {ICR8600_MODES, kHz(9)}, - {ICR8600_MODES, kHz(10)}, - {ICR8600_MODES, kHz(12.5)}, - {ICR8600_MODES, kHz(20)}, - {ICR8600_MODES, kHz(25)}, - {ICR8600_MODES, kHz(100)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(1.9)}, - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(6)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(15)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(6)}, - RIG_FLT_END, - }, - - .str_cal = ICR8600_STR_CAL, - - .cfgparams = icom_cfg_params, - - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr8600_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icom_rig_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_bank = icom_set_bank, - .get_rptr_offs = icom_get_rptr_offs, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_shift = icom_set_rptr_shift, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .decode_event = icom_decode_event, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_parm = icr8600_set_parm, - .get_parm = icr8600_get_parm, - .get_dcd = icom_get_dcd, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, - -}; - -int icr8600_set_parm(RIG *rig, setting_t parm, value_t val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x38; - return icom_set_custom_parm(rig, 2, parmbuf, 1, val.i ? 1 : 0); - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x15; - return icom_set_custom_parm(rig, 2, parmbuf, 2, (int)(val.f * 255.0f)); - - case RIG_PARM_KEYLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x16; - return icom_set_custom_parm(rig, 2, parmbuf, 2, val.f != 0 ? 255 : 0); - - case RIG_PARM_TIME: - parmbuf[0] = 0x01; - parmbuf[1] = 0x32; - return icom_set_custom_parm_time(rig, 2, parmbuf, val.i); - - default: - return icom_set_parm(rig, parm, val); - } -} - -int icr8600_get_parm(RIG *rig, setting_t parm, value_t *val) -{ - unsigned char parmbuf[MAXFRAMELEN]; - int retval; - int icom_val; - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (parm) - { - case RIG_PARM_BEEP: - parmbuf[0] = 0x00; - parmbuf[1] = 0x38; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->i = icom_val ? 1 : 0; - break; - - case RIG_PARM_BACKLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x15; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = (float) icom_val / 255.0f; - break; - - case RIG_PARM_KEYLIGHT: - parmbuf[0] = 0x01; - parmbuf[1] = 0x16; - retval = icom_get_custom_parm(rig, 2, parmbuf, &icom_val); - - if (retval != RIG_OK) - { - return retval; - } - - val->f = icom_val != 0; - break; - - case RIG_PARM_TIME: - parmbuf[0] = 0x01; - parmbuf[1] = 0x32; - return icom_get_custom_parm_time(rig, 2, parmbuf, &val->i); - - default: - return icom_get_parm(rig, parm, val); - } - - return RIG_OK; -} diff --git a/icom/icr9000.c b/icom/icr9000.c deleted file mode 100644 index ae61b255a..000000000 --- a/icom/icr9000.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Hamlib CI-V backend - IC-R9000 descriptions - * Copyright (c) 2000-2011 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "serial.h" -#include "misc.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - - -#define ICR9000_MODES (RIG_MODE_AM|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_CW|RIG_MODE_WFM) - -#define ICR9000_OPS (RIG_OP_FROM_VFO|RIG_OP_MCL) - -#define ICR9000_FUNCS (RIG_FUNC_VSC) -#define ICR9000_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR) -#define ICR9000_PARMS (RIG_PARM_ANN) -#define ICR9000_SCAN_OPS (RIG_SCAN_MEM) /* TBC */ - -#define ICR9000_ANTS (RIG_ANT_1|RIG_ANT_2) /* selectable by CI-V ? */ - -#define ICR9000_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .levels = RIG_LEVEL_ATT, \ -} - - -/* TODO: S-Meter measurements */ -#define ICR9000_STR_CAL UNKNOWN_IC_STR_CAL - -static const struct icom_priv_caps icr9000_priv_caps = -{ - 0x2a, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r9000_ts_sc_list -}; - -static int icr9000_open(RIG *rig); - -/* - * ICR9000A rig capabilities. - */ -const struct rig_caps icr9000_caps = -{ - .rig_model = RIG_MODEL_ICR9000, - .model_name = "IC-R9000", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - - .has_get_func = ICR9000_FUNCS, - .has_set_func = ICR9000_FUNCS, - .has_get_level = ICR9000_LEVELS, - .has_set_level = RIG_LEVEL_SET(ICR9000_LEVELS), - .has_get_parm = ICR9000_PARMS, - .has_set_parm = RIG_PARM_SET(ICR9000_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END }, - .attenuator = { 10, 20, 30, RIG_DBLST_END }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR9000_OPS, - .scan_ops = ICR9000_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 0, 999, RIG_MTYPE_MEM, ICR9000_MEM_CAP }, /* TBC */ - { 1000, 1009, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, /* 2 by 2 */ - { 1010, 1019, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, /* 2 by 2 */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(100), MHz(1999.8), ICR9000_MODES, -1, -1, RIG_VFO_A, ICR9000_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(100), MHz(1999.8), ICR9000_MODES, -1, -1, RIG_VFO_A, ICR9000_ANTS}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ - - .tuning_steps = { - {ICR9000_MODES, 10}, /* resolution */ - {ICR9000_MODES, 100}, - {ICR9000_MODES, kHz(1)}, - {ICR9000_MODES, kHz(5)}, - {ICR9000_MODES, kHz(9)}, - {ICR9000_MODES, kHz(10)}, - {ICR9000_MODES, 12500}, - {ICR9000_MODES, kHz(20)}, - {ICR9000_MODES, kHz(25)}, - {ICR9000_MODES, kHz(100)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICR9000_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr9000_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = icr9000_open, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, -#ifdef XXREMOVEDXX - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, -#endif - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, -}; - - -/* - * Function definitions below - */ - -int icr9000_open(RIG *rig) -{ - return icom_scan(rig, RIG_VFO_CURR, RIG_SCAN_STOP, 0); -} - diff --git a/icom/icr9500.c b/icom/icr9500.c deleted file mode 100644 index e814f8d53..000000000 --- a/icom/icr9500.c +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Hamlib CI-V backend - IC-R9500 descriptions - * Copyright (c) 2000-2011 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "serial.h" -#include "misc.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - - -#define ICR9500_MODES (RIG_MODE_AM|RIG_MODE_AMS|\ - RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|\ - RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_WFM) - -#define ICR9500_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) - -#define ICR9500_FUNCS (RIG_FUNC_NB|RIG_FUNC_TSQL|RIG_FUNC_NR|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK) -#define ICR9500_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_APF) -#define ICR9500_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT) -#define ICR9500_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_VFO|RIG_SCAN_SLCT|RIG_SCAN_PRIO) /* TBC */ - -#define ICR9500_HF_ANTS (RIG_ANT_1|RIG_ANT_2|RIG_ANT_3) - -#define ICR9500_VFOS (RIG_VFO_A|RIG_VFO_MEM) - -#define ICR9500_MEM_CAP { /* FIXME */ \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .levels = RIG_LEVEL_ATT, \ -} - - -/* TODO: S-Meter measurements */ -#define ICR9500_STR_CAL UNKNOWN_IC_STR_CAL - -static const struct icom_priv_caps icr9500_priv_caps = -{ - 0x72, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r9500_ts_sc_list -}; - -/* - * ICR9500A rig capabilities. - */ -const struct rig_caps icr9500_caps = -{ - .rig_model = RIG_MODEL_ICR9500, - .model_name = "IC-R9500", - .mfg_name = "Icom", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_RECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 1200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - - .has_get_func = ICR9500_FUNCS, - .has_set_func = ICR9500_FUNCS, - .has_get_level = ICR9500_LEVELS, - .has_set_level = RIG_LEVEL_SET(ICR9500_LEVELS), - .has_get_parm = ICR9500_PARMS, - .has_set_parm = RIG_PARM_SET(ICR9500_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = { 10, 20, RIG_DBLST_END }, /* FIXME: TBC */ - .attenuator = { 6, 10, 12, 18, 20, 24, 30, RIG_DBLST_END }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICR9500_OPS, - .scan_ops = ICR9500_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 12, - .chan_desc_sz = 0, /* FIXME */ - - .chan_list = { - { 0, 999, RIG_MTYPE_MEM, ICR9500_MEM_CAP }, /* TBC */ - { 1000, 1099, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, /* Bank-A (Auto) */ - { 1100, 1199, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, /* Bank-S (skip) */ - { 1200, 1219, RIG_MTYPE_EDGE, IC_MIN_MEM_CAP }, /* Bank-P (Scan edge), 2 by 2 */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(5), MHz(30) - 1, ICR9500_MODES, -1, -1, ICR9500_VFOS, ICR9500_HF_ANTS}, - {MHz(30), MHz(3335), ICR9500_MODES, -1, -1, ICR9500_VFOS, RIG_ANT_4}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(5), MHz(30) - 1, ICR9500_MODES, -1, -1, ICR9500_VFOS, ICR9500_HF_ANTS}, - {MHz(30), MHz(3335), ICR9500_MODES, -1, -1, ICR9500_VFOS, RIG_ANT_4}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ - - .tuning_steps = { - {ICR9500_MODES, 1}, /* resolution */ - {ICR9500_MODES, 10}, - {ICR9500_MODES, 100}, - {ICR9500_MODES, kHz(1)}, - {ICR9500_MODES, kHz(2.5)}, - {ICR9500_MODES, kHz(5)}, - {ICR9500_MODES, kHz(6.25)}, - {ICR9500_MODES, kHz(9)}, - {ICR9500_MODES, kHz(10)}, - {ICR9500_MODES, 12500}, - {ICR9500_MODES, kHz(20)}, - {ICR9500_MODES, kHz(25)}, - {ICR9500_MODES, kHz(100)}, - {ICR9500_MODES, MHz(1)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_RTTY, kHz(2.4)}, - {RIG_MODE_CW, Hz(500)}, - {RIG_MODE_AM | RIG_MODE_AMS, kHz(6)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_WFM, kHz(350)}, - RIG_FLT_END, - }, - .str_cal = ICR9500_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icr9500_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = icom_set_ant, - .get_ant = icom_get_ant, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, - - .set_ts = icom_set_ts, - .get_ts = icom_get_ts, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_parm = icom_set_parm, - .get_parm = icom_get_parm, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .set_bank = icom_set_bank, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .get_dcd = icom_get_dcd, -}; - - -/* - * Function definitions below - */ - - diff --git a/icom/icrx7.c b/icom/icrx7.c deleted file mode 100644 index 53ffff74d..000000000 --- a/icom/icrx7.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Hamlib CI-V backend - description of IC-RX7 - * Copyright (c) 2011 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "icom.h" -#include "idx_builtin.h" - -#define ICRX7_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) - -#define ICRX7_FUNC_ALL (RIG_FUNC_NONE) - -#define ICRX7_LEVEL_ALL (RIG_LEVEL_RAWSTR) - -#define ICRX7_VFO_ALL (RIG_VFO_A) - -#define ICRX7_VFO_OPS (RIG_OP_NONE) -#define ICRX7_SCAN_OPS (RIG_SCAN_NONE) - -/* - * FIXME: S-meter measurement - */ -#define ICRX7_STR_CAL UNKNOWN_IC_STR_CAL - -static const struct icom_priv_caps icrx7_priv_caps = -{ - 0x78, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - r8500_ts_sc_list /* wrong, but don't have set_ts anyway */ -}; - -const struct rig_caps icrx7_caps = -{ - .rig_model = RIG_MODEL_ICRX7, - .model_name = "IC-RX7", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_RECEIVER | RIG_FLAG_HANDHELD, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ICRX7_FUNC_ALL, - .has_set_func = ICRX7_FUNC_ALL, - .has_get_level = ICRX7_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ICRX7_LEVEL_ALL), - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ICRX7_VFO_OPS, - .scan_ops = ICRX7_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - /* Unfortunately, not accessible through CI-V */ - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(150), GHz(1.3), ICRX7_MODES, -1, -1, ICRX7_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(150), MHz(821.995), ICRX7_MODES, -1, -1, ICRX7_VFO_ALL}, - {MHz(851), MHz(866.995), ICRX7_MODES, -1, -1, ICRX7_VFO_ALL}, - {MHz(896), GHz(1.3), ICRX7_MODES, -1, -1, ICRX7_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - .tuning_steps = { - {ICRX7_MODES, Hz(100)}, - RIG_TS_END, - }, - .filters = { - {RIG_MODE_AM | RIG_MODE_FM, kHz(15)}, - {RIG_MODE_WFM, kHz(150)}, - RIG_FLT_END, - }, - .str_cal = ICRX7_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& icrx7_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, /* TODO: do not pass bandwidth data */ - .get_mode = icom_get_mode, - - .decode_event = icom_decode_event, - .get_level = icom_get_level, - .get_dcd = icom_get_dcd, - -}; - diff --git a/icom/id1.c b/icom/id1.c deleted file mode 100644 index f906663ca..000000000 --- a/icom/id1.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Hamlib CI-V backend - description of ID-1 and variations - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" - -#define ID1_MODES (RIG_MODE_FM /* |RIG_MODE_DIGVOICE|RIG_MODE_DIGDATA*/ ) - -#define ID1_FUNC_ALL (RIG_FUNC_MUTE|RIG_FUNC_MON|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_LOCK|RIG_FUNC_AFC) - -#define ID1_LEVEL_ALL (RIG_LEVEL_AF|RIG_LEVEL_SQL|RIG_LEVEL_RFPOWER|RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_RAWSTR) - -#define ID1_PARM_ALL (RIG_PARM_BEEP|RIG_PARM_BACKLIGHT /* |RIG_PARM_FAN */) - -#define ID1_VFO_ALL (RIG_VFO_A|RIG_VFO_MEM) - -#define ID1_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL) -#define ID1_SCAN_OPS (RIG_SCAN_VFO|RIG_SCAN_MEM) - -/* - * FIXME: real measurement - */ -#define ID1_STR_CAL UNKNOWN_IC_STR_CAL - - -const struct ts_sc_list id1_ts_sc_list[] = -{ - { kHz(5), 0x00 }, - { kHz(10), 0x01 }, - { 12500, 0x02 }, - { kHz(20), 0x03 }, - { kHz(25), 0x04 }, - { kHz(50), 0x05 }, - { kHz(100), 0x06 }, - { kHz(6.25), 0x07 }, - { 0, 0 }, -}; - - -/* - */ -static const struct icom_priv_caps id1_priv_caps = -{ - 0x01, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - id1_ts_sc_list -}; - -const struct rig_caps id1_caps = -{ - .rig_model = RIG_MODEL_ICID1, - .model_name = "IC ID-1", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 19200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ID1_FUNC_ALL, - .has_set_func = ID1_FUNC_ALL, - .has_get_level = ID1_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ID1_LEVEL_ALL), - .has_get_parm = ID1_PARM_ALL, - .has_set_parm = ID1_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ID1_VFO_OPS, - .scan_ops = ID1_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM }, - { 100, 101, RIG_MTYPE_EDGE }, /* two by two */ - { 102, 104, RIG_MTYPE_CALL }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {GHz(1.240), GHz(1.3), ID1_MODES, -1, -1, ID1_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {GHz(1.240), GHz(1.3), ID1_MODES, W(1), W(10), ID1_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {GHz(1.240), GHz(1.3), ID1_MODES, -1, -1, ID1_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {GHz(1.240), GHz(1.3), ID1_MODES, W(1), W(10), ID1_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {ID1_MODES, kHz(5)}, - {ID1_MODES, kHz(10)}, - {ID1_MODES, 12500}, - {ID1_MODES, kHz(20)}, - {ID1_MODES, kHz(25)}, - {ID1_MODES, kHz(25)}, - {ID1_MODES, kHz(100)}, - {ID1_MODES, kHz(6.25)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM, kHz(12)}, -#if 0 - {RIG_MODE_DIGVOICE, kHz(6)}, - {RIG_MODE_DIGDATA, kHz(140)}, -#endif - RIG_FLT_END, - }, - .str_cal = ID1_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& id1_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .set_rptr_shift = icom_set_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - -}; - diff --git a/icom/id31.c b/icom/id31.c deleted file mode 100644 index 0322d3d47..000000000 --- a/icom/id31.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Hamlib CI-V backend - description of ID-31 and variations - * Copyright (c) 2015 by Stephane Fillod - * Copyright (c) 2019 by Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" - -/* - * Specs and protocol details comes from the chapter 11 of ID-31A_E_CD_ENG_1.pdf - * - * NB: while the port labeled "Data" is used for firmware upgrades, - * you have to use the port labeled "SP" for rig control. - * - */ - -#define ID31_MODES (RIG_MODE_FM|RIG_MODE_DSTAR) -#define ID31_ALL_RX_MODES (RIG_MODE_AM|ID31_MODES) - -#define ID31_VFO_ALL (RIG_VFO_MAIN) - -#define ID31_SCAN_OPS RIG_SCAN_NONE - -#define ID31_VFO_OPS RIG_OP_NONE - -#define ID31_FUNC_ALL ( \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_CSQL| \ - RIG_FUNC_DSQL| \ - RIG_FUNC_VOX) - -#define ID31_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_RAWSTR| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_VOXGAIN) - -#define ID31_PARM_ALL RIG_PARM_NONE - - -/* - * FIXME: real measurement - */ -#define ID31_STR_CAL UNKNOWN_IC_STR_CAL - - - -/* - */ -static const struct icom_priv_caps id31_priv_caps = -{ - 0xA0, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG */ -}; - -const struct rig_caps id31_caps = -{ - .rig_model = RIG_MODEL_ID31, - .model_name = "ID-31", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ID31_FUNC_ALL, - .has_set_func = ID31_FUNC_ALL, - .has_get_level = ID31_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ID31_LEVEL_ALL), - .has_get_parm = ID31_PARM_ALL, - .has_set_parm = ID31_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ID31_VFO_OPS, - .scan_ops = ID31_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - // There's no memory support through CI-V, - // but there is a clone mode apart. - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(400), MHz(479), ID31_ALL_RX_MODES, -1, -1, ID31_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(430), MHz(440), ID31_MODES, W(2.5), W(5), ID31_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(400), MHz(479), ID31_ALL_RX_MODES, -1, -1, ID31_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(440), MHz(450), ID31_MODES, W(2.5), W(5), ID31_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - // Rem: no support for changing tuning step - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM, kHz(12)}, - {RIG_MODE_FM, kHz(6)}, - RIG_FLT_END, - }, - .str_cal = ID31_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& id31_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .decode_event = icom_decode_event, - - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_dcs_code = icom_set_dcs_code, - .get_dcs_code = icom_get_dcs_code, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, -}; diff --git a/icom/id4100.c b/icom/id4100.c deleted file mode 100644 index e322d931d..000000000 --- a/icom/id4100.c +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Hamlib CI-V backend - description of ID-4100 and variations - * Copyright (c) 2015 by Stephane Fillod - * Copyright (c) 2019 by Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" - -/* - * Specs and protocol details comes from the chapter 10 of ID-4100A_E_ENG_PU_0.pdf - * - * NB: while the port labeled "Data" is used for firmware upgrades, - * you have to use the port labeled "SP2" for rig control. - * - * TODO: - * - DV mode - * - GPS support - * - Single/dual watch (RIG_LEVEL_BALANCE) - */ - -#define ID4100_MODES (RIG_MODE_FM|RIG_MODE_DSTAR) -#define ID4100_ALL_RX_MODES (RIG_MODE_AM|ID4100_MODES) - -#define ID4100_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB) - -#define ID4100_SCAN_OPS RIG_SCAN_NONE - -#define ID4100_VFO_OPS RIG_OP_NONE - -#define ID4100_FUNC_ALL ( \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_CSQL| \ - RIG_FUNC_DSQL| \ - RIG_FUNC_VOX) - -#define ID4100_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_RAWSTR| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_VOXGAIN) - -#define ID4100_PARM_ALL RIG_PARM_NONE - - -/* - * FIXME: real measurement - */ -#define ID4100_STR_CAL UNKNOWN_IC_STR_CAL - - - -/* - */ -static const struct icom_priv_caps id4100_priv_caps = -{ - 0x9A, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG */ -}; - -const struct rig_caps id4100_caps = -{ - .rig_model = RIG_MODEL_ID4100, - .model_name = "ID-4100", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ID4100_FUNC_ALL, - .has_set_func = ID4100_FUNC_ALL, - .has_get_level = ID4100_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ID4100_LEVEL_ALL), - .has_get_parm = ID4100_PARM_ALL, - .has_set_parm = ID4100_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ID4100_VFO_OPS, - .scan_ops = ID4100_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - // There's no memory support through CI-V, - // but there is a clone mode apart. - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(118), MHz(174), ID4100_ALL_RX_MODES, -1, -1, ID4100_VFO_ALL}, - {MHz(375), MHz(550), ID4100_ALL_RX_MODES, -1, -1, ID4100_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), ID4100_MODES, W(5), W(25), ID4100_VFO_ALL}, - {MHz(430), MHz(440), ID4100_MODES, W(5), W(25), ID4100_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(118), MHz(174), ID4100_ALL_RX_MODES, -1, -1, ID4100_VFO_ALL}, - {MHz(375), MHz(550), ID4100_ALL_RX_MODES, -1, -1, ID4100_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(148), ID4100_MODES, W(5), W(50), ID4100_VFO_ALL}, - {MHz(430), MHz(450), ID4100_MODES, W(5), W(50), ID4100_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - // Rem: no support for changing tuning step - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM | RIG_MODE_AM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, - RIG_FLT_END, - }, - .str_cal = ID4100_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& id4100_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .decode_event = icom_decode_event, - - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_dcs_code = icom_set_dcs_code, - .get_dcs_code = icom_get_dcs_code, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, -}; diff --git a/icom/id51.c b/icom/id51.c deleted file mode 100644 index e5f2e4a2d..000000000 --- a/icom/id51.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Hamlib CI-V backend - description of ID-51 and variations - * Copyright (c) 2015 by Stephane Fillod - * Copyright (c) 2019 by Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" - -/* - * Specs and protocol details comes from the chapter 17 of ID-51A_E_PLUS2_CD_0.pdf - - * NB: while the port labeled "Data" is used for firmware upgrades, - * you have to use the port labeled "SP" for rig control. - * - */ - -#define ID51_MODES (RIG_MODE_FM|RIG_MODE_DSTAR) -#define ID51_ALL_RX_MODES (RIG_MODE_AM|ID51_MODES) - -#define ID51_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB) - -#define ID51_SCAN_OPS RIG_SCAN_NONE - -#define ID51_VFO_OPS RIG_OP_NONE - -#define ID51_FUNC_ALL ( \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_CSQL| \ - RIG_FUNC_DSQL| \ - RIG_FUNC_VOX) - -#define ID51_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_RAWSTR| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_VOXGAIN) - -#define ID51_PARM_ALL RIG_PARM_NONE - - -/* - * FIXME: real measurement - */ -#define ID51_STR_CAL UNKNOWN_IC_STR_CAL - - - -/* - */ -static const struct icom_priv_caps id51_priv_caps = -{ - 0x86, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG */ -}; - -const struct rig_caps id51_caps = -{ - .rig_model = RIG_MODEL_ID51, - .model_name = "ID-51", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ID51_FUNC_ALL, - .has_set_func = ID51_FUNC_ALL, - .has_get_level = ID51_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ID51_LEVEL_ALL), - .has_get_parm = ID51_PARM_ALL, - .has_set_parm = ID51_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ID51_VFO_OPS, - .scan_ops = ID51_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - // There's no memory support through CI-V, - // but there is a clone mode apart. - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(118), MHz(174), ID51_ALL_RX_MODES, -1, -1, ID51_VFO_ALL}, - {MHz(375), MHz(550), ID51_ALL_RX_MODES, -1, -1, ID51_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), ID51_MODES, W(5), W(25), ID51_VFO_ALL}, - {MHz(430), MHz(440), ID51_MODES, W(5), W(25), ID51_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(118), MHz(174), ID51_ALL_RX_MODES, -1, -1, ID51_VFO_ALL}, - {MHz(375), MHz(550), ID51_ALL_RX_MODES, -1, -1, ID51_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(148), ID51_MODES, W(5), W(50), ID51_VFO_ALL}, - {MHz(430), MHz(450), ID51_MODES, W(5), W(50), ID51_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - // Rem: no support for changing tuning step - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM | RIG_MODE_AM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, - RIG_FLT_END, - }, - .str_cal = ID51_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& id51_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .decode_event = icom_decode_event, - - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_dcs_code = icom_set_dcs_code, - .get_dcs_code = icom_get_dcs_code, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, -}; diff --git a/icom/id5100.c b/icom/id5100.c deleted file mode 100644 index 899e9aee6..000000000 --- a/icom/id5100.c +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Hamlib CI-V backend - description of ID-5100 and variations - * Copyright (c) 2015 by Stephane Fillod - * Copyright (c) 2019 by Malcolm Herring - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include "hamlib/rig.h" -#include "idx_builtin.h" -#include "icom.h" - -/* - * Specs and protocol details comes from the chapter 13 of ID-5100_Full-Inst_Manual.pdf - * - * NB: while the port labeled "Data" is used for firmware upgrades, - * you have to use the port labeled "SP2" for rig control. - * - * TODO: - * - DV mode - * - GPS support - * - Single/dual watch (RIG_LEVEL_BALANCE) - */ - -#define ID5100_MODES (RIG_MODE_FM|RIG_MODE_DSTAR) -#define ID5100_ALL_RX_MODES (RIG_MODE_AM|ID5100_MODES) - -#define ID5100_VFO_ALL (RIG_VFO_MAIN|RIG_VFO_SUB) - -#define ID5100_SCAN_OPS RIG_SCAN_NONE - -#define ID5100_VFO_OPS RIG_OP_NONE - -#define ID5100_FUNC_ALL ( \ - RIG_FUNC_TONE| \ - RIG_FUNC_TSQL| \ - RIG_FUNC_CSQL| \ - RIG_FUNC_DSQL| \ - RIG_FUNC_VOX) - -#define ID5100_LEVEL_ALL (RIG_LEVEL_AF| \ - RIG_LEVEL_SQL| \ - RIG_LEVEL_RAWSTR| \ - RIG_LEVEL_RFPOWER| \ - RIG_LEVEL_MICGAIN| \ - RIG_LEVEL_VOXGAIN) - -#define ID5100_PARM_ALL RIG_PARM_NONE - - -/* - * FIXME: real measurement - */ -#define ID5100_STR_CAL UNKNOWN_IC_STR_CAL - - - -/* - */ -static const struct icom_priv_caps id5100_priv_caps = -{ - 0x8C, /* default address */ - 0, /* 731 mode */ - 1, /* no XCHG */ -}; - -const struct rig_caps id5100_caps = -{ - .rig_model = RIG_MODEL_ID5100, - .model_name = "ID-5100", - .mfg_name = "Icom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_MOBILE, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 4800, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = ID5100_FUNC_ALL, - .has_set_func = ID5100_FUNC_ALL, - .has_get_level = ID5100_LEVEL_ALL, - .has_set_level = RIG_LEVEL_SET(ID5100_LEVEL_ALL), - .has_get_parm = ID5100_PARM_ALL, - .has_set_parm = ID5100_PARM_ALL, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = ID5100_VFO_OPS, - .scan_ops = ID5100_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - // There's no memory support through CI-V, - // but there is a clone mode apart. - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {MHz(118), MHz(174), ID5100_ALL_RX_MODES, -1, -1, ID5100_VFO_ALL}, - {MHz(375), MHz(550), ID5100_ALL_RX_MODES, -1, -1, ID5100_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { - {MHz(144), MHz(146), ID5100_MODES, W(5), W(25), ID5100_VFO_ALL}, - {MHz(430), MHz(440), ID5100_MODES, W(5), W(25), ID5100_VFO_ALL}, - RIG_FRNG_END, - }, - - .rx_range_list2 = { - {MHz(118), MHz(174), ID5100_ALL_RX_MODES, -1, -1, ID5100_VFO_ALL}, - {MHz(375), MHz(550), ID5100_ALL_RX_MODES, -1, -1, ID5100_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { - {MHz(144), MHz(148), ID5100_MODES, W(5), W(50), ID5100_VFO_ALL}, - {MHz(430), MHz(450), ID5100_MODES, W(5), W(50), ID5100_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - // Rem: no support for changing tuning step - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_FM | RIG_MODE_AM, kHz(12)}, - {RIG_MODE_FM | RIG_MODE_AM, kHz(6)}, - RIG_FLT_END, - }, - .str_cal = ID5100_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& id5100_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .set_powerstat = icom_set_powerstat, - .get_powerstat = icom_get_powerstat, - .decode_event = icom_decode_event, - - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_level = icom_set_level, - .get_level = icom_get_level, - - .set_ptt = icom_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = icom_get_rptr_shift, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_dcs_code = icom_set_dcs_code, - .get_dcs_code = icom_get_dcs_code, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_sql = icom_set_dcs_sql, - .get_dcs_sql = icom_get_dcs_sql, -}; diff --git a/icom/omni.c b/icom/omni.c deleted file mode 100644 index e630b667c..000000000 --- a/icom/omni.c +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Hamlib CI-V backend - description of the TenTenc OMNI VI - * Copyright (c) 2000-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -/* Improvements by Martin Ewing, AA6E, 3/2008 - * This backend should support either the Ten-Tec Omni VI Plus (564) or the - * Omni VI (563). Tested on an Omni VI. - */ - -/* Known problems: - * - * To Do: - * Implement vfo split, FSK mode - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include - -#define OMNIVIP_VFO_ALL (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) - -#define OMNIVIP_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM) - -#define OMNIVIP_ALL_RX_MODES (OMNIVIP_OTHER_TX_MODES) - -#define OMNIVIP_VFO_OPS (RIG_OP_FROM_VFO|RIG_OP_TO_VFO) -#define OMNIVIP_STR_CAL { 0, { } } - -static int omni6_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); -static int omni6_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit); -static int omni6_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit); - -static const struct icom_priv_caps omnivip_priv_caps = -{ - 0x04, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - NULL /* TODO */ -}; - -const struct rig_caps omnivip_caps = -{ - .rig_model = RIG_MODEL_OMNIVIP, - .model_name = "Omni VI Plus", - .mfg_name = "Ten-Tec", - .version = "0.2", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, // Allow program controlled PTT - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 1200, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = RIG_LEVEL_NONE, - .has_set_level = RIG_LEVEL_NONE, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = {}, - .parm_gran = {}, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(9980), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = OMNIVIP_VFO_OPS, - .scan_ops = RIG_SCAN_NONE, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - .chan_list = { { 0, 99, RIG_MTYPE_MEM, IC_MIN_MEM_CAP }, - RIG_CHAN_END, - }, - .rx_range_list1 = { - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - /* These limits measured on Omni VI SN 1A10473 */ - .rx_range_list2 = { - {kHz(1770), kHz(2330), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(3471), kHz(4030), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(6821), kHz(7338), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(9971), kHz(10530), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(13971), kHz(14530), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(17971), kHz(18530), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(20971), kHz(21530), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(24471), kHz(25030), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - {kHz(27971), kHz(30030), OMNIVIP_ALL_RX_MODES, -1, -1, OMNIVIP_VFO_ALL}, - RIG_FRNG_END, - }, - - /* Note: There is no AM mode. */ - .tx_range_list2 = { - {kHz(1800), MHz(2) - 1, OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {kHz(3500), MHz(4) - 1, OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {MHz(7), kHz(7300), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {kHz(10100), kHz(10150), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {MHz(14), kHz(14350), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {kHz(18068), kHz(18168), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {MHz(21), kHz(21450), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {kHz(24890), kHz(24990), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - {MHz(28), kHz(29700), OMNIVIP_OTHER_TX_MODES, 5000, 100000, OMNIVIP_VFO_ALL}, - RIG_FRNG_END, - }, - - .tuning_steps = { - {OMNIVIP_ALL_RX_MODES, Hz(10)}, // This radio has 10 Hz steps. - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! - * Possible XTAL filters: 2.4, 1.8, 0.5, 0.25 kHz - may not all be - * present. FM filter is 15 kHz. - * We are not supporting the 'FSK' (RTTY) mode at this time. - */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW, kHz(2.4)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& omnivip_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, // icom.c has no get_vfo - .set_rit = omni6_set_rit, - .get_rit = omni6_get_rit, // icom.c has no get_rit - .set_xit = omni6_set_rit, // xit=rit for this rig - .get_xit = omni6_get_rit, // (front panel controlled) - .set_ptt = omni6_set_ptt, - - .decode_event = icom_decode_event, - .set_mem = icom_set_mem, - .vfo_op = icom_vfo_op, -}; - -/* - * omni6_set_ptt based on icom_set_ptt - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int omni6_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) -{ - int retval, sc; - - sc = ptt == RIG_PTT_ON ? 0x1 : 0x2; - - /* - * Ignore ACK/NAK on this command, because in CW mode, the Omni VI - * does not send an ACK. - */ - retval = icom_transaction(rig, C_OMNI6_XMT, sc, NULL, 0, NULL, NULL); - - if (retval != RIG_OK) - { - return retval; - } - - return RIG_OK; -} - -/* - * These 'rit' commands actually deal with an offset frequency. The operator - * must select rit on/off or xit on/off manually to apply this offset. - * Omni VI's rit uses 9's complement for negative freq, and freqs are in units - * of 10 Hz. on the Omni. - * Note that Omni VI rejects rit > 9980, but takes rit >= -9990. So the - * rit limit should be +/- 9.98 kHz. - */ - -int omni6_set_rit(RIG *rig, vfo_t vfo, shortfreq_t rit) -{ - unsigned char freqbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int freq_len, ack_len = sizeof(ackbuf), retval; - shortfreq_t rit10; - - rit10 = rit / 10; // 10 Hz resolution for Omni - - if (rit10 < 0) { rit10 += 10000L; } // 9's compl. - - freq_len = 2; - to_bcd(freqbuf, rit10, 2 * freq_len); - - retval = icom_transaction(rig, C_SET_OFFS, -1, freqbuf, freq_len, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "omni6_set_rit: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * Note: icom.c does not provide a get_rit method. It would have been - * wrong for the Omni VI, anyway, so we implement it here. - */ - -int omni6_get_rit(RIG *rig, vfo_t vfo, shortfreq_t *rit) -{ - unsigned char buffer[MAXFRAMELEN]; - int buffer_len, retval; - shortfreq_t my_rit; - - retval = icom_transaction(rig, C_RD_OFFS, -1, NULL, 0, - buffer, & buffer_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (buffer_len != 3) - { - rig_debug(RIG_DEBUG_ERR, "omni6_get_rit: wrong length response (%d)\n", - buffer_len); - return -RIG_ERJCTED; - } - - my_rit = 10 * from_bcd(buffer, 2 * buffer_len); - - if (my_rit > 10000L) { my_rit -= 100000L; } // 9's compl for negatives - - *rit = my_rit; - return RIG_OK; -} diff --git a/icom/optoscan.c b/icom/optoscan.c deleted file mode 100644 index 699f25cf6..000000000 --- a/icom/optoscan.c +++ /dev/null @@ -1,837 +0,0 @@ -/* - * Hamlib CI-V backend - OptoScan extensions - * Copyright (c) 2000-2005 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include -#include /* String function definitions */ -#include /* UNIX standard function definitions */ -#include - -#include "hamlib/rig.h" -#include "serial.h" -#include "misc.h" -#include "cal.h" -#include "token.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "optoscan.h" - - -const struct confparams opto_ext_parms[] = -{ - { TOK_TAPECNTL, "tapecntl", "Toggle Tape Switch", "Toggles built in tape switch", 0, RIG_CONF_CHECKBUTTON, {} }, - { TOK_5KHZWIN, "5khzwin", "Toggle 5kHz Search Window", "Toggles 5kHz search window", 0, RIG_CONF_CHECKBUTTON, {} }, - { TOK_SPEAKER, "speaker", "Toggle speaker audio", "Toggles speaker audio", 0, RIG_CONF_CHECKBUTTON, {} }, - { TOK_AUDIO, "audio", "Audio present", "Audio present", NULL, RIG_CONF_CHECKBUTTON, {} }, - { TOK_DTMFPEND, "dtmfpend", "DTMF Digit Pending", "DTMF Digit Pending", NULL, RIG_CONF_CHECKBUTTON, {} }, - { TOK_DTMFOVRR, "dtmfovrr", "DTMF Buffer Overflow", "DTMF Buffer Overflow", NULL, RIG_CONF_CHECKBUTTON, {} }, - { TOK_CTCSSACT, "ctcssact", "CTCSS Tone Active", "CTCSS Tone Active", NULL, RIG_CONF_CHECKBUTTON, {} }, - { TOK_DCSACT, "dcsact", "DCS Code Active", "DCS Code Active", NULL, RIG_CONF_CHECKBUTTON, {} }, - { RIG_CONF_END, NULL, } -}; - -static int optoscan_get_status_block(RIG *rig, struct optostat *status_block); -static int optoscan_send_freq(RIG *rig, pltstate_t *state); -static int optoscan_RTS_toggle(RIG *rig); -static int optoscan_start_timer(RIG *rig, pltstate_t *state); -static int optoscan_wait_timer(RIG *rig, pltstate_t *state); - -/* - * optoscan_open - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int optoscan_open(RIG *rig) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - pltstate_t *pltstate; - unsigned char ackbuf[16]; - int ack_len, retval; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - pltstate = malloc(sizeof(pltstate_t)); - - if (!pltstate) - { - return -RIG_ENOMEM; - } - - memset(pltstate, 0, sizeof(pltstate_t)); - priv->pltstate = pltstate; - - /* select REMOTE control */ - retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_REMOTE, - NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - free(pltstate); - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_open: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - free(pltstate); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * optoscan_close - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int optoscan_close(RIG *rig) -{ - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[16]; - int ack_len, retval; - - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - /* select LOCAL control */ - retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_LOCAL, - NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_close: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - free(priv->pltstate); - - return RIG_OK; -} - -/* - * optoscan_get_info - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -const char *optoscan_get_info(RIG *rig) -{ - unsigned char ackbuf[16]; - int ack_len, retval; - static char info[64]; - - /* select LOCAL control */ - retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDID, - NULL, 0, ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return NULL; - } - - if (ack_len != 7) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_get_info: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return NULL; - } - - sprintf(info, "OptoScan%c%c%c, software version %d.%d, " - "interface version %d.%d\n", - ackbuf[2], ackbuf[3], ackbuf[4], - ackbuf[5] >> 4, ackbuf[5] & 0xf, - ackbuf[6] >> 4, ackbuf[6] & 0xf); - - return info; -} - -/* - * optoscan_get_ctcss_tone - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int optoscan_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone) -{ - unsigned char tonebuf[MAXFRAMELEN]; - int tone_len, retval; - - retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDCTCSS, NULL, 0, - tonebuf, &tone_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (tone_len != 4) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_get_ctcss_tone: ack NG (%#.2x), " - "len=%d\n", tonebuf[0], tone_len); - return -RIG_ERJCTED; - } - - tone_len -= 2; - - *tone = from_bcd_be(tonebuf + 2, tone_len * 2); - rig_debug(RIG_DEBUG_ERR, "optoscan_get_ctcss_tone: *tone=%d\n", *tone); - - return RIG_OK; -} - - -/* - * optoscan_get_dcs_code - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int optoscan_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code) -{ - unsigned char tonebuf[MAXFRAMELEN]; - int tone_len, retval; - - retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDCS, NULL, 0, - tonebuf, &tone_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (tone_len != 4) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_get_dcs_code: ack NG (%#.2x), " - "len=%d\n", tonebuf[0], tone_len); - return -RIG_ERJCTED; - } - - tone_len -= 2; - - *code = from_bcd_be(tonebuf + 2, tone_len * 2); - rig_debug(RIG_DEBUG_ERR, "optoscan_get_dcs_code: *code=%d\n", *code); - - return RIG_OK; -} - -int optoscan_recv_dtmf(RIG *rig, vfo_t vfo, char *digits, int *length) -{ - unsigned char dtmfbuf[MAXFRAMELEN], digit; - int len, digitpos; - unsigned char xlate[] = {'0', '1', '2', '3', '4', '5', '6', - '7', '8', '9', 'A', 'B', 'C', 'D', - '*', '#' - }; - digitpos = 0; - - do - { - int retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDTMF, - NULL, 0, dtmfbuf, &len); - - if (retval != RIG_OK) - { - return retval; - } - - if (len != 3) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_recv_dtmf: ack NG (%#.2x), len=%d\n", - dtmfbuf[0], len); - return -RIG_ERJCTED; - } - - digit = dtmfbuf[2]; - - if (digit < 16) - { - digits[digitpos] = xlate[digit]; - digitpos++; - } - } - while ((digit != 0x99) && (digitpos < *length)); - - *length = digitpos; - digits[digitpos] = 0; - - if (*length > 0) - { - rig_debug(RIG_DEBUG_ERR, "%s: %d digits - %s\n", __func__, *length, digits); - } - else - { - rig_debug(RIG_DEBUG_ERR, "%s: no digits to read.\n", __func__); - } - - return RIG_OK; -} - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int optoscan_set_ext_parm(RIG *rig, token_t token, value_t val) -{ - unsigned char epbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len; - int retval, subcode; - - memset(epbuf, 0, MAXFRAMELEN); - memset(ackbuf, 0, MAXFRAMELEN); - - switch (token) - { - case TOK_TAPECNTL: - if (val.i == 0) - { - subcode = S_OPTO_TAPE_OFF; - } - else - { - subcode = S_OPTO_TAPE_ON; - } - - break; - - case TOK_5KHZWIN: - if (val.i == 0) - { - subcode = S_OPTO_5KSCOFF; - } - else - { - subcode = S_OPTO_5KSCON; - } - - break; - - case TOK_SPEAKER: - if (val.i == 0) - { - subcode = S_OPTO_SPKROFF; - } - else - { - subcode = S_OPTO_SPKRON; - } - - break; - - default: - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, C_CTL_MISC, subcode, epbuf, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), " - "len=%d\n", __func__, ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - * and val points to a buffer big enough to hold the conf value. - */ -int optoscan_get_ext_parm(RIG *rig, token_t token, value_t *val) -{ - struct optostat status_block; - int retval; - - retval = optoscan_get_status_block(rig, &status_block); - - if (retval != RIG_OK) - { - return retval; - } - - switch (token) - { - case TOK_TAPECNTL: - val->i = status_block.tape_enabled; - break; - - case TOK_5KHZWIN: - val->i = status_block.fivekhz_enabled; - break; - - case TOK_SPEAKER: - val->i = status_block.speaker_enabled; - break; - - case TOK_AUDIO: - val->i = status_block.audio_present; - break; - - case TOK_DTMFPEND: - val->i = status_block.DTMF_pending; - break; - - case TOK_DTMFOVRR: - val->i = status_block.DTMF_overrun; - break; - - case TOK_CTCSSACT: - val->i = status_block.CTCSS_active; - break; - - case TOK_DCSACT: - val->i = status_block.DCS_active; - break; - - default: - return -RIG_ENIMPL; - } - - return RIG_OK; -} - -/* - * optoscan_set_level - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int optoscan_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val) -{ - unsigned char lvlbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; - int ack_len; - int lvl_cn, lvl_sc; /* Command Number, Subcommand */ - int icom_val; - int retval; - - memset(lvlbuf, 0, MAXFRAMELEN); - - /* - * So far, levels of float type are in [0.0..1.0] range - */ - if (RIG_LEVEL_IS_FLOAT(level)) - { - icom_val = val.f * 255; - } - else - { - icom_val = val.i; - } - - switch (level) - { - case RIG_LEVEL_AF: - lvl_cn = C_CTL_MISC; - - if (icom_val == 0) - { - lvl_sc = S_OPTO_SPKROFF; - } - else - { - lvl_sc = S_OPTO_SPKRON; - } - - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported set_level %s", rig_strlevel(level)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, lvl_cn, lvl_sc, lvlbuf, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - if (ack_len != 1 || ackbuf[0] != ACK) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_set_level: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * optoscan_get_level - * Assumes rig!=NULL, rig->state.priv!=NULL, val!=NULL - */ -int optoscan_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) -{ - struct optostat status_block; - int lvl_len = 0; - int icom_val; - int retval; - - if (level != RIG_LEVEL_AF) - { - int lvl_cn, lvl_sc; /* Command Number, Subcommand */ - unsigned char lvlbuf[MAXFRAMELEN]; - int cmdhead; - - switch (level) - { - case RIG_LEVEL_RAWSTR: - lvl_cn = C_RD_SQSM; - lvl_sc = S_SML; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "Unsupported get_level %s", rig_strlevel(level)); - return -RIG_EINVAL; - } - - retval = icom_transaction(rig, lvl_cn, lvl_sc, NULL, 0, - lvlbuf, &lvl_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* - * strbuf should contain Cn,Sc,Data area - */ - cmdhead = (lvl_sc == -1) ? 1 : 2; - lvl_len -= cmdhead; - - if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) - { - rig_debug(RIG_DEBUG_ERR, "optoscan_get_level: ack NG (%#.2x), " - "len=%d\n", lvlbuf[0], lvl_len); - return -RIG_ERJCTED; - } - - /* - * The result is a 3 digit BCD, but in *big endian* order: 0000..0255 - * (from_bcd is little endian) - */ - icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2); - } - else /* level == RIG_LEVEL_AF */ - { - retval = optoscan_get_status_block(rig, &status_block); - - if (retval != RIG_OK) - { - return retval; - } - - icom_val = 0; - - if (status_block.speaker_enabled == 1) - { - icom_val = 255; - } - } - - switch (level) - { - case RIG_LEVEL_RAWSTR: - val->i = icom_val; - break; - - default: - if (RIG_LEVEL_IS_FLOAT(level)) - { - val->f = (float)icom_val / 255; - } - else - { - val->i = icom_val; - } - } - - rig_debug(RIG_DEBUG_TRACE, "optoscan_get_level: %d %d %d %f\n", lvl_len, - icom_val, val->i, val->f); - - return RIG_OK; -} - -/* OS456 Pipeline tuning algorithm: - * Step 2: Send the next frequency and mode to the receiver using the - * TRANSFER NEXT FREQUENCY/MODE command. - * - * Step 3: Change the state of the RTS interface signal to cause the - * next frequency and mode to become the current frequency and - * mode, and the receiver to begin settling. - * - * Step 4: While the receiver is still settling on the current - * frequency and mode, send the next frequency and mode to the - * receiver using the TRANSFER NEXT FREQUENCY/MODE command. - * - * Step 5: Wait for the receiver to finish settling. The total - * settling time, including sending the next frequency and - * mode, is 20 milliseconds (0.02 seconds). - * - * Step 6: Check the squelch status by reading the DCD interface - * signal. If the squelch is open, scanning is stopped. - * Otherwise, scanning continues. Optionally, the status of - * the CTCSS/DCS/DTMF decoder can be checked, and the - * appropriate action taken. - * - * Step 7: Continuously repeat steps 3 through 6 above. - */ -int optoscan_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch) -{ - pltstate_t *state; - pltune_cb_t cb; - int rc, pin_state; - struct rig_state *rs; - - if (scan != RIG_SCAN_PLT) - { - return -RIG_ENAVAIL; - } - - rs = &rig->state; - cb = rig->callbacks.pltune; - state = ((struct icom_priv_data *)rs->priv)->pltstate; - - if (state == NULL) - { - return -RIG_EINTERNAL; - } - - if (state->freq == 0) /* pltstate_t is not initialized - perform setup */ - { - /* time for CIV command to be sent. this is subtracted from */ - /* rcvr settle time */ - state->usleep_time = (1000000 / (rig->state.rigport.parm.serial.rate)) - * 13 * 9; - - rc = cb(rig, vfo, &(state->next_freq), &(state->next_mode), - &(state->next_width), rig->callbacks.pltune_arg); - - if (rc == RIG_SCAN_STOP) - { - return RIG_OK; /* callback halted loop */ - } - - /* Step 1 is implicit, since hamlib does this when it opens the device */ - optoscan_send_freq(rig, state); /*Step 2*/ - } - - rc = !RIG_SCAN_STOP; - - while (rc != RIG_SCAN_STOP) - { - optoscan_RTS_toggle(rig); /*Step 3*/ - - state->freq = state->next_freq; - state->mode = state->next_mode; - - optoscan_start_timer(rig, state); - - rc = cb(rig, vfo, &(state->next_freq), &(state->next_mode), - &(state->next_width), rig->callbacks.pltune_arg); - - if (rc != RIG_SCAN_STOP) - { - optoscan_send_freq(rig, state); /*Step 4*/ - } - - optoscan_wait_timer(rig, state); /*Step 5*/ - - ser_get_car(&rs->rigport, &pin_state); - - if (pin_state) /*Step 6*/ - { - return RIG_OK; /* we've broken squelch - return(). caller can */ - /* get current freq & mode out of state str */ - } - } - - /* exiting pipeline loop - force state init on next call */ - state->freq = 0; - - return RIG_OK; -} - -/* - * Assumes rig!=NULL, status_block !=NULL - */ -static int optoscan_get_status_block(RIG *rig, struct optostat *status_block) -{ - int retval, ack_len, expected_len; - unsigned char ackbuf[MAXFRAMELEN]; - - memset(status_block, 0, sizeof(struct optostat)); - - retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDSTAT, NULL, 0, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - switch (rig->caps->rig_model) - { - case RIG_MODEL_OS456: - expected_len = 4; - break; - - case RIG_MODEL_OS535: - expected_len = 5; - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: unknown rig model", __func__); - return -RIG_ERJCTED; - break; - } - - if (ack_len != expected_len) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d\n", __func__, - ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - if (ackbuf[2] & 1) { status_block->remote_control = 1; } - - if (ackbuf[2] & 2) { status_block->DTMF_pending = 1; } - - if (ackbuf[2] & 4) { status_block->DTMF_overrun = 1; } - - if (ackbuf[2] & 16) { status_block->squelch_open = 1; } - - if (ackbuf[2] & 32) { status_block->CTCSS_active = 1; } - - if (ackbuf[2] & 64) { status_block->DCS_active = 1; } - - if (ackbuf[3] & 1) { status_block->tape_enabled = 1; } - - if (ackbuf[3] & 2) { status_block->speaker_enabled = 1; } - - if (ackbuf[3] & 4) { status_block->fivekhz_enabled = 1; } - - if (ackbuf[3] & 16) { status_block->audio_present = 1; } - - rig_debug(RIG_DEBUG_VERBOSE, "remote_control = %d\n", - status_block->remote_control); - rig_debug(RIG_DEBUG_VERBOSE, "DTMF_pending = %d\n", - status_block->DTMF_pending); - rig_debug(RIG_DEBUG_VERBOSE, "DTMF_overrun = %d\n", - status_block->DTMF_overrun); - rig_debug(RIG_DEBUG_VERBOSE, "squelch_open = %d\n", - status_block->squelch_open); - rig_debug(RIG_DEBUG_VERBOSE, "CTCSS_active = %d\n", - status_block->CTCSS_active); - rig_debug(RIG_DEBUG_VERBOSE, "DCS_active = %d\n", - status_block->DCS_active); - rig_debug(RIG_DEBUG_VERBOSE, "tape_enabled = %d\n", - status_block->tape_enabled); - rig_debug(RIG_DEBUG_VERBOSE, "speaker_enabled = %d\n", - status_block->speaker_enabled); - rig_debug(RIG_DEBUG_VERBOSE, "fivekhz_enabled = %d\n", - status_block->fivekhz_enabled); - rig_debug(RIG_DEBUG_VERBOSE, "audio_present = %d\n", - status_block->audio_present); - - return RIG_OK; -} - - -static int optoscan_send_freq(RIG *rig, pltstate_t *state) -{ - unsigned char buff[OPTO_BUFF_SIZE]; - char md, pd; - freq_t freq; - rmode_t mode; - - freq = state->next_freq; - mode = state->next_mode; - - memset(buff, 0, OPTO_BUFF_SIZE); - - to_bcd(buff, freq, 5 * 2); /* to_bcd requires nibble len */ - - rig2icom_mode(rig, mode, 0, (unsigned char *) &md, (signed char *) &pd); - buff[5] = md; - - /* read echo'd chars only...there will be no ACK from this command - * - * Note: - * It may have waited fro pltstate->usleep_time before reading the echo'd - * chars, but the read will be blocking anyway. --SF - * */ - return icom_transaction(rig, C_CTL_MISC, S_OPTO_NXT, buff, 6, NULL, NULL); -} - -static int optoscan_RTS_toggle(RIG *rig) -{ - struct rig_state *rs; - int state = 0; - - rs = &rig->state; - ser_get_rts(&rs->rigport, &state); - ser_set_rts(&rs->rigport, !state); - - return RIG_OK; -} - -static int optoscan_start_timer(RIG *rig, pltstate_t *state) -{ - gettimeofday(&(state->timer_start), NULL); - - return RIG_OK; -} - -static int optoscan_wait_timer(RIG *rig, pltstate_t *state) -{ - struct icom_priv_caps *priv_caps; - int usec_diff; - int settle_usec; - - priv_caps = (struct icom_priv_caps *)rig->caps->priv; - settle_usec = priv_caps->settle_time * 1000; /*convert settle time (ms) to */ - /* settle time (usec) */ - - gettimeofday(&(state->timer_current), NULL); - - usec_diff = (int)labs((state->timer_current.tv_usec) - - (state->timer_start.tv_usec)); - - if (usec_diff < settle_usec) - { - hl_usleep(settle_usec - usec_diff); /* sleep balance of settle_time */ - } - - return RIG_OK; -} diff --git a/icom/optoscan.h b/icom/optoscan.h deleted file mode 100644 index 195a2b9bf..000000000 --- a/icom/optoscan.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Hamlib CI-V backend - main header - * Copyright (c) 2000-2003 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifndef _OPTOSCAN_H -#define _OPTOSCAN_H 1 - -#include -#include -#include - -#define TOK_TAPECNTL TOKEN_BACKEND(1) -#define TOK_5KHZWIN TOKEN_BACKEND(2) -#define TOK_SPEAKER TOKEN_BACKEND(3) -#define TOK_AUDIO TOKEN_BACKEND(4) -#define TOK_DTMFPEND TOKEN_BACKEND(5) -#define TOK_DTMFOVRR TOKEN_BACKEND(6) -#define TOK_CTCSSACT TOKEN_BACKEND(7) -#define TOK_DCSACT TOKEN_BACKEND(8) - -#define OPTO_BUFF_SIZE 64 - -int optoscan_open(RIG *rig); -int optoscan_close(RIG *rig); -const char* optoscan_get_info(RIG *rig); -int optoscan_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone); -int optoscan_get_dcs_code(RIG * rig, vfo_t vfo, tone_t *code); -int optoscan_recv_dtmf(RIG *rig, vfo_t vfo, char *digits, int *length); -int optoscan_set_ext_parm(RIG *rig, token_t token, value_t val); -int optoscan_get_ext_parm(RIG *rig, token_t token, value_t *val); -int optoscan_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val); -int optoscan_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val); -int optoscan_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch); - -struct optostat { - int remote_control; - int DTMF_pending; - int DTMF_overrun; - int squelch_open; - int CTCSS_active; - int DCS_active; - int tape_enabled; - int speaker_enabled; - int fivekhz_enabled; - int audio_present; -}; - -#endif /* _OPTOSCAN_H */ diff --git a/icom/os456.c b/icom/os456.c deleted file mode 100644 index 584613ef2..000000000 --- a/icom/os456.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Hamlib CI-V backend - description of the OptoScan456 - * Copyright (c) 2000-2004 by Stephane Fillod and Michael Smith - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -/* - * This backend is currently being maintained by Michael Smith, KE4RJQ. - * Email: james (dot) m (dot) smith (at) earthlink (dot) net - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "idx_builtin.h" -#include "icom.h" -#include "tones.h" -#include "token.h" -#include "optoscan.h" - -extern struct confparams opto_ext_parms[]; - -#define OS456_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) -#define OS456_VFO_ALL (RIG_VFO_A) -#define OS456_LEVELS (RIG_LEVEL_RAWSTR|RIG_LEVEL_AF) -#define OS456_SCAN_OPS (RIG_SCAN_PLT) -/* - * The signal strength data is in the form of two bytes, each consisting - * of two BCD digits. The signal strength is reported in units of absolute - * dBm as measured at the antenna connector. The reported signal strength - * ranges from a maximum signal of 0 dBm to a minimum signal of - 125 dBm. - * A minus sign is implied. - */ - -#define OS456_STR_CAL { 2, { \ - { 0, 60 }, \ - { 125, -60 }, \ - } } /* TBC */ - -/* - * The OptoScan is not actually a rig. This is an add-in circuit board - * for the Realistic PRO-2006 and PRO-2005 Scanning VHF-UHF Receivers. - * http://www.optoelectronics.com/tech/pdf/os535/os535_ci5_spec_v10.pdf - * - * TODO: srch_dcs, srch_ctcss, rcv_dtmf, and make icom_probe opto aware - */ - -static const struct icom_priv_caps os456_priv_caps = -{ - 0x80, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - NULL, - .settle_time = 20, -}; - -const struct rig_caps os456_caps = -{ - .rig_model = RIG_MODEL_OS456, - .model_name = "OptoScan456", - .mfg_name = "Optoelectronics", - .version = "0.3", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_SCANNER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_SERIAL_CAR, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 38400, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = OS456_LEVELS, - .has_set_level = RIG_LEVEL_AF, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = full_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = RIG_OP_NONE, - .scan_ops = OS456_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { RIG_CHAN_END, }, - - .rx_range_list1 = { - { MHz(25), MHz(520), OS456_MODES, -1, -1, OS456_VFO_ALL}, - { MHz(760), MHz(1300), OS456_MODES, -1, -1, OS456_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, /* this is a scanner */ - - .rx_range_list2 = { - { MHz(25), MHz(520), OS456_MODES, -1, -1, OS456_VFO_ALL}, - { MHz(760), MHz(823.995), OS456_MODES, -1, -1, OS456_VFO_ALL}, - { MHz(849), MHz(868.995), OS456_MODES, -1, -1, OS456_VFO_ALL}, - { MHz(894), MHz(1300), OS456_MODES, -1, -1, OS456_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* this is a scanner */ - - .tuning_steps = { - {OS456_MODES, kHz(5)}, - {OS456_MODES, kHz(12.5)}, - {OS456_MODES, kHz(50)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_WFM, kHz(15)}, /* TBC */ - RIG_FLT_END, - }, - .str_cal = OS456_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& os456_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = optoscan_open, - .rig_close = optoscan_close, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .get_dcd = icom_get_dcd, - - .decode_event = icom_decode_event, - - .get_info = optoscan_get_info, - - .get_ctcss_tone = optoscan_get_ctcss_tone, - .get_dcs_code = optoscan_get_dcs_code, - .recv_dtmf = optoscan_recv_dtmf, - - .extparms = opto_ext_parms, - .set_ext_parm = optoscan_set_ext_parm, - .get_ext_parm = optoscan_get_ext_parm, - - .set_level = optoscan_set_level, - .get_level = optoscan_get_level, - - .scan = optoscan_scan, - -}; - diff --git a/icom/os535.c b/icom/os535.c deleted file mode 100644 index 3db9e9e52..000000000 --- a/icom/os535.c +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Hamlib CI-V backend - description of the OptoScan535 - * Copyright (c) 2000-2004 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -/* - * This backend is currently being maintained by Michael Smith, KE4RJQ. - * Email: james (dot) m (dot) smith (at) earthlink (dot) net - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "idx_builtin.h" -#include "icom.h" -#include "tones.h" -#include "optoscan.h" - -extern struct confparams opto_ext_parms[]; - -#define OS535_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) -#define OS535_VFO_ALL (RIG_VFO_A) -#define OS535_LEVELS (RIG_LEVEL_RAWSTR|RIG_LEVEL_AF) -#define OS535_SCAN_OPS (RIG_SCAN_PLT) - -#define OS535_STR_CAL { 2, { \ - { 20, 60 }, \ - { 137, -60 }, \ - } } /* TBC */ - -/* - * The OptoScan is not actually a rig. This is an add-in circuit board - * for the Realistic PRO-2035 and PRO-2045 Scanning VHF-UHF Receivers. - * http://www.optoelectronics.com/tech/pdf/os535/os535_ci5_spec_v10.pdf - * - * TODO: srch_dcs, srch_ctcss, rcv_dtmf, and make icom_probe opto aware - */ - -static const struct icom_priv_caps os535_priv_caps = -{ - 0x80, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - NULL, - .settle_time = 12, -}; - -const struct rig_caps os535_caps = -{ - .rig_model = RIG_MODEL_OS535, - .model_name = "OptoScan535", - .mfg_name = "Optoelectronics", - .version = "0.3", - .copyright = "LGPL", - .status = RIG_STATUS_BETA, - .rig_type = RIG_TYPE_SCANNER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_SERIAL_CAR, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 38400, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = RIG_FUNC_NONE, - .has_set_func = RIG_FUNC_NONE, - .has_get_level = OS535_LEVELS, - .has_set_level = RIG_LEVEL_AF, - .has_get_parm = RIG_PARM_NONE, - .has_set_parm = RIG_PARM_NONE, - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = full_ctcss_list, - .dcs_list = full_dcs_list, - .preamp = { RIG_DBLST_END, }, - .attenuator = { RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = RIG_OP_NONE, - .scan_ops = OS535_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { RIG_CHAN_END, }, - - .rx_range_list1 = { - { MHz(25), MHz(520), OS535_MODES, -1, -1, OS535_VFO_ALL}, - { MHz(760), MHz(1300), OS535_MODES, -1, -1, OS535_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, /* this is a scanner */ - - .rx_range_list2 = { - { MHz(25), MHz(520), OS535_MODES, -1, -1, OS535_VFO_ALL}, - { MHz(760), MHz(823.995), OS535_MODES, -1, -1, OS535_VFO_ALL}, - { MHz(849), MHz(868.995), OS535_MODES, -1, -1, OS535_VFO_ALL}, - { MHz(894), MHz(1300), OS535_MODES, -1, -1, OS535_VFO_ALL}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* this is a scanner */ - - .tuning_steps = { - {OS535_MODES, kHz(5)}, - {OS535_MODES, kHz(12.5)}, - {OS535_MODES, kHz(50)}, - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_WFM, kHz(15)}, /* TBC */ - RIG_FLT_END, - }, - .str_cal = OS535_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& os535_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = optoscan_open, - .rig_close = optoscan_close, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - - .get_dcd = icom_get_dcd, - - .decode_event = icom_decode_event, - - .get_info = optoscan_get_info, - - .get_ctcss_tone = optoscan_get_ctcss_tone, - .get_dcs_code = optoscan_get_dcs_code, - .recv_dtmf = optoscan_recv_dtmf, - - .extparms = opto_ext_parms, - .set_ext_parm = optoscan_set_ext_parm, - .get_ext_parm = optoscan_get_ext_parm, - - .set_level = optoscan_set_level, - .get_level = optoscan_get_level, - - .scan = optoscan_scan, - -}; - diff --git a/icom/perseus.c b/icom/perseus.c deleted file mode 100644 index 0b1adeae5..000000000 --- a/icom/perseus.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Hamlib CI-V backend - Perseus description - * Copyright (c) 2016 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include "serial.h" -#include "misc.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" - - -/* TODO: $09 DRM, $0a USER */ -#define PERSEUS_MODES (RIG_MODE_AM|RIG_MODE_SAM|RIG_MODE_SSB| \ - RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_RTTY|RIG_MODE_RTTYR| \ - RIG_MODE_FM) - -#define PERSEUS_FUNCS (RIG_FUNC_NONE) - -/* TODO (not standard) : - * RIG_LEVEL_AGC|RIG_LEVEL_NB|RIG_LEVEL_ANR|RIG_LEVEL_ANR|RIG_LEVEL_AF|RIG_LEVEL_ANF - */ - -#define PERSEUS_LEVELS (RIG_LEVEL_ATT|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR) - -#define PERSEUS_PARMS (RIG_PARM_NONE) - -/* S-Meter calibration, according to the Reference Manual */ -#define PERSEUS_STR_CAL { 2, \ - { \ - { 0, -67 }, /* -140 dBm */ \ - { 255, 103 }, /* +30 dBm */ \ - } } - - -static int perseus_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd); -static void perseus_i2r_mode(RIG *rig, unsigned char md, int pd, - rmode_t *mode, pbwidth_t *width); - -static const struct icom_priv_caps perseus_priv_caps = -{ - 0xE1, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - .r2i_mode = perseus_r2i_mode, - .i2r_mode = perseus_i2r_mode, -}; - - -/* - * PERSEUS rigs capabilities. - * - * PERSEUS Receiver CAT Interface Reference Manual (Revision EN03) : - * http://microtelecom.it/perseus/PERSEUS_CI-V_Interface-EN03.pdf - */ -const struct rig_caps perseus_caps = -{ - .rig_model = RIG_MODEL_PERSEUS, - .model_name = "Perseus", - .mfg_name = "Microtelecom", - .version = BACKEND_VER ".0", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_PCRECEIVER, - .ptt_type = RIG_PTT_NONE, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - - .has_get_func = PERSEUS_FUNCS, - .has_set_func = PERSEUS_FUNCS, - .has_get_level = PERSEUS_LEVELS, - .has_set_level = RIG_LEVEL_SET(PERSEUS_LEVELS), - .has_get_parm = PERSEUS_PARMS, - .has_set_parm = PERSEUS_PARMS, - .level_gran = {}, - .parm_gran = {}, - .ctcss_list = NULL, - .dcs_list = NULL, - .preamp = { RIG_DBLST_END, }, - .attenuator = { 10, 20, 30, RIG_DBLST_END, }, - .max_rit = Hz(0), - .max_xit = Hz(0), - .max_ifshift = Hz(0), - .targetable_vfo = 0, - .vfo_ops = RIG_OP_NONE, - .transceive = RIG_TRN_OFF, - .bank_qty = 0, - .chan_desc_sz = 0, - - .chan_list = { - RIG_CHAN_END, - }, - - .rx_range_list1 = { - {kHz(10), MHz(30), PERSEUS_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list1 = { RIG_FRNG_END, }, - - .rx_range_list2 = { - {kHz(10), MHz(30), PERSEUS_MODES, -1, -1, RIG_VFO_A}, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ - - .tuning_steps = { - {PERSEUS_MODES, 100}, /* resolution */ - RIG_TS_END, - }, - /* mode/filter list, remember: order matters! */ - .filters = { - {RIG_MODE_SSB | RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM | RIG_MODE_SAM, kHz(8)}, - {RIG_MODE_FM, kHz(15)}, - RIG_FLT_END, - }, - - .str_cal = PERSEUS_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& perseus_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - - .set_level = icom_set_level, - .get_level = icom_get_level, - -}; - -/* - * Function definitions below - */ - - -/* - * This function does the special bandwidth coding for the Perseus - * - * NB: the filter width will be ignored. - */ -static int perseus_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, - unsigned char *md, signed char *pd) -{ - int err; - - err = rig2icom_mode(rig, mode, width, md, pd); - - if (err == 0 && mode == RIG_MODE_SAM) - { - *md = 0x06; - } - - return err; -} - -static void perseus_i2r_mode(RIG *rig, unsigned char md, int pd, - rmode_t *mode, pbwidth_t *width) -{ - icom2rig_mode(rig, md, pd, mode, width); - - if (md == 0x06) - { - *mode = RIG_MODE_SAM; - } -} - diff --git a/icom/x108g.c b/icom/x108g.c deleted file mode 100644 index 89c4a5aa4..000000000 --- a/icom/x108g.c +++ /dev/null @@ -1,540 +0,0 @@ -/* - * Hamlib CI-V backend - description of Xeigu X108G and variations - * Adapted from IC-7000 code 2017 by Michael Black W9MDB - * As of this date there is no CAT manual for this rig - * The X108G is supposed to emulate the IC-7000 but there are a few - * differences as of 2017-02-11 in the return data from the rig - * It's quite possible they may fix all these eventually - * If they do the functions below can go back to the icom routines - * #1 the response to PTT - * #2 the inability to set_dsp_mode - * #3 setting splie which impacts 3 routines - * - * Copyright (c) 2004-2010 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include /* String function definitions */ - -#include -#include "token.h" -#include "idx_builtin.h" - -#include "icom.h" -#include "icom_defs.h" -#include "frame.h" -#include "misc.h" -#include "bandplan.h" - -#define X108G_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM) -#define X108G_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR) -#define X108G_NOT_TS_MODES (X108G_ALL_RX_MODES &~X108G_1HZ_TS_MODES) - -#define X108G_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_CWR|RIG_MODE_SSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM) -#define X108G_AM_TX_MODES (RIG_MODE_AM) - -#define X108G_FUNCS (RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_NR|RIG_FUNC_MON|RIG_FUNC_MN|RIG_FUNC_ANF|RIG_FUNC_VSC|RIG_FUNC_LOCK|RIG_FUNC_ARO) - -#define X108G_LEVELS (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_COMP|RIG_LEVEL_BKINDL|RIG_LEVEL_NR|RIG_LEVEL_PBT_IN|RIG_LEVEL_PBT_OUT|RIG_LEVEL_CWPITCH|RIG_LEVEL_RFPOWER|RIG_LEVEL_MICGAIN|RIG_LEVEL_KEYSPD|RIG_LEVEL_NOTCHF_RAW|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR|RIG_LEVEL_AF|RIG_LEVEL_RF|RIG_LEVEL_VOXGAIN|RIG_LEVEL_VOXDELAY|RIG_LEVEL_SWR|RIG_LEVEL_ALC) - -#define X108G_VFOS (RIG_VFO_A|RIG_VFO_B|RIG_VFO_MEM) -#define X108G_PARMS (RIG_PARM_ANN|RIG_PARM_BACKLIGHT|RIG_PARM_APO|RIG_PARM_TIME|RIG_PARM_BEEP) - -#define X108G_VFO_OPS (RIG_OP_CPY|RIG_OP_XCHG|RIG_OP_FROM_VFO|RIG_OP_TO_VFO|RIG_OP_MCL|RIG_OP_TUNE) -#define X108G_SCAN_OPS (RIG_SCAN_MEM|RIG_SCAN_PROG|RIG_SCAN_SLCT|RIG_SCAN_PRIO) - -#define X108G_ANTS (RIG_ANT_1|RIG_ANT_2) /* ant-1 is Hf-6m, ant-2 is 2m-70cm */ - -/* - * Measurement by Mark, WA0TOP - * - * s/n 0503103. - * Preamp off, ATT off, mode AM, f=10 MHz - */ -#define X108G_STR_CAL { 14, \ - { \ - { 0, -54 }, /* first one is made up */ \ - { 5, -29 }, \ - { 15, -27 }, \ - { 43, -22 }, \ - { 68, -17 }, \ - { 92, -12 }, \ - { 120, -6 }, \ - { 141, 2 }, \ - { 162, 13 }, \ - { 182, 25 }, \ - { 202, 38 }, \ - { 222, 47 }, \ - { 241, 57 }, \ - { 255, 63 } \ - } } - -/* - * - * X108G channel caps. - */ -#define X108G_MEM_CAP { \ - .freq = 1, \ - .mode = 1, \ - .width = 1, \ - .split = 1, \ - .tx_freq = 1, \ - .tx_mode = 1, \ - .tx_width = 1, \ - .rptr_offs = 1, \ - .rptr_shift = 1, \ - .ctcss_tone = 1, \ - .ctcss_sql = 1, \ - .funcs = X108G_FUNCS, \ - .levels = RIG_LEVEL_SET(X108G_LEVELS), \ -} - -/* - * Prototypes -*/ -static int x108g_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt); -static int x108g_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, - vfo_t tx_vfo); -static int x108g_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq); -static int x108g_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, - pbwidth_t tx_width); - -/* - * IC-7000 rig capabilities. - * - * TODO: complete command set (esp. the $1A bunch!) and testing.. - */ -static const struct icom_priv_caps x108g_priv_caps = -{ - 0x70, /* default address */ - 0, /* 731 mode */ - 0, /* no XCHG */ - ic7200_ts_sc_list -}; - - -const struct rig_caps x108g_caps = -{ - .rig_model = RIG_MODEL_X108G, - .model_name = "X108G", - .mfg_name = "Xeigu", - .version = BACKEND_VER ".1", - .copyright = "LGPL", - .status = RIG_STATUS_ALPHA, - .rig_type = RIG_TYPE_TRANSCEIVER, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_RIG, - .port_type = RIG_PORT_SERIAL, - .serial_rate_min = 300, - .serial_rate_max = 19200, - .serial_data_bits = 8, - .serial_stop_bits = 1, - .serial_parity = RIG_PARITY_NONE, - .serial_handshake = RIG_HANDSHAKE_NONE, - .write_delay = 0, - .post_write_delay = 0, - .timeout = 1000, - .retry = 3, - .has_get_func = X108G_FUNCS, - .has_set_func = X108G_FUNCS, - .has_get_level = X108G_LEVELS, - .has_set_level = RIG_LEVEL_SET(X108G_LEVELS), - .has_get_parm = X108G_PARMS, - .has_set_parm = RIG_PARM_SET(X108G_PARMS), - .level_gran = { - [LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } }, - }, - .parm_gran = {}, - .ctcss_list = common_ctcss_list, - .dcs_list = common_dcs_list, - .preamp = { 10, RIG_DBLST_END, }, /* FIXME: TBC it's a guess*/ - .attenuator = { 12, RIG_DBLST_END, }, - .max_rit = Hz(9999), - .max_xit = Hz(9999), - .max_ifshift = Hz(0), /* TODO */ - .targetable_vfo = 0, - .vfo_ops = X108G_VFO_OPS, - .scan_ops = X108G_SCAN_OPS, - .transceive = RIG_TRN_RIG, - .bank_qty = 5, - .chan_desc_sz = 0, /* TODO */ - - .chan_list = { - { 1, 99, RIG_MTYPE_MEM, X108G_MEM_CAP }, - { 100, 105, RIG_MTYPE_EDGE, X108G_MEM_CAP }, /* two by two */ - { 106, 107, RIG_MTYPE_CALL, X108G_MEM_CAP }, - RIG_CHAN_END, - }, - - .rx_range_list1 = { {kHz(30), MHz(199.999999), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS}, - {MHz(400), MHz(470), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS}, RIG_FRNG_END, - }, - .tx_range_list1 = { - FRQ_RNG_HF(1, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1), - FRQ_RNG_6m(1, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1), - FRQ_RNG_2m(1, X108G_OTHER_TX_MODES, W(2), W(50), X108G_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(1, X108G_OTHER_TX_MODES, W(2), W(35), X108G_VFOS, RIG_ANT_2), - FRQ_RNG_HF(1, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(1, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_2m(1, X108G_AM_TX_MODES, W(2), W(20), X108G_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(1, X108G_OTHER_TX_MODES, W(2), W(14), X108G_VFOS, RIG_ANT_2), - RIG_FRNG_END, - }, - - .rx_range_list2 = { {kHz(30), MHz(199.999999), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS}, - {MHz(400), MHz(470), X108G_ALL_RX_MODES, -1, -1, X108G_VFOS}, RIG_FRNG_END, - }, - .tx_range_list2 = { /* needs the 5 mhz channels added */ - FRQ_RNG_HF(2, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1), - FRQ_RNG_6m(2, X108G_OTHER_TX_MODES, W(2), W(100), X108G_VFOS, RIG_ANT_1), - FRQ_RNG_2m(2, X108G_OTHER_TX_MODES, W(2), W(50), X108G_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(2, X108G_OTHER_TX_MODES, W(2), W(35), X108G_VFOS, RIG_ANT_2), - FRQ_RNG_HF(2, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_6m(2, X108G_AM_TX_MODES, W(1), W(40), X108G_VFOS, RIG_ANT_1), /* AM class */ - FRQ_RNG_2m(2, X108G_AM_TX_MODES, W(2), W(20), X108G_VFOS, RIG_ANT_2), - FRQ_RNG_70cm(2, X108G_OTHER_TX_MODES, W(2), W(14), X108G_VFOS, RIG_ANT_2), - RIG_FRNG_END, - }, - - .tuning_steps = { - {X108G_1HZ_TS_MODES, 1}, - {X108G_NOT_TS_MODES, 10}, - {X108G_ALL_RX_MODES, Hz(100)}, - {X108G_ALL_RX_MODES, kHz(1)}, - {X108G_ALL_RX_MODES, kHz(5)}, - {X108G_ALL_RX_MODES, kHz(9)}, - {X108G_ALL_RX_MODES, kHz(10)}, - {X108G_ALL_RX_MODES, kHz(12.5)}, - {X108G_ALL_RX_MODES, kHz(20)}, - {X108G_ALL_RX_MODES, kHz(25)}, - {X108G_ALL_RX_MODES, kHz(100)}, - {X108G_NOT_TS_MODES, MHz(1)}, - RIG_TS_END, - }, - - /* mode/filter list, remember: order matters! But duplication may speed up search. Put the most commonly used modes first! Remember these are defaults, with dsp rigs you can change them to anything you want except FM and WFM which are fixed */ - .filters = { - {RIG_MODE_SSB, kHz(2.4)}, - {RIG_MODE_SSB, kHz(1.8)}, - {RIG_MODE_SSB, kHz(3)}, - {RIG_MODE_FM, kHz(10)}, - {RIG_MODE_FM, kHz(15)}, - {RIG_MODE_FM, kHz(7)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(500)}, - {RIG_MODE_CW | RIG_MODE_CWR | RIG_MODE_RTTY | RIG_MODE_RTTYR, Hz(250)}, - {RIG_MODE_CW | RIG_MODE_CWR, kHz(1.2)}, - {RIG_MODE_RTTY | RIG_MODE_RTTYR, kHz(2.4)}, - {RIG_MODE_AM, kHz(6)}, - {RIG_MODE_AM, kHz(3)}, - {RIG_MODE_AM, kHz(9)}, - {RIG_MODE_WFM, kHz(280)}, - RIG_FLT_END, - }, - - .str_cal = X108G_STR_CAL, - - .cfgparams = icom_cfg_params, - .set_conf = icom_set_conf, - .get_conf = icom_get_conf, - - .priv = (void *)& x108g_priv_caps, - .rig_init = icom_init, - .rig_cleanup = icom_cleanup, - .rig_open = NULL, - .rig_close = NULL, - - .set_freq = icom_set_freq, - .get_freq = icom_get_freq, - .set_mode = icom_set_mode, - .get_mode = icom_get_mode, - .set_vfo = icom_set_vfo, - .set_ant = NULL, /*automatically set by rig depending band */ - .get_ant = NULL, - - .set_rit = icom_set_rit, - - .decode_event = icom_decode_event, - .set_level = icom_set_level, - .get_level = icom_get_level, - .set_func = icom_set_func, - .get_func = icom_get_func, - .set_parm = NULL, - .get_parm = NULL, - .set_mem = icom_set_mem, - .set_bank = icom_set_bank, - .vfo_op = icom_vfo_op, - .scan = icom_scan, - .set_ptt = x108g_set_ptt, - .get_ptt = icom_get_ptt, - .get_dcd = icom_get_dcd, - .set_ts = icom_set_ts, - .get_ts = NULL, - .set_rptr_shift = icom_set_rptr_shift, - .get_rptr_shift = NULL, - .set_rptr_offs = icom_set_rptr_offs, - .get_rptr_offs = icom_get_rptr_offs, - .set_ctcss_tone = icom_set_ctcss_tone, - .get_ctcss_tone = icom_get_ctcss_tone, - .set_ctcss_sql = icom_set_ctcss_sql, - .get_ctcss_sql = icom_get_ctcss_sql, - .set_dcs_code = icom_set_dcs_code, - .get_dcs_code = icom_get_dcs_code, - .set_split_freq = x108g_set_split_freq, - .get_split_freq = icom_get_split_freq, - .set_split_mode = x108g_set_split_mode, - .get_split_mode = icom_get_split_mode, - .set_split_vfo = x108g_set_split_vfo, - .get_split_vfo = NULL, - -}; - -/* - * x108g_set_ptt - * Assumes rig!=NULL, rig->state.priv!=NULL - * The response from the x108g isn't quite right at this time - * Eventually they may fix their firmware and we can use the icom_set_split_vfo - */ -int x108g_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt) -{ - unsigned char ackbuf[MAXFRAMELEN], pttbuf[1]; - int ack_len = sizeof(ackbuf), retval; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - pttbuf[0] = ptt == RIG_PTT_ON ? 1 : 0; - - retval = icom_transaction(rig, C_CTL_PTT, S_PTT, pttbuf, 1, - ackbuf, &ack_len); - - if (retval != RIG_OK) - { - return retval; - } - - /* X108G doesn't quite follow ICOM protocol -- returns 0x1c instead of 0xfb */ - if (ack_len != 3 || ackbuf[0] != 0x1c) - { - rig_debug(RIG_DEBUG_ERR, "%s: ack NG (%#.2x), len=%d, ptt=%d\n", __func__, - ackbuf[0], ack_len, ptt); - return -RIG_ERJCTED; - } - - return RIG_OK; -} - -/* - * The response from the x108g isn't quite right at this time - * Eventually they may fix their firmware and we can use the icom_set_split_vfo - * x108g_set_split - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -static int x108g_set_split_vfo(RIG *rig, vfo_t vfo, split_t split, vfo_t tx_vfo) -{ - struct icom_priv_data *priv = (struct icom_priv_data *)rig->state.priv; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf), rc; - int split_sc; - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - - switch (split) - { - case RIG_SPLIT_OFF: - split_sc = S_SPLT_OFF; - break; - - case RIG_SPLIT_ON: - split_sc = S_SPLT_ON; - - if (!priv->split_on) - { - /* ensure VFO A is Rx and VFO B is Tx as we assume that elsewhere */ - if ((rig->state.vfo_list & (RIG_VFO_A | RIG_VFO_B)) == (RIG_VFO_A | RIG_VFO_B)) - { - if (RIG_OK != (rc = icom_set_vfo(rig, RIG_VFO_A))) { return rc; } - } - } - - break; - - default: - rig_debug(RIG_DEBUG_ERR, "%s: Unsupported split %d", __func__, split); - return -RIG_EINVAL; - } - - if (RIG_OK != (rc = icom_transaction(rig, C_CTL_SPLT, split_sc, NULL, 0, - - ackbuf, &ack_len))) { return rc; } - - if (ack_len != 2 || ackbuf[0] != 0x0f) // instead of len=1 & ACK - { - rig_debug(RIG_DEBUG_ERR, "x108g_set_split: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - - priv->split_on = RIG_SPLIT_ON == split; - return RIG_OK; -} - -/* - * x108g_set_split_freq - * Assumes rig!=NULL, rig->state.priv!=NULL, - * - * Assumes also that the current VFO is the rx VFO. - */ -static int x108g_set_split_freq(RIG *rig, vfo_t vfo, freq_t tx_freq) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) { return rc; } - - if (RIG_OK != (rc = icom_set_freq(rig, RIG_VFO_CURR, tx_freq))) { return rc; } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) { return rc; } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if ((rig->state.vfo_list & (RIG_VFO_A | RIG_VFO_B)) == (RIG_VFO_A | RIG_VFO_B) - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != (rc = icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, - ackbuf, &ack_len))) { return rc; } - - if (ack_len != 2 || ackbuf[0] != 0x0f) - { - rig_debug(RIG_DEBUG_ERR, "x108g_set_split_freq: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) { return rc; } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) { return rc; } - - if (RIG_OK != (rc = rig_set_freq(rig, RIG_VFO_CURR, tx_freq))) { return rc; } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) { return rc; } - - if ((rig->state.vfo_list & (RIG_VFO_A | RIG_VFO_B)) == (RIG_VFO_A | RIG_VFO_B) - && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != (rc = icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, - ackbuf, &ack_len))) { return rc; } - } - - return rc; -} - -/* - * x108g_set_split_mode - * Assumes rig!=NULL, rig->state.priv!=NULL, - */ -static int x108g_set_split_mode(RIG *rig, vfo_t vfo, rmode_t tx_mode, - pbwidth_t tx_width) -{ - int rc; - vfo_t rx_vfo, tx_vfo; - struct icom_priv_data *priv; - struct rig_state *rs; - unsigned char ackbuf[MAXFRAMELEN]; - int ack_len = sizeof(ackbuf); - - rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); - rs = &rig->state; - priv = (struct icom_priv_data *)rs->priv; - - /* This method works also in memory mode(RIG_VFO_MEM) */ - if (!priv->no_xchg && rig_has_vfo_op(rig, RIG_OP_XCHG)) - { - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) { return rc; } - - if (RIG_OK != (rc = rig->caps->set_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) { return rc; } - - if (RIG_OK != (rc = icom_vfo_op(rig, vfo, RIG_OP_XCHG))) { return rc; } - - return rc; - } - - /* In the case of rigs with an A/B VFO arrangement we assume the - current VFO is VFO A and the split Tx VFO is always VFO B. These - assumptions allow us to deal with the lack of VFO and split - queries */ - if ((rig->state.vfo_list & (RIG_VFO_A | RIG_VFO_B)) == (RIG_VFO_A | RIG_VFO_B) - && priv->split_on) /* broken if user changes split on rig :( */ - { - /* VFO A/B style rigs swap VFO on split Tx so we need to disable - split for certainty */ - if (RIG_OK != (rc = icom_transaction(rig, C_CTL_SPLT, S_SPLT_OFF, NULL, 0, - ackbuf, &ack_len))) { return rc; } - - if (ack_len != 2 || ackbuf[0] != 0x0f) - { - rig_debug(RIG_DEBUG_ERR, "x108g_set_split_mode: ack NG (%#.2x), " - "len=%d\n", ackbuf[0], ack_len); - return -RIG_ERJCTED; - } - } - - if (RIG_OK != (rc = icom_get_split_vfos(rig, &rx_vfo, &tx_vfo))) { return rc; } - - if (RIG_OK != (rc = icom_set_vfo(rig, tx_vfo))) { return rc; } - - if (RIG_OK != (rc = rig->caps->set_mode(rig, RIG_VFO_CURR, tx_mode, - tx_width))) { return rc; } - - if (RIG_OK != (rc = icom_set_vfo(rig, rx_vfo))) { return rc; } - - if ((rig->state.vfo_list & (RIG_VFO_A | RIG_VFO_B)) == (RIG_VFO_A | RIG_VFO_B) - && priv->split_on) - { - /* Re-enable split */ - if (RIG_OK != (rc = icom_transaction(rig, C_CTL_SPLT, S_SPLT_ON, NULL, 0, - ackbuf, &ack_len))) { return rc; } - } - - return rc; -} - diff --git a/microtune/Makefile.am b/microtune/Makefile.am deleted file mode 100644 index 6295dc790..000000000 --- a/microtune/Makefile.am +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright 2001 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -MTSRC = module_4937.c module_4702.c - -GRIO_SOURCES = \ - i2cio.cc i2cio.h \ - i2cio_pp.cc i2cio_pp.h \ - i2c.cc i2c.h \ - microtune_4937.cc microtune_4937.h \ - microtune_4702.cc microtune_4702.h \ - microtune_eval_board.cc microtune_eval_board.h \ - microtune_eval_board_defs.h - -noinst_LTLIBRARIES = libhamlib-microtune.la -libhamlib_microtune_la_SOURCES = $(MTSRC) $(GRIO_SOURCES) microtune.cc microtune.h -hamlib_microtune_la_LIBADD = -lstdc++ diff --git a/microtune/i2c.cc b/microtune/i2c.cc deleted file mode 100644 index 8d262c610..000000000 --- a/microtune/i2c.cc +++ /dev/null @@ -1,146 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: i2c.cc -* Description: generic i2c bus controller -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "i2c.h" - -i2c::i2c (i2cio *io) -{ - d_io = io; - d_io->lock (); - - stop (); // get bus in known state - - d_io->unlock (); -} - - -// start: -// entry: SCL = 1, SDA = 1 -// exit: SCL = 0, SDA = 0 - -void -i2c::start () -{ - set_sda (1); - set_scl (1); - set_sda (0); // SDA high -> low while SCL high - set_scl (0); -} - - -// stop: -// entry: SCL = X, SDA = X -// exit: SCL = 1, SDA = 1 - -void -i2c::stop () -{ - set_scl (0); - set_sda (0); - set_scl (1); - set_sda (1); // SDA low -> high while SCL high -} - - -// write_bit: -// entry: SCL = 0, SDA = X -// exit: SCL = 0, SDA = X - -void -i2c::write_bit (bool bit) -{ - set_sda (bit); - set_scl (1); - set_scl (0); -} - - -// write_byte: -// entry: SCL = 0, SDA = X -// exit: SCL = 0, SDA = 1 - -bool -i2c::write_byte (char t) -{ - int i; - bool ack_bit; - - for (i = 0; i < 8; i++){ - write_bit (t & 0x80); - t <<= 1; - } - - // clock #9. This is the ACK bit. - - set_sda (1); // tristate SDA - set_scl (1); - ack_bit = get_sda (); // slave should pull SDA line low - set_scl (0); - - return ack_bit == 0; -} - - -// write: the high level entry point... -// entry: SCL = 1, SDA = 1 -// exit: SCL = 1, SDA = 1 - -bool -i2c::write (int addr, const unsigned char *buf, int nbytes) -{ - bool ok = true; - - d_io->lock (); - start (); - ok = write_byte ((addr << 1) | 0); // addr plus "read opcode" - - for (int i = 0; i < nbytes; i++) - ok &= write_byte (buf[i]); - - stop (); - d_io->unlock (); - return ok; -} - - -// read: the high level entry point... -// entry: SCL = 1, SDA = 1 -// exit: SCL = 1, SDA = 1 - -int -i2c::read (int addr, unsigned char *buf, int max_bytes) -{ - d_io->lock (); - - // FIXME - - d_io->unlock (); - return 0; -} diff --git a/microtune/i2c.h b/microtune/i2c.h deleted file mode 100644 index b75bb6c5e..000000000 --- a/microtune/i2c.h +++ /dev/null @@ -1,66 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: i2c.h -* Description: -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _I2C_H_ -#define _I2C_H_ - -#include "i2cio.h" - -/*! - * \brief class for controlling i2c bus - */ -class i2c { - public: - - /*! i2c does not control lifetime of a_io */ - i2c (i2cio *io); - ~i2c () {}; - - //! \returns true iff successful - bool write (int addr, const unsigned char *buf, int nbytes); - - //! \returns number of bytes read or -1 if error - int read (int addr, unsigned char *buf, int max_bytes); - - -private: - void start (); - void stop (); - void write_bit (bool bit); - bool write_byte (char byte); - - void set_sda (bool bit) { d_io->set_sda (bit); } - void set_scl (bool bit) { d_io->set_scl (bit); } - bool get_sda () { return d_io->get_sda (); } - - i2cio *d_io; -}; - -#endif /* _I2C_H_ */ diff --git a/microtune/i2cio.cc b/microtune/i2cio.cc deleted file mode 100644 index b89718e19..000000000 --- a/microtune/i2cio.cc +++ /dev/null @@ -1,33 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: i2cio.cc -* Description: -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "i2cio.h" - -i2cio::~i2cio(){} diff --git a/microtune/i2cio.h b/microtune/i2cio.h deleted file mode 100644 index 889844752..000000000 --- a/microtune/i2cio.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: i2cio.h -* Description: -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _I2CIO_H_ -#define _I2CIO_H_ - -/*! - * \brief abstract class that implements low level i/o for i2c bus. - */ -class i2cio { - public: - - i2cio () : - udelay_scl_lo(0), udelay_scl_hi(0), - udelay_sda_lo(0), udelay_sda_hi(0) {}; - - virtual ~i2cio (); - - virtual void set_scl (bool state) = 0; - virtual void set_sda (bool state) = 0; - virtual bool get_sda () = 0; - - void set_udelay_scl_lo (int usecs) { udelay_scl_lo = usecs; } - void set_udelay_scl_hi (int usecs) { udelay_scl_hi = usecs; } - void set_udelay_sda_lo (int usecs) { udelay_sda_lo = usecs; } - void set_udelay_sda_hi (int usecs) { udelay_sda_hi = usecs; } - - int get_udelay_scl_lo () { return udelay_scl_lo; } - int get_udelay_scl_hi () { return udelay_scl_hi; } - int get_udelay_sda_lo () { return udelay_sda_lo; } - int get_udelay_sda_hi () { return udelay_sda_hi; } - - virtual void lock () = 0; - virtual void unlock () = 0; - - private: - int udelay_scl_lo; - int udelay_scl_hi; - int udelay_sda_lo; - int udelay_sda_hi; -}; - - -#endif /* _I2CIO_H_ */ diff --git a/microtune/i2cio_pp.cc b/microtune/i2cio_pp.cc deleted file mode 100644 index aedf58f0a..000000000 --- a/microtune/i2cio_pp.cc +++ /dev/null @@ -1,94 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: i2cio_pp.cc -* Description: -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "i2cio_pp.h" -#include "microtune_eval_board_defs.h" - -i2cio_pp::i2cio_pp (hamlib_port_t *pp) -{ - unsigned char r; - d_pp = pp; - par_lock (d_pp); - par_read_control (d_pp, &r); - par_write_control (d_pp, r & ~UT_CP_MUST_BE_ZERO); // output, no interrupts - par_unlock (d_pp); -} - -void -i2cio_pp::set_scl (bool state) -{ - unsigned char r; - par_read_control(d_pp, &r); - - if (!state){ // active low - par_write_control (d_pp, r | UT_CP_TUNER_SCL); - } - else { - par_write_control (d_pp, r & ~UT_CP_TUNER_SCL); - } - par_read_control (d_pp, &r); // use for 1us delay - par_read_control (d_pp, &r); // use for 1us delay -} - -void -i2cio_pp::set_sda (bool state) -{ - unsigned char r; - par_read_data (d_pp, &r); - - if (!state){ // active low - par_write_data (d_pp, r | UT_DP_TUNER_SDA_OUT); - } - else { - par_write_data (d_pp, r & ~UT_DP_TUNER_SDA_OUT); - } - par_read_data (d_pp, &r); // use for 1us delay - par_read_data (d_pp, &r); // use for 1us delay -} - -bool -i2cio_pp::get_sda () -{ - unsigned char r; - par_read_status (d_pp, &r); - return (r & UT_SP_TUNER_SDA_IN) == 0; // eval board has an inverter on it -} - -void -i2cio_pp::lock () -{ - par_lock (d_pp); -} - -void -i2cio_pp::unlock () -{ - par_unlock (d_pp); -} diff --git a/microtune/i2cio_pp.h b/microtune/i2cio_pp.h deleted file mode 100644 index 771a82225..000000000 --- a/microtune/i2cio_pp.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -*-C-*- -******************************************************************************* -* -* File: i2cio_pp.h -* Description: i2cio class for parallel port -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _I2CIO_PP_H_ -#define _I2CIO_PP_H_ - -#include "i2cio.h" -#include "parallel.h" - -/*! - * \brief concrete class that implements low level i/o for i2c bus using parallel port - */ -class i2cio_pp : public i2cio { - public: - - i2cio_pp (hamlib_port_t *a_pp); - - virtual void set_scl (bool state); - virtual void set_sda (bool state); - virtual bool get_sda (); - - virtual void lock (); - virtual void unlock (); - - private: - hamlib_port_t *d_pp; -}; - -#endif /* _I2CIO_PP_H_ */ diff --git a/microtune/microtune.cc b/microtune/microtune.cc deleted file mode 100644 index a77c69fa3..000000000 --- a/microtune/microtune.cc +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Hamlib Microtune backend - main file - * Copyright (c) 2003 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include - -#include "register.h" - -#include "microtune.h" -#include "microtune_eval_board.h" - -#include "microtune_4937.h" -#include "microtune_4702.h" - -/* - * TODO: allow these to be modifiable through rig_set_conf - int i2c_addr; - int reference_divider; - bool fast_tuning_p; if set, higher charge pump current: - faster tuning, worse phase noise - for distance < 10kHz to the carrier - */ - -struct microtune_priv_data { - microtune_eval_board *board; - freq_t actual_freq; -}; - -/* - * TODO: - * - status iff PLL is locked - * - returns the output frequency of the tuner in Hz (->5.75e6) //3x7702. - * or 36.00e6 - */ - -int microtune_init(RIG *rig) -{ - struct microtune_priv_data *priv; - - rig->state.priv = (struct microtune_priv_data*)malloc(sizeof(struct microtune_priv_data)); - if (!rig->state.priv) { - /* whoops! memory shortage! */ - return -RIG_ENOMEM; - } - priv = rig->state.priv; - - priv->actual_freq = RIG_FREQ_NONE; - - - return RIG_OK; -} - -int module_4937_open(RIG *rig) -{ - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - priv->board = new microtune_4937(&rig->state.rigport); - if (!priv->board) { - return -RIG_ENOMEM; - } - - if (!priv->board->board_present_p()) { - rig_debug(RIG_DEBUG_WARN, "microtune: eval board is NOT present\n"); - delete priv->board; - return -RIG_EPROTO; - } - - return RIG_OK; -} - -int module_4702_open(RIG *rig) -{ - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - priv->board = new microtune_4702(&rig->state.rigport); - if (!priv->board) { - return -RIG_ENOMEM; - } - - if (!priv->board->board_present_p()) { - rig_debug(RIG_DEBUG_WARN, "microtune: eval board is NOT present\n"); - delete priv->board; - return -RIG_EPROTO; - } - - return RIG_OK; -} - -int microtune_close(RIG *rig) -{ - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - delete priv->board; - - return RIG_OK; -} - -int microtune_cleanup(RIG *rig) -{ - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - if (priv) { - free(priv); - } - rig->state.priv = NULL; - - return RIG_OK; -} - -/* - * It takes about 100 ms for the PLL to settle. - */ -int microtune_set_freq(RIG *rig, vfo_t vfo, freq_t freq) -{ - double actual_freq; - bool status; - - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - status = priv->board->set_RF_freq((double)freq, &actual_freq); - - if (!status) - return -RIG_EIO; - - priv->actual_freq = (freq_t)actual_freq; - return RIG_OK; -} - - -int microtune_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) -{ - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - *freq = priv->actual_freq; - - return RIG_OK; -} - - -/* - * Assumes rig!=NULL, rig->state.priv!=NULL - */ -int microtune_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val) -{ - struct microtune_priv_data *priv = (struct microtune_priv_data *)rig->state.priv; - - switch(token) { - case TOK_AGCGAIN: - priv->board->set_AGC(val.f*1000); - break; - default: - return -RIG_EINVAL; - } - return RIG_OK; -} - - - - -DECLARE_INITRIG_BACKEND(microtune) -{ - rig_debug(RIG_DEBUG_VERBOSE, "microtune: _init called\n"); - - rig_register(&module_4937_caps); - rig_register(&module_4702_caps); - - return RIG_OK; -} diff --git a/microtune/microtune.h b/microtune/microtune.h deleted file mode 100644 index 200852b6f..000000000 --- a/microtune/microtune.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Hamlib Microtune backend - main header - * Copyright (c) 2001-2003 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#ifndef _MICRTOUNE_H -#define _MICRTOUNE_H 1 - -#include -#include - -__BEGIN_DECLS - -#define TOK_AGCGAIN TOKEN_BACKEND(1) - - -int microtune_init(RIG *rig); -int microtune_cleanup(RIG *rig); -int module_4937_open(RIG *rig); -int module_4702_open(RIG *rig); -int microtune_close(RIG *rig); -int microtune_set_freq(RIG *rig, vfo_t vfo, freq_t freq); -int microtune_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); -int microtune_set_ext_level(RIG *rig, vfo_t vfo, token_t token, value_t val); - - -extern const struct rig_caps module_4937_caps; -extern const struct rig_caps module_4702_caps; - - -__END_DECLS - -#endif /* _MICRTOUNE_H */ diff --git a/microtune/microtune_4702.cc b/microtune/microtune_4702.cc deleted file mode 100644 index 25ce36e4e..000000000 --- a/microtune/microtune_4702.cc +++ /dev/null @@ -1,177 +0,0 @@ -/* -*- c++-*- */ -/* - * Copyright 2001,2003 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "microtune_4702.h" -#include -#include - -static const double first_IF = 36.00e6; - -// The tuner internally has 3 bands: VHF Low, VHF High & UHF. -// These are the recommened boundaries -static const double VHF_High_takeover = 174e6; -static const double UHF_takeover = 470e6; - -static int PLL_I2C_ADDR = 0x60; - -static unsigned char -control_byte_1 (bool prescaler, int reference_divisor) -{ - int c = 0x80; - //Note: Last two divider bits (bits 2 and 3 of this byte) determined later - if (prescaler) - c |= 0x10; - - switch (reference_divisor){ - case 2: - c |= 0x00; break; - case 4: - c |= 0x01; break; - case 8: - c |= 0x02; break; - case 16: - c |= 0x03; break; - case 32: - c |= 0x04; break; - case 64: - c |= 0x05; break; - case 128: - c |= 0x06; break; - case 256: - c |= 0x07; break; - case 24: - c |= 0x08; break; - case 5: - c |= 0x09; break; - case 10: - c |= 0x0A; break; - case 20: - c |= 0x0B; break; - case 40: - c |= 0x0C; break; - case 80: - c |= 0x0D; break; - case 160: - c |= 0x0E; break; - case 320: - c |= 0x0F; break; - default: - abort (); - } - return c; -} - -static unsigned char -control_byte_2 (double target_freq) -{ - int c; - - if (target_freq < VHF_High_takeover) // VHF low - c = 0x8E; - else if (target_freq < UHF_takeover) // VHF high - { - c = 0x05; - if (target_freq < 390e6) - c |= 0x40; - else - c |= 0x80; - } - else - { // UHF - c = 0x03; - if (target_freq < 750e6) - c |= 0x80; - else - c |= 0xC0; - } - - return c; -} - - -/*! - * \brief select RF frequency to be tuned to output frequency. - * \p target_freq is the requested frequency in Hz, \p actual_freq - * is set to the actual frequency tuned. It takes about 100 ms - * for the PLL to settle. - * - * \returns true iff sucessful. - */ -bool -microtune_4702::set_RF_freq (double target_freq, double *p_actual_freq) -{ - unsigned char buf[4]; - - double target_f_osc = target_freq + first_IF; - - double f_ref = 4e6 / d_reference_divider; - - //int divisor = (int) ((target_f_osc + (f_ref * 4)) / (f_ref * 8)); - - long int divisor = (long int) (target_f_osc / f_ref); - double actual_freq = (f_ref * divisor) - first_IF; - if (p_actual_freq != 0) - *p_actual_freq = actual_freq; - - if ((divisor & ~0x1ffff) != 0) // >17 bit divisor - return false; - - buf[0] = ((divisor & 0x07f00) >> 8) & 0xff; // DB1 - buf[1] = divisor & 0xff; // DB2 - buf[2] = control_byte_1 (prescaler, d_reference_divider); - buf[2] = (buf[2]|(((divisor & 0x18000) >> 10)) & 0xff); - buf[3] = control_byte_2 (target_freq); - - printf ("%x\n", PLL_I2C_ADDR); -//#if 0 - printf ("set_RF_freq: target: %g MHz actual: %g MHz %02x %02x %02x %02x\n", - target_freq/1e6, actual_freq/1e6, buf[0], buf[1], buf[2], buf[3]); -//#endif - - return i2c_write (PLL_I2C_ADDR, buf, sizeof (buf)); -} - - -bool -microtune_4702::read_info (unsigned char* buf) -{ - return i2c_write (PLL_I2C_ADDR, buf, 2); -} - -/*! - * \returns true iff PLL is locked - */ -bool -microtune_4702::pll_locked_p () -{ - // FIXME - return true; -} - -/*! - * \returns the output frequency of the tuner in Hz. - */ -double -microtune_4702::get_output_freq () -{ - return 36.00e6; -} diff --git a/microtune/microtune_4702.h b/microtune/microtune_4702.h deleted file mode 100644 index f2f282717..000000000 --- a/microtune/microtune_4702.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2001,2003 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _MICROTUNE_4702_H_ -#define _MICROTUNE_4702_H_ - -#include -#include "microtune_eval_board.h" - -/*! - * \brief abstract class for controlling microtune 4702 tuner module - */ -class microtune_4702 : public microtune_eval_board { -public: - - microtune_4702(hamlib_port_t *port) : microtune_eval_board (port), d_reference_divider(320), prescaler(false) {} - ~microtune_4702() {} - - /*! - * \brief select RF frequency to be tuned to output frequency. - * \p freq is the requested frequency in Hz, \p actual_freq - * is set to the actual frequency tuned. It takes about 100 ms - * for the PLL to settle. - * - * \returns true iff sucessful. - */ - bool set_RF_freq (double freq, double *actual_freq); - bool read_info (unsigned char* buf); - - double get_output_freq (); - bool pll_locked_p (); - - private: - int d_reference_divider; - bool prescaler; /* if set, higher charge pump current: - faster tuning, worse phase noise - for distance < 10kHz to the carrier */ -}; - -#endif /* _MICROTUNE_4702_H_ */ diff --git a/microtune/microtune_4937.cc b/microtune/microtune_4937.cc deleted file mode 100644 index fed6d8d7c..000000000 --- a/microtune/microtune_4937.cc +++ /dev/null @@ -1,134 +0,0 @@ -/* -*- c++-*- */ -/* - * Copyright 2001,2003 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "microtune_4937.h" -#include -#include - -static const double first_IF = 43.75e6; - -// The tuner internally has 3 bands: VHF Low, VHF High & UHF. -// These are the recommened boundaries -static const double VHF_High_takeover = 158e6; -static const double UHF_takeover = 464e6; - -static int PLL_I2C_ADDR = 0x61; - -static unsigned char -control_byte_1 (bool fast_tuning_p, int reference_divisor) -{ - int c = 0x88; - - if (fast_tuning_p) - c |= 0x40; - - switch (reference_divisor){ - case 512: - c |= 0x3 << 1; break; - case 640: - c |= 0x0 << 1; break; - case 1024: - c |= 0x1 << 1; break; - default: - abort (); - } - return c; -} - -static unsigned char -control_byte_2 (double target_freq, bool shutdown_tx_PGA) -{ - int c; - - if (target_freq < VHF_High_takeover) // VHF low - c = 0xa0; - else if (target_freq < UHF_takeover) // VHF high - c = 0x90; - else // UHF - c = 0x30; - - if (shutdown_tx_PGA) - c |= 0x08; - - return c; -} - -/*! - * \brief select RF frequency to be tuned to output frequency. - * \p target_freq is the requested frequency in Hz, \p actual_freq - * is set to the actual frequency tuned. It takes about 100 ms - * for the PLL to settle. - * - * \returns true iff sucessful. - */ -bool -microtune_4937::set_RF_freq (double target_freq, double *p_actual_freq) -{ - unsigned char buf[4]; - - double target_f_osc = target_freq + first_IF; - - double f_ref = 4e6 / d_reference_divider; - - // f_osc = f_ref * 8 * divisor - // divisor = f_osc / (f_ref * 8) - - int divisor = (int) ((target_f_osc + (f_ref * 4)) / (f_ref * 8)); - double actual_freq = (f_ref * 8 * divisor) - first_IF; - if (p_actual_freq != 0) - *p_actual_freq = actual_freq; - - if ((divisor & ~0x7fff) != 0) // 15 bit divisor - return false; - - buf[0] = (divisor >> 8) & 0xff; // DB1 - buf[1] = divisor & 0xff; // DB2 - buf[2] = control_byte_1 (d_fast_tuning_p, d_reference_divider); - buf[3] = control_byte_2 (target_freq, true); - -#if 0 - printf ("set_RF_freq: target: %g MHz actual: %g MHz %02x %02x %02x %02x\n", - target_freq/1e6, actual_freq/1e6, buf[0], buf[1], buf[2], buf[3]); -#endif - - return i2c_write (PLL_I2C_ADDR, buf, 4); -} - - -/*! - * \returns true iff PLL is locked - */ -bool -microtune_4937::pll_locked_p () -{ - // FIXME - return true; -} - -/*! - * \returns the output frequency of the tuner in Hz. - */ -double -microtune_4937::get_output_freq () -{ - return 5.75e6; // 3x7702 -} diff --git a/microtune/microtune_4937.h b/microtune/microtune_4937.h deleted file mode 100644 index e31f5b25d..000000000 --- a/microtune/microtune_4937.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2001,2003 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _MICROTUNE_4937_H_ -#define _MICROTUNE_4937_H_ - -#include -#include "microtune_eval_board.h" - -/*! - * \brief abstract class for controlling microtune 4937 tuner module - */ -class microtune_4937 : public microtune_eval_board { -public: - microtune_4937(hamlib_port_t *port) : microtune_eval_board (port), d_reference_divider(640), d_fast_tuning_p(false) {} - ~microtune_4937() {} - - /*! - * \brief select RF frequency to be tuned to output frequency. - * \p freq is the requested frequency in Hz, \p actual_freq - * is set to the actual frequency tuned. It takes about 100 ms - * for the PLL to settle. - * - * \returns true iff sucessful. - */ - bool set_RF_freq (double freq, double *actual_freq); - - /*! - * \returns true iff PLL is locked - */ - bool pll_locked_p (); - - /*! - * \returns the output frequency (IF center freq) of the tuner in Hz. - */ - double get_output_freq (); - - private: - int d_reference_divider; - bool d_fast_tuning_p; /* if set, higher charge pump current: - faster tuning, worse phase noise - for distance < 10kHz to the carrier */ -}; - -#endif /* _MICROTUNE_4937_H_ */ diff --git a/microtune/microtune_eval_board.cc b/microtune/microtune_eval_board.cc deleted file mode 100644 index 2b776eb26..000000000 --- a/microtune/microtune_eval_board.cc +++ /dev/null @@ -1,194 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: microtune_eval_board.cc -* Description: -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "microtune_eval_board.h" -#include "microtune_eval_board_defs.h" -#include "serial.h" -#include "i2cio_pp.h" -#include "i2c.h" -#include - -static int AGC_DAC_I2C_ADDR = 0x2C; - -microtune_eval_board::microtune_eval_board (hamlib_port_t *port) -{ - m_ppio = port; - m_i2cio = new i2cio_pp (m_ppio); - m_i2c = new i2c (m_i2cio); - - // disable upstream amplifier - par_lock (m_ppio); - unsigned char t; - par_read_data (m_ppio, &t); - t &= ~(UT_DP_TX_ENABLE | UT_DP_TX_SDA | UT_DP_TX_SCL); - t |= UT_DP_TX_AS; - par_write_data (m_ppio, t); - par_unlock (m_ppio); -} - -microtune_eval_board::~microtune_eval_board () -{ - delete m_i2c; - delete m_i2cio; -} - - -//! is the eval board present? -bool -microtune_eval_board::board_present_p () -{ - bool result = true; - par_lock (m_ppio); - - unsigned char t; - par_read_status (m_ppio, &t); - if ((t & UT_SP_SHOULD_BE_ZERO) != 0 - || (t & UT_SP_SHOULD_BE_ONE) != UT_SP_SHOULD_BE_ONE) - result = false; - - // could also see if SCL is looped back or not, but that seems like overkill - - par_unlock (m_ppio); - return result; -} - -// returns true iff successful -bool -microtune_eval_board::i2c_write (int addr, const unsigned char *buf, int nbytes) -{ - return m_i2c->write (addr, buf, nbytes); -} - -// returns number of bytes read or -1 if error -int -microtune_eval_board::i2c_read (int addr, unsigned char *buf, int max_bytes) -{ - return m_i2c->read (addr, buf, max_bytes); -} - -/* - * ---------------------------------------------------------------- - * AGC stuff - * - * We're using a MAX518 8-bit 5V dual dac for setting the AGC's - * ---------------------------------------------------------------- - */ -void -microtune_eval_board::write_dac (int which, int value) -{ - unsigned char cmd[2]; - cmd[0] = which & 1; - cmd[1] = value; - i2c_write (AGC_DAC_I2C_ADDR, cmd, sizeof (cmd)); -} - -void -microtune_eval_board::write_both_dacs (int value0, int value1) -{ - unsigned char cmd[4]; - cmd[0] = 0; - cmd[1] = value0; - cmd[2] = 1; - cmd[3] = value1; - i2c_write (AGC_DAC_I2C_ADDR, cmd, sizeof (cmd)); -} - -static int scale_volts (float volts) -{ - int n; - n = (int) rint (volts * (256 / 5.0)); - if (n < 0) - n = 0; - if (n > 255) - n = 255; - - return n; -} - -void -microtune_eval_board::set_RF_AGC_voltage (float volts) -{ - write_dac (0, scale_volts (volts)); -} - -void -microtune_eval_board::set_IF_AGC_voltage (float volts) -{ - write_dac (1, scale_volts (volts)); -} - -static const float RF_MIN_V = 1.5; // RF AGC control voltages -static const float RF_MAX_V = 4.0; -static const float IF_MIN_V = 2.0; // IF AGC control voltages -static const float IF_MAX_V = 4.0; - -static const float MIN_AGC = 0; // bottom of synthetic range -static const float MAX_AGC = 1000; // top of synthetic range - -static const float CUTOVER_POINT = 667; - - -// linear is in the range MIN_AGC to MAX_AGC - -static float -linear_to_RF_AGC_voltage (float linear) -{ - if (linear >= CUTOVER_POINT) - return RF_MAX_V; - - float slope = (RF_MAX_V - RF_MIN_V) / CUTOVER_POINT; - return RF_MIN_V + linear * slope; -} - -static float -linear_to_IF_AGC_voltage (float linear) -{ - if (linear < CUTOVER_POINT) - return IF_MIN_V; - - float slope = (IF_MAX_V - IF_MIN_V) / (MAX_AGC - CUTOVER_POINT); - return IF_MIN_V + (linear - CUTOVER_POINT) * slope; -} - -void -microtune_eval_board::set_AGC (float v) -{ - if (v < MIN_AGC) - v = MIN_AGC; - - if (v > MAX_AGC) - v = MAX_AGC; - - float rf_agc_voltage = linear_to_RF_AGC_voltage (v); - float if_agc_voltage = linear_to_IF_AGC_voltage (v); - - set_RF_AGC_voltage (rf_agc_voltage); - set_IF_AGC_voltage (if_agc_voltage); -} diff --git a/microtune/microtune_eval_board.h b/microtune/microtune_eval_board.h deleted file mode 100644 index c7858eb46..000000000 --- a/microtune/microtune_eval_board.h +++ /dev/null @@ -1,105 +0,0 @@ -/* -*-C++-*- -******************************************************************************* -* -* File: microtune_eval_board.h -* Description: -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _MICROTUNE_EVAL_BOARD_H_ -#define _MICROTUNE_EVAL_BOARD_H_ - -#include "serial.h" - -class i2cio; -class i2c; - -/*! - * \brief concrete class for controlling a microtune eval board attached to parallel port - */ -class microtune_eval_board { -public: - microtune_eval_board (hamlib_port_t *port); - virtual ~microtune_eval_board (); - - //! is the eval board present? - virtual bool board_present_p (); - - - /*! - * \brief select RF frequency to be tuned to output frequency. - * \p freq is the requested frequency in Hz, \p actual_freq - * is set to the actual frequency tuned. It takes about 100 ms - * for the PLL to settle. - * - * \returns true iff sucessful. - */ - virtual bool set_RF_freq (double freq, double *actual_freq) = 0; - - /*! - * \returns true iff PLL is locked - */ - virtual bool pll_locked_p () = 0; - - - /*! - * \returns the output frequency (IF center freq) of the tuner in Hz. - */ - virtual double get_output_freq () = 0; - - /*! - * \brief set RF and IF AGC control voltages ([0, 5] volts) - */ - void set_RF_AGC_voltage (float volts); - void set_IF_AGC_voltage (float volts); - - /*! - * \brief set RF and IF AGC levels together (scale [0, 1000]) - * - * This provides a simple linear interface for adjusting both - * the RF and IF gain in consort. This is the easy to use interface. - * 0 corresponds to minimum gain. 1000 corresponds to maximum gain. - */ - void set_AGC (float value_0_1000); - - -protected: - //! \returns true iff successful - virtual bool i2c_write (int addr, const unsigned char *buf, int nbytes); - - //! \returns number of bytes read or -1 if error - virtual int i2c_read (int addr, unsigned char *buf, int max_bytes); - -private: - void write_dac (int which, int value); - void write_both_dacs (int val0, int val1); - - hamlib_port_t *m_ppio; - i2cio *m_i2cio; - i2c *m_i2c; -}; - - -#endif /* _MICROTUNE_EVAL_BOARD_H_ */ diff --git a/microtune/microtune_eval_board_defs.h b/microtune/microtune_eval_board_defs.h deleted file mode 100644 index 30452622f..000000000 --- a/microtune/microtune_eval_board_defs.h +++ /dev/null @@ -1,71 +0,0 @@ -/* -*-C-*- -******************************************************************************* -* -* File: microtune_eval_board_defs.h -* Description: defines for parallel port control of eval board -* -******************************************************************************* -*/ - -/* - * Copyright 2001 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _MICROTUNE_EVAL_BOARD_DEFS_H_ -#define _MICROTUNE_EVAL_BOARD_DEFS_H_ - -/* - * The Microtune 4937DI5/4702DT5 cable modem tuner eval board is controlled - * by bit banging the PC parallel port. This file defines the relevant - * bits. - * - * The parallel port has an 8 bit data port (output), - * an 8 bit control port (output) and - * an 8 bit status port (input). - * - * Not all bits of the control and status ports may be arbitrarily used. - */ - - -// parallel port data port constants (output) - -static const int UT_DP_TX_SDA = 0x01; // upstream control bus -static const int UT_DP_TX_SCL = 0x02; // upstream control bus -static const int UT_DP_TX_AS = 0x04; // upstream control bus -static const int UT_DP_TX_ENABLE = 0x08; // upstream h/w enable -// bits 4,5,6 not used -static const int UT_DP_TUNER_SDA_OUT = 0x80; // tuner i2c bus data - -// parallel port control port constants (output) - -static const int UT_CP_TUNER_SCL = 0x08; // tuner i2c bus clock -static const int UT_CP_MUST_BE_ZERO = 0xf0; // must be zero - -// parallel port status port constants (input) - -// bits 0,1,2 not used -static const int UT_SP_TUNER_SCL_LOOP_BACK= 0x08; // inverted SCL loop back -static const int UT_SP_SHOULD_BE_ZERO = 0x10; // reads as zero -static const int UT_SP_SHOULD_BE_ONE = 0x20; // reads as one -// bit 6 not used -static const int UT_SP_TUNER_SDA_IN = 0x80; - - -#endif /* _MICROTUNE_EVAL_BOARD_DEFS_H_ */ diff --git a/microtune/module_4702.c b/microtune/module_4702.c deleted file mode 100644 index e10d13f83..000000000 --- a/microtune/module_4702.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Hamlib microtune backend - 4702 file - * Copyright (c) 2003 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include - -#include "microtune.h" - -/* - * Microtune 4702 rig capabilities. - */ - -#define M4702_FUNC RIG_FUNC_NONE -#define M4702_LEVEL RIG_LEVEL_NONE -#define M4702_PARM RIG_PARM_NONE - -#define M4702_MODES (RIG_MODE_NONE) /* FIXME: IF */ - -#define M4702_VFO RIG_VFO_A - -static const struct confparams module_4702_ext_parms[] = -{ - { - TOK_AGCGAIN, "agcgain", "AGC gain level", "RF and IF AGC levels", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 1, .001 } } - }, - { RIG_CONF_END, NULL, } -}; - - -const struct rig_caps module_4702_caps = -{ - .rig_model = RIG_MODEL_MICROTUNE_4702, - .model_name = "4702 DT5 tuner module", - .mfg_name = "Microtune", - .version = "0.2.1", - .copyright = "GPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TUNER, - .targetable_vfo = 0, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_PARALLEL, - .has_get_func = M4702_FUNC, - .has_set_func = M4702_FUNC, - .has_get_level = M4702_LEVEL, - .has_set_level = RIG_LEVEL_SET(M4702_LEVEL), - .has_get_parm = M4702_PARM, - .has_set_parm = RIG_PARM_SET(M4702_PARM), - .chan_list = { - RIG_CHAN_END, - }, - .scan_ops = RIG_SCAN_NONE, - .vfo_ops = RIG_OP_NONE, - .transceive = RIG_TRN_OFF, - .attenuator = { RIG_DBLST_END, }, - .preamp = { RIG_DBLST_END, }, - .rx_range_list2 = { { - .start = MHz(50), .end = MHz(860), .modes = M4702_MODES, - .low_power = -1, .high_power = -1, M4702_VFO - }, - RIG_FRNG_END, - }, - .tx_range_list2 = { RIG_FRNG_END, }, - - /* minimum tuning step with a reference divider of 640? (see Advance data sheet) */ - .tuning_steps = { {M4702_MODES, kHz(50)}, - RIG_TS_END, - }, - .extparms = module_4702_ext_parms, - .priv = NULL, /* priv */ - - .rig_init = microtune_init, - .rig_cleanup = microtune_cleanup, - .rig_open = module_4702_open, - .rig_close = microtune_close, - - .set_freq = microtune_set_freq, - .get_freq = microtune_get_freq, - .set_ext_level = microtune_set_ext_level, -}; - - diff --git a/microtune/module_4937.c b/microtune/module_4937.c deleted file mode 100644 index 727773928..000000000 --- a/microtune/module_4937.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Hamlib microtune backend - 4937 file - * Copyright (c) 2003 by Stephane Fillod - * - * - * This library is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include - -#include "microtune.h" - -/* - * Microtune 4937 rig capabilities. - * - * TODO: set_ptt - */ - -#define M4937_FUNC RIG_FUNC_NONE -#define M4937_LEVEL RIG_LEVEL_NONE -#define M4937_PARM RIG_PARM_NONE - -#define M4937_MODES (RIG_MODE_NONE) /* FIXME: IF */ - -#define M4937_VFO RIG_VFO_A - -static const struct confparams module_4937_ext_parms[] = -{ - { - TOK_AGCGAIN, "agcgain", "AGC gain level", "RF and IF AGC levels", - NULL, RIG_CONF_NUMERIC, { .n = { 0, 1, .001 } } - }, - { RIG_CONF_END, NULL, } -}; - - -const struct rig_caps module_4937_caps = -{ - .rig_model = RIG_MODEL_MICROTUNE_4937, - .model_name = "4937 DI5 tuner module", - .mfg_name = "Microtune", - .version = "0.2.1", - .copyright = "GPL", - .status = RIG_STATUS_UNTESTED, - .rig_type = RIG_TYPE_TUNER, - .targetable_vfo = 0, - .ptt_type = RIG_PTT_RIG, - .dcd_type = RIG_DCD_NONE, - .port_type = RIG_PORT_PARALLEL, - .has_get_func = M4937_FUNC, - .has_set_func = M4937_FUNC, - .has_get_level = M4937_LEVEL, - .has_set_level = RIG_LEVEL_SET(M4937_LEVEL), - .has_get_parm = M4937_PARM, - .has_set_parm = RIG_PARM_SET(M4937_PARM), - .chan_list = { - RIG_CHAN_END, - }, - .scan_ops = RIG_SCAN_NONE, - .vfo_ops = RIG_OP_NONE, - .transceive = RIG_TRN_OFF, - .attenuator = { RIG_DBLST_END, }, - .preamp = { RIG_DBLST_END, }, - .rx_range_list2 = { { - .start = MHz(55), .end = MHz(860), .modes = M4937_MODES, - .low_power = -1, .high_power = -1, M4937_VFO - }, - RIG_FRNG_END, - }, - .tx_range_list2 = { { - .start = MHz(5), .end = MHz(42), .modes = M4937_MODES, - .low_power = mW(1), .high_power = W(1), M4937_VFO - }, /* FIXME: power */ - RIG_FRNG_END, - }, - - /* minimum tuning step with a reference divider of 640 (see Advance data sheet) */ - .tuning_steps = { {M4937_MODES, kHz(50)}, - RIG_TS_END, - }, - .extparms = module_4937_ext_parms, - .priv = NULL, /* priv */ - - .rig_init = microtune_init, - .rig_cleanup = microtune_cleanup, - .rig_open = module_4937_open, - .rig_close = microtune_close, - - .set_freq = microtune_set_freq, - .get_freq = microtune_get_freq, - .set_ext_level = microtune_set_ext_level, -}; - diff --git a/adat/Android.mk b/rigs/adat/Android.mk similarity index 100% rename from adat/Android.mk rename to rigs/adat/Android.mk diff --git a/adat/Makefile.am b/rigs/adat/Makefile.am similarity index 100% rename from adat/Makefile.am rename to rigs/adat/Makefile.am diff --git a/adat/adat.c b/rigs/adat/adat.c similarity index 100% rename from adat/adat.c rename to rigs/adat/adat.c diff --git a/adat/adat.h b/rigs/adat/adat.h similarity index 100% rename from adat/adat.h rename to rigs/adat/adat.h diff --git a/adat/adt_200a.c b/rigs/adat/adt_200a.c similarity index 100% rename from adat/adt_200a.c rename to rigs/adat/adt_200a.c diff --git a/adat/adt_200a.h b/rigs/adat/adt_200a.h similarity index 100% rename from adat/adt_200a.h rename to rigs/adat/adt_200a.h diff --git a/alinco/Android.mk b/rigs/alinco/Android.mk similarity index 100% rename from alinco/Android.mk rename to rigs/alinco/Android.mk diff --git a/alinco/Makefile.am b/rigs/alinco/Makefile.am similarity index 100% rename from alinco/Makefile.am rename to rigs/alinco/Makefile.am diff --git a/alinco/alinco.c b/rigs/alinco/alinco.c similarity index 100% rename from alinco/alinco.c rename to rigs/alinco/alinco.c diff --git a/alinco/alinco.h b/rigs/alinco/alinco.h similarity index 100% rename from alinco/alinco.h rename to rigs/alinco/alinco.h diff --git a/alinco/dx77.c b/rigs/alinco/dx77.c similarity index 100% rename from alinco/dx77.c rename to rigs/alinco/dx77.c diff --git a/aor/Android.mk b/rigs/aor/Android.mk similarity index 100% rename from aor/Android.mk rename to rigs/aor/Android.mk diff --git a/aor/Makefile.am b/rigs/aor/Makefile.am similarity index 100% rename from aor/Makefile.am rename to rigs/aor/Makefile.am diff --git a/aor/README.aor b/rigs/aor/README.aor similarity index 100% rename from aor/README.aor rename to rigs/aor/README.aor diff --git a/aor/README.ar5000 b/rigs/aor/README.ar5000 similarity index 100% rename from aor/README.ar5000 rename to rigs/aor/README.ar5000 diff --git a/aor/README.ar7030 b/rigs/aor/README.ar7030 similarity index 100% rename from aor/README.ar7030 rename to rigs/aor/README.ar7030 diff --git a/aor/aor.c b/rigs/aor/aor.c similarity index 100% rename from aor/aor.c rename to rigs/aor/aor.c diff --git a/aor/aor.h b/rigs/aor/aor.h similarity index 100% rename from aor/aor.h rename to rigs/aor/aor.h diff --git a/aor/ar2700.c b/rigs/aor/ar2700.c similarity index 100% rename from aor/ar2700.c rename to rigs/aor/ar2700.c diff --git a/aor/ar3000.c b/rigs/aor/ar3000.c similarity index 100% rename from aor/ar3000.c rename to rigs/aor/ar3000.c diff --git a/aor/ar3030.c b/rigs/aor/ar3030.c similarity index 100% rename from aor/ar3030.c rename to rigs/aor/ar3030.c diff --git a/aor/ar5000.c b/rigs/aor/ar5000.c similarity index 100% rename from aor/ar5000.c rename to rigs/aor/ar5000.c diff --git a/aor/ar7030.c b/rigs/aor/ar7030.c similarity index 100% rename from aor/ar7030.c rename to rigs/aor/ar7030.c diff --git a/aor/ar7030p.c b/rigs/aor/ar7030p.c similarity index 100% rename from aor/ar7030p.c rename to rigs/aor/ar7030p.c diff --git a/aor/ar7030p.h b/rigs/aor/ar7030p.h similarity index 100% rename from aor/ar7030p.h rename to rigs/aor/ar7030p.h diff --git a/aor/ar7030p_utils.c b/rigs/aor/ar7030p_utils.c similarity index 100% rename from aor/ar7030p_utils.c rename to rigs/aor/ar7030p_utils.c diff --git a/aor/ar8000.c b/rigs/aor/ar8000.c similarity index 100% rename from aor/ar8000.c rename to rigs/aor/ar8000.c diff --git a/aor/ar8200.c b/rigs/aor/ar8200.c similarity index 100% rename from aor/ar8200.c rename to rigs/aor/ar8200.c diff --git a/aor/ar8600.c b/rigs/aor/ar8600.c similarity index 100% rename from aor/ar8600.c rename to rigs/aor/ar8600.c diff --git a/aor/sr2200.c b/rigs/aor/sr2200.c similarity index 100% rename from aor/sr2200.c rename to rigs/aor/sr2200.c diff --git a/barrett/Android.mk b/rigs/barrett/Android.mk similarity index 100% rename from barrett/Android.mk rename to rigs/barrett/Android.mk diff --git a/barrett/Makefile.am b/rigs/barrett/Makefile.am similarity index 100% rename from barrett/Makefile.am rename to rigs/barrett/Makefile.am diff --git a/barrett/README.barrett b/rigs/barrett/README.barrett similarity index 100% rename from barrett/README.barrett rename to rigs/barrett/README.barrett diff --git a/barrett/barrett.c b/rigs/barrett/barrett.c similarity index 100% rename from barrett/barrett.c rename to rigs/barrett/barrett.c diff --git a/barrett/barrett.h b/rigs/barrett/barrett.h similarity index 100% rename from barrett/barrett.h rename to rigs/barrett/barrett.h diff --git a/dorji/Android.mk b/rigs/dorji/Android.mk similarity index 100% rename from dorji/Android.mk rename to rigs/dorji/Android.mk diff --git a/dorji/Makefile.am b/rigs/dorji/Makefile.am similarity index 100% rename from dorji/Makefile.am rename to rigs/dorji/Makefile.am diff --git a/dorji/dorji.c b/rigs/dorji/dorji.c similarity index 100% rename from dorji/dorji.c rename to rigs/dorji/dorji.c diff --git a/dorji/dorji.h b/rigs/dorji/dorji.h similarity index 100% rename from dorji/dorji.h rename to rigs/dorji/dorji.h diff --git a/dorji/dra818.c b/rigs/dorji/dra818.c similarity index 100% rename from dorji/dra818.c rename to rigs/dorji/dra818.c diff --git a/dorji/dra818.h b/rigs/dorji/dra818.h similarity index 100% rename from dorji/dra818.h rename to rigs/dorji/dra818.h diff --git a/drake/Android.mk b/rigs/drake/Android.mk similarity index 100% rename from drake/Android.mk rename to rigs/drake/Android.mk diff --git a/drake/Makefile.am b/rigs/drake/Makefile.am similarity index 100% rename from drake/Makefile.am rename to rigs/drake/Makefile.am diff --git a/drake/drake.c b/rigs/drake/drake.c similarity index 100% rename from drake/drake.c rename to rigs/drake/drake.c diff --git a/drake/drake.h b/rigs/drake/drake.h similarity index 100% rename from drake/drake.h rename to rigs/drake/drake.h diff --git a/drake/r8a.c b/rigs/drake/r8a.c similarity index 100% rename from drake/r8a.c rename to rigs/drake/r8a.c diff --git a/drake/r8b.c b/rigs/drake/r8b.c similarity index 100% rename from drake/r8b.c rename to rigs/drake/r8b.c diff --git a/elad/Android.mk b/rigs/elad/Android.mk similarity index 100% rename from elad/Android.mk rename to rigs/elad/Android.mk diff --git a/elad/Makefile.am b/rigs/elad/Makefile.am similarity index 100% rename from elad/Makefile.am rename to rigs/elad/Makefile.am diff --git a/elad/elad.c b/rigs/elad/elad.c similarity index 100% rename from elad/elad.c rename to rigs/elad/elad.c diff --git a/elad/elad.h b/rigs/elad/elad.h similarity index 100% rename from elad/elad.h rename to rigs/elad/elad.h diff --git a/elad/fdm_duo.c b/rigs/elad/fdm_duo.c similarity index 100% rename from elad/fdm_duo.c rename to rigs/elad/fdm_duo.c diff --git a/flexradio/Android.mk b/rigs/flexradio/Android.mk similarity index 100% rename from flexradio/Android.mk rename to rigs/flexradio/Android.mk diff --git a/flexradio/Makefile.am b/rigs/flexradio/Makefile.am similarity index 100% rename from flexradio/Makefile.am rename to rigs/flexradio/Makefile.am diff --git a/flexradio/dttsp.c b/rigs/flexradio/dttsp.c similarity index 100% rename from flexradio/dttsp.c rename to rigs/flexradio/dttsp.c diff --git a/flexradio/flexradio.c b/rigs/flexradio/flexradio.c similarity index 100% rename from flexradio/flexradio.c rename to rigs/flexradio/flexradio.c diff --git a/flexradio/flexradio.h b/rigs/flexradio/flexradio.h similarity index 100% rename from flexradio/flexradio.h rename to rigs/flexradio/flexradio.h diff --git a/flexradio/sdr1k.c b/rigs/flexradio/sdr1k.c similarity index 100% rename from flexradio/sdr1k.c rename to rigs/flexradio/sdr1k.c diff --git a/icmarine/Android.mk b/rigs/icmarine/Android.mk similarity index 100% rename from icmarine/Android.mk rename to rigs/icmarine/Android.mk diff --git a/icmarine/Makefile.am b/rigs/icmarine/Makefile.am similarity index 100% rename from icmarine/Makefile.am rename to rigs/icmarine/Makefile.am diff --git a/icmarine/icm700pro.c b/rigs/icmarine/icm700pro.c similarity index 100% rename from icmarine/icm700pro.c rename to rigs/icmarine/icm700pro.c diff --git a/icmarine/icm710.c b/rigs/icmarine/icm710.c similarity index 100% rename from icmarine/icm710.c rename to rigs/icmarine/icm710.c diff --git a/icmarine/icm710.h b/rigs/icmarine/icm710.h similarity index 100% rename from icmarine/icm710.h rename to rigs/icmarine/icm710.h diff --git a/icmarine/icm802.c b/rigs/icmarine/icm802.c similarity index 100% rename from icmarine/icm802.c rename to rigs/icmarine/icm802.c diff --git a/icmarine/icmarine.c b/rigs/icmarine/icmarine.c similarity index 100% rename from icmarine/icmarine.c rename to rigs/icmarine/icmarine.c diff --git a/icmarine/icmarine.h b/rigs/icmarine/icmarine.h similarity index 100% rename from icmarine/icmarine.h rename to rigs/icmarine/icmarine.h diff --git a/icom/Android.mk b/rigs/icom/Android.mk similarity index 100% rename from icom/Android.mk rename to rigs/icom/Android.mk diff --git a/icom/Makefile.am b/rigs/icom/Makefile.am similarity index 100% rename from icom/Makefile.am rename to rigs/icom/Makefile.am diff --git a/icom/README.icom b/rigs/icom/README.icom similarity index 100% rename from icom/README.icom rename to rigs/icom/README.icom diff --git a/icom/TODO.icom b/rigs/icom/TODO.icom similarity index 100% rename from icom/TODO.icom rename to rigs/icom/TODO.icom diff --git a/jrc/Android.mk b/rigs/jrc/Android.mk similarity index 100% rename from jrc/Android.mk rename to rigs/jrc/Android.mk diff --git a/jrc/Makefile.am b/rigs/jrc/Makefile.am similarity index 100% rename from jrc/Makefile.am rename to rigs/jrc/Makefile.am diff --git a/jrc/jrc.c b/rigs/jrc/jrc.c similarity index 100% rename from jrc/jrc.c rename to rigs/jrc/jrc.c diff --git a/jrc/jrc.h b/rigs/jrc/jrc.h similarity index 100% rename from jrc/jrc.h rename to rigs/jrc/jrc.h diff --git a/jrc/nrd525.c b/rigs/jrc/nrd525.c similarity index 100% rename from jrc/nrd525.c rename to rigs/jrc/nrd525.c diff --git a/jrc/nrd535.c b/rigs/jrc/nrd535.c similarity index 100% rename from jrc/nrd535.c rename to rigs/jrc/nrd535.c diff --git a/jrc/nrd545.c b/rigs/jrc/nrd545.c similarity index 100% rename from jrc/nrd545.c rename to rigs/jrc/nrd545.c diff --git a/kachina/505dsp.c b/rigs/kachina/505dsp.c similarity index 100% rename from kachina/505dsp.c rename to rigs/kachina/505dsp.c diff --git a/kachina/Android.mk b/rigs/kachina/Android.mk similarity index 100% rename from kachina/Android.mk rename to rigs/kachina/Android.mk diff --git a/kachina/Makefile.am b/rigs/kachina/Makefile.am similarity index 100% rename from kachina/Makefile.am rename to rigs/kachina/Makefile.am diff --git a/kachina/kachina.c b/rigs/kachina/kachina.c similarity index 100% rename from kachina/kachina.c rename to rigs/kachina/kachina.c diff --git a/kachina/kachina.h b/rigs/kachina/kachina.h similarity index 100% rename from kachina/kachina.h rename to rigs/kachina/kachina.h diff --git a/kenwood/Android.mk b/rigs/kenwood/Android.mk similarity index 100% rename from kenwood/Android.mk rename to rigs/kenwood/Android.mk diff --git a/kenwood/Makefile.am b/rigs/kenwood/Makefile.am similarity index 100% rename from kenwood/Makefile.am rename to rigs/kenwood/Makefile.am diff --git a/kenwood/README.flex b/rigs/kenwood/README.flex similarity index 100% rename from kenwood/README.flex rename to rigs/kenwood/README.flex diff --git a/kenwood/README.k2 b/rigs/kenwood/README.k2 similarity index 100% rename from kenwood/README.k2 rename to rigs/kenwood/README.k2 diff --git a/kenwood/README.k3 b/rigs/kenwood/README.k3 similarity index 100% rename from kenwood/README.k3 rename to rigs/kenwood/README.k3 diff --git a/kenwood/README.kenwood b/rigs/kenwood/README.kenwood similarity index 100% rename from kenwood/README.kenwood rename to rigs/kenwood/README.kenwood diff --git a/kenwood/README.ts2k b/rigs/kenwood/README.ts2k similarity index 100% rename from kenwood/README.ts2k rename to rigs/kenwood/README.ts2k diff --git a/kenwood/elecraft.c b/rigs/kenwood/elecraft.c similarity index 100% rename from kenwood/elecraft.c rename to rigs/kenwood/elecraft.c diff --git a/kenwood/elecraft.h b/rigs/kenwood/elecraft.h similarity index 100% rename from kenwood/elecraft.h rename to rigs/kenwood/elecraft.h diff --git a/kenwood/flex.c b/rigs/kenwood/flex.c similarity index 100% rename from kenwood/flex.c rename to rigs/kenwood/flex.c diff --git a/kenwood/flex.h b/rigs/kenwood/flex.h similarity index 100% rename from kenwood/flex.h rename to rigs/kenwood/flex.h diff --git a/kenwood/flex6xxx.c b/rigs/kenwood/flex6xxx.c similarity index 100% rename from kenwood/flex6xxx.c rename to rigs/kenwood/flex6xxx.c diff --git a/kenwood/ic10.c b/rigs/kenwood/ic10.c similarity index 100% rename from kenwood/ic10.c rename to rigs/kenwood/ic10.c diff --git a/kenwood/ic10.h b/rigs/kenwood/ic10.h similarity index 100% rename from kenwood/ic10.h rename to rigs/kenwood/ic10.h diff --git a/kenwood/k2.c b/rigs/kenwood/k2.c similarity index 100% rename from kenwood/k2.c rename to rigs/kenwood/k2.c diff --git a/kenwood/k3.c b/rigs/kenwood/k3.c similarity index 100% rename from kenwood/k3.c rename to rigs/kenwood/k3.c diff --git a/kenwood/kenwood.c b/rigs/kenwood/kenwood.c similarity index 100% rename from kenwood/kenwood.c rename to rigs/kenwood/kenwood.c diff --git a/kenwood/kenwood.h b/rigs/kenwood/kenwood.h similarity index 100% rename from kenwood/kenwood.h rename to rigs/kenwood/kenwood.h diff --git a/kenwood/pihpsdr.c b/rigs/kenwood/pihpsdr.c similarity index 100% rename from kenwood/pihpsdr.c rename to rigs/kenwood/pihpsdr.c diff --git a/kenwood/r5000.c b/rigs/kenwood/r5000.c similarity index 100% rename from kenwood/r5000.c rename to rigs/kenwood/r5000.c diff --git a/kenwood/th.c b/rigs/kenwood/th.c similarity index 100% rename from kenwood/th.c rename to rigs/kenwood/th.c diff --git a/kenwood/th.h b/rigs/kenwood/th.h similarity index 100% rename from kenwood/th.h rename to rigs/kenwood/th.h diff --git a/kenwood/thd7.c b/rigs/kenwood/thd7.c similarity index 100% rename from kenwood/thd7.c rename to rigs/kenwood/thd7.c diff --git a/kenwood/thd72.c b/rigs/kenwood/thd72.c similarity index 100% rename from kenwood/thd72.c rename to rigs/kenwood/thd72.c diff --git a/kenwood/thd74.c b/rigs/kenwood/thd74.c similarity index 100% rename from kenwood/thd74.c rename to rigs/kenwood/thd74.c diff --git a/kenwood/thf6a.c b/rigs/kenwood/thf6a.c similarity index 100% rename from kenwood/thf6a.c rename to rigs/kenwood/thf6a.c diff --git a/kenwood/thf7.c b/rigs/kenwood/thf7.c similarity index 100% rename from kenwood/thf7.c rename to rigs/kenwood/thf7.c diff --git a/kenwood/thg71.c b/rigs/kenwood/thg71.c similarity index 100% rename from kenwood/thg71.c rename to rigs/kenwood/thg71.c diff --git a/kenwood/tmd700.c b/rigs/kenwood/tmd700.c similarity index 100% rename from kenwood/tmd700.c rename to rigs/kenwood/tmd700.c diff --git a/kenwood/tmd710.c b/rigs/kenwood/tmd710.c similarity index 100% rename from kenwood/tmd710.c rename to rigs/kenwood/tmd710.c diff --git a/kenwood/tmv7.c b/rigs/kenwood/tmv7.c similarity index 100% rename from kenwood/tmv7.c rename to rigs/kenwood/tmv7.c diff --git a/kenwood/transfox.c b/rigs/kenwood/transfox.c similarity index 100% rename from kenwood/transfox.c rename to rigs/kenwood/transfox.c diff --git a/kenwood/trc80.c b/rigs/kenwood/trc80.c similarity index 100% rename from kenwood/trc80.c rename to rigs/kenwood/trc80.c diff --git a/kenwood/ts140.c b/rigs/kenwood/ts140.c similarity index 100% rename from kenwood/ts140.c rename to rigs/kenwood/ts140.c diff --git a/kenwood/ts2000.c b/rigs/kenwood/ts2000.c similarity index 100% rename from kenwood/ts2000.c rename to rigs/kenwood/ts2000.c diff --git a/kenwood/ts2000.txt b/rigs/kenwood/ts2000.txt similarity index 100% rename from kenwood/ts2000.txt rename to rigs/kenwood/ts2000.txt diff --git a/kenwood/ts440.c b/rigs/kenwood/ts440.c similarity index 100% rename from kenwood/ts440.c rename to rigs/kenwood/ts440.c diff --git a/kenwood/ts450s.c b/rigs/kenwood/ts450s.c similarity index 100% rename from kenwood/ts450s.c rename to rigs/kenwood/ts450s.c diff --git a/kenwood/ts480.c b/rigs/kenwood/ts480.c similarity index 100% rename from kenwood/ts480.c rename to rigs/kenwood/ts480.c diff --git a/kenwood/ts50s.c b/rigs/kenwood/ts50s.c similarity index 100% rename from kenwood/ts50s.c rename to rigs/kenwood/ts50s.c diff --git a/kenwood/ts570.c b/rigs/kenwood/ts570.c similarity index 100% rename from kenwood/ts570.c rename to rigs/kenwood/ts570.c diff --git a/kenwood/ts590.c b/rigs/kenwood/ts590.c similarity index 100% rename from kenwood/ts590.c rename to rigs/kenwood/ts590.c diff --git a/kenwood/ts680.c b/rigs/kenwood/ts680.c similarity index 100% rename from kenwood/ts680.c rename to rigs/kenwood/ts680.c diff --git a/kenwood/ts690.c b/rigs/kenwood/ts690.c similarity index 100% rename from kenwood/ts690.c rename to rigs/kenwood/ts690.c diff --git a/kenwood/ts711.c b/rigs/kenwood/ts711.c similarity index 100% rename from kenwood/ts711.c rename to rigs/kenwood/ts711.c diff --git a/kenwood/ts790.c b/rigs/kenwood/ts790.c similarity index 100% rename from kenwood/ts790.c rename to rigs/kenwood/ts790.c diff --git a/kenwood/ts811.c b/rigs/kenwood/ts811.c similarity index 100% rename from kenwood/ts811.c rename to rigs/kenwood/ts811.c diff --git a/kenwood/ts850.c b/rigs/kenwood/ts850.c similarity index 100% rename from kenwood/ts850.c rename to rigs/kenwood/ts850.c diff --git a/kenwood/ts870s.c b/rigs/kenwood/ts870s.c similarity index 100% rename from kenwood/ts870s.c rename to rigs/kenwood/ts870s.c diff --git a/kenwood/ts930.c b/rigs/kenwood/ts930.c similarity index 100% rename from kenwood/ts930.c rename to rigs/kenwood/ts930.c diff --git a/kenwood/ts940.c b/rigs/kenwood/ts940.c similarity index 100% rename from kenwood/ts940.c rename to rigs/kenwood/ts940.c diff --git a/kenwood/ts950.c b/rigs/kenwood/ts950.c similarity index 100% rename from kenwood/ts950.c rename to rigs/kenwood/ts950.c diff --git a/kenwood/ts990s.c b/rigs/kenwood/ts990s.c similarity index 100% rename from kenwood/ts990s.c rename to rigs/kenwood/ts990s.c diff --git a/kenwood/ts990s.h b/rigs/kenwood/ts990s.h similarity index 100% rename from kenwood/ts990s.h rename to rigs/kenwood/ts990s.h diff --git a/kenwood/xg3.c b/rigs/kenwood/xg3.c similarity index 100% rename from kenwood/xg3.c rename to rigs/kenwood/xg3.c diff --git a/kit/Android.mk b/rigs/kit/Android.mk similarity index 100% rename from kit/Android.mk rename to rigs/kit/Android.mk diff --git a/kit/Makefile.am b/rigs/kit/Makefile.am similarity index 100% rename from kit/Makefile.am rename to rigs/kit/Makefile.am diff --git a/kit/README.funcubedongle b/rigs/kit/README.funcubedongle similarity index 100% rename from kit/README.funcubedongle rename to rigs/kit/README.funcubedongle diff --git a/kit/dds60.c b/rigs/kit/dds60.c similarity index 100% rename from kit/dds60.c rename to rigs/kit/dds60.c diff --git a/kit/drt1.c b/rigs/kit/drt1.c similarity index 100% rename from kit/drt1.c rename to rigs/kit/drt1.c diff --git a/kit/dwt.c b/rigs/kit/dwt.c similarity index 100% rename from kit/dwt.c rename to rigs/kit/dwt.c diff --git a/kit/elektor304.c b/rigs/kit/elektor304.c similarity index 100% rename from kit/elektor304.c rename to rigs/kit/elektor304.c diff --git a/kit/elektor507.c b/rigs/kit/elektor507.c similarity index 100% rename from kit/elektor507.c rename to rigs/kit/elektor507.c diff --git a/kit/fifisdr.c b/rigs/kit/fifisdr.c similarity index 100% rename from kit/fifisdr.c rename to rigs/kit/fifisdr.c diff --git a/kit/funcube.c b/rigs/kit/funcube.c similarity index 100% rename from kit/funcube.c rename to rigs/kit/funcube.c diff --git a/kit/funcube.h b/rigs/kit/funcube.h similarity index 100% rename from kit/funcube.h rename to rigs/kit/funcube.h diff --git a/kit/hiqsdr.c b/rigs/kit/hiqsdr.c similarity index 100% rename from kit/hiqsdr.c rename to rigs/kit/hiqsdr.c diff --git a/kit/kit.c b/rigs/kit/kit.c similarity index 100% rename from kit/kit.c rename to rigs/kit/kit.c diff --git a/kit/kit.h b/rigs/kit/kit.h similarity index 100% rename from kit/kit.h rename to rigs/kit/kit.h diff --git a/kit/miniVNA.c b/rigs/kit/miniVNA.c similarity index 100% rename from kit/miniVNA.c rename to rigs/kit/miniVNA.c diff --git a/kit/pcrotor.c b/rigs/kit/pcrotor.c similarity index 100% rename from kit/pcrotor.c rename to rigs/kit/pcrotor.c diff --git a/kit/rs_hfiq.c b/rigs/kit/rs_hfiq.c similarity index 100% rename from kit/rs_hfiq.c rename to rigs/kit/rs_hfiq.c diff --git a/kit/si570avrusb.c b/rigs/kit/si570avrusb.c similarity index 100% rename from kit/si570avrusb.c rename to rigs/kit/si570avrusb.c diff --git a/kit/si570avrusb.h b/rigs/kit/si570avrusb.h similarity index 100% rename from kit/si570avrusb.h rename to rigs/kit/si570avrusb.h diff --git a/kit/usrp.c b/rigs/kit/usrp.c similarity index 100% rename from kit/usrp.c rename to rigs/kit/usrp.c diff --git a/kit/usrp_impl.cc b/rigs/kit/usrp_impl.cc similarity index 100% rename from kit/usrp_impl.cc rename to rigs/kit/usrp_impl.cc diff --git a/kit/usrp_impl.h b/rigs/kit/usrp_impl.h similarity index 100% rename from kit/usrp_impl.h rename to rigs/kit/usrp_impl.h diff --git a/lowe/Android.mk b/rigs/lowe/Android.mk similarity index 100% rename from lowe/Android.mk rename to rigs/lowe/Android.mk diff --git a/lowe/Makefile.am b/rigs/lowe/Makefile.am similarity index 100% rename from lowe/Makefile.am rename to rigs/lowe/Makefile.am diff --git a/lowe/hf235.c b/rigs/lowe/hf235.c similarity index 100% rename from lowe/hf235.c rename to rigs/lowe/hf235.c diff --git a/lowe/lowe.c b/rigs/lowe/lowe.c similarity index 100% rename from lowe/lowe.c rename to rigs/lowe/lowe.c diff --git a/lowe/lowe.h b/rigs/lowe/lowe.h similarity index 100% rename from lowe/lowe.h rename to rigs/lowe/lowe.h diff --git a/pcr/Android.mk b/rigs/pcr/Android.mk similarity index 100% rename from pcr/Android.mk rename to rigs/pcr/Android.mk diff --git a/pcr/Makefile.am b/rigs/pcr/Makefile.am similarity index 100% rename from pcr/Makefile.am rename to rigs/pcr/Makefile.am diff --git a/pcr/pcr.c b/rigs/pcr/pcr.c similarity index 100% rename from pcr/pcr.c rename to rigs/pcr/pcr.c diff --git a/pcr/pcr.h b/rigs/pcr/pcr.h similarity index 100% rename from pcr/pcr.h rename to rigs/pcr/pcr.h diff --git a/pcr/pcr100.c b/rigs/pcr/pcr100.c similarity index 100% rename from pcr/pcr100.c rename to rigs/pcr/pcr100.c diff --git a/pcr/pcr1000.c b/rigs/pcr/pcr1000.c similarity index 100% rename from pcr/pcr1000.c rename to rigs/pcr/pcr1000.c diff --git a/pcr/pcr1500.c b/rigs/pcr/pcr1500.c similarity index 100% rename from pcr/pcr1500.c rename to rigs/pcr/pcr1500.c diff --git a/pcr/pcr2500.c b/rigs/pcr/pcr2500.c similarity index 100% rename from pcr/pcr2500.c rename to rigs/pcr/pcr2500.c diff --git a/prm80/Android.mk b/rigs/prm80/Android.mk similarity index 100% rename from prm80/Android.mk rename to rigs/prm80/Android.mk diff --git a/prm80/Makefile.am b/rigs/prm80/Makefile.am similarity index 100% rename from prm80/Makefile.am rename to rigs/prm80/Makefile.am diff --git a/prm80/prm80.c b/rigs/prm80/prm80.c similarity index 100% rename from prm80/prm80.c rename to rigs/prm80/prm80.c diff --git a/prm80/prm80.h b/rigs/prm80/prm80.h similarity index 100% rename from prm80/prm80.h rename to rigs/prm80/prm80.h diff --git a/prm80/prm8060.c b/rigs/prm80/prm8060.c similarity index 100% rename from prm80/prm8060.c rename to rigs/prm80/prm8060.c diff --git a/racal/Android.mk b/rigs/racal/Android.mk similarity index 100% rename from racal/Android.mk rename to rigs/racal/Android.mk diff --git a/racal/Makefile.am b/rigs/racal/Makefile.am similarity index 100% rename from racal/Makefile.am rename to rigs/racal/Makefile.am diff --git a/racal/ra3702.c b/rigs/racal/ra3702.c similarity index 100% rename from racal/ra3702.c rename to rigs/racal/ra3702.c diff --git a/racal/ra37xx.c b/rigs/racal/ra37xx.c similarity index 100% rename from racal/ra37xx.c rename to rigs/racal/ra37xx.c diff --git a/racal/ra37xx.h b/rigs/racal/ra37xx.h similarity index 100% rename from racal/ra37xx.h rename to rigs/racal/ra37xx.h diff --git a/racal/ra6790.c b/rigs/racal/ra6790.c similarity index 100% rename from racal/ra6790.c rename to rigs/racal/ra6790.c diff --git a/racal/racal.c b/rigs/racal/racal.c similarity index 100% rename from racal/racal.c rename to rigs/racal/racal.c diff --git a/racal/racal.h b/rigs/racal/racal.h similarity index 100% rename from racal/racal.h rename to rigs/racal/racal.h diff --git a/rft/Android.mk b/rigs/rft/Android.mk similarity index 100% rename from rft/Android.mk rename to rigs/rft/Android.mk diff --git a/rft/Makefile.am b/rigs/rft/Makefile.am similarity index 100% rename from rft/Makefile.am rename to rigs/rft/Makefile.am diff --git a/rft/ekd500.c b/rigs/rft/ekd500.c similarity index 100% rename from rft/ekd500.c rename to rigs/rft/ekd500.c diff --git a/rft/rft.c b/rigs/rft/rft.c similarity index 100% rename from rft/rft.c rename to rigs/rft/rft.c diff --git a/rft/rft.h b/rigs/rft/rft.h similarity index 100% rename from rft/rft.h rename to rigs/rft/rft.h diff --git a/rs/Android.mk b/rigs/rs/Android.mk similarity index 100% rename from rs/Android.mk rename to rigs/rs/Android.mk diff --git a/rs/Makefile.am b/rigs/rs/Makefile.am similarity index 100% rename from rs/Makefile.am rename to rigs/rs/Makefile.am diff --git a/rs/eb200.c b/rigs/rs/eb200.c similarity index 100% rename from rs/eb200.c rename to rigs/rs/eb200.c diff --git a/rs/esmc.c b/rigs/rs/esmc.c similarity index 100% rename from rs/esmc.c rename to rigs/rs/esmc.c diff --git a/rs/gp2000.c b/rigs/rs/gp2000.c similarity index 100% rename from rs/gp2000.c rename to rigs/rs/gp2000.c diff --git a/rs/gp2000.h b/rigs/rs/gp2000.h similarity index 100% rename from rs/gp2000.h rename to rigs/rs/gp2000.h diff --git a/rs/rs.c b/rigs/rs/rs.c similarity index 100% rename from rs/rs.c rename to rigs/rs/rs.c diff --git a/rs/rs.h b/rigs/rs/rs.h similarity index 100% rename from rs/rs.h rename to rigs/rs/rs.h diff --git a/rs/xk2100.c b/rigs/rs/xk2100.c similarity index 100% rename from rs/xk2100.c rename to rigs/rs/xk2100.c diff --git a/skanti/Android.mk b/rigs/skanti/Android.mk similarity index 100% rename from skanti/Android.mk rename to rigs/skanti/Android.mk diff --git a/skanti/Makefile.am b/rigs/skanti/Makefile.am similarity index 100% rename from skanti/Makefile.am rename to rigs/skanti/Makefile.am diff --git a/skanti/skanti.c b/rigs/skanti/skanti.c similarity index 100% rename from skanti/skanti.c rename to rigs/skanti/skanti.c diff --git a/skanti/skanti.h b/rigs/skanti/skanti.h similarity index 100% rename from skanti/skanti.h rename to rigs/skanti/skanti.h diff --git a/skanti/trp8000.c b/rigs/skanti/trp8000.c similarity index 100% rename from skanti/trp8000.c rename to rigs/skanti/trp8000.c diff --git a/skanti/trp8255.c b/rigs/skanti/trp8255.c similarity index 100% rename from skanti/trp8255.c rename to rigs/skanti/trp8255.c diff --git a/tapr/Android.mk b/rigs/tapr/Android.mk similarity index 100% rename from tapr/Android.mk rename to rigs/tapr/Android.mk diff --git a/tapr/Makefile.am b/rigs/tapr/Makefile.am similarity index 100% rename from tapr/Makefile.am rename to rigs/tapr/Makefile.am diff --git a/tapr/dsp10.c b/rigs/tapr/dsp10.c similarity index 100% rename from tapr/dsp10.c rename to rigs/tapr/dsp10.c diff --git a/tapr/tapr.c b/rigs/tapr/tapr.c similarity index 100% rename from tapr/tapr.c rename to rigs/tapr/tapr.c diff --git a/tapr/tapr.h b/rigs/tapr/tapr.h similarity index 100% rename from tapr/tapr.h rename to rigs/tapr/tapr.h diff --git a/tentec/Android.mk b/rigs/tentec/Android.mk similarity index 100% rename from tentec/Android.mk rename to rigs/tentec/Android.mk diff --git a/tentec/Makefile.am b/rigs/tentec/Makefile.am similarity index 100% rename from tentec/Makefile.am rename to rigs/tentec/Makefile.am diff --git a/tentec/README b/rigs/tentec/README similarity index 100% rename from tentec/README rename to rigs/tentec/README diff --git a/tentec/argonaut.c b/rigs/tentec/argonaut.c similarity index 100% rename from tentec/argonaut.c rename to rigs/tentec/argonaut.c diff --git a/tentec/jupiter.c b/rigs/tentec/jupiter.c similarity index 100% rename from tentec/jupiter.c rename to rigs/tentec/jupiter.c diff --git a/tentec/omnivii.c b/rigs/tentec/omnivii.c similarity index 100% rename from tentec/omnivii.c rename to rigs/tentec/omnivii.c diff --git a/tentec/orion.c b/rigs/tentec/orion.c similarity index 100% rename from tentec/orion.c rename to rigs/tentec/orion.c diff --git a/tentec/orion.h b/rigs/tentec/orion.h similarity index 100% rename from tentec/orion.h rename to rigs/tentec/orion.h diff --git a/tentec/paragon.c b/rigs/tentec/paragon.c similarity index 100% rename from tentec/paragon.c rename to rigs/tentec/paragon.c diff --git a/tentec/pegasus.c b/rigs/tentec/pegasus.c similarity index 100% rename from tentec/pegasus.c rename to rigs/tentec/pegasus.c diff --git a/tentec/rx320.c b/rigs/tentec/rx320.c similarity index 100% rename from tentec/rx320.c rename to rigs/tentec/rx320.c diff --git a/tentec/rx331.c b/rigs/tentec/rx331.c similarity index 100% rename from tentec/rx331.c rename to rigs/tentec/rx331.c diff --git a/tentec/rx331.h b/rigs/tentec/rx331.h similarity index 100% rename from tentec/rx331.h rename to rigs/tentec/rx331.h diff --git a/tentec/rx340.c b/rigs/tentec/rx340.c similarity index 100% rename from tentec/rx340.c rename to rigs/tentec/rx340.c diff --git a/tentec/rx350.c b/rigs/tentec/rx350.c similarity index 100% rename from tentec/rx350.c rename to rigs/tentec/rx350.c diff --git a/tentec/tentec.c b/rigs/tentec/tentec.c similarity index 100% rename from tentec/tentec.c rename to rigs/tentec/tentec.c diff --git a/tentec/tentec.h b/rigs/tentec/tentec.h similarity index 100% rename from tentec/tentec.h rename to rigs/tentec/tentec.h diff --git a/tentec/tentec2.c b/rigs/tentec/tentec2.c similarity index 100% rename from tentec/tentec2.c rename to rigs/tentec/tentec2.c diff --git a/tentec/tentec2.h b/rigs/tentec/tentec2.h similarity index 100% rename from tentec/tentec2.h rename to rigs/tentec/tentec2.h diff --git a/tentec/tt550.c b/rigs/tentec/tt550.c similarity index 100% rename from tentec/tt550.c rename to rigs/tentec/tt550.c diff --git a/tentec/tt550.h b/rigs/tentec/tt550.h similarity index 100% rename from tentec/tt550.h rename to rigs/tentec/tt550.h diff --git a/tuner/Android.mk b/rigs/tuner/Android.mk similarity index 100% rename from tuner/Android.mk rename to rigs/tuner/Android.mk diff --git a/tuner/Makefile.am b/rigs/tuner/Makefile.am similarity index 100% rename from tuner/Makefile.am rename to rigs/tuner/Makefile.am diff --git a/tuner/tuner.c b/rigs/tuner/tuner.c similarity index 100% rename from tuner/tuner.c rename to rigs/tuner/tuner.c diff --git a/tuner/tuner.h b/rigs/tuner/tuner.h similarity index 100% rename from tuner/tuner.h rename to rigs/tuner/tuner.h diff --git a/tuner/v4l.c b/rigs/tuner/v4l.c similarity index 100% rename from tuner/v4l.c rename to rigs/tuner/v4l.c diff --git a/tuner/v4l2.c b/rigs/tuner/v4l2.c similarity index 100% rename from tuner/v4l2.c rename to rigs/tuner/v4l2.c diff --git a/tuner/videodev.h b/rigs/tuner/videodev.h similarity index 100% rename from tuner/videodev.h rename to rigs/tuner/videodev.h diff --git a/tuner/videodev2.h b/rigs/tuner/videodev2.h similarity index 100% rename from tuner/videodev2.h rename to rigs/tuner/videodev2.h diff --git a/uniden/Android.mk b/rigs/uniden/Android.mk similarity index 100% rename from uniden/Android.mk rename to rigs/uniden/Android.mk diff --git a/uniden/Makefile.am b/rigs/uniden/Makefile.am similarity index 100% rename from uniden/Makefile.am rename to rigs/uniden/Makefile.am diff --git a/uniden/bc245.c b/rigs/uniden/bc245.c similarity index 100% rename from uniden/bc245.c rename to rigs/uniden/bc245.c diff --git a/uniden/bc250.c b/rigs/uniden/bc250.c similarity index 100% rename from uniden/bc250.c rename to rigs/uniden/bc250.c diff --git a/uniden/bc780.c b/rigs/uniden/bc780.c similarity index 100% rename from uniden/bc780.c rename to rigs/uniden/bc780.c diff --git a/uniden/bc895.c b/rigs/uniden/bc895.c similarity index 100% rename from uniden/bc895.c rename to rigs/uniden/bc895.c diff --git a/uniden/bc898.c b/rigs/uniden/bc898.c similarity index 100% rename from uniden/bc898.c rename to rigs/uniden/bc898.c diff --git a/uniden/bcd396t.c b/rigs/uniden/bcd396t.c similarity index 100% rename from uniden/bcd396t.c rename to rigs/uniden/bcd396t.c diff --git a/uniden/bcd996t.c b/rigs/uniden/bcd996t.c similarity index 100% rename from uniden/bcd996t.c rename to rigs/uniden/bcd996t.c diff --git a/uniden/pro2052.c b/rigs/uniden/pro2052.c similarity index 100% rename from uniden/pro2052.c rename to rigs/uniden/pro2052.c diff --git a/uniden/uniden.c b/rigs/uniden/uniden.c similarity index 100% rename from uniden/uniden.c rename to rigs/uniden/uniden.c diff --git a/uniden/uniden.h b/rigs/uniden/uniden.h similarity index 100% rename from uniden/uniden.h rename to rigs/uniden/uniden.h diff --git a/uniden/uniden_digital.c b/rigs/uniden/uniden_digital.c similarity index 100% rename from uniden/uniden_digital.c rename to rigs/uniden/uniden_digital.c diff --git a/uniden/uniden_digital.h b/rigs/uniden/uniden_digital.h similarity index 100% rename from uniden/uniden_digital.h rename to rigs/uniden/uniden_digital.h diff --git a/winradio/Android.mk b/rigs/winradio/Android.mk similarity index 100% rename from winradio/Android.mk rename to rigs/winradio/Android.mk diff --git a/winradio/Makefile.am b/rigs/winradio/Makefile.am similarity index 100% rename from winradio/Makefile.am rename to rigs/winradio/Makefile.am diff --git a/winradio/NOTES b/rigs/winradio/NOTES similarity index 100% rename from winradio/NOTES rename to rigs/winradio/NOTES diff --git a/winradio/g303.c b/rigs/winradio/g303.c similarity index 100% rename from winradio/g303.c rename to rigs/winradio/g303.c diff --git a/winradio/g305.c b/rigs/winradio/g305.c similarity index 100% rename from winradio/g305.c rename to rigs/winradio/g305.c diff --git a/winradio/g313-posix.c b/rigs/winradio/g313-posix.c similarity index 100% rename from winradio/g313-posix.c rename to rigs/winradio/g313-posix.c diff --git a/winradio/g313-win.c b/rigs/winradio/g313-win.c similarity index 100% rename from winradio/g313-win.c rename to rigs/winradio/g313-win.c diff --git a/winradio/linradio/radio_ioctl.h b/rigs/winradio/linradio/radio_ioctl.h similarity index 100% rename from winradio/linradio/radio_ioctl.h rename to rigs/winradio/linradio/radio_ioctl.h diff --git a/winradio/linradio/wrapi.h b/rigs/winradio/linradio/wrapi.h similarity index 100% rename from winradio/linradio/wrapi.h rename to rigs/winradio/linradio/wrapi.h diff --git a/winradio/linradio/wrg313api.c b/rigs/winradio/linradio/wrg313api.c similarity index 100% rename from winradio/linradio/wrg313api.c rename to rigs/winradio/linradio/wrg313api.c diff --git a/winradio/linradio/wrg313api.h b/rigs/winradio/linradio/wrg313api.h similarity index 100% rename from winradio/linradio/wrg313api.h rename to rigs/winradio/linradio/wrg313api.h diff --git a/winradio/winradio.c b/rigs/winradio/winradio.c similarity index 100% rename from winradio/winradio.c rename to rigs/winradio/winradio.c diff --git a/winradio/winradio.h b/rigs/winradio/winradio.h similarity index 100% rename from winradio/winradio.h rename to rigs/winradio/winradio.h diff --git a/winradio/wr1000.c b/rigs/winradio/wr1000.c similarity index 100% rename from winradio/wr1000.c rename to rigs/winradio/wr1000.c diff --git a/winradio/wr1500.c b/rigs/winradio/wr1500.c similarity index 100% rename from winradio/wr1500.c rename to rigs/winradio/wr1500.c diff --git a/winradio/wr1550.c b/rigs/winradio/wr1550.c similarity index 100% rename from winradio/wr1550.c rename to rigs/winradio/wr1550.c diff --git a/winradio/wr3100.c b/rigs/winradio/wr3100.c similarity index 100% rename from winradio/wr3100.c rename to rigs/winradio/wr3100.c diff --git a/winradio/wr3150.c b/rigs/winradio/wr3150.c similarity index 100% rename from winradio/wr3150.c rename to rigs/winradio/wr3150.c diff --git a/winradio/wr3500.c b/rigs/winradio/wr3500.c similarity index 100% rename from winradio/wr3500.c rename to rigs/winradio/wr3500.c diff --git a/winradio/wr3700.c b/rigs/winradio/wr3700.c similarity index 100% rename from winradio/wr3700.c rename to rigs/winradio/wr3700.c diff --git a/wj/Android.mk b/rigs/wj/Android.mk similarity index 100% rename from wj/Android.mk rename to rigs/wj/Android.mk diff --git a/wj/Makefile.am b/rigs/wj/Makefile.am similarity index 100% rename from wj/Makefile.am rename to rigs/wj/Makefile.am diff --git a/wj/wj.c b/rigs/wj/wj.c similarity index 100% rename from wj/wj.c rename to rigs/wj/wj.c diff --git a/wj/wj.h b/rigs/wj/wj.h similarity index 100% rename from wj/wj.h rename to rigs/wj/wj.h diff --git a/wj/wj8888.c b/rigs/wj/wj8888.c similarity index 100% rename from wj/wj8888.c rename to rigs/wj/wj8888.c diff --git a/yaesu/Android.mk b/rigs/yaesu/Android.mk similarity index 100% rename from yaesu/Android.mk rename to rigs/yaesu/Android.mk diff --git a/yaesu/Makefile.am b/rigs/yaesu/Makefile.am similarity index 100% rename from yaesu/Makefile.am rename to rigs/yaesu/Makefile.am diff --git a/yaesu/README.ft890 b/rigs/yaesu/README.ft890 similarity index 100% rename from yaesu/README.ft890 rename to rigs/yaesu/README.ft890 diff --git a/yaesu/README.ft920 b/rigs/yaesu/README.ft920 similarity index 100% rename from yaesu/README.ft920 rename to rigs/yaesu/README.ft920 diff --git a/yaesu/frg100.c b/rigs/yaesu/frg100.c similarity index 100% rename from yaesu/frg100.c rename to rigs/yaesu/frg100.c diff --git a/yaesu/frg100.h b/rigs/yaesu/frg100.h similarity index 100% rename from yaesu/frg100.h rename to rigs/yaesu/frg100.h diff --git a/yaesu/frg8800.c b/rigs/yaesu/frg8800.c similarity index 100% rename from yaesu/frg8800.c rename to rigs/yaesu/frg8800.c diff --git a/yaesu/frg9600.c b/rigs/yaesu/frg9600.c similarity index 100% rename from yaesu/frg9600.c rename to rigs/yaesu/frg9600.c diff --git a/yaesu/ft100.c b/rigs/yaesu/ft100.c similarity index 100% rename from yaesu/ft100.c rename to rigs/yaesu/ft100.c diff --git a/yaesu/ft100.h b/rigs/yaesu/ft100.h similarity index 100% rename from yaesu/ft100.h rename to rigs/yaesu/ft100.h diff --git a/yaesu/ft1000d.c b/rigs/yaesu/ft1000d.c similarity index 100% rename from yaesu/ft1000d.c rename to rigs/yaesu/ft1000d.c diff --git a/yaesu/ft1000d.h b/rigs/yaesu/ft1000d.h similarity index 100% rename from yaesu/ft1000d.h rename to rigs/yaesu/ft1000d.h diff --git a/yaesu/ft1000mp.c b/rigs/yaesu/ft1000mp.c similarity index 100% rename from yaesu/ft1000mp.c rename to rigs/yaesu/ft1000mp.c diff --git a/yaesu/ft1000mp.h b/rigs/yaesu/ft1000mp.h similarity index 100% rename from yaesu/ft1000mp.h rename to rigs/yaesu/ft1000mp.h diff --git a/yaesu/ft1200.c b/rigs/yaesu/ft1200.c similarity index 100% rename from yaesu/ft1200.c rename to rigs/yaesu/ft1200.c diff --git a/yaesu/ft1200.h b/rigs/yaesu/ft1200.h similarity index 100% rename from yaesu/ft1200.h rename to rigs/yaesu/ft1200.h diff --git a/yaesu/ft2000.c b/rigs/yaesu/ft2000.c similarity index 100% rename from yaesu/ft2000.c rename to rigs/yaesu/ft2000.c diff --git a/yaesu/ft2000.h b/rigs/yaesu/ft2000.h similarity index 100% rename from yaesu/ft2000.h rename to rigs/yaesu/ft2000.h diff --git a/yaesu/ft450.c b/rigs/yaesu/ft450.c similarity index 100% rename from yaesu/ft450.c rename to rigs/yaesu/ft450.c diff --git a/yaesu/ft450.h b/rigs/yaesu/ft450.h similarity index 100% rename from yaesu/ft450.h rename to rigs/yaesu/ft450.h diff --git a/yaesu/ft5000.c b/rigs/yaesu/ft5000.c similarity index 100% rename from yaesu/ft5000.c rename to rigs/yaesu/ft5000.c diff --git a/yaesu/ft5000.h b/rigs/yaesu/ft5000.h similarity index 100% rename from yaesu/ft5000.h rename to rigs/yaesu/ft5000.h diff --git a/yaesu/ft600.c b/rigs/yaesu/ft600.c similarity index 100% rename from yaesu/ft600.c rename to rigs/yaesu/ft600.c diff --git a/yaesu/ft600.h b/rigs/yaesu/ft600.h similarity index 100% rename from yaesu/ft600.h rename to rigs/yaesu/ft600.h diff --git a/yaesu/ft736.c b/rigs/yaesu/ft736.c similarity index 100% rename from yaesu/ft736.c rename to rigs/yaesu/ft736.c diff --git a/yaesu/ft747.c b/rigs/yaesu/ft747.c similarity index 100% rename from yaesu/ft747.c rename to rigs/yaesu/ft747.c diff --git a/yaesu/ft747.h b/rigs/yaesu/ft747.h similarity index 100% rename from yaesu/ft747.h rename to rigs/yaesu/ft747.h diff --git a/yaesu/ft757gx.c b/rigs/yaesu/ft757gx.c similarity index 100% rename from yaesu/ft757gx.c rename to rigs/yaesu/ft757gx.c diff --git a/yaesu/ft757gx.h b/rigs/yaesu/ft757gx.h similarity index 100% rename from yaesu/ft757gx.h rename to rigs/yaesu/ft757gx.h diff --git a/yaesu/ft767gx.c b/rigs/yaesu/ft767gx.c similarity index 100% rename from yaesu/ft767gx.c rename to rigs/yaesu/ft767gx.c diff --git a/yaesu/ft767gx.h b/rigs/yaesu/ft767gx.h similarity index 100% rename from yaesu/ft767gx.h rename to rigs/yaesu/ft767gx.h diff --git a/yaesu/ft817.c b/rigs/yaesu/ft817.c similarity index 100% rename from yaesu/ft817.c rename to rigs/yaesu/ft817.c diff --git a/yaesu/ft817.h b/rigs/yaesu/ft817.h similarity index 100% rename from yaesu/ft817.h rename to rigs/yaesu/ft817.h diff --git a/yaesu/ft840.c b/rigs/yaesu/ft840.c similarity index 100% rename from yaesu/ft840.c rename to rigs/yaesu/ft840.c diff --git a/yaesu/ft840.h b/rigs/yaesu/ft840.h similarity index 100% rename from yaesu/ft840.h rename to rigs/yaesu/ft840.h diff --git a/yaesu/ft847.c b/rigs/yaesu/ft847.c similarity index 100% rename from yaesu/ft847.c rename to rigs/yaesu/ft847.c diff --git a/yaesu/ft847.h b/rigs/yaesu/ft847.h similarity index 100% rename from yaesu/ft847.h rename to rigs/yaesu/ft847.h diff --git a/yaesu/ft857.c b/rigs/yaesu/ft857.c similarity index 100% rename from yaesu/ft857.c rename to rigs/yaesu/ft857.c diff --git a/yaesu/ft857.h b/rigs/yaesu/ft857.h similarity index 100% rename from yaesu/ft857.h rename to rigs/yaesu/ft857.h diff --git a/yaesu/ft890.c b/rigs/yaesu/ft890.c similarity index 100% rename from yaesu/ft890.c rename to rigs/yaesu/ft890.c diff --git a/yaesu/ft890.h b/rigs/yaesu/ft890.h similarity index 100% rename from yaesu/ft890.h rename to rigs/yaesu/ft890.h diff --git a/yaesu/ft891.c b/rigs/yaesu/ft891.c similarity index 100% rename from yaesu/ft891.c rename to rigs/yaesu/ft891.c diff --git a/yaesu/ft891.h b/rigs/yaesu/ft891.h similarity index 100% rename from yaesu/ft891.h rename to rigs/yaesu/ft891.h diff --git a/yaesu/ft897.c b/rigs/yaesu/ft897.c similarity index 100% rename from yaesu/ft897.c rename to rigs/yaesu/ft897.c diff --git a/yaesu/ft897.h b/rigs/yaesu/ft897.h similarity index 100% rename from yaesu/ft897.h rename to rigs/yaesu/ft897.h diff --git a/yaesu/ft900.c b/rigs/yaesu/ft900.c similarity index 100% rename from yaesu/ft900.c rename to rigs/yaesu/ft900.c diff --git a/yaesu/ft900.h b/rigs/yaesu/ft900.h similarity index 100% rename from yaesu/ft900.h rename to rigs/yaesu/ft900.h diff --git a/yaesu/ft9000.c b/rigs/yaesu/ft9000.c similarity index 100% rename from yaesu/ft9000.c rename to rigs/yaesu/ft9000.c diff --git a/yaesu/ft9000.h b/rigs/yaesu/ft9000.h similarity index 100% rename from yaesu/ft9000.h rename to rigs/yaesu/ft9000.h diff --git a/yaesu/ft920.c b/rigs/yaesu/ft920.c similarity index 100% rename from yaesu/ft920.c rename to rigs/yaesu/ft920.c diff --git a/yaesu/ft920.h b/rigs/yaesu/ft920.h similarity index 100% rename from yaesu/ft920.h rename to rigs/yaesu/ft920.h diff --git a/yaesu/ft950.c b/rigs/yaesu/ft950.c similarity index 100% rename from yaesu/ft950.c rename to rigs/yaesu/ft950.c diff --git a/yaesu/ft950.h b/rigs/yaesu/ft950.h similarity index 100% rename from yaesu/ft950.h rename to rigs/yaesu/ft950.h diff --git a/yaesu/ft980.c b/rigs/yaesu/ft980.c similarity index 100% rename from yaesu/ft980.c rename to rigs/yaesu/ft980.c diff --git a/yaesu/ft990.c b/rigs/yaesu/ft990.c similarity index 100% rename from yaesu/ft990.c rename to rigs/yaesu/ft990.c diff --git a/yaesu/ft990.h b/rigs/yaesu/ft990.h similarity index 100% rename from yaesu/ft990.h rename to rigs/yaesu/ft990.h diff --git a/yaesu/ft991.c b/rigs/yaesu/ft991.c similarity index 100% rename from yaesu/ft991.c rename to rigs/yaesu/ft991.c diff --git a/yaesu/ft991.h b/rigs/yaesu/ft991.h similarity index 100% rename from yaesu/ft991.h rename to rigs/yaesu/ft991.h diff --git a/yaesu/newcat.c b/rigs/yaesu/newcat.c similarity index 100% rename from yaesu/newcat.c rename to rigs/yaesu/newcat.c diff --git a/yaesu/newcat.h b/rigs/yaesu/newcat.h similarity index 100% rename from yaesu/newcat.h rename to rigs/yaesu/newcat.h diff --git a/yaesu/vr5000.c b/rigs/yaesu/vr5000.c similarity index 100% rename from yaesu/vr5000.c rename to rigs/yaesu/vr5000.c diff --git a/yaesu/vx1700.c b/rigs/yaesu/vx1700.c similarity index 100% rename from yaesu/vx1700.c rename to rigs/yaesu/vx1700.c diff --git a/yaesu/vx1700.h b/rigs/yaesu/vx1700.h similarity index 100% rename from yaesu/vx1700.h rename to rigs/yaesu/vx1700.h diff --git a/yaesu/yaesu.c b/rigs/yaesu/yaesu.c similarity index 100% rename from yaesu/yaesu.c rename to rigs/yaesu/yaesu.c diff --git a/yaesu/yaesu.h b/rigs/yaesu/yaesu.h similarity index 100% rename from yaesu/yaesu.h rename to rigs/yaesu/yaesu.h diff --git a/amsat/Android.mk b/rotators/amsat/Android.mk similarity index 100% rename from amsat/Android.mk rename to rotators/amsat/Android.mk diff --git a/amsat/Makefile.am b/rotators/amsat/Makefile.am similarity index 100% rename from amsat/Makefile.am rename to rotators/amsat/Makefile.am diff --git a/amsat/if100.c b/rotators/amsat/if100.c similarity index 100% rename from amsat/if100.c rename to rotators/amsat/if100.c diff --git a/ars/Android.mk b/rotators/ars/Android.mk similarity index 100% rename from ars/Android.mk rename to rotators/ars/Android.mk diff --git a/ars/Makefile.am b/rotators/ars/Makefile.am similarity index 100% rename from ars/Makefile.am rename to rotators/ars/Makefile.am diff --git a/ars/ars.c b/rotators/ars/ars.c similarity index 100% rename from ars/ars.c rename to rotators/ars/ars.c diff --git a/ars/ars.h b/rotators/ars/ars.h similarity index 100% rename from ars/ars.h rename to rotators/ars/ars.h diff --git a/celestron/Android.mk b/rotators/celestron/Android.mk similarity index 100% rename from celestron/Android.mk rename to rotators/celestron/Android.mk diff --git a/celestron/Makefile.am b/rotators/celestron/Makefile.am similarity index 100% rename from celestron/Makefile.am rename to rotators/celestron/Makefile.am diff --git a/celestron/celestron.c b/rotators/celestron/celestron.c similarity index 100% rename from celestron/celestron.c rename to rotators/celestron/celestron.c diff --git a/celestron/celestron.h b/rotators/celestron/celestron.h similarity index 100% rename from celestron/celestron.h rename to rotators/celestron/celestron.h diff --git a/cnctrk/Android.mk b/rotators/cnctrk/Android.mk similarity index 100% rename from cnctrk/Android.mk rename to rotators/cnctrk/Android.mk diff --git a/cnctrk/Makefile.am b/rotators/cnctrk/Makefile.am similarity index 100% rename from cnctrk/Makefile.am rename to rotators/cnctrk/Makefile.am diff --git a/cnctrk/cnctrk.c b/rotators/cnctrk/cnctrk.c similarity index 100% rename from cnctrk/cnctrk.c rename to rotators/cnctrk/cnctrk.c diff --git a/easycomm/Android.mk b/rotators/easycomm/Android.mk similarity index 100% rename from easycomm/Android.mk rename to rotators/easycomm/Android.mk diff --git a/easycomm/Makefile.am b/rotators/easycomm/Makefile.am similarity index 100% rename from easycomm/Makefile.am rename to rotators/easycomm/Makefile.am diff --git a/easycomm/easycomm.c b/rotators/easycomm/easycomm.c similarity index 100% rename from easycomm/easycomm.c rename to rotators/easycomm/easycomm.c diff --git a/easycomm/easycomm.h b/rotators/easycomm/easycomm.h similarity index 100% rename from easycomm/easycomm.h rename to rotators/easycomm/easycomm.h diff --git a/easycomm/easycomm.txt b/rotators/easycomm/easycomm.txt similarity index 100% rename from easycomm/easycomm.txt rename to rotators/easycomm/easycomm.txt diff --git a/ether6/Android.mk b/rotators/ether6/Android.mk similarity index 100% rename from ether6/Android.mk rename to rotators/ether6/Android.mk diff --git a/ether6/Makefile.am b/rotators/ether6/Makefile.am similarity index 100% rename from ether6/Makefile.am rename to rotators/ether6/Makefile.am diff --git a/ether6/README.ether6 b/rotators/ether6/README.ether6 similarity index 100% rename from ether6/README.ether6 rename to rotators/ether6/README.ether6 diff --git a/ether6/ether6.c b/rotators/ether6/ether6.c similarity index 100% rename from ether6/ether6.c rename to rotators/ether6/ether6.c diff --git a/ether6/ether6.h b/rotators/ether6/ether6.h similarity index 100% rename from ether6/ether6.h rename to rotators/ether6/ether6.h diff --git a/ether6/ether6.txt b/rotators/ether6/ether6.txt similarity index 100% rename from ether6/ether6.txt rename to rotators/ether6/ether6.txt diff --git a/fodtrack/Android.mk b/rotators/fodtrack/Android.mk similarity index 100% rename from fodtrack/Android.mk rename to rotators/fodtrack/Android.mk diff --git a/fodtrack/Makefile.am b/rotators/fodtrack/Makefile.am similarity index 100% rename from fodtrack/Makefile.am rename to rotators/fodtrack/Makefile.am diff --git a/fodtrack/fodtrack.c b/rotators/fodtrack/fodtrack.c similarity index 100% rename from fodtrack/fodtrack.c rename to rotators/fodtrack/fodtrack.c diff --git a/fodtrack/fodtrack.h b/rotators/fodtrack/fodtrack.h similarity index 100% rename from fodtrack/fodtrack.h rename to rotators/fodtrack/fodtrack.h diff --git a/gs232a/Android.mk b/rotators/gs232a/Android.mk similarity index 100% rename from gs232a/Android.mk rename to rotators/gs232a/Android.mk diff --git a/gs232a/Makefile.am b/rotators/gs232a/Makefile.am similarity index 100% rename from gs232a/Makefile.am rename to rotators/gs232a/Makefile.am diff --git a/gs232a/gs232.c b/rotators/gs232a/gs232.c similarity index 100% rename from gs232a/gs232.c rename to rotators/gs232a/gs232.c diff --git a/gs232a/gs232a.c b/rotators/gs232a/gs232a.c similarity index 100% rename from gs232a/gs232a.c rename to rotators/gs232a/gs232a.c diff --git a/gs232a/gs232a.h b/rotators/gs232a/gs232a.h similarity index 100% rename from gs232a/gs232a.h rename to rotators/gs232a/gs232a.h diff --git a/gs232a/gs232b.c b/rotators/gs232a/gs232b.c similarity index 100% rename from gs232a/gs232b.c rename to rotators/gs232a/gs232b.c diff --git a/heathkit/Android.mk b/rotators/heathkit/Android.mk similarity index 100% rename from heathkit/Android.mk rename to rotators/heathkit/Android.mk diff --git a/heathkit/Makefile.am b/rotators/heathkit/Makefile.am similarity index 100% rename from heathkit/Makefile.am rename to rotators/heathkit/Makefile.am diff --git a/heathkit/hd1780.c b/rotators/heathkit/hd1780.c similarity index 100% rename from heathkit/hd1780.c rename to rotators/heathkit/hd1780.c diff --git a/heathkit/hd1780.h b/rotators/heathkit/hd1780.h similarity index 100% rename from heathkit/hd1780.h rename to rotators/heathkit/hd1780.h diff --git a/ioptron/Android.mk b/rotators/ioptron/Android.mk similarity index 100% rename from ioptron/Android.mk rename to rotators/ioptron/Android.mk diff --git a/ioptron/Makefile.am b/rotators/ioptron/Makefile.am similarity index 100% rename from ioptron/Makefile.am rename to rotators/ioptron/Makefile.am diff --git a/ioptron/README_ioptron b/rotators/ioptron/README_ioptron similarity index 100% rename from ioptron/README_ioptron rename to rotators/ioptron/README_ioptron diff --git a/ioptron/rot_ioptron.c b/rotators/ioptron/rot_ioptron.c similarity index 100% rename from ioptron/rot_ioptron.c rename to rotators/ioptron/rot_ioptron.c diff --git a/ioptron/rot_ioptron.h b/rotators/ioptron/rot_ioptron.h similarity index 100% rename from ioptron/rot_ioptron.h rename to rotators/ioptron/rot_ioptron.h diff --git a/m2/Android.mk b/rotators/m2/Android.mk similarity index 100% rename from m2/Android.mk rename to rotators/m2/Android.mk diff --git a/m2/Makefile.am b/rotators/m2/Makefile.am similarity index 100% rename from m2/Makefile.am rename to rotators/m2/Makefile.am diff --git a/m2/rc2800.c b/rotators/m2/rc2800.c similarity index 100% rename from m2/rc2800.c rename to rotators/m2/rc2800.c diff --git a/m2/rc2800.h b/rotators/m2/rc2800.h similarity index 100% rename from m2/rc2800.h rename to rotators/m2/rc2800.h diff --git a/meade/Android.mk b/rotators/meade/Android.mk similarity index 100% rename from meade/Android.mk rename to rotators/meade/Android.mk diff --git a/meade/Makefile.am b/rotators/meade/Makefile.am similarity index 100% rename from meade/Makefile.am rename to rotators/meade/Makefile.am diff --git a/meade/README.md b/rotators/meade/README.md similarity index 100% rename from meade/README.md rename to rotators/meade/README.md diff --git a/meade/meade.c b/rotators/meade/meade.c similarity index 100% rename from meade/meade.c rename to rotators/meade/meade.c diff --git a/meade/meade.h b/rotators/meade/meade.h similarity index 100% rename from meade/meade.h rename to rotators/meade/meade.h diff --git a/prosistel/Android.mk b/rotators/prosistel/Android.mk similarity index 100% rename from prosistel/Android.mk rename to rotators/prosistel/Android.mk diff --git a/prosistel/Makefile.am b/rotators/prosistel/Makefile.am similarity index 100% rename from prosistel/Makefile.am rename to rotators/prosistel/Makefile.am diff --git a/prosistel/prosistel.c b/rotators/prosistel/prosistel.c similarity index 100% rename from prosistel/prosistel.c rename to rotators/prosistel/prosistel.c diff --git a/prosistel/prosistel.h b/rotators/prosistel/prosistel.h similarity index 100% rename from prosistel/prosistel.h rename to rotators/prosistel/prosistel.h diff --git a/rotorez/Android.mk b/rotators/rotorez/Android.mk similarity index 100% rename from rotorez/Android.mk rename to rotators/rotorez/Android.mk diff --git a/rotorez/Makefile.am b/rotators/rotorez/Makefile.am similarity index 100% rename from rotorez/Makefile.am rename to rotators/rotorez/Makefile.am diff --git a/rotorez/README.rotorez b/rotators/rotorez/README.rotorez similarity index 100% rename from rotorez/README.rotorez rename to rotators/rotorez/README.rotorez diff --git a/rotorez/rotorez.c b/rotators/rotorez/rotorez.c similarity index 100% rename from rotorez/rotorez.c rename to rotators/rotorez/rotorez.c diff --git a/rotorez/rotorez.h b/rotators/rotorez/rotorez.h similarity index 100% rename from rotorez/rotorez.h rename to rotators/rotorez/rotorez.h diff --git a/rotorez/rotorez.txt b/rotators/rotorez/rotorez.txt similarity index 100% rename from rotorez/rotorez.txt rename to rotators/rotorez/rotorez.txt diff --git a/sartek/Android.mk b/rotators/sartek/Android.mk similarity index 100% rename from sartek/Android.mk rename to rotators/sartek/Android.mk diff --git a/sartek/Makefile.am b/rotators/sartek/Makefile.am similarity index 100% rename from sartek/Makefile.am rename to rotators/sartek/Makefile.am diff --git a/sartek/sartek.c b/rotators/sartek/sartek.c similarity index 100% rename from sartek/sartek.c rename to rotators/sartek/sartek.c diff --git a/sartek/sartek.h b/rotators/sartek/sartek.h similarity index 100% rename from sartek/sartek.h rename to rotators/sartek/sartek.h diff --git a/spid/Android.mk b/rotators/spid/Android.mk similarity index 100% rename from spid/Android.mk rename to rotators/spid/Android.mk diff --git a/spid/Makefile.am b/rotators/spid/Makefile.am similarity index 100% rename from spid/Makefile.am rename to rotators/spid/Makefile.am diff --git a/spid/spid.c b/rotators/spid/spid.c similarity index 100% rename from spid/spid.c rename to rotators/spid/spid.c diff --git a/spid/spid.h b/rotators/spid/spid.h similarity index 100% rename from spid/spid.h rename to rotators/spid/spid.h diff --git a/spid/spid.txt b/rotators/spid/spid.txt similarity index 100% rename from spid/spid.txt rename to rotators/spid/spid.txt diff --git a/ts7400/Android.mk b/rotators/ts7400/Android.mk similarity index 100% rename from ts7400/Android.mk rename to rotators/ts7400/Android.mk diff --git a/ts7400/Makefile.am b/rotators/ts7400/Makefile.am similarity index 100% rename from ts7400/Makefile.am rename to rotators/ts7400/Makefile.am diff --git a/ts7400/include/ep93xx_adc.h b/rotators/ts7400/include/ep93xx_adc.h similarity index 100% rename from ts7400/include/ep93xx_adc.h rename to rotators/ts7400/include/ep93xx_adc.h diff --git a/ts7400/include/io.c b/rotators/ts7400/include/io.c similarity index 100% rename from ts7400/include/io.c rename to rotators/ts7400/include/io.c diff --git a/ts7400/include/io.h b/rotators/ts7400/include/io.h similarity index 100% rename from ts7400/include/io.h rename to rotators/ts7400/include/io.h diff --git a/ts7400/include/peekpoke.c b/rotators/ts7400/include/peekpoke.c similarity index 100% rename from ts7400/include/peekpoke.c rename to rotators/ts7400/include/peekpoke.c diff --git a/ts7400/include/peekpoke.h b/rotators/ts7400/include/peekpoke.h similarity index 100% rename from ts7400/include/peekpoke.h rename to rotators/ts7400/include/peekpoke.h diff --git a/ts7400/include/readADC.c b/rotators/ts7400/include/readADC.c similarity index 100% rename from ts7400/include/readADC.c rename to rotators/ts7400/include/readADC.c diff --git a/ts7400/include/readADC.h b/rotators/ts7400/include/readADC.h similarity index 100% rename from ts7400/include/readADC.h rename to rotators/ts7400/include/readADC.h diff --git a/ts7400/include/test7400ADC.c b/rotators/ts7400/include/test7400ADC.c similarity index 100% rename from ts7400/include/test7400ADC.c rename to rotators/ts7400/include/test7400ADC.c diff --git a/ts7400/ts7400.c b/rotators/ts7400/ts7400.c similarity index 100% rename from ts7400/ts7400.c rename to rotators/ts7400/ts7400.c diff --git a/ts7400/ts7400.h b/rotators/ts7400/ts7400.h similarity index 100% rename from ts7400/ts7400.h rename to rotators/ts7400/ts7400.h diff --git a/src/Makefile.am b/src/Makefile.am index 552fe2f7d..35dd67e68 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -12,8 +12,8 @@ libhamlib_la_SOURCES = $(RIGSRC) libhamlib_la_LDFLAGS = $(WINLDFLAGS) $(OSXLDFLAGS) -no-undefined -version-info $(ABI_VERSION):$(ABI_REVISION):$(ABI_AGE) libhamlib_la_LIBADD = $(top_builddir)/lib/libmisc.la \ - $(BACKENDEPS) $(ROT_BACKENDEPS) $(AMP_BACKENDEPS) $(NET_LIBS) $(MATH_LIBS) $(LIBUSB_LIBS) + $(BACKENDEPS) $(RIG_BACKENDEPS) $(ROT_BACKENDEPS) $(AMP_BACKENDEPS) $(NET_LIBS) $(MATH_LIBS) $(LIBUSB_LIBS) -libhamlib_la_DEPENDENCIES = $(top_builddir)/lib/libmisc.la $(BACKENDEPS) $(ROT_BACKENDEPS) $(AMP_BACKENDEPS) +libhamlib_la_DEPENDENCIES = $(top_builddir)/lib/libmisc.la $(BACKENDEPS) $(RIG_BACKEND_DEPS) $(ROT_BACKENDEPS) $(AMP_BACKENDEPS) EXTRA_DIST = Android.mk