#include "TaskCreator.h" TaskCreator::TaskCreator() {} void TaskCreator::Init() { log_i("%s",SOFT_VER); mEeprom.Init(mParams.GetParamsVecor()); mParams.SetParamsVecot(mEeprom.GetParams()); if(mParams.GetValue("CTRL_REBOOT")>0) { uint16_t idx=mParams.SetParam("CTRL_REBOOT",0); mEeprom.WriteParam(idx,0); } if(mParams.GetValue("CTRL_UPDATE_FW")>0) { uint16_t idx=mParams.SetParam("CTRL_UPDATE_FW",0); mEeprom.WriteParam(idx,0); mUpdateServer.InitAndStart(); } else { CreateTasks(); } log_v("TaskCreator end init"); } void TaskCreator::CreateTasks() { StartTaskEeprom(); StartTaskMavlinkRx(); StartTaskMavlinkTx(); StartTaskStateMachine(); StartTaskTracker(); StartTaskRangefinder(); } uint32_t TaskCreator::GetBaudRate() { uint32_t res, baud; baud = mParams.GetValue("CTRL_SER_BAUD"); switch (baud) { case 115: res = 115200; break; case 230: res = 230400; break; case 256: res = 256000; break; case 460: res = 460800; break; case 500: res = 500000; break; case 921: res = 921600; break; case 1500: res = 1500000; break; default: res = 1500000; log_w("Baud rate not in range, set 1500000"); uint16_t idx = mParams.SetParam("CTRL_SER_BAUD", 1500); log_w("write to eeprom idx=%i val=%f", idx, mParams.GetValue(idx)); if (idx != 0xffff) mEeprom.WriteParam(idx, 1500.0); break; } return res; } void TaskCreator::StartTaskEeprom() { xTaskCreatePinnedToCore(EepromParams::TaskEeprom, "TaskEeprom", 2048, this, 1, nullptr, ARDUINO_RUNNING_CORE); vTaskDelay(15); } void TaskCreator::StartTaskMavlinkRx() { mReciver.Init(GetBaudRate()); vTaskDelay(15); xTaskCreatePinnedToCore(MavlinkReciver::TaskMavlinkRx, "TaskMavlinkRx", 8192, this, 3, nullptr, ARDUINO_RUNNING_CORE); vTaskDelay(15); } void TaskCreator::StartTaskMavlinkTx() { xTaskCreatePinnedToCore(MavlinkTransmitter::TaskMavlinkTx, "TaskMavlinkTx", 8192, this, 3, nullptr, ARDUINO_RUNNING_CORE); vTaskDelay(15); } void TaskCreator::StartTaskStateMachine() { xTaskCreatePinnedToCore(StateMachine::TaskStateMachine, "TaskStateMachine", 16384, this, 2, nullptr, ARDUINO_RUNNING_CORE); vTaskDelay(15); } void TaskCreator::StartTaskTracker() { mTracker.Init(1500000); vTaskDelay(15); xTaskCreatePinnedToCore(TrackerRxTx::TaskTrackerRxTx, "TaskTrackerRxTx", 4096, this, 3, nullptr, ARDUINO_RUNNING_CORE); } void TaskCreator::StartTaskRangefinder() { uint8_t rangefinderType = mParams.GetValue("CTRL_RANGE_TYPE"); if (rangefinderType == 1) { xTaskCreatePinnedToCore(Altimiter::AltimiterRxTask, "TaskAltimeterRx", 4096, this, 2, nullptr, ARDUINO_RUNNING_CORE); } else if (rangefinderType == 2) { xTaskCreatePinnedToCore(NV7Rangefinder::TaskNV7Rangefinder, "TaskNV7Rangefinder", 4096, this, 2, nullptr, ARDUINO_RUNNING_CORE); } else if (rangefinderType == 3) { xTaskCreatePinnedToCore(GRF500::Task, "TaskGRF500Rx", 4096, this, 2, nullptr, ARDUINO_RUNNING_CORE); } else if (rangefinderType == 4) { xTaskCreatePinnedToCore(NRA15::NRA15RxTask, "TaskNRA15Rx", 4096, this, 2, nullptr, ARDUINO_RUNNING_CORE); } else if (rangefinderType == 0) { log_i("No rangefinder selected, skip task creation"); } else { log_w("Unknown rangefinder type %d", rangefinderType); } }