示例#1
0
文件: th.c 项目: JohannesKlug/hamlib
/*
 * th_set_freq
 * Assumes rig!=NULL
 */
int
th_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
	char buf[20];
	int step;
	freq_t freq5,freq625,freq_sent;

	rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __func__);

	if (vfo != RIG_VFO_CURR && vfo != rig->state.current_vfo)
		return kenwood_wrong_vfo(__func__, vfo);

	freq5=round(freq/5000)*5000;
	freq625=round(freq/6250)*6250;
	if (abs(freq5-freq)<abs(freq625-freq)) {
	  step=0;
	  freq_sent=freq5;
	}
	else {
	  step=1;
	  freq_sent=freq625;
	}
	/* Step needs to be at least 10kHz on higher band, otherwise 5 kHz */
	step = freq_sent >= MHz(470) ? 4 : step;
	freq_sent = freq_sent >= MHz(470) ? (round(freq_sent/10000)*10000) : freq_sent;
	sprintf(buf, "FQ %011"PRIll",%X", (int64_t) freq_sent, step);

	return kenwood_cmd(rig, buf);
}
示例#2
0
//
//	The filter bank for the dongle is the first
//	one
static inline
int16_t	bankFor (int32_t freq) {
	if (freq < 60 * MHz (1))
	   return -1;
	if (freq < 120 * MHz (1))
	   return 1;
	if (freq < 245 * MHz (1))
	   return 2;
	if (freq < 420 * MHz (1))
	   return -1;
	if (freq < 1000 * MHz (1))
	   return 3;
	return -1;
}
示例#3
0
//
//	The actual thread does not do much more than reading the
//	values made available through the Mirics API implementation
//	and passing the values on
//
void	sdrplayWorker:: run (void) {
int16_t		*localBuf 	=
	                      (int16_t *)alloca (2 * sps * sizeof (int16_t));
int16_t		*xi		= (int16_t *)alloca (sps * sizeof (int16_t));
int16_t		*xq		= (int16_t *)alloca (sps * sizeof (int16_t));
uint32_t	fs;
int16_t		i;
int32_t		grc, rfc, fsc;
int	err;

	functions -> my_mir_sdr_SetSyncUpdatePeriod ((int)(deviceRate * MHz (1) / 2));
	functions -> my_mir_sdr_SetSyncUpdateSampleNum (sps);
	functions	-> my_mir_sdr_SetParam (102, 1);
	functions	-> my_mir_sdr_SetParam (105, 0);

	while (runnable) {
	   err =  functions ->
	       my_mir_sdr_ReadPacket (&xi [0], & xq [0], &fs, &grc, &rfc, &fsc);

//	currently, we are not interested in the results other than the actual
//	data
	   for (i = 0; i < sps; i ++) {
	      localBuf [2 * i] 		= xi [i];
	      localBuf [2 * i + 1] 	= xq [i];
	   }
	   _I_Buffer	-> putDataIntoBuffer (localBuf, 2 * sps);

	   if (fsc != 0 || rfc != 0 ||grc != 0)
	      fprintf (stderr, "fsc = %d, rfc = %d, grc = %d\n",
	                                        fsc, rfc, grc);
//	OK, data is now stored, now checking for updates
	   while (anyChange != NO_CHANGE) {
	      if (anyChange & FREQ_CHANGE) {
	         functions -> my_mir_sdr_SetRf (lastFrequency, 1, 0);
	         anyChange &= ~FREQ_CHANGE;
	      }
	      if (anyChange & GAIN_CHANGE) {
	         functions -> my_mir_sdr_SetGr (lastGain, 1, 0);
	         anyChange &= ~GAIN_CHANGE;
	      }
	      if (anyChange & RATE_CHANGE) {
	        int r =  functions -> my_mir_sdr_SetFs (deltaRate, 1, 1, 0);
	        if (r == 0)
	           deviceRate = deltaRate / MHz (1);
	         anyChange &= ~RATE_CHANGE;
	      }
	   }
	}
//	fprintf (stderr, "sdrplay worker now stopped\n");
}
示例#4
0
	sdrplayWorker::sdrplayWorker (int32_t	deviceRate,
	                              int32_t	bandWidth,
	                              int32_t	defaultFreq,
	                              sdrplayLoader	*f,
	                              RingBuffer<int16_t> *buf,
	                              bool	*OK) {
int	err;

	this	-> deviceRate	= float(deviceRate) / MHz (1);
	this	-> bandWidth	= bandWidth / MHz (1);
	this	-> defaultFreq	= float(defaultFreq) / MHz (1);
	this	-> functions	= f;
	_I_Buffer		= buf;
	*OK			= false;	// just the default

	mir_sdr_Bw_MHzT aa = 
	        bandWidth <= 200 * KHz (1) ? mir_sdr_BW_0_200 :
	        bandWidth <= 300 * KHz (1) ? mir_sdr_BW_0_300 :
	        bandWidth <= 600 * KHz (1) ? mir_sdr_BW_0_600 :
	        bandWidth <= 1536 * KHz (1) ? mir_sdr_BW_1_536 :
	        bandWidth <= 5000 * KHz (1) ? mir_sdr_BW_5_000 :
	        bandWidth <= 6000 * KHz (1) ? mir_sdr_BW_6_000 :
	        bandWidth <= 7000 * KHz (1) ? mir_sdr_BW_7_000 :
	        bandWidth <= 8000 * KHz (1) ? mir_sdr_BW_8_000 :
	              mir_sdr_BW_8_000;
	        
//	Note: the "API check" has been done by the owner of this thread
	err			= functions -> my_mir_sdr_Init (40,
	                                            this -> deviceRate,
	                                            this -> defaultFreq,
	                                            aa,
	                                            mir_sdr_IF_Zero,
	                                            &sps);
	if (err != 0) {
	   fprintf (stderr, "Probleem init\n");
	   return;
	}

	err			= functions -> my_mir_sdr_SetDcMode (4, 1);
	err			= functions -> my_mir_sdr_SetDcTrackTime (63);
//
//	some defaults:
	lastFrequency		= defaultFreq;	// the parameter!!!!
	lastGain		= 25;		// dummy
	runnable		= true;
	anyChange		= 0;
	start ();
	*OK			= true;
}
示例#5
0
文件: thg71.c 项目: DF4OR/hamlib
/* --------------------------------------------------------------------- */
int thg71_open(RIG *rig)
{
    char ackbuf[ACKBUF_LEN],*strl,*stru;
    int retval,i;
    const freq_range_t frend=RIG_FRNG_END;

    /* this will check the model id */
    retval = kenwood_open(rig);
    if (retval != RIG_OK)
        return retval;

	/* fill state.rx/tx range_list */
    retval = kenwood_transaction(rig, "FL", ackbuf, sizeof (ackbuf));
        if (retval != RIG_OK)
        	return retval;

    strl=strtok(ackbuf," ");
    for(i=0;i<FRQRANGESIZ;i++) {
		freq_range_t frng;

	    	strl=strtok(NULL,",");
	    	stru=strtok(NULL,",");
		if(strl==NULL && stru==NULL)
			break;
		frng.start=MHz(atoi(strl));
		frng.end=MHz(atoi(stru));
		frng.vfo=RIG_VFO_A;
		frng.ant=0;
		if(frng.end<=MHz(135))
			frng.modes=RIG_MODE_AM;
		else
			frng.modes=RIG_MODE_FM;

		frng.high_power=-1;
		frng.low_power=-1;
		rig->state.rx_range_list[i]=frng;
		if(frng.start> MHz(200))
			frng.high_power=5.5;
		else
			frng.high_power=6;
		frng.low_power=mW(50);
		rig->state.tx_range_list[i]=frng;
	}
	rig->state.rx_range_list[i]= frend;
	rig->state.tx_range_list[i]= frend;
	rig->state.vfo_list=RIG_VFO_A | RIG_VFO_MEM ;

    return RIG_OK;
}
示例#6
0
文件: ar3000.c 项目: DF4OR/hamlib
/*
 * ar3k_set_freq
 * Assumes rig!=NULL
 */
int ar3k_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
	char freqbuf[BUFSZ];
	int freq_len, retval;
	unsigned lowhz;

	/*
	 * actually, frequency must be like nnnn.nnnnm,
	 * where m must be 0 or 5 (for 50Hz).
	 */
	lowhz = ((unsigned)freq) % 100;
	freq /= 100;
	if (lowhz < 25)
		lowhz = 0;
	else if (lowhz < 75)
		lowhz = 50;
	else
		lowhz = 100;
	freq = freq*100 + lowhz;

	freq_len = sprintf(freqbuf,"%04.5f" EOM, ((double)freq)/MHz(1));

	retval = ar3k_transaction (rig, freqbuf, freq_len, NULL, NULL);
	if (retval != RIG_OK)
		return retval;

	return RIG_OK;
}
示例#7
0
文件: tentec.c 项目: airween/hamlib
/*
 * tentec_init:
 * Basically, it just sets up *priv
 */
int tentec_init(RIG *rig)
{
	struct tentec_priv_data *priv;

	priv = (struct tentec_priv_data*)malloc(sizeof(struct tentec_priv_data));

	if (!priv) {
				/* whoops! memory shortage! */
		return -RIG_ENOMEM;
	}

	memset(priv, 0, sizeof(struct tentec_priv_data));

	/*
	 * set arbitrary initial status
	 */
	priv->freq = MHz(10);
	priv->mode = RIG_MODE_AM;
	priv->width = kHz(6);
	priv->pbt = 0;
	priv->cwbfo = 1000;
	priv->agc = RIG_AGC_MEDIUM;	/* medium */
	priv->lnvol = priv->spkvol = 0.0;	/* mute */

	rig->state.priv = (rig_ptr_t)priv;

	/* tentec_tuning_factor_calc needs rig->state.priv */
	tentec_tuning_factor_calc(rig);

	return RIG_OK;
}
示例#8
0
文件: thg71.c 项目: DF4OR/hamlib
/* --------------------------------------------------------------------- */
int thg71_get_mode (RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
    char ackbuf[ACKBUF_LEN];
    int retval;
    int step;
    freq_t freq;

    rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __func__);

	switch (vfo) {
      case RIG_VFO_CURR: break;
      case RIG_VFO_A: break;
	  default:
        rig_debug(RIG_DEBUG_ERR, "%s: Unsupported VFO %d\n", __func__, vfo);
		return -RIG_EVFO;
	}

	/* try to guess from frequency */
  retval = kenwood_transaction(rig, "FQ", ackbuf, sizeof (ackbuf));
        if (retval != RIG_OK)
        return retval;

    sscanf(ackbuf,"FQ %"SCNfreq",%d",&freq,&step);

    if(freq <MHz(136) )  {
		*mode=RIG_MODE_AM;
		*width=kHz(9);
	} else {
		*mode=RIG_MODE_FM;
		*width=kHz(12);
	}

	return RIG_OK;
}
示例#9
0
/*
 * th_set_rptr_offs
 * Assumes rig!=NULL
 */
int
tmd710_set_rptr_offs(RIG *rig, vfo_t vfo, shortfreq_t freq)
{
  int retval;
  tmd710_fo fo_struct;
  long freq5,freq625,freq_sent;
  
  rig_debug(RIG_DEBUG_TRACE, "%s: called\n", __func__);
  
  // if (vfo != RIG_VFO_CURR && vfo != rig->state.current_vfo)
  //   return kenwood_wrong_vfo(__func__, vfo);
  
  retval = tmd710_pull_fo (rig,vfo,&fo_struct);
  if (retval != RIG_OK){
     return retval;
  }

  freq5=round(freq/5000)*5000;
  freq625=round(freq/6250)*6250;
  if (abs(freq5-freq)<abs(freq625-freq)) {
    freq_sent=freq5;
  }
  else {
    freq_sent=freq625;
  }
  /* Step needs to be at least 10kHz on higher band, otherwise 5 kHz */
  fo_struct.offset = freq_sent >= MHz(470) ? (round(freq_sent/10000)*10000) : freq_sent;
  
  retval=tmd710_push_fo (rig, vfo, &fo_struct);
  
  return retval;
}
示例#10
0
文件: icmarine.c 项目: wildj79/hamlib
int icmarine_set_tx_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
	char freqbuf[BUFSZ];

	sprintf(freqbuf, "%.6f", freq/MHz(1));

	return icmarine_transaction (rig, CMD_TXFREQ, freqbuf, NULL);
}
示例#11
0
static void set_memory_clock(unsigned int frequency)
{
	unsigned int reg, divisor;

	/*
	 * Cheok_0509: For SM750LE, the memory clock is fixed.
	 * Nothing to set.
	 */
	if (sm750_get_chip_type() == SM750LE)
		return;

	if (frequency) {
		/*
		 * Set the frequency to the maximum frequency
		 * that the DDR Memory can take which is 336MHz.
		 */
		if (frequency > MHz(336))
			frequency = MHz(336);

		/* Calculate the divisor */
		divisor = DIV_ROUND_CLOSEST(get_mxclk_freq(), frequency);

		/* Set the corresponding divisor in the register. */
		reg = peek32(CURRENT_GATE) & ~CURRENT_GATE_M2XCLK_MASK;
		switch (divisor) {
		default:
		case 1:
			reg |= CURRENT_GATE_M2XCLK_DIV_1;
			break;
		case 2:
			reg |= CURRENT_GATE_M2XCLK_DIV_2;
			break;
		case 3:
			reg |= CURRENT_GATE_M2XCLK_DIV_3;
			break;
		case 4:
			reg |= CURRENT_GATE_M2XCLK_DIV_4;
			break;
		}

		sm750_set_current_gate(reg);
	}
}
示例#12
0
unsigned int getChipClock()
{
    pll_value_t pll;
#if 1
	if(getChipType() == SM750LE)
		return MHz(130);
#endif

    return getPllValue(MXCLK_PLL, &pll);
}
示例#13
0
文件: racal.c 项目: DF4OR/hamlib
/*
 * racal_set_freq
 * Assumes rig!=NULL
 */
int racal_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
	char freqbuf[BUFSZ];
	int freq_len;

	freq_len = sprintf(freqbuf, "F%0g", (double)(freq/MHz(1)));
	if (freq_len < 0)
		return -RIG_ETRUNC;

	return racal_transaction (rig, freqbuf, NULL, NULL);
}
示例#14
0
/*
 * This function set up the master clock (MCLK).
 *
 * Input: Frequency to be set.
 *
 * NOTE:
 *      The maximum frequency the engine can run is 168MHz.
 */
void setMasterClock(unsigned int frequency)
{
    unsigned int ulReg, divisor;
  #if 1
	/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
	if (getChipType() == SM750LE)
		return;
#endif
    if (frequency != 0)
    {
        /* Set the frequency to the maximum frequency that the SM750 engine can
           run, which is about 190 MHz. */
        if (frequency > MHz(190))
            frequency = MHz(190);

        /* Calculate the divisor */
        divisor = (unsigned int) roundedDiv(getChipClock(), frequency);

        /* Set the corresponding divisor in the register. */
        ulReg = PEEK32(CURRENT_GATE);
        switch(divisor)
        {
            default:
            case 3:
                ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_3);
                break;
            case 4:
                ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_4);
                break;
            case 6:
                ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_6);
                break;
            case 8:
                ulReg = FIELD_SET(ulReg, CURRENT_GATE, MCLK, DIV_8);
                break;
        }

        setCurrentGate(ulReg);
    }
}
示例#15
0
static void setMemoryClock(unsigned int frequency)
{
	unsigned int reg, divisor;

	/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
	if (getChipType() == SM750LE)
		return;

	if (frequency) {
		/* Set the frequency to the maximum frequency that the DDR Memory can take
		which is 336MHz. */
		if (frequency > MHz(336))
			frequency = MHz(336);

		/* Calculate the divisor */
		divisor = roundedDiv(get_mxclk_freq(), frequency);

		/* Set the corresponding divisor in the register. */
		reg = PEEK32(CURRENT_GATE) & ~CURRENT_GATE_M2XCLK_MASK;
		switch (divisor) {
		default:
		case 1:
			reg |= CURRENT_GATE_M2XCLK_DIV_1;
			break;
		case 2:
			reg |= CURRENT_GATE_M2XCLK_DIV_2;
			break;
		case 3:
			reg |= CURRENT_GATE_M2XCLK_DIV_3;
			break;
		case 4:
			reg |= CURRENT_GATE_M2XCLK_DIV_4;
			break;
		}

		setCurrentGate(reg);
	}
}
示例#16
0
/*
 * This function set up the master clock (MCLK).
 *
 * Input: Frequency to be set.
 *
 * NOTE:
 *      The maximum frequency the engine can run is 168MHz.
 */
static void setMasterClock(unsigned int frequency)
{
	unsigned int reg, divisor;

	/* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
	if (getChipType() == SM750LE)
		return;

	if (frequency) {
		/* Set the frequency to the maximum frequency that the SM750 engine can
		run, which is about 190 MHz. */
		if (frequency > MHz(190))
			frequency = MHz(190);

		/* Calculate the divisor */
		divisor = roundedDiv(get_mxclk_freq(), frequency);

		/* Set the corresponding divisor in the register. */
		reg = PEEK32(CURRENT_GATE) & ~CURRENT_GATE_MCLK_MASK;
		switch (divisor) {
		default:
		case 3:
			reg |= CURRENT_GATE_MCLK_DIV_3;
			break;
		case 4:
			reg |= CURRENT_GATE_MCLK_DIV_4;
			break;
		case 6:
			reg |= CURRENT_GATE_MCLK_DIV_6;
			break;
		case 8:
			reg |= CURRENT_GATE_MCLK_DIV_8;
			break;
		}

		setCurrentGate(reg);
		}
}
示例#17
0
文件: icmarine.c 项目: wildj79/hamlib
int icmarine_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
{
	char freqbuf[BUFSZ];
	struct icmarine_priv_data *priv;

	priv = (struct icmarine_priv_data*)rig->state.priv;

	sprintf(freqbuf, "%.6f", freq/MHz(1));

	/* no error reporting upon TXFREQ failure */
	if (RIG_SPLIT_OFF == priv->split)
		icmarine_transaction (rig, CMD_TXFREQ, freqbuf, NULL);

	return icmarine_transaction (rig, CMD_RXFREQ, freqbuf, NULL);
}
示例#18
0
MHz calculate_cpu_frequency(){
  
  // We expect the cpu_sampling_irq_handler to push in samples;
  while (_cpu_timestamps.size() < do_samples_)
    OS::halt();
      
  debug("_cpu_sampling_freq_divider_ : %i \n",_cpu_sampling_freq_divider_);
  
  #ifdef DEBUG
  for (auto t : _cpu_timestamps) debug("%lu \n",(uint32_t)t);
  #endif
  
  // Subtract the time it takes to measure time :-)
  auto t1 = OS::cycles_since_boot();
  OS::cycles_since_boot();
  auto t3 = OS::cycles_since_boot();
  auto overhead = (t3 - t1) * 2;
  
  debug ("Overhead: %lu \n", (uint32_t)overhead);
  
  for (size_t i = 1; i < _cpu_timestamps.size(); i++){
    // Compute delta in cycles
    auto cycles = _cpu_timestamps[i] - _cpu_timestamps[i-1] + overhead;
    // Cycles pr. second == Hertz
    auto freq = cycles / (1 / test_frequency().count());
    _cpu_freq_samples.push_back(freq);    
    debug("%lu - %lu = Delta: %lu Current PIT-Freq: %f Hz CPU Freq: %f MHz \n",
	  (uint32_t)_cpu_timestamps[i], (uint32_t)_cpu_timestamps[i-1],
	  (uint32_t)cycles, Hz(test_frequency()), freq);        
  }
  
  
#ifdef DEBUG
  double sum = 0;  
  for (auto freq : _cpu_freq_samples)
    sum += freq;  
  double mean = sum / _cpu_freq_samples.size();
#endif
  
  std::sort(_cpu_freq_samples.begin(), _cpu_freq_samples.end());
  double median = _cpu_freq_samples[_cpu_freq_samples.size() / 2];
  
  debug("<cpu_freq> MEAN: %f MEDIAN: %f \n",mean, median);
  _CPUFreq_ = median;
  
  return MHz(median);
  
}
示例#19
0
static unsigned int get_mxclk_freq(void)
{
	unsigned int pll_reg;
	unsigned int M, N, OD, POD;

	if (getChipType() == SM750LE)
		return MHz(130);

	pll_reg = PEEK32(MXCLK_PLL_CTRL);
	M = (pll_reg & PLL_CTRL_M_MASK) >> PLL_CTRL_M_SHIFT;
	N = (pll_reg & PLL_CTRL_N_MASK) >> PLL_CTRL_M_SHIFT;
	OD = (pll_reg & PLL_CTRL_OD_MASK) >> PLL_CTRL_OD_SHIFT;
	POD = (pll_reg & PLL_CTRL_POD_MASK) >> PLL_CTRL_POD_SHIFT;

	return DEFAULT_INPUT_CLOCK * M / N / (1 << OD) / (1 << POD);
}
示例#20
0
文件: racal.c 项目: DF4OR/hamlib
int racal_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
	char freqbuf[BUFSZ];
	int retval, len;
	double f;

	retval = racal_transaction (rig, "TF", freqbuf, &len);
	if (retval < RIG_OK)
		return retval;

	if (len < 2 || freqbuf[0] != 'F')
		return -RIG_EPROTO;

	sscanf(freqbuf+1, "%lf", &f);
	*freq = (freq_t)f * MHz(1);

	return RIG_OK;
}
示例#21
0
文件: pcr.c 项目: DF4OR/hamlib
/* 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;
	}

	memset(priv, 0x00, sizeof(struct pcr_priv_data));

	/*
	 * FIXME: how can we retrieve initial status?
	 * The protocol doesn't allow this.
	 */
	/* Some values are already at zero due to the memset above,
	 * but we reinitialize here for sake of completeness
	 */
	priv->country		= -1;
	priv->sync		= 0;
	priv->power		= RIG_POWER_OFF;

	priv->main_rcvr.last_att		= 0;
	priv->main_rcvr.last_agc		= 0;
	priv->main_rcvr.last_ctcss_sql	= 0;
	priv->main_rcvr.last_freq		= MHz(145);
	priv->main_rcvr.last_mode		= MD_FM;
	priv->main_rcvr.last_filter	= FLT_15kHz;
	priv->main_rcvr.volume		= 0.25;
	priv->main_rcvr.squelch		= 0.00;

	priv->sub_rcvr = priv->main_rcvr;
	priv->current_vfo = RIG_VFO_MAIN;

	rig->state.priv		= (rig_ptr_t) priv;
	rig->state.transceive	= RIG_TRN_OFF;

	return RIG_OK;
}
示例#22
0
//
//	But for the sdrplay we use the second one
static inline
int16_t	bankFor_sdr (int32_t freq) {
	if (freq < 12 * MHz (1))
	   return 1;
	if (freq < 30 * MHz (1))
	   return 2;
	if (freq < 60 * MHz (1))
	   return 3;
	if (freq < 120 * MHz (1))
	   return 4;
	if (freq < 250 * MHz (1))
	   return 5;
	if (freq < 380 * MHz (1))
	   return 6;
	if (freq < 420 * MHz (1))
	   return -1;
	if (freq < 1000 * MHz (1))
	   return 7;
	return -1;
}
示例#23
0
文件: icmarine.c 项目: wildj79/hamlib
int icmarine_get_tx_freq(RIG *rig, vfo_t vfo, freq_t *freq)
{
	int retval;
	char freqbuf[BUFSZ] = "";
	double d;

	retval = icmarine_transaction (rig, CMD_TXFREQ, NULL, freqbuf);
	if (retval != RIG_OK)
		return retval;

	if (freqbuf[0] == '\0') {
		*freq = 0;
	} else {
		if (sscanf(freqbuf, "%lf", &d) != 1)
			return -RIG_EPROTO;

		*freq = (freq_t)(d*MHz(1));
	}

	return RIG_OK;
}
示例#24
0
static int omap4_uart_init(void)
{
	__u16 div = MHz(48) / 16 / 115200;

	// pad configure
	// TODO: support other uarts
	PAD_WRITEW(PADCONF_UART3_CTS_RCTX, PTU | IEN);
	PAD_WRITEW(PADCONF_UART3_RTS_SD, 0x0);
	PAD_WRITEW(PADCONF_UART3_RX_IRRX, IEN);
	PAD_WRITEW(PADCONF_UART3_TX_IRTX, 0x0);

	// uart init
	UART_WRITEB(IER_REG, 0x00);
	UART_WRITEB(MDR1_REG, 0x7);
	UART_WRITEB(LCR_REG, 0x83);
	UART_WRITEB(DLL_REG, div & 0xff);
	UART_WRITEB(DLH_REG, (div >> 8) & 0xff);
	UART_WRITEB(LCR_REG, 0x3);
	UART_WRITEB(MCR_REG, 0x3);
	UART_WRITEB(FCR_REG, 0x7);
	UART_WRITEB(MDR1_REG, 0x0);

	return 0;
}
示例#25
0
文件: ic7600.c 项目: DF4OR/hamlib
.max_xit =  Hz(9999),
.max_ifshift =  Hz(0),
.targetable_vfo =  0,
.vfo_ops =  IC7600_VFO_OPS,
.scan_ops =  IC7600_SCAN_OPS,
.transceive =  RIG_TRN_RIG,
.bank_qty =   0,
.chan_desc_sz =  0,

.chan_list =  {
	   {   1,  99, RIG_MTYPE_MEM  },
	   { 100, 101, RIG_MTYPE_EDGE },    /* two by two */
	   RIG_CHAN_END,
	},

.rx_range_list1 =   { {kHz(30),MHz(60),IC7600_ALL_RX_MODES,-1,-1,IC7600_VFOS,IC7600_ANTS},
	RIG_FRNG_END, },
.tx_range_list1 =   {
	FRQ_RNG_HF(1,IC7600_OTHER_TX_MODES, W(2),W(100),IC7600_VFOS,IC7600_ANTS),
	FRQ_RNG_6m(1,IC7600_OTHER_TX_MODES, W(2),W(100),IC7600_VFOS,IC7600_ANTS),
	FRQ_RNG_HF(1,IC7600_AM_TX_MODES, W(1),W(30),IC7600_VFOS,IC7600_ANTS),   /* AM class */
	FRQ_RNG_6m(1,IC7600_AM_TX_MODES, W(1),W(30),IC7600_VFOS,IC7600_ANTS),   /* AM class */
    	RIG_FRNG_END, },

.rx_range_list2 =   { {kHz(30),MHz(60),IC7600_ALL_RX_MODES,-1,-1,IC7600_VFOS,IC7600_ANTS},
	RIG_FRNG_END, },
.tx_range_list2 =  {
	FRQ_RNG_HF(2,IC7600_OTHER_TX_MODES, W(2),W(100),IC7600_VFOS,IC7600_ANTS),
	FRQ_RNG_6m(2,IC7600_OTHER_TX_MODES, W(2),W(100),IC7600_VFOS,IC7600_ANTS),
	FRQ_RNG_HF(2,IC7600_AM_TX_MODES, W(1),W(30),IC7600_VFOS,IC7600_ANTS),   /* AM class */
	FRQ_RNG_6m(2,IC7600_AM_TX_MODES, W(1),W(30),IC7600_VFOS,IC7600_ANTS),   /* AM class */
示例#26
0
文件: bcd996t.c 项目: DF4OR/hamlib
.max_xit =  Hz(0),
.max_ifshift =  Hz(0),
.targetable_vfo =  0,
.transceive =  RIG_TRN_OFF,
.bank_qty =   0,
.chan_desc_sz =  0,

.chan_list =  {
		{ 0, 5999, RIG_MTYPE_MEM, {BCD996T_CHANNEL_CAPS} }, /* Really 6000 channels? */
		RIG_CHAN_END,
	},

.rx_range_list1 =  { RIG_FRNG_END, },    /* FIXME: enter region 1 setting */
.tx_range_list1 =  { RIG_FRNG_END, },
.rx_range_list2 =  {
	{MHz(25),MHz(512),BCD996T_MODES,-1,-1,BCD996T_VFO},
	{MHz(764),MHz(776),BCD996T_MODES,-1,-1,BCD996T_VFO},
	{MHz(794),MHz(956),BCD996T_MODES,-1,-1,BCD996T_VFO},
	{MHz(1240),MHz(1300),BCD996T_MODES,-1,-1,BCD996T_VFO}, /* TBC */
	RIG_FRNG_END,
  },
.tx_range_list2 =  { RIG_FRNG_END, },
.tuning_steps =  {
	 {BCD996T_MODES,10},	/* FIXME: add other ts */
	 RIG_TS_END,
	},
        /* mode/filter list, remember: order matters! */
.filters =  {
		{RIG_MODE_AM|RIG_MODE_FM, kHz(8)},
		{RIG_MODE_WFM, kHz(230)},
		RIG_FLT_END,
示例#27
0
文件: dra818.c 项目: dh1tw/hamlib
				  2336, 2418, 2503, 0 },
	.dcs_list =		common_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,
	.transceive =		RIG_TRN_OFF,
	.bank_qty =		0,
	.chan_desc_sz =		0,

	.chan_list =		{ RIG_CHAN_END, },

	.rx_range_list1 = {
		{MHz(400), MHz(480), RIG_MODE_FM, -1, -1, RIG_VFO_RX },
		RIG_FRNG_END,
	},
	.rx_range_list2 = {
		{MHz(400), MHz(480), RIG_MODE_FM, -1, -1, RIG_VFO_RX },
		RIG_FRNG_END,
	},
	.tx_range_list1 = {
		FRQ_RNG_70cm(1, RIG_MODE_FM, W(0.5), W(1), RIG_VFO_TX, RIG_ANT_1 ),
		RIG_FRNG_END,
	},
	.tx_range_list2 = {
		FRQ_RNG_70cm(2, RIG_MODE_FM, W(0.5), W(1), RIG_VFO_TX, RIG_ANT_1 ),
		RIG_FRNG_END,
	},
示例#28
0
文件: ic9100.c 项目: DF4OR/hamlib
.max_ifshift =  Hz(0),
.targetable_vfo =  0,
.vfo_ops =  IC9100_VFO_OPS,
.scan_ops =  IC9100_SCAN_OPS,
.transceive =  RIG_TRN_RIG,
.bank_qty =   0,
.chan_desc_sz =  9, /* TODO */

.chan_list =  { /* TBC */
    {   1, 396, RIG_MTYPE_MEM  },
    { 397, 400, RIG_MTYPE_CALL },
    { 401, 424, RIG_MTYPE_EDGE },
    RIG_CHAN_END, },

.rx_range_list1 =   { /* Europe */
    {kHz(30),MHz(60),IC9100_MODES,-1,-1,IC9100_VFO_ALL,IC9100_HF_ANTS},
    {kHz(136),MHz(174),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_3},
    {MHz(420),MHz(480),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_4},
    {MHz(1240),MHz(1320),IC9100_MODES,-1,-1,IC9100_VFO_ALL,RIG_ANT_5},
    RIG_FRNG_END, },
.tx_range_list1 =  {
    FRQ_RNG_HF(1,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS),
    FRQ_RNG_HF(1,RIG_MODE_AM, W(2),W(25),IC9100_VFO_ALL,IC9100_HF_ANTS), /* only HF */
    FRQ_RNG_6m(1,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,IC9100_HF_ANTS),
    FRQ_RNG_2m(1,IC9100_OTHER_TX_MODES, W(2),W(100),IC9100_VFO_ALL,RIG_ANT_3),
    FRQ_RNG_70cm(1,IC9100_OTHER_TX_MODES, W(2),W(75),IC9100_VFO_ALL,RIG_ANT_4),
    /* option */
    FRQ_RNG_23cm_REGION1(IC9100_OTHER_TX_MODES, W(1),W(10),IC9100_VFO_ALL,RIG_ANT_5),
    RIG_FRNG_END, },

.rx_range_list2 =   {  /* USA */
示例#29
0
文件: os456.c 项目: W4AQL/hamlib
.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 =  OS456_SCAN_OPS,
.transceive =  RIG_TRN_RIG,
.bank_qty =   0,
.chan_desc_sz =  0,

.chan_list =  { RIG_CHAN_END, },

.rx_range_list1 =   {
	{ MHz(25),MHz(520),OS456_MODES,-1,-1,OS456_VFO_ALL},
	{ MHz(760),MHz(1300),OS456_MODES,-1,-1,OS456_VFO_ALL},
	RIG_FRNG_END, },
.tx_range_list1 =  { RIG_FRNG_END, },		/* this is a scanner */

.rx_range_list2 =   {
	{ MHz(25),MHz(520),OS456_MODES,-1,-1,OS456_VFO_ALL},
	{ MHz(760),MHz(823.995),OS456_MODES,-1,-1,OS456_VFO_ALL},
	{ MHz(849),MHz(868.995),OS456_MODES,-1,-1,OS456_VFO_ALL},
	{ MHz(894),MHz(1300),OS456_MODES,-1,-1,OS456_VFO_ALL},
	RIG_FRNG_END, },
.tx_range_list2 =  { RIG_FRNG_END, },		/* this is a scanner */

.tuning_steps = 	{
	 {OS456_MODES,kHz(5)},
	 {OS456_MODES,kHz(12.5)},
示例#30
0
文件: ft1000d.c 项目: DF4OR/hamlib
  .attenuator =         { RIG_DBLST_END, },
  .max_rit =            Hz(9999),
  .max_xit =            Hz(9999),
  .max_ifshift =        Hz(1200),
  .vfo_ops =            RIG_OP_CPY | RIG_OP_FROM_VFO | RIG_OP_TO_VFO |
                        RIG_OP_UP | RIG_OP_DOWN | RIG_OP_TUNE | RIG_OP_TOGGLE,
  .targetable_vfo =     RIG_TARGETABLE_ALL,
  .transceive =         RIG_TRN_OFF,        /* Yaesus have to be polled, sigh */
  .bank_qty =           0,
  .chan_desc_sz =       0,
  .chan_list =          {
                          {1, 99, RIG_MTYPE_MEM, FT1000D_MEM_CAP},
                           RIG_CHAN_END,
                        },
  .rx_range_list1 =     {
    {kHz(100), MHz(30), FT1000D_ALL_RX_MODES, -1, -1, FT1000D_VFO_ALL, FT1000D_ANTS},   /* General coverage + ham */
    RIG_FRNG_END,
  },

  .tx_range_list1 =     {
        FRQ_RNG_HF(1, FT1000D_OTHER_TX_MODES, W(5), W(100), FT1000D_VFO_ALL, FT1000D_ANTS),
        FRQ_RNG_HF(1, FT1000D_AM_TX_MODES, W(2), W(25), FT1000D_VFO_ALL, FT1000D_ANTS), /* AM class */
    RIG_FRNG_END,
  },

  .rx_range_list2 =     {
    {kHz(100), MHz(30), FT1000D_ALL_RX_MODES, -1, -1, FT1000D_VFO_ALL, FT1000D_ANTS},
    RIG_FRNG_END,
  },

  .tx_range_list2 =     {