Добавлены настройки LIN5 (управление кнопками) и немного сон
This commit is contained in:
parent
d8378179f1
commit
52691ca0da
129
LinSensorTasks.c
129
LinSensorTasks.c
|
|
@ -220,7 +220,17 @@ void Lin4_Output_Get_From_Model(tLin4TaskSensor *env) {
|
||||||
|
|
||||||
countQueue_space = osMessageQueueGetSpace(env->queue_input_Lin4_Stat);
|
countQueue_space = osMessageQueueGetSpace(env->queue_input_Lin4_Stat);
|
||||||
if (countQueue_space == 0) {
|
if (countQueue_space == 0) {
|
||||||
// status = osMessageQueueGet(env->queue_input_Lin4_Stat, &env->sensorLin4CmdBusInput, 0, 0);
|
status = osMessageQueueGet(env->queue_input_Lin4_Stat, &env->sensorLin4CmdBusInput, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
countQueue_space = osMessageQueueGetSpace(env->queue_input_tAroma);
|
||||||
|
if (countQueue_space == 0) {
|
||||||
|
status = osMessageQueueGet(env->queue_input_tAroma, &rtDW.LIN4_Aroma_Stat_Model, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
countQueue_space = osMessageQueueGetSpace(env->queue_input_tIonizer);
|
||||||
|
if (countQueue_space == 0) {
|
||||||
|
status = osMessageQueueGet(env->queue_input_tIonizer, &rtDW.LIN4_Ionizer_Stat_Model, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -689,6 +699,36 @@ static void set_led_group(tCCU_DRS_Req *req, uint8_t led_group, uint8_t count) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Lin5_Input_Set_From_Model(tLin5TaskSensor *env) {
|
||||||
|
|
||||||
|
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_input_model_count);
|
||||||
|
|
||||||
|
if (countQueue_space) {
|
||||||
|
osStatus_t status = osMessageQueuePut(env->queue_led_input_model_count, &rtY.DRS_output, 0,
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Lin5_Input_Get_From_Model(tLin5TaskSensor *env) {
|
||||||
|
|
||||||
|
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_input_model_count);
|
||||||
|
|
||||||
|
if (countQueue_space == 0) {
|
||||||
|
osStatus_t status = osMessageQueueGet(env->queue_led_input_model_count, &env->linStateSensorModelOutput, 0, 0);
|
||||||
|
|
||||||
|
memcpy(env->linStateSensor.LED_COUNT, env->linStateSensorModelOutput.LED_COUNT, LIN5_SENSOR_COUNT);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) {
|
||||||
|
set_led_group(&env->d_CCU_DRS_Req, i, env->linStateSensor.LED_COUNT[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Lin5_Output_Get_From_Model(tLin5TaskSensor *env) {
|
void Lin5_Output_Get_From_Model(tLin5TaskSensor *env) {
|
||||||
|
|
||||||
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_count);
|
uint32_t countQueue_space = osMessageQueueGetSpace(env->queue_led_count);
|
||||||
|
|
@ -703,36 +743,6 @@ void Lin5_Output_Get_From_Model(tLin5TaskSensor *env) {
|
||||||
static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) {
|
static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) {
|
||||||
lin_event_id_t ret = LIN_NO_EVENT;
|
lin_event_id_t ret = LIN_NO_EVENT;
|
||||||
|
|
||||||
SystemDelayMs(40);
|
|
||||||
|
|
||||||
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(40);
|
|
||||||
|
|
||||||
for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) {
|
for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) {
|
||||||
|
|
||||||
// if (env->linStateSensor.error_connect[i] == 0) {
|
// if (env->linStateSensor.error_connect[i] == 0) {
|
||||||
|
|
@ -741,16 +751,20 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) {
|
||||||
|
|
||||||
uint8_t current_btn_state = env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat;
|
uint8_t current_btn_state = env->linStateSensor.d_DRS_Stat[i].DRS_Btn_Stat;
|
||||||
|
|
||||||
|
if (current_btn_state) {
|
||||||
|
env->linStateSensor.LED_COUNT[i] = 1;
|
||||||
|
} else {
|
||||||
|
env->linStateSensor.LED_COUNT[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if ((current_btn_state) && (!env->linStateSensor.prev_btn_state[i])) {
|
if ((current_btn_state) && (!env->linStateSensor.prev_btn_state[i])) {
|
||||||
|
|
||||||
if (env->linStateSensor.LED_COUNT[i] == 0) {
|
env->linStateSensor.LED_COUNT[i] = 1;
|
||||||
env->linStateSensor.LED_COUNT[i] = 3;
|
|
||||||
} else {
|
|
||||||
--env->linStateSensor.LED_COUNT[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
env->linStateSensor.prev_btn_state[i] = current_btn_state;
|
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.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.Err_Stat[i] = env->linStateSensor.d_DRS_Stat[i].DRS_Err_Stat;
|
||||||
|
|
@ -794,6 +808,7 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) {
|
||||||
|
|
||||||
osStatus_t status = osOK;
|
osStatus_t status = osOK;
|
||||||
if (countQueue_led_count) {
|
if (countQueue_led_count) {
|
||||||
|
|
||||||
memcpy(env->sensorButtonCmdBusInput.in_COUNT, env->linStateSensor.LED_COUNT, LIN5_SENSOR_COUNT);
|
memcpy(env->sensorButtonCmdBusInput.in_COUNT, env->linStateSensor.LED_COUNT, LIN5_SENSOR_COUNT);
|
||||||
memcpy(env->sensorButtonCmdBusInput.in_error_connect, env->linStateSensor.error_connect, LIN5_SENSOR_COUNT);
|
memcpy(env->sensorButtonCmdBusInput.in_error_connect, env->linStateSensor.error_connect, LIN5_SENSOR_COUNT);
|
||||||
memcpy(env->sensorButtonCmdBusInput.LinRespErr_Stat, env->linStateSensor.LinRespErr_Stat, LIN5_SENSOR_COUNT);
|
memcpy(env->sensorButtonCmdBusInput.LinRespErr_Stat, env->linStateSensor.LinRespErr_Stat, LIN5_SENSOR_COUNT);
|
||||||
|
|
@ -803,6 +818,40 @@ static lin_event_id_t Lin5_Scheduler(tLin5TaskSensor *env) {
|
||||||
status = osMessageQueuePut(env->queue_led_count, env->linStateSensor.LED_COUNT, 0, 0U);
|
status = osMessageQueuePut(env->queue_led_count, env->linStateSensor.LED_COUNT, 0, 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Lin5_Input_Get_From_Model(env);
|
||||||
|
|
||||||
|
if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) {
|
||||||
|
|
||||||
|
SystemDelayMs(40);
|
||||||
|
|
||||||
|
ret = Set_CCU_DRS_Req(env->linIo, env->linData, &env->d_CCU_DRS_Req);
|
||||||
|
|
||||||
|
if (ret == LIN_TX_COMPLETED) {
|
||||||
|
|
||||||
|
env->d_CCU_DRS_Req.BCM_SwIndIntens_Stat = 0;
|
||||||
|
env->d_CCU_DRS_Req.BCM_IndFadingTime_Req = 0;
|
||||||
|
|
||||||
|
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);
|
||||||
|
#if (LOG_LIN5_SENSOR == 1)
|
||||||
|
LoggerInfoStatic(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req - OK")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (*((uint32_t *) &env->d_CCU_DRS_Req) != *((uint32_t *) &env->d_old_CCU_DRS_Req)) {
|
||||||
|
|
||||||
|
#if (LOG_LIN5_SENSOR == 1)
|
||||||
|
LoggerFormatInfo(LOGGER, LOG_SIGN5, "Sensor Set_CCU_DRS_Req (ERROR %d)", ret)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemDelayMs(40);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return LIN_NO_EVENT;
|
return LIN_NO_EVENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -817,10 +866,10 @@ void Lin_5_Init(tLin5TaskSensor *env,
|
||||||
env->access = osMutexNew(NULL);
|
env->access = osMutexNew(NULL);
|
||||||
|
|
||||||
env->queue_led_count = osMessageQueueNew(1, sizeof(env->linStateSensor.LED_COUNT), NULL);
|
env->queue_led_count = osMessageQueueNew(1, sizeof(env->linStateSensor.LED_COUNT), NULL);
|
||||||
|
env->queue_led_input_model_count = osMessageQueueNew(1, sizeof(LinStateSensorModel), NULL);
|
||||||
|
|
||||||
for (uint8_t i = 0; i < LIN5_SENSOR_COUNT; ++i) {
|
memset(env->linStateSensor.LED_COUNT, 3, LIN5_SENSOR_COUNT);
|
||||||
env->linStateSensor.LED_COUNT[i] = 3;
|
memset(rtDW.LIN5_SENSON_ADR_Stat_model.in_COUNT, 3, LIN5_SENSOR_COUNT);
|
||||||
}
|
|
||||||
|
|
||||||
InitThreadAtrStatic(&env->threadLin.attr, "Ln5", env->threadLin.controlBlock, env->threadLin.stack,
|
InitThreadAtrStatic(&env->threadLin.attr, "Ln5", env->threadLin.controlBlock, env->threadLin.stack,
|
||||||
osPriorityNormal);
|
osPriorityNormal);
|
||||||
|
|
@ -830,7 +879,7 @@ void Lin_5_Init(tLin5TaskSensor *env,
|
||||||
static _Noreturn void Lin5_Thread(tLin5TaskSensor *env) {
|
static _Noreturn void Lin5_Thread(tLin5TaskSensor *env) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
if (osMutexAcquire(env->access, 1000) == osOK) {
|
if (osMutexAcquire(env->access, 2000) == osOK) {
|
||||||
|
|
||||||
lin_event_id_t res = Lin5_Scheduler(env);
|
lin_event_id_t res = Lin5_Scheduler(env);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -361,6 +361,10 @@ typedef struct {
|
||||||
uint8_t Error_Connect; // Ошибка LIN шины (ни одно устройство не отвечает)
|
uint8_t Error_Connect; // Ошибка LIN шины (ни одно устройство не отвечает)
|
||||||
} SensorLin5ButtonCmdBusInput;
|
} SensorLin5ButtonCmdBusInput;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t LED_COUNT[LIN5_SENSOR_COUNT];
|
||||||
|
} LinStateSensorModel;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
tLinIO *linIo;
|
tLinIO *linIo;
|
||||||
|
|
@ -372,7 +376,11 @@ typedef struct {
|
||||||
|
|
||||||
SensorLin5ButtonCmdBusInput sensorButtonCmdBusInput;
|
SensorLin5ButtonCmdBusInput sensorButtonCmdBusInput;
|
||||||
|
|
||||||
|
// LinStateSensorModel linStateSensorModelInput;
|
||||||
|
LinStateSensorModel linStateSensorModelOutput;
|
||||||
|
|
||||||
osMessageQueueId_t queue_led_count;
|
osMessageQueueId_t queue_led_count;
|
||||||
|
osMessageQueueId_t queue_led_input_model_count;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
tDRS_Stat d_DRS_Stat[LIN5_SENSOR_COUNT];
|
tDRS_Stat d_DRS_Stat[LIN5_SENSOR_COUNT];
|
||||||
|
|
@ -383,7 +391,7 @@ typedef struct {
|
||||||
uint8_t error_connect[LIN5_SENSOR_COUNT];
|
uint8_t error_connect[LIN5_SENSOR_COUNT];
|
||||||
uint8_t error_old_connect[LIN5_SENSOR_COUNT];
|
uint8_t error_old_connect[LIN5_SENSOR_COUNT];
|
||||||
|
|
||||||
uint8_t prev_btn_state[LIN5_SENSOR_COUNT];
|
// uint8_t prev_btn_state[LIN5_SENSOR_COUNT];
|
||||||
|
|
||||||
uint8_t LinRespErr_Stat[LIN5_SENSOR_COUNT];
|
uint8_t LinRespErr_Stat[LIN5_SENSOR_COUNT];
|
||||||
uint8_t Err_Stat[LIN5_SENSOR_COUNT];
|
uint8_t Err_Stat[LIN5_SENSOR_COUNT];
|
||||||
|
|
@ -394,7 +402,6 @@ typedef struct {
|
||||||
tCCU_DRS_Req d_CCU_DRS_Req;
|
tCCU_DRS_Req d_CCU_DRS_Req;
|
||||||
tCCU_DRS_Req d_old_CCU_DRS_Req;
|
tCCU_DRS_Req d_old_CCU_DRS_Req;
|
||||||
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
osThreadId_t id;
|
osThreadId_t id;
|
||||||
uint32_t stack[384];
|
uint32_t stack[384];
|
||||||
|
|
@ -425,5 +432,6 @@ void Lin5_StartThread(tLin5TaskSensor *env);
|
||||||
|
|
||||||
void Lin5_Output_Get_From_Model(tLin5TaskSensor *env);
|
void Lin5_Output_Get_From_Model(tLin5TaskSensor *env);
|
||||||
|
|
||||||
|
void Lin5_Input_Set_From_Model(tLin5TaskSensor *env);
|
||||||
|
|
||||||
#endif //HVAC_M7_LINSENSORTASKS_H
|
#endif //HVAC_M7_LINSENSORTASKS_H
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue