Skip to content
Snippets Groups Projects
Commit c53152e1 authored by Valerio Pastore's avatar Valerio Pastore
Browse files

implemented s22

parent ffaba244
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ set(SOURCES
src/PacketStructureTxt.cpp
src/PacketStructureJson.cpp
src/AstriPacketGeneric.cpp
src/AstriPacketS22.cpp
)
......
......@@ -59,15 +59,12 @@
"pixel_trigg_disc_low_DAC": 16,
"trigger_mask_1": 32,
"trigger_mask_2": 32,
"SiPM_temp": {
"size": 3,
"fields": {
"temp": 16
}
},
"SiPM_temp_1": 16,
"SiPM_temp_2": 16,
"SiPM_temp_3": 16,
"SiPM_high_volt": 16,
"SiPM_current": 16
}
},
"crc": 16
}
\ No newline at end of file
}
Subproject commit 9c9fbe5abee4ac99b7b32b48b53645373e56004c
Subproject commit b7c86f5bcc12b795a4a56fdfff114c9e876b40ca
......@@ -4,56 +4,103 @@
#include <AstriPacketGeneric.h>
#include <array>
namespace inaf::oasbo::Packets::AstriS22 {
struct Header {
bool crc;
uint8_t telescopeId;
uint8_t type;
uint8_t subtype;
uint16_t ssc;
uint16_t length;
Header() :
crc(bool()), telescopeId(uint8_t()), type(
uint8_t()), subtype(uint8_t()), ssc(uint16_t()), length(uint16_t()){
}
};
struct PDM {
bool pdmVal;
bool trgEnb;
bool trgPdm;
uint8_t pdm_id;
std::array<uint16_t, 64> highGainPixels;
std::array<uint16_t, 64> lowGainPixels;
std::array<uint8_t, 64> timeTriggerPixels;
size_t hitReg;
uint16_t pixelTriggDiscrimThres;
uint16_t pixelTriggLowDiscrimThres;
size_t triggerMask;
uint16_t sipmTemp_1;
uint16_t sipmTemp_2;
uint16_t sipmTemp_3;
uint16_t sipmHighVolt;
uint16_t sipmCurrent;
PDM() :
pdmVal(bool()), trgEnb(bool()), trgPdm(bool()), pdm_id(int8_t()), highGainPixels(
std::array<uint16_t, 64>()), lowGainPixels(
std::array<uint16_t, 64>()), timeTriggerPixels(
std::array<uint8_t, 64>()), hitReg(size_t()), pixelTriggDiscrimThres(
uint16_t()), pixelTriggLowDiscrimThres(uint16_t()), triggerMask(
size_t()), sipmTemp_1(uint16_t()), sipmTemp_2(uint16_t()), sipmTemp_3(
uint16_t()), sipmHighVolt(uint16_t()), sipmCurrent(
uint16_t()) {
}
};
struct DataFieldHeader {
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minutes;
uint8_t seconds;
bool vt;
uint32_t timetagNanosec;
DataFieldHeader() :
year(uint8_t()), month(uint8_t()), day(uint8_t()), hour(uint8_t()), minutes(
uint8_t()), seconds(uint8_t()), vt(bool()), timetagNanosec(
uint32_t()) {
}
};
struct DataFieldHeaderExtension {
uint16_t pixel_trigg_disc;
uint16_t pixel_trigg_low_disc;
bool trg_type;
uint8_t trigger_conf;
DataFieldHeaderExtension() :
pixel_trigg_disc(uint16_t()), pixel_trigg_low_disc(uint16_t()), trg_type(
bool()), trigger_conf(uint8_t()) {
}
};
}
namespace inaf::oasbo::Packets {
class AstriPacketS22: public inaf::oasbo::Packets::AstriPacketGeneric {
struct PDM {
bool pdmVal;
bool trgEnb;
bool trgPdm;
uint8_t pdm_id;
std::array<uint16_t, 64> highGainPixels;
std::array<uint16_t, 64> lowGainPixels;
std::array<uint8_t, 64> timeTriggerPixels;
size_t hitReg;
uint16_t pixelTriggDiscrimThres;
uint16_t pixelTriggLowDiscrimThres;
size_t triggerMask;
uint16_t sipmTemp_1;
uint16_t sipmTemp_2;
uint16_t sipmTemp_3;
uint16_t sipmHighVolt;
uint16_t sipmCurrent;
PDM() :
pdmVal(bool()), trgEnb(bool()), trgPdm(bool()), pdm_id(int8_t()), highGainPixels(std::array<uint16_t, 64>()),
lowGainPixels(std::array<uint16_t,64>()), timeTriggerPixels(std::array<uint8_t,64>()), hitReg(size_t()), pixelTriggDiscrimThres(uint16_t()),
pixelTriggLowDiscrimThres(uint16_t()), triggerMask(size_t()), sipmTemp_1(uint16_t()), sipmTemp_2(uint16_t()), sipmTemp_3(uint16_t()),
sipmHighVolt(uint16_t()),sipmCurrent(uint16_t())
{ }
};
struct DataFieldHeader{
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minutes;
uint8_t seconds;
bool vt;
uint32_t timetagNanosec;
DataFieldHeader():
year(uint8_t()), month(uint8_t()), day(uint8_t()), hour(uint8_t()), minutes(uint8_t()),
seconds(uint8_t()), vt(bool()) , timetagNanosec(uint32_t()) { }
};
public:
AstriPacketS22(std::vector<std::tuple<int, std::string, int>> paramsTuple) :
AstriPacketGeneric(paramsTuple) {
}
DataFieldHeader getDataFieldHeader();
std::vector<size_t> getDataFieldHeaderExtension();
std::array<PDM,37> getPDMs();
AstriPacketS22(const AstriPacketGeneric &other) :
AstriPacketGeneric(other) {
readHeader();
readDataFieldHeader();
readDataFieldHeaderExtension();
readPDMs();
}
AstriS22::Header header;
AstriS22::DataFieldHeader dataHeader;
AstriS22::DataFieldHeaderExtension dataHeaderExt;
std::array<AstriS22::PDM, 37> pdms;
void readHeader();
void readDataFieldHeader();
void readDataFieldHeaderExtension();
void readPDMs();
};
}
......
......@@ -6,11 +6,66 @@
*/
#include <AstriPacketS22.h>
#include <algorithm>
using namespace inaf::oasbo::Packets;
std::vector<size_t> AstriPacketS22::getDataFieldHeader(){
void AstriPacketS22::readHeader() {
header.crc = (bool) this->operator []("crc_flag");
header.telescopeId = (uint8_t) this->operator []("telescopeid");
header.type = (uint8_t) this->operator []("type");
header.subtype = (uint8_t) this->operator []("subtype");
header.ssc = (uint16_t) this->operator []("ssc");
header.length = (uint16_t) this->operator []("length");
}
void AstriPacketS22::readDataFieldHeader() {
dataHeader.year = (uint8_t) this->operator []("year");
dataHeader.month = (uint8_t) this->operator []("month");
dataHeader.day = (uint8_t) this->operator []("day");
dataHeader.hour = (uint8_t) (this->operator []("hh_msb") << 4)
+ this->operator []("hh_lsb");
dataHeader.minutes = (uint8_t) this->operator []("minutes");
dataHeader.seconds = (uint8_t) this->operator []("seconds");
dataHeader.vt = (bool) this->operator []("vt");
dataHeader.timetagNanosec = (uint32_t) this->operator []("timetag_nanosec");
}
void AstriPacketS22::readDataFieldHeaderExtension() {
dataHeaderExt.pixel_trigg_disc = (uint16_t) this->operator [](
"pixel_trigg_disc_high_pe");
dataHeaderExt.pixel_trigg_low_disc = (uint16_t) this->operator [](
"pixel_trigg_disc_low_pe");
dataHeaderExt.trg_type = (bool) this->operator []("trg_type");
dataHeaderExt.trigger_conf = (uint8_t) this->operator []("trigger_config");
}
void AstriPacketS22::readPDMs() {
for (size_t i = 0; i < pdms.size(); i++) {
AstriS22::PDM &pdm = pdms[i];
pdm.pdmVal = (bool) this->operator [](std::string("pdm_Val").append("_#").append(std::to_string(i)));
pdm.trgEnb = (bool) this->operator [](std::string("trg_enb").append("_#").append(std::to_string(i)));
pdm.trgPdm = (bool) this->operator [](std::string("trg_pdm").append("_#").append(std::to_string(i)));
pdm.pdm_id = (uint8_t) this->operator [](std::string("pdm_id").append("_#").append(std::to_string(i)));
for (size_t j = 0; j < pdm.highGainPixels.size(); j++) {
pdm.highGainPixels[i] = (uint16_t) this->operator [](std::string("high_gain_pixel").append("_#").append(std::to_string(j)).append("_#").append(std::to_string(i)));
}
for (size_t j = 0; j < pdm.lowGainPixels.size(); j++) {
pdm.lowGainPixels[i] = (uint16_t) this->operator [](std::string("low_gain_pixel").append("_#").append(std::to_string(j)).append("_#").append(std::to_string(i)));
}
for (size_t j = 0; j < pdm.timeTriggerPixels.size(); j++) {
pdm.timeTriggerPixels[i] = (uint8_t) this->operator [](std::string("time_trigg_pixel").append("_#").append(std::to_string(j)).append("_#").append(std::to_string(i)));
}
pdm.hitReg = (size_t) (this->operator [](std::string("hit_reg_1").append("_#").append(std::to_string(i))) << 32) + this->operator [](std::string("hit_reg_2").append("_#").append(std::to_string(i)));
pdm.pixelTriggDiscrimThres = (uint16_t) this->operator [](std::string("pixel_trigg_disc_high_DA").append("_#").append(std::to_string(i)));
pdm.pixelTriggLowDiscrimThres = (uint16_t) this->operator [](std::string("pixel_trigg_disc_low_DAC").append("_#").append(std::to_string(i)));
pdm.triggerMask = (size_t) (this->operator [](std::string("trigger_mask_1").append("_#").append(std::to_string(i))) << 32) + this->operator [](std::string("trigger_mask_2").append("_#").append(std::to_string(i)));
pdm.sipmTemp_1 = (uint16_t) this->operator [](std::string("SiPM_temp_1").append("_#").append(std::to_string(i)));
pdm.sipmTemp_2 = (uint16_t) this->operator [](std::string("SiPM_temp_2").append("_#").append(std::to_string(i)));
pdm.sipmTemp_3 = (uint16_t) this->operator [](std::string("SiPM_temp_3").append("_#").append(std::to_string(i)));
pdm.sipmHighVolt = (uint16_t) this->operator [](std::string("SiPM_high_volt").append("_#").append(std::to_string(i)));
pdm.sipmCurrent = (uint16_t) this->operator [](std::string("SiPM_current").append("_#").append(std::to_string(i)));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment