Начало

This commit is contained in:
cfif 2025-09-23 17:12:43 +03:00
commit 0c4bf0371c
3 changed files with 102 additions and 0 deletions

57
Indication.c Normal file
View File

@ -0,0 +1,57 @@
//
// Created by cfif on 11.10.23.
//
#include "Indication.h"
#include <SystemDelayInterface.h>
#include <CmsisRtosThreadUtils.h>
tStringStatic eDeviceModesNames[] = {
StringStaticInit("Запуск"),
StringStaticInit("Работа")
};
static void Indication_Update(tIndication *env) {
env->currentModeName = StringStaticGetLink(&eDeviceModesNames[env->mode]);
env->tick = ((env->tick + 1) % 10);
}
void Indication_Init(
tIndication *env,
eHvacDevModes initMode
) {
env->mode = initMode;
Indication_Update(env);
InitThreadAtrStatic(&env->thread.attr, "Indication", env->thread.controlBlock, env->thread.stack, osPriorityNormal);
env->thread.id = 0;
}
void Indication_SetMode(tIndication *env, eHvacDevModes mode) {
if (env->mode != mode) {
env->mode = mode;
Indication_Update(env);
}
}
static _Noreturn void Indication_Thread(tIndication *env) {
for (;;) {
Indication_Update(env);
SystemDelayMs(100);
}
}
void Indication_StartThread(tIndication *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (Indication_Thread), (void *) (env), &env->thread.attr);
} else {
osThreadResume(env->thread.id);
}
}
void Indication_StopThread(tIndication *env) {
if (env->thread.id) {
osThreadSuspend(env->thread.id);
}
}

35
Indication.h Normal file
View File

@ -0,0 +1,35 @@
//
// Created by cfif on 11.10.23.
//
#ifndef ERA_ELEMENT_2_INDICATION_H
#define ERA_ELEMENT_2_INDICATION_H
#include <cmsis_os.h>
#include <BaseTypes.h>
typedef enum {
HVAC_DEV_MODE_STARTUP = 0,
HVAC_DEV_MODE_RUN = 1
} eHvacDevModes;
typedef struct {
eHvacDevModes mode;
tStringLink currentModeName;
uint16_t tick;
struct {
osThreadId_t id;
uint32_t stack[128];
StaticTask_t controlBlock;
osThreadAttr_t attr;
} thread;
} tIndication;
void Indication_Init(tIndication *env, eHvacDevModes initMode);
void Indication_SetMode(tIndication *env, eHvacDevModes mode);
void Indication_StartThread(tIndication *env);
void Indication_StopThread(tIndication *env);
#endif //ERA_ELEMENT_2_INDICATION_H

10
modular.json Normal file
View File

@ -0,0 +1,10 @@
{
"cmake": {
"inc_dirs": [
"./"
],
"srcs": [
"./**.c"
]
}
}