




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、YOXIOS 入门教程基于 Linux 的 轻量化 GUI 图形系统和硬件平台(V1.0 2020-05)提示:阅读此文档需要有一定的单片机开发、C/C+编程语言、和使用IDE开发工具的基础YOXIOS (C) 2020 游芯科技目录 TOC o 1-5 h z HYPERLINK l bookmark1 o Current Document YOXIOS 入门教程1 HYPERLINK l bookmark4 o Current Document 简介3 HYPERLINK l bookmark7 o Current Document 一、安装YOXIOSIDE开发工具3 HYPERLINK
2、 l bookmark10 o Current Document 二、选购YOXIOS硬件开发板4 HYPERLINK l bookmark13 o Current Document 三、新建工程项目4 HYPERLINK l bookmark23 o Current Document 四、演示 Hello World9 HYPERLINK l bookmark26 o Current Document 五、编译下载调试12 HYPERLINK l bookmark29 o Current Document 六、烧录固件和修改开机 LOGO15 HYPERLINK l bookmark32 o
3、 Current Document 七、多窗口界面和控件介绍19 HYPERLINK l bookmark39 o Current Document 八、GPIO、UART、I2C、SPI 接口操作 30 HYPERLINK l bookmark42 o Current Document 九、网络、文件、多媒体37十、联系 YOXIOS41简介YOXIOS 操作系统是基于 Linux 开发的物联网图形系统和硬件平台。自主研发的 GUI 框架和 IDE 开发工具,高集成度和低成本的硬件方案,提高开发效率,降 低硬件和人力成本,使嵌入式硬件图形化编程更容易。一、安装 YOXIOS IDE 开发工具
4、登录,找到Y0XI0SIDE开发工具的下载链接,在电脑上执行安装即可。安装成功后在桌面有 YOXIOS IDE 快捷方式,双击运行。二、选购 YOXIOS 硬件开发板可以登录 HYPERLINK 官方网站进行购买,目前有 X3 和 X7 两个型号,可 以根据自己的需求,选购相应的硬件开发板。YOXIOS X7YOXIOS X3三、新建工程项目1、选择文件新建YOXIOS项目新建一个工程项目% workspace - 480_272_X3_SampleUI/ui/main.ftu - YOXIOS IDE文件(F)编辑(E)导航(N)搜索(A)工M 设备(D)渭试配置(T)窗口 (W)羅助(H)
5、Alt+Shift+N o I YOXIOS 项目炯(0Qrl+W全部关闭(L)Ctrl+Shift+W(S)Ctrl+S另存为(A).也全部保存(E)Ctrl+Shift+S2(T)移动(V).重命名(M).F2皂剧新(F)F5曲号入.属性(R)Alt+Enter新建(N)main.ftu 480_272_X3_SampleUI/uimain.ftu pingword/uiuartftu 480_272_X3_SampleUI/uiuartMenu.ftu 480_272_X3_SampleUl/uij切换工作空间(W)重新启动退出(X) 平台 480 x2722、输入项目名称,选择平台类型
6、,根据硬件开发板的型号,选择X3或者X7按下一步可以设置基础参数,比如串口号波特率和屏幕分辨率等,也可以按照默认参数点击完成。至此,一个新的hello的项目就创建完毕了。3、新建项目完成之后,IDE整体的界面如下0 %於 480_272JC3_SampleUI话 800j!80master SampleUIv 於 Hello團 Includesv &而v & activity园 mainActivity.cpp ) 囲 mainActivity.h include7 3 logic园 mainLogic.cc3 uarti 团 Mairt.cpp 够 libeasyui.so - arm/le
7、 陽 Makefile& libs& objtextbutton图形界面耐国 unistd.hEo main.ftu區| mainLogic.cc 園 mainActivit.Fffl滑动主窗口m滑动窗口罔标项目管理器的文件目录下,分为 jni、libs、obj、resources、ui 等文件夹,其中libs和obj是库文件和编译目标文件。v 砖 Hello欢鄙 Includes齡 jni 毎 activityiD animation& appD camera0 controlD entry& imeD json& managerD media& netD os0 security已 sto
8、rage0 system& utilsD windowv logic胡 mainLogic.cc4、jni 文件结构介绍Jni 文件主要存放代码文件,它包含了 activity 、 include 、logic 、uart 、Main.cpp、 Makefile 共 6 个部分。v Djniv D activity窗 mainActivity.cpp 0 mainActivity.hD includev 3 logic:-窗 mainLogic.ccv e uartB CommDef.h国 ProtocolData.h:回 ProtocolParser.cpp0 ProtocolParser.
9、h回 ProtocolSender.cpp0 ProtocolSender.h 园 UartContext.cpp 0 UartContext.h Main.cppb MakefileJni 文件结构和 include 文件结构jniactivity 文件夹activity文件夹是保存UI文件的基础类代码,每一个UI文件,经过编译后,都 会生成相同前缀名的Activity类和Logic.cc文件。例如:UI文件夹下有一 个 main.ftu,那么经过编译后,会生成 mainActivity.h、mainActivity.cpp 以及 mainLogic.cc, mainActivity 类会存
10、放在 activity 文件夹中, mainLogic.cc文件会存放在logic文件夹中。jniinclude 文件夹Include 文件夹主要存放系统相关的头文件,和控件相关的头文件,用于系统编 译。jnilogic 文件夹Logic文件夹主要存放用户的逻辑代码。每一个UI文件在编译后都会生成相 对应前缀名的 Logic.cc 文件,我们编写的代码,主要就是添加在这些 Logic.cc 文件中。jniuart 文件夹Uart 文件夹主要存放串口操作相关的代码,包括读写串口,协议解析等。jniMain.cppMain.cpp是整个Yoxios应用的入口代码,包括选择开机的界面以及一些初始 化
11、,一般情况不需要修改该文件。jniMakefileMakefile/Android.mk、Application.mk 是 编译配置文件,包含了具体的源 码编译过程,一般情况下不需要修改。在编译通过后,会在项目下生成 libs 目录,和 obj 目录,它们分别是编译的目标存放目录和编译的中间文件目录。5、resources 文件夹resources文件夹主要用来存放项目的各种资源文件,包括图片、字体、输 入法配置文件等。如果你还有其他资源文件也可以添加到该文件夹,该文件夹 会完全拷贝到机器中。但是,由于机器自身存储空间的限制,不建议将大文 件存放到该目录,推荐将较大的资源文件存放到TF卡中。我
12、们可以在代码中获取resources目录下的某个文件的绝对路径。例如:如 下代码可以获取resources/test.txt的绝对路径。#include manager/ConfigManager.hstd:string resPath = CONFIGMANAGER-getResFilePathEx(test.txt);6、ui 文件夹个工程有一个默认的main.ftu的UI文件ftu是YOXIOS项目UI文件的后缀名。每一个 ftu 文件对应一个应用界面。通常一个应用包含多个界面,所以 你需要在ui文件夹下右键 新建YOXIOS UI文件创建多个ftu文件。四、演示 Hello World
13、1、在控件区域,拖动文本控件和按键控件到界面设计区域,选择按键控件,点击鼠标右键,跳转到相关代码,如下图eUle牡项目资源営理譲B 480_272_X3_SampleUI於 800j480_X7_master_SampleUIv 於 Hello嫦二圍 Includes*酵泗v 裁 activity 屆 mainActivity.cpp? 區mainActivity.h缶 includev 鉛 logic.!c mainLogic.cc凸 uart囲 Main.cpp第 libeasyui.so - arm/le_!)Makefile0 libsobj resourcesv凸uigo main.
14、ftutest7 X 匕題 “00% J加島誌|棒硝D? |皿理| 1|1|1壽删除(D)复制(0订控件恰 SelectMarqueeA:欣M列表组 昌列表列辭项*H滑动窗组曲滑动主窗口田滑动窗口圄标M波形圉因波形M单礙 口单礙 选项園 mainLogic.cc 3 lo main.ftu-*4*ralje*触摸事件将錐续传递到控件上116報17日118119120121122123124125126127128129130J1B1 * static bool onButtonClickmButtonl(ZKButton *pButton) I137138|.c mainActivity.cp
15、p*/static bool onmainActivityTouchEvent(const MotionEvent &ev) switch (ev.mActionStatus) case MotionEvent: : E_ACTION_D0WN:打触摸按下/LOGD(时刻=%ld,坐标:x = %d, y = %d t ev.mE vent Time, ev.mX, break;case MotionEvent: : E_ACTI0N_M0VE: /触摸滑动break;case MotionEvent: : E_ACTI0N_UP: /触摸拾起break;default:break;retur
16、n false;LOGD( ButtonClick Buttonl I! !n);/在这里写下技键的代码ImTextViewlP七r-setText:( Hello World !return false;在这个例程中,ui的界面文件是main.ftu,那么对应的逻辑代码文件就是 mainLogic.cc,我们日常的代码实现都是这里。新增的两个控件的ID值,文本控件是TextView1,按钮控件是Button1。按钮按下的事件,会触发onButtonClick_Button1 这个函数,我们在这里输入代码 mTextView1Ptr-setText(Hello World!);设置控件Text
17、View1的文字显示为Hello World!/mTextViewlPtr是文本控件TextView1对应的指针变量,命名规则(m+D+Ptr) 然后在在项目管理器 窗口选择hello这个项目的目录,点击右键,选择编译 YOXIOS (快捷键CTRL+ALT+Z),或者导航栏.按钮,即可编译整个工程。 如下图ro workspace - Hello/jni/logic/mainLogic.cc - YOXIOS IDE文件(F)碉(E)源码重构(T)导航(N)搜索(A)工具设备(D)凋试配這(T)窗口嵇助(H) 已过心丨釦” 含 9 0 弋和 9 3 粘电项目空源莒理器e u 於 480_27
18、2_X3_SampleUI800 480 X7 master SampleU Ip 弟 Helle詁二 I吨 v釘jr强(N)打开文件所在目灵 在新窗中打开(N)复制(C) 粘贴(P) 删除(D) 移动(V). 重命名(M).导入.园 mainLogic.cc 以*/,Ctrl+CCtrl+V删除l/o main.ftu 园 mainActivity.cpp false触摸事件将纟隹续传递到控件上ic bool onmainActivityTouchEvent(const MotionEvent switch (ev.mActionStatus) case MotionEvent: : E_A
19、CTION_DOhlN: /摸按下/LOGD(”时刻=%ld 坐标 x = y = %d, ev.mEv break;case MotionEvent: : E_ACTION_MOVE: / / 触摸滑动 break;case MotionEvent: : E_ACTION_UP: /触摸抬起 break;default:break;凸川紂& ofe- r fastest构建项目剧新(F)关闭项目关闭不相关的项目(U)return false;F5索引ic bool onButtonClick_Buttonl(ZKButton *pButton)也 LOGD(* ButtonClick But
20、tonl ! ! !n);在这里写下按薩的代码mTextViewlPtr-setText(Hello World!);return false;下瞬试Ctrl+Alt+R雇性(R)A 编译 YOXIOS转换扁译平台如果代码没有错误,则在控制台会显示编译成功的信息。2、控件命名规则每一个控件都有一个 ID 名称,经过编译后,会自动生成一个对应的指针变量。如文本控件的ID名称是TextView1,所对应的指针变量名是mTextView1 Ptr(命名规则固定为 m+ID+Ptr);按適昌列表口属性凸壬聲r P n扈性直IDTextViewl文宁text大小16垂亘吾口內容与边框的I:顔色遁背嶷頻色
21、设置粗体否否文宇滚动关闭站滚顽新目150文字滚5文字滚动方向从右施坐标目列表子项U滑动窗口组夕曲滑动主窗口港动窗口图标控件 ID 名称所对应的指针变量已经事件响应函数如下cj mainLogic.cc *main.ftuB mainActivity.cpp 茨h) mainActivhy.hf *1*I.4.4.4.:*2 /een auto by zuitools项目资源営理器B %曲 480_272_X3_SampleUI砖 800_480_X7_master Samplelll v 话 Hello鼾制 Includesv 於 jni 念 mainActivity.cpp血j mainAc
22、tivity.h D include7 釘 logic也可以在 mainActivity.cpp 文件中,查看所有控件的名称。Ah/*TAG:GlobalVariablefl*/static ZKButton* mButtonlPtr;static ZKTextView* mTextViewlPtr;static mainActivity* mActivityPtr;10/*register activity*/REGISTER_ACTIVITY(mainActivity);13五、编译下载调试1、在上面hello工程目录下,点击右键下载调试,使用USB线将开发板与电脑连接,正常情况下当前的应
23、用会直接下载到开发板中运行。1 workspace - Hello/jni/activity/mainActivity.cpp - YOXIOS IDE文件(D编辑(E)源码重构导航(N)搜素(A) IM设备Q)凋试配置CD D(W)帮助但: 戸-丨釦含 G 0 :牡于卜 3 O e % psLogic.ccSo main.ftu cj mainActivity.cpp 氏/* * * *.2 /gen auto by zuitools WWWWWVWWV*A4 include mainActivity.h打开文件所在目录励过中打开(N) E ffi复制(C)Ctrl+C w歯粘貼(P)Ctr
24、l+Vv e X删除(D)测除移动(V)“.於te重離(M).F2新建(N)导入(I).G: GlobalVariable 全局变里*/ ic ZKButton* mButtonlPtr; ic ZKTextView* mTextViewlPtr; ic mainActivity* mActivityPtr;gister activity*/STER_ACTIVITY(mainActivity);def struct int id; /定时器ID ,不能重复int time; /定时器时间间踽单位臺秒CTIVITY_TIMEER;F5lude logic/mainLogic.ccCtrl +
25、Alt+ZAlt+EnterharedLibrary :/libs/armeabi/li下图是应用代码推送到开发板之后的执行情况注意:1、下载调试只是将目前开发的应用推送到目标开发板中运行,但程序并不会固化在开发板 上,也就是重新上电就恢复成原来的应用。如果需要将应用固化到开发板上,请查看下一章 节的烧录固件。2、由于CPU硬件资源的不同,X7的下载调试需要插入TF卡,在TF卡中临时运行,在重新 上电之后如果TF卡中有应用程序,会优先运行TF卡中的应用程序。3、部分机型除了 USB 口下载调试之外,还可以通过网口和wifi来进行调试,可以通过调试 配置YOXIOS ADB连接方式,设置为USB
26、或网络IP地址。如果USB和WIFI都不能下载 程序,还可以使用TF卡启动程序。2、LOG 调试和查看日志YOXIOS的打印统一调用LOGD或LOGE宏输出,使用方法与C语言的printf相同;默认生成的代码里就有调用的例子(默认被注释掉,需要时打开),代码如下:#include utils/Logh/需要调用头文件static bool onButtonClick_Button1(ZKButton *pButton) LOGD(onButtonClick_Button1n); /打印输出日志return true;在菜单栏上 选择调试配置- 切换日志窗口,工具会切换到另一个界面,这 是程序执
27、行的日志可以在这个窗口进行查看。注意,此功能需要安装和连接好ADB|Q zkswe-zkswe. Online529PID85TID85Applicatio5295298585858552S85855298585529529529858585958585529529525858585858585529858552985853、命令行模式 在菜单栏调试配置 打开系统命令行可以使用命令行模式与系统通信:c - 0X1 OS IDE湄试配置(D奮口帶助ADBmainLogic.cc main17 static bool on181920212223打开etupLogic.ee 戏 4 nu二“尸凯匸
28、丄甘丄匸” 1 UMricVGRt ( COHSt Mo mwiliEh (ev mA480_272_X3_SampleUI 800_480_X7_master_SampleUI!o main.ftu 戏 回 ma inActivity.cpp国 ma in ActivityV Hello掛二-丽 Includesfi&jni& libs& obje resourcesv B uia main.ftu 话 testtextbutton配置好输出目录,现在点击上图中的按钮开始编译,它会将编译结果打包,并 生成update.img文件输出到配置的目录下。update.img文件成功生成后,将其拷贝
29、到TF卡里(注意:使用前,请将TF卡格式化为FAT32格式),将TF卡插入机器中,机器重新上电,系统检测到TF卡里的文件,就会启动升级程序,在下图的界面中,勾选升级的项目,点击升级。升级完成后及时拔掉升级卡,防止重复升级。3、从 TF 卡启动程序如果 USB 或 WIFI 都不能下载程序,可以使用 TF 卡来启动程序。点击导航条 旁边编译输出田按钮的黑色下拉箭头,在弹出的菜单中选择路径配置, 在弹出的对话框里选择 TF 卡盘符,请确保 TF 卡可以正常使用,并且是 FAT32 格式。二进制Inc ludes配置好输出目录之后,点击上图中的编译输出按钮开始编译,它会将编译结果 打包输出到配置的盘
30、符下。操作成功后,将在TF卡的根目录下生成EasyUI.cfg 、ui、lib、 font 等目录和文件。将 TF 卡插入机器中,重新上电, 系统检测到 TF 卡里的文件,就会启动卡里的程序,而不是系统内的程序。七、多窗口界面和控件介绍1、第一个启动界面当我们新建一个工程时,生成的模板代码里面有一个Main.cpp文件,jni/Main.cpp,其中onStartupApp是启动时调用的界面,下图红框内表示启动的是mainActivity界面,对应的UI资源文件为main.ftu。rn workspace - Hello/jni/Main.cpp - YOXIOS IDE文件(E)編辑源码 M
31、teCD 导航搜索 IM 设备(DJ谓试配置CD 窗口曲報助QD480_272_X3_SampleUI:-砖 800_480_X7_master_SampleUI v 话 Hello蝶二 飙 Includesv砂factivityD include鉛 logic: libeasyui.so - arm/le MakefileH初始化时打开串口UARTCONTEXT-openUart(CONFIGMANAGER-getUartName().c_str(UARTCONTEXT|n我们也可以看一下 jni/activity/mainActivity.cpp 里面的代码,就清楚知道对应的是哪个 UI
32、资源了,如下图:F3園物I釦A;含引9中 匕项目空源号理器回 ma inLog ic.cc o main.ftuIS % p480_272_X3_SampleUI书 800 480 X7 master SampleUI v 砖 Hello炒二 諭 Includes7 $Jniv activity圧 mainActivity.cpp mainActivity.h已 include& logic已 uart囲 Main.cpp libeasyui.so - arm/le b Makefile 3 libs23 回 *Main.cppmVideoLoopErrorCount = 0;111112-
33、mainActivity:MnainActivity() 113114115116411711811磴 *mainActivi./todo add init file here/退出应用时需要反注册EASYUICONTEXT-unregisterGlobalTouchListener(this); onUI_quit();.y.Qf.jgjg或您巳滾坦或創2或幾塢 (onProtocolDatallpdatconst char* mainActivity:getAppName() const return main.ftu;/|22、124 /TAG:onCreateA125 void mai
34、nActivity:onCreate() 126Activity:onCreate();2、多个应用界面在ui目录下右键,选择新建YOXIOSUI文件,在弹出的新窗口输入新UI文件名,我们在这个例程中输入setup.ftu,点确定即可新建一个setup的窗口。7 砖 HelloIncludesjni libs obj131 static bool onButtonClick_Buttonl(LOGD(n ButtonClick Buttonl !I/在这里写下按键的代码mTextViewlPtr-setText(Helloreturn false;137r已匚已tw新建N Q YOXIOS U
35、I 文眸洞 打开文件所在目录在細口 口打开打文件文件夹复制Q.l:在 Main.ftu 主窗口中,我们新增一个按键,并且增加下面一行代码来打开 setup窗口。 EASYUICONTEXT- openActivity(setu pActivity);在 setup.ftu 界面,我们也新增一个按钮,并且把按钮的 ID 名字改为 sys_back,不需要写代码,即可返回上一个界面。也可以使用EASYUICONTEXT-goBack();语句,来返回到上一级界面。如下图:b顼目资源善理器 筋 800_480_X7_ma ster Sa mplel * v 於 Hello弑二團 Includesvv
36、 於 activity挺ma i nActivity.cpp虽| mainActivity.h厨 setupActivity.cpp国 setupActivity.h3 includev 0 logic品 mainLogic园 setupLogp uartc| Main.cpp雇性值IDsys backS3波形圄单卿粗体否斟休否好滚动文字滚换新时隹150好滚薛5文字滚动方向从右到左舸昱否0令|甸|輛蠶匸竄|西旦已”= 编译完成后可以下载到开发板运行,我们已经新建了一个setup的窗口,并且 执行了打开和返回的动作。下面是与界面控制相关的语句EASYUICONTEXT- openActivity
37、( subActivity );/打开窗口EASYUICONTEXT- closeActivity( subActivity); /关闭窗口EASYUICONTEXT-goBack();/返回上一级EASYUICONTEXT-goHome (); /返回主页(第一个启动界面)3、界面活动周期3.1在介绍界面的活动周期之前,我们先来了解一下界面的层级关系首先应用启动之后会先进入mainActivity对应的界面,即启动界面。之后通 过openActivity方法打开了 subActivity对应的界面,接着再进入 thirdActivity对应的界面,就形成了上图所看到的层级效果了;最后打开的
38、界面在层级上层,它们间形成了栈的这样一种关系;3.2打开界面时的活动流程我们再来看看调用openActivity方法后,程序走了哪些流程,这里分两种情 况介绍:3.2.1界面栈中不存在即将要打开的界面我们先来看一下subLogic.cc中的onUI_init函数,只有界面栈中不存在该界 面情况下,第一次打开时,会走这个函数,走到这里意味着所有控件指针也就 初始化完成了,在这个函数里我们就可以开始对它们进行一些操作,如下: static void onUI_init() /Tips :添加UI初始化的显示代码到这里,如:mTextView1Ptr-setText(123);LOGD(sub on
39、UI_initn);mTextView1Ptr-setText(123);界面打开时有数据传递过来,在onUI_intent回调函数中接收处理:static void onUI_intent(const Intent *intentPtr) LOGD(sub onUI_intentn);/判断不为空if (intentPtr) /键值解析std:stringcmd = intentPtr-getExtra(cmd);/ openstd:stringvalue = intentPtr-getExtra(value);/ ok界面显示完成回调onUI_show函数;3.2.2 界面栈中 存在 即将
40、要打开的界面/ mainActivityo pen Activity (su bActiv ity )ma in ActivitysubLogic,CC这种情况只是将界面栈中对应的界面移动到顶层,不走onUI_init流程;q pe n Activity s u bActivityJ(打开显示一个界面,意味着之前顶层的界面被隐藏掉了;假设在mainActivity界面打开了 subActivity界面,它们的活动流程如下:mainLogic.cconU!_hidesubLogic.cc3.3 关闭界面时的活动流程当我们调用goBack()函数时,会将顶层的界面弹出,直到启动界面;thirdAc
41、tivity7subActivity / mainActivity/ goBack/main ActivitysubActivity关闭界面时会回调onUl_quit函数,如果界面打开后有申请一些什么资源的,记得要在这里进行释放;退出顶层的界面后,会将下一层界面显示出来,即会回调下一层界面的onUI_show接口;当我们调用goHome()函数时,会直接回退到启动界面,将其他界面都弹出;当我们调用closeActivity(xxx)函数时,可以移除除启动界面外任意界面; 当移除的不是顶层的界面时,下一层的界面不会走onUI_show流程;4、系统内置的界面下面列举一些系统内置的界面及调用方法E
42、ASYUICONTEXT-openActivity(ZKSettingActivity);/系统设置 EASYUICONTEXT-openActivity(NetSettingActivity);/网络设置 EASYUICONTEXT- openActivity(WifiSettingActivity ); /wifi 设置EASYUICONTEXT-openActivity(SoftApSettingActivity);/AP 设置EASYUICONTEXT- openActivity( LanguageSettingActivity ); /语言设置EASYUICONTEXT- openA
43、ctivity(TouchCalibrationActivity);/触摸设置EASYUICONTEXT- openActivity(DeveloperSettingActivity) ;/开发者选项5、控件通用属性介绍控件的唯一标识是ID,每一个ftu文件里的控件ID值是不允许重名的,不同 的ftu文件里的控件ID值允许重名;设置ID值后,编译完会在activity目录 下对应的头文件中生成相应的宏定义。文件(E)歸辑源码重构CD 导航CN)搜案 工具设會凋试配置CD D(W)帮助CH)ITS 辺叽 | 釦/3 矽fr - PO 二项目资源肯理器 setup.ftu 回 setupActiv
44、i.jj setupLogic.cc 国 setupActivity.h 茨 se U480_272_X3_SampleUI曲 800_480_X7_ma ste r_S a m p I eL v 妙 Hello蜡二 麵 Includesv 齡 jnip 石 activity 厨 mainActivity.cpp松 mainActivity.h 4 setuDActivitv.cDD1617181920212223242526待include Winclude 林include 转include 转include 林include 转include 林include 转include 转inc
45、lude #includecontrol/ZKButton.h control/ZKCircleBar.h control/ZKDiagram.h control/ZKListView.h* control/ZKPointer.h control/ZKQRCode.h control/ZKTextView.h control/ZKSeekBar.h control/ZKEditText.h control/ZKVideoView.h window/ZKSlideWindow.hH国 setu pActivity, h3 include3 animation& appD camera凸 cont
46、rol已 entry凸 imev 已 json 国 allocator.h/*TAG:MacroID*/define ID_SETUP_Buttonl20002Wdefine ID_SETUP_sys_back100define ID_SETUP_TextViewl50001/*TAG:MacroID END*/223313;34 class setupActivity : public Activity353637public ZKSeekBar:ISeekBarChangeLi: public ZKListView:IltemClickListei public ZKListView:Ab
47、sListAdapter,下面列举一些控件属性的常见方法include/control/ZKBase.h /接口定义于控件基类 ZKBase 中int id = pButton-getID(); /获取控件 ID 值LayoutPosition pos(0, 0, 100, 200);/ 左:0,上:0,宽:100,高:200 pButton-setPosition(pos); / 设置按钮控件位置LayoutPosition pos = pButton-getPosition(); /获取按钮控件位置 pButton-setBackgroundColor(0 xFF0000); / 设置背景
48、颜色 mButton1Ptr-setBackgroundPic(/mnt/extsd/pic/bg.png);/设置背景图,绝对路径mButton1Ptr-setBackgroundPic(bg.png);/ 设置resources目录下bgpng图片 mButton1Ptr-setVisible(TRUE); / 显示按钮控件 mButton1Ptr-setVisible(FALSE); / 隐藏按钮控件mButton1Ptr-setInvalid(TRUE); / 设置无效状态mButton1Ptr-setInvalid(FALSE); / 设置无效状态6、定时器介绍在 mainLogic
49、.cc 启动代码中,有一个定时器注册语句,如下图。右项号空源音理器480_272_X3_SampleUI话 800_480_X7_master_SampleUI曲 DHT12Demo话 ESP8266TCPDemo7 GpioDemo掛二 妙 Includesv 斜 jni 0 activityv 妙 logicJs mainLogic.cc區CommDef.h回 ProtocolData.h|x| ProtocolParser.cpph Protocol Pa rser.h园 ProtocolSender.cppi mainLogic.cc 关 I 国 ProtocolSend. 也 Pro
50、tocolPars. h UartContextcpp 39 5/if 38 void sensor_read(void);/读394142434445464748495040 float TempratureHumi;/定义温湿度变里,it匕变里为全局变里 /*注册定时器*在此数组中添加即可*/static S_ACTIVITY_TIMEER REGISTER .ACTIVITY .TIMER .TAB = /0,2000, /7定时器id=0,时间间話秒1, 1000,;l窃 51 static void onUI_init() 53筍 54 static void onUI_quit()
51、 55 RA定时器注册之后,可以在onUI_Timer添加定时器的逻辑代码,当定时器触发/爭口数IS回调接口6061 static bool onUI_Timer(int id) 62636465666768697071727476787Q/Tips :添加定时器响应的代码到这里但是需要在本文件的REGISTER_ACTIVITY_TIMER_TAB数纟 /id是定时器设置时假的标签这里不要写耗时的操作,否则影响UT刷ruturn: true继续运行定廿 switch (id) case 0:break;case 1:/走时器mTextView3Ptr-setText(hello);break
52、;default: break; return true;时,会执行与定时器 ID 相同的逻辑代码。八、GPIO、UART、I2C、SPI 接口操作1、GPIO 口操作 以开发板X3为例,接口中预留了 2个GPIO 口,如下图原理图所示UAR72_RX |yCTP_SDA |yCTP_9CL |y.MO 巨于辽WU 匡輕Ml |1 Biim 序讣LRADC |jgpaL- UZTX,U2RX.I2C.SDA,I2C.SCLSPI_MISOSPLCLK,SPLM0S1SPI_CSADCO_LEYPE4 二匡严!匚 GPIOPE12二)匡卢匚二 中】02GPIO 口操作可以添加GpioHelper
53、Ex.cpp文件到工程中,路径为:/jni/include/utils/GpioHelperEx.cpp,如安装包内没有此文件可到 下载。在代码中添加头文件#include utils/GpioHelperEx.h文件(B 扁辑 源码重构CD导航搜索(A)工具设备9)凋试配置 D(W)耕助凹丨釘幺4 和若项目空源音理器B & netD os3 securitye storage3 system y & utils迪 AdcHelper.hh BitmapHelper.hcj GpioHelperExxpph GpioHelperEx.hl2CHelper.hI国 JsonHelper.hh|
54、Log.hh MessageQueue.hh ScreenHelper.hh SpiHelper.hh| TimeHelper.h區VelocityTracker.h& window釘 logice uart0 api.c 1 o main.ftu ma inLog ic.cc禺| GpioHelperEx.h16/* GpioHelper.h* Created on: May 17, 2018*Author: guoxs*/Wifndef _UTILS_GPIO_HELPER_H_define _UTILS_GPIO_HELPER_H_Id12 Wdefine GPI0_X3_I01ME_0
55、412 转define GPIO X3 102 E 12 -14-/* brief GPIO作帮助类 TOC o 1-5 h z */17 class GpioHelperEx 18 public:196/* brief读技口状态* (return -1尖败,1/0(高/低电平)咸功*/static int input(const char *pPin);设置 GPIO 口输出状态和读取状态GpioHelperEx:output(GPI0_X3_I01, 1);/GPI0 口输出为高GpioHelperEx:output(GPI0_X3_I01, 0); /GPIO 口输出为低int stat
56、e = GpioHelp er Ex: : inpu t(GPIO_X3_IO2); / 读取 GPI0 口状态2、UART 串口操作Linux系统的串口编程有别于单片机的UART,对于硬件直接读写寄存器的操作 封装成API调用,所以可以沿用标准Linux编程来操作串口。Linux串口编程分 为以下 5 个步骤:打开串口、配置串口、读串口、写串口、关闭串口。为了简化开发流程,使开发人员更多的关注业务逻辑的开发,我们的工具在新建 工程时会自动生成串口通讯的代码,在 jni/uart 目录下,同时我们也提供了协议 数据与界面交互的回调接口,在 mainLogic.cc 文件下。牡项目空源号理器v
57、齡 jniQ activitye includev 釘 logicIcj mainLogic.cc厨 setupLogic.ccy & uart国国 0 园国园CommDef.h ProtocolData.h ProtocolParser.cpp ProtocolPa rser. h ProtocolSender.cpp ProtocolSender.h UartContext.cppUartContext.hxj Main.cpp libeasyui.so - arm/le b Makefile A libs2.1uart 协议解析和封装文件UartContext:串口的实体控制层,提供串口
58、的开关,发送,接收接口ProtocolData:定义通讯的数据结构体,用于保存通讯协议转化出来的实际变量;Protocolsender:完成数据发送的封装;ProtocolParser:完成数据的协议解析部分,然后将解析好的数据放到ProtocolData的数据结构中;同时管理了应用监听串口数据变化的回调接口;具体工作流程如下图所示:无论是接收还是发送流程,最底层都是要经过UartContext对串口进行读写操作,如果不需要使用封装后的串口通信协议,可以对文件进行修改。2.2创建串口 Demo程序 每创建一个工程项目时,都会提示设置串口名称和波特率,也可以在工程的属性 里修改。在工程源码路径j
59、ni/Main.cpp里,我们可以看到在程序初始化和销毁时分 别有对串口打开和关闭的操作,如需要更多串口通信例程可以访问论坛下载。 void onEasyUIInit(EasyUIContext *pContext) /打开串口UARTCONTEXT-openUart(CONFIGMANAGER-getUartName().c_str(), CONFIGMANAGER-getUartBaudRate();void onEasyUIDeinit(EasyUIContext *pContext) LOGD(onDestroyn);/关闭串口UARTCONTEXT-closeUart();/写串口s
60、tring s = AT+CWMODE=1rn;UARTCONTEXT-send(BYTE *)s.c_str(),s.length();3、I2C 接口操作以 DHT12 温湿度传感器为例#include utils/I2CHelper.h/参数1: i2c总线号 以X3开发板为例,总线号为2/参数2:从机地址,一定要注意是7bit地址/参数3:超时时间,单位:ms/参数4:重试次数I2CHelper i2c(2,0 xB8 1, 1000, 5);/总线号 2tx0 = 0;tx1 = 0Xb9;if (!i2c.transfer(tx, 1, rx,5) Humi_H = rx0;Hum
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- WB/T 1041-2024自动分拣设备管理要求
- 纺织品的自动化检验设备考核试卷
- 外汇市场流动性分析考核试卷
- 纺织电气自动化控制原理考核试卷
- 森林生态环境监测技术提升考核试卷
- 木材结构优化设计与力学性能考核试卷
- 皮装饰制品生产过程中的质量控制考核试卷
- 染料进出口贸易分析与市场前景考核试卷
- 供应链数字双胞胎实现端到端可视化考核试卷
- 西南石油大学《数据挖掘导论》2023-2024学年第二学期期末试卷
- 传染病的防控知识课件
- 高校保密警示教育
- 预防狂犬病病知识
- 2025年初中语文名著阅读《林海雪原》知识点总结及练习
- 西部计划考试考题及答案
- 教师专业发展制度教师专业发展的保障制度
- 学校德育管理体系
- XX文化产业投资公司二零二五年度股东退股及文化创意协议
- 青年博物馆文创产品消费研究:一个社会实践分析视角
- 2025版学校学生食堂餐具清洗消毒服务合同2篇
- 跟着电影去旅游知到智慧树章节测试课后答案2024年秋山东大学(威海)
评论
0/150
提交评论