1 Star 2 Fork 2

XuKaiSheng / OpenHarmony_LVGL8.3

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
工程结构及GUI移植.md 4.62 KB
一键复制 编辑 原始数据 按行查看 历史
XuKaiSheng 提交于 2023-11-02 17:52 . first commit

Smart-TimeKeeper

工程结构

.
├── app //应用入口
│   ├── BUILD.gn
│   ├── lv_port_disp.c  //显示适配
│   ├── lv_port_disp.h
│   ├── lv_port_indev.c //输入适配
│   ├── lv_port_indev.h
│   └── main.c
├── BUILD.gn
├── custom  //gui工具自定义代码
│   ├── BUILD.gn
│   ├── custom.c
│   ├── custom.h
│   ├── custom.mk
│   └── lv_conf_ext.h
├── drivers //外设驱动
│   ├── adc_key //按键驱动
│   ├── pwm_buzzer  //蜂鸣器驱动
│   ├── spi_st7735s //lcd启动
│   └── temp_sensor //温度传感器驱动
├── generated //gui工具生成代码
│   ├── BUILD.gn
│   ├── events_init.c
│   ├── events_init.h
│   ├── generated.mk
│   ├── guider_customer_fonts
│   ├── guider_fonts
│   ├── gui_guider.c
│   ├── gui_guider.h
│   ├── images
│   └── setup_scr_change.c
├── lvgl    //lvgl库
│   ├── BUILD.gn
│   ├── demos
│   ├── examples
│   ├── lv_conf.h
│   ├── lvgl.h
│   └── src
└── README.md

将整个工程分成了以下模块,每个模块由单独的一个BUILD.gn文件进行编译管理:

  • app:存放主函数入口以及对于lvgl的输入输出适配
  • drivers:存放外设驱动,按键,LCD屏幕,蜂鸣器等
  • lvgl:lvgl库,重新整理lvgl库并进行解耦,使其单独成为一个三方库供外部调用。
  • generated:GUI Guider生成代码文件。
  • custon:GUI Guider中的用户自定义代码文件。

通过工程根目录下的BUILD.gn对所有模块进行整合,实现工程模块化。

import("//build/lite/config/component/lite_component.gni")

lite_component("smart_timekeeper") {
    features = [
        "drivers/spi_st7735s:spi_st7735s",
        "drivers/adc_key:adc_key",
        "lvgl:lvgl",
        "app:lvgl_app",
        "custom:custom",
        "generated:generated"
    ]
}

GUI Guider生成代码移植

  1. 将生成的文件中的custom和generated目录复制到项目工程。

generated

  1. 编写BUILD.gn custom:添加源文件custom.c,根据需要包含相关目录。
static_library("custom") {
    sources = [
        "custom.c"
    ]

    include_dirs = [
        "//device/soc/hisilicon/hi3861v100/sdk_liteos/include",
        ".",
        "../lvgl",
        "../generated",
        "../generated/guider_fonts",
        "../lvgl/src",     
    ]
}

generated:将工程下的所有.c文件加入sources,根据需要包含相关目录。

static_library("generated") {
    sources = [
        "guider_customer_fonts/guider_customer_fonts.h",
        "guider_fonts/lv_font_Acme_Regular_10.c",
        "guider_fonts/lv_font_Antonio_Regular_18.c",
        "guider_fonts/lv_font_montserratMedium_12.c",
        "guider_fonts/lv_font_montserratMedium_16.c",
        "guider_fonts/lv_font_simsun_18.c",
        "events_init.c",
        "gui_guider.c",
        "setup_scr_change.c",
    ]

    include_dirs = [
        ".",
        "guider_customer_fonts",
        "guider_fonts",
        "../lvgl",
        "../lvgl/src",
        "../custom",
    ]
}
  1. 编写主函数 主函数要使用GUI Guider生成代码,只需要引入头文件,执行相关操作的初始化即可。 main.c
#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "st7735s.h"

#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"

#include "gui_guider.h"
#include "events_init.h"
#include "custom.h"

lv_ui guider_ui;

static void Smart_TimeKeeper_Task(void* arg)
{
    (void) arg;

    lcdInit();
    lcdClear(0xFFFF);
    lv_init();  //lvgl初始化
    lv_port_disp_init();    //lvgl屏幕驱动初始化
    lv_port_indev_init();   //lvgl输入初始化

    setup_ui(&guider_ui);   //加载UI
    events_init(&guider_ui);    //触发事件初始化
    custom_init(&guider_ui);    //自定义代码初始化
    while (1)
    {

        lv_tick_inc(5); //计时器
		lv_task_handler();  //lvgl执行函数
		usleep(5000);	
	} 
    return 0;
}

static void Smart_TimeKeeper_Entry(void)
{
    osThreadAttr_t attr;


    attr.name = "Smart_TimeKeeper_Task";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 1024 * 20;
    attr.priority = osPriorityNormal;

    if (osThreadNew(Smart_TimeKeeper_Task, NULL, &attr) == NULL) {
        printf("[Smart_TimeKeeper_Task] Falied to create Smart_TimeKeeper_Task!\n");
    }
}

SYS_RUN(Smart_TimeKeeper_Entry);
1
https://gitee.com/KaiSheng_Xu/open-harmony_-lvgl8.3.git
git@gitee.com:KaiSheng_Xu/open-harmony_-lvgl8.3.git
KaiSheng_Xu
open-harmony_-lvgl8.3
OpenHarmony_LVGL8.3
master

搜索帮助