下载了评估SDK simplelink_cc2640r2_sdk_1_50_00_71_Evaluation。
但是如何测试 发送 和 接收 长广播呢?
以前的2540抓包工具好像抓不到,手机扫描也没发现。
只看到了老版本的BLE广播。
有做过相关测试的同行们,帮忙指点一下,感谢!
Qingsong Du:
发送和接收长广播功能,调出来了,把方法发出来,分享给需要的朋友:
1. 将SimplePeripheral_processGapMessage函数中的 advHandleLegacy 相关操作注释掉,这个是用来发31字节短广播的;
2. 将宏 GAPADV_PARAMS_AE_LONG_RANGE_CONN 中的 .primPhy 和 .secPhy 改为宏GAPADV_PARAMS_LEGACY_SCANN_CONN一样的值,
分别是 GAP_ADV_PRIM_PHY_1_MBPS 和 GAP_ADV_SEC_PHY_1_MBPS;
3. 修改广播数组长度,advertData[] 改为 advertData[255]。
这样再用Central工程接收广播,处理函数是SimpleCentral_processAppMsg。
这里有个问题,接收到的广播长度打印出来是245,而不是255,暂时不清楚具体原因。
注意:我用的是评估版的SDK,SDK simplelink_cc2640r2_sdk_1_50_00_71_Evaluation,不是正式发布的1.4版本。
z z46:
回复 Qingsong Du:
请问,你的SimplePeripheral都做了哪些修改呢,我按你说的改了之后按键菜单都 调不出来了,方便把程序贴出来吗。。。。
Alvin Chen:
回复 Qingsong Du:
”这里有个问题,接收到的广播长度打印出来是245,而不是255,暂时不清楚具体原因。“
前导和校验占用了:
• New Advertising channel extension PDU: ADV_EXT_IND– Allows up to 248 byte ADV payload by offloading payload to Data channels– Supports any PHY– Reduces traffic on ADV channels– Mandatory for Coded PHYs
除去前导和校验剩下的248byte。
如何使用请参照:
下面的的第二通道和上面的同学说的差不多。传统的BLE4.0抓包是抓不见的。
dev.ti.com/…/
z z46:
回复 Alvin Chen:
大神,那一楼同学说的配置方法正确不?我的咋不行啊
Alvin Chen:
回复 z z46:
基本是正确的
建议你去申请SIMPLELINK-CC2640R2-BLE5-EVAL,里面有我们做好的程序。
www.ti.com/…/simplelink-cc2640r2-sdk
z z46:
回复 Alvin Chen:
我刚买了几块CC2652,啊,对了,我是在2652上实现的上述功能,修改的地方一样吗?
Alvin Chen:
回复 z z46:
你要是CC2652就更简单了去看Simple Peripheral的程序:
*/static void SimplePeripheral_processGapMessage(gapEventHdr_t *pMsg){ switch(pMsg->opcode) { case GAP_DEVICE_INIT_DONE_EVENT: { bStatus_t status = FAILURE;
gapDeviceInitDoneEvent_t *pPkt = (gapDeviceInitDoneEvent_t *)pMsg;
if(pPkt->hdr.status == SUCCESS) { // Store the system ID uint8_t systemId[DEVINFO_SYSTEM_ID_LEN];
// use 6 bytes of device address for 8 bytes of system ID value systemId[0] = pPkt->devAddr[0]; systemId[1] = pPkt->devAddr[1]; systemId[2] = pPkt->devAddr[2];
// set middle bytes to zero systemId[4] = 0x00; systemId[3] = 0x00;
// shift three bytes up systemId[7] = pPkt->devAddr[5]; systemId[6] = pPkt->devAddr[4]; systemId[5] = pPkt->devAddr[3];
// Set Device Info Service Parameter DevInfo_SetParameter(DEVINFO_SYSTEM_ID, DEVINFO_SYSTEM_ID_LEN, systemId);
Display_printf(dispHandle, SP_ROW_STATUS_1, 0, "Initialized");
// Setup and start Advertising // For more information, see the GAP section in the User's Guide: // software-dl.ti.com/…/
// Temporary memory for advertising parameters for set #1. These will be copied // by the GapAdv module GapAdv_params_t advParamLegacy = GAPADV_PARAMS_LEGACY_SCANN_CONN;
// Create Advertisement set #1 and assign handle status = GapAdv_create(&SimplePeripheral_advCallback, &advParamLegacy, &advHandleLegacy); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Load advertising data for set #1 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLegacy, GAP_ADV_DATA_TYPE_ADV, sizeof(advertData), advertData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Load scan response data for set #1 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLegacy, GAP_ADV_DATA_TYPE_SCAN_RSP, sizeof(scanRspData), scanRspData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Set event mask for set #1 status = GapAdv_setEventMask(advHandleLegacy, GAP_ADV_EVT_MASK_START_AFTER_ENABLE | GAP_ADV_EVT_MASK_END_AFTER_DISABLE | GAP_ADV_EVT_MASK_SET_TERMINATED);
// Enable legacy advertising for set #1 status = GapAdv_enable(advHandleLegacy, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Use long range params to create long range set #2 GapAdv_params_t advParamLongRange = GAPADV_PARAMS_LEGACY_SCANN_CONN;
// Create Advertisement set #2 and assign handle status = GapAdv_create(&SimplePeripheral_advCallback, &advParamLongRange, &advHandleLongRange); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Load advertising data for set #2 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLongRange, GAP_ADV_DATA_TYPE_ADV, sizeof(advertData), advertData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Load scan response data for set #2 that is statically allocated by the app status = GapAdv_loadByHandle(advHandleLongRange, GAP_ADV_DATA_TYPE_SCAN_RSP, sizeof(scanRspData), scanRspData); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Set event mask for set #2 status = GapAdv_setEventMask(advHandleLongRange, GAP_ADV_EVT_MASK_START_AFTER_ENABLE | GAP_ADV_EVT_MASK_END_AFTER_DISABLE | GAP_ADV_EVT_MASK_SET_TERMINATED);
// Enable long range advertising for set #2 status = GapAdv_enable(advHandleLongRange, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0); SIMPLEPERIPHERAL_ASSERT(status == SUCCESS);
// Display device address Display_printf(dispHandle, SP_ROW_IDA, 0, "%s Addr: %s", (addrMode <= ADDRMODE_RANDOM) ? "Dev" : "ID", Util_convertBdAddr2Str(pPkt->devAddr));
if (addrMode > ADDRMODE_RANDOM) { SimplePeripheral_updateRPA();
// Create one-shot clock for RPA check event. Util_constructClock(&clkRpaRead, SimplePeripheral_clockHandler, SP_READ_RPA_EVT_PERIOD, 0, true, (UArg) &argRpaRead); } }
break; }
TI中文支持网



