HL-PDJ-1/app/Inc/drv_uart.h
xiaozhengsheng 6df0f7d96e 初始版本
2025-08-19 09:49:41 +08:00

242 lines
9.2 KiB
C
Raw Permalink 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.

/********************************************************************
Copyright (c) 2021 Xiangyu Medical Co.Ltd. All rights reserved.
FileName : drv_uart.h
Author : zhangdawei
Version : V1.0
Date :
Note :
History :
********************************************************************/
/* Includes ------------------------------------------------------*/
#ifndef DRV_UART_H__
#define DRV_UART_H__
#include "sdk_config.h"
#include "ble_nus.h"
#include "ble_link_ctx_manager.h"
/* Public define -------------------------------------------------*/
#define ONE_SECOND ( 1000000 ) /* 1s = 1000000us */
/* 功能码定义 */
#define RUN_ROLL ( 0x81 ) //运行轮询
#define VERSION_INQUIRY ( 0x82 ) //版本查询
#define STIM_PARA_CONTROL ( 0x83 ) //模式、脉宽、频率、斜坡时间设置
#define START_STOP_CONTROL ( 0x84 ) //控制
#define PRE_ADJUST ( 0x85 ) //预调节
#define CURRENT_CONTROL ( 0x86 ) //电流设置
#define EEG_DATA ( 0x87 ) //肌电数据上报
#define TRIG_COLLECT_START_CONTROL ( 0x88 ) //触发采集开始
#define TRIG_STIM_START_CONTROL ( 0x89 ) //触发刺激开始
#define STATUS_INQUIRY ( 0x8A ) //轮询
#define MAC_QUERY ( 0x8B ) //MAC地址查询
#define STATE_UPLOAD ( 0x92 ) //状态上传(电极片状态和适配器状态)
#define SCHEME_QUERY ( 0x91 ) //方案查询
/* 刺激启停控制数据偏移定义 */
#define StartStopOffset ( 4 )
/* 刺激启停控制数据描述 */
#define CH_STOP ( 0x00 )
#define CH_START ( 0x01 )
#define CH_PAUSE ( 0x02 )
#define CH_CONTINUE ( 0x03 )
/* 刺激参数数据偏移定义 */
#define HeadOffset ( 0 )
#define DataLengthOffset ( 1 )
#define FunctionCodeOffset ( 2 )
#define ChannelNumOffset ( 3 )
#define SchemeCategoryOffset ( 4 )
#define SchemeIDMSBOffset ( 5 )
#define SchemeIDLSBOffset ( 6 )
#define FreqMSBOffset ( 7 )
#define FreqLSBOffset ( 8 )
#define WidthMSBOffset ( 9 )
#define WidthLSBOffset ( 10 )
#define RampUpTimeLSBOffset ( 12 )
#define RampUpTimeMSBOffset ( 11 )
#define RampSmoothTimeLSBOffset ( 14 )
#define RampSmoothTimeMSBOffset ( 13 )
#define RampDownTimeLSBOffset ( 16 )
#define RampDownTimeMSBOffset ( 15 )
#define RampBreakTimeLSBOffset ( 18 )
#define RampBreakTimeMSBOffset ( 17 )
/* 状态轮询数据偏移定义 */
#define ElectrodeStatusOffset ( 4 )
#define StimStatusOffset ( 5 )
#define StimCurrentOffset ( 6 )
#define ResetOffset ( 7 )
#define DataCrcOffset ( 8 )
#define TailOffset ( 9 )
/* 运行轮询数据偏移定义 */
#define AdapterStatusOffset ( 5 )
#define BatteryLevelOffset ( 4 )
/* 刺激电流数据偏移定义 */
#define PRE_ADJUST_OFFSET ( 4 )
/* 预调节数据定义 */
#define START_PRE_ADJUST ( 0x01 )
#define STOP_PRE_ADJUST ( 0x00 )
/* 方案存储属性定义 */
#define TEMP_STORAGE ( 1 ) // 临时存储
#define PERMANENT_STORAGE ( 2 ) // 永久存储
#define FDS_DATA_LENGTH ( 20 ) // 存储空间长度
//头尾帧
#define FRAME_HEADER (0xAA)
#define FRAME_TAIL (0x55)
//功能码
// Function Codes (Converted to UPPER_SNAKE_CASE)
#define D_PARAMETER_SET (0x71) // Original: D_ParameterSet
#define D_CHANNEL_CTRL (0x72) // Original: D_ChannelCtrl
#define D_CURRENT_SET (0x73) // Original: D_CurrentSet
#define D_EMG_DATA_REPORT (0x74) // Original: D_EmgDataReport
#define D_DATA_MODE_SWITCH (0x75) // Original: D_DataModeSwitch
#define D_PREINSTALL_CTRL (0x76) // Original: D_PreinstallCtrl
#define D_TRIGGER_MODE_CTRL (0x77) // Original: D_TriggerModeCtrl
#define D_POLL_CMD (0x78) // Original: D_PollCmd
#define D_SLICE_FALL_DETECT_SWITCH (0x79) // Original: D_SliceFallDetectSwitch
#define D_TURN_OFF_CMD (0x7A) // Original: D_TurnOffCmd
#define D_BLE_SCAN_SWITCH (0x7B) // Original: D_BleScanSwitch
#define D_MAC_ADDR_REPORT (0x7C) // Original: D_MacAddrReport
#define D_BLE_CONNECT_CMD (0x7D) // Original: D_BleConnectCmd
/* Public typedef ------------------------------------------------*/
/* 方案信息结构体 */
typedef struct
{
uint8_t StorageMode; //存储模式
uint8_t SchemeIDMSB; //方案ID
uint8_t SchemeIDLSB;
uint8_t FreqMSB; //频率
uint8_t FreqLSB;
uint8_t WidthMSB; //脉宽
uint8_t WidthLSB;
uint8_t RampUpTimeMSB; //波升
uint8_t RampUpTimeLSB;
uint8_t RampSmoothTimeMSB;//保持
uint8_t RampSmoothTimeLSB;
uint8_t RampDownTimeMSB; //波降
uint8_t RampDownTimeLSB;
uint8_t RampBreakTimeMSB; //休息
uint8_t RampBreakTimeLSB;
}SchemeData_t;
#define RMS_USER_DATA_LENGTH 4//110///4 //用户数据长度
#pragma pack(1)
typedef struct
{
uint8_t frameHeader; //帧头
uint8_t frameLength; //帧长度
uint8_t functionCode; //功能码
uint8_t myNumber; //编号
uint8_t channel; //通道号
uint16_t rmsDataBuffer[RMS_USER_DATA_LENGTH]; //数据内容
uint8_t checkSum; //校验和
uint8_t frameTail; //帧尾
} rms_data_t;
typedef struct
{
uint8_t frameHeader; //帧头
uint8_t frameLength; //帧长度
uint8_t functionCode; //功能码
uint8_t channel; //通道号
uint8_t ChargeState; //充电状态
uint8_t BatteryLevelA; //A 电池电量
uint8_t BatteryLevelB; //B 电池电量
uint8_t BatteryLevelC; //C 电池电量
uint8_t reserve[5]; //保留字段
uint8_t checkSum; //校验和
uint8_t frameTail; //帧尾
} reply_run_status_t;
#define MAX_VERSION_LEN 15
typedef struct
{
uint8_t frameHeader; //帧头
uint8_t frameLength; //帧长度
uint8_t functionCode; //功能码
uint8_t channel; //通道号
uint8_t VersionDes[MAX_VERSION_LEN]; //版本描述
uint8_t checkSum; //校验和
uint8_t frameTail; //帧尾
} check_version_t;
#pragma pack()
//设备连接状态
typedef enum
{
DisconnectState = 0,
ConnectState
}ConnectStateInfo_e;
// 电极片状态
typedef enum
{
ElectrodeFalloff,
ElectrodeConnectted
}ElectrodeStatusInfo_e;
// 适配器连接状态
typedef enum
{
AdapterNotConnected = 0,
AdapterConnected
}AdapterStateInfo_e;
//FDS异步操作标志结构体
typedef struct
{
bool scheme_update; //scheme_record记录更新标志
bool read; //读记录标志
bool gc; //碎片收集标志
bool busy; //FDS忙标志
}my_fds_info_t;
//记录scheme的id和内容
typedef struct
{
uint8_t text[FDS_DATA_LENGTH];
}__attribute__((aligned(4)))SchemePara_t;
/* Public constants ----------------------------------------------*/
/* Public variables ----------------------------------------------*/
extern uint16_t m_conn_handle;
extern uint16_t m_ble_nus_max_data_len;
extern uint8_t CurrentFlag;
extern ConnectStateInfo_e DeviceConnectState;
extern ElectrodeStatusInfo_e ElectrodeStatusInfo;
extern my_fds_info_t my_fds_info;
extern SchemePara_t SchemePara;
extern SchemeData_t SchemeData;
extern uint8_t BLE_MAC[BLE_GAP_ADDR_LEN];
extern AdapterStateInfo_e AdapterState;
extern AdapterStateInfo_e LastAdapterState;
extern SchemeData_t PreStorageSchemeData;
extern ElectrodeStatusInfo_e LastElectrodeStatusInfo;
extern uint16_t ccrvaluebuf[70];
extern uint8_t eegflag;
/* Public function prototypes ------------------------------------*/
void service_nus_init(void);
void StartManage(void);
void PauseManage(void);
void RecoverManage(void);
void StopManage(void);
void CloseOutput(void);
void SetStandardCurrent(uint8_t* AnalysisDataBfferIn_t);
void RunRoll(void);
void CheckVersion(void);
void UpdateCurrent(uint8_t CurrentSend);
void JudgeLedMode(void);
void DisconnectControl(void);
void SchemeQuery(uint8_t idMSB,uint8_t idLSB);
void UpdateControlStatus(uint8_t ControlStatus);
void StateUpLoad(AdapterStateInfo_e AdapterStateTemp , ElectrodeStatusInfo_e ElectrodeStatusTemp);
void EegDataSend(void);
void user_ble_or_uart_send(char * txBufferP, uint16_t Length);
void ble_send_rms_data(uint16_t rms_data);
#endif
/*************************** END OF FILE ***************************/