|
|
|
@ -102,8 +102,7 @@ ReturnValue_t SyrlinksHkHandler::buildCommandFromCommand(DeviceCommandId_t devic
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (SYRLINKS::READ_LCL_CONFIG): {
|
|
|
|
|
readLclConfig.copy(reinterpret_cast<char*>(commandBuffer),
|
|
|
|
|
readLclConfig.size(), 0);
|
|
|
|
|
readLclConfig.copy(reinterpret_cast<char*>(commandBuffer), readLclConfig.size(), 0);
|
|
|
|
|
rawPacketLen = readLclConfig.size();
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
rememberCommandId = SYRLINKS::READ_LCL_CONFIG;
|
|
|
|
@ -117,26 +116,53 @@ ReturnValue_t SyrlinksHkHandler::buildCommandFromCommand(DeviceCommandId_t devic
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (SYRLINKS::READ_TX_WAVEFORM): {
|
|
|
|
|
readTxWaveform.copy(reinterpret_cast<char*>(commandBuffer), readTxStatus.size(), 0);
|
|
|
|
|
readTxWaveform.copy(reinterpret_cast<char*>(commandBuffer), readTxWaveform.size(), 0);
|
|
|
|
|
rawPacketLen = readTxWaveform.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::READ_TX_WAVEFORM;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE): {
|
|
|
|
|
readTxAgcValueHighByte.copy(reinterpret_cast<char*>(commandBuffer), readTxStatus.size(), 0);
|
|
|
|
|
readTxAgcValueHighByte.copy(reinterpret_cast<char*>(commandBuffer), readTxAgcValueHighByte.size(), 0);
|
|
|
|
|
rawPacketLen = readTxAgcValueHighByte.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE): {
|
|
|
|
|
readTxAgcValueLowByte.copy(reinterpret_cast<char*>(commandBuffer), readTxStatus.size(), 0);
|
|
|
|
|
readTxAgcValueLowByte.copy(reinterpret_cast<char*>(commandBuffer), readTxAgcValueLowByte.size(), 0);
|
|
|
|
|
rawPacketLen = readTxAgcValueLowByte.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (SYRLINKS::TEMP_POWER_AMPLIFIER_HIGH_BYTE):
|
|
|
|
|
tempPowerAmpBoardHighByte.copy(reinterpret_cast<char*>(commandBuffer), tempPowerAmpBoardHighByte.size(),
|
|
|
|
|
0);
|
|
|
|
|
rawPacketLen = tempPowerAmpBoardHighByte.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::TEMP_POWER_AMPLIFIER_HIGH_BYTE;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
case (SYRLINKS::TEMP_POWER_AMPLIFIER_LOW_BYTE):
|
|
|
|
|
tempBasebandBoardHighByte.copy(reinterpret_cast<char*>(commandBuffer), tempBasebandBoardHighByte.size(),
|
|
|
|
|
0);
|
|
|
|
|
rawPacketLen = tempBasebandBoardHighByte.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::TEMP_POWER_AMPLIFIER_LOW_BYTE;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
case (SYRLINKS::TEMP_BASEBAND_BOARD_HIGH_BYTE):
|
|
|
|
|
tempBasebandBoardHighByte.copy(reinterpret_cast<char*>(commandBuffer), tempBasebandBoardHighByte.size(),
|
|
|
|
|
0);
|
|
|
|
|
rawPacketLen = tempBasebandBoardHighByte.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::TEMP_BASEBAND_BOARD_HIGH_BYTE;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
case (SYRLINKS::TEMP_BASEBAND_BOARD_LOW_BYTE):
|
|
|
|
|
tempBasebandBoardLowByte.copy(reinterpret_cast<char*>(commandBuffer), tempBasebandBoardLowByte.size(), 0);
|
|
|
|
|
rawPacketLen = tempBasebandBoardLowByte.size();
|
|
|
|
|
rememberCommandId = SYRLINKS::TEMP_BASEBAND_BOARD_LOW_BYTE;
|
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
default:
|
|
|
|
|
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
|
|
|
|
}
|
|
|
|
@ -152,10 +178,10 @@ void SyrlinksHkHandler::fillCommandAndReplyMap() {
|
|
|
|
|
false, true, SYRLINKS::ACK_REPLY);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::SET_TX_MODE_CW, 1, nullptr, SYRLINKS::ACK_SIZE, false,
|
|
|
|
|
true, SYRLINKS::ACK_REPLY);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::WRITE_LCL_CONFIG, 1, nullptr, SYRLINKS::ACK_SIZE, false,
|
|
|
|
|
true, SYRLINKS::ACK_REPLY);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::READ_LCL_CONFIG, 1, nullptr,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::WRITE_LCL_CONFIG, 1, nullptr, SYRLINKS::ACK_SIZE,
|
|
|
|
|
false, true, SYRLINKS::ACK_REPLY);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::READ_LCL_CONFIG, 1, nullptr,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::READ_TX_STATUS, 1, &txDataset,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::READ_TX_WAVEFORM, 1, &txDataset,
|
|
|
|
@ -164,26 +190,18 @@ void SyrlinksHkHandler::fillCommandAndReplyMap() {
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE, 1, &txDataset,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::TEMP_POWER_AMPLIFIER_HIGH_BYTE, 1, nullptr,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::TEMP_POWER_AMPLIFIER_LOW_BYTE, 1, nullptr,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::TEMP_BASEBAND_BOARD_HIGH_BYTE, 1, nullptr,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::TEMP_BASEBAND_BOARD_LOW_BYTE, 1, nullptr,
|
|
|
|
|
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
this->insertInCommandAndReplyMap(SYRLINKS::READ_RX_STATUS_REGISTERS, 1, &rxDataset,
|
|
|
|
|
SYRLINKS::RX_STATUS_REGISTERS_REPLY_SIZE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ReturnValue_t SyrlinksHkHandler::enableReplyInReplyMap(DeviceCommandMap::iterator command,
|
|
|
|
|
// uint8_t expectedReplies, bool useAlternateId,
|
|
|
|
|
// DeviceCommandId_t alternateReplyID) {
|
|
|
|
|
// switch (command->first) {
|
|
|
|
|
// case SYRLINKS::RESET_UNIT: {
|
|
|
|
|
// case SYRLINKS::SET_TX_MODE_STANDBY:
|
|
|
|
|
// case SYRLINKS::SET_TX_MODE_MODULATION:
|
|
|
|
|
// case SYRLINKS::SET_TX_MODE_CW:
|
|
|
|
|
// return DeviceHandlerBase::enableReplyInReplyMap(command, 1, true, SYRLINKS::ACK_REPLY);
|
|
|
|
|
// }
|
|
|
|
|
// default:
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// return DeviceHandlerBase::enableReplyInReplyMap(command);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
ReturnValue_t SyrlinksHkHandler::scanForReply(const uint8_t* start, size_t remainingSize,
|
|
|
|
|
DeviceCommandId_t* foundId, size_t* foundLen) {
|
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
@ -296,6 +314,51 @@ ReturnValue_t SyrlinksHkHandler::interpretDeviceReply(DeviceCommandId_t id, cons
|
|
|
|
|
}
|
|
|
|
|
parseAgcLowByte(packet);
|
|
|
|
|
break;
|
|
|
|
|
case (SYRLINKS::TEMP_BASEBAND_BOARD_HIGH_BYTE):
|
|
|
|
|
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
|
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read temperature baseband board "
|
|
|
|
|
<< "high byte reply has invalid crc" << std::endl;
|
|
|
|
|
return CRC_FAILURE;
|
|
|
|
|
}
|
|
|
|
|
rawTempBasebandBoard = convertHexStringToUint8(reinterpret_cast<const char*>(
|
|
|
|
|
packet + SYRLINKS::MESSAGE_HEADER_SIZE))
|
|
|
|
|
<< 8;
|
|
|
|
|
break;
|
|
|
|
|
case (SYRLINKS::TEMP_BASEBAND_BOARD_LOW_BYTE):
|
|
|
|
|
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
|
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read temperature baseband board"
|
|
|
|
|
" low byte reply has invalid crc"
|
|
|
|
|
<< std::endl;
|
|
|
|
|
return CRC_FAILURE;
|
|
|
|
|
}
|
|
|
|
|
rawTempBasebandBoard |= convertHexStringToUint8(
|
|
|
|
|
reinterpret_cast<const char*>(packet + SYRLINKS::MESSAGE_HEADER_SIZE));
|
|
|
|
|
tempBasebandBoard = calcTempVal(rawTempBasebandBoard);
|
|
|
|
|
break;
|
|
|
|
|
case (SYRLINKS::TEMP_POWER_AMPLIFIER_HIGH_BYTE):
|
|
|
|
|
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
|
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read temperature power amplifier "
|
|
|
|
|
<< "board high byte reply has invalid crc" << std::endl;
|
|
|
|
|
return CRC_FAILURE;
|
|
|
|
|
}
|
|
|
|
|
rawTempBasebandBoard = convertHexStringToUint8(reinterpret_cast<const char*>(
|
|
|
|
|
packet + SYRLINKS::MESSAGE_HEADER_SIZE))
|
|
|
|
|
<< 8;
|
|
|
|
|
break;
|
|
|
|
|
case (SYRLINKS::TEMP_POWER_AMPLIFIER_LOW_BYTE):
|
|
|
|
|
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
|
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read temperature power amplifier"
|
|
|
|
|
<< " board low byte reply has invalid crc" << std::endl;
|
|
|
|
|
return CRC_FAILURE;
|
|
|
|
|
}
|
|
|
|
|
rawTempBasebandBoard |= convertHexStringToUint8(
|
|
|
|
|
reinterpret_cast<const char*>(packet + SYRLINKS::MESSAGE_HEADER_SIZE));
|
|
|
|
|
rawTempPowerAmplifier = calcTempVal(rawTempPowerAmplifier);
|
|
|
|
|
break;
|
|
|
|
|
default: {
|
|
|
|
|
sif::debug << "SyrlinksHkHandler::interpretDeviceReply: Unknown device reply id" << std::endl;
|
|
|
|
|
return DeviceHandlerIF::UNKNOWN_DEVICE_REPLY;
|
|
|
|
@ -449,8 +512,8 @@ void SyrlinksHkHandler::parseRxStatusRegistersReply(const uint8_t* packet) {
|
|
|
|
|
void SyrlinksHkHandler::parseLclConfigReply(const uint8_t* packet) {
|
|
|
|
|
uint16_t offset = SYRLINKS::MESSAGE_HEADER_SIZE;
|
|
|
|
|
uint8_t lclConfig = convertHexStringToUint8(reinterpret_cast<const char*>(packet + offset));
|
|
|
|
|
sif::info << "SyrlinksHkHandler::parseRxStatusRegistersReply: Lcl config: "
|
|
|
|
|
<< static_cast<unsigned int>(lclConfig) << std::endl;
|
|
|
|
|
sif::info << "SyrlinksHkHandler::parseRxStatusRegistersReply: Lcl config: "
|
|
|
|
|
<< static_cast<unsigned int>(lclConfig) << std::endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SyrlinksHkHandler::parseTxStatusReply(const uint8_t* packet) {
|
|
|
|
@ -512,3 +575,5 @@ ReturnValue_t SyrlinksHkHandler::initializeLocalDataPool(localpool::DataPool& lo
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SyrlinksHkHandler::setModeNormal() { mode = MODE_NORMAL; }
|
|
|
|
|
|
|
|
|
|
float SyrlinksHkHandler::calcTempVal(uint16_t raw) { return 0.126984 * raw - 67.87; }
|
|
|
|
|