YOXIOS 入门教程-基于Linux的 轻量化GUI图形系统和硬件平台_第1页
YOXIOS 入门教程-基于Linux的 轻量化GUI图形系统和硬件平台_第2页
YOXIOS 入门教程-基于Linux的 轻量化GUI图形系统和硬件平台_第3页
YOXIOS 入门教程-基于Linux的 轻量化GUI图形系统和硬件平台_第4页
YOXIOS 入门教程-基于Linux的 轻量化GUI图形系统和硬件平台_第5页
已阅读5页,还剩36页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

--基于Linux的轻量化GUI图形系统和硬件平台入门教程基于Linux的轻量化GUI图形系统和硬件平台2020-05)提示:阅读此文档需要有一定的单片机开发、C/C++编程语言、和使用IDE开发工具的基础(C)2020游芯科技第1页共41页--基于Linux的轻量化GUI图形系统和硬件平台目录YOXIOS入门教程...................................................................................................................................1简介............................................................................................................................................................3一、安装YOXIOS开发工具...........................................................................................................3YOXIOS硬件开发板.............................................................................................................4新建工程项目..................................................................................................................................4World..........................................................................................................................9编译下载调试................................................................................................................................12烧录固件和修改开机LOGO.......................................................................................................15多窗口界面和控件介绍................................................................................................................19GPIO、UART、I2C、SPI接口操作..........................................................................................30网络、文件、多媒体....................................................................................................................37YOXIOS................................................................................................................................41第2页共41页--基于Linux的轻量化GUI图形系统和硬件平台操作系统是基于LinuxGUI框架和开发工具,高集成度和低成本的硬件方案,提高开发效率,降低硬件和人力成本,使嵌入式硬件图形化编程更容易。一、安装开发工具登录开发工具的下载链接,在电脑上执行安装即可。安装成功后在桌面有快捷方式,双击运行。注意:1、安装路径不可以有中文字符或者空格,否则可能会影响后续编译。2、目前IDE开发工具只支持Widnows操作系统。第3页共41页--基于Linux的轻量化GUI图形系统和硬件平台二、选购硬件开发板可以登录X3和X7以根据自己的需求,选购相应的硬件开发板。三、新建工程项目项目新建一个工程项目2、输入项目名称,选择平台类型,根据硬件开发板的型号,选择X3或者X7第4页共41页--基于Linux的轻量化GUI图形系统和硬件平台认参数点击完成。至此,一个新的hello的项目就创建完毕了。3、新建项目完成之后,IDE整体的界面如下项目管理器的文件目录下,分为jni、libs、obj、resources、ui等文件夹,其中libs和obj是库文件和编译目标文件。第5页共41页--基于Linux的轻量化GUI图形系统和硬件平台4、jni文件结构介绍Jni文件主要存放代码文件,它包含了activity、include、logic、uart、Main.cpp、Makefile共6个部分。文件结构和include文件结构4.1jni\activity文件夹activity文件夹是保存UI文件的基础类代码,每一个UI会生成相同前缀名的Activity类和Logic.cc文件。例如:UI文件夹下有一个main.ftu,那么经过编译后,会生成mainActivity.h、mainActivity.cpp以及mainLogic.cc,mainActivity类会存放在activity文件夹中,mainLogic.cc文件会存放在logic文件夹中。第6页共41页--基于Linux的轻量化GUI图形系统和硬件平台4.2jni\include文件夹Include译。4.3jni\logic文件夹Logic文件夹主要存放用户的逻辑代码。每一个UI文件在编译后都会生成相对应前缀名的Logic.ccLogic.cc文件中。4.4jni\uart文件夹Uart文件夹主要存放串口操作相关的代码,包括读写串口,协议解析等。4.5jni\Main.cppMain.cpp是整个应用的入口代码,包括选择开机的界面以及一些初始化,一般情况不需要修改该文件。4.6jni\MakefileMakefile/Android.mk、Application.mk是编译配置文件,包含了具体的源码编译过程,一般情况下不需要修改。在编译通过后,会在项目下生成libs目录,和obj目录,它们分别是编译的目标存放目录和编译的中间文件目录。5、resources文件夹resources文件夹主要用来存放项目的各种资源文件,包括图片、字体、输入法配置文件等。如果你还有其他资源文件也可以添加到该文件夹,该文件夹第7页共41页--基于Linux的轻量化GUI图形系统和硬件平台会完全拷贝到机器中。但是,由于机器自身存储空间的限制,不建议将大文件存放到该目录,推荐将较大的资源文件存放到TF卡中。我们可以在代码中获取resources目录下的某个文件的绝对路径。例如:如下代码可以获取resources/test.txt的绝对路径。#include"manager/ConfigManager.h"std::stringresPath=CONFIGMANAGER->getResFilePathEx("test.txt");6、ui文件夹一个工程有一个默认的main.ftu的UI文件,ftu是YOXIOS项目UI文件的后缀名。每一个ftu文件对应一个应用界面。通常一个应用包含多个界面,所以你需要在ui文件夹下右键新建>>YOXIOSUI文件创建多个ftu文件。第8页共41页--基于Linux的轻量化GUI图形系统和硬件平台四、演示Hello文本控件和按键控件到点击鼠标右键,跳转到相关代码,如下图在这个例程中,ui的界面文件是main.ftu,那么对应的逻辑代码文件就是第9页共41页--基于Linux的轻量化GUI图形系统和硬件平台控件是Button1。按钮按下的事件,会触发onButtonClick_Button1这个函数,我们在这里输入代码//设置控件的文字显示为Hello//mPtr是文本控件对应的指针变量,命名规则(m+ID+Ptr)然后在在项目管理器窗口选择hello这个项目的目录,点击右键,选择编译(快捷键如下图第10页共41页--基于Linux的轻量化GUI图形系统和硬件平台如果代码没有错误,则在控制台会显示编译成功的信息。2、控件命名规则每一个控件都有一个名称,经过编译后,会自动生成一个对应的指针变量。如文本控件的ID名称是TextView1,所对应的指针变量名是(命名规则固定为m+ID+Ptr);第11页共41页--基于Linux的轻量化GUI图形系统和硬件平台控件名称所对应的指针变量已经事件响应函数如下也可以在文件中,查看所有控件的名称。五、编译下载调试1、在上面hello工程目录下,点击右键>>下载调试,使用USB线将开发板与电脑连接,正常情况下当前的应用会直接下载到开发板中运行。第12页共41页--基于Linux的轻量化GUI图形系统和硬件平台下图是应用代码推送到开发板之后的执行情况第13页共41页--基于Linux的轻量化GUI图形系统和硬件平台注意:1、下载调试只是将目前开发的应用推送到目标开发板中运行,但程序并不会固化在开发板节的烧录固件。CPU的下载调试需要插入TFTF上电之后如果TF卡中有应用程序,会优先运行TF卡中的应用程序。USBwifi配置>>YOXIOS>>ADB连接方式,设置为USB或网络IP地址。如果USB和WIFI都不能下载程序,还可以使用TF卡启动程序。调试和查看日志YOXIOS的打印统一调用LOGD或LOGE宏输出,使用方法与C语言的printf相同;默认生成的代码里就有调用的例子(默认被注释掉,需要时打开),代码如下:#include"utils/Log.h"//需要调用头文件staticboolonButtonClick_Button1(ZKButton*pButton){LOGD("onButtonClick_Button1\n");//打印输出日志returntrue;}在菜单栏上选择调试配置->切换日志窗口,工具会切换到另一个界面,这是程序执行的日志可以在这个窗口进行查看。注意,此功能需要安装和连接好ADB第14页共41页--基于Linux的轻量化GUI图形系统和硬件平台3、命令行模式在菜单栏调试配置>>打开系统命令行可以使用命令行模式与系统通信在系统命令行模式下,输入adbshellls,可以列出目录内容,如下图注意:命令行模式谨慎使用六、烧录固件和修改开机1、修改开机第15页共41页--基于Linux的轻量化GUI图形系统和硬件平台系统允许用户自行修改开机首先准备一张开机图片,图片必须满足以下条件:1、图片名称固定为boot_logo.JPG,注意,文件后缀是大写的JPG;其他名称将无法识别。2、图片大小不能超过128KB。3、图片分辨率必须与屏幕分辨率完全相同,如480*272,800*480。操作步骤:首先将boot_logo.JPG拷贝到TF卡根目录下,再将TF卡插入到机器中,设备会自动弹出升级提示或者重新开机,出现下图界面后,选择boot_logo然后点击升级即可。升级完成后系统会关机重启,此时拔出TF卡,防止系统再次升级。提示:升级一张全黑的图片可以去掉开机LOGO。2、烧录固件第16页共41页--基于Linux的轻量化GUI图形系统和硬件平台我们通过下载调试运行程序,并不能将程序固化到设备中,如果您拔掉TF卡或者断电重启,程序将自动恢复。烧录固件可以将程序固化在设备内部,一上电,默认就会启动该程序。选择菜单栏制作image升级包按钮,选择路径配置,在弹出框中选择TF卡目录或者镜像文件的输出目录,点确定。配置好输出目录,现在点击上图中的按钮开始编译,它会将编译结果打包,并生成update.img文件输出到配置的目录下。update.img文件成功生成后,将其拷贝到TF卡里(注意:使用前,请将TF卡格式化为FAT32格式TF卡插入机器中,机器重新上电,系统检测到TF卡里的文件,就会启动升级程第17页共41页--基于Linux的轻量化GUI图形系统和硬件平台序,在下图的界面中,勾选升级的项目,点击升级。升级完成后及时拔掉升级卡,防止重复升级。注意:如果屏幕损坏或触摸不准情况下,导致不能通过点击按钮进行升级,那么这种情况下,我们可以通过自动升级方式来升级系统,请查看。3、从TF卡启动程序如果USB或WIFI都不能下载程序,可以使用TF卡来启动程序。点击导航条旁边编译输出按钮的黑色下拉箭头,在弹出的菜单中选择路径配置,在弹出的对话框里选择TFTFFAT32格式。第18页共41页--基于Linux的轻量化GUI图形系统和硬件平台配置好输出目录之后,点击上图中的编译输出按钮开始编译,它会将编译结果打包输出到配置的盘符下。操作成功后,将在TF卡的根目录下生成EasyUI.cfgfont等目录和文件。将TF卡插入机器中,重新上电,系统检测到TF卡里的文件,就会启动卡里的程序,而不是系统内的程序。七、多窗口界面和控件介绍1、第一个启动界面当我们新建一个工程时,生成的模板代码里面有一个Main.cpp文件,jni/Main.cpp,其中onStartupApp是启动时调用的界面,下图红框内表示启动的是mainActivity界面,对应的UI资源文件为main.ftu。第19页共41页--基于Linux的轻量化GUI图形系统和硬件平台我们也可以看一下jni/activity/mainActivity.cpp里面的代码,就清楚知道对应的是哪个UI资源了,如下图2、多个应用界面在uiUI文件,在弹出的新窗口输入新UI文件名,我们在这个例程中输入setup.ftu,点确定即可新建一个setup的窗口。第20页共41页--基于Linux的轻量化GUI图形系统和硬件平台在Main.ftusetup窗口。EASYUICONTEXT->openActivity("setupActivity"第21页共41页--基于Linux的轻量化GUI图形系统和硬件平台在setup.ftu名字改为sys_back,EASYUICONTEXT->goBack();语句,来返回到上一级界面。如下图:编译完成后可以下载到开发板运行,我们已经新建了一个setup的窗口,并且执行了打开和返回的动作。下面是与界面控制相关的语句第22页共41页--基于Linux的轻量化GUI图形系统和硬件平台EASYUICONTEXT->openActivity("subActivity");//打开窗口EASYUICONTEXT->closeActivity("subActivity");//关闭窗口EASYUICONTEXT->goBack();//返回上一级EASYUICONTEXT->goHome();//返回主页(第一个启动界面)3、界面活动周期3.1在介绍界面的活动周期之前,我们先来了解一下界面的层级关系首先应用启动之后会先进入mainActivity对应的界面,即启动界面。之后通过openActivity方法打开了subActivity对应的界面,接着再进入thirdActivity对应的界面,就形成了上图所看到的层级效果了;最后打开的界面在层级上层,它们间形成了栈的这样一种关系;3.2打开界面时的活动流程我们再来看看调用openActivity方法后,程序走了哪些流程,这里分两种情况介绍:3.2.1界面栈中[不存在]即将要打开的界面第23页共41页--基于Linux的轻量化GUI图形系统和硬件平台我们先来看一下subLogic.cc中的onUI_init函数,只有界面栈中不存在该界面情况下,第一次打开时,会走这个函数,走到这里意味着所有控件指针也就初始化完成了,在这个函数里我们就可以开始对它们进行一些操作,如下:staticvoidonUI_init(){//Tips:添加UI初始化的显示代码到这里,如:mTextView1Ptr->setText("123");LOGD("subonUI_init\n");mTextView1Ptr->setText("123");}界面打开时有数据传递过来,在onUI_intent回调函数中接收处理:staticvoidonUI_intent(constIntent*intentPtr){LOGD("subonUI_intent\n");//判断不为空if(intentPtr){第24页共41页--基于Linux的轻量化GUI图形系统和硬件平台//键值解析std::stringcmd=intentPtr->getExtra("cmd");//"open"std::stringvalue=intentPtr->getExtra("value");//"ok"......}}界面显示完成回调onUI_show函数;3.2.2界面栈中[存在]即将要打开的界面这种情况只是将界面栈中对应的界面移动到顶层,不走onUI_init流程;mainActivity界面打开了subActivity界面,它们的活动流程如下:第25页共41页--基于Linux的轻量化GUI图形系统和硬件平台3.3关闭界面时的活动流程当我们调用goBack()函数时,会将顶层的界面弹出,直到启动界面;关闭界面时会回调onUI_quit函数,如果界面打开后有申请一些什么资源的,记得要在这里进行释放;第26页共41页--基于Linux的轻量化GUI图形系统和硬件平台退出顶层的界面后,会将下一层界面显示出来,即会回调下一层界面的onUI_show接口;当我们调用goHome()函数时,会直接回退到启动界面,将其他界面都弹出;当我们调用closeActivity("xxx")函数时,可以移除除启动界面外任意界面;当移除的不是顶层的界面时,下一层的界面不会走onUI_show流程;4、系统内置的界面下面列举一些系统内置的界面及调用方法EASYUICONTEXT->openActivity("ZKSettingActivity");//系统设置EASYUICONTEXT->openActivity("NetSettingActivity");//网络设置EASYUICONTEXT->openActivity("WifiSettingActivity");//wifi设置EASYUICONTEXT->openActivity("SoftApSettingActivity");//AP设置EASYUICONTEXT->openActivity("LanguageSettingActivity");//语言设置EASYUICONTEXT->openActivity("TouchCalibrationActivity");//触摸设置EASYUICONTEXT->openActivity("DeveloperSettingActivity");//开发者选项5、控件通用属性介绍控件的唯一标识是ID,每一个ftu文件里的控件ID值是不允许重名的,不同的ftu文件里的控件IDIDactivity目录下对应的头文件中生成相应的宏定义。第27页共41页--基于Linux的轻量化GUI图形系统和硬件平台下面列举一些控件属性的常见方法include/control/ZKBase.h//接口定义于控件基类ZKBase中intid=pButton->getID();//获取控件ID值LayoutPositionpos(0,0,100,200);//左:0,上:0,宽:100,高:200pButton->setPosition(pos);//设置按钮控件位置LayoutPositionpos=pButton->getPosition();//获取按钮控件位置pButton->setBackgroundColor(0xFF0000);//设置背景颜色mButton1Ptr->setBackgroundPic("/mnt/extsd/pic/bg.png");//设置背景图,绝对路径mButton1Ptr->setBackgroundPic("bg.png");//设置resources目录下bg.png图片mButton1Ptr->setVisible(TRUE);//显示按钮控件mButton1Ptr->setVisible(FALSE);//隐藏按钮控件第28页共41页--基于Linux的轻量化GUI图形系统和硬件平台mButton1Ptr->setInvalid(TRUE);//设置无效状态mButton1Ptr->setInvalid(FALSE);//设置无效状态6、定时器介绍在mainLogic.cc启动代码中,有一个定时器注册语句,如下图。定时器注册之后,可以在onUI_Timer添加定时器的逻辑代码,当定时器触发时,会执行与定时器相同的逻辑代码。第29页共41页--基于Linux的轻量化GUI图形系统和硬件平台接口操作1、GPIO口操作以开发板X3为例,接口中预留了2个口,如下图原理图所示口操作可以添加GpioHelperEx.cpp文件到工程中,路径为:/jni/include/utils/GpioHelperEx.cpp,如安装包内没有此文件可到下载。在代码中添加头文件#include"utils/GpioHelperEx.h"第30页共41页--基于Linux的轻量化GUI图形系统和硬件平台设置口输出状态和读取状态GpioHelperExoutput(GPIO_X3_IO1,1);//GPIO口输出为高GpioHelperExoutput(GPIO_X3_IO1,0);//GPIO口输出为低intstate=GpioHelperEx::input(GPIO_X3_IO2);GPIO口状态串口操作Linux系统的串口编程有别于单片机的封装成Linux串口编程分为以下5个步骤:打开串口、配置串口、读串口、写串口、关闭串口。jni/uart数据与界面交互的回调接口,在mainLogic.cc文件下。第31页共41页--基于Linux的轻量化GUI图形系统和硬件平台2.1uart协议解析和封装文件UartContext:串口的实体控制层,提供串口的开关,发送,接收接口ProtocolData:定义通讯的数据结构体,用于保存通讯协议转化出来的实际变量;ProtocolSender:完成数据发送的封装;ProtocolParser:完成数据的协议解析部分,然后将解析好的数据放到ProtocolData的数据结构中;同时管理了应用监听串口数据变化的回调接口;具体工作流程如下图所示:第32页共41页--基于Linux的轻量化GUI图形系统和硬件平台无论是接收还是发送流程,最底层都是要经过UartContext对串口进行读写操作,如果不需要使用封装后的串口通信协议,可以对文件进行修改。2.2创建串口Demo程序里修改。在工程源码路径jni/Main.cpp里,我们可以看到在程序初始化和销毁时分别有对串口打开和关闭的操作,如需要更多串口通信例程可以访问论坛下载。voidonEasyUIInit(EasyUIContext*pContext){LOGD("onInit\n");//打开串口第33页共41页--基于Linux的轻量化GUI图形系统和硬件平台UARTCONTEXT->openUart(CONFIGMANAGER->getUartName().c_str(),CONFIGMANAGER->getUartBaudRate());}voidonEasyUIDeinit(EasyUIContext*pContext){LOGD("onDestroy\n");//关闭串口UARTCONTEXT->closeUart();}写串口strings="AT+CWMODE=1\r\n";UARTCONTEXT->send((BYTE*)s.c_str(),s.length());3、I2C接口操作以DHT12温湿度传感器为例#include"utils/I2CHelper.h"//参数1:i2c总线号以X3开发板为例,总线号为2//参数2:从机地址,一定要注意是7bit地址//参数3:超时时间,单位:ms//参数4:重试次数I2CHelperi2c(2,0xB8>>1,1000,5);//总线号2tx[0]=0;tx[1]=0Xb9;if(!i2c.transfer(tx,1,rx,5)){LOGD("i2ci2c_transfercfgerror!\n");第34页共41页--基于Linux的轻量化GUI图形系统和硬件平台}Humi_H=rx[0];Humi_L=rx[1];Temp_H=rx[2];Temp_L=rx[3];Temp_CAL=rx[4];由于不同型号的开发板的I2C总线号可能不一致,以X3为例,可以在IDE工具栏的调试配置->打开系统命令行->shellls-li2c总线号为address]由7位地址和一位R/W读写位组成的,这字节是个器件地址,因此需要把8位地址变成7位地址,在我们的I2CHelperi2c(2,0xB8>>1,1000,5)函数中需要右移一位。4、SPI接口操作SPI接口操作需要引入头文件#include//所需头文件#include"utils/SpiHelper.h"staticvoidtestSpi(){uint8_ttx[512],rx[512];/***定义变量*参数1:spi总线号第35页共41页--基于Linux的轻量化GUI图形系统和硬件平台*参数2:模式,可选值:SPI_MODE_0、SPI_MODE_1、SPI_MODE_2、SPI_MODE_3*参数3:spi时钟频率,这里设置了50M*参数4:一个字有多少位,默认值:8*参数5:位顺序,true:表示低位在前,false:表示高位在前;默认值:false,高位在前*/SpiHelperspi(1,SPI_MODE_0,50*1000*1000,8,false);memset(tx,0,512);memset(rx,0,512);tx[0]=0x4B;/***单工写*参数1:写数据地址*参数2:数据长度*/if(!spi.write(tx,5)){LOGD("spitxerror!\n");}/***单工读*参数1:读数据地址*参数2:数据长度*/if(!spi.read(rx,8)){LOGD("spirxerror!\n");第36页共41页--基于Linux的轻量化GUI图形系统和硬件平台}for(inti=0;i<8;i++){LOGD("spi[%d]=0x%x\n",i,rx[i]);}/***半双工传输*参数1:写数据地址*参数2:写数据长度*参数3:读数据地址*参数4:读数据长度*/if(!spi.halfduplexTransfer(tx,5,rx,8)){LOGD("spispi_halfduplex_transferrxerror!\n");}for(inti=0;i<8;i++){LOGD("spi[%d]=0x%x\n",i,rx[i]);}}九、网络、文件、多媒体1、网络部分开发板才支持网络功能,如果使用X3开发板,可以选择串口通信的WIFI模块,使用串口进行网络通信。此处案例以板载WIFI通信功能为例第37页共41页--基于Linux的轻量化GUI图形系统和硬件平台启动系统自带的wifi设置界面EASYUICONTEXT->openActivity("WifiSettingActivity");wifi操作接口说明#include"net/NetManager.h"WifiManager*pWM=NETMANAGER->getWifiManager();//获取WifiManager对象//可以定义个宏,方便以下接口调用#defineWIFIMANAGERNETMANAGER->getWifiManager()WIFIMANAGER->isSupported();//检测机器是否支持wifiWIFIMANAGER->isWifiEnable();//检测wifi是否打开WIFIMANAGER->enableWifi(true);//开关wifiWIFIMANAGER->startScan();//扫描wifiWIFIMANAGER->connect(ssid,pw);//连接wifiWIFIMANAGER->disconnect();//断开wifi连接WIFIMANAGER->isConnected();//检测wifi是否已连接WIFIMANAGER->getConnectionInfo();//获取已连接wifi的信息voidaddWifiListener(IWifiListener*pListener);//注册wifi信息监听voidremoveWifiListener(IWifiListener*pListener);//反注册wifi信息监听2、文件C语言文件读写接口做了简单的封装,方便使用。可以到下载ioutil.h以下步骤,将源码集成到自己的项目中。2.1、在项目的jni文件夹下新建一个文件夹,命名为io,下载ioutil.h、第38页共41页--基于Linux的轻量化GUI图形系统和硬件平台ioutil.cpp两个文件,保存到io文件夹下。示例代码#include"io/ioutil.h"//引入头文件//将“0123456789”这个字符串写入到123.txt这个文件中constchar*filename="/mnt/extsd/123.txt";//文件保存的路径constchar*str="0123456789";ioutil::WriteFile(filename,str,strlen(str));//写文件//将内容追加到文件的末尾,如果指定的文件不存在,则新建文件。constchar*append_str="abcdefgh";ioutil::AppendFile(filename,append_st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论