比如在主机Central.c文件中有gapCentralRole_ProcessGAPMsg函数,传来一个gapEventHdr_t *pMsg类型的指针变量。指向gapEventHdr_t结构体。
该结构体的类型申明如下
typedef struct {osal_event_hdr_t hdr;//!< GAP_MSG_EVENT and statusuint8 opcode;//!< GAP type of command. Ref: @ref GAP_MSG_EVENT_DEFINES } gapEventHdr_t;
在该函数下面该死的是有如下回调代码,还强制转换为gapCentralRoleEvent_t结构体。
// Pass event to appif ( pGapCentralRoleCB && pGapCentralRoleCB->eventCB ){pGapCentralRoleCB->eventCB( (gapCentralRoleEvent_t *) pMsg );}
这里补充gapCentralRoleEvent_t结构体申明代码。
typedef union {gapEventHdr_tgap;//!< GAP_MSG_EVENT and status.gapDeviceInitDoneEvent_t initDone;//!< GAP initialization done.gapDeviceInfoEvent_tdeviceInfo;//!< Discovery device information event structure.gapDevDiscEvent_tdiscCmpl;//!< Discovery complete event structure.gapEstLinkReqEvent_tlinkCmpl;//!< Link complete event structure.gapLinkUpdateEvent_tlinkUpdate;//!< Link update event structure.gapTerminateLinkEvent_tlinkTerminate;//!< Link terminated event structure. } gapCentralRoleEvent_t;
讲了那么多无关又好像有关的背景知识后回归主题,现在说出我的困惑。我们追踪代码可以发现这里回调的是simpleBLECentral.c文件下的simpleBLECentralEventCB函数。但是simpleBLECentralEventCB函数和gapCentralRole_ProcessGAPMsg都是通过一个switch分支来选择执行那个分支。那么这样的话,在simpleBLECentralEventCB函数下switch ( pEvent->gap.opcode) 和gapCentralRole_ProcessGAPMsg函数下的switch ( pMsg->opcode )这两个判断条件下的case 常量表达式应该是一样的。。。但是理想很丰满,,,现实让我很矛盾。。。。
比如simpleBLECentralEventCB函数下有 case GAP_DEVICE_INFO_EVENT: 分支 但是呢我在gapCentralRole_ProcessGAPMsg函数下的switch ( pMsg->opcode )怎么没有看到GAP_DEVICE_INFO_EVENT事件啊。这个理解超出我的脑容量啦啊
求TI大神就我。比如Yan大神,Mark_xu大神
mark_xu:
不同层的应用回调,所用的东西不一样,所以有的回调里面有,有的没有,你可以把没有的添加加进去,然后打印一下,自己测试一下,理论上是一样的……