237 lines
6.7 KiB
C
237 lines
6.7 KiB
C
|
|
/* USER CODE BEGIN Header */
|
|||
|
|
/**
|
|||
|
|
******************************************************************************
|
|||
|
|
* @file : fm33lg0xx_queue.h
|
|||
|
|
* @brief : <EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
|||
|
|
* @version : 1.0
|
|||
|
|
* @changelog : version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD>汾 2025.11.13
|
|||
|
|
******************************************************************************
|
|||
|
|
* @attention
|
|||
|
|
*
|
|||
|
|
* Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China
|
|||
|
|
* THIS SOFTWARE is licensed under the Mulan PSL v1.
|
|||
|
|
* can use this software according to the terms and conditions of the Mulan PSL v1.
|
|||
|
|
* You may obtain a copy of Mulan PSL v1 at:
|
|||
|
|
* http://license.coscl.org.cn/MulanPSL
|
|||
|
|
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
|||
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
|||
|
|
* PURPOSE.
|
|||
|
|
* See the Mulan PSL v1 for more details.
|
|||
|
|
*
|
|||
|
|
******************************************************************************
|
|||
|
|
*/
|
|||
|
|
/* USER CODE END Header */
|
|||
|
|
|
|||
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|||
|
|
#ifndef __FM33_QUEUE_H
|
|||
|
|
#define __FM33_QUEUE_H
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
extern "C" {
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include "fm33lg0xx_fl.h"
|
|||
|
|
/* <20><><EFBFBD>Ӷ<EFBFBD>Malloc<6F><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> */
|
|||
|
|
#include "stdlib.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define NETCODE_E1_CALIB (0x0B)
|
|||
|
|
#define NETCODE_E2_CALIB (0x0C)
|
|||
|
|
#define NETCODE_E4_CALIB (0x05)
|
|||
|
|
#define NETCODE_E7_CALIB (0x0D)
|
|||
|
|
|
|||
|
|
#define NETCODE_PRESS (0x01)
|
|||
|
|
#define NETCODE_O2 (0x02)
|
|||
|
|
#define NETCODE_TEMP_PRESS (0x03)
|
|||
|
|
#define NETCODE_ELEC (0x06)
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define QUEUE_LEN_MAX (20)
|
|||
|
|
|
|||
|
|
#define PROGREMA_DEBUG_MODE (1)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/************************** <20>ṹ<EFBFBD>嶨<EFBFBD><E5B6A8> *************************/
|
|||
|
|
// <20><>ʶ<EFBFBD><CAB6>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
MSG_TYPE_OXYGEN_SENSOR, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>Ũ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MSG_TYPE_HOUR_SAVE, // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ݴ洢<DDB4><E6B4A2>Ϣ<EFBFBD><CFA2>Сʱ<D0A1><CAB1>
|
|||
|
|
MSG_TYPE_MINUTE_SAVE, // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ݴ洢<DDB4><E6B4A2>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>
|
|||
|
|
MSG_TYPE_CURRENT_TIME, // <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
MSG_TYPE_TIME_SEND, // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD>
|
|||
|
|
MSG_TYPE_AD_SAMPLING, // AD<41><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ȣ<EFBFBD>
|
|||
|
|
MSG_TYPE_AD_BOUNDARY_SEND, // EEPROM<4F>ϵ<EFBFBD><CFB5><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>¼<EFBFBD><C2BC>
|
|||
|
|
MSG_TYPE_AD_BOUNDARY_SAVE, // <20>궨ʱ<EAB6A8><CAB1><EFBFBD>߽<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>浽EEPROM
|
|||
|
|
MSG_TYPE_OXG_STM, // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>ǰϵͳ״̬<D7B4><CCAC>״̬<D7B4><CCAC>
|
|||
|
|
MSG_TYPE_CARLIB_SAVE, // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>ֵ
|
|||
|
|
MSG_TYPE_FILTER_SERVER, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MSG_TYPE_FILTER_TIME_SAVE, // <20>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>д洢
|
|||
|
|
|
|||
|
|
MSG_TYPE_MAX // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ߽<DAB1><DFBD><EFBFBD><EFBFBD>飩
|
|||
|
|
} MsgType;
|
|||
|
|
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint16_t concentration; // <20><><EFBFBD><EFBFBD>Ũ<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD>磺210 <20><>ʾ21%<25><>
|
|||
|
|
uint16_t flow_rate; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺50 <20><>ʾ5L/min<69><6E>
|
|||
|
|
} OxygenSensorData;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD>ݴ洢<DDB4><E6B4A2>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>ǰСʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD>ڼ<EFBFBD>¼<EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>ʱ<EFBFBD>䣩
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint32_t hour; // <20><>ǰСʱ<D0A1><CAB1>0-19999<39><39>
|
|||
|
|
uint32_t minute; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ӣ<EFBFBD>0-59<35><39>
|
|||
|
|
uint32_t second; // <20><><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
} HourMeterData;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint16_t adc_elec_value;
|
|||
|
|
uint16_t adc_ntc_value;
|
|||
|
|
uint16_t adc_press_value;
|
|||
|
|
uint16_t adc_220v_value;
|
|||
|
|
|
|||
|
|
uint32_t voltage_elec;
|
|||
|
|
uint32_t voltage_ntc;
|
|||
|
|
uint32_t voltage_press;
|
|||
|
|
uint32_t voltage_220v;
|
|||
|
|
|
|||
|
|
uint16_t real_press; // ѹ<><D1B9><EFBFBD><EFBFBD>ʵֵ<CAB5><D6B5><EFBFBD><EFBFBD>λkpa
|
|||
|
|
uint16_t real_ntc; // <20>¶<EFBFBD><C2B6><EFBFBD>ʵֵ<CAB5><D6B5><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
uint16_t real_220V; // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ʵֵ<CAB5><D6B5><EFBFBD><EFBFBD>λVAC
|
|||
|
|
uint16_t real_elec; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵֵ <20><>λmA
|
|||
|
|
|
|||
|
|
} ADSampleData;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint16_t elec_low_boundary;
|
|||
|
|
uint16_t elec_high_boundary;
|
|||
|
|
uint16_t ntc_low_boundary;
|
|||
|
|
uint16_t ntc_high_boundary;
|
|||
|
|
uint16_t press_low_boundary;
|
|||
|
|
uint16_t press_high_boundary;
|
|||
|
|
uint16_t net220v_low_boundary;
|
|||
|
|
uint16_t net220v_high_boundary;
|
|||
|
|
uint8_t save_index; // ѡ<><D1A1><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>EEPROMд<4D><D0B4><EFBFBD>ĸ<EFBFBD><C4B8>߽<EFBFBD>
|
|||
|
|
} ADBoundary;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC> */
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
STM_INIT,
|
|||
|
|
STM_NOM,
|
|||
|
|
STM_ERROR_SHOUNTDOWN, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3> E1-E5,LL
|
|||
|
|
STM_ERROR_NONE_STOP, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD>ͣ<EFBFBD><CDA3>״̬ E7<45><37>Ũ<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>83.5ʱ
|
|||
|
|
STM_CARLIB, // <20><><EFBFBD><EFBFBD><E2B5BD><EFBFBD>뵽<EFBFBD>궨״̬
|
|||
|
|
STM_DEBUG, // <20><><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
}OXG_STM;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
OXG_STM oxg_stm;
|
|||
|
|
uint16_t data; // <20><><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>״̬
|
|||
|
|
|
|||
|
|
} StateMachine;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint8_t netcode;
|
|||
|
|
uint16_t boundary;
|
|||
|
|
|
|||
|
|
} CarlibSaveData;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
uint32_t last_clean_filter_hours;
|
|||
|
|
uint32_t last_replace_filter_hours;
|
|||
|
|
|
|||
|
|
bool clean_filter_time_need_stored; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD>洢<EFBFBD><E6B4A2>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оʱ<D0BE><CAB1>
|
|||
|
|
bool replace_filter_time_need_stored; // <20><><EFBFBD>ǵ<EFBFBD>ǰ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оʱ<D0BE><CAB1>
|
|||
|
|
|
|||
|
|
} FilterServer;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef union
|
|||
|
|
{
|
|||
|
|
OxygenSensorData oxygen; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
HourMeterData hour_meter; // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
ADSampleData adc_data;
|
|||
|
|
ADBoundary adc_boundary; // AD<41><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> <20><>ʼ<EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><CAB1>EEPROM<4F><4D>ȡ<EFBFBD><C8A1> <20><><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
StateMachine state_machine; // <20><>¼<EFBFBD><C2BC>ǰϵͳ״̬<D7B4><CCAC>
|
|||
|
|
CarlibSaveData carlib_data; // <20><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>У<D0A3><D7BC><EFBFBD><EFBFBD>
|
|||
|
|
FilterServer filter_server; // <20><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о
|
|||
|
|
// <20>ȵȡ<C8B5><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}MsgData;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
MsgType type; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>MsgData<74><61>
|
|||
|
|
MsgData data; // <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>type<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ֶΣ<D6B6>
|
|||
|
|
} MsgQueueItem;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* <20><>Ϣ<EFBFBD><CFA2><EFBFBD>нڵ<D0BD><DAB5>ṹ<EFBFBD><E1B9B9> */
|
|||
|
|
typedef struct QueueNode {
|
|||
|
|
|
|||
|
|
MsgQueueItem item; // <20><>Ϣ֡<CFA2><D6A1><EFBFBD><EFBFBD> <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
struct QueueNode* next; // <20>ṹ<EFBFBD><E1B9B9><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
|
|||
|
|
} QueueNode;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* <20><>Ϣ<EFBFBD><CFA2><EFBFBD>нṹ */
|
|||
|
|
typedef struct {
|
|||
|
|
|
|||
|
|
QueueNode* front; // <20><>ͷָ<CDB7><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>е<EFBFBD>ͷ<EFBFBD><CDB7>
|
|||
|
|
QueueNode* rear; // <20><>βָ<CEB2><D6B8> <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>е<EFBFBD>β<EFBFBD><CEB2>
|
|||
|
|
uint32_t length; // <20><><EFBFBD>е<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD> <20><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
} MessageQueue;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* <20>ⲿ<EFBFBD><E2B2BF><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD> */
|
|||
|
|
extern MessageQueue global_queue;
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ⲿʹ<E2B2BF>õĺ<C3B5><C4BA><EFBFBD>
|
|||
|
|
void init_queue(MessageQueue *queue); // <20><>Ϣ<EFBFBD><CFA2><EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
bool is_queue_empty(MessageQueue* queue);
|
|||
|
|
void insert_queue_node_in_head(MessageQueue* queue, MsgQueueItem frame);
|
|||
|
|
bool remove_queue_node_in_head(MessageQueue* queue, MsgQueueItem* out_item);
|
|||
|
|
bool remove_queue_node_by_type(MessageQueue* queue, MsgType target_type, MsgQueueItem* out_item);
|
|||
|
|
bool peek_queue_node_by_type(MessageQueue* queue, MsgType target_type, MsgQueueItem* out_item);
|
|||
|
|
bool modify_or_add_queue_node_by_type(MessageQueue* queue, MsgType target_type, MsgQueueItem new_data);
|
|||
|
|
bool has_queue_node_of_type(MessageQueue* queue, MsgType target_type);
|
|||
|
|
uint32_t count_queue_node_by_type(MessageQueue* queue, MsgType target_type);
|
|||
|
|
void clear_queue(MessageQueue* queue);
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#endif /* __FM33_QUEUE_H */
|
|||
|
|
|
|||
|
|
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/
|
|||
|
|
|