1# light 2 3- [简介](##简介) 4- [目录](##目录) 5- [说明](##说明) 6 - [接口说明](###接口说明) 7 - [使用说明](###使用说明) 8 9- [相关仓](##相关仓) 10 11## 简介 12 13 Light驱动模型为上层Light硬件服务层提供稳定的灯控制能力接口,包括获取灯类型、配置点灯模式、配置灯闪烁效果、点灯、熄灯等。基于HDF( Hardware Device Interface )驱动框架开发的Light驱动模型,实现跨操作系统迁移,器件差异配置等功能。实现Light驱动“一次开发,多系统部署”的目标。 14 15**图 1** Light驱动模型图 16 17 18 19## 目录 20 21Light驱动下源代码目录结构如下所示: 22 23``` 24/drivers/peripheral/misc/light 25├── hal # light模块hal层代码 26│ ├── include # light模块hal层内部头文件 27│ └── src # light模块hal层代码的实现 28├── interfaces # light模块对上层服务提供的驱动能力接口 29│ └── include # light模块对外提供的接口定义 30└── test # light模块测试代码 31 └── unittest # light模块单元测试代码 32``` 33 34## 说明 35 36### 接口说明 37 38Light驱动模型支持获取系统中所有灯的信息,动态配置闪烁模式和闪烁时间的能力。Light硬件服务调用GetLightInfo获取Light设备的基本信息;调用TurnOnLight接口启动配置的闪烁效果。开发能力如下表1: 39 40**表 1** Light的主要接口 41 42| 接口名 | 功能描述 | 43| ------------------------------------------------------------ | ------------------------------------------------------------ | 44| int32_t (*GetLightInfo)(struct LightInfo **lightInfo, uint32_t *count) | 获取系统中所有灯的信息,lightInfo表示灯设备的基本信息,count表示获取灯的个数。 | 45| int32_t (*TurnOnLight)(uint32_t lightId, struct LightEffect *effect) | 打开指定类型的灯,lightId表示灯类型,effect表示要设置的效果信息。 | 46| int32_t (*TurnOffLight)(uint32_t lightId) | 关闭指定类型的灯。 | 47 48### 使用说明 49 50代码示例,以小型系统为例。 51 52```c++ 53#include "light_if.h" 54 55void LightSample(void) 56{ 57 int32_t ret; 58 static struct LightInfo *g_lightInfo = nullptr; 59 static uint32_t g_count = 0; 60 const int32_t g_onTime = 500; 61 const int32_t g_offTime = 500; 62 const int32_t LIGHT_WAIT_TIME = 30; 63 const int32_t g_minLightId = LIGHT_ID_NONE; 64 const int32_t g_maxLightId = LIGHT_ID_BUTT; 65 struct LightEffect effect; 66 67 /* 创建Light接口实例 */ 68 struct LightInterface *g_lightDev = NewLightInterfaceInstance(); 69 if (g_lightDev == NULL) { 70 return; 71 } 72 /* 获取设备支持的Light列表 */ 73 ret = g_lightDev->GetLightInfo(&g_lightInfo, &g_count); 74 75 /* 按照指定的灯颜色,常亮模式打开灯列表中可用的灯 */ 76 effect.lightBrightness = 0x00800000; // 亮度值,RGB最高位表示颜色:R:16-31位、G:8-15位、B:0-7位 77 effect.flashEffect.flashMode = LIGHT_FLASH_NONE; 78 79 for (i = 0; i < g_count; ++i) { 80 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 81 EXPECT_EQ(0, ret); 82 83 OsalSleep(LIGHT_WAIT_TIME); 84 85 ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId); 86 EXPECT_EQ(0, ret); 87 } 88 /* 按照指定的灯颜色,闪烁模式打开灯列表中可用的灯 */ 89 effect.lightBrightness = 0x00800000; 90 effect.flashEffect.flashMode = LIGHT_FLASH_TIMED; 91 effect.flashEffect.onTime = g_onTime; // 一个闪烁周期内亮灯时长(ms) 92 effect.flashEffect.offTime = g_offTime; // 一个闪烁周期内熄灯时长(ms) 93 94 for (i = 0; i < g_count; ++i) { 95 ret = g_lightDev->TurnOnLight(g_lightInfo[i].lightId, &effect); 96 EXPECT_EQ(0, ret); 97 98 OsalSleep(LIGHT_WAIT_TIME); 99 100 ret = g_lightDev->TurnOffLight(g_lightInfo[i].lightId); 101 EXPECT_EQ(0, ret); 102 } 103 104 /* 关闭灯列表中指定类型的灯 */ 105 ret = g_lightDev->TurnOffLight(lightId); 106 EXPECT_EQ(0, ret); 107 108 /* 释放Light接口实例 */ 109 if (g_lightDev != nullptr) { 110 FreeLightInterfaceInstance(); 111 g_lightDev = nullptr; 112 } 113} 114``` 115 116## 相关仓 117 118[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) 119 120[drivers_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md) 121 122[drivers_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) 123 124[drivers_adapter_khdf_linuk](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md) 125[drivers_peripheral](https://gitee.com/openharmony/drivers_peripheral) 126 127[drivers_interface](https://gitee.com/openharmony/drivers_interface) 128 129