From 61428b3e97d54f91074e104b3ee54b0a72a51fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Wed, 6 Mar 2002 21:10:08 +0000 Subject: [PATCH] Initial release git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1002 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- icom/optoscan.c | 142 ++++++++++++++++++++++++++++++++++++++++++++ icom/os535.c | 154 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 296 insertions(+) create mode 100644 icom/optoscan.c create mode 100644 icom/os535.c diff --git a/icom/optoscan.c b/icom/optoscan.c new file mode 100644 index 000000000..6778e1df1 --- /dev/null +++ b/icom/optoscan.c @@ -0,0 +1,142 @@ +/* + * Hamlib CI-V backend - OptoScan extensions + * Copyright (c) 2000-2002 by Stephane Fillod + * + * $Id: optoscan.c,v 1.1 2002-03-06 21:10:08 fillods Exp $ + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library 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 Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#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 +#include +#include +#include + +#include "icom.h" +#include "icom_defs.h" +#include "frame.h" + + +/* + * optoscan_open + * Assumes rig!=NULL, rig->state.priv!=NULL + */ +int optoscan_open(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 REMOTE control */ + retval = icom_transaction (rig, C_CTL_MISC, S_OPTO_REMOTE, + NULL, 0, ackbuf, &ack_len); + if (retval != RIG_OK) + 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); + 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; + } + + return RIG_OK; +} + +/* + * optoscan_get_info + * Assumes rig!=NULL, rig->state.priv!=NULL + */ +const char* optoscan_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; + + /* 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,"icom_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; +} + + diff --git a/icom/os535.c b/icom/os535.c new file mode 100644 index 000000000..8c5e7589b --- /dev/null +++ b/icom/os535.c @@ -0,0 +1,154 @@ +/* + * Hamlib CI-V backend - description of the OptoScan535 + * Copyright (c) 2000-2002 by Stephane Fillod + * + * $Id: os535.c,v 1.1 2002-03-06 21:10:08 fillods Exp $ + * + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library 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 Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include "icom.h" +#include "tones.h" + + +#define OS535_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM) + +#define OS535_VFO_ALL (RIG_VFO_A) + +#define OS535_LEVELS (RIG_LEVEL_STRENGTH) + +#define OS535_STR_CAL { 2, { \ + { 137, -60 }, \ + { 20, 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 */ + NULL, + OS535_STR_CAL +}; + +const struct rig_caps os535_caps = { +rig_model: RIG_MODEL_OS535, +model_name:"OptoScan535", +mfg_name: "Optoelectronics", +version: "0.2", +copyright: "LGPL", +status: RIG_STATUS_UNTESTED, +rig_type: RIG_TYPE_SCANNER, +ptt_type: RIG_PTT_NONE, +dcd_type: RIG_DCD_NONE, +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: 200, +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: 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: RIG_SCAN_NONE, +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(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_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)}, + 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, + }, + +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_level: icom_get_level, +get_dcd: icom_get_dcd, + +decode_event: icom_decode_event, + +get_info: optoscan_get_info, + +}; +