前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenHarmony开发之 Light驱动模型

OpenHarmony开发之 Light驱动模型

原创
作者头像
小帅聊鸿蒙
发布2024-08-30 21:20:05
950
发布2024-08-30 21:20:05
举报
文章被收录于专栏:鸿蒙开发笔记

简介

Light驱动模型为上层Light硬件服务层提供稳定的灯控制能力接口,包括获取灯类型、配置点灯模式、配置灯闪烁效果、点灯、熄灯等。基于HDF( Hardware Device Interface )驱动框架开发的Light驱动模型,实现跨操作系统迁移,器件差异配置等功能。实现Light驱动“一次开发,多系统部署”的目标。

图 1 Light驱动模型图

目录

Light驱动下源代码目录结构如下所示:

代码语言:shell
复制
/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)

关闭指定类型的灯。

使用说明

代码示例,以小型系统为例。

代码语言:cpp
复制
#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;
    }
}

写在最后

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力;
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识;
  • 想要获取更多完整鸿蒙最新学习知识点,可关注B站:码牛课堂鸿蒙开发;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 目录
  • 说明
    • 接口说明
      • 使用说明
      • 写在最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档