mirror of https://github.com/ArduPilot/ardupilot
115 lines
3.0 KiB
C++
115 lines
3.0 KiB
C++
#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
|
|
};
|