Ejemplo n.º 1
0
bool
KRT2Device::PutFrequency(char cmd,
                         RadioFrequency frequency,
                         const TCHAR *name,
                         OperationEnvironment &env)
{
  if (frequency.IsDefined()) {
    struct {
      uint8_t start = STX;
      uint8_t command;
      uint8_t mhz;
      uint8_t khz;
      char station[MAX_NAME_LENGTH];
      uint8_t checksum;
    } msg;

    msg.command = cmd;
    msg.mhz = frequency.GetKiloHertz() / 1000;
    msg.khz = (frequency.GetKiloHertz() % 1000) / 5;
    GetStationName(msg.station, name);
    msg.checksum = msg.mhz ^ msg.khz;

    Send((uint8_t *) &msg, sizeof(msg), env);

    return true;
  }

  return false;
}
Ejemplo n.º 2
0
static RadioFrequency
DecodeFrequency(char mhz, char khz)
{
  RadioFrequency rf;
  rf.SetKiloHertz(static_cast<unsigned>(mhz) * 1000 +
                  static_cast<unsigned>(khz) * 5);
  return rf;
}
Ejemplo n.º 3
0
bool
ATR833Device::PutStandbyFrequency(RadioFrequency frequency,
                                  const TCHAR *name,
                                  OperationEnvironment &env)
{
  ATRBuffer buffer(SETSTANDBY);
  buffer.Put(frequency.GetKiloHertz() / 1000);
  buffer.Put((frequency.GetKiloHertz() % 1000) / 5);
  return buffer.Send(port, env);
}
Ejemplo n.º 4
0
RadioFrequency
RadioFrequency::Parse(const TCHAR *p)
{
  TCHAR *endptr;
  double mhz = ParseDouble(p, &endptr);

  RadioFrequency frequency;
  if (mhz < 100 || *endptr != _T('\0'))
    frequency.Clear();
  else
    frequency.SetKiloHertz((unsigned)(mhz * 1000 + 0.5));
  return frequency;
}
Ejemplo n.º 5
0
bool
KRT2Device::PutFrequency(RadioFrequency frequency, const TCHAR *name,
                         char cmd)
{
  char mhz = frequency.GetKiloHertz() / 1000;
  char khz = (frequency.GetKiloHertz() % 1000) / 5;
  char szTmp[13] = {
      STX, cmd, mhz, khz,
      ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
      static_cast<char>(mhz ^ khz)   // checksum
  };
  ::CopyASCII(szTmp + 4, 8, name, name + _tcslen(name));
  port.Write(szTmp, sizeof(szTmp));
  return true;
}
Ejemplo n.º 6
0
bool
XCOM760Device::PutStandbyFrequency(RadioFrequency frequency)
{
  char szTmp[32];
  sprintf(szTmp, "$TXSF=%u.%03u\r\n",
          frequency.GetKiloHertz() / 1000,
          frequency.GetKiloHertz() % 1000);
  return true;
}
Ejemplo n.º 7
0
bool
XCOM760Device::PutActiveFrequency(RadioFrequency frequency)
{
  char szTmp[32];
  sprintf(szTmp, "$TXAF=%u.%03u\r\n",
          frequency.GetKiloHertz() / 1000,
          frequency.GetKiloHertz() % 1000);
  port->Write(szTmp);
  return true;
}
Ejemplo n.º 8
0
bool
XCOM760Device::PutStandbyFrequency(RadioFrequency frequency,
                                   const TCHAR *name,
                                   OperationEnvironment &env)
{
  char szTmp[32];
  sprintf(szTmp, "$TXSF=%u.%03u\r\n",
          frequency.GetKiloHertz() / 1000,
          frequency.GetKiloHertz() % 1000);
  return true;
}
Ejemplo n.º 9
0
bool
KRT2Device::ParseFrame(struct NMEAInfo &info)
{
  bool result = false;

  switch (input_buffer[1]) {
  case 'A':  // set volume, squelch, intercom-VOX
    if (input_buffer[3] + input_buffer[4] == input_buffer[5]) {
      received_squelch = true;
      squelch = input_buffer[3];
      vox = input_buffer[4];
      info.settings.ProvideVolume(input_buffer[2] * 5 - 1, info.clock);
      result = true;
    }
    break;
  case 'U':  // active frequency changed
  case 'R':  // standby frequency changed
    {
      char mhz = input_buffer[2];
      char khz = input_buffer[3];
      char crc = input_buffer[12];
      if ((mhz ^ khz) == crc) {
        RadioFrequency rf = DecodeFrequency(mhz, khz);
        // TODO: store frequency in info
        result = rf.IsDefined();
      }
    }
    break;
  case 'C':
    // TODO: exchange stored active and passive frequency
  default:
    // ignore this frame
    break;
  }
  return result;
}