Orion
high-rate readout
chip.hpp
1 // Templates for lpGBT chip
2 
3 #pragma once
4 
5 #include "itk/regmem.hpp"
6 #include "itk/commander.hpp"
7 #include "itk/register.hpp"
8 #include "itk/field.hpp"
9 #include "itk/chip.hpp"
10 
11 #include <memory>
12 #include <vector>
13 
14 namespace itk::lpgbt {
15  using reg_t = uint8_t;
16  using fld_t = uint64_t;
17 
18 namespace intf {
19  using RegMem = itk::intf::RegMem<reg_t>;
20 
21  class Commander : public itk::intf::Commander {
22  public:
23  virtual void write_reg(uint16_t addr) = 0;
24  virtual void write_block(uint16_t i2c_addr, uint16_t mem_addr, const std::vector<uint8_t> &data) = 0;
25  virtual void read_block(uint16_t i2c_addr, uint16_t mem_addr, uint16_t size) = 0;
26  }; // Commander
27 
28 
29  using Register = itk::intf::Register<RegMem, Commander>;
30  using Field = itk::intf::Field<fld_t, Register>;
31  using Chip = itk::intf::Chip<Field>;
32 
33 
34 struct RegMap {
35  typedef const intf::Register& ref_t;
36 
37  #include "lpgbt/reglist.hpp"
38  ref_t REG_LIST(PROC_NAME);
39 
40  RegMap(REG_LIST(PROC_REFT)) : REG_LIST(PROC_INIT) {}
41 };
42 
43 struct FldMap {
44  typedef const intf::Field& ref_t;
45 
46  #include "lpgbt/fldlist.hpp"
47  ref_t FLD_LIST(PROC_NAME);
48 
49  FldMap(FLD_LIST(PROC_REFT)) : FLD_LIST(PROC_INIT) {}
50 };
51 
52 
53 } // intf
54 } // itk::lpgbt
Definition: chip.hpp:21
uint16_t size
Definition: fragheader.hpp:5
Definition: chip.hpp:43
Definition: chip.hpp:34