mirror of
https://github.com/OpenSolo/OpenSolo.git
synced 2025-05-29 13:00:12 +02:00
87 lines
1.8 KiB
C++
87 lines
1.8 KiB
C++
|
|
/*
|
|
* application entry point.
|
|
* early board init happens in setup.cpp
|
|
*/
|
|
|
|
#include "stm32/sys.h"
|
|
#include "stm32/gpio.h"
|
|
#include "stm32/systime.h"
|
|
#include "stm32/mcuflash.h"
|
|
#include "stm32/rcc.h"
|
|
#include "stm32/pwr.h"
|
|
#include "stm32/bkp.h"
|
|
|
|
#include "ui.h"
|
|
#include "inputs.h"
|
|
#include "tasks.h"
|
|
#include "haptic.h"
|
|
#include "buzzer.h"
|
|
#include "cameracontrol.h"
|
|
#include "hostprotocol.h"
|
|
#include "buttonmanager.h"
|
|
#include "battery.h"
|
|
#include "powermanager.h"
|
|
#include "board.h"
|
|
|
|
int main()
|
|
{
|
|
// enable power manager first, to ensure we stay turned on
|
|
PowerManager::init();
|
|
Rcc::latchAndClearResetFlags();
|
|
|
|
Pwr::init();
|
|
Pwr::enableVoltageDetector(Pwr::PVD_2_4V);
|
|
|
|
Bkp::init();
|
|
|
|
// EXTI lines for buttons
|
|
NVIC.irqEnable(IVT.EXTI0);
|
|
NVIC.irqEnable(IVT.EXTI1);
|
|
NVIC.irqEnable(IVT.EXTI2);
|
|
NVIC.irqEnable(IVT.EXTI3);
|
|
NVIC.irqEnable(IVT.EXTI4);
|
|
NVIC.irqEnable(IVT.EXTI9_5);
|
|
NVIC.irqEnable(IVT.EXTI15_10);
|
|
|
|
// ADC
|
|
NVIC.irqEnable(IVT.DMA1_Channel1);
|
|
|
|
// UART rx
|
|
NVIC.irqEnable(IVT.HOST_UART);
|
|
|
|
SysTime::init(Tasks::heartbeat);
|
|
|
|
#if (BOARD >= BOARD_BB03)
|
|
Battery::instance.init();
|
|
#endif
|
|
|
|
// before other subsystems that depend on params
|
|
Params::sys.load();
|
|
|
|
HostProtocol::instance.init();
|
|
ButtonManager::init();
|
|
Ui::instance.init();
|
|
|
|
CameraControl::instance.init();
|
|
FlightManager::instance.init();
|
|
|
|
// ensure our ADC values are initialized as soon as possible
|
|
Inputs::init();
|
|
Haptic::init();
|
|
|
|
PowerManager::waitForCompleteStartup();
|
|
|
|
// for now, initial values in backup registers are only
|
|
// available during boot. cleared as we enter the task loop.
|
|
Bkp::reset();
|
|
|
|
for (;;) {
|
|
if (!Tasks::work()) {
|
|
Sys::waitForInterrupt();
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|