普通三色LED灯的软硬件机制和接口介绍
重要
目前SDK的普通三色LED灯工程为默认工程, 其使用的 BK_MESH_DEMO_SUPPORT_PWM_LED 外部工程宏默认为y 目前SDK的普通三色LED灯工程不支持PWM! PWM工程配置与实现请参考:支持PWM的三色LED灯的软硬件机制和接口介绍
普通三色LED灯的硬件配置
SDK使用的是内部测试模组测试普通三色LED灯工程,其使用BK7236模组如下图所示:
普通三色LED灯工程的bk7236模组
下表是SDK默认的普通三色LED灯工程的GPIO引脚配置:
颜色引脚
GPIO引脚
BK_MESH_PWM_RED_PIN
18
BK_MESH_PWM_GREEN_PIN
24
BK_MESH_PWM_BLUE_PIN
19
备注
请确保在 BK_MESH_DEMO_SUPPORT_PWM_LED 下面配置!
普通三色LED灯的软件配置
普通三色LED灯的软件配置同样遵循Vendor的软件配置,即占用Vendor Bitmap的bit0位置和Bitmap0 Content字段。 当然SDK默认的字段设计只是提供了一种实现方法,用户可以自行设计Bitmap0 Content的内容, 下面将介绍一下SDK默认的设计形式。
普通三色LED灯工程实现
demo路径:
components/demos/bk_mesh_led_demo.c
备注
普通三色LED灯工程默认支持,编译命令如下(括号内的部分可选):
make bk7236 -j8 (PROJECT=bk_mesh/3_led)
普通三色LED灯工程上使用的内部API
在demo工程中,我们只使用这些API的介绍如下:
bk_mesh_led_demo_api.h
- bk_mesh_led_demo_api.h路径:
components/demos/inc
另外,对于GPIO的操作,直接使用宏函数完成:
- #define BK_MESH_GPIO_UP(id) *(volatile uint32_t*) (SOC_AON_GPIO_REG_BASE + ((id) << 2)) = 2
- #define BK_MESH_GPIO_DOWN(id) *(volatile uint32_t*) (SOC_AON_GPIO_REG_BASE + ((id) << 2)) = 0
普通三色LED灯工程使用的对外API
普通三色LED灯工程对外API接口如下:
bk_mesh_led_demo_api.h
- bk_mesh_led_demo_api.h路径:
components/demos/inc
备注
这几个函数的具体实现可以由客户自行实现,也可以使用demo中已经写好的函数实现。
这几个函数只是普通三色LED灯工程内部的具体设置实现,下面我们要做的就是将这些API统一到对应的vendor API上。
所有的vendor信息都存储在 g_vendor_info 这个全局结构体下,而在普通三色LED灯工程上,我们需要关注的则是 struct bk_mesh_light_msg led_control
结构体struct bk_mesh_light_msg:
Header File
Structures
-
struct bk_mesh_light_msg
每个成员的解释如下:
变量
类型 | 说明
type_msg
u8
上一次配置的消息类型,在inform函数中使用
layer
u8
上一次配置的层级信息,在inform函数中使用
time
u16
上一次配置的闪烁时间
color_value
u16
上一次配置的颜色值
此外,需要在初始化函数中执行下列操作:
g_vendor_info.vendor_bitmap |= BK_MESH_DEMO_SUPPORT_LED;
其中, BK_MESH_DEMO_SUPPORT_LED 占用Bitmap中的BIT0!
备注
普通三色LED灯工程需要开启CONFIG_BK_WIFI_MESH_DEMO_LED!
普通三色LED灯工程上使用的对外API的注册
对外的API整体通过以 g_vendor_info.vendor_bitmap 存储的内部bit值和 Vendor API 所携带的外部bit值进行比较而判断执行哪个工程(当然也有对应宏的保护) 下图为普通三色LED灯的Vendor API内部的执行流程图:
Vendor API flow for LED
demo工程上使用的外部消息区域的Vendor字段格式
普通三色LED灯工程使用的部消息区域的Vendor字段格式如下:
- 普通三色LED灯工程使用bitmap中的BIT0为标记
- 普通三色LED灯工程使用bitmap0 Content字段
下面介绍一下普通三色LED灯工程相关Vendor字段格式
Bitmap0
Bitmap0目前被普通三色LED灯工程所用,用户的外部设备和节点之间通信,如涉及到PWM LED交互,则需要将此bit置1。
当该bit为1时代表本命令支持LED控制
当该bit为0时代表本命令不支持LED控制
备注
本字段在 CONFIG_BK_WIFI_MESH_DEMO_LED 配置为true的情况下生效!
Bitmap0 Content
备注
本字段在 CONFIG_BK_WIFI_MESH_DEMO_LED 配置为true的情况下生效!
Bitmap0 Content的结构如下:
vendor_bitmap0
下面介绍一下vendor_bitmap0里面各个字段的含义:
由上图可看出,目前我们每个原色的使能都只占用了使能组的低bit位置,高bit位置预留。
内部状态设置机制
下表是目前使用到的内部消息:
枚举
事件说明
NODE_POWER_ON
节点开机
NODE_START_NET
开始组网
NODE_NET_FAIL
组网失败
NODE_NET_LAYER
根据层级配置颜色,SDK默认,颜色见下表
NODE_BREAKDOWN
节点失效
NODE_REVOVER
节点恢复
NODE_LAYER_CHANGE
节点层级更改
NODE_STOP
节点停止
目前SDK默认的层级-颜色对照表:
层级
颜色
1
red
2
green
3
blue
4
yellow
5
magenta
6
cyan
特殊事件颜色:
事件
颜色
NODE_POWER_ON
white
NODE_BREAKDOWN
当前颜色闪烁
NODE_STOP
white