上一篇:藍牙 Mesh SDK 快速上手 | 《無需從0開發 平頭哥教你1天上手藍牙Mesh應用解決方案》第三章>>>
點擊免費下載
《無需從0開發 平頭哥教你1天上手藍牙Mesh應用解決方案》>>>
1.1目的
這裡以Mesh Model組件裡已有的vendor model為例,介紹如何開發自己私有的Mesh model
1.2 基本概念
開發Mesh Model前先了解一些基本的概念:
元素:元素(Element)是節點中可尋址的最小單元,分為主要元素和次要元素,簡單的節點通常只包含一個主要元素,元素通常由一個或者多個模型(model)組成
模型:Mesh model是藍牙 Mesh 協議中基礎業務單元,一個或者多個模型對應特定的業務,模型又分為服務模型(Server Model)以及終端模型(Client Model);mesh 模型可分為基礎模型(Foundation Model)、通用模型(Generic Model)、以及廠家自定義模型(Vendor Model),用戶使用基礎模型和通用模型通常能組合出大部分應用,也可以開發私有Mesh Model實現自定義的服務
狀態:state描述的模型的屬性,給其它模型提供屬性進行操作的的是Server Model;對其它模型狀態進行操作的模型是Client Model
消息:藍牙Mesh網絡中所有的交互都是通過消息(message)完成的,定義消息的目的是為了完成對狀態的操作
1.3 vendor model 設計
這裡以Mesh組件已有vendor model中自動配網屬性設計為例,介紹vendor model開發流程.vendor model設計主要包含消息回調函數設計以及消息api設計
1.3.1 消息回調函數實現
Mesh model消息回調函數的設計主要基於btmeshmodel_op(結構體),該結構體定義如下
以下為 Mesh 組件已有 vendor srv model 部分消息回調函數實現
1.3.2 消息 api 實現
對於 Mesh srv/cli 模型,大多數情況下是通過 cli 模型主動操作,srv model 通過消息回調函數被動響應的模式,因此設計主要是 cli model 的 api, 這裡涉及 VENDOROPATTRMESHAUTOCONFIG 以 及VENDOROPATTRMESHAUTOCONFIG_GET 兩條 api, 該類 api 的設計方法如下:
1.3.3 model 結構體實現
實現消息回調函數及mesh api設計後,將消息回調函數結構體填充到BTMesh MODEL_VND( 結構體 ),參見該結構體定義。
以下為 Mesh 組件已有 vendor srv model pub 實現。
struct bt_mesh_model_pub g_vendor_srv_model_alibaba_pub = {
.msg = NET_BUF_SIMPLE(3 + 377 + 4), // 這裡只定義了 pub 消息所使用的地址 };
如下為 Mesh 組件已有 vendor srv model 實現,至此就完成了一個私有Mesh
model 的設計。
#define MESH_MODEL_VENDOR_SRV(_user_data) BT_MESH_MODEL_VND(BT_MESH_MODEL_ VND_COMPANY_ID,
BT_MESH_MODEL_VND_MODEL_SRV,g_vendor_srv_model_alibaba_op,&g_
vendor_srv_model_alibaba_pub, _user_data)