0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Apollo2_ble 中添加一個(gè)service

潤(rùn)欣科技Fortune ? 2019-07-02 09:55 ? 次閱讀

導(dǎo)語(yǔ)

Apollo2_ble模塊硬件由Apollo2(ble host)+ em9304(ble controller)組成。軟件上,使用ARM的Cordio Stack and Profiles協(xié)議棧,這個(gè)協(xié)議棧又是基于WSF(Wireless Software Foundation)實(shí)現(xiàn)的。

Apollo2_ble協(xié)議棧采用的是藍(lán)牙4.2標(biāo)準(zhǔn)。

什么是profile和service?

profile,可以有多種翻譯,在藍(lán)牙技術(shù)聯(lián)盟規(guī)定的藍(lán)牙4.2標(biāo)準(zhǔn)中,定義Bluetooth profiles是用來(lái)實(shí)現(xiàn)藍(lán)牙系統(tǒng)中應(yīng)用的互操作性的。[1]這個(gè)profile的定義就比較廣,本文不做具體描述。本文中的profile和service,都指的是圖1中GATT-Based Profile/Services層的概念,也就是application層的概念。

要談這兩者,首先說(shuō)一下GATT。

圖1 簡(jiǎn)易BLE層次劃分圖

圖1是簡(jiǎn)易的BLE層次劃分,GATT(Generic Attribute Profile)是藍(lán)牙中一種基于ATT協(xié)議(Attribute Protocol)的profile框架(framework)。ATT協(xié)議的初衷,可以說(shuō)是為物聯(lián)網(wǎng)服務(wù)的。在物聯(lián)網(wǎng)時(shí)代,需要傳感器采集各種信息,例如,溫度,濕度,位置,電量等,ATT協(xié)議就將這些信息以屬性(attribute)的形式傳輸?shù)缴蠈?,以供讀取或修改。它規(guī)定了這些屬性的格式,權(quán)限,讀取方式等。而GATT就是將抽象的ATT協(xié)議具體化,規(guī)定了一個(gè)通用的關(guān)于這些屬性如何讀取修改的框架(framework)。到了具體的應(yīng)用場(chǎng)景,我們就可以根據(jù)GATT規(guī)定好的框架,來(lái)編寫對(duì)應(yīng)的GATT-Based Profile。而每一個(gè)profile,其實(shí)是各種services的集合。

舉個(gè)例子,假如我們的應(yīng)用場(chǎng)景是一個(gè)可以測(cè)心率的手環(huán),該手環(huán)除了測(cè)心率的功能,我們還需要它有測(cè)電量的功能。這些不同的功能,其實(shí)就是不同的services。藍(lán)牙技術(shù)聯(lián)盟已經(jīng)通過(guò)了各種不同的GATT services,詳細(xì)列表可以參看文獻(xiàn)[2]。這么多的services,并不是每一個(gè)我們都需要,所以,我們可以自己寫GATT-Based Profile,將我們需要的services包含進(jìn)來(lái)。如上面手環(huán)的例子,這個(gè)profile,就只包含了Heart Rate service和Battery Service。

開始添加service

現(xiàn)在可以開始在Apollo2_ble的SDK中添加我們想要的service了。

本文以fit工程為例。

打開工程后,整個(gè)工程的main函數(shù)入口在src目錄下。(本文的編譯環(huán)境用的是keil)圖2是打開沒(méi)有移植freertos系統(tǒng)的工程目錄,假如移植了freertos,也是同樣在src目錄下,只是freertos系統(tǒng)的main函數(shù)入口在freertos_fit.c文件中,但具體的線程對(duì)應(yīng)的代碼在radio_task.c中,直接到對(duì)應(yīng)線程的C文件中查看即可。

? ?

圖2

圖3

在main函數(shù)或者對(duì)應(yīng)線程中找到函數(shù)FitStart()

圖4

進(jìn)入該函數(shù),找到Initialize attribute server database代碼段如圖5:

圖5

由圖5可知,該profile已經(jīng)添加了4個(gè)services。(注意,4個(gè)中不包括GAP和GATT,這兩個(gè)services是每個(gè)GATT-Based Profile都必須添加的,代碼中由函數(shù)SvcCoreAddGroup進(jìn)行添加)分別是,測(cè)心率的(Heart Rate),讀取設(shè)備信息的(device information),測(cè)電量的(battery service)和測(cè)速率的(running speed and cadence)。

現(xiàn)在假設(shè)我們要新添加一個(gè)HID的service。則首先就要在start函數(shù)里面注冊(cè)這個(gè)service,增加的代碼如下:

圖6

并且將對(duì)應(yīng)的頭文件都包含進(jìn)來(lái):

圖7

svc_hid.h里面聲明了SvcHidRegister和SvcHidAddGroup,而hid_api.h里面聲明了函數(shù)HidAttsWriteCback。

并不是所有的service都需要注冊(cè)讀寫回調(diào)函數(shù),只有當(dāng)Attribute list中的Attribute settings項(xiàng)出現(xiàn)ATTS_SET_WRITE_CBACK或者ATTS_SET_READ_CBACK時(shí)才需要。以fit工程為例,heart rate的Attribute list如下:

圖8

最后一個(gè)attribute需要用到寫回調(diào),因此在fitstart函數(shù)中才需要注冊(cè)寫回調(diào)函數(shù)的入口。

看我們的service有沒(méi)有添加成功,我們可以用手機(jī)打開藍(lán)牙調(diào)試助手:

圖9

下圖10是未添加HID service時(shí)打開調(diào)試工具看到的服務(wù)列表,可以看見本來(lái)除了GAP(generic access profile)和GATT(generic attribute profile)外,有4個(gè)services,與我們?cè)趫D5代碼中所見一致,圖11是我們添加代碼后再打開測(cè)試工具看到的服務(wù)列表,可以看見HID service已經(jīng)添加進(jìn)去了。

圖10

圖11

參考文獻(xiàn):

[1] BLUETOOTH SPECIFICATION Version 4.2 [Vol 1, Part A] page 97

[2] https://www.bluetooth.com/specifications/gatt/services/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9028

    瀏覽量

    366496
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18975

    瀏覽量

    302083
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    esp32啟用ble后用自己的iOS app能夠發(fā)現(xiàn)service,但沒(méi)有發(fā)現(xiàn)service里面的特征,為什么?

    esp32,啟用ble后用自己的iOS app能夠發(fā)現(xiàn)service,但沒(méi)有發(fā)現(xiàn)service里面的特征,創(chuàng)建服務(wù)或特征的時(shí)候需要進(jìn)行什么特別的設(shè)置嗎?
    發(fā)表于 06-13 06:24

    ESP32-C3 BLE client如何連接同一個(gè)server的多個(gè)service?

    最近在做一個(gè)項(xiàng)目需要ESP32-C3作為BLE client 連接同一個(gè)server的兩個(gè)service。 網(wǎng)上的例程都是連接多個(gè)serve
    發(fā)表于 06-13 08:29

    藍(lán)牙開啟自定義服務(wù)之后,添加個(gè)子服務(wù),怎么添加第二子服務(wù)???

    藍(lán)牙開啟自定義服務(wù)之后,添加個(gè)子服務(wù),怎么添加第二子服務(wù)啊 按照我的理解,創(chuàng)建第
    發(fā)表于 06-19 08:32

    例程 ”BLE_GATTS_SPP“,手機(jī)第次連接藍(lán)牙服務(wù)時(shí),怎么添加配對(duì)密碼?

    例程 ”BLE_GATTS_SPP“,手機(jī)第次連接藍(lán)牙服務(wù)時(shí),怎么添加配對(duì)密碼?
    發(fā)表于 07-19 08:28

    怎么更新CyPress PROC的BLE

    BooTo加載項(xiàng)目已經(jīng)包含了個(gè)BLE組件,那么:a.將其移動(dòng)到BeloOthayFixEdtStKyBooToLoLe01項(xiàng)目。b.將Bootloader服務(wù)添加并配置到現(xiàn)有的
    發(fā)表于 12-17 16:22

    Glucose Sensor 下添加個(gè)Service: Current Time(0x1805)問(wèn)題

    Glucose Sensor 下添加個(gè)Service: Current Time(0x1805).用來(lái)設(shè)置儀器時(shí)間。但是不知道怎么用。
    發(fā)表于 09-17 13:31

    apollo2 mcu開發(fā)的相關(guān)資料分享

    接口從外部打開調(diào)試訪問(wèn)允許訪問(wèn)所有的內(nèi)存和外圍設(shè)備的MCU。、Apollo2 MCU 低功耗模式活動(dòng)模式休眠模式深度模式關(guān)機(jī)二、中斷事件有哪些呢?NVIC喚醒中斷控制器退出休眠進(jìn)入休眠,等待中斷MCU
    發(fā)表于 11-01 07:23

    Apollo Heritage版音頻接口附帶的插件

     Universal Audio去年推出的Apollo Heritage版音頻接口提供了5個(gè)或10個(gè)獲獎(jiǎng)的UAD插件,包括Teletronix?、Fairchild?、Pultec?
    發(fā)表于 01-24 08:59

    ESP32-C3 BLE client如何連接同一個(gè)server的多個(gè)service

    最近在做一個(gè)項(xiàng)目需要ESP32-C3作為BLE client 連接同一個(gè)server的兩個(gè)service。網(wǎng)上的例程都是連接多個(gè)server
    發(fā)表于 02-10 08:05

    藍(lán)牙開啟自定義服務(wù)之后,添加個(gè)子服務(wù),怎么添加第二子服務(wù)?。?/a>

    藍(lán)牙開啟自定義服務(wù)之后,添加個(gè)子服務(wù),怎么添加第二子服務(wù)啊[img]https://www.esp32.com/[attachment
    發(fā)表于 02-16 08:59

    如何向BLE網(wǎng)狀節(jié)點(diǎn)添加更多通告的GATT服務(wù)?

    我目前正在使用 Capacitor 框架編寫個(gè)移動(dòng)應(yīng)用程序,我需要該應(yīng)用程序和 ESP-BLE 網(wǎng)格
    發(fā)表于 03-02 06:39

    如何實(shí)現(xiàn)ESP32-C3 BLE client連接同一個(gè)server的多個(gè)service呢?

    最近在做一個(gè)項(xiàng)目需要ESP32-C3作為BLE client 連接同一個(gè)server的兩個(gè)service。網(wǎng)上的例程都是連接多個(gè)server
    發(fā)表于 03-03 08:52

    Apollo添加新的控制算法步驟

    Apollo的控制算法由個(gè)或多個(gè)控制器組成,可以輕松更改或替換為不同的算法。 每個(gè)控制器將個(gè)
    的頭像 發(fā)表于 10-02 11:11 ?5313次閱讀

    apollo系列之apollo2 mcu開發(fā)(基礎(chǔ)篇)之1.1-apollo2 mcu簡(jiǎn)介

    更多內(nèi)容apollo系列匯總Apollo2 mcu的架構(gòu)
    發(fā)表于 10-25 17:36 ?20次下載
    <b class='flag-5'>apollo</b>系列之<b class='flag-5'>apollo2</b> mcu開發(fā)(基礎(chǔ)篇)之1.1-<b class='flag-5'>apollo2</b> mcu簡(jiǎn)介

    個(gè)關(guān)于Apollo2(MCU)時(shí)鐘問(wèn)題引發(fā)的剖析

    最近和硬件同事塊調(diào)個(gè)使用Apollo2的MCU的板子,這種MCU號(hào)稱全球超低功耗MCU之最?!霸垡膊恢?,咱也不敢問(wèn),為什么敢用如此囂張的稱呼?。?!哈哈,開個(gè)玩笑。”言歸正傳,在生
    發(fā)表于 10-28 20:36 ?8次下載
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>關(guān)于<b class='flag-5'>Apollo2</b>(MCU)時(shí)鐘問(wèn)題引發(fā)的剖析