예제 #1
0
파일: thd72.c 프로젝트: mdblack98/hamlib
static int thd72_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
{
  int retval;
  char c;

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

  switch (func)
  {
  case RIG_FUNC_AIP:
    retval = thd72_vfoc(rig, vfo, &c);

    if (retval != RIG_OK)
    {
      return retval;
    }

    return thd72_set_menu_item(rig, c == '0' ? 5 : 6, status);

  case RIG_FUNC_ARO:
    return thd72_set_menu_item(rig, 18, status);

  case RIG_FUNC_TONE:
    return thd72_set_freq_item(rig, vfo, 22, status);

  case RIG_FUNC_TSQL:
    return thd72_set_freq_item(rig, vfo, 24, status);

  default:
    return -RIG_EINVAL;
  }

  return RIG_OK;
}
예제 #2
0
파일: thd72.c 프로젝트: mdblack98/hamlib
static int thd72_get_mem(RIG *rig, vfo_t vfo, int *ch)
{
  int retval;
  char c, cmd[10], buf[10];

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

  retval = thd72_vfoc(rig, vfo, &c);

  if (retval != RIG_OK)
  {
    return retval;
  }

  sprintf(cmd, "MR %c", c);
  retval = kenwood_transaction(rig, cmd, buf, sizeof(buf));

  if (retval != RIG_OK)
  {
    return retval;
  }

  sscanf(buf + 5, "%d", ch);
  return RIG_OK;
}
예제 #3
0
파일: thd72.c 프로젝트: airween/hamlib
static int thd72_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
{
    int retval, f;
    char c;

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

    switch (func) {
	case RIG_FUNC_AIP:
	    retval = thd72_vfoc(rig, vfo, &c);
	    if (retval != RIG_OK)
		return retval;
	    retval = thd72_get_menu_item(rig, c == '0'?5:6, 1, &f);
	    break;
	case RIG_FUNC_ARO:
	    retval = thd72_get_menu_item(rig, 18, 1, &f);
	    break;
	case RIG_FUNC_TONE:
	    retval = thd72_get_freq_item(rig, vfo, 22, 1, &f);
	    break;
	case RIG_FUNC_TSQL:
	    retval = thd72_get_freq_item(rig, vfo, 24, 1, &f);
	    break;
	default:
	    retval = -RIG_EINVAL;
    }
    if (retval != RIG_OK)
	return retval;
    *status = f;
    return RIG_OK;
}
예제 #4
0
파일: thd72.c 프로젝트: airween/hamlib
static int thd72_get_freq_info(RIG *rig, vfo_t vfo, char *buf)
{
    int retval;
    char c, cmd[8];

    retval = thd72_vfoc(rig, vfo, &c);
    if (retval != RIG_OK)
	return retval;
    sprintf(cmd, "FO %c", c);
    retval = kenwood_transaction(rig, cmd, buf, 53);
    return RIG_OK;
}
예제 #5
0
파일: thd72.c 프로젝트: mdblack98/hamlib
static int thd72_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
{
  int retval, lvl;
  char c, lvlc, cmd[10];

  rig_debug(RIG_DEBUG_TRACE, "%s: called VFO=%s, level=%s, val=%g\n", __func__,
            rig_strvfo(vfo), rig_strlevel(level), val.f);

  retval = thd72_vfoc(rig, vfo, &c);

  if (retval != RIG_OK)
  {
    return retval;
  }

  switch (level)
  {
  case RIG_LEVEL_RFPOWER:
    if (val.f <= 0.01) { lvlc = '2'; }
    else if (val.f <= 0.10) { lvlc = '1'; }
    else { lvlc = '0'; }

    sprintf(cmd, "PC %c,%c", c, lvlc);
    return kenwood_simple_transaction(rig, cmd, 6);

  case RIG_LEVEL_VOXGAIN:
    return thd72_set_menu_item(rig, 8, (int)(val.f * 10.0 - 0.5));

  case RIG_LEVEL_VOXDELAY:
    if (val.i > 20000) { lvl = 6; }
    else if (val.i > 10000) { lvl = val.i / 10000 + 3; }
    else { lvl = val.i / 2500; }

    return thd72_set_menu_item(rig, 9, lvl);

  case RIG_LEVEL_SQL:
    lvlc = '0' + (int)(val.f * 5);
    sprintf(cmd, "PC %c,%c", c, lvlc);
    return kenwood_simple_transaction(rig, cmd, 6);

  case RIG_LEVEL_BALANCE:
    /* FIXME - is balance 0.0 .. 1.0 or -1.0 .. 1.0? */
    lvl = (int)(val.f * 4.0);
    return thd72_set_menu_item(rig, 13, lvl);

  default:
    rig_debug(RIG_DEBUG_ERR, "%s: Unsupported Level %d\n", __func__, level);
    return -RIG_EINVAL;
  }

  return retval;
}
예제 #6
0
파일: thd72.c 프로젝트: airween/hamlib
static int thd72_set_mem(RIG *rig, vfo_t vfo, int ch)
{
    int retval;
    char c, cmd[10];

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

    retval = thd72_vfoc(rig, vfo, &c);
    if (retval != RIG_OK)
	return retval;
    sprintf(cmd, "MR %c,%03d", c, ch);
    return kenwood_simple_transaction(rig, cmd, 10);
}
예제 #7
0
파일: thd72.c 프로젝트: mdblack98/hamlib
static int thd72_get_freq_info(RIG *rig, vfo_t vfo, char *buf)
{
  int retval;
  char c, cmd[8];

  rig_debug(RIG_DEBUG_TRACE, "%s: called VFO=%s\n", __func__, rig_strvfo(vfo));
  retval = thd72_vfoc(rig, vfo, &c);

  if (retval != RIG_OK)
  {
    return retval;
  }

  sprintf(cmd, "FO %c", c);
  retval = kenwood_transaction(rig, cmd, buf, 53);
  return RIG_OK;
}
예제 #8
0
파일: thd72.c 프로젝트: mdblack98/hamlib
static int thd72_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
{
  int retval, v, l;
  char c, cmd[10], buf[48];

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

  retval = thd72_vfoc(rig, vfo, &c);

  if (retval != RIG_OK)
  {
    return retval;
  }

  switch (level)
  {
  case RIG_LEVEL_RFPOWER:
    sprintf(cmd, "PC %c", c);
    retval = kenwood_transaction(rig, cmd, buf, sizeof(buf));

    if (retval != RIG_OK)
    {
      return retval;
    }

    retval = sscanf(buf, "PC %d,%d", &v, &l);

    if (retval != 2 || l < 0 || l > 3)
    {
      rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __func__, buf);
      return -RIG_ERJCTED;
    }

    switch (l)
    {
    case 0: val->f = 1.00; break; /* 5.0 W */

    case 1: val->f = 0.10; break; /* 500 mW */

    case 2: val->f = 0.01; break; /* 50 mW */
    }

    break;

  case RIG_LEVEL_VOXGAIN:
    retval = thd72_get_menu_item(rig, 8, 9, &l);

    if (retval != RIG_OK)
    {
      return retval;
    }

    /* FIXME - if VOX is off, what do we return */
    val->f = l / 9.0;
    break;

  case RIG_LEVEL_VOXDELAY:
    retval = thd72_get_menu_item(rig, 9, 7, &l);

    if (retval != RIG_OK)
    {
      return retval;
    }

    /* FIXME - if VOX is off, what do we return */
    val->i = thd72voxdelay[l];
    break;

  case RIG_LEVEL_SQL:
    sprintf(cmd, "SQ %c", c);
    retval = kenwood_transaction(rig, cmd, buf, sizeof(buf));

    if (retval != RIG_OK)
    {
      return retval;
    }

    retval = sscanf(buf, "SQ %d,%d", &v, &l);

    if (retval != 2 || l < 0 || l > 6)
    {
      rig_debug(RIG_DEBUG_ERR, "%s: Unexpected reply '%s'\n", __func__, buf);
      return -RIG_ERJCTED;
    }

    val->f = thd72sqlevel[l];
    break;

  case RIG_LEVEL_BALANCE:
    retval = thd72_get_menu_item(rig, 13, 4, &l);

    if (retval != RIG_OK)
    {
      return retval;
    }

    /* FIXME - is balance 0.0 .. 1.0 or -1.0 .. 1.0? */
    val->f = (float)(l) / 4.0;
    break;

  default:
    rig_debug(RIG_DEBUG_ERR, "%s: Unsupported Level %d\n", __func__, level);
    return -RIG_EINVAL;
  }

  return RIG_OK;
}