You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.0 KiB
114 lines
3.0 KiB
#pragma once |
|
|
|
#include "AP_HAL_Namespace.h" |
|
|
|
#include "AnalogIn.h" |
|
#include "GPIO.h" |
|
#include "RCInput.h" |
|
#include "RCOutput.h" |
|
#include "SPIDevice.h" |
|
#include "Storage.h" |
|
#include "UARTDriver.h" |
|
#include "system.h" |
|
#include "OpticalFlow.h" |
|
#if HAL_WITH_UAVCAN |
|
#include "CAN.h" |
|
#endif |
|
|
|
class AP_HAL::HAL { |
|
public: |
|
HAL(AP_HAL::UARTDriver* _uartA, // console |
|
AP_HAL::UARTDriver* _uartB, // 1st GPS |
|
AP_HAL::UARTDriver* _uartC, // telem1 |
|
AP_HAL::UARTDriver* _uartD, // telem2 |
|
AP_HAL::UARTDriver* _uartE, // 2nd GPS |
|
AP_HAL::UARTDriver* _uartF, // extra1 |
|
AP_HAL::I2CDeviceManager* _i2c_mgr, |
|
AP_HAL::SPIDeviceManager* _spi, |
|
AP_HAL::AnalogIn* _analogin, |
|
AP_HAL::Storage* _storage, |
|
AP_HAL::UARTDriver* _console, |
|
AP_HAL::GPIO* _gpio, |
|
AP_HAL::RCInput* _rcin, |
|
AP_HAL::RCOutput* _rcout, |
|
AP_HAL::Scheduler* _scheduler, |
|
AP_HAL::Util* _util, |
|
AP_HAL::OpticalFlow *_opticalflow, |
|
#if HAL_WITH_UAVCAN |
|
AP_HAL::CANManager* _can_mgr[MAX_NUMBER_OF_CAN_DRIVERS]) |
|
#else |
|
AP_HAL::CANManager** _can_mgr) |
|
#endif |
|
: |
|
uartA(_uartA), |
|
uartB(_uartB), |
|
uartC(_uartC), |
|
uartD(_uartD), |
|
uartE(_uartE), |
|
uartF(_uartF), |
|
i2c_mgr(_i2c_mgr), |
|
spi(_spi), |
|
analogin(_analogin), |
|
storage(_storage), |
|
console(_console), |
|
gpio(_gpio), |
|
rcin(_rcin), |
|
rcout(_rcout), |
|
scheduler(_scheduler), |
|
util(_util), |
|
opticalflow(_opticalflow) |
|
{ |
|
#if HAL_WITH_UAVCAN |
|
if (_can_mgr == nullptr) { |
|
for (uint8_t i = 0; i < MAX_NUMBER_OF_CAN_DRIVERS; i++) |
|
can_mgr[i] = nullptr; |
|
} else { |
|
for (uint8_t i = 0; i < MAX_NUMBER_OF_CAN_DRIVERS; i++) |
|
can_mgr[i] = _can_mgr[i]; |
|
} |
|
#endif |
|
|
|
AP_HAL::init(); |
|
} |
|
|
|
struct Callbacks { |
|
virtual void setup() = 0; |
|
virtual void loop() = 0; |
|
}; |
|
|
|
struct FunCallbacks : public Callbacks { |
|
FunCallbacks(void (*setup_fun)(void), void (*loop_fun)(void)); |
|
|
|
void setup() override { _setup(); } |
|
void loop() override { _loop(); } |
|
|
|
private: |
|
void (*_setup)(void); |
|
void (*_loop)(void); |
|
}; |
|
|
|
virtual void run(int argc, char * const argv[], Callbacks* callbacks) const = 0; |
|
|
|
AP_HAL::UARTDriver* uartA; |
|
AP_HAL::UARTDriver* uartB; |
|
AP_HAL::UARTDriver* uartC; |
|
AP_HAL::UARTDriver* uartD; |
|
AP_HAL::UARTDriver* uartE; |
|
AP_HAL::UARTDriver* uartF; |
|
AP_HAL::I2CDeviceManager* i2c_mgr; |
|
AP_HAL::SPIDeviceManager* spi; |
|
AP_HAL::AnalogIn* analogin; |
|
AP_HAL::Storage* storage; |
|
AP_HAL::UARTDriver* console; |
|
AP_HAL::GPIO* gpio; |
|
AP_HAL::RCInput* rcin; |
|
AP_HAL::RCOutput* rcout; |
|
AP_HAL::Scheduler* scheduler; |
|
AP_HAL::Util *util; |
|
AP_HAL::OpticalFlow *opticalflow; |
|
#if HAL_WITH_UAVCAN |
|
AP_HAL::CANManager* can_mgr[MAX_NUMBER_OF_CAN_DRIVERS]; |
|
#else |
|
AP_HAL::CANManager** can_mgr; |
|
#endif |
|
};
|
|
|