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
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;
}