This action will force synchronization from OpenHarmony/drivers_peripheral, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
该仓下主要包含Display模块HDI(Hardware Driver Interface)接口定义及其实现,对上层图形服务提供显示驱动能力接口,HDI接口主要包括如下三大类:
该仓下源代码目录结构如下所示
/drivers/peripheral/display
├── hal # display模块的hal层代码
│ └── default # display模块hdi的默认实现
├── interfaces # display模块对上层服务提供的驱动能力接口
│ └── include # display模块对外提供的接口定义
├── test # display模块的测试代码
│ └── unittest # display模块的单元测试代码
Display驱动提供给系统服务WMS可直接调用的驱动能力接口,按照功能分类三大类:显示图层子模块、显示内存子模块、硬件加速子模块,可以提供图层的创建和销毁、图层属性的设置,内存的申请和释放、映射和缓冲,矩形填充和位图搬移等能力。
提供的部分接口说明如表1 Display HDI接口列表所示:
表 1 Display HDI接口列表
该仓核心功能是提供显示驱动能力接口供上层图形系统服务调用,提供的驱动能力接口统一归属为HDI接口层。
通过如下简要示例代码说明Display HDI接口的使用:
#include "display_gfx.h"
#include "display_gralloc.h"
#include "display_layer.h"
#include "display_type.h"
#define DEVID 0
DisplayTest g_displayTest;
static GrallocBuffer g_buffer;
static int32_t GetDisplayInterfaces(void)
{
int32_t ret;
ret = LayerInitialize(&g_displayTest.layerFuncs);
if (ret != DISPLAY_SUCCESS || g_displayTest.layerFuncs == NULL) {
HDF_LOGE("initialize layer failed");
return DISPLAY_FAILURE;
}
ret = GrallocInitialize(&g_displayTest.grallocFuncs);
if (ret != DISPLAY_SUCCESS || g_displayTest.layerFuncs == NULL) {
HDF_LOGE("initialize gralloc failed");
return DISPLAY_FAILURE;
}
ret = GfxInitialize(&g_displayTest.gfxFuncs);
if (ret != DISPLAY_SUCCESS || g_displayTest.gfxFuncs == NULL) {
HDF_LOGE("initialize gralloc failed");
return DISPLAY_FAILURE;
}
return DISPLAY_SUCCESS;
}
static int32_t DisplayUninit(void)
{
LayerUninitialize(g_displayTest.layerFuncs);
GrallocUninitialize(g_displayTest.grallocFuncs);
GfxUninitialize(g_displayTest.gfxFuncs);
return DISPLAY_SUCCESS;
}
static void GetLayerInfo(LayerInfo *layInfo)
{
layInfo->width = g_displayTest.displayInfo.width;
layInfo->height = g_displayTest.displayInfo.height;
layInfo->bpp = LAYER_BPP;
layInfo->pixFormat = PIXEL_FMT_RGBA_5551;
layInfo->type = LAYER_TYPE_GRAPHIC;
}
static void WriteDataToBuf(int32_t width, int32_t height, uint16_t *pBuf)
{
int32_t x;
int32_t y;
for (y = ((height / LINE_WIDTH) - LINE_WIDTH); y < ((height / LINE_WIDTH) + LINE_WIDTH); y++) {
for (x = 0; x < width; x++) {
*((uint16_t*)pBuf + y * width + x) = HIFB_RED_1555;
}
}
for (y = 0; y < height; y++) {
for (x = ((width / LINE_WIDTH) - LINE_WIDTH); x < ((width / LINE_WIDTH) + LINE_WIDTH); x++) {
*((uint16_t*)pBuf + y * width + x) = HIFB_RED_1555;
}
}
}
int DisplayServiceSample(void)
{
int32_t ret;
g_displayTest.devId = DEVID;
/* 获取display驱动接口 */
ret = GetDisplayInterfaces();
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("get display interfaces ops failed");
return ret;
}
/* 初始化显示设备 */
if (g_displayTest.layerFuncs->InitDisplay != NULL) {
ret = g_displayTest.layerFuncs->InitDisplay(g_displayTest.devId);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("initialize display failed");
return DISPLAY_FAILURE;
}
}
/* 获取显示设备的信息 */
if (g_displayTest.layerFuncs->GetDisplayInfo != NULL) {
ret = g_displayTest.layerFuncs->GetDisplayInfo(g_displayTest.devId, &g_displayTest.displayInfo);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("get disp info failed");
return DISPLAY_FAILURE;
}
}
/* 打开显示设备的特定图层 */
if (g_displayTest.layerFuncs->OpenLayer != NULL) {
LayerInfo layInfo;
GetLayerInfo(&layInfo);
ret = g_displayTest.layerFuncs->OpenLayer(g_displayTest.devId, &layInfo, &g_displayTest.layerId);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("open layer failed");
return DISPLAY_FAILURE;
}
}
/* 获取图层buffer并填充buffer */
if (g_displayTest.layerFuncs->GetLayerBuffer != NULL) {
ret = g_displayTest.layerFuncs->GetLayerBuffer(g_displayTest.devId, g_displayTest.layerId, &g_displayTest.buffer);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("get layer buffer failed");
return DISPLAY_FAILURE;
}
uint16_t *pBuf = (uint16_t *)g_displayTest.buffer.data.virAddr;
WriteDataToBuf(g_displayTest.displayInfo.width, g_displayTest.displayInfo.height, pBuf);
}
/* 刷新图层数据进行显示 */
if (g_displayTest.layerFuncs->Flush != NULL) {
ret = g_displayTest.layerFuncs->Flush(g_displayTest.devId, g_displayTest.layerId, &g_displayTest.buffer);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("flush layer failed");
return DISPLAY_FAILURE;
}
}
/* 关闭显示设备的特定图层 */
if (g_displayTest.layerFuncs->CloseLayer != NULL) {
ret = g_displayTest.layerFuncs->CloseLayer(g_displayTest.devId, g_displayTest.layerId);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("close layer failed");
return DISPLAY_FAILURE;
}
}
/* 关闭显示设备 */
if (g_displayTest.layerFuncs->DeinitDisplay != NULL) {
ret = g_displayTest.layerFuncs->DeinitDisplay(g_displayTest.devId);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("deinit display failed");
return DISPLAY_FAILURE;
}
}
/* 注销显示驱动接口 */
ret = DisplayUninit();
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("DisplayUninit fail");
return ret;
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。