kopia lustrzana https://github.com/Hamlib/Hamlib
				
				
				
			pcr patch from Alessandro Zummo, with more reliability and new features:
* CTCSS tone squelch * selectable baud rate (300 - 38400) * ANL - Automatic Noise Limiter (commented out, until created in frontend) * simplified and cleaned up code * RIG_LEVEL_STRENGTH * RIG_LEVEL_RAWSTR git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2597 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.9
							rodzic
							
								
									3419987f6b
								
							
						
					
					
						commit
						5e475e76c4
					
				| 
						 | 
				
			
			@ -3,6 +3,7 @@ PCRSRCLIST = pcr1000.c pcr100.c
 | 
			
		|||
lib_LTLIBRARIES = hamlib-pcr.la
 | 
			
		||||
hamlib_pcr_la_SOURCES = $(PCRSRCLIST) pcr.c
 | 
			
		||||
hamlib_pcr_la_LDFLAGS = -no-undefined -module -avoid-version
 | 
			
		||||
hamlib_pcr_la_LIBADD = $(top_builddir)/src/libhamlib.la
 | 
			
		||||
hamlib_pcr_la_LIBADD = $(top_builddir)/src/libhamlib.la \
 | 
			
		||||
		       $(top_builddir)/lib/libmisc.la
 | 
			
		||||
 | 
			
		||||
noinst_HEADERS = pcr.h
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										66
									
								
								pcr/pcr.h
								
								
								
								
							
							
						
						
									
										66
									
								
								pcr/pcr.h
								
								
								
								
							| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 *  Hamlib PCR backend - main header
 | 
			
		||||
 *  Copyright (c) 2001-2003 by Stephane Fillod
 | 
			
		||||
 *
 | 
			
		||||
 *	$Id: pcr.h,v 1.12 2006-10-07 16:42:19 csete Exp $
 | 
			
		||||
 *	$Id: pcr.h,v 1.13 2009-01-27 19:05:59 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
 | 
			
		||||
| 
						 | 
				
			
			@ -23,15 +23,38 @@
 | 
			
		|||
#ifndef _PCR_H
 | 
			
		||||
#define _PCR_H 1
 | 
			
		||||
 | 
			
		||||
#define BACKEND_VER "0.4"
 | 
			
		||||
#define BACKEND_VER		"0.5"
 | 
			
		||||
 | 
			
		||||
#define PCR_MAX_CMD_LEN		32
 | 
			
		||||
 | 
			
		||||
struct pcr_priv_data {
 | 
			
		||||
	freq_t last_freq;
 | 
			
		||||
	rmode_t last_mode;
 | 
			
		||||
 | 
			
		||||
	int last_filter;
 | 
			
		||||
	int last_shift;
 | 
			
		||||
	int last_att;
 | 
			
		||||
	int last_agc;
 | 
			
		||||
	tone_t last_ctcss_sql;
 | 
			
		||||
 | 
			
		||||
	float	volume;
 | 
			
		||||
	float	squelch;
 | 
			
		||||
 | 
			
		||||
	int auto_update;
 | 
			
		||||
	int raw_level;
 | 
			
		||||
 | 
			
		||||
	char info[100];
 | 
			
		||||
	char cmd_buf[PCR_MAX_CMD_LEN];
 | 
			
		||||
 | 
			
		||||
	int protocol;
 | 
			
		||||
	int firmware;
 | 
			
		||||
	int country;
 | 
			
		||||
	int options;
 | 
			
		||||
 | 
			
		||||
	int sync;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern const tone_t pcr1_ctcss_list[];
 | 
			
		||||
extern const tone_t pcr_ctcss_list[];
 | 
			
		||||
 | 
			
		||||
int pcr_init(RIG *rig);
 | 
			
		||||
int pcr_cleanup(RIG *rig);
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +67,7 @@ int pcr_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width);
 | 
			
		|||
const char *pcr_get_info(RIG *rig);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*Added - G0WCW ----------------------------------------------------- */
 | 
			
		||||
/* Added - G0WCW */
 | 
			
		||||
 | 
			
		||||
int pcr_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val);
 | 
			
		||||
int pcr_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val);
 | 
			
		||||
| 
						 | 
				
			
			@ -53,30 +76,35 @@ int pcr_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status);
 | 
			
		|||
int pcr_set_func(RIG *rig, vfo_t vfo, setting_t func, int status);
 | 
			
		||||
 | 
			
		||||
int pcr_set_comm_rate(RIG *rig, int baud_rate);
 | 
			
		||||
int pcr_check_ok(RIG *rig);
 | 
			
		||||
 | 
			
		||||
int pcr_set_volume(RIG *rig, int level);
 | 
			
		||||
int pcr_set_volume(RIG *rig, float level);
 | 
			
		||||
int pcr_set_squelch(RIG *rig, int level);
 | 
			
		||||
int pcr_set_IF_shift(RIG *rig, int shift);
 | 
			
		||||
int pcr_set_AGC(RIG *rig, int level);                // J45xx
 | 
			
		||||
int pcr_set_NB(RIG *rig, int level);                 // J46xx
 | 
			
		||||
int pcr_set_Attenuator(RIG *rig, int level);         // J47xx
 | 
			
		||||
int pcr_set_if_shift(RIG *rig, int level);
 | 
			
		||||
int pcr_set_agc(RIG *rig, int status);			// J45xx
 | 
			
		||||
int pcr_set_nb(RIG *rig, int status);			// J46xx
 | 
			
		||||
int pcr_set_attenuator(RIG *rig, int status);		// J47xx
 | 
			
		||||
int pcr_set_anl(RIG *rig, int status);			// J4Dxx
 | 
			
		||||
 | 
			
		||||
int pcr_set_bf0(RIG *rig, int level);                // J4Axx
 | 
			
		||||
int pcr_set_vsc(RIG *rig, int level);                // J50xx
 | 
			
		||||
int pcr_set_dsp(RIG *rig, int level);                // J80xx
 | 
			
		||||
int pcr_set_dsp_state(RIG *rig, int level);          // J8100=off J8101=on
 | 
			
		||||
int pcr_set_dsp_noise_reducer(RIG *rig, int level);  // J82xx
 | 
			
		||||
int pcr_set_dsp_auto_notch(RIG *rig, int level);     // J83xx
 | 
			
		||||
 | 
			
		||||
int pcr_get_ctcss_sql(RIG *rig, vfo_t vfo, tone_t *tone);
 | 
			
		||||
int pcr_set_ctcss_sql(RIG *rig, vfo_t vfo, tone_t tone);
 | 
			
		||||
int pcr_set_trn(RIG * rig, int trn);
 | 
			
		||||
int pcr_decode_event(RIG *rig);
 | 
			
		||||
 | 
			
		||||
static int pcr_check_ok(RIG * rig);
 | 
			
		||||
 | 
			
		||||
int pcr_set_BFO(RIG *rig, int shift);                // J4Axx
 | 
			
		||||
int pcr_set_VSC(RIG *rig, int level);                // J50xx
 | 
			
		||||
int pcr_set_DSP(RIG *rig, int state);                // J80xx
 | 
			
		||||
int pcr_set_DSP_state(RIG *rig, int state);          // J8100=off J8101=on
 | 
			
		||||
int pcr_set_DSP_noise_reducer(RIG *rig, int state);  // J82xx
 | 
			
		||||
int pcr_set_DSP_auto_notch(RIG *rig, int state);     // J83xx
 | 
			
		||||
/* ------------------------------------------------------------------ */
 | 
			
		||||
 | 
			
		||||
// int pcr_get_param(RIG *rig, setting_t parm, value_t *val);
 | 
			
		||||
// int pcr_set_param(RIG *rig, setting_t parm, value_t *val);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern const struct rig_caps pcr1000_caps;
 | 
			
		||||
extern const struct rig_caps pcr100_caps;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* _PCR_H */
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										207
									
								
								pcr/pcr100.c
								
								
								
								
							
							
						
						
									
										207
									
								
								pcr/pcr100.c
								
								
								
								
							| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 *  Hamlib PCR backend - PCR-100 description
 | 
			
		||||
 *  Copyright (c) 2001-2004 by Stephane Fillod
 | 
			
		||||
 *
 | 
			
		||||
 *	$Id: pcr100.c,v 1.7 2006-10-07 16:42:19 csete Exp $
 | 
			
		||||
 *	$Id: pcr100.c,v 1.8 2009-01-27 19:05:59 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
 | 
			
		||||
| 
						 | 
				
			
			@ -29,105 +29,142 @@
 | 
			
		|||
#include <hamlib/rig.h>
 | 
			
		||||
 | 
			
		||||
#include "pcr.h"
 | 
			
		||||
#include "idx_builtin.h"
 | 
			
		||||
 | 
			
		||||
#define PCR100_MODES ( RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_WFM )
 | 
			
		||||
 | 
			
		||||
#define PCR100_MODES (RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_WFM)
 | 
			
		||||
#define PCR100_FUNC ( /* RIG_FUNC_ANL | */ RIG_FUNC_TSQL )
 | 
			
		||||
 | 
			
		||||
#define PCR100_FUNC (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_TSQL|RIG_FUNC_ANF|RIG_FUNC_NR)
 | 
			
		||||
 | 
			
		||||
#define PCR100_LEVEL (RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQL|RIG_LEVEL_AF|RIG_LEVEL_STRENGTH)
 | 
			
		||||
#define PCR100_LEVEL ( \
 | 
			
		||||
			RIG_LEVEL_ATT | RIG_LEVEL_AF | RIG_LEVEL_SQL | RIG_LEVEL_IF | \
 | 
			
		||||
			RIG_LEVEL_AGC | RIG_LEVEL_STRENGTH | RIG_LEVEL_RAWSTR )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * IC PCR100 rigs capabilities.
 | 
			
		||||
 */
 | 
			
		||||
const struct rig_caps pcr100_caps = {
 | 
			
		||||
.rig_model =  RIG_MODEL_PCR100,
 | 
			
		||||
.model_name = "IC-PCR100",
 | 
			
		||||
.mfg_name =  "Icom",
 | 
			
		||||
.version =  BACKEND_VER,
 | 
			
		||||
.copyright =  "LGPL",
 | 
			
		||||
.status =  RIG_STATUS_UNTESTED,
 | 
			
		||||
.rig_type =  RIG_TYPE_PCRECEIVER,
 | 
			
		||||
.ptt_type =  RIG_PTT_NONE,
 | 
			
		||||
.dcd_type =  RIG_DCD_RIG,
 | 
			
		||||
.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,
 | 
			
		||||
	.rig_model		= RIG_MODEL_PCR100,
 | 
			
		||||
	.model_name		= "IC-PCR100",
 | 
			
		||||
	.mfg_name		= "Icom",
 | 
			
		||||
	.version		= BACKEND_VER,
 | 
			
		||||
	.copyright		= "LGPL",
 | 
			
		||||
	.status			= RIG_STATUS_BETA,
 | 
			
		||||
 | 
			
		||||
.has_get_func =  RIG_FUNC_NONE,
 | 
			
		||||
.has_set_func =  PCR100_FUNC,
 | 
			
		||||
.has_get_level =  PCR100_LEVEL,
 | 
			
		||||
.has_set_level =  RIG_LEVEL_SET(PCR100_LEVEL),
 | 
			
		||||
.has_get_parm =  RIG_PARM_NONE,
 | 
			
		||||
.has_set_parm =  RIG_PARM_NONE,    /* FIXME: parms */
 | 
			
		||||
.level_gran =  {},                 /* FIXME: granularity */
 | 
			
		||||
.parm_gran =  {},
 | 
			
		||||
.ctcss_list = pcr1_ctcss_list,
 | 
			
		||||
.dcs_list =  NULL,
 | 
			
		||||
.preamp =   { RIG_DBLST_END, },
 | 
			
		||||
.attenuator =   { 20, RIG_DBLST_END, },
 | 
			
		||||
.max_rit =  Hz(0),
 | 
			
		||||
.max_xit =  Hz(0),
 | 
			
		||||
.max_ifshift =  Hz(1.2),
 | 
			
		||||
.targetable_vfo =  0,
 | 
			
		||||
.transceive =  RIG_TRN_RIG,
 | 
			
		||||
.bank_qty =   0,
 | 
			
		||||
.chan_desc_sz =  0,
 | 
			
		||||
	.rig_type		= RIG_TYPE_PCRECEIVER,
 | 
			
		||||
	.ptt_type		= RIG_PTT_NONE,
 | 
			
		||||
	.dcd_type		= RIG_DCD_RIG,
 | 
			
		||||
	.port_type		= RIG_PORT_SERIAL,
 | 
			
		||||
 | 
			
		||||
.chan_list =  { RIG_CHAN_END, },	/* no memory channel list: this is a PC receiver */
 | 
			
		||||
	.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,
 | 
			
		||||
 | 
			
		||||
.rx_range_list1 =  { {kHz(10),GHz(1.3),PCR100_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
 	RIG_FRNG_END, },
 | 
			
		||||
.tx_range_list1 =  { RIG_FRNG_END, },
 | 
			
		||||
.rx_range_list2 =  { {kHz(10),MHz(824)-10,PCR100_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
    {MHz(849)+10,MHz(869)-10,PCR100_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
    {MHz(894)+10,GHz(1.3),PCR100_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
 	RIG_FRNG_END, },
 | 
			
		||||
.tx_range_list2 =  { RIG_FRNG_END, },	/* no TX ranges, this is a receiver */
 | 
			
		||||
	.write_delay		= 12,
 | 
			
		||||
	.post_write_delay	= 0,
 | 
			
		||||
	.timeout		= 300,
 | 
			
		||||
	.retry			= 3,
 | 
			
		||||
 | 
			
		||||
.tuning_steps =  {
 | 
			
		||||
	  { PCR100_MODES,Hz(1) },
 | 
			
		||||
	  RIG_TS_END,
 | 
			
		||||
	.has_get_func		= RIG_FUNC_NONE,
 | 
			
		||||
	.has_set_func		= PCR100_FUNC,
 | 
			
		||||
	.has_get_level		= PCR100_LEVEL,
 | 
			
		||||
	.has_set_level		= RIG_LEVEL_SET(PCR100_LEVEL),
 | 
			
		||||
	.has_get_parm		= RIG_PARM_NONE,
 | 
			
		||||
	.has_set_parm		= RIG_PARM_NONE,
 | 
			
		||||
 | 
			
		||||
	.level_gran = {
 | 
			
		||||
		[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
 | 
			
		||||
		/* XXX check this */
 | 
			
		||||
		[LVL_IF] = { .min = { .i = -1270 }, .max = { .i = 1270 }, .step = { .i = 10 } },
 | 
			
		||||
        },
 | 
			
		||||
	.parm_gran	= { },
 | 
			
		||||
 | 
			
		||||
	.ctcss_list	= pcr_ctcss_list,
 | 
			
		||||
	.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,
 | 
			
		||||
	.transceive	= RIG_TRN_RIG,
 | 
			
		||||
	.bank_qty	= 0,
 | 
			
		||||
	.chan_desc_sz	= 0,
 | 
			
		||||
	.chan_list	= { RIG_CHAN_END },
 | 
			
		||||
 | 
			
		||||
	.rx_range_list1 = {
 | 
			
		||||
		{ kHz(10), GHz(1.3), PCR100_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		 RIG_FRNG_END,
 | 
			
		||||
	},
 | 
			
		||||
	      /* mode/filter list, remember: order matters! */
 | 
			
		||||
.filters =  {
 | 
			
		||||
		{RIG_MODE_FM|RIG_MODE_AM, kHz(6)},
 | 
			
		||||
		{RIG_MODE_FM|RIG_MODE_AM, kHz(15)},
 | 
			
		||||
		{RIG_MODE_FM|RIG_MODE_AM, kHz(50)},
 | 
			
		||||
		{RIG_MODE_WFM, kHz(230)},
 | 
			
		||||
		{RIG_MODE_WFM, kHz(50)},
 | 
			
		||||
		RIG_FLT_END,
 | 
			
		||||
  },
 | 
			
		||||
.priv =  NULL,	/* priv */
 | 
			
		||||
	.tx_range_list1 = { RIG_FRNG_END },
 | 
			
		||||
	.rx_range_list2 = {
 | 
			
		||||
		{ kHz(10), MHz(824) - 10, PCR100_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		{ MHz(849) + 10, MHz(869) - 10, PCR100_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		{ MHz(894) + 10, GHz(1.3), PCR100_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		RIG_FRNG_END,
 | 
			
		||||
	},
 | 
			
		||||
	.tx_range_list2 = { RIG_FRNG_END },	/* no TX ranges, this is a receiver */
 | 
			
		||||
 | 
			
		||||
.rig_init =  pcr_init,
 | 
			
		||||
.rig_cleanup =  pcr_cleanup,
 | 
			
		||||
.rig_open =  NULL,
 | 
			
		||||
.rig_close =  NULL,
 | 
			
		||||
	.tuning_steps = {
 | 
			
		||||
			 { PCR100_MODES, Hz(1) },
 | 
			
		||||
			 RIG_TS_END,
 | 
			
		||||
	},
 | 
			
		||||
	/* mode/filter list, remember: order matters!
 | 
			
		||||
	 * first one is the default mode, the one given back
 | 
			
		||||
	 * by rig_mode_normal(), the others must be sorted.
 | 
			
		||||
	 */
 | 
			
		||||
	.filters = {
 | 
			
		||||
		    { RIG_MODE_AM | RIG_MODE_FM, kHz(15) },
 | 
			
		||||
 | 
			
		||||
.set_freq =  pcr_set_freq,
 | 
			
		||||
.get_freq =  pcr_get_freq,
 | 
			
		||||
.set_mode =  pcr_set_mode,
 | 
			
		||||
.get_mode =  pcr_get_mode,
 | 
			
		||||
		    { RIG_MODE_AM, kHz(2.8) },
 | 
			
		||||
		    { RIG_MODE_AM | RIG_MODE_FM, kHz(6) },
 | 
			
		||||
		    { RIG_MODE_AM | RIG_MODE_FM, kHz(50) },
 | 
			
		||||
 | 
			
		||||
.get_info = 	pcr_get_info,
 | 
			
		||||
		    { RIG_MODE_WFM, kHz(230) },
 | 
			
		||||
		    { RIG_MODE_WFM, kHz(50) },
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * 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.
 | 
			
		||||
   */
 | 
			
		||||
		    RIG_FLT_END,
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	.priv = NULL,
 | 
			
		||||
 | 
			
		||||
	/* XXX verify */
 | 
			
		||||
	.str_cal = { 7, {
 | 
			
		||||
			{ 0, -60 },
 | 
			
		||||
			{ 160, 0 },
 | 
			
		||||
			{ 176, 20 },
 | 
			
		||||
			{ 192, 30 },
 | 
			
		||||
			{ 208, 40 },
 | 
			
		||||
			{ 224, 50 },
 | 
			
		||||
			{ 240, 60 },
 | 
			
		||||
			}
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	.rig_init	= pcr_init,
 | 
			
		||||
	.rig_cleanup	= pcr_cleanup,
 | 
			
		||||
	.rig_open	= pcr_open,
 | 
			
		||||
	.rig_close	= pcr_close,
 | 
			
		||||
 | 
			
		||||
	.set_freq	= pcr_set_freq,
 | 
			
		||||
	.get_freq	= pcr_get_freq,
 | 
			
		||||
	.set_mode	= pcr_set_mode,
 | 
			
		||||
	.get_mode	= pcr_get_mode,
 | 
			
		||||
 | 
			
		||||
	.get_info	= pcr_get_info,
 | 
			
		||||
 | 
			
		||||
	.set_level	= pcr_set_level,
 | 
			
		||||
	.get_level	= pcr_get_level,
 | 
			
		||||
 | 
			
		||||
	.set_func	= pcr_set_func,
 | 
			
		||||
	.get_func	= pcr_get_func,
 | 
			
		||||
 | 
			
		||||
	.set_ctcss_sql	= pcr_set_ctcss_sql,
 | 
			
		||||
	.get_ctcss_sql	= pcr_get_ctcss_sql,
 | 
			
		||||
 | 
			
		||||
	.set_trn	= pcr_set_trn,
 | 
			
		||||
	.decode_event	= pcr_decode_event,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										200
									
								
								pcr/pcr1000.c
								
								
								
								
							
							
						
						
									
										200
									
								
								pcr/pcr1000.c
								
								
								
								
							| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 *  Hamlib PCR backend - PCR-1000 description
 | 
			
		||||
 *  Copyright (c) 2001-2003 by Stephane Fillod and Darren Hatcher
 | 
			
		||||
 *
 | 
			
		||||
 *	$Id: pcr1000.c,v 1.10 2005-04-03 20:18:30 fillods Exp $
 | 
			
		||||
 *	$Id: pcr1000.c,v 1.11 2009-01-27 19:05:59 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
 | 
			
		||||
| 
						 | 
				
			
			@ -29,114 +29,128 @@
 | 
			
		|||
#include <hamlib/rig.h>
 | 
			
		||||
 | 
			
		||||
#include "pcr.h"
 | 
			
		||||
#include "idx_builtin.h"
 | 
			
		||||
 | 
			
		||||
#define PCR1000_MODES ( RIG_MODE_AM | RIG_MODE_FM | RIG_MODE_WFM | RIG_MODE_CW | RIG_MODE_SSB )
 | 
			
		||||
 | 
			
		||||
/* used in pcr_set_mode */
 | 
			
		||||
#define PCR1000_MODES (RIG_MODE_AM|RIG_MODE_CW|RIG_MODE_SSB|RIG_MODE_FM|RIG_MODE_WFM)
 | 
			
		||||
#define PCR1000_FUNC ( RIG_FUNC_NB | RIG_FUNC_TSQL | RIG_FUNC_NB | RIG_FUNC_ANF | RIG_FUNC_NR )
 | 
			
		||||
 | 
			
		||||
/* used in pcr_set_func */
 | 
			
		||||
#define PCR1000_FUNC (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_NR)
 | 
			
		||||
 | 
			
		||||
/* used in pcr_set_level */
 | 
			
		||||
#define PCR1000_LEVEL (RIG_LEVEL_ATT | RIG_LEVEL_AF | RIG_LEVEL_SQL | RIG_LEVEL_IF | \
 | 
			
		||||
                       RIG_LEVEL_AGC | RIG_LEVEL_NR)
 | 
			
		||||
#define PCR1000_LEVEL ( \
 | 
			
		||||
			RIG_LEVEL_ATT | RIG_LEVEL_AF | RIG_LEVEL_SQL | RIG_LEVEL_IF | \
 | 
			
		||||
			RIG_LEVEL_AGC | RIG_LEVEL_STRENGTH | RIG_LEVEL_RAWSTR | \
 | 
			
		||||
			RIG_LEVEL_NR )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * IC PCR1000 rigs capabilities.
 | 
			
		||||
 */
 | 
			
		||||
const struct rig_caps pcr1000_caps = {
 | 
			
		||||
.rig_model = RIG_MODEL_PCR1000,
 | 
			
		||||
.model_name = "IC-PCR1000",
 | 
			
		||||
.mfg_name = "Icom",
 | 
			
		||||
.version = BACKEND_VER,
 | 
			
		||||
.copyright = "LGPL",
 | 
			
		||||
.status = RIG_STATUS_ALPHA,
 | 
			
		||||
.rig_type = RIG_TYPE_PCRECEIVER,
 | 
			
		||||
.ptt_type = RIG_PTT_NONE,
 | 
			
		||||
.dcd_type = RIG_DCD_RIG,
 | 
			
		||||
.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,
 | 
			
		||||
	.rig_model		= RIG_MODEL_PCR1000,
 | 
			
		||||
	.model_name		= "IC-PCR1000",
 | 
			
		||||
	.mfg_name		= "Icom",
 | 
			
		||||
	.version		= BACKEND_VER,
 | 
			
		||||
	.copyright		= "LGPL",
 | 
			
		||||
	.status			= RIG_STATUS_ALPHA,
 | 
			
		||||
 | 
			
		||||
.has_get_func = PCR1000_FUNC,
 | 
			
		||||
.has_set_func = PCR1000_FUNC,
 | 
			
		||||
.has_get_level = PCR1000_LEVEL,
 | 
			
		||||
.has_set_level = RIG_LEVEL_SET(PCR1000_LEVEL),
 | 
			
		||||
.has_get_parm = RIG_PARM_NONE,
 | 
			
		||||
.has_set_parm = RIG_PARM_NONE,    /* FIXME: parms */
 | 
			
		||||
.level_gran = {},                 /* FIXME: granularity */
 | 
			
		||||
.parm_gran = {},
 | 
			
		||||
.ctcss_list = pcr1_ctcss_list,
 | 
			
		||||
.dcs_list = NULL,
 | 
			
		||||
.preamp =  { RIG_DBLST_END, },
 | 
			
		||||
.attenuator =  { 20, RIG_DBLST_END, },
 | 
			
		||||
.max_rit = Hz(0),
 | 
			
		||||
.max_xit = Hz(0),
 | 
			
		||||
.max_ifshift = Hz(1.2),
 | 
			
		||||
.targetable_vfo = 0,
 | 
			
		||||
.transceive = RIG_TRN_RIG,
 | 
			
		||||
.bank_qty =  0,
 | 
			
		||||
.chan_desc_sz = 0,
 | 
			
		||||
	.rig_type		= RIG_TYPE_PCRECEIVER,
 | 
			
		||||
	.ptt_type		= RIG_PTT_NONE,
 | 
			
		||||
	.dcd_type		= RIG_DCD_RIG,
 | 
			
		||||
	.port_type		= RIG_PORT_SERIAL,
 | 
			
		||||
 | 
			
		||||
.chan_list = { RIG_CHAN_END, },	/* no memory channel list: this is a PC receiver */
 | 
			
		||||
	.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,
 | 
			
		||||
 | 
			
		||||
.rx_range_list1 = { {kHz(10),GHz(1.3),PCR1000_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
 	RIG_FRNG_END, },
 | 
			
		||||
.tx_range_list1 = { RIG_FRNG_END, },
 | 
			
		||||
.rx_range_list2 = { {kHz(10),MHz(824)-10,PCR1000_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
    {MHz(849)+10,MHz(869)-10,PCR1000_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
    {MHz(894)+10,GHz(1.3),PCR1000_MODES,-1,-1,RIG_VFO_A},
 | 
			
		||||
 	RIG_FRNG_END, },
 | 
			
		||||
.tx_range_list2 = { RIG_FRNG_END, },	/* no TX ranges, this is a receiver */
 | 
			
		||||
	.write_delay		= 12,
 | 
			
		||||
	.post_write_delay	= 0,
 | 
			
		||||
	.timeout		= 300,
 | 
			
		||||
	.retry			= 3,
 | 
			
		||||
 | 
			
		||||
.tuning_steps = {
 | 
			
		||||
	  { PCR1000_MODES,Hz(1) },
 | 
			
		||||
	  RIG_TS_END,
 | 
			
		||||
	.has_get_func		= PCR1000_FUNC,
 | 
			
		||||
	.has_set_func		= PCR1000_FUNC,
 | 
			
		||||
	.has_get_level		= PCR1000_LEVEL,
 | 
			
		||||
	.has_set_level		= RIG_LEVEL_SET(PCR1000_LEVEL),
 | 
			
		||||
	.has_get_parm		= RIG_PARM_NONE,
 | 
			
		||||
	.has_set_parm		= RIG_PARM_NONE,
 | 
			
		||||
 | 
			
		||||
	.level_gran = {
 | 
			
		||||
		[LVL_RAWSTR] = { .min = { .i = 0 }, .max = { .i = 255 } },
 | 
			
		||||
		/* XXX check this */
 | 
			
		||||
		[LVL_IF] = { .min = { .i = -1270 }, .max = { .i = 1270 }, .step = { .i = 10 } },
 | 
			
		||||
	},
 | 
			
		||||
	      /* mode/filter list, remember: order matters! */
 | 
			
		||||
.filters = {
 | 
			
		||||
		{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,
 | 
			
		||||
  },
 | 
			
		||||
.priv = NULL,	/* priv */
 | 
			
		||||
	.parm_gran		= {},
 | 
			
		||||
 | 
			
		||||
.rig_init = pcr_init,
 | 
			
		||||
.rig_cleanup = pcr_cleanup,
 | 
			
		||||
.rig_open = pcr_open,
 | 
			
		||||
.rig_close = pcr_close,
 | 
			
		||||
	.ctcss_list		= pcr_ctcss_list,
 | 
			
		||||
	.dcs_list		= NULL,
 | 
			
		||||
	.preamp			= { RIG_DBLST_END },
 | 
			
		||||
	.attenuator		= { 20, RIG_DBLST_END },
 | 
			
		||||
 | 
			
		||||
.set_freq = pcr_set_freq,
 | 
			
		||||
.get_freq = pcr_get_freq,
 | 
			
		||||
.set_mode = pcr_set_mode,
 | 
			
		||||
.get_mode = pcr_get_mode,
 | 
			
		||||
	.max_rit		= Hz(0),
 | 
			
		||||
	.max_xit		= Hz(0),
 | 
			
		||||
	.max_ifshift		= kHz(1.2),
 | 
			
		||||
 | 
			
		||||
.get_info = pcr_get_info,
 | 
			
		||||
	.targetable_vfo		= 0,
 | 
			
		||||
	.transceive		= RIG_TRN_RIG,
 | 
			
		||||
	.bank_qty		= 0,
 | 
			
		||||
	.chan_desc_sz		= 0,
 | 
			
		||||
	.chan_list		= { RIG_CHAN_END },
 | 
			
		||||
 | 
			
		||||
.set_level = pcr_set_level,
 | 
			
		||||
.get_level = pcr_get_level,
 | 
			
		||||
.set_func = pcr_set_func,
 | 
			
		||||
.get_func = pcr_get_func,
 | 
			
		||||
	.rx_range_list1 = {
 | 
			
		||||
		{ kHz(10), GHz(1.3), PCR1000_MODES, -1, -1, RIG_VFO_A},
 | 
			
		||||
		RIG_FRNG_END
 | 
			
		||||
	},
 | 
			
		||||
	.tx_range_list1 = { RIG_FRNG_END },
 | 
			
		||||
	.rx_range_list2 = {
 | 
			
		||||
		{ kHz(10), MHz(824) - 10, PCR1000_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		{ MHz(849) + 10, MHz(869) - 10, PCR1000_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		{ MHz(894) + 10, GHz(1.3), PCR1000_MODES, -1, -1, RIG_VFO_A },
 | 
			
		||||
		 RIG_FRNG_END
 | 
			
		||||
	},
 | 
			
		||||
	.tx_range_list2 = { RIG_FRNG_END },	/* no TX ranges, this is a receiver */
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * TODO:
 | 
			
		||||
   * set_trn, set_powerstat,
 | 
			
		||||
   * set_level ATT?
 | 
			
		||||
   * set_func: NB,TSQL, VSC?
 | 
			
		||||
   * get_level, get_dcd, dtmf, ..
 | 
			
		||||
   * decode_event, set_ctcss, set_ctcss_sql
 | 
			
		||||
   * and also all the associated get_ functions.
 | 
			
		||||
   */
 | 
			
		||||
	.tuning_steps = {
 | 
			
		||||
			 { PCR1000_MODES, Hz(1) },
 | 
			
		||||
			 RIG_TS_END,
 | 
			
		||||
	},
 | 
			
		||||
	/* mode/filter list, remember: order matters! */
 | 
			
		||||
	.filters = {
 | 
			
		||||
		    { 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,
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	.priv = NULL,
 | 
			
		||||
 | 
			
		||||
	/* XXX fake */
 | 
			
		||||
	.str_cal = { 3, { { 0, -60 }, { 127, 0 }, { 255, 60 } } },
 | 
			
		||||
 | 
			
		||||
	.rig_init	= pcr_init,
 | 
			
		||||
	.rig_cleanup	= pcr_cleanup,
 | 
			
		||||
	.rig_open	= pcr_open,
 | 
			
		||||
	.rig_close	= pcr_close,
 | 
			
		||||
 | 
			
		||||
	.set_freq	= pcr_set_freq,
 | 
			
		||||
	.get_freq	= pcr_get_freq,
 | 
			
		||||
	.set_mode	= pcr_set_mode,
 | 
			
		||||
	.get_mode	= pcr_get_mode,
 | 
			
		||||
 | 
			
		||||
	.get_info	= pcr_get_info,
 | 
			
		||||
 | 
			
		||||
	.set_level	= pcr_set_level,
 | 
			
		||||
	.get_level	= pcr_get_level,
 | 
			
		||||
 | 
			
		||||
	.set_func	= pcr_set_func,
 | 
			
		||||
	.get_func	= pcr_get_func,
 | 
			
		||||
 | 
			
		||||
	.set_ctcss_sql	= pcr_set_ctcss_sql,
 | 
			
		||||
	.get_ctcss_sql	= pcr_get_ctcss_sql,
 | 
			
		||||
 | 
			
		||||
	.set_trn	= pcr_set_trn,
 | 
			
		||||
	.decode_event	= pcr_decode_event,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue