藍芽4.0 BLE

metalseed發表於2014-07-04


讀了N多文件,其中推薦的有:

Webee的《藍芽4.0是戰演練》

Ghostyu的 《BLE權威教程》

1:透穿實現:


利用TI的BLE包裡的工程直接燒

上位裝置用 central,下位裝置用peripheral工程


做以下處理:

central 的NPI初始化時新增uart CB,並在串列埠回撥函式中 直接新增write char函式寫進特徵值(實現上位從串列埠接收並通過藍芽傳送), 使能特徵值通知,並在通知處理事件中將資料從串列埠傳送(實現上位的從藍芽接受並從串列埠傳送)


peripheral在charchangeCB中新增串列埠傳送(實現從藍芽接受,從串列埠傳送),在註冊profile時注意註冊成可通知型別,並在串列埠回撥函式中setchar來設定特徵值(實現從串列埠接受從藍芽傳送)


以上兩個特徵值可以自己註冊。


2:利用cenral或者peripheral等協議棧模板工程定製自己的工程


(1)定義自己的函式(init 及 process)定義函式對應的事件 16位最多16種事件(事件定義位置及形式 參考peripheral.c中 Simple BLE  peripheral Task Events部分)

定義好之後 在協議棧init task部分新增自己函式的init,然後把process函式放在taskarr[]函式陣列最後(參見SimpleBLEeventProcss位置)。

(2)定義好的task events應該與process中的switch選項對應

(3)啟動事件,可以同樣在SimpleTLEperipheral_init()函式的最後用osal_set_events(函式ID,事件)啟動事件。

(要實現週期執行,可在events_process中呼叫延時osal_set_events());

最後最重要的一點是:根據自己工程需求,配置連線方式,上電advertising比較方便。


PS: 如果有新的硬體初始化需求,可以在HL層的common檔案中 halDriveInit()函式中新增,該函式會被main()呼叫。

       GAP及GATT提供的API簡介  見 BLE協議棧中Document中的HTML格式文件。

PSS:event用於同一任務傳遞命令,而message用於不同任務之間命令傳遞。

event見上2,message自定義方法如下:

Comdef.h中給出了使用者自定義message的巨集範圍,根據其範圍可以在app中自定義message

定義message後,在需要用的地方建立訊息結構體:msgpkt = (keyChange_t *)osal_msg_allocate(sizeof(keyChang_t));

msgkpt->hdr.event = KEY_CHANG;

msgpkt->state = state;

msgpkt->keys = keys;

然後傳送即可:osal_msg_send(registeredKeystaskid,uint8 * msgkpt);


最後在接受訊息的函式

MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(SampleApp);

while( MSGpkt

{

    switch( MSGpkt->har.evet )

      case: KEY_CHANG; ````````break;

      case:USER_MSG;```````````break;

})


通用工程模板及通用OSAL模板後續補充。




相關文章