kopia lustrzana https://github.com/Hamlib/Hamlib
				
				
				
			Infrastructure change to enable backend specific coding of mode and bandwidth into rig specific command tokens.
See ic910.c for an example git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2476 7ae35d74-ebe9-4afe-98af-79ac388436b8Hamlib-1.2.9
							rodzic
							
								
									994d5f109c
								
							
						
					
					
						commit
						d8bedaf04d
					
				
							
								
								
									
										25
									
								
								icom/ic910.c
								
								
								
								
							
							
						
						
									
										25
									
								
								icom/ic910.c
								
								
								
								
							|  | @ -3,7 +3,7 @@ | |||
|  *  Contributed by Francois Retief <fgretief@sun.ac.za> | ||||
|  *  Copyright (c) 2000-2004 by Stephane Fillod | ||||
|  * | ||||
|  *      $Id: ic910.c,v 1.15 2008-11-02 16:14:57 y32kn Exp $ | ||||
|  *      $Id: ic910.c,v 1.16 2008-11-13 20:29:43 y32kn 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,6 +29,8 @@ | |||
| 
 | ||||
| #include <hamlib/rig.h> | ||||
| #include "icom.h" | ||||
| #include "icom_defs.h" | ||||
| #include "frame.h" | ||||
| #include "idx_builtin.h" | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -175,6 +177,23 @@ static int ic910_set_freq(RIG* rig, vfo_t vfo, freq_t freq) | |||
|     return icom_set_freq(rig, RIG_VFO_CURR, freq); | ||||
|  } | ||||
| 
 | ||||
| /*
 | ||||
|  * This function does the special bandwidth coding for IC-910 | ||||
|  * (1 - normal, 2 - narrow) | ||||
|  */ | ||||
| int ic910_r2i_mode(RIG *rig, rmode_t mode, pbwidth_t width, | ||||
| 	                                unsigned char *md, signed char *pd) | ||||
| { | ||||
|     	int err; | ||||
| 
 | ||||
| 	err = rig2icom_mode(rig, mode, width, md, pd); | ||||
| 
 | ||||
| 	if (*pd == PD_NARROW_3) 	 | ||||
| 		*pd = PD_NARROW_2; | ||||
| 
 | ||||
| 	return err; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #define IC910_MODES (RIG_MODE_SSB|RIG_MODE_CW|RIG_MODE_FM) | ||||
| 
 | ||||
|  | @ -221,12 +240,14 @@ static int ic910_set_freq(RIG* rig, vfo_t vfo, freq_t freq) | |||
| 
 | ||||
| #define IC910_STR_CAL UNKNOWN_IC_STR_CAL	/* FIXME */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  */ | ||||
| static const struct icom_priv_caps ic910_priv_caps = { | ||||
|     0x60,           /* default address */ | ||||
|     0,              /* 731 mode */ | ||||
|     ic910_ts_sc_list | ||||
|     ic910_ts_sc_list, | ||||
|     .r2i_mode = ic910_r2i_mode | ||||
| }; | ||||
| 
 | ||||
| const struct rig_caps ic910_caps = { | ||||
|  |  | |||
							
								
								
									
										15
									
								
								icom/icom.c
								
								
								
								
							
							
						
						
									
										15
									
								
								icom/icom.c
								
								
								
								
							|  | @ -2,7 +2,7 @@ | |||
|  *  Hamlib CI-V backend - main file | ||||
|  *  Copyright (c) 2000-2005 by Stephane Fillod | ||||
|  * | ||||
|  *	$Id: icom.c,v 1.106 2008-09-21 19:36:50 fillods Exp $ | ||||
|  *	$Id: icom.c,v 1.107 2008-11-13 20:29:43 y32kn 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 | ||||
|  | @ -510,6 +510,7 @@ pbwidth_t icom_get_dsp_flt(RIG *rig, rmode_t mode) { | |||
| int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) | ||||
| { | ||||
| 	struct icom_priv_data *priv; | ||||
| 	const struct icom_priv_caps *priv_caps; | ||||
| 	struct rig_state *rs; | ||||
| 	unsigned char ackbuf[MAXFRAMELEN]; | ||||
| 	unsigned char icmode; | ||||
|  | @ -519,7 +520,17 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) | |||
| 	rs = &rig->state; | ||||
| 	priv = (struct icom_priv_data*)rs->priv; | ||||
| 
 | ||||
| 	err = rig2icom_mode(rig, mode, width, &icmode, &icmode_ext); | ||||
| 	priv_caps = (const struct icom_priv_caps *) rig->caps->priv; | ||||
| 
 | ||||
| 	if (priv_caps->r2i_mode != NULL) {	/* call priv code if defined */ | ||||
| 	    	err = priv_caps->r2i_mode(rig, mode, width,  | ||||
| 				&icmode, &icmode_ext); | ||||
| 	}  | ||||
| 	else {					/* else call default */ | ||||
| 		err = rig2icom_mode(rig, mode, width,  | ||||
| 				&icmode, &icmode_ext); | ||||
| 	} | ||||
| 
 | ||||
| 	if (err < 0) | ||||
| 		return err; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										11
									
								
								icom/icom.h
								
								
								
								
							
							
						
						
									
										11
									
								
								icom/icom.h
								
								
								
								
							|  | @ -2,7 +2,7 @@ | |||
|  *  Hamlib CI-V backend - main header | ||||
|  *  Copyright (c) 2000-2004 by Stephane Fillod | ||||
|  * | ||||
|  *	$Id: icom.h,v 1.76 2008-02-13 22:04:52 fillods Exp $ | ||||
|  *	$Id: icom.h,v 1.77 2008-11-13 20:29:43 y32kn 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 | ||||
|  | @ -101,6 +101,15 @@ struct icom_priv_caps { | |||
| 	int civ_731_mode; /* Off: freqs on 10 digits, On: freqs on 8 digits */ | ||||
| 	const struct ts_sc_list *ts_sc_list; | ||||
| 	int settle_time; /*!< Receiver settle time, in ms */ | ||||
| 	int (*r2i_mode)(RIG *rig, rmode_t mode, pbwidth_t width,  | ||||
| 		unsigned char *md, signed char *pd); /*< backend specific code
 | ||||
| 						       to convert bandwidth and  | ||||
| 						       mode to cmd tokens */ | ||||
| 	void (*i2r_mode)(RIG *rig, unsigned char md, int pd,  | ||||
| 		rmode_t *mode, pbwidth_t *width);    /*< backend specific code
 | ||||
| 						       to convert response  | ||||
| 						       tokes to bandwidth and  | ||||
| 						       mdoe */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Thomas Beierlein, DL1JBE
						Thomas Beierlein, DL1JBE