简介
Light驱动模型为上层Light硬件服务层提供稳定的灯控制能力接口,包括获取灯类型、配置点灯模式、配置灯闪烁效果、点灯、熄灯等。基于HDF( Hardware Device Interface )驱动框架开发的Light驱动模型,实现跨操作系统迁移,器件差异配置等功能。实现Light驱动“一次开发,多系统部署”的目标。
图 1 Light驱动模型图
目录
Light驱动下源代码目录结构如下所示:
/drivers/peripheral/misc/light
├── hal # light模块hal层代码
│ ├── include # light模块hal层内部头文件
│ └── src # light模块hal层代码的实现
├── interfaces # light模块对上层服务提供的驱动能力接口
│ └── include # light模块对外提供的接口定义
└── test # light模块测试代码
└── unittest # light模块单元测试代码
说明
接口说明
Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模式和闪烁时间的能力。Light硬件服务调用GetLightInfo获取Light设备的基本信息;调用TurnOnLight接口启动配置的闪烁效果。开发能力如下表1:
表 1 Light的主要接口
接口名 | 功能描述 |
---|---|
int32_t (*GetLightInfo)(struct LightInfo **lightInfo, uint32_t *count) | 获取系统中所有灯的信息,lightInfo表示灯设备的基本信息,count表示获取灯的个数。 |
int32_t (*TurnOnLight)(uint32_t lightId, struct LightEffect *effect) | 打开指定类型的灯,lightId表示灯类型,effect表示要设置的效果信息。 |
int32_t (*TurnOffLight)(uint32_t lightId) | 关闭指定类型的灯。 |
使用说明
代码示例,以小型系统为例。
#include "light_if.h"
void LightSample(void)
{
int32_t ret;
static struct LightInfo *g_lightInfo = nullptr;
static uint32_t g_count = 0;
const int32_t g_onTime = 500;
const int32_t g_offTime = 500;
const int32_t LIGHT_WAIT_TIME = 30;
const int32_t g_minLightId = LIGHT_ID_NONE;
const int32_t g_maxLightId = LIGHT_ID_BUTT;
struct LightEffect effect;
/* 创建Light接口实例 */
struct LightInterface *g_lightDev = NewLightInterfaceInstance();
if (g_lightDev == NULL) {
return;
}
/* 获取设备支持的Light列表 */
ret = g_lightDev->GetLightInfo(&g_lightInfo, &g_count);
/* 按照指定的灯颜色,常亮模式打开灯列表中可用的灯 */
effect.lightBrightness = 0x00800000; // 亮度值,RGB最高位表示颜色:R:16-31位、G:8-15位、B:0-7位
effect.flashEffect.flashMode = LIGHT_FLASH_NONE;
for (i = 0; i < g_count; ++i) {
ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
EXPECT_EQ(0, ret);
OsalSleep(LIGHT_WAIT_TIME);
ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
EXPECT_EQ(0, ret);
}
/* 按照指定的灯颜色,闪烁模式打开灯列表中可用的灯 */
effect.lightBrightness = 0x00800000;
effect.flashEffect.flashMode = LIGHT_FLASH_TIMED;
effect.flashEffect.onTime = g_onTime; // 一个闪烁周期内亮灯时长(ms)
effect.flashEffect.offTime = g_offTime; // 一个闪烁周期内熄灯时长(ms)
for (i = 0; i < g_count; ++i) {
ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect);
EXPECT_EQ(0, ret);
OsalSleep(LIGHT_WAIT_TIME);
ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId);
EXPECT_EQ(0, ret);
}
/* 关闭灯列表中指定类型的灯 */
ret = g_lightDev->TurnOffLight(lightId);
EXPECT_EQ(0, ret);
/* 释放Light接口实例 */
if (g_lightDev != nullptr) {
FreeLightInterfaceInstance();
g_lightDev = nullptr;
}
}
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向