FluxDC/components/FluxProtocol/FluxProtocol.h
2025-04-30 16:50:45 +08:00

233 lines
5.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file FluxProtocol.h
* @brief 流量计通讯协议部分
*
* 用于声明流量计参数计便携制氧机参数
*
* @author wang xiang en
* @date 2025-04-18
* @version 版本号
* @copyright 版权声明((C)2025, YUWELL MEDTECH Co.ltd
*/
#ifndef _FLUX_PROTOCOL_H
#define _FLUX_PROTOCOL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "freertos/semphr.h"
#include "freertos/event_groups.h"
#include "ui.h"
#include "FluxUart.h"
/* 包含套接字头文件 方便进行tcp ip通讯 */
#include "lwip/sockets.h"
#define DEVICE_NAME_LENGTH 32
#define DEVICE_STAGE_MAX 8
#define SPIRIT_3_STAGE_NUM 4
#define SPIRIT_6_STAGE_NUM 6
#define SPIRIT_8_STAGE_NUM 8
/* 定义呼吸模拟器六个挡位控制所在Modbus地址 */
#define BS_ADDR_15BPM 0x080B
#define BS_ADDR_20BPM 0x080C
#define BS_ADDR_25BPM 0x080D
#define BS_ADDR_30BPM 0x080E
#define BS_ADDR_35BPM 0x080F
#define BS_ADDR_40BPM 0x0810
/* 定义枚举用于标记呼吸频率 */
typedef enum Bs_test_Rate{
BS_RATE_15BPM,
BS_RATE_20BPM,
BS_RATE_25BPM,
BS_RATE_30BPM,
BS_RATE_35BPM,
BS_RATE_40BPM,
};
/* 声明设备类型 device_id */
typedef enum DeviceType{
Spirit3,
Spirit6,
YU_Lite8,
};
/* 地址0x0001处的启停指令 */
typedef enum MeasureCommand
{
StartMeasure=1,
StopMeasure=2,
};
/**
* @brief 声明流量数据结构体
*
*/
typedef struct FluxProtocol
{
float testVolume;
uint16_t currentStage;
uint16_t currentBPM;
float nominalVolumeStage;
float nominalVolumeBPM;
float nominalVolumeMax;
float nominalVolumeMin;
enum DeviceType currentDevice;
};
/* 声明全局变量 */
extern struct FluxProtocol fluxProtocol;
/* 定义LED小灯闪烁时间间隔 ms */
#define BS_LED_BLINK_INTERVAL_MS 500
#define NOM_LED_BLINK_INTERVAL_MS 500
/* 定义存储各挡位是否测试成功的标志变量 事件组 */
extern EventGroupHandle_t g_bs_test_event_group;
/* 声明全局变量 */
extern uint32_t g_bs_test_event_group_bits[6];
/* 导出当前测试频率 */
extern enum Bs_test_Rate currentTestRate;
/* 导出三种流量计体积数据 */
extern float Spirit3_Volume[4];
extern float Spirit6_Volume[6];
extern float YULite8_Volume[6];
/* 导出呼吸模拟器控制地址 */
extern uint32_t bs_addr_all[6];
/* 导出消息数据*/
extern char *test_info[6];
/* 导出LED小灯控制句柄 */
extern TaskHandle_t bs_stateLED_task_handle;
extern TaskHandle_t nom_stateLED_task_handle;
/* 导出用于进行UDP通讯的变量 */
extern int udp_socket;
extern struct sockaddr_in server_addr;
#define BS_ALL_RESULT_CLEAR lv_label_set_text(ui_pageHome_LabelRate15Result, "0");\
lv_label_set_text(ui_pageHome_LabelRate20Result, "0");\
lv_label_set_text(ui_pageHome_LabelRate25Result, "0");\
lv_label_set_text(ui_pageHome_LabelRate30Result, "0");\
lv_label_set_text(ui_pageHome_LabelRate35Result, "0");\
lv_label_set_text(ui_pageHome_LabelRate40Result, "0");
#define NOM_ALL_RESULT_CLEAR lv_label_set_text(ui_pageHome_labelTestResult, "0");
/* 创建led任务挂起宏函数 */
#define BS_STATE_LED_TASK_SUSPEND vTaskSuspend(bs_stateLED_task_handle);\
lv_obj_set_style_bg_color(ui_pageHome_panelBSLEDing,lv_color_hex(0xFFFFFF),LV_PART_MAIN);
/* 创建常规测试led任务挂起宏函数 */
#define NOM_STATE_LED_TASK_SUSPEND vTaskSuspend(nom_stateLED_task_handle);\
lv_obj_set_style_bg_color(ui_pageHome_panelNomTest,lv_color_hex(0xFFFFFF),LV_PART_MAIN);
/* BS测试过程中快速显示测试状态 */
#define BS_HOMEPAGE_SHOW(x) lv_label_set_text(ui_pageHome_labelBSInfo,x);
#define UDP_HOST_IP "192.168.155.238"
/**
* @brief 新建用于进行带BS测试的任务函数
*
* @param[in] arg not used
*
*/
void bs_test_task(void* arg);
/**
* @brief 测试状态显示线程
*
* 设置一个LED小灯测试的时候bling bling 闪
*
* @param[in] arg not used
*
*/
void bs_test_led_task(void* arg);
/**
* @brief 测试状态显示线程
*
* 设置一个LED小灯测试的时候bling bling 闪
*
* @param[in] arg not used
*
*/
void bs_test_led_task(void* arg);
/**
* @brief 向流量计下发测试时间
*
* 时间下发
*
* @param[in] time 向流量计下发测试的时间
*
*/
void flux_test_time_set(float var_time);
/**
* @brief 向流量计下发启动测试指令
*
*/
void flux_test_start(void);
/**
* @brief 向流量计下获取测试结果指令
*
*/
void flux_test_result_get(void);
/**
* @brief 测试状态显示线程
*
* 设置一个LED小灯测试的时候bling bling 闪
*
* @param[in] arg not used
*
*/
void nom_test_led_task(void* arg);
/**
* @brief 新建用于进行带常规测试的任务函数
*
* @param[in] arg not used
*
*/
void nom_test_task(void* arg);
/**
* @brief 新建用于进行套接字通讯的任务函数
*
* @param[in] arg not used
*
*/
void socket_com_task(void* arg);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif