818 lines
27 KiB
C
818 lines
27 KiB
C
|
/********************************************************************
|
|||
|
Copyright (c) 2021 Xiangyu Medical Co.<EFBFBD><EFBFBD>Ltd. All rights reserved.
|
|||
|
FileName : drv_uart.c
|
|||
|
Author : zhangdawei
|
|||
|
Version : V1.0
|
|||
|
Date :
|
|||
|
Note :
|
|||
|
History :
|
|||
|
********************************************************************/
|
|||
|
/* Includes ------------------------------------------------------*/
|
|||
|
#include "drv_uart.h"
|
|||
|
#include "pca10040.h"
|
|||
|
#include "ble_nus.h"
|
|||
|
#include "time.h"
|
|||
|
#include "IoControl.h"
|
|||
|
#include "nrf_drv_timer.h"
|
|||
|
#include "fds.h"
|
|||
|
/* Private define ------------------------------------------------*/
|
|||
|
BLE_NUS_DEF(m_nus); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊm_nus<75>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|||
|
/* Private typedef -----------------------------------------------*/
|
|||
|
/* Private constants ---------------------------------------------*/
|
|||
|
/* <20><><EFBFBD>յ<EFBFBD><D5B5>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ */
|
|||
|
SchemeData_t SchemeData;
|
|||
|
SchemeData_t PreStorageSchemeData;// <20>豸Ԥ<E8B1B8><D4A4><EFBFBD><EFBFBD>Ϣ
|
|||
|
uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - 3; /**< Maximum length of data (in bytes) that can be transmitted to the peer by the Nordic UART service module. */
|
|||
|
/* Private variables ---------------------------------------------*/
|
|||
|
//<2F>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼֵ<CABC><D6B5><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID;
|
|||
|
/* <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ԭʼֵ */
|
|||
|
nrf_saadc_value_t Battery_Saadc_Value = 10000;
|
|||
|
/* <20><><EFBFBD>ص<EFBFBD>ѹ<EFBFBD>ٷֱ<D9B7> */
|
|||
|
uint8_t Battery_Percentage = 100;
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־ */
|
|||
|
uint8_t TimerEegAdcInit_Flag = 0;
|
|||
|
/* <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>־ */
|
|||
|
uint8_t CurrentFlag = 0;
|
|||
|
/* <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */
|
|||
|
ConnectStateInfo_e DeviceConnectState = DisconnectState;
|
|||
|
ElectrodeStatusInfo_e ElectrodeStatusInfo = ElectrodeConnectted;
|
|||
|
ElectrodeStatusInfo_e LastElectrodeStatusInfo = ElectrodeConnectted;
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */
|
|||
|
AdapterStateInfo_e AdapterState = AdapterNotConnected;
|
|||
|
AdapterStateInfo_e LastAdapterState = AdapterNotConnected;
|
|||
|
|
|||
|
/* MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> */
|
|||
|
uint8_t BLE_MAC[BLE_GAP_ADDR_LEN];
|
|||
|
//<2F><><EFBFBD><EFBFBD>FDS<44>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|||
|
my_fds_info_t my_fds_info;
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
SchemePara_t SchemePara = {
|
|||
|
.text = 0
|
|||
|
};
|
|||
|
uint16_t ccrvaluebuf[70] = {
|
|||
|
23,25,27,29,31,33,35,37,39,41, //1-10
|
|||
|
43,45,47,50,52,54,56,58,60,63, //11-20
|
|||
|
65,67,69,71,74,76,78,80,82,85, //21-30
|
|||
|
87,89,91,93,95,97,99,101,103,105, //31-40
|
|||
|
108,111,114,117,120,123,126,129,132,134, //41-50
|
|||
|
136,138,140,142,144,146,148,150,152,154, //51-60
|
|||
|
155,156,158,160,162,164,167,170,172,174 //61-70
|
|||
|
};
|
|||
|
#define EEG_DATA_LENGTH ( 50 )
|
|||
|
uint8_t aEEGData[EEG_DATA_LENGTH] = {
|
|||
|
23,25,27,29,31,33,35,37,39,41,
|
|||
|
43,45,47,50,52,54,56,58,60,63,
|
|||
|
65,67,69,71,74,76,78,80,82,85,
|
|||
|
87,89,91,93,95,97,99,101,103,105,
|
|||
|
108,111,114,117,120,123,126,129,132,134
|
|||
|
};
|
|||
|
uint8_t eegmode = 0;
|
|||
|
uint8_t eegflag = 0;
|
|||
|
|
|||
|
StimStateInfo_t ChannelStimStateInfo_t;
|
|||
|
|
|||
|
rms_data_t rmsData = {.frameHeader = FRAME_HEADER,
|
|||
|
.frameLength = sizeof(rmsData) - 4, //<2F><>ȥ֡ͷ<D6A1><CDB7>֡<EFBFBD><D6A1><EFBFBD>ȡ<EFBFBD>У<EFBFBD><D0A3><EFBFBD>͡<EFBFBD>֡β
|
|||
|
.functionCode = D_EMG_DATA_REPORT,
|
|||
|
.myNumber = 0x01,
|
|||
|
.channel = 0x01,
|
|||
|
//.rmsDataBuffer = {0},
|
|||
|
.checkSum = 0,
|
|||
|
.frameTail = FRAME_TAIL
|
|||
|
};
|
|||
|
|
|||
|
/* Private function prototypes -----------------------------------*/
|
|||
|
void StatusInquiry(ElectrodeStatusInfo_e Electrodestatus);
|
|||
|
void StartStopCtrl(uint8_t StartStopValue);
|
|||
|
void MACQuery(void);
|
|||
|
/* Public constants ----------------------------------------------*/
|
|||
|
/* Public variables ----------------------------------------------*/
|
|||
|
/********************************************************************
|
|||
|
* name : void SetFreqWidth(uint8_t* AnalysisDataBffer_t)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
|
|||
|
* Input : AnalysisDataBffer_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void SetFreqWidth(uint8_t* AnalysisDataBffer_t)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void SetRampTime(uint8_t* AnalysisDataBfferIn_t)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
* Input : AnalysisDataBffer_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void SetRampTime(uint8_t* AnalysisDataBffer_t)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void SetStimPara(uint8_t* AnalysisDataBfferIn_t)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ô̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : AnalysisDataBffer_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void SetStimPara(uint8_t* AnalysisDataBffer_t)
|
|||
|
{
|
|||
|
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>ģʽ
|
|||
|
if(1 == AnalysisDataBffer_t[4])
|
|||
|
{
|
|||
|
eegmode = 1;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : static void nus_data_handler(ble_nus_evt_t * p_evt)
|
|||
|
* description : BLE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : ble_nus_evt_t * p_evt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
static void nus_data_handler(ble_nus_evt_t * p_evt)
|
|||
|
{
|
|||
|
uint8_t FrameLength = 0;//֡<><D6A1><EFBFBD><EFBFBD>
|
|||
|
uint8_t FunctionCode = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t CheckSum = 0;//У<><D0A3><EFBFBD><EFBFBD>
|
|||
|
uint8_t Sum = 0;//<2F><><EFBFBD>ݺ<EFBFBD>
|
|||
|
uint8_t SumCCR = 0;//CCRֵ
|
|||
|
#define RX_BLE_DATA_LEN 100
|
|||
|
uint8_t RecieveData[RX_BLE_DATA_LEN] = {0}; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(p_evt->type == BLE_NUS_EVT_RX_DATA)
|
|||
|
{
|
|||
|
uint16_t Length = 0;
|
|||
|
|
|||
|
Length = p_evt->params.rx_data.length;
|
|||
|
if(Length > RX_BLE_DATA_LEN)
|
|||
|
{
|
|||
|
NRF_LOG_ERROR("RecieveData length error");
|
|||
|
return;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
memcpy(RecieveData, p_evt->params.rx_data.p_data, Length);
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
if(0xAA == RecieveData[0])
|
|||
|
{
|
|||
|
FrameLength = RecieveData[1]; //֡<><D6A1><EFBFBD><EFBFBD>
|
|||
|
if(FrameLength > (RX_BLE_DATA_LEN - 4))
|
|||
|
{
|
|||
|
NRF_LOG_ERROR("RecieveData length error %d", FrameLength);
|
|||
|
return;
|
|||
|
}
|
|||
|
else if(0x55 != RecieveData[FrameLength + 3]) //<2F><><EFBFBD><EFBFBD>֡β
|
|||
|
{
|
|||
|
NRF_LOG_ERROR("RecieveData end flag error");
|
|||
|
return;
|
|||
|
}
|
|||
|
CheckSum = RecieveData[FrameLength + 2]; //У<><D0A3><EFBFBD><EFBFBD>
|
|||
|
//if(0x55 == RecieveData[FrameLength + 3]) //<2F><><EFBFBD><EFBFBD>֡β
|
|||
|
{
|
|||
|
/*У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>*/
|
|||
|
for(uint8_t i = 0; i < FrameLength; i++)
|
|||
|
{
|
|||
|
Sum += RecieveData[i+2];
|
|||
|
}
|
|||
|
SumCCR = Sum & 0xff;
|
|||
|
|
|||
|
if(CheckSum == SumCCR)
|
|||
|
{
|
|||
|
FunctionCode = RecieveData[2];
|
|||
|
|
|||
|
/*ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ʡ<EFBFBD>б<EFBFBD><D0B1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
if(STIM_PARA_CONTROL == FunctionCode)
|
|||
|
{
|
|||
|
SetStimPara(RecieveData); //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
|||
|
ble_nus_data_send(&m_nus, RecieveData, &Length, m_conn_handle);//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD>ȥ
|
|||
|
}
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ƴ̼<C6B4>ǿ<EFBFBD>ȣ<EFBFBD>*/
|
|||
|
else if(CURRENT_CONTROL == FunctionCode)
|
|||
|
{
|
|||
|
NRF_LOG_INFO("CURRENT_CONTROL");
|
|||
|
|
|||
|
// SetStandardCurrent(RecieveData); //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>
|
|||
|
// CurrentFlag = 1; //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE><EFBFBD>˱<EFBFBD>־Ϊ1ʱ<31><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
ble_nus_data_send(&m_nus, RecieveData, &Length, m_conn_handle);//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD>ȥ
|
|||
|
}
|
|||
|
/*<2A>̼<EFBFBD><CCBC><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>*/
|
|||
|
else if(START_STOP_CONTROL == FunctionCode)
|
|||
|
{
|
|||
|
NRF_LOG_INFO("START_STOP_CONTROL");
|
|||
|
// CurrentFlag = 0; //<2F>˱<EFBFBD>־<EFBFBD><D6BE>0<EFBFBD><30><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>־<EFBFBD><D6BE>ͨ<EFBFBD><CDA8>ģʽ<C4A3><CABD>ͨ<EFBFBD><CDA8>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
|||
|
uint8_t StartStopValue = CH_STOP; //<2F><>ʼ״̬Ϊֹͣ
|
|||
|
StartStopValue = RecieveData[StartStopOffset]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ״̬
|
|||
|
StartStopCtrl(StartStopValue); //<2F><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
|
|||
|
ble_nus_data_send(&m_nus, RecieveData, &Length, m_conn_handle);//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD>ȥ
|
|||
|
}
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʼ*/
|
|||
|
else if(TRIG_COLLECT_START_CONTROL == FunctionCode)
|
|||
|
{
|
|||
|
NRF_LOG_INFO("TRIG_COLLECT_START_CONTROL");
|
|||
|
ble_nus_data_send(&m_nus, RecieveData, &Length, m_conn_handle);//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD>ȥ
|
|||
|
}
|
|||
|
/*<2A><><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>ʼ*/
|
|||
|
else if(TRIG_STIM_START_CONTROL == FunctionCode)
|
|||
|
{
|
|||
|
NRF_LOG_INFO("TRIG_STIM_START_CONTROL");
|
|||
|
ble_nus_data_send(&m_nus, RecieveData, &Length, m_conn_handle);//<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD>ȥ
|
|||
|
}
|
|||
|
/*<2A><>ѯ0x8A*/
|
|||
|
else if(STATUS_INQUIRY == FunctionCode)
|
|||
|
{
|
|||
|
StatusInquiry(ElectrodeStatusInfo);
|
|||
|
NRF_LOG_INFO("STATUS_INQUIRY");
|
|||
|
}
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ */
|
|||
|
else if(RUN_ROLL == FunctionCode)
|
|||
|
{
|
|||
|
RunRoll();
|
|||
|
NRF_LOG_INFO("RUN_ROLL");
|
|||
|
}
|
|||
|
/* <20>汾<EFBFBD><E6B1BE>ѯ */
|
|||
|
else if(VERSION_INQUIRY == FunctionCode)
|
|||
|
{
|
|||
|
CheckVersion();
|
|||
|
NRF_LOG_INFO("VERSION_INQUIRY");
|
|||
|
}
|
|||
|
else if(SCHEME_QUERY == FunctionCode)
|
|||
|
{
|
|||
|
//SchemeQuery();
|
|||
|
my_fds_info.read = true;
|
|||
|
NRF_LOG_INFO("SCHEME_QUERY");
|
|||
|
}
|
|||
|
else if(MAC_QUERY == FunctionCode)
|
|||
|
{
|
|||
|
MACQuery();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
/***********end***********/
|
|||
|
}
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void service_nus_init(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void service_nus_init(void)
|
|||
|
{
|
|||
|
ret_code_t err_code;
|
|||
|
ble_nus_init_t nus_init; //<2F><><EFBFBD>崮<EFBFBD><E5B4AE><EFBFBD><CDB8><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|||
|
/*------------------<2D><><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-------------*/
|
|||
|
memset(&nus_init, 0, sizeof(nus_init)); //<2F><><EFBFBD>㴮<EFBFBD><E3B4AE><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
|||
|
nus_init.data_handler = nus_data_handler; //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><CDB8><EFBFBD>¼<EFBFBD><C2BC>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
err_code = ble_nus_init(&m_nus, &nus_init); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
APP_ERROR_CHECK(err_code);
|
|||
|
/*------------------<2D><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-END-----------------*/
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void StartStopCtrl(uint8_t ucStartStopValueIn)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : ucStartStopValueIn<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
ucChannelIn<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void StartStopCtrl(uint8_t StartStopValue)
|
|||
|
{
|
|||
|
switch(StartStopValue)
|
|||
|
{
|
|||
|
case CH_START: StartManage();
|
|||
|
break;
|
|||
|
case CH_PAUSE: PauseManage();
|
|||
|
break;
|
|||
|
case CH_CONTINUE: RecoverManage();
|
|||
|
break;
|
|||
|
case CH_STOP: StopManage();
|
|||
|
break;
|
|||
|
default: break;
|
|||
|
}
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void StartManage(void)
|
|||
|
* description : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void StartManage(void)
|
|||
|
{
|
|||
|
if(eegmode == 1)
|
|||
|
{
|
|||
|
eegflag = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void PauseManage(void)
|
|||
|
* description : <EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : Channel<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void PauseManage(void)
|
|||
|
{
|
|||
|
if(eegmode == 1)
|
|||
|
{
|
|||
|
eegflag = 0;
|
|||
|
}
|
|||
|
// CHAChannelState_e = IdleState; //<2F><><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>pwm_flag<61><67>0
|
|||
|
// ChannelStimStateInfo_t.ChannelWorkState = Pause;
|
|||
|
// PwmDACStop();
|
|||
|
// CloseOutput(); //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// NRF_LOG_INFO("Pause_Stim");
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void CloseOutput(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>б<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0,<EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void CloseOutput(void)
|
|||
|
{
|
|||
|
if(eegmode == 1)
|
|||
|
{
|
|||
|
eegmode = 0;
|
|||
|
eegflag = 0;
|
|||
|
}
|
|||
|
//ChannelStimStateInfo_t.ucCurrent = 0;
|
|||
|
// ChannelStimStateInfo_t.Ramp_e = RampIdle;//б<><D0B1>״̬Ϊ<CCAC><CEAA><EFBFBD><EFBFBD>̬
|
|||
|
// RampTime = 0; //б<><D0B1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>0
|
|||
|
// SetCurrent(0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
|
|||
|
// PwmSubtractStop(); //<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD>PWM
|
|||
|
// PwmDACStop(); //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>PWM
|
|||
|
//// GpioteInit();
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void RecoverManage(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void RecoverManage(void)
|
|||
|
{
|
|||
|
if(eegmode == 1)
|
|||
|
{
|
|||
|
eegflag = 1;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void StopManage(void)
|
|||
|
* description : ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void StopManage(void)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void SetStandardCurrent(uint8_t* AnalysisDataBfferIn_t)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* Input : AnalysisDataBfferIn_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void SetStandardCurrent(uint8_t* AnalysisDataBffer_t)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void StatusInquiry(void)
|
|||
|
* description : ״̬<EFBFBD><EFBFBD>ѯ
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void StatusInquiry(ElectrodeStatusInfo_e Electrodestatus)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
static uint8_t aTxBuffer[10] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 10;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x06;
|
|||
|
aTxBuffer[FunctionCodeOffset] = STATUS_INQUIRY;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[ElectrodeStatusOffset] = 0x01;
|
|||
|
aTxBuffer[StimStatusOffset] = ChannelStimStateInfo_t.Ramp_e;
|
|||
|
aTxBuffer[StimCurrentOffset] = ChannelStimStateInfo_t.ucCurrent;
|
|||
|
aTxBuffer[ResetOffset] = 0x00;
|
|||
|
aTxBuffer[TailOffset] = 0x55;
|
|||
|
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 6; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[DataCrcOffset] = (uint8_t)ulCrc;
|
|||
|
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : uint8_t caculate_sum_check(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : typeStructHeader<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹͷ<EFBFBD><EFBFBD>
|
|||
|
typeStructLength<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
********************************************************************/
|
|||
|
|
|||
|
uint8_t caculate_sum_check(uint8_t *typeStructHeader, uint8_t typeStructLength)
|
|||
|
{
|
|||
|
uint8_t sum = 0;
|
|||
|
uint8_t * typeStructCMD = &typeStructHeader[2];
|
|||
|
for (uint8_t i = 0; i < typeStructLength; i++)
|
|||
|
{
|
|||
|
sum += typeStructCMD[i];
|
|||
|
}
|
|||
|
return sum&0xFF;
|
|||
|
}
|
|||
|
|
|||
|
/// @brief <20><><EFBFBD><EFBFBD>״̬<D7B4>ظ<EFBFBD>
|
|||
|
reply_run_status_t replyRunStatus = {
|
|||
|
.frameHeader = FRAME_HEADER,
|
|||
|
.frameLength = sizeof(replyRunStatus) - 4, //<2F><>ȥ֡ͷ<D6A1><CDB7>֡<EFBFBD><D6A1><EFBFBD>ȡ<EFBFBD>У<EFBFBD><D0A3><EFBFBD>͡<EFBFBD>֡β
|
|||
|
.functionCode = RUN_ROLL,
|
|||
|
.myNumber = 0x01,
|
|||
|
.channel = 0x01,
|
|||
|
.checkSum = 0,
|
|||
|
.frameTail = FRAME_TAIL
|
|||
|
};
|
|||
|
/********************************************************************
|
|||
|
* name : void RunRoll(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void RunRoll(void)
|
|||
|
{
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = sizeof(replyRunStatus);
|
|||
|
|
|||
|
replyRunStatus.ChargeState = ChargeState;
|
|||
|
replyRunStatus.BatteryLevelA = Battery_Percentage;
|
|||
|
|
|||
|
replyRunStatus.checkSum = (uint8_t)caculate_sum_check((uint8_t *)&replyRunStatus, replyRunStatus.frameLength);
|
|||
|
|
|||
|
ble_nus_data_send(&m_nus, &replyRunStatus.frameHeader, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void CheckVersion(void)
|
|||
|
* description : <EFBFBD>汾<EFBFBD><EFBFBD>ѯ
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
check_version_t checkVersion = {
|
|||
|
.frameHeader = FRAME_HEADER,
|
|||
|
.frameLength = sizeof(checkVersion) - 4, //<2F><>ȥ֡ͷ<D6A1><CDB7>֡<EFBFBD><D6A1><EFBFBD>ȡ<EFBFBD>У<EFBFBD><D0A3><EFBFBD>͡<EFBFBD>֡β
|
|||
|
.functionCode = VERSION_INQUIRY,
|
|||
|
.myNumber = 0x01,
|
|||
|
.channel = 0x01,
|
|||
|
.checkSum = 0,
|
|||
|
.frameTail = FRAME_TAIL
|
|||
|
}
|
|||
|
void CheckVersion(void)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
static uint8_t aTxBuffer[21] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 21;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x11;
|
|||
|
aTxBuffer[FunctionCodeOffset] = VERSION_INQUIRY;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[20] = 0x55;
|
|||
|
|
|||
|
/* Э<><D0AD><EFBFBD>й涨<D0B9>ȷ<EFBFBD><C8B7><EFBFBD><CDB8>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD> */
|
|||
|
aTxBuffer[4] = VersionDes[0];
|
|||
|
aTxBuffer[5] = VersionDes[1];
|
|||
|
aTxBuffer[6] = VersionDes[2];
|
|||
|
aTxBuffer[7] = VersionDes[3];
|
|||
|
aTxBuffer[8] = VersionDes[4];
|
|||
|
aTxBuffer[9] = VersionDes[5];
|
|||
|
aTxBuffer[10] = VersionDes[6];
|
|||
|
aTxBuffer[11] = VersionDes[7];
|
|||
|
aTxBuffer[12] = 0x00;
|
|||
|
aTxBuffer[13] = 0x00;
|
|||
|
aTxBuffer[14] = 0x00;
|
|||
|
aTxBuffer[15] = 0x00;
|
|||
|
aTxBuffer[16] = 0x00;
|
|||
|
aTxBuffer[17] = 0x00;
|
|||
|
aTxBuffer[18] = 0x00;
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 17; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[19] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void EegDataSend(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void EegDataSend(void)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
|
|||
|
static uint8_t aTxBuffer[EEG_DATA_LENGTH+6] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = EEG_DATA_LENGTH+6;
|
|||
|
ret_code_t err_code;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x34;
|
|||
|
aTxBuffer[FunctionCodeOffset] = EEG_DATA;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[EEG_DATA_LENGTH+5] = 0x55;
|
|||
|
|
|||
|
/* Э<><D0AD><EFBFBD>й涨<D0B9>ȷ<EFBFBD><C8B7><EFBFBD><CDB8>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD> */
|
|||
|
memcpy(&aTxBuffer[4],aEEGData,EEG_DATA_LENGTH);
|
|||
|
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < EEG_DATA_LENGTH+2; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[EEG_DATA_LENGTH+4] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void UpdateCurrent(uint8_t CurrentSend)
|
|||
|
* description : ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void UpdateCurrent(uint8_t CurrentSend)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
uint8_t aTxBuffer[8] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 8;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x04;
|
|||
|
aTxBuffer[FunctionCodeOffset] = CURRENT_CONTROL;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[7] = 0x55;
|
|||
|
|
|||
|
/* Э<><D0AD><EFBFBD>й涨<D0B9>ȷ<EFBFBD><C8B7><EFBFBD><CDB8>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD> */
|
|||
|
aTxBuffer[4] = CurrentSend;
|
|||
|
aTxBuffer[5] = 0x01; // 01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 4; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[6] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void user_ble_or_uart_send(char * txBufferP, uint16_t Length)
|
|||
|
{
|
|||
|
ble_nus_data_send(&m_nus, txBufferP, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void ble_send_rms_data(uint16_t rms_data)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : uint16_t rms_data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void ble_send_rms_data(uint16_t rms_data)
|
|||
|
{
|
|||
|
uint32_t TempSum = 0;
|
|||
|
|
|||
|
static uint8_t sendCnt = 0;
|
|||
|
|
|||
|
if(sendCnt < RMS_USER_DATA_LENGTH)
|
|||
|
{
|
|||
|
rmsData.rmsDataBuffer[sendCnt] = rms_data; //<2F><>rms_data<74><61><EFBFBD><EFBFBD>rmsData<74><61>rmsDataBuffer<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
sendCnt++;
|
|||
|
if(sendCnt < RMS_USER_DATA_LENGTH)
|
|||
|
return ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>С<EFBFBD><D0A1>RMS_USER_DATA_LENGTH<54><48><EFBFBD><EFBFBD><F2B2BBB7><EFBFBD>
|
|||
|
}
|
|||
|
sendCnt = 0; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ﵽRMS_USER_DATA_LENGTH<54><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ʹ<EFBFBD><CDB4><EFBFBD>
|
|||
|
rmsData.myNumber = 1;
|
|||
|
//rmsData.myNumber++;
|
|||
|
uint8_t * sumCheckStartP = (uint8_t *)&rmsData.functionCode;
|
|||
|
for(uint8_t i = 0; i < rmsData.frameLength; i++)
|
|||
|
{
|
|||
|
TempSum += sumCheckStartP[i];
|
|||
|
}
|
|||
|
rmsData.checkSum = TempSum & 0xff;
|
|||
|
user_ble_or_uart_send((uint8_t *)&rmsData, sizeof(rmsData)); //145us
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void StateUpLoad(AdapterStateInfo_e AdapterStateTemp , ElectrodeStatusInfo_e ElectrodeStatusTemp)
|
|||
|
* description : <EFBFBD>缫Ƭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>ϴ<EFBFBD>
|
|||
|
* Input : AdapterStateInfo_e AdapterStateTemp , ElectrodeStatusInfo_e ElectrodeStatusTemp
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void StateUpLoad(AdapterStateInfo_e AdapterStateTemp , ElectrodeStatusInfo_e ElectrodeStatusTemp)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
uint8_t aTxBuffer[8] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 8;
|
|||
|
|
|||
|
AdapterStateInfo_e AdapterStateIn;
|
|||
|
ElectrodeStatusInfo_e ElectrodeStatusIn;
|
|||
|
|
|||
|
AdapterStateIn = AdapterStateTemp;
|
|||
|
ElectrodeStatusIn = ElectrodeStatusTemp;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x04;
|
|||
|
aTxBuffer[FunctionCodeOffset] = STATE_UPLOAD;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[7] = 0x55;
|
|||
|
|
|||
|
aTxBuffer[4] = AdapterStateIn; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
aTxBuffer[5] = ElectrodeStatusIn; // <20>缫Ƭ״̬
|
|||
|
|
|||
|
if(ElectrodeStatusIn == ElectrodeFalloff)
|
|||
|
{
|
|||
|
|
|||
|
ElectrodeStatusInfo = ElectrodeConnectted;
|
|||
|
}
|
|||
|
|
|||
|
NRF_LOG_INFO("Electrodestatus = %d",ElectrodeStatusIn);
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 4; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[6] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void UpdateControlStatus(uint8_t ControlStatus)
|
|||
|
* description : ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void UpdateControlStatus(uint8_t ControlStatus)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
uint8_t aTxBuffer[8] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 8;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x04;
|
|||
|
aTxBuffer[FunctionCodeOffset] = START_STOP_CONTROL;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[7] = 0x55;
|
|||
|
|
|||
|
/* Э<><D0AD><EFBFBD>й涨<D0B9>ȷ<EFBFBD><C8B7><EFBFBD><CDB8>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD> */
|
|||
|
aTxBuffer[4] = ControlStatus;
|
|||
|
aTxBuffer[5] = 0x01; // 01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 4; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[6] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void SchemeQuery(uint8_t idMSB,uint8_t idLSB)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void SchemeQuery(uint8_t idMSB,uint8_t idLSB)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
static uint8_t aTxBuffer[8] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 8;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x04;
|
|||
|
aTxBuffer[FunctionCodeOffset] = SCHEME_QUERY;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[7] = 0x55;
|
|||
|
|
|||
|
/* Э<><D0AD><EFBFBD>й涨<D0B9>ȷ<EFBFBD><C8B7><EFBFBD><CDB8>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD> */
|
|||
|
aTxBuffer[4] = idMSB;
|
|||
|
aTxBuffer[5] = idLSB;
|
|||
|
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 4; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[6] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void MACQuery(void)
|
|||
|
* description : MAC<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>ѯ
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void MACQuery(void)
|
|||
|
{
|
|||
|
uint8_t j = 2;
|
|||
|
static uint8_t aTxBuffer[12] = {0};
|
|||
|
uint32_t ulCrc = 0;
|
|||
|
uint16_t Length = 12;
|
|||
|
|
|||
|
/* ֡ͷ<D6A1><CDB7>֡β*/
|
|||
|
aTxBuffer[HeadOffset] = 0xAA;
|
|||
|
aTxBuffer[DataLengthOffset] = 0x08;
|
|||
|
aTxBuffer[FunctionCodeOffset] = MAC_QUERY;
|
|||
|
aTxBuffer[ChannelNumOffset] = 0x00;
|
|||
|
aTxBuffer[11] = 0x55;
|
|||
|
|
|||
|
aTxBuffer[4] = BLE_MAC[5];
|
|||
|
aTxBuffer[5] = BLE_MAC[4];
|
|||
|
aTxBuffer[6] = BLE_MAC[3];
|
|||
|
aTxBuffer[7] = BLE_MAC[2];
|
|||
|
aTxBuffer[8] = BLE_MAC[1];
|
|||
|
aTxBuffer[9] = BLE_MAC[0];
|
|||
|
/* У<><D0A3><EFBFBD><EFBFBD> */
|
|||
|
for(uint8_t i = 0; i < 8; i++)
|
|||
|
{
|
|||
|
ulCrc += aTxBuffer[j];
|
|||
|
j++;
|
|||
|
}
|
|||
|
aTxBuffer[10] = (uint8_t)ulCrc;
|
|||
|
ble_nus_data_send(&m_nus, aTxBuffer, &Length, m_conn_handle);
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void JudgeLedMode(void)
|
|||
|
* description :
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return : void
|
|||
|
********************************************************************/
|
|||
|
void JudgeLedMode(void)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void DisconnectControl(void)
|
|||
|
{
|
|||
|
StopManage();
|
|||
|
}
|
|||
|
|
|||
|
/*************************** END OF FILE ***************************/
|
|||
|
|
|||
|
|