123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include <assert.h>
- #include <stdlib.h>
- #include "AuxiliaryBus.h"
- AuxiliaryBusSlave::AuxiliaryBusSlave(AuxiliaryBus &bus, uint8_t addr,
- uint8_t instance)
- : _bus(bus)
- , _addr(addr)
- , _instance(instance)
- {
- }
- AuxiliaryBusSlave::~AuxiliaryBusSlave()
- {
- }
- AuxiliaryBus::AuxiliaryBus(AP_InertialSensor_Backend &backend, uint8_t max_slaves, uint32_t devid)
- : _max_slaves(max_slaves)
- , _ins_backend(backend)
- , _devid(devid)
- {
- _slaves = (AuxiliaryBusSlave**) calloc(max_slaves, sizeof(AuxiliaryBusSlave*));
- }
- AuxiliaryBus::~AuxiliaryBus()
- {
- for (int i = _n_slaves - 1; i >= 0; i--) {
- delete _slaves[i];
- }
- free(_slaves);
- }
- AuxiliaryBusSlave *AuxiliaryBus::request_next_slave(uint8_t addr)
- {
- if (_n_slaves == _max_slaves)
- return nullptr;
- AuxiliaryBusSlave *slave = _instantiate_slave(addr, _n_slaves);
- if (!slave)
- return nullptr;
- return slave;
- }
- int AuxiliaryBus::register_periodic_read(AuxiliaryBusSlave *slave, uint8_t reg,
- uint8_t size)
- {
- assert(slave->_instance == _n_slaves);
- assert(_n_slaves < _max_slaves);
- int r = _configure_periodic_read(slave, reg, size);
- if (r < 0)
- return r;
- slave->_sample_reg_start = reg;
- slave->_sample_size = size;
- slave->_registered = true;
- _slaves[_n_slaves++] = slave;
- return 0;
- }
|