天猫精灵蓝牙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

注:上述模型中,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]),

};

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

#define DEFAULT_MESH_GROUP1 0xC000
#define DEFAULT_MESH_GROUP2 0xCFFF

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));
#ifdef DEFAULT_MESH_GROUP1
    sub_list[0] = DEFAULT_MESH_GROUP1;
#endif
#ifdef DEFAULT_MESH_GROUP2
    sub_list[1] = DEFAULT_MESH_GROUP2;
#endif
memcpy(p_sub, sub_list, sizeof(sub_list));

}

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);
}

}

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

相关文章
|
3月前
|
XML 监控 网络协议
云深处绝影四足机器人协议学习解析
本文详细介绍并解析了云深处绝影X20四足机器人的通信协议,包括TCP服务端端口号、基于Service的请求/响应通信机制、通信帧结构、消息类型、常见的通信示例如获取状态和导航请求,以及运动控制的参数和命令。文中还提出了对协议中某些未明确说明或可能存在的问题的疑惑。
38 0
云深处绝影四足机器人协议学习解析
|
17天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
75 3
|
2月前
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
103 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
|
3月前
|
缓存 网络协议 安全
【网络攻防战】DNS协议的致命弱点:如何利用它们发动悄无声息的网络攻击?
【8月更文挑战第26天】DNS(域名系统)是互联网的关键组件,用于将域名转换为IP地址。然而,DNS协议存在安全漏洞,包括缺乏身份验证机制、缓存中毒风险及放大攻击的可能性。通过具体案例,如DNS缓存中毒和DNS放大攻击,攻击者能够误导用户访问恶意站点或对目标服务器实施DDoS攻击。为了防范这些威胁,可以采用DNSSEC实现数字签名验证、利用加密的DNS服务(如DoH或DoT)、限制DNS服务器响应以及及时更新DNS软件等措施。理解并应对DNS的安全挑战对于确保网络环境的安全至关重要。
89 2
|
2月前
|
前端开发 JavaScript 安全
深入解析 http 协议
HTTP(超文本传输协议)不仅用于传输文本,还支持图片、音频和视频等多种类型的数据。当前广泛使用的版本为 HTTP/1.1。HTTPS 可视为 HTTP 的安全增强版,主要区别在于添加了加密层。HTTP 请求和响应均遵循固定格式,包括请求行/状态行、请求/响应头、空行及消息主体。URL(统一资源定位符)用于标识网络上的资源,其格式包含协议、域名、路径等信息。此外,HTTP 报头提供了附加信息,帮助客户端和服务端更好地处理请求与响应。状态码则用于指示请求结果,如 200 表示成功,404 表示未找到,500 表示服务器内部错误等。
41 0
深入解析 http 协议
|
2月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
64 3
|
27天前
|
存储 C++
栈的深度解析:顺序栈与链栈的实现
栈的深度解析:顺序栈与链栈的实现
|
3月前
|
存储 前端开发 JavaScript
深入Web前端:栈与堆的优缺点全解析,让你大开眼界!
【8月更文挑战第23天】本文以问答形式解析了Web前端开发中至关重要的内存管理概念——栈与堆。栈采用后进先出(LIFO)原则存储执行上下文,适用于函数调用管理;而堆则灵活存储如对象和数组等复杂数据类型。栈操作迅速但访问受限,堆则提供动态空间分配但可能牺牲内存效率。理解两者特性有助于提升JavaScript编程技巧。
62 1
|
2月前
|
消息中间件 安全 Kafka
Kafka支持SSL/TLS协议技术深度解析
SSL(Secure Socket Layer,安全套接层)及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。这些协议在传输层对网络连接进行加密,确保数据在传输过程中不被窃取或篡改。
128 0
|
3月前
|
域名解析 监控 网络协议
利用DNS协议的弱点
【8月更文挑战第17天】
51 1

推荐镜像

更多