|
|
@ -19,14 +19,36 @@ extern "C" {
|
|
|
|
using json = nlohmann::json;
|
|
|
|
using json = nlohmann::json;
|
|
|
|
|
|
|
|
|
|
|
|
StarTrackerHandler::StarTrackerHandler(object_id_t objectId, object_id_t comIF, CookieIF* comCookie,
|
|
|
|
StarTrackerHandler::StarTrackerHandler(object_id_t objectId, object_id_t comIF, CookieIF* comCookie,
|
|
|
|
StrHelper* strHelper) :
|
|
|
|
StrHelper* strHelper)
|
|
|
|
DeviceHandlerBase(objectId, comIF, comCookie), temperatureSet(this), versionSet(this), powerSet(
|
|
|
|
: DeviceHandlerBase(objectId, comIF, comCookie),
|
|
|
|
this), interfaceSet(this), timeSet(this), solutionSet(this), histogramSet(this), contrastSet(
|
|
|
|
temperatureSet(this),
|
|
|
|
this), checksumSet(this), downloadCentroidSet(this), downloadMatchedStar(this), downloadDbImage(
|
|
|
|
versionSet(this),
|
|
|
|
this), downloadBlobPixel(this), cameraSet(this), limitsSet(this), loglevelSet(this), mountingSet(
|
|
|
|
powerSet(this),
|
|
|
|
this), imageProcessorSet(this), centroidingSet(this), lisaSet(this), matchingSet(
|
|
|
|
interfaceSet(this),
|
|
|
|
this), trackingSet(this), validationSet(this), algoSet(this), subscriptionSet(this), logSubscriptionSet(
|
|
|
|
timeSet(this),
|
|
|
|
this), debugCameraSet(this), strHelper(strHelper) {
|
|
|
|
solutionSet(this),
|
|
|
|
|
|
|
|
histogramSet(this),
|
|
|
|
|
|
|
|
contrastSet(this),
|
|
|
|
|
|
|
|
checksumSet(this),
|
|
|
|
|
|
|
|
downloadCentroidSet(this),
|
|
|
|
|
|
|
|
downloadMatchedStar(this),
|
|
|
|
|
|
|
|
downloadDbImage(this),
|
|
|
|
|
|
|
|
downloadBlobPixel(this),
|
|
|
|
|
|
|
|
cameraSet(this),
|
|
|
|
|
|
|
|
limitsSet(this),
|
|
|
|
|
|
|
|
loglevelSet(this),
|
|
|
|
|
|
|
|
mountingSet(this),
|
|
|
|
|
|
|
|
imageProcessorSet(this),
|
|
|
|
|
|
|
|
centroidingSet(this),
|
|
|
|
|
|
|
|
lisaSet(this),
|
|
|
|
|
|
|
|
matchingSet(this),
|
|
|
|
|
|
|
|
trackingSet(this),
|
|
|
|
|
|
|
|
validationSet(this),
|
|
|
|
|
|
|
|
algoSet(this),
|
|
|
|
|
|
|
|
subscriptionSet(this),
|
|
|
|
|
|
|
|
logSubscriptionSet(this),
|
|
|
|
|
|
|
|
debugCameraSet(this),
|
|
|
|
|
|
|
|
strHelper(strHelper) {
|
|
|
|
if (comCookie == nullptr) {
|
|
|
|
if (comCookie == nullptr) {
|
|
|
|
sif::error << "StarTrackerHandler: Invalid com cookie" << std::endl;
|
|
|
|
sif::error << "StarTrackerHandler: Invalid com cookie" << std::endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -36,8 +58,7 @@ StarTrackerHandler::StarTrackerHandler(object_id_t objectId, object_id_t comIF,
|
|
|
|
eventQueue = QueueFactory::instance()->createMessageQueue(EventMessage::EVENT_MESSAGE_SIZE * 5);
|
|
|
|
eventQueue = QueueFactory::instance()->createMessageQueue(EventMessage::EVENT_MESSAGE_SIZE * 5);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
StarTrackerHandler::~StarTrackerHandler() {
|
|
|
|
StarTrackerHandler::~StarTrackerHandler() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ReturnValue_t StarTrackerHandler::initialize() {
|
|
|
|
ReturnValue_t StarTrackerHandler::initialize() {
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
@ -46,13 +67,13 @@ ReturnValue_t StarTrackerHandler::initialize() {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EventManagerIF* manager = ObjectManager::instance()->get<EventManagerIF>(
|
|
|
|
EventManagerIF* manager = ObjectManager::instance()->get<EventManagerIF>(objects::EVENT_MANAGER);
|
|
|
|
objects::EVENT_MANAGER);
|
|
|
|
|
|
|
|
if (manager == nullptr) {
|
|
|
|
if (manager == nullptr) {
|
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
|
|
|
sif::error << "StarTrackerHandler::initialize: Invalid event manager" << std::endl;
|
|
|
|
sif::error << "StarTrackerHandler::initialize: Invalid event manager" << std::endl;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return ObjectManagerIF::CHILD_INIT_FAILED;;
|
|
|
|
return ObjectManagerIF::CHILD_INIT_FAILED;
|
|
|
|
|
|
|
|
;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = manager->registerListener(eventQueue->getId());
|
|
|
|
result = manager->registerListener(eventQueue->getId());
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
@ -128,8 +149,7 @@ ReturnValue_t StarTrackerHandler::executeAction(ActionId_t actionId, MessageQueu
|
|
|
|
if (size > MAX_PATH_SIZE + MAX_FILE_NAME) {
|
|
|
|
if (size > MAX_PATH_SIZE + MAX_FILE_NAME) {
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = strHelper->startImageUpload(
|
|
|
|
result = strHelper->startImageUpload(std::string(reinterpret_cast<const char*>(data), size));
|
|
|
|
std::string(reinterpret_cast<const char*>(data), size));
|
|
|
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -144,20 +164,20 @@ ReturnValue_t StarTrackerHandler::executeAction(ActionId_t actionId, MessageQueu
|
|
|
|
if (size > MAX_PATH_SIZE) {
|
|
|
|
if (size > MAX_PATH_SIZE) {
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = strHelper->startImageDownload(
|
|
|
|
result =
|
|
|
|
std::string(reinterpret_cast<const char*>(data), size));
|
|
|
|
strHelper->startImageDownload(std::string(reinterpret_cast<const char*>(data), size));
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
strHelperExecuting = true;
|
|
|
|
strHelperExecuting = true;
|
|
|
|
return EXECUTION_FINISHED;
|
|
|
|
return EXECUTION_FINISHED;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case (startracker::READ): {
|
|
|
|
case (startracker::FLASH_READ): {
|
|
|
|
result = DeviceHandlerBase::acceptExternalDeviceCommands();
|
|
|
|
result = DeviceHandlerBase::acceptExternalDeviceCommands();
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = executeReadCommand(data, size);
|
|
|
|
result = executeFlashReadCommand(data, size);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -186,8 +206,8 @@ ReturnValue_t StarTrackerHandler::executeAction(ActionId_t actionId, MessageQueu
|
|
|
|
if (size > MAX_PATH_SIZE + MAX_FILE_NAME) {
|
|
|
|
if (size > MAX_PATH_SIZE + MAX_FILE_NAME) {
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = strHelper->startFirmwareUpdate(
|
|
|
|
result =
|
|
|
|
std::string(reinterpret_cast<const char*>(data), size));
|
|
|
|
strHelper->startFirmwareUpdate(std::string(reinterpret_cast<const char*>(data), size));
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -202,8 +222,8 @@ ReturnValue_t StarTrackerHandler::executeAction(ActionId_t actionId, MessageQueu
|
|
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::performOperationHook() {
|
|
|
|
void StarTrackerHandler::performOperationHook() {
|
|
|
|
EventMessage event;
|
|
|
|
EventMessage event;
|
|
|
|
for (ReturnValue_t result = eventQueue->receiveMessage(&event); result == RETURN_OK; result =
|
|
|
|
for (ReturnValue_t result = eventQueue->receiveMessage(&event); result == RETURN_OK;
|
|
|
|
eventQueue->receiveMessage(&event)) {
|
|
|
|
result = eventQueue->receiveMessage(&event)) {
|
|
|
|
switch (event.getMessageId()) {
|
|
|
|
switch (event.getMessageId()) {
|
|
|
|
case EventMessage::EVENT_MESSAGE:
|
|
|
|
case EventMessage::EVENT_MESSAGE:
|
|
|
|
handleEvent(&event);
|
|
|
|
handleEvent(&event);
|
|
|
@ -216,6 +236,8 @@ void StarTrackerHandler::performOperationHook() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Submode_t StarTrackerHandler::getInitialSubmode() { return SUBMODE_BOOTLOADER; }
|
|
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::doStartUp() {
|
|
|
|
void StarTrackerHandler::doStartUp() {
|
|
|
|
switch (startupState) {
|
|
|
|
switch (startupState) {
|
|
|
|
case StartupState::IDLE:
|
|
|
|
case StartupState::IDLE:
|
|
|
@ -242,6 +264,7 @@ void StarTrackerHandler::doShutDown() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::doOffActivity() {
|
|
|
|
void StarTrackerHandler::doOffActivity() {
|
|
|
|
|
|
|
|
startupState = StartupState::IDLE;
|
|
|
|
internalState = InternalState::IDLE;
|
|
|
|
internalState = InternalState::IDLE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -363,7 +386,8 @@ ReturnValue_t StarTrackerHandler::buildTransitionDeviceCommand(DeviceCommandId_t
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ReturnValue_t StarTrackerHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
|
|
|
|
ReturnValue_t StarTrackerHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
|
|
|
|
const uint8_t* commandData, size_t commandDataLen) {
|
|
|
|
const uint8_t* commandData,
|
|
|
|
|
|
|
|
size_t commandDataLen) {
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
switch (deviceCommand) {
|
|
|
|
switch (deviceCommand) {
|
|
|
|
case (startracker::PING_REQUEST): {
|
|
|
|
case (startracker::PING_REQUEST): {
|
|
|
@ -1015,8 +1039,7 @@ ReturnValue_t StarTrackerHandler::interpretDeviceReply(DeviceCommandId_t id,
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::setNormalDatapoolEntriesInvalid() {
|
|
|
|
void StarTrackerHandler::setNormalDatapoolEntriesInvalid() {}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t StarTrackerHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) {
|
|
|
|
uint32_t StarTrackerHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) {
|
|
|
|
// if (modeTo == MODE_ON && (submode == SUBMODE_NONE || submode == SUBMODE_BOOTLOADER)) {
|
|
|
|
// if (modeTo == MODE_ON && (submode == SUBMODE_NONE || submode == SUBMODE_BOOTLOADER)) {
|
|
|
@ -1214,8 +1237,7 @@ ReturnValue_t StarTrackerHandler::initializeLocalDataPool(localpool::DataPool& l
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_Y, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_Y, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_TOT_VAL, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_TOT_VAL, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_IN_USE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_IN_USE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_BRIGHT_NEIGHBOURS,
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_BRIGHT_NEIGHBOURS, new PoolEntry<uint32_t>({0}));
|
|
|
|
new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_REGION, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::BLOBPIX_REGION, new PoolEntry<uint32_t>({0}));
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::CAMERA_MODE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CAMERA_MODE, new PoolEntry<uint8_t>({0}));
|
|
|
@ -1280,13 +1302,12 @@ ReturnValue_t StarTrackerHandler::initializeLocalDataPool(localpool::DataPool& l
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_STORE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_STORE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_SIGNALTHRESHOLD,
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_SIGNALTHRESHOLD,
|
|
|
|
new PoolEntry<uint16_t>({0}));
|
|
|
|
new PoolEntry<uint16_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_DARKTHRESHOLD, new PoolEntry<uint16_t>( {
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_DARKTHRESHOLD,
|
|
|
|
0 }));
|
|
|
|
new PoolEntry<uint16_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_BACKGROUNDCOMPENSATION,
|
|
|
|
localDataPoolMap.emplace(startracker::IMAGE_PROCESSOR_BACKGROUNDCOMPENSATION,
|
|
|
|
new PoolEntry<uint8_t>({0}));
|
|
|
|
new PoolEntry<uint8_t>({0}));
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_ENABLE_FILTER,
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_ENABLE_FILTER, new PoolEntry<uint8_t>({0}));
|
|
|
|
new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_MAX_QUALITY, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_MAX_QUALITY, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_DARK_THRESHOLD, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_DARK_THRESHOLD, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_MIN_QUALITY, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_MIN_QUALITY, new PoolEntry<float>({0}));
|
|
|
@ -1301,43 +1322,37 @@ ReturnValue_t StarTrackerHandler::initializeLocalDataPool(localpool::DataPool& l
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_TRANSMATRIX11, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::CENTROIDING_TRANSMATRIX11, new PoolEntry<float>({0}));
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_MODE, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_MODE, new PoolEntry<uint32_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_PREFILTER_DIST_THRESHOLD,
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_PREFILTER_DIST_THRESHOLD, new PoolEntry<float>({0}));
|
|
|
|
new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_PREFILTER_ANGLE_THRESHOLD, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_PREFILTER_ANGLE_THRESHOLD,
|
|
|
|
|
|
|
|
new PoolEntry<float>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FOV_WIDTH, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FOV_WIDTH, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FOV_HEIGHT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FOV_HEIGHT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FLOAT_STAR_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FLOAT_STAR_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_CLOSE_STAR_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_CLOSE_STAR_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_CLOSE_STAR_COUNT,
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_CLOSE_STAR_COUNT,
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_FRACTION_CLOSE, new PoolEntry<float>( {
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_FRACTION_CLOSE,
|
|
|
|
0 }));
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_MEAN_SUM,
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_MEAN_SUM, new PoolEntry<float>({0}));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_DB_STAR_COUNT,
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_RATING_WEIGHT_DB_STAR_COUNT, new PoolEntry<float>( {
|
|
|
|
|
|
|
|
0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_MAX_COMBINATIONS, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_MAX_COMBINATIONS, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_NR_STARS_STOP, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_NR_STARS_STOP, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FRACTION_CLOSE_STOP, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::LISA_FRACTION_CLOSE_STOP, new PoolEntry<float>({0}));
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::MATCHING_SQUARED_DISTANCE_LIMIT,
|
|
|
|
localDataPoolMap.emplace(startracker::MATCHING_SQUARED_DISTANCE_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(startracker::MATCHING_SQUARED_SHIFT_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::MATCHING_SQUARED_SHIFT_LIMIT,
|
|
|
|
|
|
|
|
new PoolEntry<float>( { 0 }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_THIN_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_THIN_LIMIT, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_OUTLIER_THRESHOLD, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_OUTLIER_THRESHOLD, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_OUTLIER_THRESHOLD_QUEST, new PoolEntry<float>( {
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_OUTLIER_THRESHOLD_QUEST,
|
|
|
|
0 }));
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_TRACKER_CHOICE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::TRACKING_TRACKER_CHOICE, new PoolEntry<uint8_t>({0}));
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_STABLE_COUNT, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_STABLE_COUNT, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_MAX_DIFFERENCE, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_MAX_DIFFERENCE, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_MIN_TRACKER_CONFIDENCE, new PoolEntry<float>( {
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_MIN_TRACKER_CONFIDENCE,
|
|
|
|
0 }));
|
|
|
|
new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_MIN_MATCHED_STARS,
|
|
|
|
localDataPoolMap.emplace(startracker::VALIDATION_MIN_MATCHED_STARS, new PoolEntry<uint8_t>({0}));
|
|
|
|
new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(startracker::ALGO_MODE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::ALGO_MODE, new PoolEntry<uint8_t>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::ALGO_I2T_MIN_CONFIDENCE, new PoolEntry<float>({0}));
|
|
|
|
localDataPoolMap.emplace(startracker::ALGO_I2T_MIN_CONFIDENCE, new PoolEntry<float>({0}));
|
|
|
@ -1388,7 +1403,7 @@ ReturnValue_t StarTrackerHandler::checkMode(ActionId_t actionId) {
|
|
|
|
switch (actionId) {
|
|
|
|
switch (actionId) {
|
|
|
|
case startracker::UPLOAD_IMAGE:
|
|
|
|
case startracker::UPLOAD_IMAGE:
|
|
|
|
case startracker::DOWNLOAD_IMAGE:
|
|
|
|
case startracker::DOWNLOAD_IMAGE:
|
|
|
|
case startracker::READ:
|
|
|
|
case startracker::FLASH_READ:
|
|
|
|
case startracker::FIRMWARE_UPDATE: {
|
|
|
|
case startracker::FIRMWARE_UPDATE: {
|
|
|
|
return DeviceHandlerBase::acceptExternalDeviceCommands();
|
|
|
|
return DeviceHandlerBase::acceptExternalDeviceCommands();
|
|
|
|
default:
|
|
|
|
default:
|
|
|
@ -1655,48 +1670,37 @@ void StarTrackerHandler::handleEvent(EventMessage* eventMessage) {
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
sif::debug << "StarTrackerHandler::handleEvent: Did not subscribe to this event"
|
|
|
|
sif::debug << "StarTrackerHandler::handleEvent: Did not subscribe to this event" << std::endl;
|
|
|
|
<< std::endl;
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ReturnValue_t StarTrackerHandler::executeReadCommand(const uint8_t* commandData,
|
|
|
|
ReturnValue_t StarTrackerHandler::executeFlashReadCommand(const uint8_t* commandData,
|
|
|
|
size_t commandDataLen) {
|
|
|
|
size_t commandDataLen) {
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
if (commandDataLen < ReadCmd::MIN_LENGTH) {
|
|
|
|
if (commandDataLen < ReadCmd::MIN_LENGTH) {
|
|
|
|
sif::warning << "StarTrackerHandler::executeReadCommand: Command too short" << std::endl;
|
|
|
|
sif::warning << "StarTrackerHandler::executeFlashReadCommand: Command too short" << std::endl;
|
|
|
|
return COMMAND_TOO_SHORT;
|
|
|
|
return COMMAND_TOO_SHORT;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uint8_t region = *(commandData);
|
|
|
|
uint8_t startRegion = *(commandData);
|
|
|
|
uint32_t address;
|
|
|
|
|
|
|
|
size_t size = sizeof(address);
|
|
|
|
|
|
|
|
const uint8_t* addressPtr = commandData + ReadCmd::ADDRESS_OFFSET;
|
|
|
|
|
|
|
|
result = SerializeAdapter::deSerialize(&address, addressPtr, &size,
|
|
|
|
|
|
|
|
SerializeIF::Endianness::BIG);
|
|
|
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
|
|
|
|
sif::debug << "StarTrackerHandler::executeReadCommand: Deserialization of address failed"
|
|
|
|
|
|
|
|
<< std::endl;
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t length;
|
|
|
|
uint32_t length;
|
|
|
|
size = sizeof(length);
|
|
|
|
size_t size = sizeof(length);
|
|
|
|
const uint8_t* lengthPtr = commandData + ReadCmd::LENGTH_OFFSET;
|
|
|
|
const uint8_t* lengthPtr = commandData + sizeof(startRegion);
|
|
|
|
result = SerializeAdapter::deSerialize(&length, lengthPtr, &size, SerializeIF::Endianness::BIG);
|
|
|
|
result = SerializeAdapter::deSerialize(&length, lengthPtr, &size, SerializeIF::Endianness::BIG);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::debug << "StarTrackerHandler::executeReadCommand: Deserialization of length failed"
|
|
|
|
sif::debug << "StarTrackerHandler::executeFlashReadCommand: Deserialization of length failed"
|
|
|
|
<< std::endl;
|
|
|
|
<< std::endl;
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (commandDataLen - sizeof(address) - sizeof(region) - sizeof(length) > MAX_PATH_SIZE) {
|
|
|
|
if (commandDataLen - sizeof(startRegion) - sizeof(length) > MAX_PATH_SIZE) {
|
|
|
|
sif::warning << "StarTrackerHandler::executeReadCommand: Received command with invalid"
|
|
|
|
sif::warning << "StarTrackerHandler::executeFlashReadCommand: Received command with invalid"
|
|
|
|
<< " path and filename" << std::endl;
|
|
|
|
<< " path and filename" << std::endl;
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const uint8_t* filePtr = commandData + ReadCmd::FILE_OFFSET;
|
|
|
|
const uint8_t* filePtr = commandData + sizeof(startRegion) + sizeof(length);
|
|
|
|
std::string fullname = std::string(reinterpret_cast<const char*>(filePtr),
|
|
|
|
std::string fullname = std::string(reinterpret_cast<const char*>(filePtr),
|
|
|
|
commandDataLen - sizeof(address) - sizeof(region) - sizeof(length));
|
|
|
|
commandDataLen - sizeof(startRegion) - sizeof(length));
|
|
|
|
result = strHelper->startFlashRead(fullname, region, address, length);
|
|
|
|
result = strHelper->startFlashRead(fullname, startRegion, length);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1737,8 +1741,7 @@ ReturnValue_t StarTrackerHandler::prepareUnlockCommand(const uint8_t* commandDat
|
|
|
|
req.region = *commandData;
|
|
|
|
req.region = *commandData;
|
|
|
|
size_t size = sizeof(req.code);
|
|
|
|
size_t size = sizeof(req.code);
|
|
|
|
const uint8_t* codePtr = commandData + UnlockCmd::CODE_OFFSET;
|
|
|
|
const uint8_t* codePtr = commandData + UnlockCmd::CODE_OFFSET;
|
|
|
|
result = SerializeAdapter::deSerialize(&req.code, &codePtr, &size,
|
|
|
|
result = SerializeAdapter::deSerialize(&req.code, &codePtr, &size, SerializeIF::Endianness::BIG);
|
|
|
|
SerializeIF::Endianness::BIG);
|
|
|
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1760,8 +1763,8 @@ ReturnValue_t StarTrackerHandler::prepareChecksumCommand(const uint8_t* commandD
|
|
|
|
req.region = *(commandData);
|
|
|
|
req.region = *(commandData);
|
|
|
|
size_t size = sizeof(req.address);
|
|
|
|
size_t size = sizeof(req.address);
|
|
|
|
const uint8_t* addressPtr = commandData + ChecksumCmd::ADDRESS_OFFSET;
|
|
|
|
const uint8_t* addressPtr = commandData + ChecksumCmd::ADDRESS_OFFSET;
|
|
|
|
result = SerializeAdapter::deSerialize(&req.address, addressPtr, &size,
|
|
|
|
result =
|
|
|
|
SerializeIF::Endianness::BIG);
|
|
|
|
SerializeAdapter::deSerialize(&req.address, addressPtr, &size, SerializeIF::Endianness::BIG);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::debug << "StarTrackerHandler::prepareChecksumCommand: Deserialization of address "
|
|
|
|
sif::debug << "StarTrackerHandler::prepareChecksumCommand: Deserialization of address "
|
|
|
|
<< "failed" << std::endl;
|
|
|
|
<< "failed" << std::endl;
|
|
|
@ -1769,8 +1772,8 @@ ReturnValue_t StarTrackerHandler::prepareChecksumCommand(const uint8_t* commandD
|
|
|
|
}
|
|
|
|
}
|
|
|
|
size = sizeof(req.length);
|
|
|
|
size = sizeof(req.length);
|
|
|
|
const uint8_t* lengthPtr = commandData + ChecksumCmd::LENGTH_OFFSET;
|
|
|
|
const uint8_t* lengthPtr = commandData + ChecksumCmd::LENGTH_OFFSET;
|
|
|
|
result = SerializeAdapter::deSerialize(&req.length, lengthPtr, &size,
|
|
|
|
result =
|
|
|
|
SerializeIF::Endianness::BIG);
|
|
|
|
SerializeAdapter::deSerialize(&req.length, lengthPtr, &size, SerializeIF::Endianness::BIG);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::debug << "StarTrackerHandler::prepareChecksumCommand: Deserialization of length failed"
|
|
|
|
sif::debug << "StarTrackerHandler::prepareChecksumCommand: Deserialization of length failed"
|
|
|
|
<< std::endl;
|
|
|
|
<< std::endl;
|
|
|
@ -1799,8 +1802,7 @@ ReturnValue_t StarTrackerHandler::prepareSetTimeCommand(const uint8_t* commandDa
|
|
|
|
result = SerializeAdapter::deSerialize(&req.unixTime, commandData, &size,
|
|
|
|
result = SerializeAdapter::deSerialize(&req.unixTime, commandData, &size,
|
|
|
|
SerializeIF::Endianness::BIG);
|
|
|
|
SerializeIF::Endianness::BIG);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::debug << "StarTrackerHandler::prepareSetTimeCommand: Deserialization failed"
|
|
|
|
sif::debug << "StarTrackerHandler::prepareSetTimeCommand: Deserialization failed" << std::endl;
|
|
|
|
<< std::endl;
|
|
|
|
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
uint32_t length = 0;
|
|
|
|
uint32_t length = 0;
|
|
|
@ -1836,8 +1838,8 @@ ReturnValue_t StarTrackerHandler::prepareUploadCentroidCommand(const uint8_t* co
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
struct UploadCentroidActionRequest req;
|
|
|
|
struct UploadCentroidActionRequest req;
|
|
|
|
std::string jsonFileName = std::string(reinterpret_cast<const char*>(commandData),
|
|
|
|
std::string jsonFileName =
|
|
|
|
commandDataLen);
|
|
|
|
std::string(reinterpret_cast<const char*>(commandData), commandDataLen);
|
|
|
|
NVMParameterBase j(jsonFileName);
|
|
|
|
NVMParameterBase j(jsonFileName);
|
|
|
|
result = j.readJsonFile();
|
|
|
|
result = j.readJsonFile();
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
@ -1866,13 +1868,15 @@ ReturnValue_t StarTrackerHandler::prepareUploadCentroidCommand(const uint8_t* co
|
|
|
|
result = j.getValue(startracker::UploadCentroidKeys::x_uncorrected, &req.x_uncorrected);
|
|
|
|
result = j.getValue(startracker::UploadCentroidKeys::x_uncorrected, &req.x_uncorrected);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
|
|
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
|
|
|
<< startracker::UploadCentroidKeys::x_uncorrected << " does not exist" << std::endl;
|
|
|
|
<< startracker::UploadCentroidKeys::x_uncorrected << " does not exist"
|
|
|
|
|
|
|
|
<< std::endl;
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = j.getValue(startracker::UploadCentroidKeys::y_uncorrected, &req.y_uncorrected);
|
|
|
|
result = j.getValue(startracker::UploadCentroidKeys::y_uncorrected, &req.y_uncorrected);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
|
|
|
sif::warning << "StarTrackerHandler::prepareUploadCentroidCommand: The key "
|
|
|
|
<< startracker::UploadCentroidKeys::y_uncorrected << " does not exist" << std::endl;
|
|
|
|
<< startracker::UploadCentroidKeys::y_uncorrected << " does not exist"
|
|
|
|
|
|
|
|
<< std::endl;
|
|
|
|
return result;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result = j.getValue(startracker::UploadCentroidKeys::x_corrected, &req.x_corrected);
|
|
|
|
result = j.getValue(startracker::UploadCentroidKeys::x_corrected, &req.x_corrected);
|
|
|
@ -2022,7 +2026,8 @@ void StarTrackerHandler::prepareErrorResetRequest() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ReturnValue_t StarTrackerHandler::prepareParamCommand(const uint8_t* commandData,
|
|
|
|
ReturnValue_t StarTrackerHandler::prepareParamCommand(const uint8_t* commandData,
|
|
|
|
size_t commandDataLen, ArcsecJsonParamBase& paramSet) {
|
|
|
|
size_t commandDataLen,
|
|
|
|
|
|
|
|
ArcsecJsonParamBase& paramSet) {
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
if (commandDataLen > MAX_PATH_SIZE) {
|
|
|
|
if (commandDataLen > MAX_PATH_SIZE) {
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
|
return FILE_PATH_TOO_LONG;
|
|
|
@ -2330,8 +2335,7 @@ ReturnValue_t StarTrackerHandler::handleParamRequest(LocalPoolDataSetBase& datas
|
|
|
|
dataset.setValidityBufferGeneration(false);
|
|
|
|
dataset.setValidityBufferGeneration(false);
|
|
|
|
result = dataset.deSerialize(&reply, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
result = dataset.deSerialize(&reply, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::warning << "StarTrackerHandler::handleParamRequest Deserialization failed"
|
|
|
|
sif::warning << "StarTrackerHandler::handleParamRequest Deserialization failed" << std::endl;
|
|
|
|
<< std::endl;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dataset.setValidityBufferGeneration(true);
|
|
|
|
dataset.setValidityBufferGeneration(true);
|
|
|
|
dataset.setValidity(true, true);
|
|
|
|
dataset.setValidity(true, true);
|
|
|
@ -2376,8 +2380,7 @@ ReturnValue_t StarTrackerHandler::checkProgram() {
|
|
|
|
startupState = StartupState::DONE;
|
|
|
|
startupState = StartupState::DONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (internalState == InternalState::VERIFY_BOOT) {
|
|
|
|
if (internalState == InternalState::VERIFY_BOOT) {
|
|
|
|
sif::warning << "StarTrackerHandler::checkProgram: Failed to boot firmware"
|
|
|
|
sif::warning << "StarTrackerHandler::checkProgram: Failed to boot firmware" << std::endl;
|
|
|
|
<< std::endl;
|
|
|
|
|
|
|
|
// Device handler will run into timeout and fall back to transition source mode
|
|
|
|
// Device handler will run into timeout and fall back to transition source mode
|
|
|
|
triggerEvent(BOOTING_FIRMWARE_FAILED);
|
|
|
|
triggerEvent(BOOTING_FIRMWARE_FAILED);
|
|
|
|
internalState = InternalState::FAILED_FIRMWARE_BOOT;
|
|
|
|
internalState = InternalState::FAILED_FIRMWARE_BOOT;
|
|
|
@ -2450,8 +2453,7 @@ ReturnValue_t StarTrackerHandler::handleActionReplySet(LocalPoolDataSetBase& dat
|
|
|
|
dataset.setValidityBufferGeneration(false);
|
|
|
|
dataset.setValidityBufferGeneration(false);
|
|
|
|
result = dataset.deSerialize(&reply, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
result = dataset.deSerialize(&reply, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::warning << "StarTrackerHandler::handleActionReplySet Deserialization failed"
|
|
|
|
sif::warning << "StarTrackerHandler::handleActionReplySet Deserialization failed" << std::endl;
|
|
|
|
<< std::endl;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dataset.setValidityBufferGeneration(true);
|
|
|
|
dataset.setValidityBufferGeneration(true);
|
|
|
|
dataset.setValidity(true, true);
|
|
|
|
dataset.setValidity(true, true);
|
|
|
|