From c0d2cad491128447a1c2aeda9e031e6c06e83594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Fri, 2 Mar 2001 18:30:45 +0000 Subject: [PATCH] * Initial release git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@423 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- icom/icall.c | 179 +++++++++++++++++++++ pcr/Makefile.am | 6 + pcr/Makefile.in | 399 ++++++++++++++++++++++++++++++++++++++++++++++ pcr/pcr.c | 411 ++++++++++++++++++++++++++++++++++++++++++++++++ pcr/pcr.h | 56 +++++++ pcr/pcr1000.c | 114 ++++++++++++++ 6 files changed, 1165 insertions(+) create mode 100644 icom/icall.c create mode 100644 pcr/Makefile.am create mode 100644 pcr/Makefile.in create mode 100644 pcr/pcr.c create mode 100644 pcr/pcr.h create mode 100644 pcr/pcr1000.c diff --git a/icom/icall.c b/icom/icall.c new file mode 100644 index 000000000..f2a699508 --- /dev/null +++ b/icom/icall.c @@ -0,0 +1,179 @@ +/* + * hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) + * + * icall.c - Copyright (C) 2000 Stephane Fillod + * This shared library provides an API for communicating + * via serial interface to a virtual do-it-all Icom (for debug purpose) + * using the "CI-V" interface. + * + * + * $Id: icall.c,v 1.1 2001-03-02 18:30:45 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" + + +#define ICALL_ALL_RX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM) +#define ICALL_1MHZ_TS_MODES (RIG_MODE_AM|RIG_MODE_FM) +#define ICALL_1HZ_TS_MODES (RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY) + +/* tx doesn't have WFM. + * 100W in all modes but AM (40W) + */ +#define ICALL_OTHER_TX_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_FM) +#define ICALL_AM_TX_MODES (RIG_MODE_AM) + +#define ICALL_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN) + +#define ICALL_LEVEL_ALL (RIG_LEVEL_PREAMP|RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQLSTAT|RIG_LEVEL_STRENGTH) + +/* + */ +const struct rig_caps icall_caps = { + RIG_MODEL_ICALL, "IC-DoItAll", "Icom", "0.2", "GPL", + RIG_STATUS_ALPHA, RIG_TYPE_TRANSCEIVER, + RIG_PTT_RIG, RIG_DCD_RIG, RIG_PORT_SERIAL, + 300, 19200, 8, 1, RIG_PARITY_NONE, RIG_HANDSHAKE_NONE, + 0, 0, 200, 3, + ICALL_FUNC_ALL, ICALL_FUNC_ALL, + ICALL_LEVEL_ALL, RIG_LEVEL_SET(ICALL_LEVEL_ALL), + RIG_PARM_NONE, RIG_PARM_NONE, /* FIXME: parms */ + icom_ctcss_list, NULL, + { 10, RIG_DBLST_END, }, /* preamp */ + { 20, RIG_DBLST_END, }, + NULL, + Hz(9999), kHz(2.1), /* RIT, IF-SHIFT */ + 0, /* FIXME: VFO list */ + 0, RIG_TRN_ON, + 105, 0, 0, + + /* memory channel list */ + { { 01, 99, RIG_MTYPE_MEM, 0 }, + { 100, 105, RIG_MTYPE_EDGE, 0 }, /* two by two */ + { 106, 107, RIG_MTYPE_CALL, 0 }, + RIG_CHAN_END, + }, + + { RIG_FRNG_END, }, /* FIXME: enter region 1 setting */ + { RIG_FRNG_END, }, + { {kHz(30),MHz(200)-1,ICALL_ALL_RX_MODES,-1,-1}, /* this trx also has UHF */ + {MHz(400),MHz(470),ICALL_ALL_RX_MODES,-1,-1}, + RIG_FRNG_END, }, + { {kHz(1800),MHz(2)-1,ICALL_OTHER_TX_MODES,5000,100000}, /* 100W class */ + {kHz(1800),MHz(2)-1,ICALL_AM_TX_MODES,2000,40000}, /* 40W class */ + {kHz(3500),MHz(4)-1,ICALL_OTHER_TX_MODES,5000,100000}, + {kHz(3500),MHz(4)-1,ICALL_AM_TX_MODES,2000,40000}, + {MHz(7),kHz(7300),ICALL_OTHER_TX_MODES,5000,100000}, + {MHz(7),kHz(7300),ICALL_AM_TX_MODES,2000,40000}, + {kHz(10100),kHz(10150),ICALL_OTHER_TX_MODES,5000,100000}, + {kHz(10100),kHz(10150),ICALL_AM_TX_MODES,2000,40000}, + {MHz(14),kHz(14350),ICALL_OTHER_TX_MODES,5000,100000}, + {MHz(14),kHz(14350),ICALL_AM_TX_MODES,2000,40000}, + {kHz(18068),kHz(18168),ICALL_OTHER_TX_MODES,5000,100000}, + {kHz(18068),kHz(18168),ICALL_AM_TX_MODES,2000,40000}, + {MHz(21),kHz(21450),ICALL_OTHER_TX_MODES,5000,100000}, + {MHz(21),kHz(21450),ICALL_AM_TX_MODES,2000,40000}, + {kHz(24890),kHz(24990),ICALL_OTHER_TX_MODES,5000,100000}, + {kHz(24890),kHz(24990),ICALL_AM_TX_MODES,2000,40000}, + {MHz(28),kHz(29700),ICALL_OTHER_TX_MODES,5000,100000}, + {MHz(28),kHz(29700),ICALL_AM_TX_MODES,2000,40000}, + {MHz(50),MHz(54),ICALL_OTHER_TX_MODES,5000,100000}, + {MHz(50),MHz(54),ICALL_AM_TX_MODES,2000,40000}, + {MHz(144),MHz(148),ICALL_OTHER_TX_MODES,5000,50000}, /* 50W */ + {MHz(144),MHz(148),ICALL_AM_TX_MODES,2000,20000}, /* AM VHF is 20W */ + {MHz(430),MHz(450),ICALL_OTHER_TX_MODES,5000,20000}, + {MHz(430),MHz(450),ICALL_AM_TX_MODES,2000,8000}, + RIG_FRNG_END, }, + {{ICALL_1HZ_TS_MODES,1}, + {ICALL_ALL_RX_MODES,10}, + {ICALL_ALL_RX_MODES,100}, + {ICALL_ALL_RX_MODES,kHz(1)}, + {ICALL_ALL_RX_MODES,kHz(5)}, + {ICALL_ALL_RX_MODES,kHz(9)}, + {ICALL_ALL_RX_MODES,kHz(10)}, + {ICALL_ALL_RX_MODES,12500}, + {ICALL_ALL_RX_MODES,kHz(20)}, + {ICALL_ALL_RX_MODES,kHz(25)}, + {ICALL_ALL_RX_MODES,kHz(100)}, + {ICALL_1MHZ_TS_MODES,MHz(1)}, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + { + {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, + }, + NULL, /* priv */ + icom_init, icom_cleanup, NULL, NULL, NULL /* probe not supported yet */, + icom_set_freq, icom_get_freq, icom_set_mode, icom_get_mode, icom_set_vfo, + NULL, + /* + * FIXME: + * the use of the following GNU extension (field: value) + * is bad manner in portable code but admit it, quite handy + * when testing stuff. --SF + */ +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_channel: icom_set_channel, +get_channel: icom_get_channel, +set_mem: icom_set_mem, +mv_ctl: icom_mv_ctl, +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_split_freq: icom_set_split_freq, +get_split_freq: icom_get_split_freq, +set_split: icom_set_split, +get_split: icom_get_split, +set_ctcss: icom_set_ctcss, +get_ctcss: icom_get_ctcss, +set_ctcss_sql: icom_set_ctcss_sql, +get_ctcss_sql: icom_get_ctcss_sql, +}; + + +/* + * Function definitions below + */ diff --git a/pcr/Makefile.am b/pcr/Makefile.am new file mode 100644 index 000000000..79d6325a3 --- /dev/null +++ b/pcr/Makefile.am @@ -0,0 +1,6 @@ +lib_LTLIBRARIES = libhamlib-pcr.la +libhamlib_pcr_la_SOURCES = pcr.c pcr1000.c +libhamlib_pcr_la_LDFLAGS = -avoid-version # -module +lib_LIBRARIES = libhamlib-pcr.a +libhamlib_pcr_a_SOURCES = pcr.c pcr1000.c +noinst_HEADERS = pcr.h diff --git a/pcr/Makefile.in b/pcr/Makefile.in new file mode 100644 index 000000000..beaf16c1c --- /dev/null +++ b/pcr/Makefile.in @@ -0,0 +1,399 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CC = @CC@ +DLLTOOL = @DLLTOOL@ +DLL_PRELOAD = @DLL_PRELOAD@ +INCLUDES = @INCLUDES@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +NET = @NET@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +RANLIB = @RANLIB@ +RIGMATRIX = @RIGMATRIX@ +VERSION = @VERSION@ +V_MAJOR = @V_MAJOR@ +V_MINOR = @V_MINOR@ +WINRADIO = @WINRADIO@ +WINRADIODEPS = @WINRADIODEPS@ +WINRADIOLNK = @WINRADIOLNK@ +hamlibdocdir = @hamlibdocdir@ + +lib_LTLIBRARIES = libhamlib-pcr.la +libhamlib_pcr_la_SOURCES = pcr.c pcr1000.c +libhamlib_pcr_la_LDFLAGS = -avoid-version # -module +lib_LIBRARIES = libhamlib-pcr.a +libhamlib_pcr_a_SOURCES = pcr.c pcr1000.c +noinst_HEADERS = pcr.h +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../include/config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(lib_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I../include +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +libhamlib_pcr_a_LIBADD = +libhamlib_pcr_a_OBJECTS = pcr.o pcr1000.o +AR = ar +LTLIBRARIES = $(lib_LTLIBRARIES) + +libhamlib_pcr_la_LIBADD = +libhamlib_pcr_la_OBJECTS = pcr.lo pcr1000.lo +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/pcr.P .deps/pcr1000.P +SOURCES = $(libhamlib_pcr_a_SOURCES) $(libhamlib_pcr_la_SOURCES) +OBJECTS = $(libhamlib_pcr_a_OBJECTS) $(libhamlib_pcr_la_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu pcr/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-libLIBRARIES: + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) + +distclean-libLIBRARIES: + +maintainer-clean-libLIBRARIES: + +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(libdir)/$$p; \ + else :; fi; \ + done + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(RANLIB) $(DESTDIR)$(libdir)/$$p"; \ + $(RANLIB) $(DESTDIR)$(libdir)/$$p; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + list='$(lib_LIBRARIES)'; for p in $$list; do \ + rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libhamlib-pcr.a: $(libhamlib_pcr_a_OBJECTS) $(libhamlib_pcr_a_DEPENDENCIES) + -rm -f libhamlib-pcr.a + $(AR) cru libhamlib-pcr.a $(libhamlib_pcr_a_OBJECTS) $(libhamlib_pcr_a_LIBADD) + $(RANLIB) libhamlib-pcr.a + +mostlyclean-libLTLIBRARIES: + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + +distclean-libLTLIBRARIES: + +maintainer-clean-libLTLIBRARIES: + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(libdir) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ + $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ + done + +libhamlib-pcr.la: $(libhamlib_pcr_la_OBJECTS) $(libhamlib_pcr_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libhamlib_pcr_la_LDFLAGS) $(libhamlib_pcr_la_OBJECTS) $(libhamlib_pcr_la_LIBADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = pcr + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu pcr/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-libLIBRARIES install-libLTLIBRARIES +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-libLIBRARIES uninstall-libLTLIBRARIES +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(libdir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-libLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-libLTLIBRARIES \ + mostlyclean-tags mostlyclean-depend mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-libLIBRARIES clean-compile clean-libtool \ + clean-libLTLIBRARIES clean-tags clean-depend \ + clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-libLIBRARIES distclean-compile \ + distclean-libtool distclean-libLTLIBRARIES \ + distclean-tags distclean-depend distclean-generic \ + clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-libLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-libLTLIBRARIES maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-libLIBRARIES distclean-libLIBRARIES \ +clean-libLIBRARIES maintainer-clean-libLIBRARIES uninstall-libLIBRARIES \ +install-libLIBRARIES mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile mostlyclean-libtool \ +distclean-libtool clean-libtool maintainer-clean-libtool \ +mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ +clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ +uninstall-libLTLIBRARIES install-libLTLIBRARIES tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/pcr/pcr.c b/pcr/pcr.c new file mode 100644 index 000000000..c02d2c1fc --- /dev/null +++ b/pcr/pcr.c @@ -0,0 +1,411 @@ +/* + * hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) + * + * pcr.c - Copyright (C) 2001 Stephane Fillod + * This shared library provides an API for communicating + * via serial interface to an Icom PCR-1xxx radio. + * + * + * $Id: pcr.c,v 1.1 2001-03-02 18:26:18 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 +#include +#include +#include "pcr.h" + + +/* + * modes in use by the "MD" command + */ +#define MD_LSB '0' +#define MD_USB '1' +#define MD_AM '2' +#define MD_CW '3' +#define MD_FM '5' +#define MD_WFM '6' + +/* define 2.8kHz, 6kHz, 15kHz, 50kHz, and 230kHz */ +#define FLT_2_8kHz '0' +#define FLT_6kHz '1' +#define FLT_15kHz '2' +#define FLT_50kHz '3' +#define FLT_230kHz '4' + +#define CRLF "\r" +#define EOM CRLF + +/* as returned by GE? */ +#define COUNTRY_JAPAN 0x08 +#define COUNTRY_USA 0x01 +#define COUNTRY_EUAUCA 0x0a +#define COUNTRY_FGA 0x0b +#define COUNTRY_DEN 0x0c + +/* as returned by GD? */ +#define OPT_UT106 1<<0 +#define OPT_UT107 1<<4 + +/* + * CTCSS sub-audible tones for PCR100 and PCR1000 + * Don't even touch a single bit! indexes will be used in the protocol! + */ +const int pcr1_ctcss_list[] = { + 670, 693, 710, 719, 744, 770, 797, 825, 854, 885, 915, + 948, 974, 1000, 1035, 1072, 1109, 1148, 1188, 1230, 1273, + 1318, 1365, 1413, 1462, 1514, 1567, 1598, 1622, 1655, 1679, + 1713, 1738, 1773, 1799, 1835, 1862, 1899, 1928, 1966, 1995, + 2035, 2065, 2107, 2181, 2257, 2291, 2336, 2418, 2503, 2541, + 0, +}; + +/* + * pcr_transaction + * We assume that rig!=NULL, rig->state!= NULL, data!=NULL, data_len!=NULL + * Otherwise, you'll get a nice seg fault. You've been warned! + * TODO: error case handling + */ +int pcr_transaction(RIG *rig, const char *cmd, int cmd_len, char *data, int *data_len) +{ + int i; + struct rig_state *rs; + + rs = &rig->state; + + write_block(rs->fd, cmd, cmd_len, rs->write_delay, rs->post_write_delay); + + /* + * buffered read are quite helpful here! + * However, an automate with a state model would be more efficient.. + */ + i = 0; + do { + fread_block(rs->stream, data+i, 1, rs->timeout); + } while (data[i++] != ';'); + + *data_len = i; + + return i; +} + +/* + * Basically, it sets up *priv + */ +int pcr_init(RIG *rig) +{ + struct pcr_priv_data *priv; + + if (!rig) + return -RIG_EINVAL; + + priv = (struct pcr_priv_data*)malloc(sizeof(struct pcr_priv_data)); + + if (!priv) { + /* whoops! memory shortage! */ + return -RIG_ENOMEM; + } + + /* + * FIXME: how can we retrieve current status? + */ + priv->last_freq = MHz(145); + priv->last_mode = MD_FM; + priv->last_filter = FLT_15kHz; + + rig->state.priv = (void*)priv; + + return RIG_OK; +} + +/* + * PCR Generic pcr_cleanup routine + * the serial port is closed by the frontend + */ +int pcr_cleanup(RIG *rig) +{ + if (!rig) + return -RIG_EINVAL; + + if (rig->state.priv) + free(rig->state.priv); + + rig->state.priv = NULL; + + return RIG_OK; +} + +/* + * pcr_set_freq + * Assumes rig!=NULL + */ +int pcr_set_freq(RIG *rig, vfo_t vfo, freq_t freq) +{ + struct pcr_priv_data *priv; + unsigned char freqbuf[32], ackbuf[16]; + int freq_len,ack_len; + + priv = (struct pcr_priv_data *)rig->state.priv; + + freq_len = sprintf(freqbuf,"K0%010Ld0%c0%c00" CRLF, freq, + priv->last_mode, priv->last_filter); + + pcr_transaction (rig, freqbuf, freq_len, ackbuf, &ack_len); + + if (ack_len != 6) { + rig_debug(RIG_DEBUG_ERR,"pcr_set_freq: ack NG, len=%d\n", + ack_len); + return -RIG_ERJCTED; + } + + priv->last_freq = freq; + + return RIG_OK; +} + +/* + * hack! pcr_get_freq + * Assumes rig!=NULL, freq!=NULL + */ +int pcr_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) +{ + struct pcr_priv_data *priv; + + priv = (struct pcr_priv_data *)rig->state.priv; + + *freq = priv->last_freq; + + return RIG_OK; +} + +/* + * pcr_set_mode + * Assumes rig!=NULL + */ +int pcr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) +{ + struct pcr_priv_data *priv; + unsigned char mdbuf[32],ackbuf[16]; + int mdbuf_len, ack_len; + int pcrmode, pcrfilter; + + priv = (struct pcr_priv_data *)rig->state.priv; + + /* + * not so sure about modes and filters + * as I write this from manual (no testing) --SF + */ + switch (mode) { + case RIG_MODE_CW: pcrmode = MD_CW; pcrfilter = FLT_2_8kHz; break; + case RIG_MODE_USB: pcrmode = MD_USB; pcrfilter = FLT_2_8kHz; break; + case RIG_MODE_LSB: pcrmode = MD_LSB; pcrfilter = FLT_2_8kHz; break; + case RIG_MODE_AM: pcrmode = MD_AM; pcrfilter = FLT_15kHz; break; + case RIG_MODE_FM: + pcrmode = MD_FM; + switch (width) { + case RIG_PASSBAND_NORMAL: pcrfilter = FLT_6kHz; break; + case RIG_PASSBAND_NARROW: pcrfilter = FLT_15kHz; break; + case RIG_PASSBAND_WIDE: + pcrmode = MD_WFM; + pcrfilter = FLT_50kHz; + break; + default: + rig_debug(RIG_DEBUG_ERR,"pcr_set_mode: unsupported " + "width %d\n", width); + return -RIG_EINVAL; + } + break; + default: + rig_debug(RIG_DEBUG_ERR,"pcr_set_mode: unsupported mode %d\n", + mode); + return -RIG_EINVAL; + } + + mdbuf_len = sprintf(mdbuf,"K0%010Ld0%c0%c00" CRLF, priv->last_freq, + pcrmode, pcrfilter); + + pcr_transaction (rig, mdbuf, mdbuf_len, ackbuf, &ack_len); + + if (ack_len != 6) { + rig_debug(RIG_DEBUG_ERR,"pcr_set_mode: ack NG, len=%d\n", + ack_len); + return -RIG_ERJCTED; + } + + priv->last_mode = pcrmode; + priv->last_filter = pcrfilter; + + return RIG_OK; +} + +/* + * hack! pcr_get_mode + * Assumes rig!=NULL, mode!=NULL + */ +int pcr_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) +{ + struct pcr_priv_data *priv; + + priv = (struct pcr_priv_data *)rig->state.priv; + + *width = RIG_PASSBAND_NORMAL; + switch (priv->last_mode) { + case MD_CW: *mode = RIG_MODE_CW; break; + case MD_USB: *mode = RIG_MODE_USB; break; + case MD_LSB: *mode = RIG_MODE_LSB; break; + case MD_AM: *mode = RIG_MODE_AM; break; + case MD_WFM: + *mode = RIG_MODE_FM; + *width = RIG_PASSBAND_WIDE; + break; + case MD_FM: + *mode = RIG_MODE_FM; + switch(priv->last_filter) { + case FLT_2_8kHz: + case FLT_6kHz: *width = RIG_PASSBAND_NARROW; break; + case FLT_15kHz: *width = RIG_PASSBAND_NORMAL; break; + case FLT_50kHz: + case FLT_230kHz: *width = RIG_PASSBAND_WIDE; break; + default: + rig_debug(RIG_DEBUG_ERR,"pcr_get_mode: unsupported " + "width %d\n", priv->last_filter); + return -RIG_EINVAL; + } + break; + default: + rig_debug(RIG_DEBUG_ERR,"pcr_get_mode: unsupported mode %d\n", + priv->last_mode); + return -RIG_EINVAL; + } + + return RIG_OK; +} + +/* + * pcr_get_info + * Assumes rig!=NULL + */ +unsigned char *pcr_get_info(RIG *rig) +{ + struct pcr_priv_data *priv; + unsigned char ackbuf[16]; + static char buf[100]; /* FIXME: reentrancy */ + int ack_len; + int proto_version = 0, frmwr_version = 0; + int options = 0, country_code = 0; + char *country; + + priv = (struct pcr_priv_data *)rig->state.priv; + + /* + * protocol version + */ + pcr_transaction (rig, "G2?" CRLF, 5, ackbuf, &ack_len); + + if (ack_len != 6) { + rig_debug(RIG_DEBUG_ERR,"pcr_get_info: ack NG, len=%d\n", + ack_len); + } + sscanf(ackbuf, "G2%d", &proto_version); + + /* + * Firmware version + */ + pcr_transaction (rig, "G4?" CRLF, 5, ackbuf, &ack_len); + + if (ack_len != 6) { + rig_debug(RIG_DEBUG_ERR,"pcr_get_info: ack NG, len=%d\n", + ack_len); + } + sscanf(ackbuf, "G4%d", &frmwr_version); + + + /* + * optional devices + */ + pcr_transaction (rig, "GD?" CRLF, 5, ackbuf, &ack_len); + + if (ack_len != 6) { + rig_debug(RIG_DEBUG_ERR,"pcr_get_info: ack NG, len=%d\n", + ack_len); + } + sscanf(ackbuf, "GD%d", &options); + + /* + * Country + */ + pcr_transaction (rig, "GE?" CRLF, 5, ackbuf, &ack_len); + + if (ack_len != 6) { + rig_debug(RIG_DEBUG_ERR,"pcr_get_info: ack NG, len=%d\n", + ack_len); + } + sscanf(ackbuf, "GE%d", &country_code); + switch (country_code) { + case COUNTRY_JAPAN: country = "Japan"; break; + case COUNTRY_USA: country = "USA"; break; + case COUNTRY_EUAUCA: country = "Europe/Australia/Canada"; break; + case COUNTRY_FGA: country = "FGA?"; break; + case COUNTRY_DEN: country = "DEN?"; break; + default: + country = "Other"; + rig_debug(RIG_DEBUG_ERR,"pcr_get_info: unknown country code %#x, " + "please retport to Hamlib maintainer\n", + country_code); + } + + + sprintf(buf, "Firmware v%d.%d, Protocol v%d.%d, " + "Optional devices:%s%s%s, Country: %s, ", + frmwr_version/10,frmwr_version%10, + proto_version/10,proto_version%10, + options&OPT_UT106 ? " DSP" : "", + options&OPT_UT107 ? " DARC" : "", + options ? "" : " none", + country); + + return buf; +} + + + +/* + * init_pcr is called by rig_backend_load + */ +int init_pcr(void *be_handle) +{ + rig_debug(RIG_DEBUG_VERBOSE, "pcr: _init called\n"); + + rig_register(&pcr1000_caps); + + return RIG_OK; +} + + diff --git a/pcr/pcr.h b/pcr/pcr.h new file mode 100644 index 000000000..794ad7efc --- /dev/null +++ b/pcr/pcr.h @@ -0,0 +1,56 @@ +/* + * hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) + * + * pcr.h - Copyright (C) 2001 Stephane Fillod + * This shared library provides an API for communicating + * via serial interface to an ICOM using the "CI-V" interface. + * + * + * $Id: pcr.h,v 1.1 2001-03-02 18:26:18 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. + * + */ + +#ifndef _PCR_H +#define _PCR_H 1 + +#include + +struct pcr_priv_data { + freq_t last_freq; + rmode_t last_mode; + int last_filter; +}; + +extern const int pcr1_ctcss_list[]; + +int pcr_init(RIG *rig); +int pcr_cleanup(RIG *rig); +int pcr_set_freq(RIG *rig, vfo_t vfo, freq_t freq); +int pcr_get_freq(RIG *rig, vfo_t vfo, freq_t *freq); +int pcr_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width); +int pcr_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width); +unsigned char *pcr_get_info(RIG *rig); + + +extern const struct rig_caps pcr1000_caps; + +extern int init_icom(void *be_handle); + + +#endif /* _PCR_H */ + diff --git a/pcr/pcr1000.c b/pcr/pcr1000.c new file mode 100644 index 000000000..35948e270 --- /dev/null +++ b/pcr/pcr1000.c @@ -0,0 +1,114 @@ +/* + * hamlib - (C) Frank Singleton 2000 (vk3fcs@ix.netcom.com) + * + * pcr1000.c - Copyright (C) 2001 Stephane Fillod + * This shared library provides an API for communicating + * via serial interface to an Icom PCR-1000. + * + * + * $Id: pcr1000.c,v 1.1 2001-03-02 18:26:18 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 "pcr.h" + + +#define PCR1000_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_FM|RIG_MODE_WFM) + +#define PCR1000_FUNC (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_TSQL|RIG_FUNC_ANF|RIG_FUNC_NR) + +#define PCR1000_LEVEL (RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQL|RIG_LEVEL_SQLSTAT|RIG_LEVEL_AF|RIG_LEVEL_STRENGTH) + +/* + * IC PCR1000 rigs capabilities. + */ +const struct rig_caps pcr1000_caps = { + RIG_MODEL_PCR1000, "IC-PCR1000", "Icom", "0.1", "GPL", + RIG_STATUS_UNTESTED, RIG_TYPE_PCRECEIVER, + RIG_PTT_NONE, RIG_DCD_RIG, RIG_PORT_SERIAL, + 300, 38400, 8, 1, RIG_PARITY_NONE, RIG_HANDSHAKE_NONE, + 0, 0, 200, 3, + RIG_FUNC_NONE, PCR1000_FUNC, PCR1000_LEVEL, RIG_LEVEL_SET(PCR1000_LEVEL), + RIG_PARM_NONE, RIG_PARM_NONE, /* FIXME: parms */ + pcr1_ctcss_list, NULL, + { RIG_DBLST_END, }, + { 20, RIG_DBLST_END, }, /* attenuator */ + "0123456789ABCDEF", + Hz(0), kHz(1.2), /* RIT, IF-SHIFT */ + 0, /* FIXME: VFO list */ + 0, RIG_TRN_ON, + 0, 0, 0, + + { RIG_CHAN_END, }, /* no memory channel list: this is a PC receiver */ + + { RIG_FRNG_END, }, /* FIXME: enter region 1 setting */ + { RIG_FRNG_END, }, + { {kHz(100),MHz(824)-10,PCR1000_MODES,-1,-1}, + {MHz(849)+10,MHz(869)-10,PCR1000_MODES,-1,-1}, + {MHz(894)+10,GHz(1.3)-10,PCR1000_MODES,-1,-1}, + RIG_FRNG_END, }, + { RIG_FRNG_END, }, /* no TX ranges, this is a receiver */ + + { { PCR1000_MODES,Hz(1) }, + RIG_TS_END, + }, + /* mode/filter list, remember: order matters! */ + { + {RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_AM, kHz(2.8)}, + {RIG_MODE_FM|RIG_MODE_AM, kHz(6)}, + {RIG_MODE_FM|RIG_MODE_AM, kHz(15)}, + {RIG_MODE_WFM|RIG_MODE_FM|RIG_MODE_AM, kHz(50)}, + {RIG_MODE_WFM, kHz(230)}, + RIG_FLT_END, + }, + NULL, /* priv */ + + pcr_init, pcr_cleanup, NULL, NULL, NULL /* probe not supported yet */, + pcr_set_freq, pcr_get_freq, pcr_set_mode, pcr_get_mode, + NULL, + get_info: pcr_get_info, + + /* + * TODO: + * set_trn, set_powerstat, + * set_level AF,SQL,IF,AF,ATT + * set_func: AGC,NB,TSQL, VSC? + * get_level, get_dcd, dtmf, .. + * decode_event, set_ctcss, set_ctcss_sql + * and also all the associated get_ functions. + */ +}; + + +/* + * Function definitions below + */ + +