From 5b995ebd83905a308fa0e21a478fd393f58d5e6c Mon Sep 17 00:00:00 2001 From: cfif Date: Tue, 2 Jun 2026 16:58:27 +0300 Subject: [PATCH] Init --- LinSensorTasks.c | 139 +++++++++++++++++------------------------------ LinSensorTasks.h | 2 +- 2 files changed, 52 insertions(+), 89 deletions(-) diff --git a/LinSensorTasks.c b/LinSensorTasks.c index 08062b7..0e539b3 100644 --- a/LinSensorTasks.c +++ b/LinSensorTasks.c @@ -230,6 +230,36 @@ Get_DRS_Stat(tSerialPortLinIO *linIo, tLinData *linData, tDRS_Stat *p_tDRS_Stat, return res; } + +static lin_event_id_t +Set_DRS_Stat(tSerialPortLinIO *linIo, tLinData *linData, tDRS_Stat *p_tDRS_Stat, uint8_t DRS_stat) { + lin_event_id_t res; + + tDRS_Stat *tDRS_Stat_ = (tDRS_Stat *) linData->g_aTxBuffer; + + uint8_t retry = 1; + + while (retry) { + + linData->direction = LIN_DIRECTION_SET; + + linData->g_aTxBufferLen = sizeof(tDRS_Stat); + linData->g_aRxBufferLen = 0; + + memcpy(tDRS_Stat_, p_tDRS_Stat, sizeof(tDRS_Stat)); + + res = SEND_SENSOR_COM_x(linIo, linData, DRS_stat); + + if (res == LIN_TX_COMPLETED) { + break; + } + + --retry; + } + + return res; +} + // Вспомогательная функция: устанавливает три бита для группы led_group // в соответствии со значением count (0, 1, 2, 3) static void set_led_group(tCCU_DRS_Req *req, uint8_t led_group, uint8_t count) { @@ -305,111 +335,44 @@ static void set_led_group(tCCU_DRS_Req *req, uint8_t led_group, uint8_t count) { } +bool isNowData; + static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { lin_event_id_t ret = env->linIo->receivedCommand(env->linIo->env, &env->linData, 1000); if (ret == LIN_RX_COMPLETED) { - asm("nop"); - if (env->linData.g_aRxBufferLen == 2) { - asm("nop"); - } - } - asm("nop"); + if (env->linData.g_aRxBuffer[0] == CCU_DRS_Req) { -/* - lin_event_id_t ret = LIN_NO_EVENT; + } else { + tDRS_Stat DRS_Stat; - ret = Set_CCU_DRS_Req(env->linIo, env->linData, &env->d_CCU_DRS_Req); - - if (ret == LIN_TX_COMPLETED) { - - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - set_led_group(&env->d_CCU_DRS_Req, i, env->linStateSensor.LED_COUNT[i]); - } - env->d_CCU_DRS_Req.BCM_SwIndIntens_Stat = 0; - env->d_CCU_DRS_Req.BCM_IndFadingTime_Req = 0; - -#if (LOG_LIN5_SENSOR == 1) - - if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { - *((uint32_t *) &env->d_old_CCU_DRS_Req) = *((uint32_t *) &env->d_CCU_DRS_Req); - LoggerInfoStatic(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req - OK") - } -#endif - } else { -#if (LOG_LIN5_SENSOR == 1) - if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) { - *((uint32_t *) &env->d_old_CCU_DRS_Req) = *((uint32_t *) &env->d_CCU_DRS_Req); - LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req (ERROR %d)", ret) - } -#endif - } - - SystemDelayMs(50); - - for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - - if (env->linStateSensor.error_connect[i] == 0) { - - ret = Get_DRS_Stat(env->linIo, env->linData, &env->linStateSensor.d_DRS_Stat[i], DRS_SENSON_ADR_Stat[i]); - - uint8_t current_btn_state = env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat; - - if ((current_btn_state) && (!env->linStateSensor.prev_btn_state[i])) { - - if (env->linStateSensor.LED_COUNT[i] == 0) { - env->linStateSensor.LED_COUNT[i] = 3; - } else { - --env->linStateSensor.LED_COUNT[i]; - } - - } - env->linStateSensor.prev_btn_state[i] = current_btn_state; - - env->linStateSensor.LinRespErr_Stat[i] = env->linStateSensor.d_DRS_Stat[i].DRS_LinRespErr_Stat; - env->linStateSensor.Err_Stat[i] = env->linStateSensor.d_DRS_Stat[i].DRS_Err_Stat; - - if (ret == LIN_RX_COMPLETED) { - env->linStateSensor.error_connect[i] = 0; -#if (LOG_LIN5_SENSOR == 1) - - if ((*((uint8_t *) &env->linStateSensor.d_DRS_Stat[i]) != - *((uint8_t *) &env->linStateSensor.d_old_DRS_Stat[i])) || - (env->linStateSensor.LED_COUNT[i] != env->linStateSensor.LED_OLD_COUNT[i])) { - - *((uint8_t *) &env->linStateSensor.d_old_DRS_Stat[i]) = *((uint8_t *) &env->linStateSensor.d_DRS_Stat[i]); - env->linStateSensor.LED_OLD_COUNT[i] = env->linStateSensor.LED_COUNT[i]; - - LoggerFormatInfo(LOGGER, LOG_SIGN5, - "Sensor number %d: COUNT = %d DRS_Btn_Stat = %d DRS_LinRespErr_Stat = %d DRS_Err_Stat = %d", - i, - env->linStateSensor.LED_COUNT[i], - env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat, - env->linStateSensor.d_DRS_Stat[i].DRS_LinRespErr_Stat, - env->linStateSensor.d_DRS_Stat[i].DRS_Err_Stat - ) - } -#endif + if (isNowData) { + DRS_Stat.DRS_Btn_Stat = 1; } else { - env->linStateSensor.error_connect[i] = 1; -#if (LOG_LIN5_SENSOR == 1) - if (env->linStateSensor.error_connect[i] != env->linStateSensor.error_old_connect[i]) { - env->linStateSensor.error_old_connect[i] = env->linStateSensor.error_connect[i]; - LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor number %d: ERROR Get_FPL_Stat = %d", i, ret) - } -#endif + DRS_Stat.DRS_LinRespErr_Stat = 1; } - SystemDelayMs(50); + for (uint8_t i = 0; i < 8; ++i) { + + if (env->linData.g_aRxBuffer[0] == DRS_SENSON_ADR_Stat[i]) { + ret = Set_DRS_Stat(env->linIo, &env->linData, &DRS_Stat, DRS_SENSON_ADR_Stat[i]); + if (ret == LIN_TX_COMPLETED) { + asm("nop"); + } + + break; + } + } } } + return LIN_NO_EVENT; - */ + } void Lin_5_Init(tLin5TaskSensor *env, diff --git a/LinSensorTasks.h b/LinSensorTasks.h index 96a2f5c..00595c5 100644 --- a/LinSensorTasks.h +++ b/LinSensorTasks.h @@ -273,7 +273,7 @@ typedef struct { struct { osThreadId_t id; - uint32_t stack[384]; + uint32_t stack[512]; StaticTask_t controlBlock; osThreadAttr_t attr; } threadLin;