update 1.8
This commit is contained in:
@@ -22,7 +22,6 @@
|
||||
void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
||||
void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
||||
void BB_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
||||
void LLE_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
|
||||
|
||||
/*********************************************************************
|
||||
* @fn NMI_Handler
|
||||
@@ -60,15 +59,3 @@ void BB_IRQHandler(void)
|
||||
{
|
||||
BB_IRQLibHandler();
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn LLE_IRQHandler
|
||||
*
|
||||
* @brief LLE Interrupt for BLE.
|
||||
*
|
||||
* @return None
|
||||
*/
|
||||
void LLE_IRQHandler(void)
|
||||
{
|
||||
LLE_IRQLibHandler();
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ extern "C" {
|
||||
#define START_READ_OR_WRITE_EVT 0x0020
|
||||
#define START_READ_RSSI_EVT 0x0040
|
||||
#define ESTABLISH_LINK_TIMEOUT_EVT 0x0080
|
||||
#define START_WRITE_CCCD_EVT 0x0100
|
||||
|
||||
#define CONNECT0_ITEM 0
|
||||
#define CONNECT1_ITEM 1
|
||||
@@ -53,6 +54,7 @@ typedef struct
|
||||
uint16_t svcStartHdl; // Discovered service start handle
|
||||
uint16_t svcEndHdl; // Discovered service end handle
|
||||
uint16_t charHdl; // Discovered characteristic handle
|
||||
uint16_t cccHdl; // client characteristic configuration discovery handle
|
||||
} centralConnItem_t;
|
||||
|
||||
typedef struct
|
||||
|
||||
@@ -102,6 +102,9 @@
|
||||
// Default read or write timer delay in 0.625ms
|
||||
#define DEFAULT_READ_OR_WRITE_DELAY 1600
|
||||
|
||||
// Default write CCCD delay in 0.625ms
|
||||
#define DEFAULT_WRITE_CCCD_DELAY 1600
|
||||
|
||||
// Establish link timeout in 0.625ms
|
||||
#define ESTABLISH_LINK_TIMEOUT 3200
|
||||
|
||||
@@ -119,7 +122,8 @@ enum
|
||||
{
|
||||
BLE_DISC_STATE_IDLE, // Idle
|
||||
BLE_DISC_STATE_SVC, // Service discovery
|
||||
BLE_DISC_STATE_CHAR // Characteristic discovery
|
||||
BLE_DISC_STATE_CHAR, // Characteristic discovery
|
||||
BLE_DISC_STATE_CCCD, // client characteristic configuration discovery
|
||||
};
|
||||
/*********************************************************************
|
||||
* TYPEDEFS
|
||||
@@ -278,6 +282,7 @@ static void centralInitConnItem(uint8_t task_id, centralConnItem_t *centralConnL
|
||||
centralConnList[connItem].charHdl = 0;
|
||||
centralConnList[connItem].svcStartHdl = 0;
|
||||
centralConnList[connItem].svcEndHdl = 0;
|
||||
centralConnList[connItem].cccHdl = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -416,6 +421,36 @@ static uint16_t connect0_ProcessEvent(uint8_t task_id, uint16_t events)
|
||||
return (events ^ START_PARAM_UPDATE_EVT);
|
||||
}
|
||||
|
||||
if(events & START_WRITE_CCCD_EVT)
|
||||
{
|
||||
if(centralConnList[CONNECT0_ITEM].procedureInProgress == FALSE)
|
||||
{
|
||||
// Do a write
|
||||
attWriteReq_t req;
|
||||
|
||||
req.cmd = FALSE;
|
||||
req.sig = FALSE;
|
||||
req.handle = centralConnList[CONNECT0_ITEM].cccHdl;
|
||||
req.len = 2;
|
||||
req.pValue = GATT_bm_alloc(centralConnList[CONNECT0_ITEM].connHandle, ATT_WRITE_REQ, req.len, NULL, 0);
|
||||
if(req.pValue != NULL)
|
||||
{
|
||||
req.pValue[0] = 1;
|
||||
req.pValue[1] = 0;
|
||||
|
||||
if(GATT_WriteCharValue(centralConnList[CONNECT0_ITEM].connHandle, &req, centralTaskId) == SUCCESS)
|
||||
{
|
||||
centralConnList[CONNECT0_ITEM].procedureInProgress = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
GATT_bm_free((gattMsg_t *)&req, ATT_WRITE_REQ);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (events ^ START_WRITE_CCCD_EVT);
|
||||
}
|
||||
|
||||
if(events & START_READ_RSSI_EVT)
|
||||
{
|
||||
GAPRole_ReadRssiCmd(centralConnList[CONNECT0_ITEM].connHandle);
|
||||
@@ -747,7 +782,25 @@ static void centralEventCB(gapRoleEvent_t *pEvent)
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
case GAP_EXT_ADV_DEVICE_INFO_EVENT:
|
||||
{
|
||||
// Display device addr
|
||||
PRINT("Recv ext adv \n");
|
||||
// Add device to list
|
||||
centralAddDeviceInfo(pEvent->deviceExtAdvInfo.addr, pEvent->deviceExtAdvInfo.addrType);
|
||||
}
|
||||
break;
|
||||
|
||||
case GAP_DIRECT_DEVICE_INFO_EVENT:
|
||||
{
|
||||
// Display device addr
|
||||
PRINT("Recv direct adv \n");
|
||||
// Add device to list
|
||||
centralAddDeviceInfo(pEvent->deviceDirectInfo.addr, pEvent->deviceDirectInfo.addrType);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -814,7 +867,7 @@ static void centralPasscodeCB(uint8_t *deviceAddr, uint16_t connectionHandle,
|
||||
// Display passcode to user
|
||||
if(uiOutputs != 0)
|
||||
{
|
||||
PRINT("Passcode:%d\n", (int)passcode);
|
||||
PRINT("Passcode:%06d\n", (int)passcode);
|
||||
}
|
||||
// Send passcode response
|
||||
GAPBondMgr_PasscodeRsp(connectionHandle, SUCCESS, passcode);
|
||||
@@ -904,6 +957,40 @@ static void centralGATTDiscoveryEvent(uint8_t connItem, gattMsgEvent_t *pMsg)
|
||||
// Display Characteristic 1 handle
|
||||
PRINT("Found Characteristic 1 handle : %x \n", centralConnList[0].charHdl);
|
||||
}
|
||||
|
||||
if((pMsg->method == ATT_READ_BY_TYPE_RSP &&
|
||||
pMsg->hdr.status == bleProcedureComplete) ||
|
||||
(pMsg->method == ATT_ERROR_RSP))
|
||||
{
|
||||
// Discover characteristic
|
||||
centralConnList[connItem].discState = BLE_DISC_STATE_CCCD;
|
||||
req.startHandle = centralConnList[connItem].svcStartHdl;
|
||||
req.endHandle = centralConnList[connItem].svcEndHdl;
|
||||
req.type.len = ATT_BT_UUID_SIZE;
|
||||
req.type.uuid[0] = LO_UINT16(GATT_CLIENT_CHAR_CFG_UUID);
|
||||
req.type.uuid[1] = HI_UINT16(GATT_CLIENT_CHAR_CFG_UUID);
|
||||
|
||||
GATT_ReadUsingCharUUID(centralConnList[connItem].connHandle, &req, centralTaskId);
|
||||
}
|
||||
|
||||
}
|
||||
else if(centralConnList[connItem].discState == BLE_DISC_STATE_CCCD)
|
||||
{
|
||||
// Characteristic found, store handle
|
||||
if(pMsg->method == ATT_READ_BY_TYPE_RSP &&
|
||||
pMsg->msg.readByTypeRsp.numPairs > 0)
|
||||
{
|
||||
centralConnList[connItem].cccHdl = BUILD_UINT16(pMsg->msg.readByTypeRsp.pDataList[0],
|
||||
pMsg->msg.readByTypeRsp.pDataList[1]);
|
||||
|
||||
centralConnList[connItem].procedureInProgress = FALSE;
|
||||
|
||||
// Start do write CCCD
|
||||
tmos_start_task(centralConnList[connItem].taskID, START_WRITE_CCCD_EVT, DEFAULT_WRITE_CCCD_DELAY);
|
||||
|
||||
// Display Characteristic 1 handle
|
||||
PRINT("Found client characteristic configuration handle : %x \n", centralConnList[connItem].cccHdl);
|
||||
}
|
||||
centralConnList[connItem].discState = BLE_DISC_STATE_IDLE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ void Main_Circulation(void)
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
SystemCoreClockUpdate();
|
||||
Delay_Init();
|
||||
#ifdef DEBUG
|
||||
USART_Printf_Init( 115200 );
|
||||
|
||||
Reference in New Issue
Block a user