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.