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

相关推荐

  • 党旗引领新时代 暖医勇当排头兵——市中心医院“一二三四五”工作格局助推医院高质量发展综述

    日照日报/日照新闻网讯伟大时代领航奋进,党的建设永远向前。 党建引领是公立医院高质量发展的“红色基地”,将党建工作融入医院长期发展规划,不断激发党建工作活力,让“红色细胞”迸发先锋…

    科研百科 2023年6月28日
    273
  • 青海省工程建设监管和信用管理平台

    青海省工程建设监管和信用管理平台简介 青海省是一个拥有悠久历史和文化的省份,同时也是我国重要的能源基地之一。随着能源行业的不断发展,工程建设成为了青海经济发展的重要支柱。然而,工程…

    科研百科 2024年10月26日
    6
  • lowcode-demo vue版

    低代码开发示例:Vue版本 低代码开发是一种将传统编程方式转化为可视化编程工具的技术,可以让开发者更加高效地开发应用程序。在本文中,我们将提供一个简单的Vue低代码开发示例,帮助开…

    科研百科 2024年11月6日
    0
  • 林学科研项目申报要求是什么林学科研项目申报要求是什么

    林学科研项目申报要求是什么 随着森林资源的不断减少,保护森林和生态环境已成为全球各国共同关注的问题。林学科研项目作为保护森林和生态环境的重要措施之一,其申报要求也越来越严格。本文将…

    科研百科 2024年9月13日
    29
  • 连江县海洋与执法大队陈晓辉

    连江县海洋与执法大队陈晓辉 连江县海洋与执法大队是福建省连江县的一个政府机构,主要负责海洋环境保护和执法工作。陈晓辉是这个大队的队长,他具有丰富的执法经验和出色的领导能力。 海洋环…

    科研百科 2024年10月26日
    0
  • 网易项目管理系统

    网易项目管理系统:提升工作效率的利器 随着互联网的快速发展,企业对于项目的管理也越来越重视。网易项目管理系统作为一款专业的项目管理工具,为网易的项目管理提供了强有力的支持。本文将介…

    科研百科 2024年12月13日
    0
  • 购买档案管理系统

    购买档案管理系统 随着企业的发展,越来越多的企业需要对它们的档案进行管理。但是,在过去,大多数企业都使用手动管理的方式来维护他们的档案,这导致了数据丢失、不准确和难以访问的问题。 …

    科研百科 2024年8月22日
    39
  • 军工类科研所

    军工类科研所为: 探索科技新领域,推动国家发展 军工类科研所为是国家的重要科技创新力量,其任务是为国家的军事需求和国家安全提供科技支持。在过去的几十年中,军工类科研所取得了巨大的成…

    科研百科 2024年11月20日
    0
  • 工程类项目管理软件免费(工程项目管理系统排行榜)

    工程项目管理系统排行榜工程项目管理系统排行榜工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类工程类 工程类工程类工程类 工程类 工程…

    科研百科 2024年7月30日
    57
  • 商城app开发-商城开发app应用(商城app开发是这样的)

    移动购物是电子商务发展的一个实际体现,而且移动购物的比例在逐年增加,一些原来只在PC端开发网站商城的企业,现在也需要开发手机商城APP,这也是移动购物发展的必然结果,Hishop小…

    科研百科 2024年9月14日
    29