BLE主機的連接到收發數據的過程
BLE的連接過程,一般的典型過程是按照 "掃描>連接>服務發現>使能cccd>發送接收數據"
1,掃描
這里的掃描,就是主機端開啟掃描后,去得到從機的廣播數據,能夠得到的數據有:
- MAC地址
- 31字節廣播或者掃描回復數據(名稱,自定義信息都在這里面,通常需要做解析)
- 信號強度
在掃描時候,我們既然可以得到這些數據,我們就可以根據這些來決定哪些從機是我們需要連接的從機,比如通過名稱,或者自定義的信息
2,連接
這里的連接,實際上是根據上面掃描過程中,得到的MAC地址以及MAC地址類型進行連接
3,service和characteristic的發現
連上以后,要進行相關的service和characteristic發現,來得到行營的GATT handle,因為通信時候,要根據這些handle來收發數據,類似以太網的TCP/UDP 端口號之類的
4,使能cccd(開啟notify)
這里的使能CCCD, 是當從機的characteristic具備notify/indicate主動發數據給主機的屬性時候,這時候主機端往往需要主動去使能這些,否則從機不能夠主動發送(當然從機也可以在本機主動開啟)
5,接收或者發送數據
write/write_no_respone
通常是主機對從機的操作,主機給從機發數據一般用這個命令,這一步依賴上面查到的gatt handle,當然,如果是事先知道這些handle,是可以直接發送,而不需要進行service和characteristic的發現
其中write_no_respone 不需要從機協議棧回復,這樣連接開銷小一些,在要求速度的場景,往往使用這個.
read
通常是主機對從機的操作,這一步依賴上面查到的gatt handle,當然,如果是事先知道這些handle,是可以直接發送,而不需要進行service和characteristic的發現
notify /indicate
通常這是從機對主機的操作,從機給主機發送數據一般用這個命令,由於主機是被動接收,所以接收時候往往是根據回掉函數得到相應的數據
但是notify /indicate 往往需要事先使能cccd從機那邊才能夠發送出來數據,所以根據實際情況,來執行 使能cccd(開啟notify)
根據上面查到的characteristic value的gatt handle 用wrtie
其中notify不需要主機協議棧回復,這樣連接開銷小一些,在要求速度的場景,往往使用這個