简介

  物联网设备开发过程中,嵌入式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*/
} 
原文链接

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


AliOS Things图形界面开发指南相关推荐

  1. alios things开发板_AliOS Things图形界面开发指南

    摘要: 简介   物联网设备开发过程中,嵌入式GUI(用户图形界面)的开发是一个重要的组成部分.许多智能设备如智能家电.智能手表.智能仪表上都会涉及到GUI开发.AliOS Things集成开源图形库 ...

  2. Java图形界面开发利器WindowBuilder

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  3. python简单编程例子-中文方便就用中文编程!Python图形界面开发实例

    原标题:中文方便就用中文编程!Python图形界面开发实例 之前做的一个Python小程序,功能很简单,面对用户群也很窄,是五笔编码编.校人员使用的五笔编码编辑器. 这样的"周末" ...

  4. 不是python中用于开发用户界面的第三方库-python界面 | Tkinter图形界面开发库

    0 写在前面 未经允许,不得转载,谢谢~~ 毕设要在现有的基础上做一个可视化的界面,所以趁机也学习一波如何用python实现图形界面的开发. 本文主要学习并整理了: 简要介绍用于python图形界面开 ...

  5. python界面开发工具-python图形界面开发用什么

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教 ...

  6. java swing图形界面开发 java.swing简介

    最近在看YouTube上面的视频的时候,虽然学着做了一点界面和一点可以运行的东西,但是里面用到的库文件我还是不明就里的.所以我打算在制作游戏之前,先花几天的时间大概地研究一下关于java.swing的 ...

  7. java swing 案例详解_《Java Swing图形界面开发与案例详解》PDF_IT教程网

    资源名称:<Java Swing图形界面开发与案例详解>PDF 内容简介: <Java Swing图形界面开发与案例详解>全书共20章,其中第1-2章主要介绍有关Swing的基 ...

  8. java swing图形界面开发设计器windowbuilder安装步骤详解

    前言 WindowBuilder 是java swing的一款图形界面开发设计器,他可以大大增加开发项目的速度,对于eclipse这款开发工具,他是没有提供windowbuilder设计器的,如果要使 ...

  9. 这绝对是个高手,一个用 C 开发的图形界面开发库

    大家好,我是章鱼猫. 今天给大家推荐一个开源项目,这个开源项目绝对是一个高手开发并开源的项目. 这个开源项目是一个用 C 语言编写的桌面端图形界面开发库:LCUI . 这个图形界面开发库 LCUI 可 ...

最新文章

  1. 人生曲线——我们不拥有将来,只拥有此刻
  2. 植物数据库-小RNA注释数据库 sRNAanno(2021)
  3. 有谁还用QuickReport吗?
  4. django models索引_Django(生命周期、每部分详解、路由层)
  5. 阿里云实时计算,前世功,今生能!
  6. cad二次开发 java_应用Java语言进行AutoCAD2000二次开发.PDF
  7. spirng底层实现原理
  8. mysql 传输表空间_Oracle传输表空间总结
  9. 图书管理系统的5W1H
  10. Solrflux源码分析-Sql Support within Solr-类Sql的solr搜索实现(2)
  11. 让hammer完美支持Pixi.js - 2D webG库
  12. Linux下局域网通信软件(聊天室,附源码)
  13. 职称英语 计算机哪报名,职称计算机考试报名
  14. html5 contenteditable 可编辑属性
  15. 为什么分布电容会缩短信号的传输距离
  16. 芯片漫游指南(1)-- UVM世界观
  17. 实战 - 学成在线项目
  18. WFU校赛题解 B、C、F
  19. 图书馆管理系统课程设计
  20. 170虚拟号码的正则表达式

热门文章

  1. pb自定义控件 事件_Android WebView与下拉刷新控件滑动冲突的解决方法
  2. ifamre 大小随页面变_SEO优化中如何让你的页面访问速度更快
  3. 计算机意外关闭原因 安全问题,win7弹出“计算机意外地重新启动或遇到错误”处理方法...
  4. android 判断 string 是否是字母数字,Android中判断字符串中必须包含字母或者数字...
  5. uci大学教育转计算机,UCI加州大学尔湾分校计算机科学硕士M.S. Computer Science
  6. python安装不了是什么问题_安装不上python的模块怎么办?别怕,我这有妙招!
  7. python如何提取图片特征向量_在python中计算图像的特征向量
  8. 只有数学老师懂的15个泪流满面的瞬间~
  9. 任正非:只有教师待遇得到提升 教育才会较大发展
  10. 60小时打通Python任督二脉