This commit is contained in:
@ -17,7 +17,7 @@ StarTrackerHandler::StarTrackerHandler(object_id_t objectId, object_id_t comIF,
|
||||
CookieIF * comCookie, StrHelper* strHelper) :
|
||||
DeviceHandlerBase(objectId, comIF, comCookie), temperatureSet(this), versionSet(this), powerSet(
|
||||
this), interfaceSet(this), timeSet(this), solutionSet(this), histogramSet(this),
|
||||
contrastSet(this), strHelper(strHelper) {
|
||||
contrastSet(this), checksumSet(this), strHelper(strHelper) {
|
||||
if (comCookie == nullptr) {
|
||||
sif::error << "StarTrackerHandler: Invalid com cookie" << std::endl;
|
||||
}
|
||||
@ -416,6 +416,10 @@ ReturnValue_t StarTrackerHandler::buildCommandFromCommand(DeviceCommandId_t devi
|
||||
result = prepareParamCommand(commandData, commandDataLen, tracking);
|
||||
return result;
|
||||
}
|
||||
case (StarTracker::ERASE): {
|
||||
result = prepareEraseCommand(commandData, commandDataLen);
|
||||
return result;
|
||||
}
|
||||
case (StarTracker::UNLOCK): {
|
||||
result = prepareUnlockCommand(commandData, commandDataLen);
|
||||
return result;
|
||||
@ -482,6 +486,8 @@ void StarTrackerHandler::fillCommandAndReplyMap() {
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
this->insertInCommandAndReplyMap(StarTracker::RESET_ERROR, 3, nullptr,
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
this->insertInCommandAndReplyMap(StarTracker::ERASE, 3, nullptr,
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
this->insertInCommandAndReplyMap(StarTracker::UNLOCK, 3, nullptr,
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
this->insertInCommandAndReplyMap(StarTracker::CHECKSUM, 3, nullptr,
|
||||
@ -561,6 +567,10 @@ ReturnValue_t StarTrackerHandler::interpretDeviceReply(DeviceCommandId_t id, con
|
||||
result = handleActionReply();
|
||||
break;
|
||||
}
|
||||
case (StarTracker::ERASE): {
|
||||
result = handleEraseReply();
|
||||
break;
|
||||
}
|
||||
case (StarTracker::CHECKSUM): {
|
||||
result = handleChecksumReply();
|
||||
break;
|
||||
@ -785,7 +795,7 @@ ReturnValue_t StarTrackerHandler::initializeLocalDataPool(localpool::DataPool& l
|
||||
localDataPoolMap.emplace(StarTracker::CONTRAST_BIND6, new PoolEntry<uint32_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CONTRAST_BIND7, new PoolEntry<uint32_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CONTRAST_BIND8, new PoolEntry<uint32_t>( { 0 }));
|
||||
|
||||
localDataPoolMap.emplace(StarTracker::CHKSUM, new PoolEntry<uint32_t>( { 0 }));
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
@ -840,6 +850,10 @@ ReturnValue_t StarTrackerHandler::scanForActionReply(DeviceCommandId_t *foundId)
|
||||
*foundId = StarTracker::RESET_ERROR;
|
||||
break;
|
||||
}
|
||||
case (StarTracker::ID::ERASE): {
|
||||
*foundId = StarTracker::ERASE;
|
||||
break;
|
||||
}
|
||||
case (StarTracker::ID::UNLOCK): {
|
||||
*foundId = StarTracker::UNLOCK;
|
||||
break;
|
||||
@ -1057,7 +1071,25 @@ void StarTrackerHandler::prepareBootCommand() {
|
||||
rawPacketLen = dataLinkLayer.getEncodedLength();
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::prepareUnlockCommand(const uint8_t* commandData, size_t commandDataLen) {
|
||||
ReturnValue_t StarTrackerHandler::prepareEraseCommand(const uint8_t* commandData,
|
||||
size_t commandDataLen) {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
if (commandDataLen != EraseCmd::LENGTH) {
|
||||
return INVALID_LENGTH;
|
||||
}
|
||||
uint32_t length = 0;
|
||||
struct EraseActionRequest req;
|
||||
req.region = *commandData;
|
||||
arc_pack_erase_action_req(&req, commandBuffer, &length);
|
||||
dataLinkLayer.encodeFrame(commandBuffer, length);
|
||||
rawPacket = dataLinkLayer.getEncodedFrame();
|
||||
rawPacketLen = dataLinkLayer.getEncodedLength();
|
||||
eraseCmd.rememberRegion = req.region;
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::prepareUnlockCommand(const uint8_t* commandData,
|
||||
size_t commandDataLen) {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
uint32_t length = 0;
|
||||
struct UnlockActionRequest req;
|
||||
@ -1292,6 +1324,21 @@ ReturnValue_t StarTrackerHandler::handleActionReply() {
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::handleEraseReply() {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
result = handleActionReply();
|
||||
if (result != RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
const uint8_t* replyData = dataLinkLayer.getReply() + ACTION_DATA_OFFSET;
|
||||
StarTracker::EraseReply eraseReply(replyData);
|
||||
if (eraseReply.getRegion() != eraseCmd.rememberRegion) {
|
||||
sif::warning << "StarTrackerHandler::handleEraseReply: Region mismatch" << std::endl;
|
||||
return REGION_MISMATCH;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::handleChecksumReply() {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
result = handleActionReply();
|
||||
@ -1312,6 +1359,9 @@ ReturnValue_t StarTrackerHandler::handleChecksumReply() {
|
||||
sif::warning << "StarTrackerHandler::handleChecksumReply: Length mismatch" << std::endl;
|
||||
return LENGTH_MISSMATCH;
|
||||
}
|
||||
PoolReadGuard rg(&checksumSet);
|
||||
checksumSet.checksum = checksumReply.getChecksum();
|
||||
handleDeviceTM(&checksumSet, StarTracker::CHECKSUM);
|
||||
#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1
|
||||
checksumReply.printChecksum();
|
||||
#endif /* OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1 */
|
||||
|
Reference in New Issue
Block a user