From c1cb77c64311aa04ba06f2aefa9d71f5459ffc42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Mon, 4 Jun 2001 21:17:53 +0000 Subject: [PATCH] new automatic backend loading and sparse rig_model scheme git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@529 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- include/hamlib/riglist.h | 374 +++++++++++++++++++++++---------------- src/register.c | 184 ++++++++++++++++--- src/rig.c | 47 ++--- tests/dumpcaps.c | 13 +- tests/dumpmem.c | 4 +- tests/listrigs.c | 20 ++- tests/rigctl.c | 4 +- tests/rigmatrix.c | 10 +- tests/testcaps.c | 4 +- tests/testrig.c | 2 + tests/testtrn.c | 16 +- 11 files changed, 450 insertions(+), 228 deletions(-) diff --git a/include/hamlib/riglist.h b/include/hamlib/riglist.h index 697de5c2d..edaaadeb8 100644 --- a/include/hamlib/riglist.h +++ b/include/hamlib/riglist.h @@ -4,7 +4,7 @@ * This include defines the list of known rigs. * * - * $Id: riglist.h,v 1.12 2001-06-02 17:48:46 f4cfe Exp $ * + * $Id: riglist.h,v 1.13 2001-06-04 21:17:52 f4cfe Exp $ * * * * This program is free software; you can redistribute it and/or @@ -26,227 +26,301 @@ #ifndef _RIGLIST_H #define _RIGLIST_H 1 +#define RIG_MAKE_MODEL(a,b) ((a)*100+(b)) +#define RIG_BACKEND_NUM(a) ((a)/100) -enum rig_model_e { - RIG_MODEL_DUMMY = 0, +#define RIG_MODEL_NONE 0 + +#define RIG_DUMMY 0 +#define RIG_BACKEND_DUMMY "dummy" +#define RIG_MODEL_DUMMY RIG_MAKE_MODEL(RIG_DUMMY, 1) /* * Yaesu */ - RIG_MODEL_FT847, - RIG_MODEL_FT1000, - RIG_MODEL_FT1000D, - RIG_MODEL_FT1000MP, - RIG_MODEL_FT747, - RIG_MODEL_FT757, - RIG_MODEL_FT757GXII, - RIG_MODEL_FT575, - RIG_MODEL_FT767, - RIG_MODEL_FT736R, - RIG_MODEL_FT840, - RIG_MODEL_FT820, - RIG_MODEL_FT900, - RIG_MODEL_FT920, - RIG_MODEL_FT890, - RIG_MODEL_FT990, - RIG_MODEL_FRG100, /* same as FT890/990 ? */ - RIG_MODEL_FRG9600, - RIG_MODEL_FRG8800, +#define RIG_YAESU 1 +#define RIG_BACKEND_YAESU "yaesu" +#define RIG_MODEL_FT847 RIG_MAKE_MODEL(RIG_YAESU, 1) +#define RIG_MODEL_FT1000 RIG_MAKE_MODEL(RIG_YAESU, 2) +#define RIG_MODEL_FT1000D RIG_MAKE_MODEL(RIG_YAESU, 3) +#define RIG_MODEL_FT1000MP RIG_MAKE_MODEL(RIG_YAESU, 4) +#define RIG_MODEL_FT747 RIG_MAKE_MODEL(RIG_YAESU, 5) +#define RIG_MODEL_FT757 RIG_MAKE_MODEL(RIG_YAESU, 6) +#define RIG_MODEL_FT757GXII RIG_MAKE_MODEL(RIG_YAESU, 7) +#define RIG_MODEL_FT575 RIG_MAKE_MODEL(RIG_YAESU, 8) +#define RIG_MODEL_FT767 RIG_MAKE_MODEL(RIG_YAESU, 9) +#define RIG_MODEL_FT736R RIG_MAKE_MODEL(RIG_YAESU, 10) +#define RIG_MODEL_FT840 RIG_MAKE_MODEL(RIG_YAESU, 11) +#define RIG_MODEL_FT820 RIG_MAKE_MODEL(RIG_YAESU, 12) +#define RIG_MODEL_FT900 RIG_MAKE_MODEL(RIG_YAESU, 13) +#define RIG_MODEL_FT920 RIG_MAKE_MODEL(RIG_YAESU, 14) +#define RIG_MODEL_FT890 RIG_MAKE_MODEL(RIG_YAESU, 15) +#define RIG_MODEL_FT990 RIG_MAKE_MODEL(RIG_YAESU, 16) +#define RIG_MODEL_FRG100 RIG_MAKE_MODEL(RIG_YAESU, 17) +#define RIG_MODEL_FRG9600 RIG_MAKE_MODEL(RIG_YAESU, 18) +#define RIG_MODEL_FRG8800 RIG_MAKE_MODEL(RIG_YAESU, 19) /* * Kenwood */ - RIG_MODEL_TS50, - RIG_MODEL_TS440, - RIG_MODEL_TS450S, - RIG_MODEL_TS570D, - RIG_MODEL_TS690S, - RIG_MODEL_TS711, - RIG_MODEL_TS790, - RIG_MODEL_TS811, - RIG_MODEL_TS850, - RIG_MODEL_TS870S, - RIG_MODEL_TS940, - RIG_MODEL_TS950, - RIG_MODEL_TS950SDX, - RIG_MODEL_R5000, +#define RIG_KENWOOD 2 +#define RIG_BACKEND_KENWOOD "kenwood" +#define RIG_MODEL_TS50 RIG_MAKE_MODEL(RIG_KENWOOD, 1) +#define RIG_MODEL_TS440 RIG_MAKE_MODEL(RIG_KENWOOD, 2) +#define RIG_MODEL_TS450S RIG_MAKE_MODEL(RIG_KENWOOD, 3) +#define RIG_MODEL_TS570D RIG_MAKE_MODEL(RIG_KENWOOD, 4) +#define RIG_MODEL_TS690S RIG_MAKE_MODEL(RIG_KENWOOD, 5) +#define RIG_MODEL_TS711 RIG_MAKE_MODEL(RIG_KENWOOD, 6) +#define RIG_MODEL_TS790 RIG_MAKE_MODEL(RIG_KENWOOD, 7) +#define RIG_MODEL_TS811 RIG_MAKE_MODEL(RIG_KENWOOD, 8) +#define RIG_MODEL_TS850 RIG_MAKE_MODEL(RIG_KENWOOD, 9) +#define RIG_MODEL_TS870S RIG_MAKE_MODEL(RIG_KENWOOD, 10) +#define RIG_MODEL_TS940 RIG_MAKE_MODEL(RIG_KENWOOD, 11) +#define RIG_MODEL_TS950 RIG_MAKE_MODEL(RIG_KENWOOD, 12) +#define RIG_MODEL_TS950SDX RIG_MAKE_MODEL(RIG_KENWOOD, 13) +#define RIG_MODEL_TS2000 RIG_MAKE_MODEL(RIG_KENWOOD, 14) +#define RIG_MODEL_R5000 RIG_MAKE_MODEL(RIG_KENWOOD, 15) /* * Icom */ - RIG_MODEL_ICALL, /* do-it-all, for debug purpose */ - RIG_MODEL_IC1271, - RIG_MODEL_IC1275, - RIG_MODEL_IC271, - RIG_MODEL_IC275, - RIG_MODEL_IC375, - RIG_MODEL_IC471, - RIG_MODEL_IC475, - RIG_MODEL_IC575, - RIG_MODEL_IC706, - RIG_MODEL_IC706MKII, - RIG_MODEL_IC706MKIIG, - RIG_MODEL_IC707, - RIG_MODEL_IC718, - RIG_MODEL_IC725, - RIG_MODEL_IC726, - RIG_MODEL_IC728, - RIG_MODEL_IC729, - RIG_MODEL_IC731, - RIG_MODEL_IC735, - RIG_MODEL_IC736, - RIG_MODEL_IC737, - RIG_MODEL_IC738, - RIG_MODEL_IC746, - RIG_MODEL_IC751, - RIG_MODEL_IC751A, - RIG_MODEL_IC756, - RIG_MODEL_IC756PRO, - RIG_MODEL_IC761, - RIG_MODEL_IC765, - RIG_MODEL_IC775, - RIG_MODEL_IC781, - RIG_MODEL_IC820, - RIG_MODEL_IC821, - RIG_MODEL_IC821H, - RIG_MODEL_IC970, - RIG_MODEL_ICR10, - RIG_MODEL_ICR71, - RIG_MODEL_ICR72, - RIG_MODEL_ICR75, - RIG_MODEL_ICR7000, - RIG_MODEL_ICR7100, - RIG_MODEL_ICR8500, - RIG_MODEL_ICR9000, - RIG_MODEL_PCR1000, - RIG_MODEL_PCR100, - +#define RIG_ICOM 3 +#define RIG_BACKEND_ICOM "icom" + /* do-it-all, for debug purpose */ +#define RIG_MODEL_ICALL RIG_MAKE_MODEL(RIG_ICOM, 0) +#define RIG_MODEL_IC1271 RIG_MAKE_MODEL(RIG_ICOM, 1) +#define RIG_MODEL_IC1275 RIG_MAKE_MODEL(RIG_ICOM, 2) +#define RIG_MODEL_IC271 RIG_MAKE_MODEL(RIG_ICOM, 3) +#define RIG_MODEL_IC275 RIG_MAKE_MODEL(RIG_ICOM, 4) +#define RIG_MODEL_IC375 RIG_MAKE_MODEL(RIG_ICOM, 5) +#define RIG_MODEL_IC471 RIG_MAKE_MODEL(RIG_ICOM, 6) +#define RIG_MODEL_IC475 RIG_MAKE_MODEL(RIG_ICOM, 7) +#define RIG_MODEL_IC575 RIG_MAKE_MODEL(RIG_ICOM, 8) +#define RIG_MODEL_IC706 RIG_MAKE_MODEL(RIG_ICOM, 9) +#define RIG_MODEL_IC706MKII RIG_MAKE_MODEL(RIG_ICOM, 10) +#define RIG_MODEL_IC706MKIIG RIG_MAKE_MODEL(RIG_ICOM, 11) +#define RIG_MODEL_IC707 RIG_MAKE_MODEL(RIG_ICOM, 12) +#define RIG_MODEL_IC718 RIG_MAKE_MODEL(RIG_ICOM, 13) +#define RIG_MODEL_IC725 RIG_MAKE_MODEL(RIG_ICOM, 14) +#define RIG_MODEL_IC726 RIG_MAKE_MODEL(RIG_ICOM, 15) +#define RIG_MODEL_IC728 RIG_MAKE_MODEL(RIG_ICOM, 16) +#define RIG_MODEL_IC729 RIG_MAKE_MODEL(RIG_ICOM, 17) +#define RIG_MODEL_IC731 RIG_MAKE_MODEL(RIG_ICOM, 18) +#define RIG_MODEL_IC735 RIG_MAKE_MODEL(RIG_ICOM, 19) +#define RIG_MODEL_IC736 RIG_MAKE_MODEL(RIG_ICOM, 20) +#define RIG_MODEL_IC737 RIG_MAKE_MODEL(RIG_ICOM, 21) +#define RIG_MODEL_IC738 RIG_MAKE_MODEL(RIG_ICOM, 22) +#define RIG_MODEL_IC746 RIG_MAKE_MODEL(RIG_ICOM, 23) +#define RIG_MODEL_IC751 RIG_MAKE_MODEL(RIG_ICOM, 24) +#define RIG_MODEL_IC751A RIG_MAKE_MODEL(RIG_ICOM, 25) +#define RIG_MODEL_IC756 RIG_MAKE_MODEL(RIG_ICOM, 26) +#define RIG_MODEL_IC756PRO RIG_MAKE_MODEL(RIG_ICOM, 27) +#define RIG_MODEL_IC761 RIG_MAKE_MODEL(RIG_ICOM, 28) +#define RIG_MODEL_IC765 RIG_MAKE_MODEL(RIG_ICOM, 29) +#define RIG_MODEL_IC775 RIG_MAKE_MODEL(RIG_ICOM, 30) +#define RIG_MODEL_IC781 RIG_MAKE_MODEL(RIG_ICOM, 31) +#define RIG_MODEL_IC820 RIG_MAKE_MODEL(RIG_ICOM, 32) +#define RIG_MODEL_IC821 RIG_MAKE_MODEL(RIG_ICOM, 33) +#define RIG_MODEL_IC821H RIG_MAKE_MODEL(RIG_ICOM, 34) +#define RIG_MODEL_IC970 RIG_MAKE_MODEL(RIG_ICOM, 35) +#define RIG_MODEL_ICR10 RIG_MAKE_MODEL(RIG_ICOM, 36) +#define RIG_MODEL_ICR71 RIG_MAKE_MODEL(RIG_ICOM, 37) +#define RIG_MODEL_ICR72 RIG_MAKE_MODEL(RIG_ICOM, 38) +#define RIG_MODEL_ICR75 RIG_MAKE_MODEL(RIG_ICOM, 39) +#define RIG_MODEL_ICR7000 RIG_MAKE_MODEL(RIG_ICOM, 40) +#define RIG_MODEL_ICR7100 RIG_MAKE_MODEL(RIG_ICOM, 41) +#define RIG_MODEL_ICR8500 RIG_MAKE_MODEL(RIG_ICOM, 42) +#define RIG_MODEL_ICR9000 RIG_MAKE_MODEL(RIG_ICOM, 43) /* * Optoelectronics (CI-V) */ - RIG_MODEL_MINISCOUT, - RIG_MODEL_XPLORER, +#define RIG_MODEL_MINISCOUT RIG_MAKE_MODEL(RIG_ICOM, 44) +#define RIG_MODEL_XPLORER RIG_MAKE_MODEL(RIG_ICOM, 45) /* * TenTec (CI-V) */ - RIG_MODEL_OMNIVI, - RIG_MODEL_OMNIVIP, /* OMNI-IV+ */ +#define RIG_MODEL_OMNIVI RIG_MAKE_MODEL(RIG_ICOM, 46) +#define RIG_MODEL_OMNIVIP RIG_MAKE_MODEL(RIG_ICOM, 47) /* OMNI-IV+ */ + + /* + * Icom PCR + */ +#define RIG_PCR 4 +#define RIG_BACKEND_PCR "pcr" +#define RIG_MODEL_PCR1000 RIG_MAKE_MODEL(RIG_PCR, 1) +#define RIG_MODEL_PCR100 RIG_MAKE_MODEL(RIG_PCR, 2) /* * AOR */ - RIG_MODEL_AR8200, - RIG_MODEL_AR8000, - RIG_MODEL_AR7030, - RIG_MODEL_AR5000, - RIG_MODEL_AR3030, - RIG_MODEL_AR3000A, - RIG_MODEL_AR3000, - RIG_MODEL_AR2700, - RIG_MODEL_AR2500, - RIG_MODEL_AR16, +#define RIG_AOR 5 +#define RIG_BACKEND_AOR "aor" +#define RIG_MODEL_AR8200 RIG_MAKE_MODEL(RIG_AOR, 1) +#define RIG_MODEL_AR8000 RIG_MAKE_MODEL(RIG_AOR, 2) +#define RIG_MODEL_AR7030 RIG_MAKE_MODEL(RIG_AOR, 3) +#define RIG_MODEL_AR5000 RIG_MAKE_MODEL(RIG_AOR, 4) +#define RIG_MODEL_AR3030 RIG_MAKE_MODEL(RIG_AOR, 5) +#define RIG_MODEL_AR3000A RIG_MAKE_MODEL(RIG_AOR, 6) +#define RIG_MODEL_AR3000 RIG_MAKE_MODEL(RIG_AOR, 7) +#define RIG_MODEL_AR2700 RIG_MAKE_MODEL(RIG_AOR, 8) +#define RIG_MODEL_AR2500 RIG_MAKE_MODEL(RIG_AOR, 9) +#define RIG_MODEL_AR16 RIG_MAKE_MODEL(RIG_AOR, 10) /* * JRC */ - RIG_MODEL_JST145, - RIG_MODEL_JST245, - RIG_MODEL_CMH530, - RIG_MODEL_NRD345, - RIG_MODEL_NRD525, - RIG_MODEL_NRD535, - RIG_MODEL_NRD545, +#define RIG_JRC 6 +#define RIG_BACKEND_JRC "jrc" +#define RIG_MODEL_JST145 RIG_MAKE_MODEL(RIG_JRC, 1) +#define RIG_MODEL_JST245 RIG_MAKE_MODEL(RIG_JRC, 2) +#define RIG_MODEL_CMH530 RIG_MAKE_MODEL(RIG_JRC, 3) +#define RIG_MODEL_NRD345 RIG_MAKE_MODEL(RIG_JRC, 4) +#define RIG_MODEL_NRD525 RIG_MAKE_MODEL(RIG_JRC, 5) +#define RIG_MODEL_NRD535 RIG_MAKE_MODEL(RIG_JRC, 6) +#define RIG_MODEL_NRD545 RIG_MAKE_MODEL(RIG_JRC, 7) /* * Radio Shack + * Actualy, they might be either Icom or Uniden. TBC --SF */ - RIG_MODEL_RS64, /* PRO-64 */ - RIG_MODEL_RS2005, /* w/ OptoElectronics OS456 Board */ - RIG_MODEL_RS2006, /* w/ OptoElectronics OS456 Board */ - RIG_MODEL_RS2035, /* w/ OptoElectronics OS435 Board */ - RIG_MODEL_RS2042, /* w/ OptoElectronics OS435 Board */ - RIG_MODEL_RS2041, /* PRO-2041 */ - RIG_MODEL_RS2052, /* PRO-2052 */ +#define RIG_RADIOSHACK 7 +#define RIG_BACKEND_RADIOSHACK "radioshack" +#define RIG_MODEL_RS64 RIG_MAKE_MODEL(RIG_RADIOSHACK, 1) /* PRO-64 */ +#define RIG_MODEL_RS2005 RIG_MAKE_MODEL(RIG_RADIOSHACK, 2) /* w/ OptoElectronics OS456 Board */ +#define RIG_MODEL_RS2006 RIG_MAKE_MODEL(RIG_RADIOSHACK, 3) /* w/ OptoElectronics OS456 Board */ +#define RIG_MODEL_RS2035 RIG_MAKE_MODEL(RIG_RADIOSHACK, 4) /* w/ OptoElectronics OS435 Board */ +#define RIG_MODEL_RS2042 RIG_MAKE_MODEL(RIG_RADIOSHACK, 5) /* w/ OptoElectronics OS435 Board */ +#define RIG_MODEL_RS2041 RIG_MAKE_MODEL(RIG_RADIOSHACK, 6) /* PRO-2041 */ +#define RIG_MODEL_RS2052 RIG_MAKE_MODEL(RIG_RADIOSHACK, 7) /* PRO-2052 */ /* * Uniden */ - RIG_MODEL_BC780, /* Uniden BC780 - Trunk Tracker "Desktop Radio" */ - RIG_MODEL_BC245, - RIG_MODEL_BC895, +#define RIG_UNIDEN 8 +#define RIG_BACKEND_UNIDEN "uniden" +#define RIG_MODEL_BC780 RIG_MAKE_MODEL(RIG_UNIDEN, 1) /* Uniden BC780 - Trunk Tracker "Desktop Radio" */ +#define RIG_MODEL_BC245 RIG_MAKE_MODEL(RIG_UNIDEN, 2) +#define RIG_MODEL_BC895 RIG_MAKE_MODEL(RIG_UNIDEN, 3) /* * Drake */ - RIG_MODEL_DKR8, - RIG_MODEL_DKR8A, +#define RIG_DRAKE 9 +#define RIG_BACKEND_DRAKE "drake" +#define RIG_MODEL_DKR8 RIG_MAKE_MODEL(RIG_DRAKE, 1) +#define RIG_MODEL_DKR8A RIG_MAKE_MODEL(RIG_DRAKE, 2) /* * Lowe */ - RIG_MODEL_HF150, - RIG_MODEL_HF225, - RIG_MODEL_HF250, +#define RIG_LOWE 10 +#define RIG_BACKEND_LOWE "lowe" +#define RIG_MODEL_HF150 RIG_MAKE_MODEL(RIG_LOWE, 1) +#define RIG_MODEL_HF225 RIG_MAKE_MODEL(RIG_LOWE, 2) +#define RIG_MODEL_HF250 RIG_MAKE_MODEL(RIG_LOWE, 3) /* * Racal */ - RIG_MODEL_RA3790, - RIG_MODEL_RA3720, +#define RIG_RACAL 11 +#define RIG_BACKEND_RACAL "racal" +#define RIG_MODEL_RA3790 RIG_MAKE_MODEL(RIG_RACAL, 1) +#define RIG_MODEL_RA3720 RIG_MAKE_MODEL(RIG_RACAL, 2) /* * Watkins-Johnson */ - RIG_MODEL_HF1000, - RIG_MODEL_HF1000A, - RIG_MODEL_WJ8711, +#define RIG_WJ 12 +#define RIG_BACKEND_WJ "wj" +#define RIG_MODEL_HF1000 RIG_MAKE_MODEL(RIG_WJ, 1) +#define RIG_MODEL_HF1000A RIG_MAKE_MODEL(RIG_WJ, 2) +#define RIG_MODEL_WJ8711 RIG_MAKE_MODEL(RIG_WJ, 3) /* * Rohde & Schwarz */ - RIG_MODEL_ESM500, - RIG_MODEL_EK890, - RIG_MODEL_EK891, - RIG_MODEL_EK895, - RIG_MODEL_EK070, +#define RIG_EK 13 +#define RIG_BACKEND_EK "ek" +#define RIG_MODEL_ESM500 RIG_MAKE_MODEL(RIG_EK, 1) +#define RIG_MODEL_EK890 RIG_MAKE_MODEL(RIG_EK, 2) +#define RIG_MODEL_EK891 RIG_MAKE_MODEL(RIG_EK, 3) +#define RIG_MODEL_EK895 RIG_MAKE_MODEL(RIG_EK, 4) +#define RIG_MODEL_EK070 RIG_MAKE_MODEL(RIG_EK, 5) /* * Skanti */ - RIG_MODEL_TRP7000, - RIG_MODEL_TRP8000, - RIG_MODEL_TRP9000, +#define RIG_SKANTI 14 +#define RIG_BACKEND_SKANTI "skanti" +#define RIG_MODEL_TRP7000 RIG_MAKE_MODEL(RIG_SKANTI, 1) +#define RIG_MODEL_TRP8000 RIG_MAKE_MODEL(RIG_SKANTI, 2) +#define RIG_MODEL_TRP9000 RIG_MAKE_MODEL(RIG_SKANTI, 3) /* * WiNRADiO/LinRADiO, by Rosetta? */ - RIG_MODEL_WR1000, /* WR-1000i */ - RIG_MODEL_WR1500, /* WR-1500i and WR-1500e */ - RIG_MODEL_WR1550, /* WR-1550e */ - RIG_MODEL_WR3100, - RIG_MODEL_WR3150, /* WR-3150i */ - RIG_MODEL_WR3500, - RIG_MODEL_WR3700, +#define RIG_WINRADIO 15 +#define RIG_BACKEND_WINRADIO "winradio" +#define RIG_MODEL_WR1000 RIG_MAKE_MODEL(RIG_WINRADIO, 1) +#define RIG_MODEL_WR1500 RIG_MAKE_MODEL(RIG_WINRADIO, 2) +#define RIG_MODEL_WR1550 RIG_MAKE_MODEL(RIG_WINRADIO, 3) +#define RIG_MODEL_WR3100 RIG_MAKE_MODEL(RIG_WINRADIO, 4) +#define RIG_MODEL_WR3150 RIG_MAKE_MODEL(RIG_WINRADIO, 5) +#define RIG_MODEL_WR3500 RIG_MAKE_MODEL(RIG_WINRADIO, 6) +#define RIG_MODEL_WR3700 RIG_MAKE_MODEL(RIG_WINRADIO, 7) /* * Ten Tec */ - RIG_MODEL_TT550, /* Pegasus */ - RIG_MODEL_TT538, /* Jupiter */ - RIG_MODEL_RX320, - RIG_MODEL_RX340, +#define RIG_TENTEC 16 +#define RIG_BACKEND_TENTEC "tentec" +#define RIG_MODEL_TT550 RIG_MAKE_MODEL(RIG_MODEL_TENTEC, 1) /* Pegasus */ +#define RIG_MODEL_TT538 RIG_MAKE_MODEL(RIG_MODEL_TENTEC, 2) /* Jupiter */ +#define RIG_MODEL_RX320 RIG_MAKE_MODEL(RIG_MODEL_TENTEC, 3) +#define RIG_MODEL_RX340 RIG_MAKE_MODEL(RIG_MODEL_TENTEC, 4) - RIG_MODEL_KWZ30, /* KNEISNER +DOERING */ - RIG_MODEL_E1800, /* DASA-Telefunken */ - RIG_MODEL_EKD500, /* RFT */ - RIG_MODEL_DX77, /* Alinco */ +#define RIG_ALINCO 17 +#define RIG_BACKEND_ALINCO "alinco" +#define RIG_MODEL_DX77 RIG_MAKE_MODEL(RIG_ALINCO, 1) /* Alinco */ + /* + * TODO: + RIG_MODEL_KWZ30, KNEISNER +DOERING + RIG_MODEL_E1800, DASA-Telefunken + RIG_EKD500, RFT + */ - /* etc. */ -}; +typedef int rig_model_t; -typedef enum rig_model_e rig_model_t; +#define RIG_BACKEND_LIST { \ + { RIG_DUMMY, RIG_BACKEND_DUMMY }, \ + { RIG_YAESU, RIG_BACKEND_YAESU }, \ + { RIG_KENWOOD, RIG_BACKEND_KENWOOD }, \ + { RIG_ICOM, RIG_BACKEND_ICOM }, \ + { RIG_PCR, RIG_BACKEND_PCR }, \ + { RIG_AOR, RIG_BACKEND_AOR }, \ + { RIG_JRC, RIG_BACKEND_JRC }, \ + { RIG_RADIOSHACK, RIG_BACKEND_RADIOSHACK }, \ + { RIG_UNIDEN, RIG_BACKEND_UNIDEN }, \ + { RIG_DRAKE, RIG_BACKEND_DRAKE }, \ + { RIG_LOWE, RIG_BACKEND_LOWE }, \ + { RIG_RACAL, RIG_BACKEND_RACAL }, \ + { RIG_WJ, RIG_BACKEND_WJ }, \ + { RIG_EK, RIG_BACKEND_EK }, \ + { RIG_SKANTI, RIG_BACKEND_SKANTI }, \ + { RIG_WINRADIO, RIG_BACKEND_WINRADIO }, \ + { RIG_TENTEC, RIG_BACKEND_TENTEC }, \ + { RIG_ALINCO, RIG_BACKEND_ALINCO }, \ + { 0, NULL }, /* end */ \ +} +/* + * struct rig_backend_list { + * rig_model_t model; + * const char *backend; + * } rig_backend_list[] = RIG_LIST; + * + */ #endif /* _RIGLIST_H */ diff --git a/src/register.c b/src/register.c index 80fdfea89..e65d86e26 100644 --- a/src/register.c +++ b/src/register.c @@ -2,7 +2,7 @@ register.c - Copyright (C) 2000 Stephane Fillod and Frank Singleton Provides registering for dynamically loadable backends. - $Id: register.c,v 1.4 2001-06-02 17:54:43 f4cfe Exp $ + $Id: register.c,v 1.5 2001-06-04 21:17:52 f4cfe Exp $ Hamlib is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,7 +41,26 @@ # define PATH_MAX 1024 #endif +#define RIG_BACKEND_MAX 32 +/* + * RIG_BACKEND_LIST is defined in riglist.h, please keep it up to data, + * ie. each time you give birth to a new backend + * Also, it should be possible to register "external" backend, + * that is backend that were not known by Hamlib at compile time. + * Maybe, riglist.h should reserve some numbers for them? --SF + */ +static struct { + int be_num; + const char *be_name; + rig_model_t (*be_probe)(port_t *); +} rig_backend_list[RIG_BACKEND_MAX] = RIG_BACKEND_LIST; + + +/* + * This struct to keep track of known rig models. + * It is chained, and used in a hash table, see below. + */ struct rig_list { const struct rig_caps *caps; lt_dlhandle handle; /* handle returned by lt_dlopen() */ @@ -57,6 +76,9 @@ struct rig_list { */ static struct rig_list *rig_hash_table[RIGLSTHASHSZ] = { NULL, }; + +static int rig_lookup_backend(rig_model_t rig_model); + /* * Basically, this is a hash insert function that doesn't check for dup! */ @@ -70,7 +92,7 @@ int rig_register(const struct rig_caps *caps) rig_debug(RIG_DEBUG_VERBOSE, "rig_register (%d)\n",caps->rig_model); -#ifdef WANT_DUP_CHECK +#ifndef DONT_WANT_DUP_CHECK if (rig_get_caps(caps->rig_model)!=NULL) return -RIG_EINVAL; #endif @@ -104,6 +126,59 @@ const struct rig_caps *rig_get_caps(rig_model_t rig_model) return NULL; /* sorry, caps not registered! */ } +/* + * lookup for backend index in rig_backend_list table, + * according to BACKEND_NUM + * return -1 if not found. + */ +static int rig_lookup_backend(rig_model_t rig_model) +{ + int i; + + for (i=0; irig_probe != NULL) { - rig = rig_init(rig_base[i]->rig_model); - strncpy(rig->state.rig_path, port_path, FILPATHLEN); - rig_open(rig); - if (rig && rig_base[i]->rig_probe(rig) == 0) { - return rig; - } else { - rig_close(rig); - rig_cleanup(rig); - } - } - } - return NULL; + return rig_probe_all(p); } -#endif /** * rig_set_level - set a radio level setting diff --git a/tests/dumpcaps.c b/tests/dumpcaps.c index 7eecb04c1..7074ce3aa 100644 --- a/tests/dumpcaps.c +++ b/tests/dumpcaps.c @@ -3,7 +3,7 @@ * This programs dumps the capabilities of a backend rig. * * - * $Id: dumpcaps.c,v 1.25 2001-06-03 19:54:05 f4cfe Exp $ + * $Id: dumpcaps.c,v 1.26 2001-06-04 21:17:52 f4cfe Exp $ * * * This program is free software; you can redistribute it and/or @@ -42,12 +42,14 @@ int main (int argc, char *argv[]) int status,i; char freqbuf[20]; int backend_warnings=0; + int rig_model; if (argc != 2) { fprintf(stderr,"%s \n",argv[0]); exit(1); } +#if 0 status = rig_load_backend("icom"); status |= rig_load_backend("ft747"); status |= rig_load_backend("ft847"); @@ -61,10 +63,15 @@ int main (int argc, char *argv[]) printf("rig_load_backend: error = %s \n", rigerror(status)); exit(3); } +#endif - caps = rig_get_caps(atoi(argv[1])); + rig_model = atoi(argv[1]); + + rig_check_backend(rig_model); + + caps = rig_get_caps(rig_model); if (!caps) { - fprintf(stderr,"Unknown rig num: %d\n",atoi(argv[1])); + fprintf(stderr,"Unknown rig num: %d\n", rig_model); fprintf(stderr,"Please check riglist.h\n"); exit(2); } diff --git a/tests/dumpmem.c b/tests/dumpmem.c index 6ab9b86b3..4540564d1 100644 --- a/tests/dumpmem.c +++ b/tests/dumpmem.c @@ -3,7 +3,7 @@ * This programs dumps the mmeory contents of a rig. * * - * $Id: dumpmem.c,v 1.2 2001-06-04 17:01:21 f4cfe Exp $ + * $Id: dumpmem.c,v 1.3 2001-06-04 21:17:53 f4cfe Exp $ * * * This program is free software; you can redistribute it and/or @@ -45,6 +45,7 @@ int main (int argc, char *argv[]) exit(1); } +#if 0 status = rig_load_backend("icom"); status |= rig_load_backend("ft747"); status |= rig_load_backend("ft847"); @@ -58,6 +59,7 @@ int main (int argc, char *argv[]) printf("rig_load_backend: error = %s \n", rigerror(status)); exit(3); } +#endif my_rig = rig_init(atoi(argv[1])); diff --git a/tests/listrigs.c b/tests/listrigs.c index 1525aac6f..6c6901e94 100644 --- a/tests/listrigs.c +++ b/tests/listrigs.c @@ -3,7 +3,7 @@ * This programs list all the available the rig capabilities. * * - * $Id: listrigs.c,v 1.8 2001-06-02 18:11:21 f4cfe Exp $ + * $Id: listrigs.c,v 1.9 2001-06-04 21:17:53 f4cfe Exp $ * * * This program is free software; you can redistribute it and/or @@ -97,19 +97,15 @@ int main (int argc, char *argv[]) { int status; +#if 0 status = rig_load_backend("icom"); if (status != RIG_OK ) { printf("rig_load_backend: error = %s \n", rigerror(status)); exit(3); } - status = rig_load_backend("ft747"); + status = rig_load_backend("yaesu"); if (status != RIG_OK ) { - printf("rig_load_backend: ft747 error = %s \n", rigerror(status)); - exit(3); - } - status = rig_load_backend("ft847"); - if (status != RIG_OK ) { - printf("rig_load_backend: ft847 error = %s \n", rigerror(status)); + printf("rig_load_backend: yaesu error = %s \n", rigerror(status)); exit(3); } status = rig_load_backend("kenwood"); @@ -127,8 +123,16 @@ int main (int argc, char *argv[]) printf("rig_load_backend: pcr error = %s \n", rigerror(status)); exit(3); } + status = rig_load_backend("alinco"); + if (status != RIG_OK ) { + printf("rig_load_backend: alinco error = %s \n", rigerror(status)); + exit(3); + } rig_load_backend("winradio"); /* may not be compiled .. */ rig_load_backend("dummy"); +#endif + + rig_load_all_backends(); printf("Rig#\tMfg\tModel \tVers.\tStatus\tType\n"); status = rig_list_foreach(print_caps_sum,NULL); diff --git a/tests/rigctl.c b/tests/rigctl.c index 8fe99e449..9e7bba436 100644 --- a/tests/rigctl.c +++ b/tests/rigctl.c @@ -7,7 +7,7 @@ * TODO: be more generic and add command line option to run * in non-interactive mode * - * $Id: rigctl.c,v 1.14 2001-06-04 17:01:21 f4cfe Exp $ + * $Id: rigctl.c,v 1.15 2001-06-04 21:17:53 f4cfe Exp $ * * * This program is free software; you can redistribute it and/or @@ -174,6 +174,7 @@ int main (int argc, char *argv[]) * allocate memory, setup & open port */ +#if 0 retcode = rig_load_backend("icom"); retcode |= rig_load_backend("ft747"); retcode |= rig_load_backend("ft847"); @@ -187,6 +188,7 @@ int main (int argc, char *argv[]) printf("rig_load_backend: error = %s \n", rigerror(retcode)); exit(3); } +#endif opt_ptr = opt_string; for (i=0; i"); printf("ModelMfgVers.Status" diff --git a/tests/testcaps.c b/tests/testcaps.c index 363c8f0b5..394451a95 100644 --- a/tests/testcaps.c +++ b/tests/testcaps.c @@ -4,7 +4,7 @@ * like the passband info.. * * - * $Id: testcaps.c,v 1.1 2001-04-24 20:04:47 f4cfe Exp $ + * $Id: testcaps.c,v 1.2 2001-06-04 21:17:53 f4cfe Exp $ * * * This program is free software; you can redistribute it and/or @@ -46,6 +46,7 @@ int main (int argc, char *argv[]) exit(1); } +#if 0 status = rig_load_backend("icom"); status |= rig_load_backend("ft747"); status |= rig_load_backend("ft847"); @@ -59,6 +60,7 @@ int main (int argc, char *argv[]) printf("rig_load_backend: error = %s \n", rigerror(status)); exit(3); } +#endif pbrig = rig_init(atoi(argv[1])); if (!pbrig) { diff --git a/tests/testrig.c b/tests/testrig.c index ca517d87e..dc15d4b0f 100644 --- a/tests/testrig.c +++ b/tests/testrig.c @@ -27,6 +27,7 @@ int main (int argc, char *argv[]) * allocate memory, setup & open port */ +#if 0 retcode = rig_load_backend("icom"); retcode = rig_load_backend("ft747"); @@ -34,6 +35,7 @@ int main (int argc, char *argv[]) printf("rig_load_backend: error = %s \n", rigerror(retcode)); exit(3); } +#endif my_rig = rig_init(atoi(argv[1])); diff --git a/tests/testtrn.c b/tests/testtrn.c index fbe43457b..da74161f0 100644 --- a/tests/testtrn.c +++ b/tests/testtrn.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #define SERIAL_PORT "/dev/ttyS0" @@ -16,12 +17,16 @@ int myfreq_event(RIG *rig, vfo_t vfo, freq_t freq) } -int main () +int main (int argc, char *argv[]) { RIG *my_rig; /* handle to rig (nstance) */ int retcode; /* generic return code from functions */ int i; + if (argc != 2) { + fprintf(stderr,"%s \n", argv[0]); + exit(1); + } printf("testrig:hello, I am your main() !\n"); @@ -29,15 +34,20 @@ int main () * allocate memory, setup & open port */ +#if 0 retcode = rig_load_backend("icom"); if (retcode != RIG_OK ) { printf("rig_load_backend: error = %s \n", rigerror(retcode)); exit(3); } +#endif - my_rig = rig_init(RIG_MODEL_IC706MKIIG); - if (!my_rig) + my_rig = rig_init(atoi(argv[1])); + if (!my_rig) { + fprintf(stderr,"Unknown rig num: %d\n",atoi(argv[1])); + fprintf(stderr,"Please check riglist.h\n"); exit(1); /* whoops! something went wrong (mem alloc?) */ + } strncpy(my_rig->state.rigport.path, SERIAL_PORT, FILPATHLEN);