示例#1
0
文件: aor.c 项目: airween/hamlib
/*
 * parse8k_aor_mode * don't care about aorwidth,
 * because there's no such BW command
 */
int parse8k_aor_mode(RIG *rig, char aormode, char aorwidth, rmode_t *mode, pbwidth_t *width)
{
	*width = RIG_PASSBAND_NORMAL;
	switch (aormode) {
		case AR8K_AM:		*mode = RIG_MODE_AM; break;
		case AR8K_NAM:
			*mode = RIG_MODE_AM;
			*width = rig_passband_narrow(rig, *mode);
			break;
		case AR8K_WAM:
			*mode = RIG_MODE_AM;
			*width = rig_passband_wide(rig, *mode);
			break;
		case AR8K_CW:		*mode = RIG_MODE_CW; break;
		case AR8K_USB:	*mode = RIG_MODE_USB; break;
		case AR8K_LSB:	*mode = RIG_MODE_LSB; break;
		case AR8K_WFM:	*mode = RIG_MODE_WFM; break;
		case AR8K_NFM:	*mode = RIG_MODE_FM; break;
		case AR8K_SFM:
			*mode = RIG_MODE_FM;
			*width = rig_passband_narrow(rig, *mode);
			break;
		default:
			rig_debug(RIG_DEBUG_ERR,"%s: unsupported mode '%c'\n",
					__FUNCTION__, aormode);
			return -RIG_EINVAL;
	}
	if (*width == RIG_PASSBAND_NORMAL)
		*width = rig_passband_normal(rig, *mode);

	return RIG_OK;
}
示例#2
0
文件: ft857.c 项目: jessicalh/hamlib
static void get_mode(RIG *rig, struct ft857_priv_data *priv, rmode_t *mode, pbwidth_t *width) {
  switch (priv->fm_status[4] & 0x7f) {
  case 0x00:
    *mode = RIG_MODE_LSB;
    break;
  case 0x01:
    *mode = RIG_MODE_USB;
    break;
  case 0x02:
    *mode = RIG_MODE_CW;
    break;
  case 0x03:
    *mode = RIG_MODE_CWR;
    break;
  case 0x04:
    *mode = RIG_MODE_AM;
    break;
  case 0x06:
    *mode = RIG_MODE_WFM;
    break;
  case 0x08:
    *mode = RIG_MODE_FM;
    break;
  case 0x0a:
    switch (priv->fm_status[5])
      {
      case FT857_DIGI_RTTY_L: *mode = RIG_MODE_RTTY; break;
      case FT857_DIGI_RTTY_U: *mode = RIG_MODE_RTTYR; break;
      case FT857_DIGI_PSK_L: *mode = RIG_MODE_PKTLSB; break;
      case FT857_DIGI_PSK_U: *mode = RIG_MODE_PKTUSB; break;
      case FT857_DIGI_USER_L: *mode = RIG_MODE_PKTLSB; break;
      case FT857_DIGI_USER_U: *mode = RIG_MODE_PKTUSB; break;
      }
    break;
  case 0x0c:
    *mode = RIG_MODE_PKTFM;
    break;
  default:
    *mode = RIG_MODE_NONE;
  }

	if (priv->fm_status[4] & 0x80) /* narrow */
		{
			*width = rig_passband_narrow (rig, *mode);
		}
	else
		{
			*width = RIG_PASSBAND_NORMAL;
		}
}
示例#3
0
文件: frg100.c 项目: DF4OR/hamlib
int rig2mode(RIG *rig, int md, rmode_t *mode, pbwidth_t *width)
{
  /*
   * translate mode from frg100 specific to generic
   */
  switch(md) {
  case MODE_USB:	*mode = RIG_MODE_USB; break;
  case MODE_LSB:	*mode = RIG_MODE_LSB; break;
  case MODE_AMW:
  case MODE_AMN:	*mode = RIG_MODE_AM; break;
  case MODE_FMW:
  case MODE_FMN:	*mode = RIG_MODE_FM; break;
  case MODE_CWW:
  case MODE_CWN:	*mode = RIG_MODE_CW; break;
  default:
    return -RIG_EINVAL;         /* sorry, wrong MODE */
  }
  if (md == MODE_CWN || md == MODE_AMN || md == MODE_FMN)
	*width = rig_passband_narrow(rig, *mode);
  else
	*width = rig_passband_normal(rig, *mode);

  return RIG_OK;
}
示例#4
0
文件: testrig.c 项目: airween/hamlib
int main(int argc, char *argv[])
{
    RIG *my_rig;        /* handle to rig (nstance) */
    freq_t freq;        /* frequency  */
    rmode_t rmode;      /* radio mode of operation */
    pbwidth_t width;
    vfo_t vfo;          /* vfo selection */
    int strength;       /* S-Meter level */
    int rit = 0;        /* RIT status */
    int xit = 0;        /* XIT status */
    int retcode;        /* generic return code from functions */

    rig_model_t myrig_model;


    printf("testrig: Hello, I am your main() !\n");

    /* Turn off backend debugging ouput */
    rig_set_debug_level(RIG_DEBUG_NONE);

    /*
     * allocate memory, setup & open port
     */

    if (argc < 2)
    {
        hamlib_port_t myport;
        /* may be overriden by backend probe */
        myport.type.rig = RIG_PORT_SERIAL;
        myport.parm.serial.rate = 9600;
        myport.parm.serial.data_bits = 8;
        myport.parm.serial.stop_bits = 1;
        myport.parm.serial.parity = RIG_PARITY_NONE;
        myport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
        strncpy(myport.pathname, SERIAL_PORT, FILPATHLEN - 1);

        rig_load_all_backends();
        myrig_model = rig_probe(&myport);
    }
    else
    {
        myrig_model = atoi(argv[1]);
    }

    my_rig = rig_init(myrig_model);

    if (!my_rig)
    {
        fprintf(stderr, "Unknown rig num: %d\n", myrig_model);
        fprintf(stderr, "Please check riglist.h\n");
        exit(1); /* whoops! something went wrong (mem alloc?) */
    }

    strncpy(my_rig->state.rigport.pathname, SERIAL_PORT, FILPATHLEN - 1);

    retcode = rig_open(my_rig);

    if (retcode != RIG_OK)
    {
        printf("rig_open: error = %s\n", rigerror(retcode));
        exit(2);
    }

    printf("Port %s opened ok\n", SERIAL_PORT);

    /*
     * Below are examples of set/get routines.
     * Must add checking of functionality map prior to command execution -- FS
     *
     */

    /*
     * Example of setting rig paameters
     * and some error checking on the return code.
     */

    retcode = rig_set_vfo(my_rig, RIG_VFO_B);


    if (retcode != RIG_OK)
    {
        printf("rig_set_vfo: error = %s \n", rigerror(retcode));
    }


    /*
     * Lets try some frequencies and modes. Return code is not checked.
     * Examples of checking return code are further down.
     *
     */

    /* 10m FM Narrow */

    printf("\nSetting 10m FM Narrow...\n");

    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 29620000); /* 10m */
    retcode = rig_set_mode(my_rig, RIG_VFO_CURR, RIG_MODE_FM,
                           rig_passband_narrow(my_rig, RIG_MODE_FM));

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.6f MHz, Mode: %s, Passband: %.3f kHz\n\n",
           freq / 1000000,
           rig_strrmode(rmode),
           width / 1000.0);

    sleep(1);       /* so you can see it -- FS */

    /* 15m USB */

    printf("Setting 15m USB...\n");

    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 21235175); /* 15m  */
    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_USB,
                           rig_passband_normal(my_rig, RIG_MODE_USB));

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.6f MHz, Mode: %s, Passband: %.3f kHz\n\n",
           freq / 1000000, rig_strrmode(rmode), width / 1000.0);
    sleep(1);

    /* 40m LSB */

    printf("Setting 40m LSB...\n");

    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 7250100); /* 40m  */
    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_LSB,
                           RIG_PASSBAND_NORMAL);

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.6f MHz, Mode: %s, Passband: %.3f kHz\n\n",
           freq / 1000000,
           rig_strrmode(rmode),
           width / 1000.0);
    sleep(1);

    /* 80m AM Narrow */

    printf("Setting 80m AM Narrow...\n");

    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 3885000); /* 80m  */
    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_AM,
                           rig_passband_narrow(my_rig, RIG_MODE_AM));

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.6f MHz, Mode: %s, Passband: %.3f kHz\n\n",
           freq / 1000000,
           rig_strrmode(rmode),
           width / 1000.0);

    sleep(1);

    /* 160m CW Normal */

    printf("Setting 160m CW...\n");

    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 1875000); /* 160m  */
    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_CW,
                           RIG_PASSBAND_NORMAL);

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.3f kHz, Mode: %s, Passband: %li Hz\n\n",
           freq / 1000,
           rig_strrmode(rmode),
           width);

    sleep(1);

    /* 160m CW Narrow -- The band is noisy tonight -- FS*/

    printf("Setting 160m CW Narrow...\n");

    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_CW,
                           rig_passband_narrow(my_rig, RIG_MODE_CW));

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.3f kHz, Mode: %s, Passband: %li Hz\n\n",
           freq / 1000,
           rig_strrmode(rmode),
           width);

    sleep(1);

    /* AM Broadcast band */

    printf("Setting Medium Wave AM...\n");

    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 770000); /* KAAM */
    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_AM,
                           RIG_PASSBAND_NORMAL);

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    printf(" Freq: %.3f kHz, Mode: %s, Passband: %.3f kHz\n\n",
           freq / 1000,
           rig_strrmode(rmode),
           width / 1000.0);

    sleep(1);

    /* 20m USB on VFO_A */

    printf("Setting 20m on VFO A with two functions...\n");

    retcode = rig_set_vfo(my_rig, RIG_VFO_A);
    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 14250375); /* cq de vk3fcs */

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_vfo(my_rig, &vfo);

    printf(" Freq: %.6f MHz, VFO: %s\n\n", freq / 1000000, rig_strvfo(vfo));

    sleep(1);

    /* 20m USB on VFO_A , with only 1 call */

    printf("Setting  20m on VFO A with one function...\n");
    retcode = rig_set_freq(my_rig, RIG_VFO_A, 14295125); /* cq de vk3fcs */

    if (retcode != RIG_OK)
    {
        printf("rig_set_freq: error = %s \n", rigerror(retcode));
    }

    rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
    rig_get_vfo(my_rig, &vfo);

    printf(" Freq: %.6f MHz, VFO: %s\n\n", freq / 1000000, rig_strvfo(vfo));

    sleep(1);


#if 0
    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 145100000); /* 2m  */
    sleep(2);
    retcode = rig_set_freq(my_rig, RIG_VFO_CURR, 435125000); /* 70cm  */
    sleep(2);
#endif

    printf("Setting rig Mode to LSB.\n");
    retcode = rig_set_mode(my_rig,
                           RIG_VFO_CURR,
                           RIG_MODE_LSB,
                           RIG_PASSBAND_NORMAL);

    if (retcode != RIG_OK)
    {
        printf("rig_set_mode: error = %s \n", rigerror(retcode));
    }

    sleep(1);

    printf("Setting rig PTT ON.\n");
    retcode = rig_set_ptt(my_rig, RIG_VFO_A, RIG_PTT_ON);  /* stand back ! */

    if (retcode != RIG_OK)
    {
        printf("rig_set_ptt: error = %s \n", rigerror(retcode));
    }

    sleep(1);

    printf("Setting rig PTT OFF.\n");
    retcode = rig_set_ptt(my_rig, RIG_VFO_A, RIG_PTT_OFF);  /* phew ! */

    if (retcode != RIG_OK)
    {
        printf("rig_set_ptt: error = %s \n", rigerror(retcode));
    }

    sleep(1);

    /*
     * Simple examples of getting rig information -- FS
     *
     */

    printf("\nGet various raw rig values:\n");
    retcode = rig_get_vfo(my_rig, &vfo); /* try to get vfo info */

    if (retcode == RIG_OK)
    {
        printf("rig_get_vfo: vfo = %i \n", vfo);
    }
    else
    {
        printf("rig_get_vfo: error =  %s \n", rigerror(retcode));
    }

    retcode = rig_get_freq(my_rig, RIG_VFO_CURR, &freq);

    if (retcode == RIG_OK)
    {
        printf("rig_get_freq: freq = %"PRIfreq"\n", freq);
    }
    else
    {
        printf("rig_get_freq: error =  %s \n", rigerror(retcode));
    }

    retcode = rig_get_mode(my_rig, RIG_VFO_CURR, &rmode, &width);

    if (retcode == RIG_OK)
    {
        printf("rig_get_mode: mode = %"PRIll"\n", rmode);
    }
    else
    {
        printf("rig_get_mode: error =  %s \n", rigerror(retcode));
    }

    retcode = rig_get_strength(my_rig, RIG_VFO_CURR, &strength);

    if (retcode == RIG_OK)
    {
        printf("rig_get_strength: strength = %i \n", strength);
    }
    else
    {
        printf("rig_get_strength: error =  %s \n", rigerror(retcode));
    }

    if (rig_has_set_func(my_rig, RIG_FUNC_RIT))
    {
        retcode = rig_set_func(my_rig, RIG_VFO_CURR, RIG_FUNC_RIT, 1);
        printf("rig_set_func: Setting RIT ON\n");
    }

    if (rig_has_get_func(my_rig, RIG_FUNC_RIT))
    {
        retcode = rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_RIT, &rit);
        printf("rig_get_func: RIT: %d\n", rit);
    }

    if (rig_has_set_func(my_rig, RIG_FUNC_XIT))
    {
        retcode = rig_set_func(my_rig, RIG_VFO_CURR, RIG_FUNC_XIT, 1);
        printf("rig_set_func: Setting XIT ON\n");
    }

    if (rig_has_get_func(my_rig, RIG_FUNC_XIT))
    {
        retcode = rig_get_func(my_rig, RIG_VFO_CURR, RIG_FUNC_XIT, &xit);
        printf("rig_get_func: XIT: %d\n", xit);
    }

    rig_close(my_rig); /* close port */
    rig_cleanup(my_rig); /* if you care about memory */

    printf("port %s closed ok \n", SERIAL_PORT);

    return 0;
}
示例#5
0
文件: ft847.c 项目: dh1tw/hamlib
int ft847_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) {
  unsigned char cmd_index;	/* index of sequence to send */
  struct rig_state *rs = &rig->state;
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  int ret;

  /*
   * translate mode from generic to ft847 specific
   */

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: generic mode = %x \n", mode);


  switch(mode) {
  case RIG_MODE_AM:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_AM;
    break;
  case RIG_MODE_CW:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CW;
    break;
  case RIG_MODE_CWR:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CWR;
    break;
  case RIG_MODE_USB:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_USB;
    break;
  case RIG_MODE_LSB:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_LSB;
    break;
  case RIG_MODE_FM:
    cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_FM;
    break;
  default:
    return -RIG_EINVAL;		/* sorry, wrong MODE */
  }


  /*
   * Now set width
   */
  if (width != RIG_PASSBAND_NOCHANGE) {
    if (width == rig_passband_narrow(rig, mode)) {
      switch(mode) {
      case RIG_MODE_AM:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_AMN;
        break;
      case RIG_MODE_FM:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_FMN;
        break;
      case RIG_MODE_CW:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CWN;
        break;
      case RIG_MODE_CWR:
        cmd_index = FT_847_NATIVE_CAT_SET_MODE_MAIN_CWRN;
        break;
      case RIG_MODE_USB:
      case RIG_MODE_LSB:
        break;
      default:
        rig_debug(RIG_DEBUG_ERR,"%s: unsupported mode/width: %s/%d, narrow: %d\n",
                  __FUNCTION__, rig_strrmode(mode), width,
                  rig_passband_narrow(rig, mode));
        return -RIG_EINVAL;		/* sorry, wrong MODE/WIDTH combo  */
      }
    } else {
  		if (width != RIG_PASSBAND_NORMAL &&
          width != rig_passband_normal(rig, mode)) {
        return -RIG_EINVAL;		/* sorry, wrong MODE/WIDTH combo  */
      }
    }
  }

  /*
   * Now send the command
   */
  ret = opcode_vfo(rig, p_cmd, cmd_index, vfo);
  if (ret != RIG_OK)
	  return ret;

  return write_block(&rs->rigport, (char*)p_cmd, YAESU_CMD_LENGTH);
}
示例#6
0
文件: ft847.c 项目: dh1tw/hamlib
static int get_freq_and_mode(RIG *rig, vfo_t vfo, freq_t *freq, rmode_t *mode,
				pbwidth_t *width) {
  struct rig_state *rs = &rig->state;
  unsigned char p_cmd[YAESU_CMD_LENGTH]; /* sequence to send */
  unsigned char cmd_index;	/* index of sequence to send */
  unsigned char data[8];
  int n;

  rig_debug(RIG_DEBUG_VERBOSE,"ft847: %s vfo =%s \n",
		  __func__, rig_strvfo(vfo));

  cmd_index = FT_847_NATIVE_CAT_GET_FREQ_MODE_STATUS_MAIN;

  memcpy(p_cmd,&ncmd[cmd_index].nseq,YAESU_CMD_LENGTH);

  /* change opcode according to vfo */
  n = opcode_vfo(rig, p_cmd, cmd_index, vfo);
  if (n != RIG_OK)
	  return n;

  n = write_block(&rs->rigport, (char *) p_cmd, YAESU_CMD_LENGTH);
  if (n < 0)
    return n;

  n = read_block(&rs->rigport, (char *) data, YAESU_CMD_LENGTH);
  if (n != YAESU_CMD_LENGTH) {
  		rig_debug(RIG_DEBUG_ERR,"ft847: read_block returned %d\n", n);
		return n < 0 ? n : -RIG_EPROTO;
  }

	/* Remember, this is 10Hz resolution */
  *freq = 10*from_bcd_be(data, 8);

  *width = RIG_PASSBAND_NORMAL;
  switch (data[4]) {
  case MD_LSB: *mode = RIG_MODE_LSB; break;
  case MD_USB: *mode = RIG_MODE_USB; break;

  case MD_CWN:
		*width = rig_passband_narrow(rig, RIG_MODE_CW);
  case MD_CW:
		*mode = RIG_MODE_CW;
		break;

  case MD_CWNR:
		*width = rig_passband_narrow(rig, RIG_MODE_CW);
  case MD_CWR:
		*mode = RIG_MODE_CWR;
		break;

  case MD_AMN:
		*width = rig_passband_narrow(rig, RIG_MODE_AM);
  case MD_AM:
		*mode = RIG_MODE_AM;
		break;

  case MD_FMN:
		*width = rig_passband_narrow(rig, RIG_MODE_FM);
  case MD_FM:
		*mode = RIG_MODE_FM;
		break;
  default:
    *mode = RIG_MODE_NONE;
    rig_debug(RIG_DEBUG_VERBOSE,"ft847: Unknown mode %02x\n", data[4]);
  }
  if (*width == RIG_PASSBAND_NORMAL)
		  *width = rig_passband_normal(rig, *mode);

  return RIG_OK;
}
示例#7
0
文件: k3.c 项目: JohannesKlug/hamlib
int k3_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
{
	rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__);

	if (!rig)
		return -RIG_EINVAL;

	int err;
	char cmd_s[16];

	switch (mode) {
	case RIG_MODE_PKTLSB:
		mode = RIG_MODE_RTTYR;
		strncpy(cmd_s, "DT0", 5);
		break;
	case RIG_MODE_PKTUSB:
		mode = RIG_MODE_RTTY;
		strncpy(cmd_s, "DT0", 5);
		break;
	case RIG_MODE_RTTY:
	case RIG_MODE_RTTYR:
		strncpy(cmd_s, "DT1", 5);
		break;
	default:
		break;
	}

	/* kenwood_set_mode() ignores width value for K2/K3/TS-570 */
	err = kenwood_set_mode(rig, vfo, mode, width);
	if (err != RIG_OK)
		return err;

	/* Now set data sub-mode.  K3 needs to be in a DATA mode before setting
	 * the sub-mode.
	 */
	if (mode == RIG_MODE_PKTLSB || mode == RIG_MODE_PKTUSB
		|| mode == RIG_MODE_RTTY || mode == RIG_MODE_RTTYR) {
		err = kenwood_simple_cmd(rig, cmd_s);
		if (err != RIG_OK)
			return err;
	}

	/* and set the requested bandwidth.  On my K3, the bandwidth is rounded
	 * down to the nearest 50 Hz, i.e. sending BW0239; will cause the bandwidth
	 * to be set to 2.350 kHz.  As the width must be divided by 10, 10 Hz values
	 * between 0 and 4 round down to the nearest 100 Hz and values between 5
	 * and 9 round down to the nearest 50 Hz.
	 *
	 * width string value must be padded with leading '0' to equal four
	 * characters.
	 */

	/* passband widths vary by mode so gather lower and upper limits */
	pbwidth_t pb_nar = rig_passband_narrow(rig, mode);
	pbwidth_t pb_wid = rig_passband_wide(rig, mode);

	if (width < 0)
		width = labs(width);

	if (width == RIG_PASSBAND_NORMAL)
		width = rig_passband_normal(rig, mode);
	else if (width < pb_nar)
		width = pb_nar;
	else if (width > pb_wid)
		width = pb_wid;

	sprintf(cmd_s, "BW%04ld", width / 10);
	err = kenwood_simple_cmd(rig, cmd_s);
	if (err != RIG_OK)
		return err;

	return RIG_OK;
}
示例#8
0
文件: ft817.c 项目: GomSpace/hamlib
int ft817_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
{
    struct ft817_priv_data *p = (struct ft817_priv_data *) rig->state.priv;
    int n;

    if (vfo != RIG_VFO_CURR)
        return -RIG_ENTARGET;

    if (check_cache_timeout(&p->fm_status_tv))
        if ((n = ft817_get_status(rig, FT817_NATIVE_CAT_GET_FREQ_MODE_STATUS)) < 0)
            return n;

    /* set normal width now, narrow will override this later */
    *width = RIG_PASSBAND_NORMAL;

    switch (p->fm_status[4]) {
    case 0x00:
        *mode = RIG_MODE_LSB;
        break;
    case 0x01:
        *mode = RIG_MODE_USB;
        break;
    case 0x02:
        *mode = RIG_MODE_CW;
        break;
    case 0x03:
        *mode = RIG_MODE_CWR;
        break;
    case 0x04:
        *mode = RIG_MODE_AM;
        break;
    case 0x06:
        *mode = RIG_MODE_WFM;
        break;
    case 0x08:
        *mode = RIG_MODE_FM;
        break;
    case 0x0A:
        *mode = RIG_MODE_RTTY;
        break;
    case 0x0C:
        *mode = RIG_MODE_PKTFM;
        break;

    /* "extra modes" which are not documented in the manual */
    case 0x82:
        *mode = RIG_MODE_CW;
        *width = rig_passband_narrow (rig, RIG_MODE_CW);
        break;
    case 0x83:
        *mode = RIG_MODE_CWR;
        *width = rig_passband_narrow (rig, RIG_MODE_CW);
        break;
    case 0x8A:
        *mode = RIG_MODE_RTTY;
        *width = rig_passband_narrow (rig, RIG_MODE_CW);
        break;

    default:
        *mode = RIG_MODE_NONE;
    }


    return RIG_OK;
}