AliOS Things图形界面开发指南(图形界面开发工具)

简介

物联网设备开发过程中,嵌入式GUI(用户图形界面)的开发是一个重要的组成部分。许多智能设备如智能家电、智能手表、智能仪表上都会涉及到GUI开发。AliOS Things集成开源图形库littlevGL,可以在linux上进行图形界面开发。开发完成后将代码添加到相应的工程并完成显示和输入设备驱动的对接,程序即可在相应的硬件上运行,方便用户进行嵌入式GUI开发。

littlevGL是一个开源的嵌入式图形库,采用C语言开发,使用MIT协议,并在持续更新中。该图形库支持常用的控件,如按钮、列表、滑块、选择框、仪表盘、键盘、波形等。并支持触摸、鼠标、键盘等多种输入方式。其官方网站为:https://littlevgl.com。

linux模拟开发步骤

1、环境安装

a、按照AliOS Things Linux Environment Setup安装基本环境。

b、按照如下命令安装SDL2图形库。

sudo apt-get install libsdl2-2.0:i386

sudo apt-get install libxkbcommon-dev:i386

sudo apt-get install libmircommon-dev:i386

sudo apt-get install libmirclient-dev:i386

sudo apt-get install libegl1-mesa-dev:i386

sudo apt-get install libglib2.0-dev:i386

sudo apt-get install libpulse-dev:i386

sudo apt-get install libsdl2-dev:i386

2、模拟运行

编译运行命令:aos make littlevgl_simulate@linuxhost

编译通过之后会自动运行生成的可执行文件,界面如下

AliOS Things图形界面开发指南(图形界面开发工具)

用户可以自行添加应用代码,开发完成后将代码添加到相应的工程并完成显示和输入设备驱动的对接,程序即可在相应的硬件上运行。

example/littlevgl_simulate/lv_examples目录下包含demo程序以及各个控件使用的示例程序,可参考进行界面开发。

AliOS Things开发版开发步骤:

在starterkit的开发版上已经移植littlevgl,用户直接运行命令即可编译GUI工程。

编译命令:aos make littlevgl_starterkit@starterkit

编译完成后下载到starterkit即可。

AliOS Things图形界面开发指南(图形界面开发工具)

其他CPU开发步骤:

1、显示驱动实现

a、使用内部缓冲区(lv_conf.h的LV_VDB_SIZE > 0)

必须实现如下函数,其功能为对一片矩形区域填充颜色,注意该函数的最后必须调用lv_flush_ready()函数。

/*Write the internal buffer (VDB) to the display. \’lv_flush_ready()\’ has to be called when finished*/

void my_disp_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p)

{

/*TODO Copy \’color_p\’ to the specified area*/

/*Call \’lv_fluh_ready()\’ when ready*/

lv_flush_ready();

}

b、使用硬件加速(USE_LV_GPU = 1 且使用内部缓冲区)

必须实现如下函数:

/*Blend two memories using opacity (GPU only)*/

void my_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa)

{

/*TODO Copy \’src\’ to \’dest\’ but blend it with \’opa\’ alpha */

}

/*Fill a memory with a color (GPU only)*/

void my_mem_fill(lv_color_t * dest, uint32_t length, lv_color_t color)

{

/*TODO Fill \’length\’ pixels in \’dest\’ with \’color\’*/

}

c、不使用缓冲区

必须实现如下函数:

/*Fill an area with a color on the display*/

void my_disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p)

{

/*TODO Copy \’color_p\’ to the specified area*/

}

*Write pixel map (e.g. image) to the display*/

void my_disp_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t color)

{

/*TODO Fill the specified area with \’color\’*/

}

2、输入驱动实现

a、触摸或者鼠标等点输入设备

必须使用如下函数,获取点坐标

bool my_input_read(lv_indev_data_t *data) { data->point.x = touchpad_x; data->point.y = touchpad_y; data->state = LV_INDEV_EVENT_PR or LV_INDEV_EVENT_REL; return false; /*No buffering so no more data read*/}

b、键盘设备

必须使用如下函数:

bool keyboard_read(lv_indev_data_t *data) { data->key = last_key(); if(key_pressed()) { data->state = LV_INDEV_EVENT_PR; } else { data->state = LV_INDEV_EVENT_REL; } return false; /*No buffering so no more data read*/}

3、初始化

a、将framework/GUI/littlevGL目录下的文件添加到工程。

b、根据需要配置lv_conf.h中相应的宏定义。

c、调用lv_init()初始化littlevGL。

d、初始化显示和输入(键盘、鼠标、触摸等)设备。

e、调用lv_disp_drv_init初始化显示驱动,调用lv_disp_drv_register注册显示驱动。调用lv_indev_drv_init初始化输入驱动,调用lv_indev_drv_register注册输入驱动,示例代码见附录。

f、在时钟中断中调用lv_tick_inc(1),为littlevGL提供心跳。

g、创建一个低优先级任务,在其中重复调用lv_task_handler函数,进行图像的刷新和输入事件的响应。

4、APP编写

用户可以自行添加相应的应用代码。

其他

AliOS Things也支持STemwin,在starterkit的开发版上已经移植STemwin,用户直接运行命令即可编译GUI工程。

编译命令:aos make starterkitgui@starterkit

附录

驱动初始化和注册示例代码如下:

lv_disp_drv_t dis_drv;lv_indev_drv_t indev_drv;void lvgl_drv_register(void){ lv_disp_drv_init(&dis_drv); dis_drv.disp_flush = my_disp_flush; dis_drv.disp_fill = my_disp_fill; dis_drv.disp_map = my_disp_map; lv_disp_drv_register(&dis_drv); lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv.read = my_input_read; lv_indev_drv_register(&indev_drv); }void my_disp_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p){ int32_t x = 0; int32_t y = 0; for (y = y1; y <= y2; y ) /*Pick the next row*/ { for (x = x1; x <= x2; x ) /*Pick the a pixel in the row*/ { BSP_LCD_DrawPixel(x,y, color_p); color_p ; } } lv_flush_ready();}void my_disp_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t color){ int32_t i =0; int32_t j =0; for (i = x1; i <= x2; i ) { for (j = y1; j <= y2; j ) { BSP_LCD_DrawPixel(i,j, color.full); } }}void my_disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p){ int32_t i =0; int32_t j =0; for (i = x1; i <= x2; i ) { for (j = y1; j <= y2; j ) { BSP_LCD_DrawPixel(i,j, color_p->full); color_p ; } }}bool my_input_read(lv_indev_data_t *data) { __IO TS_StateTypeDef ts; BSP_TS_GetState((TS_StateTypeDef *)&ts); ts.touchX[0] = TouchScreen_Get_Calibrated_X(ts.touchX[0]); ts.touchY[0] = TouchScreen_Get_Calibrated_Y(ts.touchY[0]); if((ts.touchX[0] >= 240) ||(ts.touchY[0] >= 240) ) { ts.touchX[0] = 0; ts.touchY[0] = 0; } if((TS_State_cur.Pressed != ts.touchDetected )|| (TS_State_cur.x != ts.touchX[0]) || (TS_State_cur.y != ts.touchY[0])) { TS_State_cur.Pressed = ts.touchDetected; if(ts.touchDetected) { TS_State_cur.x = ts.touchX[0]; TS_State_cur.y = ts.touchY[0]; data->point.x = TS_State_cur.x; data->point.y = 240 – TS_State_cur.y; if(TS_State_cur.Pressed == ts.touchDetected) { data->state = 1; } else { data->state = 0; } } else { TS_State_cur.x = 0; TS_State_cur.y = 0; } } return false; /*No buffering so no more data read*/ }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年5月13日 上午10:38
下一篇 2023年5月13日 上午10:54

相关推荐

  • 商贸办公网站入口

    商贸办公网站入口: 打造高效商务平台 随着互联网的不断发展,商贸办公网站已经成为了现代商业领域中不可或缺的一部分。商贸办公网站不仅为商家提供了展示产品、推广品牌、与客户交流的平台,…

    科研百科 2024年9月21日
    21
  • 国家项目科研人员信息变更审批表

    国家项目科研人员信息变更审批表 尊敬的领导: 我谨代表科研人员信息变更审批表申请,向贵单位提交国家项目科研人员信息变更审批表。 本次申请变更的科研人员姓名为:张三,现姓名为李四。 …

    科研百科 2024年10月18日
    0
  • 36氪首发 – 用“低代码”PaaS实现企业级应用快速开发,ClickPaaS获数百万美元A轮融资

    低代码开发平台,是指那些无需编码或通过少量代码就可以快速生成应用程序的工具,其一方面可以降低企业应用开发人力成本,另一方面可以将原有数月甚至数年的开发时间成倍缩短,从而帮助企业实现…

    科研百科 2024年1月9日
    164
  • 第三方科研服务机构

    第三方科研服务机构简介 随着科技的不断发展,科学研究领域也在不断地扩大和更新。为了促进科学研究的高效和精准,许多第三方科研服务机构应运而生。这些机构以专业、高效、可靠、诚信的服务,…

    科研百科 2024年12月8日
    1
  • 智能化办公管理(智能化办公平台)

    智能化办公平台: 提升工作效率和生产力 随着科技的不断发展,智能化办公平台已经成为现代企业必备的工具之一。这些平台利用人工智能技术和自动化工具,帮助企业更高效地完成工作任务,提升生…

    科研百科 2024年8月30日
    36
  • java 施工项目管理系统

    Java 施工项目管理系统 随着建筑行业的快速发展,施工项目管理系统作为其中重要的一部分,也越来越被广泛应用。Java 施工项目管理系统是一种基于 Java 编程语言和 JDBC …

    科研百科 2024年12月19日
    1
  • 智能化合同管理软件有哪些(智能化合同管理软件)

    智能化合同管理软件:合同管理的未来方向 随着数字化和信息化的快速发展,合同管理也逐渐走向智能化。传统的合同管理方式已经无法满足现代商业的需求,因此,智能化合同管理软件成为合同管理的…

    科研百科 2024年8月30日
    30
  • PM必修干货:快速建立项目风险管理(项目如何进行风险管理)

    只有对风险进行良好把控,才能按计划推进项目达到目标要求。文章对项目风险管理进行系统的分享,希望对你有益。 “项目风险是一种不确定的事件或条件,一旦发生,就会对一个或多个项目目标的范…

    科研百科 2023年9月2日
    129
  • LSI MSM下载

    LSI MSM下载:提升嵌入式系统性能的关键 随着嵌入式系统的广泛应用,其性能对于系统的成功与否起着至关重要的作用。然而,由于嵌入式系统的复杂性和硬件资源的限制,提高其性能通常需要…

    科研百科 2024年11月18日
    0
  • 课题评审2A3B什么意思

    课题评审2A3B是什么意思 在课题评审过程中,2A3B是一个常见的术语,具体含义如下: 2A:是指课题评审专家中,有2个来自专业领域的专家,以及1个来自其他领域的专家。 3B:是指…

    科研百科 2024年11月27日
    7