242 lines
9.2 KiB
C
242 lines
9.2 KiB
C
|
/********************************************************************
|
|||
|
Copyright (c) 2021 Xiangyu Medical Co.<EFBFBD><EFBFBD>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 */
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>붨<EFBFBD><EBB6A8> */
|
|||
|
#define RUN_ROLL ( 0x81 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
|
|||
|
#define VERSION_INQUIRY ( 0x82 ) //<2F>汾<EFBFBD><E6B1BE>ѯ
|
|||
|
#define STIM_PARA_CONTROL ( 0x83 ) //ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʡ<EFBFBD>б<EFBFBD><D0B1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define START_STOP_CONTROL ( 0x84 ) //<2F><><EFBFBD><EFBFBD>
|
|||
|
#define PRE_ADJUST ( 0x85 ) //Ԥ<><D4A4><EFBFBD><EFBFBD>
|
|||
|
#define CURRENT_CONTROL ( 0x86 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#define EEG_DATA ( 0x87 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
|||
|
#define TRIG_COLLECT_START_CONTROL ( 0x88 ) //<2F><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʼ
|
|||
|
#define TRIG_STIM_START_CONTROL ( 0x89 ) //<2F><><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>ʼ
|
|||
|
#define STATUS_INQUIRY ( 0x8A ) //<2F><>ѯ
|
|||
|
#define MAC_QUERY ( 0x8B ) //MAC<41><43>ַ<EFBFBD><D6B7>ѯ
|
|||
|
#define STATE_UPLOAD ( 0x92 ) //״̬<D7B4>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD>缫Ƭ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
|
|||
|
#define SCHEME_QUERY ( 0x91 ) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
|
|||
|
/* <20>̼<EFBFBD><CCBC><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD> */
|
|||
|
#define StartStopOffset ( 4 )
|
|||
|
/* <20>̼<EFBFBD><CCBC><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define CH_STOP ( 0x00 )
|
|||
|
#define CH_START ( 0x01 )
|
|||
|
#define CH_PAUSE ( 0x02 )
|
|||
|
#define CH_CONTINUE ( 0x03 )
|
|||
|
/* <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD> */
|
|||
|
#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 )
|
|||
|
/* ״̬<D7B4><CCAC>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ƫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD> */
|
|||
|
#define ElectrodeStatusOffset ( 4 )
|
|||
|
#define StimStatusOffset ( 5 )
|
|||
|
#define StimCurrentOffset ( 6 )
|
|||
|
#define ResetOffset ( 7 )
|
|||
|
#define DataCrcOffset ( 8 )
|
|||
|
#define TailOffset ( 9 )
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ƫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD> */
|
|||
|
#define AdapterStatusOffset ( 5 )
|
|||
|
#define BatteryLevelOffset ( 4 )
|
|||
|
/* <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD> */
|
|||
|
#define PRE_ADJUST_OFFSET ( 4 )
|
|||
|
/* Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD> */
|
|||
|
#define START_PRE_ADJUST ( 0x01 )
|
|||
|
#define STOP_PRE_ADJUST ( 0x00 )
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD> */
|
|||
|
#define TEMP_STORAGE ( 1 ) // <20><>ʱ<EFBFBD>洢
|
|||
|
#define PERMANENT_STORAGE ( 2 ) // <20><><EFBFBD>ô洢
|
|||
|
#define FDS_DATA_LENGTH ( 20 ) // <20>洢<EFBFBD>ռ䳤<D5BC><E4B3A4>
|
|||
|
|
|||
|
//ͷβ֡
|
|||
|
#define FRAME_HEADER (0xAA)
|
|||
|
#define FRAME_TAIL (0x55)
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// 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 ------------------------------------------------*/
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9> */
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint8_t StorageMode; //<2F>洢ģʽ
|
|||
|
uint8_t SchemeIDMSB; //<2F><><EFBFBD><EFBFBD>ID
|
|||
|
uint8_t SchemeIDLSB;
|
|||
|
uint8_t FreqMSB; //Ƶ<><C6B5>
|
|||
|
uint8_t FreqLSB;
|
|||
|
uint8_t WidthMSB; //<2F><><EFBFBD><EFBFBD>
|
|||
|
uint8_t WidthLSB;
|
|||
|
uint8_t RampUpTimeMSB; //<2F><><EFBFBD><EFBFBD>
|
|||
|
uint8_t RampUpTimeLSB;
|
|||
|
uint8_t RampSmoothTimeMSB;//<2F><><EFBFBD><EFBFBD>
|
|||
|
uint8_t RampSmoothTimeLSB;
|
|||
|
uint8_t RampDownTimeMSB; //<2F><><EFBFBD><EFBFBD>
|
|||
|
uint8_t RampDownTimeLSB;
|
|||
|
uint8_t RampBreakTimeMSB; //<2F><>Ϣ
|
|||
|
uint8_t RampBreakTimeLSB;
|
|||
|
}SchemeData_t;
|
|||
|
|
|||
|
#define RMS_USER_DATA_LENGTH 4//110///4 //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
#pragma pack(1)
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint8_t frameHeader; //֡ͷ
|
|||
|
uint8_t frameLength; //֡<><D6A1><EFBFBD><EFBFBD>
|
|||
|
uint8_t functionCode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t myNumber; //<2F><><EFBFBD><EFBFBD>
|
|||
|
uint8_t channel; //ͨ<><CDA8><EFBFBD><EFBFBD>
|
|||
|
uint16_t rmsDataBuffer[RMS_USER_DATA_LENGTH]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t checkSum; //У<><D0A3><EFBFBD><EFBFBD>
|
|||
|
uint8_t frameTail; //֡β
|
|||
|
} rms_data_t;
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint8_t frameHeader; //֡ͷ
|
|||
|
uint8_t frameLength; //֡<><D6A1><EFBFBD><EFBFBD>
|
|||
|
uint8_t functionCode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t channel; //ͨ<><CDA8><EFBFBD><EFBFBD>
|
|||
|
uint8_t ChargeState; //<2F><><EFBFBD><EFBFBD>״̬
|
|||
|
uint8_t BatteryLevelA; //A <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>
|
|||
|
uint8_t BatteryLevelB; //B <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>
|
|||
|
uint8_t BatteryLevelC; //C <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>
|
|||
|
|
|||
|
uint8_t reserve[5]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
|
|||
|
|
|||
|
uint8_t checkSum; //У<><D0A3><EFBFBD><EFBFBD>
|
|||
|
uint8_t frameTail; //֡β
|
|||
|
} reply_run_status_t;
|
|||
|
|
|||
|
#define MAX_VERSION_LEN 15
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint8_t frameHeader; //֡ͷ
|
|||
|
uint8_t frameLength; //֡<><D6A1><EFBFBD><EFBFBD>
|
|||
|
uint8_t functionCode; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t channel; //ͨ<><CDA8><EFBFBD><EFBFBD>
|
|||
|
uint8_t VersionDes[MAX_VERSION_LEN]; //<2F>汾<EFBFBD><E6B1BE><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
uint8_t checkSum; //У<><D0A3><EFBFBD><EFBFBD>
|
|||
|
uint8_t frameTail; //֡β
|
|||
|
} check_version_t;
|
|||
|
|
|||
|
|
|||
|
#pragma pack()
|
|||
|
|
|||
|
|
|||
|
//<2F>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
DisconnectState = 0,
|
|||
|
ConnectState
|
|||
|
}ConnectStateInfo_e;
|
|||
|
// <20>缫Ƭ״̬
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
ElectrodeFalloff,
|
|||
|
ElectrodeConnectted
|
|||
|
}ElectrodeStatusInfo_e;
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
typedef enum
|
|||
|
{
|
|||
|
AdapterNotConnected = 0,
|
|||
|
AdapterConnected
|
|||
|
}AdapterStateInfo_e;
|
|||
|
//FDS<44>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
bool scheme_update; //scheme_record<72><64>¼<EFBFBD><C2BC><EFBFBD>±<EFBFBD>־
|
|||
|
bool read; //<2F><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>־
|
|||
|
bool gc; //<2F><>Ƭ<EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>־
|
|||
|
bool busy; //FDSæ<53><C3A6>־
|
|||
|
}my_fds_info_t;
|
|||
|
|
|||
|
//<2F><>¼scheme<6D><65>id<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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 ***************************/
|
|||
|
|
|||
|
|