diff --git a/icom/ic706.c b/icom/ic706.c new file mode 100644 index 000000000..f0ae5ba13 --- /dev/null +++ b/icom/ic706.c @@ -0,0 +1,162 @@ +/* + * hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) + * + * ic706.c - Copyright (C) 2000 Stephane Fillod + * This shared library provides an API for communicating + * via serial interface to an IC-706 using the "CI-V" interface. + * + * + * $Id: ic706.c,v 1.1 2000-09-16 01:46:13 f4cfe Exp $ + * + * + * + * This program 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 + * of the License, 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 program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#include +#include /* Standard input/output definitions */ +#include /* String function definitions */ +#include /* UNIX standard function definitions */ +#include /* File control definitions */ +#include /* Error number definitions */ +#include /* POSIX terminal control definitions */ +#include + +#include +#include +#include "icom.h" + +static int ic706_init(RIG *rig); + +#define IC706_ALL_RX_MODES (RIG_MODE_AM| RIG_MODE_CW| RIG_MODE_USB| RIG_MODE_LSB| RIG_MODE_RTTY| RIG_MODE_FM| RIG_MODE_WFM| RIG_MODE_NFM| RIG_MODE_NAM| RIG_MODE_CWR) + +/* 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| RIG_MODE_NFM| RIG_MODE_NAM| RIG_MODE_CWR) +#define IC706_AM_TX_MODES (RIG_MODE_AM| RIG_MODE_NAM) + +/* + * ic706 rigs capabilities. + * Notice that some rigs share the same functions. + * Also this struct is READONLY! + */ +const struct rig_caps ic706_caps = { + RIG_MODEL_IC706, "IC-706", "Icom", "0.1", RIG_STATUS_ALPHA, + RIG_TYPE_MOBILE, 1200, 57600, 8, 1, RIG_PARITY_NONE, + RIG_HANDSHAKE_NONE, 2000, 3, 0, + { {30000,199999999,IC706_ALL_RX_MODES,-1,-1}, {0,0,0,0,0}, }, /* rx range */ + { {1800000,1999999,IC706_OTHER_TX_MODES,5000,100000}, /* 100W class */ + {1800000,1999999,IC706_AM_TX_MODES,2000,40000}, /* 40W class */ + {3500000,3999999,IC706_OTHER_TX_MODES,5000,100000}, + {3500000,3999999,IC706_AM_TX_MODES,2000,40000}, + {7000000,7300000,IC706_OTHER_TX_MODES,5000,100000}, + {7000000,7300000,IC706_AM_TX_MODES,2000,40000}, + {10000000,10150000,IC706_OTHER_TX_MODES,5000,100000}, + {10000000,10150000,IC706_AM_TX_MODES,2000,40000}, + {14000000,14350000,IC706_OTHER_TX_MODES,5000,100000}, + {14000000,14350000,IC706_AM_TX_MODES,2000,40000}, + {18068000,18168000,IC706_OTHER_TX_MODES,5000,100000}, + {18068000,18168000,IC706_AM_TX_MODES,2000,40000}, + {21000000,21450000,IC706_OTHER_TX_MODES,5000,100000}, + {21000000,21450000,IC706_AM_TX_MODES,2000,40000}, + {24890000,24990000,IC706_OTHER_TX_MODES,5000,100000}, + {24890000,24990000,IC706_AM_TX_MODES,2000,40000}, + {28000000,29700000,IC706_OTHER_TX_MODES,5000,100000}, + {28000000,29700000,IC706_AM_TX_MODES,2000,40000}, + {50000000,54000000,IC706_OTHER_TX_MODES,5000,100000}, + {50000000,54000000,IC706_AM_TX_MODES,2000,40000}, + {144000000,148000000,IC706_OTHER_TX_MODES,5000,20000}, /* not sure.. */ + {144000000,148000000,IC706_AM_TX_MODES,2000,8000}, /* anyone? */ + {0,0,0,0,0} }, + ic706_init, icom_cleanup, NULL, NULL, NULL /* probe not supported yet */, + icom_set_freq_main_vfo_hz +}; + +const struct rig_caps ic706mkiig_caps = { + RIG_MODEL_IC706MKIIG, "IC-706MKIIG", "Icom", "0.1", RIG_STATUS_ALPHA, + RIG_TYPE_MOBILE, 1200, 57600, 8, 1, RIG_PARITY_NONE, + RIG_HANDSHAKE_NONE, 2000, 3, 0, + { {30000,199999999,IC706_ALL_RX_MODES,-1,-1}, /* this trx also has UHF */ + {400000000,470000000,IC706_ALL_RX_MODES,-1,-1}, {0,0,0,0,0}, }, + { {1800000,1999999,IC706_OTHER_TX_MODES,5000,100000}, /* 100W class */ + {1800000,1999999,IC706_AM_TX_MODES,2000,40000}, /* 40W class */ + {3500000,3999999,IC706_OTHER_TX_MODES,5000,100000}, + {3500000,3999999,IC706_AM_TX_MODES,2000,40000}, + {7000000,7300000,IC706_OTHER_TX_MODES,5000,100000}, + {7000000,7300000,IC706_AM_TX_MODES,2000,40000}, + {10000000,10150000,IC706_OTHER_TX_MODES,5000,100000}, + {10000000,10150000,IC706_AM_TX_MODES,2000,40000}, + {14000000,14350000,IC706_OTHER_TX_MODES,5000,100000}, + {14000000,14350000,IC706_AM_TX_MODES,2000,40000}, + {18068000,18168000,IC706_OTHER_TX_MODES,5000,100000}, + {18068000,18168000,IC706_AM_TX_MODES,2000,40000}, + {21000000,21450000,IC706_OTHER_TX_MODES,5000,100000}, + {21000000,21450000,IC706_AM_TX_MODES,2000,40000}, + {24890000,24990000,IC706_OTHER_TX_MODES,5000,100000}, + {24890000,24990000,IC706_AM_TX_MODES,2000,40000}, + {28000000,29700000,IC706_OTHER_TX_MODES,5000,100000}, + {28000000,29700000,IC706_AM_TX_MODES,2000,40000}, + {50000000,54000000,IC706_OTHER_TX_MODES,5000,100000}, + {50000000,54000000,IC706_AM_TX_MODES,2000,40000}, + {144000000,148000000,IC706_OTHER_TX_MODES,5000,50000}, /* 50W */ + {144000000,148000000,IC706_AM_TX_MODES,2000,20000}, /* AM VHF is 20W */ + {430000000,450000000,IC706_OTHER_TX_MODES,5000,20000}, + {430000000,450000000,IC706_AM_TX_MODES,2000,8000}, + {0,0,0,0,0}, }, + ic706_init, icom_cleanup, NULL, NULL, NULL /* probe not supported yet */, + icom_set_freq_main_vfo_hz +}; + + +/* this struct in an array could lead + * to an Icom generic ic_init function + */ +static const struct icom_priv_data ic706_priv = { 0x58, 0}; + +/* + * Function definitions below + */ + +/* + * setup *priv + * serial port is already open (rig->state->fd) + */ +static int ic706_init(RIG *rig) +{ + struct icom_priv_data *p; + + if (!rig) + return -1; + + p = (struct icom_priv_data*)malloc(sizeof(struct icom_priv_data)); + if (!p) { + /* whoops! memory shortage! */ + return -2; + } + /* TODO: CI-V address should be customizable */ + + /* init the priv_data from static struct + * + override with rig-specific preferences + */ + *p = ic706_priv; + + rig->state.priv = (void*)p; + + return 0; +} + +