1. 程式人生 > >藍芽4.0 BLE 資料傳輸(五)

藍芽4.0 BLE 資料傳輸(五)

原文地址:http://blog.sina.com.cn/s/blog_869234dc0102uxse.html

相信看了《藍芽4.0 BLE  資料傳輸(四)》,大家應該知道怎麼通過傳送特徵值來控制CC2540了,不說別的,就用這個,點亮一個LED就能忽悠一下我們老師,期末肯定不掛科........

 回憶一下我的初戀,初戀在初中,記得那時候沒有手機什麼的,談戀愛也要偷偷摸摸的,跟小女朋友表白,也顯得很羞射~我記得初戀的表白是讓哥們給我遞的小紙條來著。不過高中了就不一樣了,高中看到漂亮妹子就直接上去要號碼了。。。。說這麼多好像是廢話哈,哈哈哈~其實我想說的是,表白無非是兩種方式,一種是通過第三方傳達你的愛慕之情,另外一種則是你自己直接出擊,兩種的有一共同點-------都是你在表白。同樣,我們的從service給client傳遞資料也有兩種方式:第一種:直接通過GATT_Notification()這個函式來通知client第二種:通過GATTServApp_ProcessCharCfg()這個函式間接的通知client為什麼說GATTServApp_ProcessCharCfg()是一種間接方式呢?原因是GATTServApp_ProcessCharCfg()再會讓主機向slave去傳送一個
read的請求,然後呼叫 simpleProfile_ReadAttrCB()函式,然後再執行裡面的賦值語句case SIMPLEPROFILE_CHAR4_UUID:*pLen = 1;
pValue[0] = *pAttr->pValue;
break;那麼如果notification已經被使能,GATTServApp_ProcessCharCfg()函式內部還是會呼叫GATT_Notification()函式,所以我就說GATTServApp_ProcessCharCfg()是一種間接傳送notification的方式,現在大家明白了吧?還不懂?那就看程式碼:1、GATTServApp_ProcessCharCfg方式:
case SIMPLEPROFILE_CHAR4:  if ( len == sizeof ( uint8 ) ) {  simpleProfileChar4 = *((uint8*)value);  GATTServApp_ProcessCharCfg( simpleProfileChar4Config, &simpleProfileChar4, FALSE,                                                simpleProfileAttrTbl, GATT_NUM_ATTRS( simpleProfileAttrTbl ), INVALID_TASK_ID );
直接呼叫這一句就可以了,我們來看一下這裡面的引數,@1:特徵表配置引數,@2:傳遞的資料,@3:判斷是否經過省份驗證,TURE   FALSE@4:屬性表@5:在屬性表中屬性的數目@6:任務的確認通知接下來,函式的內部會自動呼叫simpleProfile_ReadAttrCB()  這個函式, 這個函式再根據UUID做相應的操作,比如說賦值:      case SIMPLEPROFILE_CHAR4_UUID:        *pLen = 1;        pValue[0] = *pAttr->pValue;        break;這樣,就完成了傳送通知,當然我們省略了填寫屬性表的步驟(這個前面講過了就不說了)。2、GATT_Notification方式這個簡單,直接上程式碼        static attHandleValueNoti_t pReport ;//宣告attHandleValueNoti_t這個結構體        uint16 noti_cHandle; //存放handle        pReport.handle = simpleProfileAttrTbl[11].handle;//讀取notification對應的handle        GAPRole_GetParameter( 0x30E, &noti_cHandle);//獲取Connection Handle        pReport.len = 1;//資料長度        pReport.value[0] = 0x03;//賦值        GATT_Notification(noti_cHandle,&pReport,FALSE);這樣 是不是一目瞭然?,當然如果我們要用notification的話,建議使用直接呼叫GATT_Notification函式這種方式。好了今天就到這裡。。。。。如果有什麼疑問歡迎來詢問