天猫精灵蓝牙mesh协议栈demo解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文档简单主要介绍如何基于天猫精灵蓝牙mesh协议栈进行产品开发,对目前代码中的light demo进行说明。

一、项目代码路径与编译

1.1 项目代码路径
light demo项目工程位于协议栈代码app/example/bluetooth/light目录下。如果需要创建一个新工程,可以在bluetooth目录下参照light工程创建对应的工程文件夹。

1.2 编译指令
天猫精灵蓝牙mesh协议栈编译指令为:aos make bluetooth.project_name@chip_name
light demo的编译指令为aos make bluetooth.light@chip_name。
比如采用telink8250芯片,对应编译指令aos make bluetooth.light@tc825x
或者采用nordic10040芯片,对应编译指令aos make bluetooth.light@pca10040
注:以上编译指令如果对编译环境有要求,需要联系芯片厂商提供对应对编译环境安装包。编译生成对bin文件位于根目录out目录下。

二、应用层接口

基于天猫精灵蓝牙mesh协议栈开发一个产品,原则上对接实现3个软件接口即可完整对接整个蓝牙mesh功能。
需要对接的3个软件接口如下:
• 设备模型定义
• 设备默认组播设置
• 协议栈事件响应
2.1 设备模型定义
根据设备需要实现的具体功能,定义设备模型;demo中定义的灯模型具备开关、亮度调节、色温调节功能,所以定义的设备模型如下:
Primary Element Configuration Server Model

Health Server Model
Generic OnOff Server Model
Lightness Server Model
CTL Server Model
Vendor Server Model
AI 代码解读

注:上述模型中,Lightness Server依赖于Generic Level Server,CTL Server依赖于CTL Setup Server。
代码如下:
static struct bt_mesh_model element_models[] = {

BT_MESH_MODEL_CFG_SRV(),
BT_MESH_MODEL_HEALTH_SRV(),

MESH_MODEL_GEN_ONOFF_SRV(&g_elem_state[0]),
MESH_MODEL_GEN_LEVEL_SRV(&g_elem_state[0]),
MESH_MODEL_LIGHTNESS_SRV(&g_elem_state[0]),
MESH_MODEL_CTL_SRV(&g_elem_state[0]),
MESH_MODEL_CTL_SETUP_SRV(&g_elem_state[0]),
AI 代码解读

};

2.2 设备默认组播设置
根据灯品类产品规范,灯需要默认绑定组播地址为0xC000和0xCFFF。
代码如下:

#define DEFAULT_MESH_GROUP1 0xC000
#define DEFAULT_MESH_GROUP2 0xCFFF
AI 代码解读

void mesh_sub_init(u16_t *p_sub)
{

uint16_t sub_list[CONFIG_BT_MESH_MODEL_GROUP_COUNT];
memset(sub_list, 0, sizeof(sub_list));
AI 代码解读
#ifdef DEFAULT_MESH_GROUP1
    sub_list[0] = DEFAULT_MESH_GROUP1;
#endif
AI 代码解读
#ifdef DEFAULT_MESH_GROUP2
    sub_list[1] = DEFAULT_MESH_GROUP2;
#endif
AI 代码解读
memcpy(p_sub, sub_list, sizeof(sub_list));
AI 代码解读

}

2.3 协议栈事件响应
该软件接口主要处理协议栈触发的具体事件,代码如下:
void user_event(E_GENIE_EVENT event, void *p_arg)
{

E_GENIE_EVENT next_event = event;

switch(event) {
    case GENIE_EVT_SW_RESET:
    case GENIE_EVT_HW_RESET_START:
        BT_DBG_R("FLASH x5");
        led_flash(5);
        reset_light_para();
        break;
    case GENIE_EVT_SDK_MESH_INIT:
        user_init();
        if (!genie_reset_get_flag()) {
            next_event = GENIE_EVT_SDK_ANALYZE_MSG;
        }
        break;
    case GENIE_EVT_SDK_MESH_PROV_SUCCESS:
        BT_DBG_R("FLASH x3");
        led_flash(3);
        break;
    case GENIE_EVT_SDK_TRANS_CYCLE:
    case GENIE_EVT_SDK_ACTION_DONE:
    {
        S_ELEM_STATE *p_elem = (S_ELEM_STATE *)p_arg;
        _led_set(p_elem->elem_index, p_elem->state.onoff[T_CUR], p_elem->state.actual[T_CUR], p_elem->state.temp[T_CUR]);
        if(event == GENIE_EVT_SDK_ACTION_DONE)
            save_light_state(p_elem);
        break;
    }
    case GENIE_EVT_SDK_INDICATE:
        break;
    case GENIE_EVT_SDK_VENDOR_MSG:
    {
        vendor_model_msg_handle((vnd_model_msg *)p_arg);
        break;
    }
    case GENIE_EVT_HW_RESET_DONE:
        printk("GENIE_EVT_HW_RESET_DONE\n");
        break;
    default:
        break;
}

if(next_event != event) {
    genie_event(next_event, p_arg);
}
AI 代码解读

}

2.4 协议栈事件说明
GENIE_EVT_SW_RESET
GENIE_EVT_HW_RESET_START
GENIE_EVT_SDK_MESH_INIT
GENIE_EVT_SDK_MESH_PROV_SUCCESS
GENIE_EVT_SDK_TRANS_CYCLE
GENIE_EVT_SDK_ACTION_DONE
GENIE_EVT_SDK_INDICATE
GENIE_EVT_SDK_VENDOR_MSG
GENIE_EVT_HW_RESET_DONE

目录
打赏
0
0
0
2
3
分享
相关文章
自己动手编写tcp/ip协议栈1:tcp包解析
学习tuntap中的tun的使用方法,并使用tun接口解析了ip包和tcp包,这是实现tcp/ip协议栈的第一步。
35 15
DNS协议详解
通过本文,您可以全面了解DNS协议的各个方面,从而更好地理解和应用这一重要的互联网基础服务。
97 44
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
180 3
|
2月前
|
Modbus协议深入解析
Modbus协议是由Modicon公司(现施耐德电气)于1979年发明的串行通信协议,主要用于工业自动化系统中的PLC通信。本文深入解析了Modbus协议的主从模式、数据类型(线圈、离散输入、保持寄存器、输入寄存器)、帧结构和通信过程,并介绍了其应用场景和重要性。
84 0
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
108 3
|
3月前
|
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
113 5
OSPF与其他IGP协议的比较:全面解析与应用场景
OSPF与其他IGP协议的比较:全面解析与应用场景
96 0
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
199 3
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
232 2
|
4月前
|
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
276 3

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等