关于服务发现的一些疑问?如ANCS的服务
在
timeAppDiscStart( void )
{
// Clear handle cache
osal_memset( timeAppHdlCache, 0, sizeof(timeAppHdlCache) );
// Start discovery with first service
return timeAppDiscGattMsg( DISC_ANCS_START, NULL );
}
中调用imeAppDiscGattMsg( DISC_ANCS_START, NULL );其中第二个参数是NULL,进入该函数中去之后,选择执行了
switch ( state & 0xF0 )
{
// Alert notification service
case DISC_ANCS_START:
state = TimeAppDiscAlertNtf( state, pMsg );的函数,pMsg是为NULL的,那在 TimeAppDiscAlertNtf( uint8 state, gattMsgEvent_t *pMsg )中,
if ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP &&
pMsg->msg.findByTypeValueRsp.numInfo > 0 )pMsg的值是哪里来的?
gang,
if ( pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP &&
pMsg->msg.findByTypeValueRsp.numInfo > 0 )
这个判断是在查找到相应的服务之后的返回。
timeAppDiscStart()之后会有一系列自动的过程,有很多状态机,你可以参考一下 DISC_CURR_TIME_START 的流程。
比如,return timeAppDiscGattMsg( DISC_CURR_TIME_START, NULL ); 只是触发服务查找,不需要注册事件。相应的处理可以参考 TimeAppDiscCurrTime(),里面有对这个事件的处理。之后的DISC_CURR_TIME_SVC 才是有对返回的事件的处理。