6 #include "fisch/vx/constants.h" 
    7 #include "fisch/vx/word_access/type/i2c.h" 
    8 #include "halco/common/geometry.h" 
    9 #include "halco/common/iter_all.h" 
   10 #include "halco/common/typed_array.h" 
   11 #include "halco/hicann-dls/vx/i2c.h" 
   12 #include "halco/hicann-dls/vx/ultra96.h" 
   13 #include "halco/hicann-dls/vx/xboard.h" 
   17 #include "hate/math.h" 
   18 #include "hate/visibility.h" 
   19 #include "hxcomm/vx/target.h" 
   31     constexpr 
static auto unsupported_read_targets GENPYBIND(hidden) = {
 
   32         hxcomm::vx::Target::simulation};
 
   47         bits12_samples64 = 10,
 
   48         bits12_samples128 = 11
 
   58     GENPYBIND(getter_for(bus_adc_mode))
 
   59     ADCMode get_bus_adc_mode() const SYMBOL_VISIBLE;
 
   65     GENPYBIND(setter_for(bus_adc_mode))
 
   66     void set_bus_adc_mode(
ADCMode value) SYMBOL_VISIBLE;
 
   72     GENPYBIND(getter_for(shunt_adc_mode))
 
   73     ADCMode get_shunt_adc_mode() const SYMBOL_VISIBLE;
 
   79     GENPYBIND(setter_for(shunt_adc_mode))
 
   80     void set_shunt_adc_mode(
ADCMode value) SYMBOL_VISIBLE;
 
   85     GENPYBIND(stringstream)
 
   86     friend std::ostream& operator<<(std::ostream& os, 
INA219Config const& config) SYMBOL_VISIBLE;
 
   88     static 
size_t constexpr config_size_in_words GENPYBIND(hidden) = 1;
 
   89     static std::array<
halco::hicann_dls::vx::I2CINA219RwRegisterOnBoard, config_size_in_words>
 
   91     std::array<
fisch::vx::word_access_type::I2CINA219RwRegister, config_size_in_words> encode()
 
   92         const SYMBOL_VISIBLE GENPYBIND(hidden);
 
   94         std::array<
fisch::vx::word_access_type::I2CINA219RwRegister, config_size_in_words> const&
 
   95             data) SYMBOL_VISIBLE GENPYBIND(hidden);
 
   99     template <typename Archive>
 
  100     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE;
 
  106 std::ostream& operator<<(std::ostream& os, 
INA219Config::ADCMode const& mode) SYMBOL_VISIBLE;
 
  125     constexpr 
static auto unsupported_read_targets GENPYBIND(hidden) = {
 
  126         hxcomm::vx::Target::simulation};
 
  131     struct GENPYBIND(inline_base("*
")) BusVoltage 
  132         : public halco::common::detail::RantWrapper<BusVoltage, uint_fast16_t, 4000, 0> 
  134         constexpr explicit BusVoltage(uintmax_t const val = 0) GENPYBIND(implicit_conversion) : 
  141         float toUncalibratedVoltage() const SYMBOL_VISIBLE; 
  147     struct GENPYBIND(inline_base("*
")) ShuntVoltage 
  148         : public halco::common::detail::RantWrapper<ShuntVoltage, int16_t, 4000, -4000> 
  150         constexpr explicit ShuntVoltage(intmax_t const val = 0) GENPYBIND(implicit_conversion) : 
  157         float toUncalibratedVoltage() const SYMBOL_VISIBLE; 
  163     struct GENPYBIND(visible) UncalibratedPower 
  168         float uncalibrated_bus_voltage; 
  173         float uncalibrated_shunt_voltage; 
  176          * Shunt resistance [Ohm]. 
  178         float shunt_resistance = 0.027; 
  180         float calculate() const SYMBOL_VISIBLE; 
  182         GENPYBIND(stringstream) 
  183         friend std::ostream& operator<<(std::ostream& os, UncalibratedPower const& data) 
  188     INA219Status() SYMBOL_VISIBLE; 
  194     GENPYBIND(getter_for(bus_voltage)) 
  195     BusVoltage get_bus_voltage() const SYMBOL_VISIBLE; 
  201     GENPYBIND(setter_for(bus_voltage)) 
  202     void set_bus_voltage(BusVoltage value) SYMBOL_VISIBLE; 
  208     GENPYBIND(getter_for(bus_voltage_overflow)) 
  209     bool get_bus_voltage_overflow() const SYMBOL_VISIBLE; 
  215     GENPYBIND(setter_for(bus_voltage_overflow)) 
  216     void set_bus_voltage_overflow(bool value) SYMBOL_VISIBLE; 
  222     GENPYBIND(getter_for(shunt_voltage)) 
  223     ShuntVoltage get_shunt_voltage() const SYMBOL_VISIBLE; 
  229     GENPYBIND(setter_for(shunt_voltage)) 
  230     void set_shunt_voltage(ShuntVoltage value) SYMBOL_VISIBLE; 
  237     UncalibratedPower toUncalibratedPower() const SYMBOL_VISIBLE; 
  239     bool operator==(INA219Status const& other) const SYMBOL_VISIBLE; 
  240     bool operator!=(INA219Status const& other) const SYMBOL_VISIBLE; 
  242     GENPYBIND(stringstream) 
  243     friend std::ostream& operator<<(std::ostream& os, INA219Status const& config) SYMBOL_VISIBLE; 
  245     static size_t constexpr write_config_size_in_words GENPYBIND(hidden) = 0; 
  246     static size_t constexpr read_config_size_in_words GENPYBIND(hidden) = 2; 
  247     static std::array<halco::hicann_dls::vx::I2CINA219RoRegisterOnBoard, write_config_size_in_words> 
  248     write_addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  249     static std::array<halco::hicann_dls::vx::I2CINA219RoRegisterOnBoard, read_config_size_in_words> 
  250     read_addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  251     std::array<fisch::vx::word_access_type::I2CINA219RoRegister, write_config_size_in_words> 
  252     encode() const SYMBOL_VISIBLE GENPYBIND(hidden); 
  253     void decode(std::array< 
  254                 fisch::vx::word_access_type::I2CINA219RoRegister, 
  255                 read_config_size_in_words> const& data) SYMBOL_VISIBLE GENPYBIND(hidden); 
  258     friend class cereal::access; 
  259     template <typename Archive> 
  260     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE; 
  262     BusVoltage m_bus_voltage; 
  263     bool m_bus_voltage_overflow; 
  264     ShuntVoltage m_shunt_voltage; 
  267 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(INA219Status) 
  272 struct BackendContainerTrait<INA219Status> 
  273     : public BackendContainerBase<INA219Status, fisch::vx::word_access_type::I2CINA219RoRegister> 
  276 } // namespace detail 
  279 class GENPYBIND(visible) TCA9554Inputs 
  282     typedef halco::hicann_dls::vx::TCA9554InputsOnBoard coordinate_type; 
  283     typedef std::true_type is_leaf_node; 
  284     constexpr static auto unsupported_read_targets GENPYBIND(hidden) = { 
  285         hxcomm::vx::Target::simulation}; 
  287     typedef GENPYBIND(opaque) halco::common:: 
  288         typed_array<bool, halco::hicann_dls::vx::TCA9554ChannelOnBoard> ChannelsBooleanArray; 
  290     /* Default constructor */ 
  291     TCA9554Inputs() SYMBOL_VISIBLE; 
  297     GENPYBIND(getter_for(channel_input), return_value_policy(reference_internal)) 
  298     ChannelsBooleanArray const& get_channel_input() const SYMBOL_VISIBLE; 
  304     GENPYBIND(setter_for(channel_input)) 
  305     void set_channel_input(ChannelsBooleanArray const& value) SYMBOL_VISIBLE; 
  307     bool operator==(TCA9554Inputs const& other) const SYMBOL_VISIBLE; 
  308     bool operator!=(TCA9554Inputs const& other) const SYMBOL_VISIBLE; 
  310     GENPYBIND(stringstream) 
  311     friend std::ostream& operator<<(std::ostream& os, TCA9554Inputs const& config) SYMBOL_VISIBLE; 
  313     static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1; 
  314     static std::array<halco::hicann_dls::vx::I2CTCA9554RoRegisterOnBoard, config_size_in_words> 
  315     addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  316     std::array<fisch::vx::word_access_type::I2CTCA9554RoRegister, config_size_in_words> encode() 
  317         const SYMBOL_VISIBLE GENPYBIND(hidden); 
  319         std::array<fisch::vx::word_access_type::I2CTCA9554RoRegister, config_size_in_words> const& 
  320             data) SYMBOL_VISIBLE GENPYBIND(hidden); 
  323     friend class cereal::access; 
  324     template <typename Archive> 
  325     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE; 
  327     ChannelsBooleanArray m_input; 
  330 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(TCA9554Inputs) 
  335 struct BackendContainerTrait<TCA9554Inputs> 
  336     : public BackendContainerBase<TCA9554Inputs, fisch::vx::word_access_type::I2CTCA9554RoRegister> 
  339 } // namespace detail 
  341 class GENPYBIND(visible) TCA9554Config 
  344     typedef halco::hicann_dls::vx::TCA9554ConfigOnBoard coordinate_type; 
  345     typedef std::true_type is_leaf_node; 
  346     constexpr static auto unsupported_read_targets GENPYBIND(hidden) = { 
  347         hxcomm::vx::Target::simulation}; 
  349     enum class ChannelPolarity : bool 
  355     enum class ChannelMode : bool 
  361     typedef GENPYBIND(opaque(false)) halco::common:: 
  362         typed_array<bool, halco::hicann_dls::vx::TCA9554ChannelOnBoard> ChannelsBooleanArray; 
  363     typedef GENPYBIND(opaque) halco::common::typed_array< 
  365         halco::hicann_dls::vx::TCA9554ChannelOnBoard> ChannelsPolarityArray; 
  366     typedef GENPYBIND(opaque) halco::common:: 
  367         typed_array<ChannelMode, halco::hicann_dls::vx::TCA9554ChannelOnBoard> ChannelsModeArray; 
  370     TCA9554Config() SYMBOL_VISIBLE; 
  376     GENPYBIND(getter_for(channel_output), return_value_policy(reference_internal)) 
  377     ChannelsBooleanArray const& get_channel_output() const SYMBOL_VISIBLE; 
  383     GENPYBIND(setter_for(channel_output)) 
  384     void set_channel_output(ChannelsBooleanArray const& value) SYMBOL_VISIBLE; 
  390     GENPYBIND(getter_for(channel_polarity), return_value_policy(reference_internal)) 
  391     ChannelsPolarityArray const& get_channel_polarity() const SYMBOL_VISIBLE; 
  397     GENPYBIND(setter_for(channel_polarity)) 
  398     void set_channel_polarity(ChannelsPolarityArray const& value) SYMBOL_VISIBLE; 
  404     GENPYBIND(getter_for(channel_mode), return_value_policy(reference_internal)) 
  405     ChannelsModeArray const& get_channel_mode() const SYMBOL_VISIBLE; 
  411     GENPYBIND(setter_for(channel_mode)) 
  412     void set_channel_mode(ChannelsModeArray const& value) SYMBOL_VISIBLE; 
  414     bool operator==(TCA9554Config const& other) const SYMBOL_VISIBLE; 
  415     bool operator!=(TCA9554Config const& other) const SYMBOL_VISIBLE; 
  417     GENPYBIND(stringstream) 
  418     friend std::ostream& operator<<(std::ostream& os, TCA9554Config const& config) SYMBOL_VISIBLE; 
  420     static size_t constexpr config_size_in_words GENPYBIND(hidden) = 3; 
  421     static std::array<halco::hicann_dls::vx::I2CTCA9554RwRegisterOnBoard, config_size_in_words> 
  422     addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  423     std::array<fisch::vx::word_access_type::I2CTCA9554RwRegister, config_size_in_words> encode() 
  424         const SYMBOL_VISIBLE GENPYBIND(hidden); 
  426         std::array<fisch::vx::word_access_type::I2CTCA9554RwRegister, config_size_in_words> const& 
  427             data) SYMBOL_VISIBLE GENPYBIND(hidden); 
  430     friend class cereal::access; 
  431     template <typename Archive> 
  432     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE; 
  434     ChannelsBooleanArray m_output; 
  435     ChannelsPolarityArray m_polarity; 
  436     ChannelsModeArray m_mode; 
  439 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(TCA9554Config) 
  444 struct BackendContainerTrait<TCA9554Config> 
  445     : public BackendContainerBase<TCA9554Config, fisch::vx::word_access_type::I2CTCA9554RwRegister> 
  448 } // namespace detail 
  451 class GENPYBIND(visible) AD5252ChannelConfig 
  454     typedef halco::hicann_dls::vx::AD5252ChannelConfigOnBoard coordinate_type; 
  455     typedef std::true_type is_leaf_node; 
  456     constexpr static auto unsupported_read_targets GENPYBIND(hidden) = { 
  457         hxcomm::vx::Target::simulation}; 
  459     struct GENPYBIND(inline_base("*
")) WiperSetting 
  460         : public halco::common::detail::RantWrapper< 
  463               std::numeric_limits<uint8_t>::max(), 
  464               std::numeric_limits<uint8_t>::min()> 
  466         constexpr explicit WiperSetting(uintmax_t const val = 0x90) GENPYBIND(implicit_conversion) : 
  472     AD5252ChannelConfig() SYMBOL_VISIBLE; 
  478     GENPYBIND(getter_for(value)) 
  479     WiperSetting get_value() const SYMBOL_VISIBLE; 
  485     GENPYBIND(setter_for(value)) 
  486     void set_value(WiperSetting value) SYMBOL_VISIBLE; 
  488     bool operator==(AD5252ChannelConfig const& other) const SYMBOL_VISIBLE; 
  489     bool operator!=(AD5252ChannelConfig const& other) const SYMBOL_VISIBLE; 
  491     GENPYBIND(stringstream) 
  492     friend std::ostream& operator<<(std::ostream& os, AD5252ChannelConfig const& config) 
  495     static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1; 
  496     static std::array<halco::hicann_dls::vx::I2CAD5252RwRegisterOnBoard, config_size_in_words> 
  497     addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  498     std::array<fisch::vx::word_access_type::I2CAD5252RwRegister, config_size_in_words> encode() 
  499         const SYMBOL_VISIBLE GENPYBIND(hidden); 
  501         std::array<fisch::vx::word_access_type::I2CAD5252RwRegister, config_size_in_words> const& 
  502             data) SYMBOL_VISIBLE GENPYBIND(hidden); 
  505     friend class cereal::access; 
  506     template <typename Archive> 
  507     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE; 
  509     WiperSetting m_value; 
  512 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(AD5252ChannelConfig) 
  517 struct BackendContainerTrait<AD5252ChannelConfig> 
  518     : public BackendContainerBase< 
  520           fisch::vx::word_access_type::I2CAD5252RwRegister> 
  523 } // namespace detail 
  526 class GENPYBIND(visible) AD5252ChannelConfigPersistent 
  529     typedef halco::hicann_dls::vx::AD5252ChannelConfigPersistentOnBoard coordinate_type; 
  530     typedef std::true_type is_leaf_node; 
  531     constexpr static auto unsupported_read_targets GENPYBIND(hidden) = { 
  532         hxcomm::vx::Target::simulation}; 
  534     struct GENPYBIND(inline_base("*
")) WiperSetting 
  535         : public halco::common::detail::RantWrapper< 
  538               std::numeric_limits<uint8_t>::max(), 
  539               std::numeric_limits<uint8_t>::min()> 
  541         constexpr explicit WiperSetting(uintmax_t const val = 0x90) GENPYBIND(implicit_conversion) : 
  548     AD5252ChannelConfigPersistent() SYMBOL_VISIBLE; 
  554     GENPYBIND(getter_for(value)) 
  555     WiperSetting get_value() const SYMBOL_VISIBLE; 
  561     GENPYBIND(setter_for(value)) 
  562     void set_value(WiperSetting value) SYMBOL_VISIBLE; 
  564     bool operator==(AD5252ChannelConfigPersistent const& other) const SYMBOL_VISIBLE; 
  565     bool operator!=(AD5252ChannelConfigPersistent const& other) const SYMBOL_VISIBLE; 
  567     GENPYBIND(stringstream) 
  568     friend std::ostream& operator<<(std::ostream& os, AD5252ChannelConfigPersistent const& config) 
  571     static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1; 
  572     static std::array<halco::hicann_dls::vx::I2CAD5252RwRegisterOnBoard, config_size_in_words> 
  573     addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  574     std::array<fisch::vx::word_access_type::I2CAD5252RwRegister, config_size_in_words> encode() 
  575         const SYMBOL_VISIBLE GENPYBIND(hidden); 
  577         std::array<fisch::vx::word_access_type::I2CAD5252RwRegister, config_size_in_words> const& 
  578             data) SYMBOL_VISIBLE GENPYBIND(hidden); 
  581     friend class cereal::access; 
  582     template <typename Archive> 
  583     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE; 
  585     WiperSetting m_value; 
  588 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(AD5252ChannelConfigPersistent) 
  593 struct BackendContainerTrait<AD5252ChannelConfigPersistent> 
  594     : public BackendContainerBase< 
  595           AD5252ChannelConfigPersistent, 
  596           fisch::vx::word_access_type::I2CAD5252RwRegister> 
  599 } // namespace detail 
  602 class GENPYBIND(visible) DAC6573ChannelConfig 
  605     typedef halco::hicann_dls::vx::DAC6573ChannelOnBoard coordinate_type; 
  606     typedef std::true_type is_leaf_node; 
  607     constexpr static auto unsupported_read_targets GENPYBIND(hidden) = { 
  608         hxcomm::vx::Target::simulation}; 
  610     struct GENPYBIND(inline_base("*
")) Value 
  611         : public halco::common::detail::RantWrapper< 
  614               fisch::vx::dac6573_value_max, 
  615               fisch::vx::dac_value_min> 
  617         constexpr explicit Value(uintmax_t const val = 0) GENPYBIND(implicit_conversion) : 
  623     DAC6573ChannelConfig(Value const& value = Value()) : m_value(value) {} 
  629     GENPYBIND(getter_for(value)) 
  630     Value get_value() const SYMBOL_VISIBLE; 
  636     GENPYBIND(setter_for(value)) 
  637     void set_value(Value value) SYMBOL_VISIBLE; 
  639     bool operator==(DAC6573ChannelConfig const& other) const SYMBOL_VISIBLE; 
  640     bool operator!=(DAC6573ChannelConfig const& other) const SYMBOL_VISIBLE; 
  642     GENPYBIND(stringstream) 
  643     friend std::ostream& operator<<(std::ostream& os, DAC6573ChannelConfig const& config) 
  646     static size_t constexpr config_size_in_words GENPYBIND(hidden) = 1; 
  647     static std::array<halco::hicann_dls::vx::I2CDAC6573RwRegisterOnBoard, config_size_in_words> 
  648     addresses(coordinate_type const& coord) SYMBOL_VISIBLE GENPYBIND(hidden); 
  649     std::array<fisch::vx::word_access_type::I2CDAC6573RwRegister, config_size_in_words> encode() 
  650         const SYMBOL_VISIBLE GENPYBIND(hidden); 
  652         std::array<fisch::vx::word_access_type::I2CDAC6573RwRegister, config_size_in_words> const& 
  653             data) SYMBOL_VISIBLE GENPYBIND(hidden); 
  656     friend class cereal::access; 
  657     template <typename Archive> 
  658     void serialize(Archive& ar, std::uint32_t const version) SYMBOL_VISIBLE; 
  663 EXTERN_INSTANTIATE_CEREAL_SERIALIZE(DAC6573ChannelConfig) 
  668 struct BackendContainerTrait<DAC6573ChannelConfig> 
  669     : public BackendContainerBase< 
  670           DAC6573ChannelConfig, 
  671           fisch::vx::word_access_type::I2CDAC6573RwRegister> 
  674 } // namespace detail 
  677 } // namespace haldls 
  681 HALCO_GEOMETRY_HASH_CLASS(haldls::vx::DAC6573ChannelConfig::Value) 
#define EXTERN_INSTANTIATE_CEREAL_SERIALIZE(CLASS_NAME)
ADCMode
ADC resolution and number of samples.
halco::hicann_dls::vx::INA219ConfigOnBoard coordinate_type
INA219Config() SYMBOL_VISIBLE
Default constructor.
std::true_type is_leaf_node
std::true_type is_leaf_node
halco::hicann_dls::vx::INA219StatusOnBoard coordinate_type
#define GENPYBIND_TAG_HALDLS_VX
Backend container trait base.