60 lines
1.3 KiB
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);
|
|
}
|
|
}
|