This commit is contained in:
cfif 2024-12-04 13:10:47 +03:00
commit bc29328f0e
3 changed files with 128 additions and 0 deletions

35
Inc/CrashDetection.h Normal file
View File

@ -0,0 +1,35 @@
//
// Created by xemon on 23.11.22.
//
#ifndef UVEOS_ON_NATION_CRASHDETECTION_H
#define UVEOS_ON_NATION_CRASHDETECTION_H
#include "CarCrashDetection.h"
#include "LoggerInterface.h"
typedef struct {
tCarCrashDetection carCrashDetection;
tUveosEmergencyEventInterface emergencyEvents;
tUveosEmergencySimulationInterface simulationInterface;
tLoggerInterface *logger;
struct {
osThreadId_t id;
uint32_t stack[2048];
StaticTask_t controlBlock;
osThreadAttr_t attr;
} thread;
} tCrashDetection;
void CrashDetection_Init(
tCrashDetection *env,
tAccelDataFlowInterface *accelData,
float *asi15threshold,
tCarFlipDetectionSettings *settings,
tLoggerInterface *logger
);
void CrashDetection_StartThread(tCrashDetection *env);
#endif //UVEOS_ON_NATION_CRASHDETECTION_H

75
Src/CrashDetection.c Normal file
View File

@ -0,0 +1,75 @@
//
// Created by xemon on 23.11.22.
//
#include "CrashDetection.h"
#include "CmsisRtosThreadUtils.h"
#include "SystemDelayInterface.h"
#define LOG_SIGN "Опр.Авар."
#define LOGGER env->logger
void CrashDetection_Init(
tCrashDetection *env,
tAccelDataFlowInterface *accelData,
float *asi15threshold,
tCarFlipDetectionSettings *settings,
tLoggerInterface *logger
) {
env->logger = logger;
CarCrashDetection_Init(&env->carCrashDetection, accelData, asi15threshold, settings);
env->emergencyEvents = CarCrashDetection_GetInterface(&env->carCrashDetection);
env->simulationInterface = CarCrashDetection_GetSimInterface(&env->carCrashDetection);
InitThreadAtrStatic(
&env->thread.attr,
"CrashDetection",
env->thread.controlBlock,
env->thread.stack,
osPriorityNormal
);
env->thread.id = 0;
}
static _Noreturn void CrashDetection_Thread(tCrashDetection *env) {
uint32_t time = SystemGetMs();
float asi, maxAsi = 0;
uint32_t count = 0;
for (;;) {
CarCrashDetection_Processing(&env->carCrashDetection, SystemWaitForever);
#if false
asi = EraGlonassAsi15_GetCurrentValue(&env->carCrashDetection.asi15);
if (maxAsi < asi) {
maxAsi = asi;
}
++count;
if (time < SystemGetMs()) {
LoggerCnInfoStatic(LOGGER, LOG_SIGN, "CCD >")
LoggerPrintf(LOGGER, " asi<%f> count %u", maxAsi, count);
maxAsi = 0;
count = 0;
// LoggerPrintf(LOGGER, "grav[%f %f %f] cos<%f>",
// env->carCrashDetection.flip.current.value.x,
// env->carCrashDetection.flip.current.value.y,
// env->carCrashDetection.flip.current.value.z,
// env->carCrashDetection.flip.current.angleCos
// );
LoggerInfoStatic(LOGGER, LOG_SIGN, "<")
time = SystemGetMs() + 1000;
}
#endif
}
}
void CrashDetection_StartThread(tCrashDetection *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (CrashDetection_Thread), (void *) (env), &env->thread.attr);
}
}

18
modular.json Normal file
View File

@ -0,0 +1,18 @@
{
"dep": [
{
"type": "git",
"provider": "NAVIGATOR_UVEOS_NATION_TELIT",
"repo": "CarCrashDetection"
}
],
"cmake": {
"inc_dirs": [
"Inc/"
],
"srcs": [
"Src/**.c",
"Src_InitDefaults/**.c"
]
}
}