BLE藍牙 40 學習筆記_第1頁
BLE藍牙 40 學習筆記_第2頁
BLE藍牙 40 學習筆記_第3頁
BLE藍牙 40 學習筆記_第4頁
BLE藍牙 40 學習筆記_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、藍牙4.0BLEcenter與peripheral建立連接綁定過程2藍牙4.0 BLE peripheral 廣播設(shè)置7藍牙4.0 BLE 數(shù)據(jù)傳輸 (一)11藍牙4.0 BLE 數(shù)據(jù)傳輸 (二)12藍牙4.0 BLE 數(shù)據(jù)傳輸(三)16藍牙4.0 BLE 數(shù)據(jù)傳輸(四)19藍牙4.0 BLE 數(shù)據(jù)傳輸(五)23藍牙4.0 BLE 程序設(shè)計相關(guān)問題解答(轉(zhuǎn)載)25藍牙4.0 BLE SimpleBLEPeripheral_添加新CHAR值及UUID33藍牙4.0 BLE peripheral 廣播設(shè)置學習筆記(轉(zhuǎn)載)45藍牙4.0 BLE key處理過程看任務(wù)、事件、消息機制50CC254x

2、內(nèi)部存儲結(jié)構(gòu) FLASH53藍牙4.0 BLE FLASH 操作58藍牙4.0BLEcenter與peripheral建立連接綁定過程藍牙主機從機建立連接綁定過程center與simplePeripheral建立連接過程center首先進行osal_init_system()初始化各個任務(wù),SimpleBLECentral_Init-osal_set_event( simpleBLETaskId, START_DEVICE_EVT );進入SimpleBLECentral_ProcessEvent()調(diào)用 VOID GAPCentralRole_StartDevice( (gapCentral

3、RoleCB_t *) &simpleBLERoleCB );/當初始化完成,會發(fā)送GAP_DEVICE_INIT_DONE_EVENT由于注冊了simpleBLERoleCB函數(shù),因此發(fā)送的event由simpleBLERoleCB函數(shù)接收static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )此時pEvent-gap.opcode =GAP_DEVICE_INIT_DONE_EVENT,相應(yīng)信息存儲于pEvent中typedef union gapEventHdr_t gap; /! GAP_MSG_EVENT

4、 and status. gapDeviceInitDoneEvent_t initDone; /! GAP initialization done. gapDeviceInfoEvent_t deviceInfo; /! Discovery device information event structure. gapDevDiscEvent_t discCmpl; /! Discovery complete event structure. gapEstLinkReqEvent_t linkCmpl; /! Link complete event structure. gapLinkUpd

5、ateEvent_t linkUpdate; /! Link update event structure. gapTerminateLinkEvent_t linkTerminate; /! Link terminated event structure. gapCentralRoleEvent_t;聯(lián)合體,只有deviceInfo里面的數(shù)據(jù)是正確的typedef struct osal_event_hdr_t hdr; /! GAP_MSG_EVENT and status uint8 opcode; /! GAP_DEVICE_INIT_DONE_EVENT uint8 devAddrB

6、_ADDR_LEN; /! Devices BD_ADDR uint16 dataPktLen; /! HC_LE_Data_Packet_Length uint8 numDataPkts; /! HC_Total_Num_LE_Data_Packets gapDeviceInitDoneEvent_t;能獲得如設(shè)備地址等信息 設(shè)備初始化完成 通過串口發(fā)送1觸發(fā)設(shè)備發(fā)現(xiàn)進行設(shè)備掃描GAP_DEVICE_INFO_EVENT 0x0D /! Sent during the Device Discovery Process when a device is discovered.GAP_DEVIC

7、E_DISCOVERY_EVENT 0x01 /! Sent when the Device Discovery Process is complete.當發(fā)現(xiàn)一個設(shè)備時,觸發(fā)一個設(shè)備info事件同樣是在simpleBLECentralEventCB處理此時pEvent改變?yōu)閐eviceInfo可以獲得廣告設(shè)備的類型,地址。rssi強度,還有廣告數(shù)據(jù),內(nèi)容如下。typedef struct osal_event_hdr_t hdr; /! GAP_MSG_EVENT and status uint8 opcode; /! GAP_DEVICE_INFO_EVENT uint8 eventTyp

8、e; /! Advertisement Type: ref GAP_ADVERTISEMENT_TYPE_DEFINES uint8 addrType; /! address type: ref GAP_ADDR_TYPE_DEFINES uint8 addrB_ADDR_LEN; /! Address of the advertisement or SCAN_RSP int8 rssi; /! Advertisement or SCAN_RSP RSSI uint8 dataLen; /! Length (in bytes) of the data field (evtData) uint8

9、 *pEvtData; /! Data field of advertisement or SCAN_RSP gapDeviceInfoEvent_t; center代碼是通過設(shè)備服務(wù)器的uuid來查找設(shè)備,一旦找到相應(yīng)的設(shè)備,將設(shè)備加入設(shè)備表simpleBLEDevList中simpleBLEScanRes掃描到的個數(shù)自加一。typedef struct uint8 eventType; /! Indicates advertising event type used by the advertiser: GAP_ADVERTISEMENT_TYPE_DEFINES uint8 addrTy

10、pe; /! Address Type: ref GAP_ADDR_TYPE_DEFINES uint8 addrB_ADDR_LEN; /!deviceInfo.pEvtData, pEvent-deviceInfo.dataLen ) ) / HalUARTWrite(0,infon,sizeof(infon);/dataLen 數(shù)據(jù)長度 pEvtData 數(shù)據(jù) simpleBLEAddDeviceInfo( pEvent-deviceInfo.addr, pEvent-deviceInfo.addrType ); break;此時已經(jīng)獲得了掃描到的設(shè)備個數(shù),以及設(shè)備地址,還有廣告內(nèi)容等信

11、息。 通過串口發(fā)送3來 建立連接建立連接:typedef struct uint8 taskID; /! Requesting App/Profiles Task ID uint8 highDutyCycle; /! TRUE to high duty cycle scan, FALSE if not. uint8 whiteList; /! Determines use of the white list: ref GAP_WHITELIST_DEFINES uint8 addrTypePeer; /! Address type of the advertiser: ref GAP_ADDR

12、_TYPE_DEFINES uint8 peerAddrB_ADDR_LEN; /! Advertisers address gapEstLinkReq_t; 調(diào)用 GAP_EstablishLinkReq(gapEstLinkReq_t params );完成后發(fā)送GAP_LINK_ESTABLISHED_EVENT,由simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )處理#define GAP_LINK_ESTABLISHED_EVENT 0x05 /! Sent when the Establish Link Request

13、is complete. 用此時pEvent變?yōu)椋簍ypedef struct osal_event_hdr_t hdr; /! GAP_MSG_EVENT and status uint8 opcode; /! GAP_LINK_ESTABLISHED_EVENT uint8 devAddrType; /! Device address type: ref GAP_ADDR_TYPE_DEFINES uint8 devAddrB_ADDR_LEN; /! Device address of link uint16 connectionHandle; /! Connection Handle

14、from controller used to ref the device uint16 connInterval; /! Connection Interval uint16 connLatency; /! Conenction Latency uint16 connTimeout; /! Connection Timeout uint8 clockAccuracy; /! Clock Accuracy gapEstLinkReqEvent_t;可以得到設(shè)備地址。連接的handle連接完成連接過程中發(fā)送START_DISCOVERY_EVT事件進行服務(wù)器發(fā)現(xiàn)。就可以對相應(yīng)的handle,c

15、haracteristic value進行讀寫操作,或者用于向主機,從機發(fā)送數(shù)據(jù)。獲得服務(wù)器相應(yīng)特性值的handle有三種方法:1.通過主服務(wù)的uuid(uuid已知)來查找。bStatus_t GATT_DiscPrimaryServiceByUUID (uint16 connHandle,/ 連接的handleuint8 * pValue, / uuiduint8 len, / uuid的長度uint8 taskId / 接收消息的任務(wù)ID)發(fā)送 ATT_FIND_BY_TYPE_VALUE_RSP 或者 ATT_ERROR_RSP由相應(yīng)任務(wù)接收處理static void simpleBL

16、EGATTDiscoveryEvent( gattMsgEvent_t *pMsg )通過此函數(shù)進行通過UUID來查找相應(yīng)的Handle進行對特性值的相關(guān)操作。2.查找所有的服務(wù)bStatus_t GATT_DiscAllPrimaryServices (uint16 connHandle,/連接handleuint8 taskId /接收消息的任務(wù)ID) osal_start_timerEx( simpleBLETaskId, START_DISCOVERY_EVT, DEFAULT_SVC_DISCOVERY_DELAY );到此連接完成。 3、GATT_DiscAllCharDescs(

17、) 這個接口,這個能自動把所有service 查找完,應(yīng)該能發(fā)現(xiàn)你要的UUID。 最后終止連接:調(diào)用GAP_TerminateLinkReq(任務(wù)id,handle)發(fā)送斷開連接eventGAP_LINK_TERMINATED_EVENT 又一次調(diào)用 simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent ) typedef struct osal_event_hdr_t hdr; /! GAP_MSG_EVENT and status uint8 opcode; /! GAP_LINK_ESTABLISHED_EVENT uint8 de

18、vAddrType; /! Device address type: ref GAP_ADDR_TYPE_DEFINES uint8 devAddrB_ADDR_LEN; /! Device address of link uint16 connectionHandle; /! Connection Handle from controller used to ref the device uint16 connInterval; /! Connection Interval uint16 connLatency; /! Conenction Latency uint16 connTimeou

19、t; /! Connection Timeout uint8 clockAccuracy; /!method = ATT_READ_RSP ) | ( ( pMsg-method = ATT_ERROR_RSP ) & ( pMsg-msg.errorRsp.reqOpcode = ATT_READ_REQ ) ) ) /判斷是不是讀數(shù)據(jù) if ( pMsg-method = ATT_ERROR_RSP )/獲取錯誤信息 uint8 status = pMsg-msg.errorRsp.errCode; LCD_WRITE_STRING_VALUE( Read Error, status, 1

20、0, HAL_LCD_LINE_1 ); else / After a successful read, display the read value uint8 valueRead = pMsg-msg.readRsp.value0; /取出消息包中從機發(fā)送過來的數(shù)據(jù) LCD_WRITE_STRING_VALUE( Read rsp:, valueRead, 10, HAL_LCD_LINE_1 ); 2、從機接收主機發(fā)來的數(shù)據(jù)當從機接收來自主機發(fā)來的數(shù)據(jù)后,從機會產(chǎn)生一個GATT Profile Callback調(diào)用,我們在這個callback中接收主機發(fā)送的數(shù)據(jù)。這個callback在從

21、機初始化時向profile注冊。到此為止,我們至少得理清這條線索:主機通過BLE提供的數(shù)據(jù)發(fā)送接口發(fā)送數(shù)據(jù)后,從機的協(xié)議棧接收到數(shù)據(jù)后,做相應(yīng)處理,取得自己需要的數(shù)據(jù)即可。其他工作,都由BLE協(xié)議棧自動完成。并且在這里我們得清楚,用write和read來發(fā)送和獲取特征值的方式方式只適用于主機,只主機主動發(fā)起的。而從機若想主動發(fā)送數(shù)據(jù)給主機那么我們就只能用notification的方式發(fā)送。我們的主機一半作為GATT層的client,而從機一半作為service。藍牙4.0 BLE 數(shù)據(jù)傳輸(三)上一回我們談到了數(shù)據(jù)傳輸?shù)倪^程以及如何發(fā)送和接收數(shù)據(jù),那么今天我們談?wù)勌卣髦?。首先看一下SIG給出的定義一個特點是用屬性以及如何訪問該值的配置信息和關(guān)于如何的值是顯示或為代表的信息服務(wù)中的值。特征值在GATT的分類,再來看SIG的定義:在GATT層中,一個特征是由其特性的定義定義的。特征定義包含特性的宣言、特征屬性和一個值,并且可能包含描述符描

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論