免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

觀察者 CH58X/CH57X/V208 Observer例程討論講解

使用的是沁恒的CH582M的Observer例程與官方的demo板 。
本例程的功能是主機(jī)掃描到從機(jī)的MAC地址并打印出來(lái) 。
先對(duì)宏定義進(jìn)行理解討論 。

觀察者 CH58X/CH57X/V208 Observer例程討論講解

文章插圖
最大響應(yīng)掃描數(shù)為8,在串口調(diào)試助手那里可以看到打印出的8個(gè)MAC地址 。
這里的白名單是默認(rèn)關(guān)閉的 。
觀察者 CH58X/CH57X/V208 Observer例程討論講解

文章插圖
接下來(lái)對(duì)初始化進(jìn)行討論 。
void Observer_Init(){ObserverTaskId = TMOS_ProcessEventRegister(Observer_ProcessEvent);// Setup Observer Profile{uint8_t scanRes = DEFAULT_MAX_SCAN_RES;GAPRole_SetParameter(GAPROLE_MAX_SCAN_RES, sizeof(uint8_t), &scanRes);}// Setup GAPGAP_SetParamValue(TGAP_DISC_SCAN, DEFAULT_SCAN_DURATION);// Setup a delayed profile startuptmos_set_event(ObserverTaskId, START_DEVICE_EVT);}這里是初始化期間調(diào)用的功能,這里的詳解可以參照CH58X/CH57X/V208的Broadcaster(廣播者)例程講解 - 小舟從此逝_(tái)1 - 博客園 (cnblogs.com)這篇文章 。
接下來(lái)是對(duì)任務(wù)的管理調(diào)度,這里用的是TMOS事件管理 。關(guān)于TMOS的理解具體可以參照WCH TMOS用法詳解 - debugdabiaoge - 博客園 (cnblogs.com)
再次之前我們要了解一下TMOS任務(wù)的調(diào)度,在這里TMOS任務(wù)可以定義16個(gè)其中有15個(gè)自定義,1個(gè)系統(tǒng)任務(wù) 。
【觀察者 CH58X/CH57X/V208 Observer例程討論講解】廣播者的例程里共寫了兩個(gè)任務(wù),首先看到第一個(gè)任務(wù)
if(events & SYS_EVENT_MSG){uint8_t *pMsg;if((pMsg = tmos_msg_receive(ObserverTaskId)) != NULL){Observer_ProcessTMOSMsg((tmos_event_hdr_t *)pMsg);// Release the TMOS messagetmos_msg_deallocate(pMsg);}// return unprocessed eventsreturn (events ^ SYS_EVENT_MSG);}這個(gè)任務(wù)就是唯一的一個(gè)系統(tǒng)任務(wù),這里是在各層協(xié)議棧之間傳遞數(shù)據(jù),這這里是接收消息 。同時(shí)還有這幾個(gè)函數(shù)用于內(nèi)部數(shù)據(jù)的傳遞 。這部分可以參考CH579/CH57x 的TMOS系統(tǒng)使用 - iot-fan - 博客園 (cnblogs.com)對(duì)這部分進(jìn)行更詳盡的了解 。
extern bStatus_t tmos_msg_send( tmosTaskID taskID, uint8_t *msg_ptr );extern uint8_t *tmos_msg_receive( tmosTaskID taskID );extern uint8_t *tmos_msg_allocate( uint16_t len );extern bStatus_t tmos_msg_deallocate( uint8_t *msg_ptr );第二個(gè)任務(wù)則是用戶自定義事件,本例程中只使用了這一個(gè)自定義事件;
if(events & START_DEVICE_EVT){// Start the DeviceGAPRole_ObserverStartDevice((gapRoleObserverCB_t *)&ObserverRoleCB);return (events ^ START_DEVICE_EVT);}// Discard unknown eventsreturn 0;} GAPRole_ObserverStartDevice((gapRoleObserverCB_t *)&ObserverRoleCB);此函數(shù)是觀察者角色啟動(dòng)設(shè)備,在系統(tǒng)啟動(dòng)期間調(diào)用一次 。下面討論的是對(duì)自定義任務(wù)的回調(diào)函數(shù) 。static void ObserverEventCB(gapRoleEvent_t *pEvent){switch(pEvent->gap.opcode){//事件初始化完成之后發(fā)送case GAP_DEVICE_INIT_DONE_EVENT:{GAPRole_ObserverStartDiscovery(DEFAULT_DISCOVERY_MODE,

    經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀