/* * @Description: * @Version: 1.0 * @Autor: lzc * @Date: 2022-08-19 12:48:36 * @LastEditors: lzc * @LastEditTime: 2025-01-07 14:23:40 */ #ifndef __MAIN_H #define __MAIN_H #include "stdio.h" #include #include "string.h" #include "math.h" #include "sys.h" #include "delay.h" #include "usart.h" #include "key.h" #include "wificom.h" #include "timer.h" #include "opm.h" #include "adc.h" #include "gpio.h" #include "com.h" #include "usart_send.h" #include "spi.h" #include "general.h" #include "en25qx64.h" #include "stmflash.h" #include "system_stm32f4xx.h" // 1 表示是 养老 ; 0 表示 是BCS #define THE_VERSION 1 // 1 表示是 提速 ; 0 表示 正常 #define SPEED_UP_MODE_EN 1 // 1 表示是 开启睡眠报告 ; 0 表示 关闭睡眠报告 #define SLEEP_REPORT_EN 0 // 1 表示是 850nm ; 0 表示 1310nm #define LINE_COEFF_EN 0 // 1 表示DSP库中的FFT算法 0 表示自己写的FFT算法 #define FFT_VERSION 1 // 1 表示开启上报工厂测试 0 表示没有工厂测试 #define FACTORY_ENABLE 0 #define SYSTEM_CLOCK_FRQ 168 // 系统频率 (MHZ) #define model_num 500 #define model_num_send 1024 #define model_time 2 #define TEST_SEND_BH_STAGE 0 #define TEST_SEND_SINGAL 0 #define NOT_PRE_STAGE 1 #define DEFAULT_FF 0xff #define SLEEP_DEBUG_MODE 0 // 用于调试(弃用) #define REPORT_SAVE_SIZE 4 // 定义最大睡眠报告的存储(4天的数据)(弃用) #define REPORT_SEND_COUNTS 300 // 300*12 =3600 sec = 1 hour(弃用) #define BODY_CHECK_ENABLE 1 // 使能人体检测 #define BODY_CHECK_DISABLE 0 // 失能人体检测 #define OPM_SEND_MODE 0 // 是否发送光功 #define REPORT_BUFFER_MAX 720 // 睡眠报告的最大暂存数组大小 单位:1分钟 一天:1440 半天 720 #define TIME_CLOCK_MAX_TIMES 7200 // 1小时校准一次:0.5s/次 7200 表示1小时 #define ID_ADDR 0x1FFF7A10 /*STM32F4唯一ID起始地址*/ #define ONE_MINUTES_COUNT 120 // ONE_MINUTES_COUNT / 2 #define TYPE_HEART 1 #define TYPE_BREATH 0 #define FILTER_HI_TYPE 1 #define FILTER_LO_TYPE 2 #define ARRAY_NUMBER 2 enum Calculate_STATE { // 此时正常计算心率呼吸率 FFT_Start_Calculate = 0, // 此时停止计算 FFT_Stop_Calculate = 1, }; enum CWT_STATE { // 此时正常计算心率呼吸率 FFT_Still_state = 0, // 此时应跳过呼吸计算,直接把呼吸率置零;心率正常计算 FFT_No_breath = 2, // 此时跳过心率呼吸率计算,直接取前一次计算结果 FFT_Mild_body_motion, FFT_Medium_body_motion, FFT_Large_body_motion, }; #if SLEEP_DEBUG_MODE #define DEBUG_SIZE #endif #ifdef DEBUG_SIZE #undef REPORT_SEND_COUNTS #define REPORT_SEND_COUNTS 5 // 5 * 12 =60 sec = 1 Min #endif extern int health_flg; extern int opticalFibre_flg; extern int sensorLoad_flg; extern int lightSignal_flg; extern char uart_flg; extern int uart_time; extern int led_time; extern char start_calculate_flg; extern char start_stage_flg; extern uint8_t USART_DealFlag; extern int BH_time; extern int stage_time; extern char stage_len; extern unsigned short int ppg_data2[]; extern unsigned short int ppg_stage_buf[]; extern unsigned short int BH_data_500[]; extern char ppg_stage_index; extern signed long int max_min2[]; extern float fft_HeartBeatRate_StashBuffer[15]; extern float ppg_data_500_buf[]; extern uint32_t FlashPtr; extern char Breathe_H; extern char Breathe_L; extern char HeartRate_H; extern char HeartRate_L; extern char OffBed_Time; extern char OffBed_Flag; extern char queue_flg; extern int currentSize_num; // 进行睡眠计算时间 extern uint16_t Roll_Over_Count; enum BootReason { Low_Power_Reset = 1, WWDG_Reset, IWDG_Reset, SoftWare_Reset, PowerOn_Reset, Pin_Reset, }; enum SleepStatus { Wake_Up, Light_Sleep, Rapid_Eye_Movement, Deep_Sleep, }; enum SleepStatusValue { Wake_Up_Value = 1, Light_Sleep_Value, Rapid_Eye_Movement_Value, Deep_Sleep_Value, Leave_Value = 0, }; typedef struct WarningMsg_T { // 超过阈值时的滴答计数器 uint64_t Breath_OverThreshold_CountTick; uint64_t Heart_OverThreshold_CountTick; uint64_t Move_OverThreshold_CountTick; // 超过阈值时的时间戳 uint64_t Breath_OverThreshold_TimeStamp; uint64_t Heart_OverThreshold_TimeStamp; uint64_t Move_OverThreshold_TimeStamp; // 持续时间的记录(ms) uint64_t Breath_KeepTime_Record; uint64_t Heart_KeepTime_Record; uint64_t Move_KeepTime_Record; // 滴答定时器的时间记录 uint64_t SysTick_Count; } WarningMsg_t; float three_avg(unsigned short int data, unsigned short int max, unsigned short int min); void PowerOn_OneMinuteBLEScan(void); void get_data_max_min(void); void wifi_buf_synthesis(void); void wifi_json_send(void); void IWDG_Feed(void); #endif /* __MAIN_H */