CH582RF_EVT一些問(wèn)題
  1. rf_device中的RF_START_BOUND_EVENT綁定事件,綁定時(shí),會(huì)讀取存過(guò)的對(duì)端地址,會(huì)造成無(wú)法綁定新設(shè)備

    image.png

  2. rf_device 如果執(zhí)行綁定時(shí),將對(duì)端地址設(shè)置為0,此時(shí)會(huì)和之前綁定過(guò)的主機(jī)進(jìn)行綁定,就算主機(jī)退出綁定了

主機(jī)上電綁定超時(shí)后,設(shè)備進(jìn)行綁定操作,主機(jī)會(huì)重復(fù)進(jìn)入rfRoleBoundProcess回調(diào)


https://www.cnblogs.com/azou/category/2391224.html,此博客有做注釋講解。

其中,

1、device端一旦配對(duì)過(guò)就會(huì)將對(duì)方地址存入flash中,如果要解綁,需要在對(duì)應(yīng)dataflash位置清除該地址數(shù)據(jù),也就是調(diào)用DeleteBoundInfo接口,至于ID號(hào)是哪個(gè),可以在綁定回調(diào)中拿到。

2、Host端的綁定做法是,上電后的前三秒允許任意設(shè)備配對(duì),如果在三秒內(nèi)沒(méi)有連接到設(shè)備,超過(guò)三秒后則只會(huì)回連上次配對(duì)過(guò)的設(shè)備。


1、拿一個(gè)device和 Host1 綁定,綁定成功后,此時(shí)device和Host1能夠正常通訊,把Host1關(guān)閉[不上電]。

2、然后在用這個(gè)device和Host2綁定,此時(shí)device和Host2能夠正常通訊,然后把Host1上電

3、此時(shí)在用device執(zhí)行綁定操作,他會(huì)在Host1 和 Host2之前來(lái)回切換綁定


device刪除綁定信息后,對(duì)應(yīng)peer mac信息為全0,之后在host1和host2都上電的情況下,device被誰(shuí)綁定是隨機(jī)的,取決于device先收到來(lái)自于哪個(gè)host的綁定通訊包。

但是device一旦綁定上,并存有一個(gè)host的綁定信息,另一個(gè)host是永遠(yuǎn)都不能再與這個(gè)device通訊(除非在device端刪除綁定信息)。

至于你所說(shuō)的在host1和host2之間來(lái)回綁定,也許是哪邊調(diào)用有誤,可以這樣調(diào)試看看,檢查下綁定信息有沒(méi)有成功清除:

->在device初次上電時(shí),會(huì)首先進(jìn)入到RF_START_BOUND_EVENT這個(gè)任務(wù)中,關(guān)注下bound.PeerInfo數(shù)組并打印出來(lái),查看存儲(chǔ)的是全0,還是兩個(gè)host其中的一個(gè),bound結(jié)構(gòu)體傳入底層后,如果mac地址非0,則只會(huì)接收與peer mac匹配的連接請(qǐng)求包。image.png


一個(gè)device和一個(gè)host執(zhí)行完綁定,且綁定成功,此時(shí)device在繼續(xù)執(zhí)行綁定,這個(gè)host還是繼續(xù)執(zhí)行綁定。

host已經(jīng)執(zhí)行完綁定且成功了,應(yīng)該斷電重啟之后才會(huì)繼續(xù)執(zhí)行綁定吧


抱歉,您表述的方式,我這邊不太能了解具體的問(wèn)題點(diǎn)。

無(wú)論何時(shí),只要發(fā)生斷開(kāi),那么host一定是處于查詢附近是否有設(shè)備能夠連接的狀態(tài)(一直在發(fā)送配對(duì)請(qǐng)求包)。

給出的demo中,Host程序在首次上電運(yùn)行RF_Init()函數(shù)時(shí),可以看到啟動(dòng)了兩個(gè)任務(wù),立即啟動(dòng)的任務(wù)是綁定任意設(shè)備,另一個(gè)三秒后執(zhí)行的任務(wù)是指回連。

image.png


問(wèn)題:主機(jī)在進(jìn)行回連的時(shí)候,會(huì)和設(shè)備進(jìn)行綁定


只要host端存有你這個(gè)device的地址信息或者綁定信息為空,且device端存儲(chǔ)的對(duì)端地址被清除了,那么在host發(fā)出配對(duì)請(qǐng)求包后,device的RF底層會(huì)收到這包數(shù)據(jù),并進(jìn)入RF綁定回調(diào)完成綁定。


1、device和host綁定成功后

2、host進(jìn)入了回連狀態(tài),然后在將device設(shè)置為綁定狀態(tài)

然后,host還是會(huì)和device綁定


您描述的這個(gè)現(xiàn)象是符合當(dāng)前程序邏輯的,

因?yàn)閐evice解除綁定后,意味著peer info信息被清空,且在回連階段會(huì)使用接入地址接收等待Host的配對(duì)信息,而Host端由于發(fā)生斷連,也會(huì)立即使用接入地址進(jìn)行尋找與自己當(dāng)前dataflash中存儲(chǔ)的MAC地址吻合的Device設(shè)備,因此在Device剛進(jìn)入綁定狀態(tài)就會(huì)被Host所連上。

如果在Device解除綁定時(shí)不再想讓當(dāng)前這個(gè)Host所連接,可在Device端解除綁定并且啟動(dòng)RF_START_BOUND_EVENT任務(wù)時(shí),

其中,可做這樣的處理:

????????uint8_t MacAddr[6];

? ? ? ? GetMACAddress( MacAddr );//獲取自身芯片MACADDR信息

? ? ? ? MacAddr[3]++;//對(duì)6字節(jié)MACADDR進(jìn)行處理,使其不要與上一次發(fā)送的配對(duì)包中的自身地址相同即可,此處是一個(gè)演示

? ? ? ? tmos_memcpy(bound.OwnInfo, MacAddr, 6);//將新地址設(shè)備存入bound結(jié)構(gòu)體,在下方存入底層后,Host再收到配對(duì)包后解析會(huì)發(fā)現(xiàn)這個(gè)device會(huì)是一個(gè)新設(shè)備,與上次配對(duì)的Device信息不符,因此就不會(huì)主動(dòng)回連

????????...................

????????RFBound_StartDevice( &bound );



應(yīng)該區(qū)分下回連和綁定的邏輯,主機(jī)回連的時(shí)候,如果device在進(jìn)行綁定,主機(jī)不應(yīng)該響應(yīng)device的綁定。庫(kù)中多增加一個(gè)標(biāo)志,用于區(qū)分回連和綁定,這樣應(yīng)該就不會(huì)有問(wèn)題。


配對(duì)和回連都是我們定義的行為,需要我們?cè)趹?yīng)用層處理,底層是不區(qū)分這些的。


應(yīng)用層不好獲取狀態(tài)

typedef struct

{

? ? bStatus_t status; //!< Status for the connection

? ? /* SUCESS

? ? ?* bleTimeout:When the connection times out, it automatically switches to the bindable state

? ? ?* FAILURE:If the device binding fails on the device side, the application layer needs to restart the binding */

? ? uint8_t role; ? ? //!< the role of the binding

? ? uint8_t devId; ? ?//!< The ID number of the binding

? ? uint8_t devType; ?//!< The device type of the binding

? ? uint8_t periTime; //!< reserved

? ? uint8_t hop; ? ? ?//!< Frequency hopping mode

? ? uint8_t PeerInfo[6]; //!< Information about the peer device

} staBound_t;

這個(gè)是綁定的數(shù)據(jù)結(jié)構(gòu),沒(méi)有能夠判斷綁定和回連的狀態(tài)。


綁定和回連都需要應(yīng)用層判斷,底層只會(huì)根據(jù)應(yīng)用層傳入的SpeedList結(jié)構(gòu)體進(jìn)行連接,不區(qū)分是配對(duì)新設(shè)備,還是回連舊設(shè)備。

Host只負(fù)責(zé)連接跟SpeedList.peerInfo相吻合的deivce設(shè)備,當(dāng)Host發(fā)出配對(duì)包后被符合的device收到且回復(fù)應(yīng)答后(底層處理),雙方都會(huì)立即進(jìn)入rfRoleBoundProcess告知應(yīng)用層連接成功。

所以您不應(yīng)該關(guān)注這個(gè)綁定連接回調(diào)任務(wù),應(yīng)該著重看RFBound_SetSpeedType( &gSpeedList_t );中的gSpeedList_t變量,其中peerInfo[6]數(shù)組是人為定義并傳輸至底層的,因此傳入的這個(gè)數(shù)組如果為空,對(duì)于我們來(lái)說(shuō)就是綁定任意設(shè)備的行為,如果這個(gè)數(shù)組不為空,那么就是回連某一個(gè)特定設(shè)備。image.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频