Orion
high-rate readout
cmdcallback.hpp
Go to the documentation of this file.
1 
5 #pragma once
6 
7 #include <cstdint>
8 #include <span>
9 #include <functional>
10 #include <concepts>
11 
12 namespace itk::itkpix::cmd {
13 
14 namespace intf {
15 
21 public:
22 
24  virtual ~CommandCallback() = default;
25 
27  virtual void idle() = 0;
28 
30  virtual void sync() = 0;
31 
35  virtual void trig(uint8_t bc, uint8_t tag) = 0;
36 
40  virtual void read_trig(uint8_t chip_id, uint8_t ext_tag) = 0;
41 
44  virtual void clear(uint8_t chip_id) = 0;
45 
48  virtual void global(uint8_t chip_id) = 0;
49 
57  virtual void calib(uint8_t chip_id,
58  uint8_t edg_mode, uint8_t edg_delay, uint8_t edg_width,
59  uint8_t aux_mode, uint8_t aux_delay) = 0;
60 
64  virtual void read_reg(uint8_t chip_id, uint16_t addr) = 0;
65 
70  virtual void write_reg(uint8_t chip_id, uint16_t addr, uint16_t data) = 0;
71 
74  virtual void write_pix_start(uint8_t chip_id) = 0;
75 
78  virtual void write_pix_next(uint16_t data) = 0;
79 
82  virtual void on_warning(uint16_t frame) = 0;
83 
86  virtual void on_error(uint16_t frame) = 0;
87 
88 }; // CommandCallback
89 
90 } // intf
91 
92 
93 namespace concepts {
94 
99 template<typename T>
101 
103  requires(T self) {
104  { self.idle() } -> std::same_as<void>;
105  } and
106 
108  requires(T self) {
109  { self.sync() } -> std::same_as<void>;
110  } and
111 
115  requires(T self, uint8_t bc, uint8_t tag) {
116  { self.trig(bc, tag) } -> std::same_as<void>;
117  } and
118 
122  requires(T self, uint8_t chip_id, uint8_t ext_tag) {
123  { self.read_trig(chip_id, ext_tag) } -> std::same_as<void>;
124  } and
125 
128  requires(T self, uint8_t chip_id) {
129  { self.clear(chip_id) } -> std::same_as<void>;
130  } and
131 
134  requires(T self, uint8_t chip_id) {
135  { self.global(chip_id) } -> std::same_as<void>;
136  } and
137 
145  requires(T self, uint8_t chip_id,
146  uint8_t edg_mode, uint8_t edg_delay, uint8_t edg_width,
147  uint8_t aux_mode, uint8_t aux_delay)
148  {
149  { self.calib(chip_id, edg_mode, edg_delay, edg_width, aux_mode, aux_delay) } -> std::same_as<void>;
150  } and
151 
155  requires(T self, uint8_t chip_id, uint16_t addr) {
156  { self.read_reg(chip_id, addr) } -> std::same_as<void>;
157  } and
158 
163  requires(T self, uint8_t chip_id, uint16_t addr, uint16_t data) {
164  { self.write_reg(chip_id, addr, data) } -> std::same_as<void>;
165  } and
166 
169  requires(T self, uint8_t chip_id) {
170  { self.write_pix_start(chip_id) } -> std::same_as<void>;
171  } and
172 
175  requires(T self, uint16_t data) {
176  { self.write_pix_next(data) } -> std::same_as<void>;
177  } and
178 
179  requires(T self, uint16_t frame) {
180  { self.on_warning(frame) } -> std::same_as<void>;
181  } and
182 
183  requires(T self, uint16_t frame) {
184  { self.on_error(frame) } -> std::same_as<void>;
185  };
186 
187 }; // concepts
188 
189 } // itk::itkpix::cmd
Command callback interface for ITkPix.
Definition: cmdcallback.hpp:20
virtual void sync()=0
'sync' command
virtual void on_warning(uint16_t frame)=0
on_warning callback
virtual void trig(uint8_t bc, uint8_t tag)=0
trigger command
virtual void write_reg(uint8_t chip_id, uint16_t addr, uint16_t data)=0
write register command
virtual void write_pix_next(uint16_t data)=0
next multi-write command to PIX_PORTAL
virtual void global(uint8_t chip_id)=0
global pulse command
virtual void idle()=0
'idle' command
virtual void read_trig(uint8_t chip_id, uint8_t ext_tag)=0
read trigger command
virtual void clear(uint8_t chip_id)=0
clear command
virtual void write_pix_start(uint8_t chip_id)=0
start multi-write command to PIX_PORTAL
virtual ~CommandCallback()=default
Destructor.
virtual void calib(uint8_t chip_id, uint8_t edg_mode, uint8_t edg_delay, uint8_t edg_width, uint8_t aux_mode, uint8_t aux_delay)=0
calibration command
virtual void read_reg(uint8_t chip_id, uint16_t addr)=0
read register command
virtual void on_error(uint16_t frame)=0
on_error callback