GONEC_ARTERY_Msd/Src/TaskMsd.c

60 lines
1.3 KiB
C

//
// Created by cfif on 04.10.2022.
//
#include <stddef.h>
#include <SystemDelayInterface.h>
#include <TaskMsd.h>
#include <CmsisRtosThreadUtils.h>
#include "fs_interface.h"
void TaskMsd_Init(
tTaskMsd *env,
tGnss *gnss,
tRtcIO *rtcIo,
tModemMain *modemMain,
tGpios *gpios
) {
env->gnss = gnss;
env->rtcIo = rtcIo;
env->modemMain = modemMain;
env->gpios = gpios;
//Инициализируем поток
InitThreadAtrStatic(&env->thread.attr, "TaskMsd", env->thread.controlBlock, env->thread.stack, osPriorityNormal);
env->thread.id = 0;
}
static _Noreturn void TaskMsd_Thread(tTaskMsd *env) {
bool isFlagStuckSos = false;
for (;;) {
bool isButtonSosPress = GpioPinGet(&env->gpios->Power.discretIn1_pg2);
// Нажата кнопка SOS
if (isButtonSosPress) {
isFlagStuckSos = true;
} else {
if (isFlagStuckSos) {
isFlagStuckSos = false;
sendMsd(env->modemMain);
}
}
SystemDelayMs(200);
}
}
void TaskMsd_StartThread(tTaskMsd *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (TaskMsd_Thread), (void *) (env), &env->thread.attr);
} else {
osThreadResume(env->thread.id);
}
}