syrlinks hk handler complete
This commit is contained in:
@ -27,7 +27,32 @@ void SyrlinksHkHandler::doShutDown(){
|
||||
|
||||
ReturnValue_t SyrlinksHkHandler::buildNormalDeviceCommand(
|
||||
DeviceCommandId_t * id) {
|
||||
*id = SYRLINKS::READ_RX_STATUS_REGISTERS;
|
||||
switch (nextCommand) {
|
||||
case(SYRLINKS::READ_RX_STATUS_REGISTERS):
|
||||
*id = SYRLINKS::READ_RX_STATUS_REGISTERS;
|
||||
nextCommand = SYRLINKS::READ_TX_STATUS;
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_STATUS):
|
||||
*id = SYRLINKS::READ_TX_STATUS;
|
||||
nextCommand = SYRLINKS::READ_TX_WAVEFORM;
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_WAVEFORM):
|
||||
*id = SYRLINKS::READ_TX_WAVEFORM;
|
||||
nextCommand = SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE;
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE):
|
||||
*id = SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE;
|
||||
nextCommand = SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE;
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE):
|
||||
*id = SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE;
|
||||
nextCommand = SYRLINKS::READ_RX_STATUS_REGISTERS;
|
||||
break;
|
||||
default:
|
||||
sif::debug << "SyrlinksHkHandler::buildNormalDeviceCommand: rememberCommandId has invalid"
|
||||
<< "command id" << std::endl;
|
||||
break;
|
||||
}
|
||||
return buildCommandFromCommand(*id, NULL, 0);
|
||||
}
|
||||
|
||||
@ -84,10 +109,17 @@ ReturnValue_t SyrlinksHkHandler::buildCommandFromCommand(
|
||||
rawPacket = commandBuffer;
|
||||
return RETURN_OK;
|
||||
}
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE): {
|
||||
readTxAgcValue.copy(reinterpret_cast<char*>(commandBuffer), readTxStatus.size(), 0);
|
||||
rawPacketLen = readTxAgcValue.size();
|
||||
rememberCommandId = SYRLINKS::READ_TX_AGC_VALUE;
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE): {
|
||||
readTxAgcValueHighByte.copy(reinterpret_cast<char*>(commandBuffer), readTxStatus.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);
|
||||
rawPacketLen = readTxAgcValueLowByte.size();
|
||||
rememberCommandId = SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE;
|
||||
rawPacket = commandBuffer;
|
||||
return RETURN_OK;
|
||||
}
|
||||
@ -107,7 +139,13 @@ void SyrlinksHkHandler::fillCommandAndReplyMap() {
|
||||
this->insertInCommandAndReplyMap(SYRLINKS::SET_TX_MODE_CW, 1, nullptr, SYRLINKS::ACK_SIZE,
|
||||
false, true, SYRLINKS::ACK_REPLY);
|
||||
this->insertInCommandAndReplyMap(SYRLINKS::READ_TX_STATUS, 1, &txDataset,
|
||||
SYRLINKS::READ_TX_STATUS);
|
||||
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
||||
this->insertInCommandAndReplyMap(SYRLINKS::READ_TX_WAVEFORM, 1, &txDataset,
|
||||
SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
||||
this->insertInCommandAndReplyMap(SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE, 1, &txDataset,
|
||||
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::READ_RX_STATUS_REGISTERS, 1, &rxDataset,
|
||||
SYRLINKS::RX_STATUS_REGISTERS_REPLY_SIZE);
|
||||
}
|
||||
@ -132,12 +170,8 @@ ReturnValue_t SyrlinksHkHandler::scanForReply(const uint8_t *start,
|
||||
*foundId = SYRLINKS::READ_RX_STATUS_REGISTERS;
|
||||
break;
|
||||
case('R'):
|
||||
getIdAndLenForReadResponse(foundId, foundLen);
|
||||
if (rememberCommandId == SYRLINKS::READ_TX_STATUS) {
|
||||
*foundLen = SYRLINKS::READ_TX_STATUS_REPLY_SIZE;
|
||||
*foundId = SYRLINKS::READ_TX_STATUS;
|
||||
rememberCommandId = SYRLINKS::NONE;
|
||||
}
|
||||
*foundId = rememberCommandId;
|
||||
*foundLen = SYRLINKS::READ_ONE_REGISTER_REPLY_SIE;
|
||||
break;
|
||||
default:
|
||||
sif::error << "SyrlinksHkHandler::scanForReply: Unknown reply identifier" << std::endl;
|
||||
@ -176,7 +210,7 @@ ReturnValue_t SyrlinksHkHandler::interpretDeviceReply(DeviceCommandId_t id,
|
||||
parseRxStatusRegistersReply(packet);
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_STATUS):
|
||||
result = verifyReply(packet, SYRLINKS::READ_TX_STATUS_REPLY_SIZE);
|
||||
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
||||
if (result != RETURN_OK) {
|
||||
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read tx status reply "
|
||||
<< "has invalid crc" << std::endl;
|
||||
@ -185,7 +219,7 @@ ReturnValue_t SyrlinksHkHandler::interpretDeviceReply(DeviceCommandId_t id,
|
||||
parseTxStatusReply(packet);
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_WAVEFORM):
|
||||
result = verifyReply(packet, SYRLINKS::READ_TX_WAVEFORM_REPLY_SIZE);
|
||||
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
||||
if (result != RETURN_OK) {
|
||||
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read tx waveform reply "
|
||||
<< "has invalid crc" << std::endl;
|
||||
@ -193,14 +227,23 @@ ReturnValue_t SyrlinksHkHandler::interpretDeviceReply(DeviceCommandId_t id,
|
||||
}
|
||||
parseTxWaveformReply(packet);
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE):
|
||||
result = verifyReply(packet, SYRLINKS::READ_TX_AGC_VALUE_REPLY_SIZE);
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE_HIGH_BYTE):
|
||||
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
||||
if (result != RETURN_OK) {
|
||||
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read tx AGC reply "
|
||||
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read tx AGC high byte reply "
|
||||
<< "has invalid crc" << std::endl;
|
||||
return CRC_FAILURE;
|
||||
}
|
||||
parseTxAgcValueReply(packet);
|
||||
parseAgcHighByte(packet);
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE_LOW_BYTE):
|
||||
result = verifyReply(packet, SYRLINKS::READ_ONE_REGISTER_REPLY_SIE);
|
||||
if (result != RETURN_OK) {
|
||||
sif::error << "SyrlinksHkHandler::interpretDeviceReply: Read tx AGC low byte reply "
|
||||
<< "has invalid crc" << std::endl;
|
||||
return CRC_FAILURE;
|
||||
}
|
||||
parseAgcLowByte(packet);
|
||||
break;
|
||||
default: {
|
||||
sif::debug << "SyrlinksHkHandler::interpretDeviceReply: Unknown device reply id"
|
||||
@ -212,26 +255,17 @@ ReturnValue_t SyrlinksHkHandler::interpretDeviceReply(DeviceCommandId_t id,
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
void SyrlinksHkHandler::getIdAndLenForReadResponse(DeviceCommandId_t *foundId, size_t *foundLen) {
|
||||
switch (rememberCommandId) {
|
||||
case(SYRLINKS::READ_TX_STATUS):
|
||||
*foundLen = SYRLINKS::READ_TX_STATUS_REPLY_SIZE;
|
||||
*foundId = SYRLINKS::READ_TX_STATUS;
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_WAVEFORM):
|
||||
*foundLen = SYRLINKS::READ_TX_WAVEFORM_REPLY_SIZE;
|
||||
*foundId = SYRLINKS::READ_TX_WAVEFORM;
|
||||
break;
|
||||
case(SYRLINKS::READ_TX_AGC_VALUE):
|
||||
*foundLen = SYRLINKS::READ_TX_AGC_VALUE_REPLY_SIZE;
|
||||
*foundId = SYRLINKS::READ_TX_AGC_VALUE;
|
||||
break;
|
||||
default:
|
||||
sif::debug << "SyrlinksHkHandler::getIdAndLenForReadResponse: No command id remembered"
|
||||
<< std::endl;
|
||||
break;
|
||||
LocalPoolDataSetBase* SyrlinksHkHandler::getDataSetHandle(sid_t sid) {
|
||||
if (sid == rxDataset.getSid()) {
|
||||
return &rxDataset;
|
||||
}
|
||||
else if (sid== txDataset.getSid()) {
|
||||
return &txDataset;
|
||||
}
|
||||
else {
|
||||
sif::error << "SyrlinksHkHandler::getDataSetHandle: Invalid sid" << std::endl;
|
||||
return nullptr;
|
||||
}
|
||||
rememberCommandId = SYRLINKS::NONE;
|
||||
}
|
||||
|
||||
std::string SyrlinksHkHandler::convertUint16ToHexString(uint16_t intValue) {
|
||||
@ -351,7 +385,7 @@ void SyrlinksHkHandler::parseRxStatusRegistersReply(const uint8_t* packet) {
|
||||
|
||||
#if OBSW_VERBOSE_LEVEL >= 1 && SYRLINKS_DEBUG == 1
|
||||
sif::info << "Syrlinks RX Status: 0x" << std::hex << (unsigned int)rxDataset.rxStatus.value << std::endl;
|
||||
sif::info << "Syrlinks RX Sensitivity: " << rxDataset.rxSensitivity << std::endl;
|
||||
sif::info << "Syrlinks RX Sensitivity: " << std::dec << rxDataset.rxSensitivity << std::endl;
|
||||
sif::info << "Syrlinks RX Frequency Shift: " << rxDataset.rxFrequencyShift << std::endl;
|
||||
sif::info << "Syrlinks RX IQ Power: " << rxDataset.rxIqPower << std::endl;
|
||||
sif::info << "Syrlinks RX AGC Value: " << rxDataset.rxAgcValue << std::endl;
|
||||
@ -381,15 +415,21 @@ void SyrlinksHkHandler::parseTxWaveformReply(const uint8_t* packet) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void SyrlinksHkHandler::parseTxAgcValueReply(const uint8_t* packet) {
|
||||
void SyrlinksHkHandler::parseAgcLowByte(const uint8_t* packet) {
|
||||
PoolReadHelper readHelper(&txDataset);
|
||||
uint16_t offset = SYRLINKS::MESSAGE_HEADER_SIZE;
|
||||
txDataset.txAgcValue = convertHexStringToUint16(reinterpret_cast<const char*>(packet + offset));
|
||||
txDataset.txAgcValue = agcValueHighByte << 8 | convertHexStringToUint8(reinterpret_cast<const char*>(packet + offset));
|
||||
#if OBSW_VERBOSE_LEVEL >= 1 && SYRLINKS_DEBUG == 1
|
||||
sif::info << "Syrlinks TX AGC Value: " << txDataset.txAgcValue << std::endl;
|
||||
#endif
|
||||
}
|
||||
|
||||
void SyrlinksHkHandler::parseAgcHighByte(const uint8_t* packet) {
|
||||
PoolReadHelper readHelper(&txDataset);
|
||||
uint16_t offset = SYRLINKS::MESSAGE_HEADER_SIZE;
|
||||
agcValueHighByte = convertHexStringToUint8(reinterpret_cast<const char*>(packet + offset));
|
||||
}
|
||||
|
||||
void SyrlinksHkHandler::setNormalDatapoolEntriesInvalid(){
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user