精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在Apollo2_ble 中添加一個service

潤欣科技Fortune ? 2019-07-02 09:55 ? 次閱讀

導語

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

Apollo2_ble協議棧采用的是藍牙4.2標準。

什么是profile和service?

profile,可以有多種翻譯,在藍牙技術聯盟規定的藍牙4.2標準中,定義Bluetooth profiles是用來實現藍牙系統中應用的互操作性的。[1]這個profile的定義就比較廣,本文不做具體描述。本文中的profile和service,都指的是圖1中GATT-Based Profile/Services層的概念,也就是application層的概念。

要談這兩者,首先說一下GATT。

圖1 簡易BLE層次劃分圖

圖1是簡易的BLE層次劃分,GATT(Generic Attribute Profile)是藍牙中一種基于ATT協議(Attribute Protocol)的profile框架(framework)。ATT協議的初衷,可以說是為物聯網服務的。在物聯網時代,需要傳感器采集各種信息,例如,溫度,濕度,位置,電量等,ATT協議就將這些信息以屬性(attribute)的形式傳輸到上層,以供讀取或修改。它規定了這些屬性的格式,權限,讀取方式等。而GATT就是將抽象的ATT協議具體化,規定了一個通用的關于這些屬性如何讀取修改的框架(framework)。到了具體的應用場景,我們就可以根據GATT規定好的框架,來編寫對應的GATT-Based Profile。而每一個profile,其實是各種services的集合。

舉個例子,假如我們的應用場景是一個可以測心率的手環,該手環除了測心率的功能,我們還需要它有測電量的功能。這些不同的功能,其實就是不同的services。藍牙技術聯盟已經通過了各種不同的GATT services,詳細列表可以參看文獻[2]。這么多的services,并不是每一個我們都需要,所以,我們可以自己寫GATT-Based Profile,將我們需要的services包含進來。如上面手環的例子,這個profile,就只包含了Heart Rate service和Battery Service。

開始添加service

現在可以開始在Apollo2_ble的SDK中添加我們想要的service了。

本文以fit工程為例。

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

? ?

圖2

圖3

在main函數或者對應線程中找到函數FitStart()

圖4

進入該函數,找到Initialize attribute server database代碼段如圖5:

圖5

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

現在假設我們要新添加一個HID的service。則首先就要在start函數里面注冊這個service,增加的代碼如下:

圖6

并且將對應的頭文件都包含進來:

圖7

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

并不是所有的service都需要注冊讀寫回調函數,只有當Attribute list中的Attribute settings項出現ATTS_SET_WRITE_CBACK或者ATTS_SET_READ_CBACK時才需要。以fit工程為例,heart rate的Attribute list如下:

圖8

最后一個attribute需要用到寫回調,因此在fitstart函數中才需要注冊寫回調函數的入口。

看我們的service有沒有添加成功,我們可以用手機打開藍牙調試助手:

圖9

下圖10是未添加HID service時打開調試工具看到的服務列表,可以看見本來除了GAP(generic access profile)和GATT(generic attribute profile)外,有4個services,與我們在圖5代碼中所見一致,圖11是我們添加代碼后再打開測試工具看到的服務列表,可以看見HID service已經添加進去了。

圖10

圖11

參考文獻:

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9057

    瀏覽量

    366881
  • 嵌入式
    +關注

    關注

    5072

    文章

    19026

    瀏覽量

    303524
收藏 人收藏

    評論

    相關推薦

    esp32啟用ble后用自己的iOS app能夠發現service,但沒有發現service里面的特征,為什么?

    esp32,啟用ble后用自己的iOS app能夠發現service,但沒有發現service里面的特征,創建服務或特征的時候需要進行什么特別的設置嗎?
    發表于 06-13 06:24

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

    最近在做一個項目需要ESP32-C3作為BLE client 連接同一個server的兩service。 網上的例程都是連接多個serve
    發表于 06-13 08:29

    藍牙開啟自定義服務之后,添加子服務,怎么添加第二子服務啊?

    藍牙開啟自定義服務之后,添加子服務,怎么添加第二子服務啊 按照我的理解,創建第
    發表于 06-19 08:32

    例程 ”BLE_GATTS_SPP“,手機第次連接藍牙服務時,怎么添加配對密碼?

    例程 ”BLE_GATTS_SPP“,手機第次連接藍牙服務時,怎么添加配對密碼?
    發表于 07-19 08:28

    怎么更新CyPress PROC的BLE

    BooTo加載項目已經包含了BLE組件,那么:a.將其移動到BeloOthayFixEdtStKyBooToLoLe01項目。b.將Bootloader服務添加并配置到現有的
    發表于 12-17 16:22

    Glucose Sensor 下添加Service: Current Time(0x1805)問題

    Glucose Sensor 下添加Service: Current Time(0x1805).用來設置儀器時間。但是不知道怎么用。
    發表于 09-17 13:31

    apollo2 mcu開發的相關資料分享

    接口從外部打開調試訪問允許訪問所有的內存和外圍設備的MCU。Apollo2 MCU 低功耗模式活動模式休眠模式深度模式關機二、中斷事件有哪些呢?NVIC喚醒中斷控制器退出休眠進入休眠,等待中斷MCU
    發表于 11-01 07:23

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

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

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

    最近在做一個項目需要ESP32-C3作為BLE client 連接同一個server的兩service。網上的例程都是連接多個server
    發表于 02-10 08:05

    藍牙開啟自定義服務之后,添加子服務,怎么添加第二子服務啊?

    藍牙開啟自定義服務之后,添加子服務,怎么添加第二子服務啊[img]https://www.esp32.com/[attachment
    發表于 02-16 08:59

    如何向BLE網狀節點添加更多通告的GATT服務?

    我目前正在使用 Capacitor 框架編寫移動應用程序,我需要該應用程序和 ESP-BLE 網格
    發表于 03-02 06:39

    如何實現ESP32-C3 BLE client連接同一個server的多個service呢?

    最近在做一個項目需要ESP32-C3作為BLE client 連接同一個server的兩service。網上的例程都是連接多個server
    發表于 03-03 08:52

    Apollo添加新的控制算法步驟

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

    apollo系列之apollo2 mcu開發(基礎篇)之1.1-apollo2 mcu簡介

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

    關于Apollo2(MCU)時鐘問題引發的剖析

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