Skip to content

File main.cpp

File List > fw > rbcx-coprocessor > src > main.cpp

Go to the documentation of this file.

#include <array>

#include "stm32f1xx_hal.h"

#include "utils/Debug.hpp"
#include "utils/TaskWrapper.hpp"

#include "ButtonController.hpp"
#include "I2cController.hpp"
#include "MotorController.hpp"
#include "MpuController.hpp"
#include "OledController.hpp"
#include "StupidServoController.hpp"
#include "UltrasoundController.hpp"

#include "Bsp.hpp"
#include "CdcUartTunnel.hpp"
#include "ControlLink.hpp"
#include "DebugLink.hpp"
#include "Dispatcher.hpp"
#include "Esp32Manager.hpp"
#include "Power.hpp"
#include "SmartServoController.hpp"
#include "UsbCdcLink.h"

static TaskWrapper<3072> mainTask;

int main() {
    clocksInit();
    HAL_Init();

#ifdef RBCX_VECT_TAB_OFFSET
    SCB->VTOR = FLASH_BASE | RBCX_VECT_TAB_OFFSET;
#endif

    pinsInit();

    mainTask.start("main", mainTaskPrio, []() {
        debugUartInit();
        softResetInit();
        powerInit();
        dispatcherInit();
        tunnelUartInit();
        controlUartInit();
        cdcLinkInit();
        I2Cdev_init();
        smartServoInit();
        stupidServoInit();
        ultrasoundInit();
        mpuCreate();
        sEsp32Manager.init();
        motorInit();

        DEBUG("STM32 Coprocessor initialized, v%06x " RBCX_VER_REVISION
                  RBCX_VER_DIRTY_STR "\n",
            RBCX_VER_NUMBER);
        while (true) {
            vTaskDelay(pdMS_TO_TICKS(1));
            debugLinkPoll();
            powerPoll();
            dispatcherPoll();
            tunnelPoll();
            buttonControllerPoll();
            smartServoPoll();
            sEsp32Manager.poll();
        }
    });

    vTaskStartScheduler();
    abort();
}