|
|
|
@@ -25,7 +25,8 @@ StarTrackerHandler::~StarTrackerHandler() {
|
|
|
|
|
void StarTrackerHandler::doStartUp() {
|
|
|
|
|
|
|
|
|
|
#if OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP == 1
|
|
|
|
|
setMode(MODE_NORMAL);
|
|
|
|
|
// setMode(MODE_NORMAL);
|
|
|
|
|
setMode(_MODE_TO_ON);
|
|
|
|
|
#else
|
|
|
|
|
setMode(_MODE_TO_ON);
|
|
|
|
|
#endif
|
|
|
|
@@ -60,6 +61,10 @@ ReturnValue_t StarTrackerHandler::buildCommandFromCommand(DeviceCommandId_t devi
|
|
|
|
|
preparePingRequest();
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (StarTracker::REBOOT): {
|
|
|
|
|
prepareRebootCommand();
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
}
|
|
|
|
|
case (StarTracker::REQ_TEMPERATURE): {
|
|
|
|
|
prepareTemperatureRequest();
|
|
|
|
|
return RETURN_OK;
|
|
|
|
@@ -75,6 +80,7 @@ void StarTrackerHandler::fillCommandAndReplyMap() {
|
|
|
|
|
* is specified */
|
|
|
|
|
this->insertInCommandAndReplyMap(StarTracker::PING_REQUEST, 1, nullptr,
|
|
|
|
|
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
|
|
|
|
this->insertInCommandMap(StarTracker::REBOOT);
|
|
|
|
|
this->insertInCommandAndReplyMap(StarTracker::REQ_TEMPERATURE, 1, &temperatureSet,
|
|
|
|
|
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
|
|
|
|
}
|
|
|
|
@@ -136,9 +142,11 @@ ReturnValue_t StarTrackerHandler::scanForReply(const uint8_t *start, size_t rema
|
|
|
|
|
|
|
|
|
|
ReturnValue_t StarTrackerHandler::interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) {
|
|
|
|
|
|
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
|
|
|
|
|
|
switch (id) {
|
|
|
|
|
case (StarTracker::PING_REQUEST): {
|
|
|
|
|
handlePingReply();
|
|
|
|
|
result = handlePingReply();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case (StarTracker::REQ_TEMPERATURE): {
|
|
|
|
@@ -146,12 +154,13 @@ ReturnValue_t StarTrackerHandler::interpretDeviceReply(DeviceCommandId_t id, con
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default: {
|
|
|
|
|
sif::debug << "StarTrackerHandler::interpretDeviceReply: Unknown device reply id" << std::endl;
|
|
|
|
|
sif::debug << "StarTrackerHandler::interpretDeviceReply: Unknown device reply id:" << id
|
|
|
|
|
<< std::endl;
|
|
|
|
|
return DeviceHandlerIF::UNKNOWN_DEVICE_REPLY;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return RETURN_OK;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::setNormalDatapoolEntriesInvalid() {
|
|
|
|
@@ -165,7 +174,6 @@ uint32_t StarTrackerHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo
|
|
|
|
|
ReturnValue_t StarTrackerHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
|
|
|
|
LocalDataPoolManager& poolManager) {
|
|
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(StarTracker::STATUS, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
|
localDataPoolMap.emplace(StarTracker::TICKS, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
|
localDataPoolMap.emplace(StarTracker::TIME, new PoolEntry<uint64_t>( { 0 }));
|
|
|
|
|
localDataPoolMap.emplace(StarTracker::MCU_TEMPERATURE, new PoolEntry<float>( { 0 }));
|
|
|
|
@@ -196,6 +204,16 @@ void StarTrackerHandler::preparePingRequest() {
|
|
|
|
|
rawPacketLen = encLength;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::prepareRebootCommand() {
|
|
|
|
|
uint32_t length = 0;
|
|
|
|
|
struct RebootActionRequest rebootReq;
|
|
|
|
|
arc_pack_reboot_action_req(&rebootReq, commandBuffer, &length);
|
|
|
|
|
uint32_t encLength = 0;
|
|
|
|
|
arc_transport_encode_body(commandBuffer, length, encBuffer, &encLength);
|
|
|
|
|
rawPacket = encBuffer;
|
|
|
|
|
rawPacketLen = encLength;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::prepareTemperatureRequest() {
|
|
|
|
|
uint32_t length = 0;
|
|
|
|
|
arc_tm_pack_temperature_req(commandBuffer, &length);
|
|
|
|
@@ -205,49 +223,59 @@ void StarTrackerHandler::prepareTemperatureRequest() {
|
|
|
|
|
rawPacketLen = encLength;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::handlePingReply() {
|
|
|
|
|
ReturnValue_t StarTrackerHandler::handlePingReply() {
|
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
|
uint32_t pingId = 0;
|
|
|
|
|
size_t size = 0;
|
|
|
|
|
const uint8_t* buffer = decodedFrame;
|
|
|
|
|
SerializeAdapter::deSerialize(&pingId, &buffer, &size, SerializeIF::Endianness::BIG);
|
|
|
|
|
uint8_t status = *(decodedFrame + 2);
|
|
|
|
|
const uint8_t* buffer = decodedFrame + 3;
|
|
|
|
|
size_t size = sizeof(pingId);
|
|
|
|
|
SerializeAdapter::deSerialize(&pingId, &buffer, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1
|
|
|
|
|
sif::info << "Ping status "<< static_cast<unsigned int>(*(decodedFrame + 2)) << std::endl;
|
|
|
|
|
sif::info << "Ping id "<< pingId << std::endl;
|
|
|
|
|
sif::info << "Ping status: "<< static_cast<unsigned int>(status) << std::endl;
|
|
|
|
|
sif::info << "Ping id: 0x"<< std::hex << pingId << std::endl;
|
|
|
|
|
#endif /* OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1 */
|
|
|
|
|
if (status != StarTracker::STATUS_OK || pingId != PING_ID) {
|
|
|
|
|
result = PING_FAILED;
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StarTrackerHandler::handleTemperatureTm() {
|
|
|
|
|
ReturnValue_t StarTrackerHandler::handleTemperatureTm() {
|
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
|
PoolReadGuard rg(&temperatureSet);
|
|
|
|
|
uint32_t offset = 1;
|
|
|
|
|
temperatureSet.status = *(decodedFrame + offset);
|
|
|
|
|
uint32_t offset = 2;
|
|
|
|
|
uint8_t status = *(decodedFrame + offset);
|
|
|
|
|
offset += 1;
|
|
|
|
|
if(temperatureSet.status.value != 0) {
|
|
|
|
|
if(status != StarTracker::STATUS_OK) {
|
|
|
|
|
sif::warning << "StarTrackerHandler::handleTemperatureTm: Reply error: "
|
|
|
|
|
<< static_cast<unsigned int>(temperatureSet.status.value) << std::endl;
|
|
|
|
|
triggerEvent(TM_REPLY_ERROR, temperatureSet.status.value);
|
|
|
|
|
<< static_cast<unsigned int>(status) << std::endl;
|
|
|
|
|
result = TEMPERATURE_REQUEST_FAILED;
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
temperatureSet.ticks = *(decodedFrame + offset) << 24
|
|
|
|
|
| *(decodedFrame + offset + 1) << 16 | *(decodedFrame + offset + 2) << 8
|
|
|
|
|
| *(decodedFrame + offset + 3);
|
|
|
|
|
offset += 4;
|
|
|
|
|
temperatureSet.time = static_cast<uint64_t>(*(decodedFrame + offset)) << 56
|
|
|
|
|
| static_cast<uint64_t>(*(decodedFrame + offset + 1)) << 48
|
|
|
|
|
| static_cast<uint64_t>(*(decodedFrame + offset + 2)) << 40
|
|
|
|
|
| static_cast<uint64_t>(*(decodedFrame + offset + 3)) << 32
|
|
|
|
|
| *(decodedFrame + offset + 4) << 24 | *(decodedFrame + offset + 5) << 16
|
|
|
|
|
| *(decodedFrame + offset + 6) << 8 | *(decodedFrame + offset + 7);
|
|
|
|
|
offset += 8;
|
|
|
|
|
const uint8_t* buffer = decodedFrame + offset;
|
|
|
|
|
size_t size = sizeof(temperatureSet.ticks);
|
|
|
|
|
SerializeAdapter::deSerialize(&temperatureSet.ticks, &buffer, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
|
offset += size;
|
|
|
|
|
buffer = decodedFrame + offset;
|
|
|
|
|
size = sizeof(temperatureSet.time);
|
|
|
|
|
SerializeAdapter::deSerialize(&temperatureSet.time, &buffer, &size, SerializeIF::Endianness::LITTLE);
|
|
|
|
|
offset += size;
|
|
|
|
|
temperatureSet.mcuTemperature = *(decodedFrame + offset) << 24
|
|
|
|
|
| *(decodedFrame + offset + 1) << 16 | *(decodedFrame + offset + 2) << 8
|
|
|
|
|
| *(decodedFrame + offset + 3);
|
|
|
|
|
offset += 4;
|
|
|
|
|
temperatureSet.cmosTemperature = *(decodedFrame + offset) << 24
|
|
|
|
|
offset += sizeof(temperatureSet.mcuTemperature);
|
|
|
|
|
temperatureSet.mcuTemperature = *(decodedFrame + offset) << 24
|
|
|
|
|
| *(decodedFrame + offset + 1) << 16 | *(decodedFrame + offset + 2) << 8
|
|
|
|
|
| *(decodedFrame + offset + 3);
|
|
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1
|
|
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1
|
|
|
|
|
sif::info << "StarTrackerHandler::handleTemperatureTm: Ticks: "
|
|
|
|
|
<< temperatureSet.ticks << std::endl;
|
|
|
|
|
sif::info << "StarTrackerHandler::handleTemperatureTm: Time: "
|
|
|
|
|
<< temperatureSet.time << std::endl;
|
|
|
|
|
sif::info << "StarTrackerHandler::handleTemperatureTm: MCU Temperature: "
|
|
|
|
|
<< temperatureSet.mcuTemperature << " °C" << std::endl;
|
|
|
|
|
sif::info << "StarTrackerHandler::handleTemperatureTm: CMOS Temperature: "
|
|
|
|
|
<< temperatureSet.mcuTemperature << " °C" << std::endl;
|
|
|
|
|
#endif
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|