diff --git a/README.md b/README.md
index 34f31da7..7acc6342 100644
--- a/README.md
+++ b/README.md
@@ -19,9 +19,10 @@
12. [Static Code Analysis](#static-code-analysis)
13. [Eclipse](#eclipse)
14. [Running the OBSW on a Raspberry Pi](#rpi)
-15. [Manually preparing sysroots to compile gpsd](#gpsd)
-16. [FSFW](#fsfw)
-17. [Coding Style](#coding-style)
+15. [Running OBSW on EGSE](#egse)
+16. [Manually preparing sysroots to compile gpsd](#gpsd)
+17. [FSFW](#fsfw)
+18. [Coding Style](#coding-style)
# General information
@@ -1134,6 +1135,33 @@ sudo apt-get install gpiod libgpiod-dev
to install the required GPIO libraries before cloning the system root folder.
+# Running OBSW on EGSE
+The EGSE is a test system from arcsec build arround a raspberry pi 4 to test the star tracker. The IP address of the EGSE (raspberry pi) is 192.168.18.31. An ssh session can be opened with
+````
+ssh pi@192.168.18.31
+````
+Password: raspberry
+
+To run the obsw perform the following steps:
+1. Build the cmake EGSE Configuration
+ * the sysroots for the EGSE can be found [here](https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files/?dir=/EIVE_IRS/Software/egse&fileid=1190471)
+2. Disable the ser2net systemd service on the EGSE
+````sh
+$ sudo systemctl stop ser2net.service
+````
+3. Power on the star tracker by running
+````sh
+$ ~/powerctrl/enable0.sh`
+````
+4. Run portforwarding script for tmtc tcp connection and tcf agent on host PC
+````sh
+$ ./scripts/egse-port.sh
+````
+5. The star tracker can be powered off by running
+````sh
+$ ~/powerctrl/disable0.sh
+````
+
# Manually preparing sysroots to compile gpsd
Copy all header files from [here](https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files/?dir=/EIVE_IRS/Software/gpsd&fileid=1189985) to the /usr/include directory and all static libraries to /usr/lib.
diff --git a/bsp_egse/InitMission.cpp b/bsp_egse/InitMission.cpp
index 920c066d..222c8ec8 100644
--- a/bsp_egse/InitMission.cpp
+++ b/bsp_egse/InitMission.cpp
@@ -24,6 +24,10 @@ ServiceInterfaceStream sif::error("ERROR");
ObjectManagerIF* objectManager = nullptr;
void initmission::initMission() {
+ sif::info << "Make sure the systemd service ser2net on the egse has been stopped "
+ << "(alias stop-ser2net)" << std::endl;
+ sif::info << "Make sure the power lines of the star tracker have been enabled "
+ << "(alias enable-startracker)" << std::endl;
sif::info << "Building global objects.." << std::endl;
/* Instantiate global object manager and also create all objects */
ObjectManager::instance()->setObjectFactoryFunction(ObjectFactory::produce, nullptr);
diff --git a/linux/devices/devicedefinitions/StarTrackerDefinitions.h b/linux/devices/devicedefinitions/StarTrackerDefinitions.h
index 7073bac9..ba077e5f 100644
--- a/linux/devices/devicedefinitions/StarTrackerDefinitions.h
+++ b/linux/devices/devicedefinitions/StarTrackerDefinitions.h
@@ -214,6 +214,15 @@ enum PoolIds : lp_id_t {
CAM_VAL3,
CAM_REG4,
CAM_VAL4,
+ CAM_REG5,
+ CAM_VAL5,
+ CAM_REG6,
+ CAM_VAL6,
+ CAM_REG7,
+ CAM_VAL7,
+ CAM_REG8,
+ CAM_VAL8,
+ CAM_FREQ_1,
LIMITS_ACTION,
LIMITS_FPGA18CURRENT,
LIMITS_FPGA25CURRENT,
@@ -239,7 +248,96 @@ enum PoolIds : lp_id_t {
BLOB_DARK_THRESHOLD,
BLOB_ENABLE_HISTOGRAM,
BLOB_ENABLE_CONTRAST,
- BLOB_BIN_MODE
+ BLOB_BIN_MODE,
+ LOGLEVEL1,
+ LOGLEVEL2,
+ LOGLEVEL3,
+ LOGLEVEL4,
+ LOGLEVEL5,
+ LOGLEVEL6,
+ LOGLEVEL7,
+ LOGLEVEL8,
+ LOGLEVEL9,
+ LOGLEVEL10,
+ LOGLEVEL11,
+ LOGLEVEL12,
+ LOGLEVEL13,
+ LOGLEVEL14,
+ LOGLEVEL15,
+ LOGLEVEL16,
+ MOUNTING_QW,
+ MOUNTING_QX,
+ MOUNTING_QY,
+ MOUNTING_QZ,
+ IMAGE_PROCESSOR_MODE,
+ IMAGE_PROCESSOR_STORE,
+ IMAGE_PROCESSOR_SIGNALTHRESHOLD,
+ IMAGE_PROCESSOR_DARKTHRESHOLD,
+ IMAGE_PROCESSOR_BACKGROUNDCOMPENSATION,
+ CENTROIDING_ENABLE_FILTER,
+ CENTROIDING_MAX_QUALITY,
+ CENTROIDING_DARK_THRESHOLD,
+ CENTROIDING_MIN_QUALITY,
+ CENTROIDING_MAX_INTENSITY,
+ CENTROIDING_MIN_INTENSITY,
+ CENTROIDING_MAX_MAGNITUDE,
+ CENTROIDING_GAUSSIAN_CMAX,
+ CENTROIDING_GAUSSIAN_CMIN,
+ CENTROIDING_TRANSMATRIX00,
+ CENTROIDING_TRANSMATRIX01,
+ CENTROIDING_TRANSMATRIX10,
+ CENTROIDING_TRANSMATRIX11,
+ LISA_MODE,
+ LISA_PREFILTER_DIST_THRESHOLD,
+ LISA_PREFILTER_ANGLE_THRESHOLD,
+ LISA_FOV_WIDTH,
+ LISA_FOV_HEIGHT,
+ LISA_FLOAT_STAR_LIMIT,
+ LISA_CLOSE_STAR_LIMIT,
+ LISA_RATING_WEIGHT_CLOSE_STAR_COUNT,
+ LISA_RATING_WEIGHT_FRACTION_CLOSE,
+ LISA_RATING_WEIGHT_MEAN_SUM,
+ LISA_RATING_WEIGHT_DB_STAR_COUNT,
+ LISA_MAX_COMBINATIONS,
+ LISA_NR_STARS_STOP,
+ LISA_FRACTION_CLOSE_STOP,
+ MATCHING_SQUARED_DISTANCE_LIMIT,
+ MATCHING_SQUARED_SHIFT_LIMIT,
+ TRACKING_THIN_LIMIT,
+ TRACKING_OUTLIER_THRESHOLD,
+ TRACKING_OUTLIER_THRESHOLD_QUEST,
+ TRACKING_TRACKER_CHOICE,
+ VALIDATION_STABLE_COUNT,
+ VALIDATION_MAX_DIFFERENCE,
+ VALIDATION_MIN_TRACKER_CONFIDENCE,
+ VALIDATION_MIN_MATCHED_STARS,
+ ALGO_MODE,
+ ALGO_I2T_MIN_CONFIDENCE,
+ ALGO_I2T_MIN_MATCHED,
+ ALGO_I2L_MIN_CONFIDENCE,
+ ALGO_I2L_MIN_MATCHED,
+ SUBSCRIPTION_TM1,
+ SUBSCRIPTION_TM2,
+ SUBSCRIPTION_TM3,
+ SUBSCRIPTION_TM4,
+ SUBSCRIPTION_TM5,
+ SUBSCRIPTION_TM6,
+ SUBSCRIPTION_TM7,
+ SUBSCRIPTION_TM8,
+ SUBSCRIPTION_TM9,
+ SUBSCRIPTION_TM10,
+ SUBSCRIPTION_TM11,
+ SUBSCRIPTION_TM12,
+ SUBSCRIPTION_TM13,
+ SUBSCRIPTION_TM14,
+ SUBSCRIPTION_TM15,
+ SUBSCRIPTION_TM16,
+ LOG_SUBSCRIPTION_LEVEL1,
+ LOG_SUBSCRIPTION_MODULE1,
+ LOG_SUBSCRIPTION_LEVEL2,
+ LOG_SUBSCRIPTION_MODULE2,
+ DEBUG_CAMERA_TIMING,
+ DEBUG_CAMERA_TEST
};
static const DeviceCommandId_t PING_REQUEST = 0;
@@ -257,7 +355,7 @@ static const DeviceCommandId_t REQ_POWER = 11;
static const DeviceCommandId_t TAKE_IMAGE = 15;
static const DeviceCommandId_t DOWNLOAD_CENTROID = 16;
static const DeviceCommandId_t UPLOAD_CENTROID = 17;
-static const DeviceCommandId_t SUBSCRIBE_TO_TM = 18;
+static const DeviceCommandId_t SUBSCRIPTION = 18;
static const DeviceCommandId_t IMAGE_PROCESSOR = 19;
static const DeviceCommandId_t REQ_SOLUTION = 24;
static const DeviceCommandId_t REQ_TEMPERATURE = 25;
@@ -290,6 +388,21 @@ static const DeviceCommandId_t UPLOAD_FPGA_IMAGE = 65;
static const DeviceCommandId_t FPGA_ACTION = 66;
static const DeviceCommandId_t REQ_CAMERA = 67;
static const DeviceCommandId_t REQ_LIMITS = 68;
+static const DeviceCommandId_t REQ_LOG_LEVEL = 69;
+static const DeviceCommandId_t REQ_MOUNTING = 70;
+static const DeviceCommandId_t REQ_IMAGE_PROCESSOR = 71;
+static const DeviceCommandId_t REQ_CENTROIDING = 72;
+static const DeviceCommandId_t REQ_LISA = 73;
+static const DeviceCommandId_t REQ_MATCHING = 74;
+static const DeviceCommandId_t REQ_TRACKING = 75;
+static const DeviceCommandId_t REQ_VALIDATION = 76;
+static const DeviceCommandId_t REQ_ALGO = 77;
+static const DeviceCommandId_t REQ_SUBSCRIPTION = 78;
+static const DeviceCommandId_t REQ_LOG_SUBSCRIPTION = 79;
+static const DeviceCommandId_t REQ_DEBUG_CAMERA = 80;
+static const DeviceCommandId_t LOGLEVEL = 81;
+static const DeviceCommandId_t LOGSUBSCRIPTION = 82;
+static const DeviceCommandId_t DEBUG_CAMERA = 83;
static const DeviceCommandId_t NONE = 0xFFFFFFFF;
static const uint32_t VERSION_SET_ID = REQ_VERSION;
@@ -307,6 +420,18 @@ static const uint32_t DOWNLOAD_DBIMAGE_SET_ID = DOWNLOAD_DBIMAGE;
static const uint32_t DOWNLOAD_BLOBPIXEL_SET_ID = DOWNLOAD_BLOBPIXEL;
static const uint32_t CAMERA_SET_ID = REQ_CAMERA;
static const uint32_t LIMITS_SET_ID = REQ_LIMITS;
+static const uint32_t LOG_LEVEL_SET_ID = REQ_LOG_LEVEL;
+static const uint32_t MOUNTING_SET_ID = REQ_MOUNTING;
+static const uint32_t IMAGE_PROCESSOR_SET_ID = REQ_IMAGE_PROCESSOR;
+static const uint32_t CENTROIDING_SET_ID = REQ_CENTROIDING;
+static const uint32_t LISA_SET_ID = REQ_LISA;
+static const uint32_t MATCHING_SET_ID = REQ_MATCHING;
+static const uint32_t TRACKING_SET_ID = REQ_TRACKING;
+static const uint32_t VALIDATION_SET_ID = REQ_VALIDATION;
+static const uint32_t ALGO_SET_ID = REQ_ALGO;
+static const uint32_t SUBSCRIPTION_SET_ID = REQ_SUBSCRIPTION;
+static const uint32_t LOG_SUBSCRIPTION_SET_ID = REQ_LOG_SUBSCRIPTION;
+static const uint32_t DEBUG_CAMERA_SET_ID = REQ_DEBUG_CAMERA;
/** Max size of unencoded frame */
static const size_t MAX_FRAME_SIZE = 1200;
@@ -324,8 +449,20 @@ static const uint8_t DOWNLOAD_CENTROID_SET_ENTRIES = 11;
static const uint8_t DOWNLOAD_MATCHED_STAR_SET_ENTRIES = 14;
static const uint8_t DOWNLOAD_DBIMAGE_SET_ENTRIES = 6;
static const uint8_t DOWNLOAD_BLOBPIXEL_SET_ENTRIES = 7;
-static const uint8_t CAMERA_SET_ENTRIES = 15;
+static const uint8_t CAMERA_SET_ENTRIES = 24;
static const uint8_t LIMITS_SET_ENTRIES = 11;
+static const uint8_t LOG_LEVEL_SET_ENTRIES = 16;
+static const uint8_t MOUNTING_SET_ENTRIES = 4;
+static const uint8_t IMAGE_PROCESSOR_SET_ENTRIES = 5;
+static const uint8_t CENTROIDING_PARAMS_SET_ENTRIES = 13;
+static const uint8_t LISA_SET_ENTRIES = 14;
+static const uint8_t MATCHING_SET_ENTRIES = 2;
+static const uint8_t TRACKING_SET_ENTRIES = 4;
+static const uint8_t VALIDATION_SET_ENTRIES = 4;
+static const uint8_t ALGO_SET_ENTRIES = 5;
+static const uint8_t SUBSCRIPTION_SET_ENTRIES = 16;
+static const uint8_t LOG_SUBSCRIPTION_SET_ENTRIES = 4;
+static const uint8_t DEBUG_CAMERA_SET_ENTRIES = 2;
// Action, parameter and telemetry IDs
namespace ID {
@@ -347,7 +484,7 @@ static const uint8_t REBOOT = 7;
static const uint8_t UPLOAD_IMAGE = 10;
static const uint8_t POWER = 11;
static const uint8_t SET_TIME = 14;
-static const uint8_t SUBSCRIBE = 18;
+static const uint8_t SUBSCRIPTION = 18;
static const uint8_t SOLUTION = 24;
static const uint8_t TEMPERATURE = 27;
static const uint8_t HISTOGRAM = 28;
@@ -366,6 +503,9 @@ static const uint8_t DOWNLOAD_MATCHED_STAR = 18;
static const uint8_t DOWNLOAD_DBIMAGE = 19;
static const uint8_t DOWNLOAD_BLOBPIXEL = 24;
static const uint8_t FPGA_ACTION = 22;
+static const uint8_t LOG_LEVEL = 3;
+static const uint8_t LOG_SUBSCRIPTION = 19;
+static const uint8_t DEBUG_CAMERA = 20;
} // namespace ID
namespace Program {
@@ -1153,7 +1293,7 @@ class DownloadBlobPixel : public StaticLocalDataSet {
public:
// Size of dataset
- static const size_t SIZE = 25;
+ static const size_t SIZE = 34;
CameraSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, CAMERA_SET_ID) {}
@@ -1174,6 +1314,15 @@ class CameraSet : public StaticLocalDataSet {
lp_var_t val3 = lp_var_t(sid.objectId, PoolIds::CAM_VAL3, this);
lp_var_t reg4 = lp_var_t(sid.objectId, PoolIds::CAM_REG4, this);
lp_var_t val4 = lp_var_t(sid.objectId, PoolIds::CAM_VAL4, this);
+ lp_var_t reg5 = lp_var_t(sid.objectId, PoolIds::CAM_REG5, this);
+ lp_var_t val5 = lp_var_t(sid.objectId, PoolIds::CAM_VAL5, this);
+ lp_var_t reg6 = lp_var_t(sid.objectId, PoolIds::CAM_REG6, this);
+ lp_var_t val6 = lp_var_t(sid.objectId, PoolIds::CAM_VAL6, this);
+ lp_var_t reg7 = lp_var_t(sid.objectId, PoolIds::CAM_REG7, this);
+ lp_var_t val7 = lp_var_t(sid.objectId, PoolIds::CAM_VAL7, this);
+ lp_var_t reg8 = lp_var_t(sid.objectId, PoolIds::CAM_REG8, this);
+ lp_var_t val8 = lp_var_t(sid.objectId, PoolIds::CAM_VAL8, this);
+ lp_var_t freq1 = lp_var_t(sid.objectId, PoolIds::CAM_FREQ_1, this);
void printSet() {
PoolReadGuard rg(this);
@@ -1203,6 +1352,24 @@ class CameraSet : public StaticLocalDataSet {
<< std::endl;
sif::info << "CameraSet::printSet: Val 4: " << static_cast(this->val4.value)
<< std::endl;
+ sif::info << "CameraSet::printSet: Reg 5: " << static_cast(this->reg5.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Val 5: " << static_cast(this->val5.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Reg 6: " << static_cast(this->reg6.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Val 6: " << static_cast(this->val6.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Reg 7: " << static_cast(this->reg7.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Val 7: " << static_cast(this->val7.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Reg 8: " << static_cast(this->reg8.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Val 8: " << static_cast(this->val8.value)
+ << std::endl;
+ sif::info << "CameraSet::printSet: Freq 1: " << static_cast(this->freq1.value)
+ << std::endl;
}
};
@@ -1239,17 +1406,509 @@ class LimitsSet : public StaticLocalDataSet {
void printSet() {
PoolReadGuard rg(this);
- sif::info << "CameraSet::printSet: action: " << static_cast(this->action.value)
+ sif::info << "LimitsSet::printSet: action: " << static_cast(this->action.value)
<< std::endl;
- sif::info << "CameraSet::printSet: FPGA18Current: " << this->fpga18current << std::endl;
- sif::info << "CameraSet::printSet: FPGA25Current: " << this->fpga25current << std::endl;
- sif::info << "CameraSet::printSet: FPGA10Current: " << this->fpga10current << std::endl;
- sif::info << "CameraSet::printSet: MCUCurrent: " << this->mcuCurrent << std::endl;
- sif::info << "CameraSet::printSet: CMOS21Current: " << this->cmos21current << std::endl;
- sif::info << "CameraSet::printSet: CMOSPixCurrent: " << this->cmosPixCurrent << std::endl;
- sif::info << "CameraSet::printSet: CMOS33Current: " << this->cmos33current << std::endl;
- sif::info << "CameraSet::printSet: CMOSVResCurrent: " << this->cmosVresCurrent << std::endl;
- sif::info << "CameraSet::printSet: CMOSTemperature: " << this->cmosTemperature << std::endl;
+ sif::info << "LimitsSet::printSet: FPGA18Current: " << this->fpga18current << std::endl;
+ sif::info << "LimitsSet::printSet: FPGA25Current: " << this->fpga25current << std::endl;
+ sif::info << "LimitsSet::printSet: FPGA10Current: " << this->fpga10current << std::endl;
+ sif::info << "LimitsSet::printSet: MCUCurrent: " << this->mcuCurrent << std::endl;
+ sif::info << "LimitsSet::printSet: CMOS21Current: " << this->cmos21current << std::endl;
+ sif::info << "LimitsSet::printSet: CMOSPixCurrent: " << this->cmosPixCurrent << std::endl;
+ sif::info << "LimitsSet::printSet: CMOS33Current: " << this->cmos33current << std::endl;
+ sif::info << "LimitsSet::printSet: CMOSVResCurrent: " << this->cmosVresCurrent << std::endl;
+ sif::info << "LimitsSet::printSet: CMOSTemperature: " << this->cmosTemperature << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested log level parameters
+ */
+class LogLevelSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 16;
+
+ LogLevelSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, LOG_LEVEL_SET_ID) {}
+
+ LogLevelSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, LOG_LEVEL_SET_ID)) {}
+
+ lp_var_t loglevel1 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL1, this);
+ lp_var_t loglevel2 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL2, this);
+ lp_var_t loglevel3 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL3, this);
+ lp_var_t loglevel4 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL4, this);
+ lp_var_t loglevel5 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL5, this);
+ lp_var_t loglevel6 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL6, this);
+ lp_var_t loglevel7 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL7, this);
+ lp_var_t loglevel8 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL8, this);
+ lp_var_t loglevel9 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL9, this);
+ lp_var_t loglevel10 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL10, this);
+ lp_var_t loglevel11 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL11, this);
+ lp_var_t loglevel12 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL12, this);
+ lp_var_t loglevel13 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL13, this);
+ lp_var_t loglevel14 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL14, this);
+ lp_var_t loglevel15 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL15, this);
+ lp_var_t loglevel16 = lp_var_t(sid.objectId, PoolIds::LOGLEVEL16, this);
+
+ void printSet() {
+ PoolReadGuard rg(this);
+ sif::info << "LogLevelSet::printSet: loglevel1: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel2: "
+ << static_cast(this->loglevel2.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel3: "
+ << static_cast(this->loglevel3.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel4: "
+ << static_cast(this->loglevel4.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel5: "
+ << static_cast(this->loglevel5.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel6: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel7: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel8: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel9: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel10: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel11: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel12: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel13: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel14: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel15: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ sif::info << "LogLevelSet::printSet: loglevel16: "
+ << static_cast(this->loglevel1.value) << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested mounting parameters
+ */
+class MountingSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 16;
+
+ MountingSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, MOUNTING_SET_ID) {}
+
+ MountingSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, MOUNTING_SET_ID)) {}
+
+ lp_var_t qw = lp_var_t(sid.objectId, PoolIds::MOUNTING_QW, this);
+ lp_var_t qx = lp_var_t(sid.objectId, PoolIds::MOUNTING_QX, this);
+ lp_var_t qy = lp_var_t(sid.objectId, PoolIds::MOUNTING_QY, this);
+ lp_var_t qz = lp_var_t(sid.objectId, PoolIds::MOUNTING_QZ, this);
+
+ void printSet() {
+ sif::info << "MountingSet::printSet: qw: " << this->qw << std::endl;
+ sif::info << "MountingSet::printSet: qx: " << this->qx << std::endl;
+ sif::info << "MountingSet::printSet: qy: " << this->qy << std::endl;
+ sif::info << "MountingSet::printSet: qz: " << this->qz << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested image processor parameters
+ */
+class ImageProcessorSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 7;
+
+ ImageProcessorSet(HasLocalDataPoolIF* owner)
+ : StaticLocalDataSet(owner, IMAGE_PROCESSOR_SET_ID) {}
+
+ ImageProcessorSet(object_id_t objectId)
+ : StaticLocalDataSet(sid_t(objectId, IMAGE_PROCESSOR_SET_ID)) {}
+
+ lp_var_t mode = lp_var_t(sid.objectId, PoolIds::IMAGE_PROCESSOR_MODE, this);
+ lp_var_t store = lp_var_t(sid.objectId, PoolIds::IMAGE_PROCESSOR_STORE, this);
+ lp_var_t signalThreshold =
+ lp_var_t(sid.objectId, PoolIds::IMAGE_PROCESSOR_SIGNALTHRESHOLD, this);
+ lp_var_t darkThreshold =
+ lp_var_t(sid.objectId, PoolIds::IMAGE_PROCESSOR_DARKTHRESHOLD, this);
+ lp_var_t backgroundCompensation =
+ lp_var_t(sid.objectId, PoolIds::IMAGE_PROCESSOR_BACKGROUNDCOMPENSATION, this);
+
+ void printSet() {
+ sif::info << "ImageProcessorSet::printSet: mode: "
+ << static_cast(this->mode.value) << std::endl;
+ sif::info << "ImageProcessorSet::printSet: store: "
+ << static_cast(this->store.value) << std::endl;
+ sif::info << "ImageProcessorSet::printSet: signal threshold: " << this->signalThreshold
+ << std::endl;
+ sif::info << "ImageProcessorSet::printSet: dark threshold: " << this->darkThreshold
+ << std::endl;
+ sif::info << "ImageProcessorSet::printSet: background compensation: "
+ << static_cast(this->backgroundCompensation.value) << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested centroiding parameters
+ */
+class CentroidingSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 49;
+
+ CentroidingSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, CENTROIDING_SET_ID) {}
+
+ CentroidingSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, CENTROIDING_SET_ID)) {}
+
+ lp_var_t enableFilter =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_ENABLE_FILTER, this);
+ lp_var_t maxQuality =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_MAX_QUALITY, this);
+ lp_var_t darkThreshold =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_DARK_THRESHOLD, this);
+ lp_var_t minQuality =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_MIN_QUALITY, this);
+ lp_var_t maxIntensity =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_MAX_INTENSITY, this);
+ lp_var_t minIntensity =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_MIN_INTENSITY, this);
+ lp_var_t maxMagnitude =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_MAX_MAGNITUDE, this);
+ lp_var_t gaussianCmax =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_GAUSSIAN_CMAX, this);
+ lp_var_t gaussianCmin =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_GAUSSIAN_CMIN, this);
+ lp_var_t transmatrix00 =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_TRANSMATRIX00, this);
+ lp_var_t transmatrix01 =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_TRANSMATRIX01, this);
+ lp_var_t transmatrix10 =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_TRANSMATRIX10, this);
+ lp_var_t transmatrix11 =
+ lp_var_t(sid.objectId, PoolIds::CENTROIDING_TRANSMATRIX11, this);
+
+ void printSet() {
+ sif::info << "CentroidingSet::printSet: enable filter: "
+ << static_cast(this->enableFilter.value) << std::endl;
+ sif::info << "CentroidingSet::printSet: max quality: " << this->maxQuality << std::endl;
+ sif::info << "CentroidingSet::printSet: dark threshold: " << this->darkThreshold << std::endl;
+ sif::info << "CentroidingSet::printSet: min quality: " << this->minQuality << std::endl;
+ sif::info << "CentroidingSet::printSet: max intensity: " << this->maxIntensity << std::endl;
+ sif::info << "CentroidingSet::printSet: min intensity: " << this->minIntensity << std::endl;
+ sif::info << "CentroidingSet::printSet: max magnitude: " << this->maxMagnitude << std::endl;
+ sif::info << "CentroidingSet::printSet: gaussian cmax: " << this->gaussianCmax << std::endl;
+ sif::info << "CentroidingSet::printSet: gaussian cmin: " << this->gaussianCmin << std::endl;
+ sif::info << "CentroidingSet::printSet: transmatrix 00 : " << this->transmatrix00 << std::endl;
+ sif::info << "CentroidingSet::printSet: transmatrix 01 : " << this->transmatrix01 << std::endl;
+ sif::info << "CentroidingSet::printSet: transmatrix 10 : " << this->transmatrix10 << std::endl;
+ sif::info << "CentroidingSet::printSet: transmatrix 11 : " << this->transmatrix11 << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested centroiding parameters
+ */
+class LisaSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 50;
+
+ LisaSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, LISA_SET_ID) {}
+
+ LisaSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, LISA_SET_ID)) {}
+
+ lp_var_t mode = lp_var_t(sid.objectId, PoolIds::LISA_MODE, this);
+ lp_var_t prefilterDistThreshold =
+ lp_var_t(sid.objectId, PoolIds::LISA_PREFILTER_DIST_THRESHOLD, this);
+ lp_var_t prefilterAngleThreshold =
+ lp_var_t(sid.objectId, PoolIds::LISA_PREFILTER_ANGLE_THRESHOLD, this);
+ lp_var_t fovWidth = lp_var_t(sid.objectId, PoolIds::LISA_FOV_WIDTH, this);
+ lp_var_t fovHeight = lp_var_t(sid.objectId, PoolIds::LISA_FOV_HEIGHT, this);
+ lp_var_t floatStarLimit =
+ lp_var_t(sid.objectId, PoolIds::LISA_FLOAT_STAR_LIMIT, this);
+ lp_var_t closeStarLimit =
+ lp_var_t(sid.objectId, PoolIds::LISA_CLOSE_STAR_LIMIT, this);
+ lp_var_t ratingWeightCloseStarCount =
+ lp_var_t(sid.objectId, PoolIds::LISA_RATING_WEIGHT_CLOSE_STAR_COUNT, this);
+ lp_var_t ratingWeightFractionClose =
+ lp_var_t(sid.objectId, PoolIds::LISA_RATING_WEIGHT_FRACTION_CLOSE, this);
+ lp_var_t ratingWeightMeanSum =
+ lp_var_t(sid.objectId, PoolIds::LISA_RATING_WEIGHT_MEAN_SUM, this);
+ lp_var_t ratingWeightDbStarCount =
+ lp_var_t(sid.objectId, PoolIds::LISA_RATING_WEIGHT_DB_STAR_COUNT, this);
+ lp_var_t maxCombinations =
+ lp_var_t(sid.objectId, PoolIds::LISA_MAX_COMBINATIONS, this);
+ lp_var_t nrStarsStop =
+ lp_var_t(sid.objectId, PoolIds::LISA_NR_STARS_STOP, this);
+ lp_var_t fractionCloseStop =
+ lp_var_t(sid.objectId, PoolIds::LISA_FRACTION_CLOSE_STOP, this);
+
+ void printSet() {
+ sif::info << "LisaSet::printSet: mode: " << this->mode << std::endl;
+ sif::info << "LisaSet::printSet: prefilter dist threshold: " << this->prefilterDistThreshold
+ << std::endl;
+ sif::info << "LisaSet::printSet: prefilter angle threshold: " << this->prefilterAngleThreshold
+ << std::endl;
+ sif::info << "LisaSet::printSet: fov width: " << this->fovWidth << std::endl;
+ sif::info << "LisaSet::printSet: fov height: " << this->fovHeight << std::endl;
+ sif::info << "LisaSet::printSet: float star limit: " << this->floatStarLimit << std::endl;
+ sif::info << "LisaSet::printSet: close star limit: " << this->closeStarLimit << std::endl;
+ sif::info << "LisaSet::printSet: rating weight close star count: "
+ << this->ratingWeightCloseStarCount << std::endl;
+ sif::info << "LisaSet::printSet: rating weight fraction close: "
+ << this->ratingWeightFractionClose << std::endl;
+ sif::info << "LisaSet::printSet: rating weight mean sum: " << this->ratingWeightMeanSum
+ << std::endl;
+ sif::info << "LisaSet::printSet: rating weight db star count: " << this->ratingWeightDbStarCount
+ << std::endl;
+ sif::info << "LisaSet::printSet: max combinations: "
+ << static_cast(this->maxCombinations.value) << std::endl;
+ sif::info << "LisaSet::printSet: nr stars stop: "
+ << static_cast(this->nrStarsStop.value) << std::endl;
+ sif::info << "LisaSet::printSet: fraction close stop: " << this->fractionCloseStop << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested matching parameters
+ */
+class MatchingSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 8;
+
+ MatchingSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, MATCHING_SET_ID) {}
+
+ MatchingSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, MATCHING_SET_ID)) {}
+
+ lp_var_t squaredDistanceLimit = lp_var_t(sid.objectId, PoolIds::MATCHING_SQUARED_DISTANCE_LIMIT, this);
+ lp_var_t squaredShiftLimit = lp_var_t(sid.objectId, PoolIds::MATCHING_SQUARED_SHIFT_LIMIT, this);
+
+ void printSet() {
+ sif::info << "MatchingSet::printSet: squared distance limit: " << this->squaredDistanceLimit
+ << std::endl;
+ sif::info << "MatchingSet::printSet: squared distance limit: " << this->squaredShiftLimit
+ << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested tracking parameters
+ */
+class TrackingSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 13;
+
+ TrackingSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, TRACKING_SET_ID) {}
+
+ TrackingSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, TRACKING_SET_ID)) {}
+
+ lp_var_t thinLimit = lp_var_t(sid.objectId, PoolIds::TRACKING_THIN_LIMIT, this);
+ lp_var_t outlierThreshold = lp_var_t(sid.objectId, PoolIds::TRACKING_OUTLIER_THRESHOLD, this);
+ lp_var_t outlierThresholdQuest = lp_var_t(sid.objectId, PoolIds::TRACKING_OUTLIER_THRESHOLD_QUEST, this);
+ lp_var_t trackerChoice = lp_var_t(sid.objectId, PoolIds::TRACKING_TRACKER_CHOICE, this);
+
+ void printSet() {
+ sif::info << "TrackingSet::printSet: thin limit: " << this->thinLimit << std::endl;
+ sif::info << "TrackingSet::printSet: outlier threshold: " << this->outlierThreshold
+ << std::endl;
+ sif::info << "TrackingSet::printSet: outlier threshold quest: " << this->outlierThresholdQuest
+ << std::endl;
+ sif::info << "TrackingSet::printSet: tracker choice: "
+ << static_cast(this->trackerChoice.value) << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested validation parameters
+ */
+class ValidationSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 10;
+
+ ValidationSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, VALIDATION_SET_ID) {}
+
+ ValidationSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, VALIDATION_SET_ID)) {}
+
+ lp_var_t stableCount =
+ lp_var_t(sid.objectId, PoolIds::VALIDATION_STABLE_COUNT, this);
+ lp_var_t maxDifference =
+ lp_var_t(sid.objectId, PoolIds::VALIDATION_MAX_DIFFERENCE, this);
+ lp_var_t minTrackerConfidence =
+ lp_var_t(sid.objectId, PoolIds::VALIDATION_MIN_TRACKER_CONFIDENCE, this);
+ lp_var_t minMatchedStars =
+ lp_var_t(sid.objectId, PoolIds::VALIDATION_MIN_MATCHED_STARS, this);
+
+ void printSet() {
+ sif::info << "ValidationSet::printSet: stable count: "
+ << static_cast(this->stableCount.value) << std::endl;
+ sif::info << "ValidationSet::printSet: max difference: " << this->maxDifference << std::endl;
+ sif::info << "ValidationSet::printSet: min tracker confidence: " << this->minTrackerConfidence
+ << std::endl;
+ sif::info << "ValidationSet::printSet: min matched stars: "
+ << static_cast(this->minMatchedStars.value) << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested algo parameters
+ */
+class AlgoSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 11;
+
+ AlgoSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, ALGO_SET_ID) {}
+
+ AlgoSet(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, ALGO_SET_ID)) {}
+
+ lp_var_t mode =
+ lp_var_t(sid.objectId, PoolIds::ALGO_MODE, this);
+ lp_var_t i2tMinConfidence =
+ lp_var_t(sid.objectId, PoolIds::ALGO_I2T_MIN_CONFIDENCE, this);
+ lp_var_t i2tMinMatched =
+ lp_var_t(sid.objectId, PoolIds::ALGO_I2T_MIN_MATCHED, this);
+ lp_var_t i2lMinConfidence =
+ lp_var_t(sid.objectId, PoolIds::ALGO_I2L_MIN_CONFIDENCE, this);
+ lp_var_t i2lMinMatched =
+ lp_var_t(sid.objectId, PoolIds::ALGO_I2L_MIN_MATCHED, this);
+
+ void printSet() {
+ sif::info << "AlgoSet::printSet: mode: " << static_cast(this->mode.value) << std::endl;
+ sif::info << "AlgoSet::printSet: i2t min confidence: " << this->i2tMinConfidence << std::endl;
+ sif::info << "AlgoSet::printSet: i2t min matched: "
+ << static_cast(this->i2tMinMatched.value) << std::endl;
+ sif::info << "AlgoSet::printSet: i2l min confidence: " << this->i2lMinConfidence << std::endl;
+ sif::info << "AlgoSet::printSet: i2l min matched: "
+ << static_cast(this->i2lMinMatched.value) << std::endl;
+ }
+};
+
+/**
+ * @brief Will store the requested subscription parameters
+ */
+class SubscriptionSet : public StaticLocalDataSet {
+ public:
+ // Size of dataset
+ static const size_t SIZE = 16;
+
+ SubscriptionSet(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, SUBSCRIPTION_SET_ID) {}
+
+ SubscriptionSet(object_id_t objectId)
+ : StaticLocalDataSet(sid_t(objectId, SUBSCRIPTION_SET_ID)) {}
+
+ lp_var_t tm1 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM1, this);
+ lp_var_t tm2 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM2, this);
+ lp_var_t tm3 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM3, this);
+ lp_var_t tm4 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM4, this);
+ lp_var_t tm5 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM5, this);
+ lp_var_t tm6 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM6, this);
+ lp_var_t tm7 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM7, this);
+ lp_var_t tm8 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM8, this);
+ lp_var_t tm9 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM9, this);
+ lp_var_t tm10 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM10, this);
+ lp_var_t tm11 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM11, this);
+ lp_var_t tm12 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM12, this);
+ lp_var_t tm13 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM13, this);
+ lp_var_t tm14 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM14, this);
+ lp_var_t tm15 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM15, this);
+ lp_var_t tm16 = lp_var_t(sid.objectId, PoolIds::SUBSCRIPTION_TM16, this);
+
+ void printSet() {
+ sif::info << "SubscriptionSet::printSet: telemetry 1: "
+ << static_cast(this->tm1.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 2: "
+ << static_cast(this->tm2.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 3: "
+ << static_cast(this->tm3.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 4: "
+ << static_cast(this->tm4.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 5: "
+ << static_cast(this->tm5.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 6: "
+ << static_cast(this->tm6.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 7: "
+ << static_cast(this->tm7.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 8: "
+ << static_cast(this->tm8.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 9: "
+ << static_cast(this->tm9.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 10: "
+ << static_cast(this->tm10.value) << std::endl;
+ sif::info << "SubscriptionSet::printSet: telemetry 11: "
+ << static_cast