Line data Source code
1 : /**
2 : * @file definitions.cpp
3 : *
4 : * This is part of the DUNE DAQ Software Suite, copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 :
9 : #include "timing/definitions.hpp"
10 : #include "timing/EndpointNode.hpp"
11 : #include "timing/MasterNode.hpp"
12 : #include "timing/IONode.hpp"
13 : #include "timing/HSINode.hpp"
14 :
15 : #include <pybind11/pybind11.h>
16 : #include <pybind11/stl.h>
17 :
18 : #include <utility>
19 : #include <map>
20 : #include <string>
21 :
22 : namespace py = pybind11;
23 :
24 : namespace dunedaq {
25 : namespace timing {
26 : namespace python {
27 :
28 0 : std::map<std::string, FixedLengthCommandType> swap_commands_map(const std::map<FixedLengthCommandType, std::string>& command_map)
29 : {
30 0 : std::map<std::string, FixedLengthCommandType> swapped_map;
31 0 : for (auto& cmd: command_map) {
32 0 : swapped_map.emplace( std::pair<std::string,FixedLengthCommandType>(cmd.second, cmd.first) );
33 : }
34 0 : return swapped_map;
35 0 : }
36 :
37 : void
38 0 : register_definitions(py::module& m)
39 : {
40 0 : py::enum_<BoardType>(m, "BoardType")
41 0 : .value("kBoardFMC", kBoardFMC)
42 0 : .value("kBoardSim", kBoardSim)
43 0 : .value("kBoardPC059", kBoardPC059)
44 0 : .value("kBoardMicrozed", kBoardMicrozed)
45 0 : .value("kBoardTLU", kBoardTLU)
46 0 : .value("kBoardFIB", kBoardFIB)
47 0 : .value("kBoardMIB", kBoardMIB)
48 0 : .value("kBoardPC069", kBoardPC069)
49 0 : .value("kBoardGIB", kBoardGIB)
50 0 : .value("kBoardGIBV3", kBoardGIBV3)
51 0 : .value("kBoardUnknown", kBoardUnknown)
52 0 : .export_values();
53 :
54 0 : py::enum_<BoardRevision>(m, "BoardRevision")
55 0 : .value("kFMCRev1", kFMCRev1)
56 0 : .value("kFMCRev2", kFMCRev2)
57 0 : .value("kFMCRev3", kFMCRev3)
58 0 : .value("kFMCRev4", kFMCRev4)
59 0 : .value("kPC059Rev1", kPC059Rev1)
60 0 : .value("kTLURev1", kTLURev1)
61 0 : .value("kSIMRev1", kSIMRev1)
62 0 : .value("kFIBRev1", kFIBRev1)
63 0 : .value("kMIBRev1", kMIBRev1)
64 0 : .value("kPC069a", kPC069a)
65 0 : .value("kPC069b", kPC069b)
66 0 : .value("kPC069c", kPC069c)
67 0 : .value("kMIBRev2", kMIBRev2)
68 0 : .value("kGIBRev1", kGIBRev1)
69 0 : .value("kFIBRev2", kFIBRev2)
70 0 : .export_values();
71 :
72 0 : py::enum_<CarrierType>(m, "CarrierType")
73 0 : .value("kCarrierEnclustraA35", kCarrierEnclustraA35)
74 0 : .value("kCarrierKC705", kCarrierKC705)
75 0 : .value("kCarrierMicrozed", kCarrierMicrozed)
76 0 : .value("kCarrierATFC", kCarrierATFC)
77 0 : .value("kCarrierAFC", kCarrierAFC)
78 0 : .value("kCarrierNexusVideo", kCarrierNexusVideo)
79 0 : .value("kCarrierTrenzTE0712", kCarrierTrenzTE0712)
80 0 : .value("kCarrierUnknown", kCarrierUnknown)
81 0 : .export_values();
82 :
83 0 : py::enum_<DesignType>(m, "DesignType")
84 0 : .value("kDesignMaster", kDesignMaster)
85 0 : .value("kDesignOuroborosSim", kDesignOuroborosSim)
86 0 : .value("kDesignOuroboros", kDesignOuroboros)
87 0 : .value("kDesignTest", kDesignTest)
88 0 : .value("kDesignEndpoint", kDesignEndpoint)
89 0 : .value("kDesignFanout", kDesignFanout)
90 0 : .value("kDesignOverlord", kDesignOverlord)
91 0 : .value("kDesignEndpoBICRT", kDesignEndpoBICRT)
92 0 : .value("kDesignChronos", kDesignChronos)
93 0 : .value("kDesignBoreas", kDesignBoreas)
94 0 : .value("kDesignKerberos", kDesignKerberos)
95 0 : .value("kDesignGaia", kDesignGaia)
96 0 : .value("kDesignCharon", kDesignCharon)
97 0 : .value("kDesignHades", kDesignHades)
98 0 : .value("kDesignUnknown", kDesignUnknown)
99 0 : .export_values();
100 :
101 0 : py::enum_<FixedLengthCommandType>(m, "FixedLengthCommandType")
102 0 : .value("TimeSync", TimeSync)
103 0 : .value("Echo", Echo)
104 0 : .value("SpillStart", SpillStart)
105 0 : .value("SpillStop", SpillStop)
106 0 : .value("RunStart", RunStart)
107 0 : .value("RunStop", RunStop)
108 0 : .value("WibCalib", WibCalib)
109 0 : .value("SSPCalib", SSPCalib)
110 0 : .value("FakeTrig0", FakeTrig0)
111 0 : .value("FakeTrig1", FakeTrig1)
112 0 : .value("FakeTrig2", FakeTrig2)
113 0 : .value("FakeTrig3", FakeTrig3)
114 0 : .value("BeamTrig", BeamTrig)
115 0 : .value("NoBeamTrig", NoBeamTrig)
116 0 : .value("ExtFakeTrig", ExtFakeTrig)
117 0 : .export_values();
118 :
119 0 : py::enum_<ClockSource>(m, "ClockSource")
120 0 : .value("kFreeRun", kFreeRun)
121 0 : .value("kInput0", kInput0)
122 0 : .value("kInput1", kInput1)
123 0 : .value("kInput2", kInput2)
124 0 : .value("kInput3", kInput3)
125 0 : .export_values();
126 :
127 0 : py::enum_<TimestampSource>(m, "TimestampSource")
128 0 : .value("kUpstream", kUpstream)
129 0 : .value("kSoftware", kSoftware)
130 0 : .value("kMixed", kMixed)
131 0 : .export_values();
132 :
133 0 : py::enum_<TimestampEpoch>(m, "TimestampEpoch")
134 0 : .value("kUNIX", kUNIX)
135 0 : .value("kCustom", kCustom)
136 0 : .export_values();
137 :
138 0 : py::enum_<TimestampTimebase>(m, "TimestampTimebase")
139 0 : .value("kTAI", kTAI)
140 0 : .value("kUTC", kUTC)
141 0 : .export_values();
142 :
143 0 : m.attr("kBoardNameMap") = timing::IONode::get_board_type_map();
144 0 : m.attr("kCarrierNameMap") = timing::IONode::get_carrier_type_map();
145 0 : m.attr("kDesignNameMap") = timing::IONode::get_design_type_map();
146 0 : m.attr("kBoardRevisionMap") = timing::IONode::get_board_revision_map();
147 0 : m.attr("kUIDRevisionMap") = timing::IONode::get_board_uid_revision_map();
148 0 : m.attr("kClockConfigMap") = timing::IONode::get_clock_config_map();
149 0 : m.attr("kEpStates") = EndpointNode::get_endpoint_state_map();
150 0 : m.attr("kLibrarySupportedBoards") = timing::IONode::get_library_supported_boards();
151 0 : m.attr("kLibrarySupportedDesigns") = timing::IONode::get_library_supported_designs();
152 0 : m.attr("kMasterFWMajorRequired") = MasterNode::required_major_firmware_version;
153 0 : m.attr("kHSIWordsNumber") = HSINode::hsi_buffer_event_words_number;
154 0 : }
155 :
156 : } // namespace python
157 : } // namespace timing
158 : } // namespace dunedaq
|