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

相关文章
|
25天前
|
算法
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
以太网CSMA/CD协议:通信原理、碰撞检测与退避机制深度解析
134 1
|
2月前
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
DNS协议 是什么?说说DNS 完整的查询过程? _
|
2天前
|
传感器 监控 网络协议
Modbus协议详细解析与案例分享
Modbus协议详细解析与案例分享
9 0
|
3天前
|
网络协议 前端开发 数据安全/隐私保护
技术笔记:SOCKS5协议解析
技术笔记:SOCKS5协议解析
|
28天前
|
网络协议 应用服务中间件 网络性能优化
解析TCP /UDP协议的 socket 调用的过程
【6月更文挑战第2天】该文介绍了传输层的两种主要协议TCP和UDP的区别。TCP是面向连接、可靠的,提供顺序无错的数据传输,而UDP则是无连接、不可靠的,不保证数据顺序或不丢失。
|
5天前
|
存储 监控 算法
Java中的内存管理:从堆到栈的深入解析
Java中的内存管理:从堆到栈的深入解析
|
29天前
|
存储 安全 网络协议
邮件协议揭秘:SMTP与IMAP的双重功能解析
SMTP和IMAP是电子邮件系统的核心协议,SMTP负责邮件发送,通过SSL/TLS保证安全,而IMAP则处理邮件接收和管理,支持服务器存储及状态同步。这两种协议相辅相成,为现代邮件系统提供了坚实基础。它们广泛应用于各种邮件客户端,确保了兼容性、功能丰富性和安全性,满足用户对电子邮件的多样化需求。
41 3
|
29天前
|
Java
Java栈(Stack)深度解析与实现
Java栈(Stack)深度解析与实现
41 1
|
9天前
|
数据采集 安全 数据安全/隐私保护
IP代理的协议与主要应用场景解析
**IP代理概述:** HTTP、HTTPS和SOCKS5代理协议用于隐藏真实IP,提供隐私保护、访问受限内容、数据采集、社交媒体营销和网络测试。HTTPS加密增强安全性,SOCKS5则更通用灵活。代理广泛应用于多场景,但需合法安全使用。
|
10天前
|
缓存 安全 Java
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)
【权限管理系统】Spring security(三)---认证过程(原理解析,demo)

推荐镜像

更多