diff --git a/LinSensorTasks.c b/LinSensorTasks.c index 90d2eda..c1ab47d 100644 --- a/LinSensorTasks.c +++ b/LinSensorTasks.c @@ -333,18 +333,16 @@ static void set_led_group(tCCU_DRS_Req *req, uint8_t led_group, uint8_t count) { static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { lin_event_id_t ret = LIN_NO_EVENT; - - 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 = 2; - - 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)) { @@ -361,53 +359,64 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) { #endif } + SystemDelayMs(50); for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { - ret = Get_DRS_Stat(env->linIo, env->linData, &env->linStateSensor.d_DRS_Stat[i], DRS_SENSON_ADR_Stat[i]); + if (env->linStateSensor.error_connect[i] == 0) { - if (env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat) { - ++env->linStateSensor.LED_COUNT[i]; + 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]; + } - if (env->linStateSensor.LED_COUNT[i] > 3) { - env->linStateSensor.LED_COUNT[i] = 0; } - } + 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; + 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 (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])) { + 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]; + *((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 - ) - } + 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 - } else { - env->linStateSensor.error_connect[i] = 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) - } + 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 - } + } + SystemDelayMs(50); + + } } @@ -424,6 +433,10 @@ void Lin_5_Init(tLin5TaskSensor *env, env->logger = logger; env->access = osMutexNew(NULL); + for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) { + env->linStateSensor.LED_COUNT[i] = 3; + } + InitThreadAtrStatic(&env->threadLin.attr, "Ln5", env->threadLin.controlBlock, env->threadLin.stack, osPriorityNormal); } @@ -454,7 +467,6 @@ static _Noreturn void Lin5_Thread(tLin5TaskSensor *env) { LoggerErrorStatic(LOGGER, LOG_SIGN5, "Access error Lin5_Thread"); } - SystemDelayMs(50); } } diff --git a/LinSensorTasks.h b/LinSensorTasks.h index 99ef4da..3e03b20 100644 --- a/LinSensorTasks.h +++ b/LinSensorTasks.h @@ -259,6 +259,8 @@ typedef struct { uint8_t error_connect[LIN5_SENSOR_COUNT]; uint8_t error_old_connect[LIN5_SENSOR_COUNT]; + uint8_t prev_btn_state[LIN5_SENSOR_COUNT]; + uint8_t LinRespErr_Stat[LIN5_SENSOR_COUNT]; uint8_t Err_Stat[LIN5_SENSOR_COUNT]; } linStateSensor;