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; }
static RadioFrequency DecodeFrequency(char mhz, char khz) { RadioFrequency rf; rf.SetKiloHertz(static_cast<unsigned>(mhz) * 1000 + static_cast<unsigned>(khz) * 5); return rf; }
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); }
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; }
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; }
bool XCOM760Device::PutStandbyFrequency(RadioFrequency frequency) { char szTmp[32]; sprintf(szTmp, "$TXSF=%u.%03u\r\n", frequency.GetKiloHertz() / 1000, frequency.GetKiloHertz() % 1000); return true; }
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; }
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; }
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; }