command to request camera parameters
This commit is contained in:
@ -8,6 +8,7 @@
|
||||
extern "C" {
|
||||
#include <thirdparty/arcsec_star_tracker/client/generated/telemetry.h>
|
||||
#include <thirdparty/arcsec_star_tracker/client/generated/actionreq.h>
|
||||
#include <thirdparty/arcsec_star_tracker/client/generated/parameter.h>
|
||||
#include "common/misc.h"
|
||||
}
|
||||
|
||||
@ -18,7 +19,7 @@ StarTrackerHandler::StarTrackerHandler(object_id_t objectId, object_id_t comIF,
|
||||
DeviceHandlerBase(objectId, comIF, comCookie), temperatureSet(this), versionSet(this), powerSet(
|
||||
this), interfaceSet(this), timeSet(this), solutionSet(this), histogramSet(this), contrastSet(
|
||||
this), checksumSet(this), downloadCentroidSet(this), downloadMatchedStar(this),
|
||||
downloadDbImage(this), downloadBlobPixel(this), strHelper(
|
||||
downloadDbImage(this), downloadBlobPixel(this), cameraSet(this), strHelper(
|
||||
strHelper) {
|
||||
if (comCookie == nullptr) {
|
||||
sif::error << "StarTrackerHandler: Invalid com cookie" << std::endl;
|
||||
@ -495,6 +496,10 @@ ReturnValue_t StarTrackerHandler::buildCommandFromCommand(DeviceCommandId_t devi
|
||||
result = prepareFpgaActionCommand(commandData, commandDataLen);
|
||||
return result;
|
||||
}
|
||||
case (StarTracker::REQ_CAMERA_PARAMS): {
|
||||
result = prepareRequestCameraParams();
|
||||
return result;
|
||||
}
|
||||
default:
|
||||
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
||||
}
|
||||
@ -573,6 +578,8 @@ void StarTrackerHandler::fillCommandAndReplyMap() {
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
this->insertInCommandAndReplyMap(StarTracker::FPGA_ACTION, 3, nullptr,
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
this->insertInCommandAndReplyMap(StarTracker::REQ_CAMERA_PARAMS, 3, nullptr,
|
||||
StarTracker::MAX_FRAME_SIZE * 2 + 2);
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::scanForReply(const uint8_t *start, size_t remainingSize,
|
||||
@ -604,7 +611,12 @@ ReturnValue_t StarTrackerHandler::scanForReply(const uint8_t *start, size_t rema
|
||||
}
|
||||
case TMTC_SETPARAMREPLY: {
|
||||
*foundLen = remainingSize - bytesLeft;
|
||||
result = scanForParameterReply(foundId);
|
||||
result = scanForSetParameterReply(foundId);
|
||||
break;
|
||||
}
|
||||
case TMTC_PARAMREPLY: {
|
||||
*foundLen = remainingSize - bytesLeft;
|
||||
result = scanForGetParameterReply(foundId);
|
||||
break;
|
||||
}
|
||||
case TMTC_TELEMETRYREPLYA:
|
||||
@ -726,6 +738,10 @@ ReturnValue_t StarTrackerHandler::interpretDeviceReply(DeviceCommandId_t id, con
|
||||
result = handleSetParamReply();
|
||||
break;
|
||||
}
|
||||
case (StarTracker::REQ_CAMERA_PARAMS): {
|
||||
handleParamRequest(cameraSet, StarTracker::CameraSet::SIZE);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
sif::debug << "StarTrackerHandler::interpretDeviceReply: Unknown device reply id:" << id
|
||||
<< std::endl;
|
||||
@ -934,6 +950,22 @@ ReturnValue_t StarTrackerHandler::initializeLocalDataPool(localpool::DataPool& l
|
||||
localDataPoolMap.emplace(StarTracker::BLOBPIX_IN_USE, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::BLOBPIX_BRIGHT_NEIGHBOURS, 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::FOCALLENGTH, new PoolEntry<float>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::EXPOSURE, new PoolEntry<float>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::INTERVAL, new PoolEntry<float>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAMERA_OFFSET, new PoolEntry<int16_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::PGAGAIN, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::ADCGAIN, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_REG1, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_VAL1, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_REG2, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_VAL2, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_REG3, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_VAL3, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_REG4, new PoolEntry<uint8_t>( { 0 }));
|
||||
localDataPoolMap.emplace(StarTracker::CAM_VAL4, new PoolEntry<uint8_t>( { 0 }));
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
@ -1036,7 +1068,7 @@ ReturnValue_t StarTrackerHandler::scanForActionReply(DeviceCommandId_t *foundId)
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::scanForParameterReply(DeviceCommandId_t *foundId) {
|
||||
ReturnValue_t StarTrackerHandler::scanForSetParameterReply(DeviceCommandId_t *foundId) {
|
||||
const uint8_t* reply = dataLinkLayer.getReply();
|
||||
switch (*reply) {
|
||||
case (StarTracker::ID::SUBSCRIBE): {
|
||||
@ -1091,6 +1123,22 @@ ReturnValue_t StarTrackerHandler::scanForParameterReply(DeviceCommandId_t *found
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::scanForGetParameterReply(DeviceCommandId_t *foundId) {
|
||||
const uint8_t* reply = dataLinkLayer.getReply();
|
||||
switch (*reply) {
|
||||
case (StarTracker::ID::CAMERA): {
|
||||
*foundId = StarTracker::REQ_CAMERA_PARAMS;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
sif::warning << "tarTrackerHandler::scanForGetParameterReply: UnkNown ID" << std::endl;
|
||||
return RETURN_FAILED;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::scanForTmReply(DeviceCommandId_t *foundId) {
|
||||
const uint8_t* reply = dataLinkLayer.getReply();
|
||||
switch (*reply) {
|
||||
@ -1700,6 +1748,16 @@ ReturnValue_t StarTrackerHandler::prepareFpgaActionCommand(const uint8_t* comman
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::prepareRequestCameraParams() {
|
||||
struct Camera req;
|
||||
uint32_t length = 0;
|
||||
arc_pack_camera_parameter_req(commandBuffer, &length);
|
||||
dataLinkLayer.encodeFrame(commandBuffer, length);
|
||||
rawPacket = dataLinkLayer.getEncodedFrame();
|
||||
rawPacketLen = dataLinkLayer.getEncodedLength();
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::handleSetParamReply() {
|
||||
const uint8_t* reply = dataLinkLayer.getReply();
|
||||
uint8_t status = *(reply + STATUS_OFFSET);
|
||||
@ -1788,6 +1846,31 @@ ReturnValue_t StarTrackerHandler::handleChecksumReply() {
|
||||
return RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::handleParamRequest(LocalPoolDataSetBase& dataset, size_t size) {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
result = dataset.read(TIMEOUT_TYPE, MUTEX_TIMEOUT);
|
||||
if (result != RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
const uint8_t* reply = dataLinkLayer.getReply() + PARAMS_OFFSET;
|
||||
dataset.setValidityBufferGeneration(false);
|
||||
result = dataset.deSerialize(&reply, &size, SerializeIF::Endianness::LITTLE);
|
||||
if (result != RETURN_OK) {
|
||||
sif::warning << "StarTrackerHandler::handleParamRequest Deserialization failed"
|
||||
<< std::endl;
|
||||
}
|
||||
dataset.setValidityBufferGeneration(true);
|
||||
dataset.setValidity(true, true);
|
||||
result = dataset.commit(TIMEOUT_TYPE, MUTEX_TIMEOUT);
|
||||
if (result != RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
#if OBSW_VERBOSE_LEVEL >= 1 && OBSW_DEBUG_STARTRACKER == 1
|
||||
dataset.printSet();
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t StarTrackerHandler::handlePingReply() {
|
||||
ReturnValue_t result = RETURN_OK;
|
||||
uint32_t pingId = 0;
|
||||
|
Reference in New Issue
Block a user