#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);
|
}
|
}
|