From e2d04301bdff36828b69d6ce014bdf649200ab26 Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 21 Nov 2025 09:54:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CanSpamReceiver.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ CanSpamReceiver.h | 31 +++++++++++++++++++++++++++ modular.json | 10 +++++++++ 3 files changed, 94 insertions(+) create mode 100644 CanSpamReceiver.c create mode 100644 CanSpamReceiver.h create mode 100755 modular.json diff --git a/CanSpamReceiver.c b/CanSpamReceiver.c new file mode 100644 index 0000000..af6e507 --- /dev/null +++ b/CanSpamReceiver.c @@ -0,0 +1,53 @@ +// +// Created by cfif on 05.04.2024. +// +#include +#include "CanSpamReceiver.h" +#include "CmsisRtosThreadUtils.h" +#include "CanPorts.h" + +void CanSpamReceiver_Init(tCanSpamReceiver *env, + tSerialPortFrameIO *ioCanFrame) { + + env->ioCanFrame = ioCanFrame; + + env->access = osMutexNew(NULL); + + InitThreadAtrStatic(&env->thread.attr, "CanSpamReceiver", env->thread.controlBlock, env->thread.stack, + osPriorityNormal); +} + +void ListenCanSpamReceiver(tCanSpamReceiver *env) { + + uint16_t recv = env->ioCanFrame->receive(env->ioCanFrame->env, PROTOCOL_CAN_RAW, (uint8_t *) &env->canFrame, 1, + 1000); + + if (recv == 0) + return; + + if (osMutexAcquire(env->access, 100) == osOK) { + + uint32_t id = env->canFrame.standard_id; + + if (env->canFrame.id_type == FLEXCAN_ID_EXT) { + id = env->canFrame.extended_id; + } + + uint32_t result = ccu_candb_Receive(&ccu_candb_rx, env->canFrame.data, id, env->canFrame.dlc); + + osMutexRelease(env->access); + } + +} + +static _Noreturn void CanSpamReceiver_Thread(tCanSpamReceiver *env) { + for (;;) { + ListenCanSpamReceiver(env); + } +} + +void CanSpamReceiver_StartThread(tCanSpamReceiver *env) { + if (!env->thread.id) { + env->thread.id = osThreadNew((osThreadFunc_t) (CanSpamReceiver_Thread), (void *) (env), &env->thread.attr); + } +} \ No newline at end of file diff --git a/CanSpamReceiver.h b/CanSpamReceiver.h new file mode 100644 index 0000000..24f324e --- /dev/null +++ b/CanSpamReceiver.h @@ -0,0 +1,31 @@ +// +// Created by cfif on 05.04.2024. +// + +#ifndef HVAC_COMMANDLINES_H +#define HVAC_COMMANDLINES_H + +#include +#include "CanSerialPortFrame.h" +#include "ccu_candb-binutil.h" + +typedef struct { + + tSerialPortFrameIO *ioCanFrame; + osMutexId_t access; + can_rx_message_type canFrame; + + struct { + osThreadId_t id; + uint32_t stack[512]; + StaticTask_t controlBlock; + osThreadAttr_t attr; + } thread; + +} tCanSpamReceiver; + +void CanSpamReceiver_Init(tCanSpamReceiver *env, tSerialPortFrameIO *ioCanFrame); + +void CanSpamReceiver_StartThread(tCanSpamReceiver *env); + +#endif //HVAC_COMMANDLINES_H diff --git a/modular.json b/modular.json new file mode 100755 index 0000000..99df025 --- /dev/null +++ b/modular.json @@ -0,0 +1,10 @@ +{ + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +}