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、拷贝代码

git clone https://github.com/alibaba/AliOS-Things.git

3、模拟运行

编译运行命令:aos make littlevgl_simulate@linuxhost
编译通过之后会自动运行生成的可执行文件,界面如下


用户可以自行添加应用代码,开发完成后将代码添加到相应的工程并完成显示和输入设备驱动的对接,程序即可在相应的硬件上运行。
example/littlevgl_simulate/lv_examples目录下包含demo程序以及各个控件使用的示例程序,可参考进行界面开发。

AliOS Things开发版开发步骤:

在starterkit的开发版上已经移植littlevgl,用户直接运行命令即可编译GUI工程。
编译命令:aos make littlevgl_starterkit@starterkit
编译完成后下载到starterkit即可。


其他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*/
} 


原文链接

干货好文,请关注扫描以下二维码:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务的好处与弊端_《微服务架构设计模式》-学习总结07

本篇主要总结第七章&#xff1a;在微服务架构中实现查询在微服务架构中查询数据的挑战何时以及如何使用API组合模式实现查询 何时以及如何使用CQRS模式实现查询 微服务架构中&#xff0c;查询通常需要检索分散在多个服务所拥有的数据库中的数据&#xff0c;跨服务数据查询的两种…

ECS主动运维2.0,体验升级,事半功倍

摘要&#xff1a; 阿里云致力于提供更好用的运维体验&#xff0c;让您使用ECS的过程更透明、高效&#xff0c;并实现更加标准化、自动化的运维方式。基于主动运维2.0&#xff0c;您使用ECS云服务器的体验更加流畅&#xff0c;而且利用系统事件&#xff0c;不再依赖于工单联系客…

mysql bench如何下载_MySQLWorkbench下载与使用教程详解

一、MySQL Workbench的下载Workbench是MySql图形化的管理工具&#xff0c;可以在Workbench里输入MySql的语句&#xff0c;这可能更适合大多数人的视觉&#xff0c;有些操作更能更简单化首先我们下载workbench然后选择download选择no thanks&#xff0c;just download下载后点击…

为什么说边缘计算的发展比5G更重要?

戳蓝字“CSDN云计算”关注我们哦&#xff01;由TechSugar编辑部翻译自medium文︱Pavel Konecny本篇文章转自公众号TechSugar&#xff08;ID:techsugar&#xff09;边缘计算相对于5G都有哪些优势&#xff1f;犹记2016年&#xff0c;我在汉诺威参加德国汉诺威消费电子、信息及通信…

ICDE:POLARDB定义云原生数据库

摘要&#xff1a; 4月17日&#xff08;巴黎时间&#xff09;阿里云POLARDB走出国门&#xff0c;亮相ICDE2018&#xff0c;并同步举办阿里云自有的POLARDB技术专场。在会上&#xff0c;阿里云进行了学术成果展示&#xff0c;从而推动Cloud Native DataBase成为行业标准。4月17日…

PLSQL连接ORACLE

文章目录① 安装oracle服务端②安装plsql③配置监听④配置2个⑤重启plsql① 安装oracle服务端 ②安装plsql ③配置监听 ④配置2个 【打开客户端】-【取消】-【工具】-【首选项】-【连接】 配置截图2个配置 【Tools】-【Preferences】-【Connection】 根据自己的oracle安装路…

新功能:阿里云负载均衡SLB支持HTTP访问强制跳转HTTPS

摘要&#xff1a; 很高兴的告诉大家&#xff0c;阿里云负载均衡SLB已经在澳大利亚&#xff08;悉尼&#xff09;、日本&#xff08;东京&#xff09;、阿联酋&#xff08;迪拜&#xff09;、美国 &#xff08;弗吉尼亚&#xff09;、美国&#xff08;硅谷&#xff09;、马来西亚…

算法一看就懂之「 堆栈 」

戳蓝字“CSDN云计算”关注我们哦&#xff01;今天咱们再来继续看看「 堆栈 」吧&#xff0c;我写技术文章很少 show code&#xff0c;所以经常有人吐槽。好吧&#xff0c;这个算法系列的文章我打算每一篇的结尾处都找一道算法题写出代码示例&#xff0c;这总可以了吧。一、「 堆…

Centos/Red Hat7.9 源码和在线yum 安装 vsftpd

文章目录一、版本简述1. 环境介绍2. 常用命令二、源码下载2.1. 官网链接2.2. 下载方式2.3. 检查2.4. 源码安装2.5. 异常处理2.6. 检查是否安装成功一、版本简述 1. 环境介绍 软件系统版本Red Hat Enterprise Linux Server7.9 (Maipo)CentOS Linux release 7.9(Core)jdk1.8.0_…

阿里云黄海宇:窄带高清2.0——让直播更惊艳的魔术

摘要&#xff1a; 2018年4月11-12日&#xff0c;2018亚太CDN峰会在北京隆重召开&#xff0c;大会由亚太CDN领袖论坛、电视云论坛、短视频论坛、视频云论坛、新技术论坛、运营商论坛、国际云论坛等7大部分组成。在视频云论坛上&#xff0c;阿里云视频云高级算法专家黄海宇作了题…

vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法

原vsftpd服务器的系统从centos6.8升级到centos7.2。vsftpd使用yum方式安装&#xff0c;用户采用系统用户登录。由于系统升级到centos7&#xff0c;yum安装的vsftpd版本改变。因此按centos6的设置&#xff0c;登录时报错。配置文件未修改&#xff0c;主要是修改了ftp的主目录权限…

学Python后到底能干什么?网友:我太难了

感觉全世界营销文都在推Python&#xff0c;但是找不到工作的话&#xff0c;又有哪个机构会站出来给我推荐工作&#xff1f;笔者冷静分析多方数据&#xff0c;想跟大家说&#xff1a;关于超越老牌霸主Java&#xff0c;过去几年间Python一直都被寄予厚望。但是事实是虽然上升趋势…

基于PCDN技术的无延时直播方案

摘要&#xff1a; 2018亚太CDN峰会在北京隆重召开&#xff0c;在4月12日上午的运营商论坛中&#xff0c;阿里云边缘计算团队高级技术专家张士波进行了《基于PCDN技术的无延时直播方案》的主题演讲。本文为演讲内容。当大家谈到直播&#xff0c;一般很惊讶于直播近几年来发展的规…

VSFTPD Centos 7.6 _配置篇

接上一篇&#xff1a;企业内部&#xff09;Centos7.6 源码安装vsftpd https://gblfy.blog.csdn.net/article/details/103491052 文章目录一、常用命令二、 需求案例三、思路分析3.1. 创建用户3.2. 配置3.3. 限制用户活动范围四、coding实战4.1. 家目录调整4.2. 为test设置密码4…

阿里云弹性计算负责人蒋林泉:亿级场景驱动的技术自研之路

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘丹出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;近年来随着云计算如火如荼的发展&#xff0c;上云已经成为当前企业的必经路径。但在国内良莠不齐的云服务市场下&#xff0c;云服务器的选型评估长期困…

阿里云容器Kubernetes监控(一) - 资源监控

摘要&#xff1a; 容器通过集装箱式的编译、打包、部署&#xff0c;大大提高了应用的迭代速度。对于架构师而言&#xff0c;容器带来的是分钟级的部署、秒级的伸缩与恢复、一个量级的迭代速度提升、50%左右的基础成本节省。简介容器通过集装箱式的编译、打包、部署&#xff0c…

Kubernetes之路 3 - 解决服务依赖

摘要&#xff1a; 在容器服务的客户群中&#xff0c;一个经常被问起的问题就是如何处理服务间依赖。本文介绍了常见的解决方法来实现服务的依赖检查&#xff0c;还进一步用示例展示了如何利用init container&#xff0c; liveness/readiness探针等技术实现服务健康检查&#xf…

Logtail从入门到精通(一):日志采集杂谈

摘要&#xff1a; 目前logtail已承载阿里云全站、所有云产品服务、全球各Region部署、阿里巴巴集团&#xff08;淘宝、天猫、菜鸟等&#xff09;上重要服务的数据采集。每天采集接近百万服务器上数PB的实时数据&#xff0c;对接数千个应用与消费者。什么是日志提到日志&#xf…

互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go OPPO Reno2正式发布&#xf…

Logtail从入门到精通(二):开启日志采集之旅

摘要&#xff1a; 为了更好的了解日志采集&#xff0c;这里我们首先对日志采集中遇到的基本概念进行简要的介绍。Logtail相关概念为了更好的了解日志采集&#xff0c;这里我们首先对日志采集中遇到的基本概念进行简要的介绍。概念介绍项目&#xff1a; 项目&#xff08;Project…