暂存,看起来ok'
This commit is contained in:
parent
76de810741
commit
c23b7e1804
199
APP/peripheral.c
199
APP/peripheral.c
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// How often to perform periodic event
|
// How often to perform periodic event
|
||||||
#define SBP_PERIODIC_EVT_PERIOD (160 * 10) // (160 = 100ms)
|
#define SBP_PERIODIC_EVT_PERIOD (160 * 10 * 5) // (160 = 100ms)
|
||||||
|
|
||||||
// How often to perform read rssi event
|
// How often to perform read rssi event
|
||||||
#define SBP_READ_RSSI_EVT_PERIOD (1600 * 3) // (160 = 100ms)
|
#define SBP_READ_RSSI_EVT_PERIOD (1600 * 3) // (160 = 100ms)
|
||||||
|
@ -76,27 +76,13 @@
|
||||||
// Company Identifier: WCH
|
// Company Identifier: WCH
|
||||||
#define WCH_COMPANY_ID 0x07D7
|
#define WCH_COMPANY_ID 0x07D7
|
||||||
|
|
||||||
/*********************************************************************
|
#define MAC_NAME "TYQ-93:B4:8F:10:53:5C"
|
||||||
* TYPEDEFS
|
// TYQ-93:B4:8F:10:53:5C
|
||||||
*/
|
#define MAC_NAME_LEN 22
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* GLOBAL VARIABLES
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* EXTERNAL VARIABLES
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* EXTERNAL FUNCTIONS
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
* LOCAL VARIABLES
|
|
||||||
*/
|
|
||||||
static uint8_t Peripheral_TaskID = INVALID_TASK_ID; // Task ID for internal task/event processing
|
static uint8_t Peripheral_TaskID = INVALID_TASK_ID; // Task ID for internal task/event processing
|
||||||
|
|
||||||
|
// 蓝牙广播包的最大长度是37个字节,其中设备地址占用了6个字节,只有31个字节是可用的。
|
||||||
// TODO:响应体,名称加上MAC地址
|
// TODO:响应体,名称加上MAC地址
|
||||||
// GAP - SCAN RSP data (max size = 31 bytes)
|
// GAP - SCAN RSP data (max size = 31 bytes)
|
||||||
static uint8_t scanRspData[] = {
|
static uint8_t scanRspData[] = {
|
||||||
|
@ -152,72 +138,6 @@ static uint8_t advertData[] = {
|
||||||
HI_UINT16(SIMPLEPROFILE_SERV_UUID)
|
HI_UINT16(SIMPLEPROFILE_SERV_UUID)
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
// 蓝牙广播包的最大长度是37个字节,其中设备地址占用了6个字节,只有31个字节是可用的。
|
|
||||||
|
|
||||||
// GAP - SCAN RSP data (max size = 31 bytes)
|
|
||||||
static uint8_t scanRspData[] = {
|
|
||||||
// complete name
|
|
||||||
0x08, // length of this data
|
|
||||||
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
|
|
||||||
'B',
|
|
||||||
'L',
|
|
||||||
'E',
|
|
||||||
'-',
|
|
||||||
'T',
|
|
||||||
'Y',
|
|
||||||
'Q',
|
|
||||||
|
|
||||||
// connection interval range
|
|
||||||
0x05, // length of this data
|
|
||||||
GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
|
|
||||||
LO_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL), // 100ms
|
|
||||||
HI_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),
|
|
||||||
LO_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL), // 1s
|
|
||||||
HI_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),
|
|
||||||
|
|
||||||
// Tx power level
|
|
||||||
0x02, // length of this data
|
|
||||||
GAP_ADTYPE_POWER_LEVEL,
|
|
||||||
0 // 0dBm
|
|
||||||
|
|
||||||
0x03, // length of this data
|
|
||||||
GAP_ADTYPE_MANUFACTURER_SPECIFIC,
|
|
||||||
// 前两个字节表示厂商 ID
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0x10, // 1B 电池电压 30=3V,18=1.8V
|
|
||||||
0x01, // 1B 阀门类型
|
|
||||||
0x00, // 1B 阀门工作状态 超欠压、过流
|
|
||||||
0x00, // 1B 阀门连接状态 (电磁阀BLE控制盒) 0=未连接 1=已连接
|
|
||||||
0x01, // 1B 阀门开关状态 0=未知 1=关闭 2=关闭过,未按按键恢复 3=关闭过,按下了恢复键 4=打开
|
|
||||||
0x03, // 1B 阀门温度 有符号整数 25 C
|
|
||||||
0x04, // 1B 阀门进口压力 0~156 (0)kPa
|
|
||||||
0x05, // 1B 阀门出口压力 0~100 hPa 0.1kpa
|
|
||||||
0x06, // 1B 阀门大气压力 80~110 kPa
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// GAP - Advertisement data (max size = 31 bytes, though this is
|
|
||||||
// best kept short to conserve power while advertising)
|
|
||||||
static uint8_t advertData[] = {
|
|
||||||
// Flags; this sets the device to use limited discoverable
|
|
||||||
// mode (advertises for 30 seconds at a time) instead of general
|
|
||||||
// discoverable mode (advertises indefinitely)
|
|
||||||
0x02, // length of this data
|
|
||||||
GAP_ADTYPE_FLAGS,
|
|
||||||
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
|
|
||||||
|
|
||||||
// service UUID, to notify central devices what services are included
|
|
||||||
// in this peripheral
|
|
||||||
0x03, // length of this data
|
|
||||||
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
|
|
||||||
LO_UINT16(SIMPLEPROFILE_SERV_UUID),
|
|
||||||
HI_UINT16(SIMPLEPROFILE_SERV_UUID)
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// GAP GATT Attributes
|
// GAP GATT Attributes
|
||||||
static uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "BLE_TYQ";
|
static uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "BLE_TYQ";
|
||||||
|
|
||||||
|
@ -301,6 +221,7 @@ void Peripheral_Init()
|
||||||
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);
|
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);
|
||||||
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);
|
GAPRole_SetParameter(GAPROLE_SCAN_RSP_DATA, sizeof(scanRspData), scanRspData);
|
||||||
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
|
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
|
||||||
|
|
||||||
GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t), &desired_min_interval);
|
GAPRole_SetParameter(GAPROLE_MIN_CONN_INTERVAL, sizeof(uint16_t), &desired_min_interval);
|
||||||
GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t), &desired_max_interval);
|
GAPRole_SetParameter(GAPROLE_MAX_CONN_INTERVAL, sizeof(uint16_t), &desired_max_interval);
|
||||||
}
|
}
|
||||||
|
@ -347,11 +268,11 @@ void Peripheral_Init()
|
||||||
|
|
||||||
// Setup the SimpleProfile Characteristic Values
|
// Setup the SimpleProfile Characteristic Values
|
||||||
{
|
{
|
||||||
uint8_t charValue1[SIMPLEPROFILE_CHAR1_LEN] = {1};
|
uint8_t charValue1[SIMPLEPROFILE_CHAR1_LEN] = {0};
|
||||||
uint8_t charValue2[SIMPLEPROFILE_CHAR2_LEN] = {2};
|
uint8_t charValue2[SIMPLEPROFILE_CHAR2_LEN] = {0};
|
||||||
uint8_t charValue3[SIMPLEPROFILE_CHAR3_LEN] = {3};
|
uint8_t charValue3[SIMPLEPROFILE_CHAR3_LEN] = {0};
|
||||||
uint8_t charValue4[SIMPLEPROFILE_CHAR4_LEN] = {4};
|
uint8_t charValue4[SIMPLEPROFILE_CHAR4_LEN] = {0};
|
||||||
uint8_t charValue5[SIMPLEPROFILE_CHAR5_LEN] = {1, 2, 3, 4, 5};
|
uint8_t charValue5[SIMPLEPROFILE_CHAR5_LEN] = {0, 0, 0, 0, 0};
|
||||||
|
|
||||||
SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR1, SIMPLEPROFILE_CHAR1_LEN, charValue1);
|
SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR1, SIMPLEPROFILE_CHAR1_LEN, charValue1);
|
||||||
SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR2, SIMPLEPROFILE_CHAR2_LEN, charValue2);
|
SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR2, SIMPLEPROFILE_CHAR2_LEN, charValue2);
|
||||||
|
@ -456,7 +377,7 @@ uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||||
if(events & SBP_PHY_UPDATE_EVT)
|
if(events & SBP_PHY_UPDATE_EVT)
|
||||||
{
|
{
|
||||||
// start phy update
|
// start phy update
|
||||||
logDebug("PHY Update %x...\n", GAPRole_UpdatePHY(peripheralConnList.connHandle, 0,
|
logDebug("PHY Update %x...", GAPRole_UpdatePHY(peripheralConnList.connHandle, 0,
|
||||||
GAP_PHY_BIT_LE_2M, GAP_PHY_BIT_LE_2M, 0));
|
GAP_PHY_BIT_LE_2M, GAP_PHY_BIT_LE_2M, 0));
|
||||||
|
|
||||||
return (events ^ SBP_PHY_UPDATE_EVT);
|
return (events ^ SBP_PHY_UPDATE_EVT);
|
||||||
|
@ -488,7 +409,7 @@ static void Peripheral_ProcessGAPMsg(gapRoleEvent_t *pEvent)
|
||||||
{
|
{
|
||||||
case GAP_SCAN_REQUEST_EVENT:
|
case GAP_SCAN_REQUEST_EVENT:
|
||||||
{
|
{
|
||||||
logDebug("Receive scan req from %x %x %x %x %x %x ..\n", pEvent->scanReqEvt.scannerAddr[0],
|
logDebug("Receive scan req from %x %x %x %x %x %x ..", pEvent->scanReqEvt.scannerAddr[0],
|
||||||
pEvent->scanReqEvt.scannerAddr[1], pEvent->scanReqEvt.scannerAddr[2], pEvent->scanReqEvt.scannerAddr[3],
|
pEvent->scanReqEvt.scannerAddr[1], pEvent->scanReqEvt.scannerAddr[2], pEvent->scanReqEvt.scannerAddr[3],
|
||||||
pEvent->scanReqEvt.scannerAddr[4], pEvent->scanReqEvt.scannerAddr[5]);
|
pEvent->scanReqEvt.scannerAddr[4], pEvent->scanReqEvt.scannerAddr[5]);
|
||||||
break;
|
break;
|
||||||
|
@ -496,7 +417,7 @@ static void Peripheral_ProcessGAPMsg(gapRoleEvent_t *pEvent)
|
||||||
|
|
||||||
case GAP_PHY_UPDATE_EVENT:
|
case GAP_PHY_UPDATE_EVENT:
|
||||||
{
|
{
|
||||||
logDebug("Phy update Rx:%x Tx:%x ..\n", pEvent->linkPhyUpdate.connRxPHYS, pEvent->linkPhyUpdate.connTxPHYS);
|
logDebug("Phy update Rx:%x Tx:%x ..", pEvent->linkPhyUpdate.connRxPHYS, pEvent->linkPhyUpdate.connTxPHYS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -532,7 +453,7 @@ static void Peripheral_ProcessTMOSMsg(tmos_event_hdr_t *pMsg)
|
||||||
if(pMsgEvent->method == ATT_MTU_UPDATED_EVENT)
|
if(pMsgEvent->method == ATT_MTU_UPDATED_EVENT)
|
||||||
{
|
{
|
||||||
peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU;
|
peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU;
|
||||||
logDebug("mtu exchange: %d\n", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
|
logDebug("mtu exchange: %d", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -559,7 +480,7 @@ static void Peripheral_LinkEstablished(gapRoleEvent_t *pEvent)
|
||||||
if(peripheralConnList.connHandle != GAP_CONNHANDLE_INIT)
|
if(peripheralConnList.connHandle != GAP_CONNHANDLE_INIT)
|
||||||
{
|
{
|
||||||
GAPRole_TerminateLink(pEvent->linkCmpl.connectionHandle);
|
GAPRole_TerminateLink(pEvent->linkCmpl.connectionHandle);
|
||||||
logDebug("Connection max...\n");
|
logDebug("Connection max...");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -577,7 +498,7 @@ static void Peripheral_LinkEstablished(gapRoleEvent_t *pEvent)
|
||||||
// Start read rssi
|
// Start read rssi
|
||||||
tmos_start_task(Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD);
|
tmos_start_task(Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD);
|
||||||
|
|
||||||
logDebug("Conn %x - Int %x \n", event->connectionHandle, event->connInterval);
|
logDebug("Conn %x - Int %x ", event->connectionHandle, event->connInterval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -605,13 +526,17 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
|
||||||
|
|
||||||
// Restart advertising
|
// Restart advertising
|
||||||
{
|
{
|
||||||
|
// 三个广播通道全部打开
|
||||||
|
// uint8_t init_adv_channel_map = GAP_ADVCHAN_ALL ;
|
||||||
|
// GAPRole_SetParameter( GAPROLE_ADV_CHANNEL_MAP, sizeof( uint8_t ), &init_adv_channel_map);
|
||||||
|
|
||||||
uint8_t advertising_enable = TRUE;
|
uint8_t advertising_enable = TRUE;
|
||||||
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &advertising_enable);
|
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &advertising_enable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logDebug("ERR..\n");
|
logError("ERR..");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -627,7 +552,7 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent)
|
||||||
*/
|
*/
|
||||||
static void peripheralRssiCB(uint16_t connHandle, int8_t rssi)
|
static void peripheralRssiCB(uint16_t connHandle, int8_t rssi)
|
||||||
{
|
{
|
||||||
logDebug("RSSI -%d dB Conn %x \n", -rssi, connHandle);
|
logDebug("RSSI -%d dB Conn %x ", -rssi, connHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
|
@ -656,7 +581,7 @@ static void peripheralParamUpdateCB(uint16_t connHandle, uint16_t connInterval,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logDebug("ERR..\n");
|
logError("ERR..");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,19 +599,19 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
|
||||||
switch(newState & GAPROLE_STATE_ADV_MASK)
|
switch(newState & GAPROLE_STATE_ADV_MASK)
|
||||||
{
|
{
|
||||||
case GAPROLE_STARTED:
|
case GAPROLE_STARTED:
|
||||||
logDebug("Initialized..\n");
|
logDebug("Initialized..");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GAPROLE_ADVERTISING:
|
case GAPROLE_ADVERTISING:
|
||||||
if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
|
if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
|
||||||
{
|
{
|
||||||
Peripheral_LinkTerminated(pEvent);
|
Peripheral_LinkTerminated(pEvent);
|
||||||
logDebug("Disconnected.. Reason:%x\n", pEvent->linkTerminate.reason);
|
logDebug("Disconnected.. Reason:%x", pEvent->linkTerminate.reason);
|
||||||
logDebug("Advertising..\n");
|
logDebug("Advertising..");
|
||||||
}
|
}
|
||||||
else if(pEvent->gap.opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
|
else if(pEvent->gap.opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
|
||||||
{
|
{
|
||||||
logDebug("Advertising..\n");
|
logDebug("Advertising..");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -694,46 +619,46 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven
|
||||||
if(pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT)
|
if(pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT)
|
||||||
{
|
{
|
||||||
Peripheral_LinkEstablished(pEvent);
|
Peripheral_LinkEstablished(pEvent);
|
||||||
logDebug("Connected..\n");
|
logDebug("Connected..");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GAPROLE_CONNECTED_ADV:
|
case GAPROLE_CONNECTED_ADV:
|
||||||
if(pEvent->gap.opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
|
if(pEvent->gap.opcode == GAP_MAKE_DISCOVERABLE_DONE_EVENT)
|
||||||
{
|
{
|
||||||
logDebug("Connected Advertising..\n");
|
logDebug("Connected Advertising..");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GAPROLE_WAITING:
|
case GAPROLE_WAITING:
|
||||||
if(pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT)
|
if(pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT)
|
||||||
{
|
{
|
||||||
logDebug("Waiting for advertising..\n");
|
logDebug("Waiting for advertising..");
|
||||||
}
|
}
|
||||||
else if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
|
else if(pEvent->gap.opcode == GAP_LINK_TERMINATED_EVENT)
|
||||||
{
|
{
|
||||||
Peripheral_LinkTerminated(pEvent);
|
Peripheral_LinkTerminated(pEvent);
|
||||||
logDebug("Disconnected.. Reason:%x\n", pEvent->linkTerminate.reason);
|
logDebug("Disconnected.. Reason:%x", pEvent->linkTerminate.reason);
|
||||||
}
|
}
|
||||||
else if(pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT)
|
else if(pEvent->gap.opcode == GAP_LINK_ESTABLISHED_EVENT)
|
||||||
{
|
{
|
||||||
if(pEvent->gap.hdr.status != SUCCESS)
|
if(pEvent->gap.hdr.status != SUCCESS)
|
||||||
{
|
{
|
||||||
logDebug("Waiting for advertising..\n");
|
logDebug("Waiting for advertising..");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logDebug("Error..\n");
|
logError("Err..");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logDebug("Error..%x\n", pEvent->gap.opcode);
|
logError("Err..%x", pEvent->gap.opcode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GAPROLE_ERROR:
|
case GAPROLE_ERROR:
|
||||||
logDebug("Error..\n");
|
logError("Err..");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -836,7 +761,7 @@ static void peripheralChar4Notify(uint8_t *pValue, uint16_t len)
|
||||||
attHandleValueNoti_t noti;
|
attHandleValueNoti_t noti;
|
||||||
if(len > (peripheralMTU - 3))
|
if(len > (peripheralMTU - 3))
|
||||||
{
|
{
|
||||||
logDebug("Too large noti\n");
|
logDebug("Too large noti");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
noti.len = len;
|
noti.len = len;
|
||||||
|
@ -851,9 +776,6 @@ static void peripheralChar4Notify(uint8_t *pValue, uint16_t len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* @fn simpleProfileChangeCB
|
* @fn simpleProfileChangeCB
|
||||||
*
|
*
|
||||||
|
@ -867,6 +789,7 @@ uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
|
||||||
*/
|
*/
|
||||||
static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len)
|
static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len)
|
||||||
{
|
{
|
||||||
|
// tmos_event_hdr_t *test_message;
|
||||||
TsRawFrameData RawData;
|
TsRawFrameData RawData;
|
||||||
switch(paramID)
|
switch(paramID)
|
||||||
{
|
{
|
||||||
|
@ -874,30 +797,37 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
|
||||||
{
|
{
|
||||||
uint8_t newValue[SIMPLEPROFILE_CHAR1_LEN];
|
uint8_t newValue[SIMPLEPROFILE_CHAR1_LEN];
|
||||||
tmos_memcpy(newValue, pValue, len);
|
tmos_memcpy(newValue, pValue, len);
|
||||||
logDebug("profile ChangeCB CHAR1.. Start\n");
|
logDebug("profile ChangeCB CHAR1.. Start");
|
||||||
for (uint8_t i = 0; i < len; i++)
|
for (uint8_t i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
logDebug("%02x ", newValue[i]);
|
logDebug("%02x ", newValue[i]);
|
||||||
|
BSP_UART1_TxLoop();
|
||||||
}
|
}
|
||||||
logDebug("\n profile ChangeCB CHAR1.. End\n");
|
logDebug("\n profile ChangeCB CHAR1.. End");
|
||||||
|
|
||||||
|
// test_message =(tmos_event_hdr_t*) tmos_msg_allocate(sizeof(tmos_event_hdr_t));
|
||||||
|
BSP_UART1_TxLoop();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SIMPLEPROFILE_CHAR3:
|
case SIMPLEPROFILE_CHAR3:
|
||||||
{
|
{
|
||||||
|
uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
|
||||||
tmos_memset(newValue, 0, sizeof(newValue));
|
tmos_memset(newValue, 0, sizeof(newValue));
|
||||||
tmos_memcpy(newValue, pValue, len);
|
tmos_memcpy(newValue, pValue, len);
|
||||||
logDebug("profile ChangeCB CHAR3.. Start");
|
logDebug("CHAR3 Start");
|
||||||
// logHexDumpAll(newValue, len);
|
logHexDumpAll(newValue, len);
|
||||||
for (uint8_t i = 0; i < len; i++)
|
// for (uint8_t i = 0; i < len; i++)
|
||||||
{
|
// {
|
||||||
logDebug("%02x ", newValue[i]);
|
// logDebug("%02x ", newValue[i]);
|
||||||
}
|
// }
|
||||||
#if 1
|
#if 1
|
||||||
TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(newValue, len);
|
TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(newValue, len);
|
||||||
if (HostFrameData != NULL)
|
if (HostFrameData != NULL)
|
||||||
{
|
{
|
||||||
logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 数据段
|
// logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 数据段
|
||||||
|
// BSP_UART1_TxLoop();
|
||||||
// HR_ProcessData(HostFrameData);
|
// HR_ProcessData(HostFrameData);
|
||||||
switch (HostFrameData->cmd)
|
switch (HostFrameData->cmd)
|
||||||
{
|
{
|
||||||
|
@ -911,11 +841,13 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
|
||||||
logDebug("kCmdCloseVavle");
|
logDebug("kCmdCloseVavle");
|
||||||
BSP_VALVE_Generate_ValveResponse(&RawData, kCmdCloseVavle, 1);
|
BSP_VALVE_Generate_ValveResponse(&RawData, kCmdCloseVavle, 1);
|
||||||
peripheralChar4Notify((uint8_t*)&RawData.buf[0], RawData.len);
|
peripheralChar4Notify((uint8_t*)&RawData.buf[0], RawData.len);
|
||||||
|
BSP_UART1_TxLoop();
|
||||||
break;
|
break;
|
||||||
case kCmdOpenVavle:
|
case kCmdOpenVavle:
|
||||||
logDebug("kCmdOpenVavle");
|
logDebug("kCmdOpenVavle");
|
||||||
BSP_VALVE_Generate_ValveResponse(&RawData, kCmdOpenVavle, 1);
|
BSP_VALVE_Generate_ValveResponse(&RawData, kCmdOpenVavle, 1);
|
||||||
peripheralChar4Notify((uint8_t*)&RawData.buf[0], RawData.len);
|
peripheralChar4Notify((uint8_t*)&RawData.buf[0], RawData.len);
|
||||||
|
BSP_UART1_TxLoop();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
logError("无效的命令");
|
logError("无效的命令");
|
||||||
|
@ -923,6 +855,10 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logError("数据帧解析失败");
|
||||||
|
}
|
||||||
tmos_msg_deallocate((uint8_t*)HostFrameData);
|
tmos_msg_deallocate((uint8_t*)HostFrameData);
|
||||||
HostFrameData = NULL;
|
HostFrameData = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
@ -936,5 +872,16 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
// TODO:应用加入广播数据更新部分状态数据
|
||||||
*********************************************************************/
|
// 动态更新广播数据
|
||||||
|
// taskID: 请求更改广播任务的 ID
|
||||||
|
// adType:TRUE 更改广播数据,FALSE 更改扫描回复数据
|
||||||
|
// datalen:数据长度
|
||||||
|
// *pAdvertData:数据指针
|
||||||
|
void Peripheral_UpdateAdvertData(uint8_t adType, uint8_t dataLen, uint8_t *pAdvertData)
|
||||||
|
{
|
||||||
|
GAP_UpdateAdvertisingData(Peripheral_TaskID, adType, dataLen, pAdvertData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "CH59x_uart.h"
|
#include "CH59x_uart.h"
|
||||||
#include "shell_port.h"
|
#include "shell_port.h"
|
||||||
|
|
||||||
|
// https://www.cnblogs.com/iot-fan/p/14744671.html
|
||||||
|
|
||||||
|
|
||||||
lwrb_t Uart1Rx;
|
lwrb_t Uart1Rx;
|
||||||
|
|
|
@ -142,7 +142,7 @@
|
||||||
#define PERIPHERAL_MAX_CONNECTION 1
|
#define PERIPHERAL_MAX_CONNECTION 1
|
||||||
#endif
|
#endif
|
||||||
#ifndef CENTRAL_MAX_CONNECTION
|
#ifndef CENTRAL_MAX_CONNECTION
|
||||||
#define CENTRAL_MAX_CONNECTION 3
|
#define CENTRAL_MAX_CONNECTION 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
|
extern uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
|
||||||
|
|
|
@ -46,11 +46,11 @@ extern "C" {
|
||||||
#define SIMPLEPROFILE_SERVICE 0x00000001
|
#define SIMPLEPROFILE_SERVICE 0x00000001
|
||||||
|
|
||||||
// Length of characteristic in bytes ( Default MTU is 23 )
|
// Length of characteristic in bytes ( Default MTU is 23 )
|
||||||
#define SIMPLEPROFILE_CHAR1_LEN 30
|
#define SIMPLEPROFILE_CHAR1_LEN 64
|
||||||
#define SIMPLEPROFILE_CHAR2_LEN 30
|
#define SIMPLEPROFILE_CHAR2_LEN 64
|
||||||
#define SIMPLEPROFILE_CHAR3_LEN 30
|
#define SIMPLEPROFILE_CHAR3_LEN 64
|
||||||
#define SIMPLEPROFILE_CHAR4_LEN 30
|
#define SIMPLEPROFILE_CHAR4_LEN 64
|
||||||
#define SIMPLEPROFILE_CHAR5_LEN 30
|
#define SIMPLEPROFILE_CHAR5_LEN 64
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
|
|
Loading…
Reference in New Issue