YOXIOS 入門(mén)教程--基于Linux的 輕量化GUI圖形系統(tǒng)和硬件平臺(tái)_第1頁(yè)
YOXIOS 入門(mén)教程--基于Linux的 輕量化GUI圖形系統(tǒng)和硬件平臺(tái)_第2頁(yè)
YOXIOS 入門(mén)教程--基于Linux的 輕量化GUI圖形系統(tǒng)和硬件平臺(tái)_第3頁(yè)
YOXIOS 入門(mén)教程--基于Linux的 輕量化GUI圖形系統(tǒng)和硬件平臺(tái)_第4頁(yè)
YOXIOS 入門(mén)教程--基于Linux的 輕量化GUI圖形系統(tǒng)和硬件平臺(tái)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、YOXIOS 入門(mén)教程基于 Linux 的 輕量化 GUI 圖形系統(tǒng)和硬件平臺(tái)(V1.0 2020-05)提示:閱讀此文檔需要有一定的單片機(jī)開(kāi)發(fā)、C/C+編程語(yǔ)言、和使用IDE開(kāi)發(fā)工具的基礎(chǔ)YOXIOS (C) 2020 游芯科技目錄 TOC o 1-5 h z HYPERLINK l bookmark1 o Current Document YOXIOS 入門(mén)教程1 HYPERLINK l bookmark4 o Current Document 簡(jiǎn)介3 HYPERLINK l bookmark7 o Current Document 一、安裝YOXIOSIDE開(kāi)發(fā)工具3 HYPERLINK

2、 l bookmark10 o Current Document 二、選購(gòu)YOXIOS硬件開(kāi)發(fā)板4 HYPERLINK l bookmark13 o Current Document 三、新建工程項(xiàng)目4 HYPERLINK l bookmark23 o Current Document 四、演示 Hello World9 HYPERLINK l bookmark26 o Current Document 五、編譯下載調(diào)試12 HYPERLINK l bookmark29 o Current Document 六、燒錄固件和修改開(kāi)機(jī) 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 九、網(wǎng)絡(luò)、文件、多媒體37十、聯(lián)系 YOXIOS41簡(jiǎn)介YOXIOS 操作系統(tǒng)是基于 Linux 開(kāi)發(fā)的物聯(lián)網(wǎng)圖形系統(tǒng)和硬件平臺(tái)。自主研發(fā)的 GUI 框架和 IDE 開(kāi)發(fā)工具,高集成度和低成本的硬件方案,提高開(kāi)發(fā)效率,降 低硬件和人力成本,使嵌入式硬件圖形化編程更容易。一、安裝 YOXIOS IDE 開(kāi)發(fā)工具

4、登錄,找到Y(jié)0XI0SIDE開(kāi)發(fā)工具的下載鏈接,在電腦上執(zhí)行安裝即可。安裝成功后在桌面有 YOXIOS IDE 快捷方式,雙擊運(yùn)行。二、選購(gòu) YOXIOS 硬件開(kāi)發(fā)板可以登錄 HYPERLINK 官方網(wǎng)站進(jìn)行購(gòu)買(mǎi),目前有 X3 和 X7 兩個(gè)型號(hào),可 以根據(jù)自己的需求,選購(gòu)相應(yīng)的硬件開(kāi)發(fā)板。YOXIOS X7YOXIOS X3三、新建工程項(xiàng)目1、選擇文件新建YOXIOS項(xiàng)目新建一個(gè)工程項(xiàng)目% workspace - 480_272_X3_SampleUI/ui/main.ftu - YOXIOS IDE文件(F)編輯(E)導(dǎo)航(N)搜索(A)工M 設(shè)備(D)渭試配置(T)窗口 (W)羅助(H)

5、Alt+Shift+N o I YOXIOS 項(xiàng)目炯(0Qrl+W全部關(guān)閉(L)Ctrl+Shift+W(S)Ctrl+S另存為(A).也全部保存(E)Ctrl+Shift+S2(T)移動(dòng)(V).重命名(M).F2皂劇新(F)F5曲號(hào)入.屬性(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)重新啟動(dòng)退出(X) 平臺(tái) 480 x2722、輸入項(xiàng)目名稱(chēng),選擇平臺(tái)類(lèi)型

6、,根據(jù)硬件開(kāi)發(fā)板的型號(hào),選擇X3或者X7按下一步可以設(shè)置基礎(chǔ)參數(shù),比如串口號(hào)波特率和屏幕分辨率等,也可以按照默認(rèn)參數(shù)點(diǎn)擊完成。至此,一個(gè)新的hello的項(xiàng)目就創(chuàng)建完畢了。3、新建項(xiàng)目完成之后,IDE整體的界面如下0 %於 480_272JC3_SampleUI話(huà) 800j!80master SampleUIv 於 Hello團(tuán) Includesv &而v & activity園 mainActivity.cpp ) 囲 mainActivity.h include7 3 logic園 mainLogic.cc3 uarti 團(tuán) Mairt.cpp 夠 libeasyui.so - arm/le

7、 陽(yáng) Makefile& libs& objtextbutton圖形界面耐國(guó) unistd.hEo main.ftu區(qū)| mainLogic.cc 園 mainActivit.Fffl滑動(dòng)主窗口m滑動(dòng)窗口罔標(biāo)項(xiàng)目管理器的文件目錄下,分為 jni、libs、obj、resources、ui 等文件夾,其中l(wèi)ibs和obj是庫(kù)文件和編譯目標(biāo)文件。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 文件結(jié)構(gòu)介紹Jni 文件主要存放代碼文件,它包含了 activity 、 include 、logic 、uart 、Main.cpp、 Makefile 共 6 個(gè)部分。v Djniv D activity窗 mainActivity.cpp 0 mainActivity.hD includev 3 logic:-窗 mainLogic.ccv e uartB CommDef.h國(guó) ProtocolData.h:回 ProtocolParser.cpp0 ProtocolParser.

9、h回 ProtocolSender.cpp0 ProtocolSender.h 園 UartContext.cpp 0 UartContext.h Main.cppb MakefileJni 文件結(jié)構(gòu)和 include 文件結(jié)構(gòu)jniactivity 文件夾activity文件夾是保存UI文件的基礎(chǔ)類(lèi)代碼,每一個(gè)UI文件,經(jīng)過(guò)編譯后,都 會(huì)生成相同前綴名的Activity類(lèi)和Logic.cc文件。例如:UI文件夾下有一 個(gè) main.ftu,那么經(jīng)過(guò)編譯后,會(huì)生成 mainActivity.h、mainActivity.cpp 以及 mainLogic.cc, mainActivity 類(lèi)會(huì)存

10、放在 activity 文件夾中, mainLogic.cc文件會(huì)存放在logic文件夾中。jniinclude 文件夾Include 文件夾主要存放系統(tǒng)相關(guān)的頭文件,和控件相關(guān)的頭文件,用于系統(tǒng)編 譯。jnilogic 文件夾Logic文件夾主要存放用戶(hù)的邏輯代碼。每一個(gè)UI文件在編譯后都會(huì)生成相 對(duì)應(yīng)前綴名的 Logic.cc 文件,我們編寫(xiě)的代碼,主要就是添加在這些 Logic.cc 文件中。jniuart 文件夾Uart 文件夾主要存放串口操作相關(guān)的代碼,包括讀寫(xiě)串口,協(xié)議解析等。jniMain.cppMain.cpp是整個(gè)Yoxios應(yīng)用的入口代碼,包括選擇開(kāi)機(jī)的界面以及一些初始 化

11、,一般情況不需要修改該文件。jniMakefileMakefile/Android.mk、Application.mk 是 編譯配置文件,包含了具體的源 碼編譯過(guò)程,一般情況下不需要修改。在編譯通過(guò)后,會(huì)在項(xiàng)目下生成 libs 目錄,和 obj 目錄,它們分別是編譯的目標(biāo)存放目錄和編譯的中間文件目錄。5、resources 文件夾resources文件夾主要用來(lái)存放項(xiàng)目的各種資源文件,包括圖片、字體、輸 入法配置文件等。如果你還有其他資源文件也可以添加到該文件夾,該文件夾 會(huì)完全拷貝到機(jī)器中。但是,由于機(jī)器自身存儲(chǔ)空間的限制,不建議將大文 件存放到該目錄,推薦將較大的資源文件存放到TF卡中。我

12、們可以在代碼中獲取resources目錄下的某個(gè)文件的絕對(duì)路徑。例如:如 下代碼可以獲取resources/test.txt的絕對(duì)路徑。#include manager/ConfigManager.hstd:string resPath = CONFIGMANAGER-getResFilePathEx(test.txt);6、ui 文件夾個(gè)工程有一個(gè)默認(rèn)的main.ftu的UI文件ftu是YOXIOS項(xiàng)目UI文件的后綴名。每一個(gè) ftu 文件對(duì)應(yīng)一個(gè)應(yīng)用界面。通常一個(gè)應(yīng)用包含多個(gè)界面,所以 你需要在ui文件夾下右鍵 新建YOXIOS UI文件創(chuàng)建多個(gè)ftu文件。四、演示 Hello World

13、1、在控件區(qū)域,拖動(dòng)文本控件和按鍵控件到界面設(shè)計(jì)區(qū)域,選擇按鍵控件,點(diǎn)擊鼠標(biāo)右鍵,跳轉(zhuǎn)到相關(guān)代碼,如下圖eUle牡項(xiàng)目資源営理譲B 480_272_X3_SampleUI於 800j480_X7_master_SampleUIv 於 Hello嫦二圍 Includes*酵泗v 裁 activity 屆 mainActivity.cpp? 區(qū)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)復(fù)制(0訂控件恰 SelectMarqueeA:欣M列表組 昌列表列辭項(xiàng)*H滑動(dòng)窗組曲滑動(dòng)主窗口田滑動(dòng)窗口圄標(biāo)M波形圉因波形M單礙 口單礙 選項(xiàng)園 mainLogic.cc 3 lo main.ftu-*4*ralje*觸摸事件將錐續(xù)傳遞到控件上116報(bào)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(時(shí)刻=%ld,坐標(biāo):x = %d, y = %d t ev.mE vent Time, ev.mX, break;case MotionEvent: : E_ACTI0N_M0VE: /觸摸滑動(dòng)break;case MotionEvent: : E_ACTI0N_UP: /觸摸拾起break;default:break;retur

16、n false;LOGD( ButtonClick Buttonl I! !n);/在這里寫(xiě)下技鍵的代碼ImTextViewlP七r-setText:( Hello World !return false;在這個(gè)例程中,ui的界面文件是main.ftu,那么對(duì)應(yīng)的邏輯代碼文件就是 mainLogic.cc,我們?nèi)粘5拇a實(shí)現(xiàn)都是這里。新增的兩個(gè)控件的ID值,文本控件是TextView1,按鈕控件是Button1。按鈕按下的事件,會(huì)觸發(fā)onButtonClick_Button1 這個(gè)函數(shù),我們?cè)谶@里輸入代碼 mTextView1Ptr-setText(Hello World!);設(shè)置控件Text

17、View1的文字顯示為Hello World!/mTextViewlPtr是文本控件TextView1對(duì)應(yīng)的指針變量,命名規(guī)則(m+D+Ptr) 然后在在項(xiàng)目管理器 窗口選擇hello這個(gè)項(xiàng)目的目錄,點(diǎn)擊右鍵,選擇編譯 YOXIOS (快捷鍵CTRL+ALT+Z),或者導(dǎo)航欄.按鈕,即可編譯整個(gè)工程。 如下圖ro workspace - Hello/jni/logic/mainLogic.cc - YOXIOS IDE文件(F)碉(E)源碼重構(gòu)(T)導(dǎo)航(N)搜索(A)工具設(shè)備(D)凋試配這(T)窗口嵇助(H) 已過(guò)心丨釦” 含 9 0 弋和 9 3 粘電項(xiàng)目空源莒理器e u 於 480_27

18、2_X3_SampleUI800 480 X7 master SampleU Ip 弟 Helle詁二 I噸 v釘jr強(qiáng)(N)打開(kāi)文件所在目靈 在新窗中打開(kāi)(N)復(fù)制(C) 粘貼(P) 刪除(D) 移動(dòng)(V). 重命名(M).導(dǎo)入.園 mainLogic.cc 以*/,Ctrl+CCtrl+V刪除l/o main.ftu 園 mainActivity.cpp false觸摸事件將纟隹續(xù)傳遞到控件上ic bool onmainActivityTouchEvent(const MotionEvent switch (ev.mActionStatus) case MotionEvent: : E_A

19、CTION_DOhlN: /摸按下/LOGD(”時(shí)刻=%ld 坐標(biāo) x = y = %d, ev.mEv break;case MotionEvent: : E_ACTION_MOVE: / / 觸摸滑動(dòng) break;case MotionEvent: : E_ACTION_UP: /觸摸抬起 break;default:break;凸川紂& ofe- r fastest構(gòu)建項(xiàng)目劇新(F)關(guān)閉項(xiàng)目關(guān)閉不相關(guān)的項(xiàng)目(U)return false;F5索引ic bool onButtonClick_Buttonl(ZKButton *pButton)也 LOGD(* ButtonClick But

20、tonl ! ! !n);在這里寫(xiě)下按薩的代碼mTextViewlPtr-setText(Hello World!);return false;下瞬試Ctrl+Alt+R雇性(R)A 編譯 YOXIOS轉(zhuǎn)換扁譯平臺(tái)如果代碼沒(méi)有錯(cuò)誤,則在控制臺(tái)會(huì)顯示編譯成功的信息。2、控件命名規(guī)則每一個(gè)控件都有一個(gè) ID 名稱(chēng),經(jīng)過(guò)編譯后,會(huì)自動(dòng)生成一個(gè)對(duì)應(yīng)的指針變量。如文本控件的ID名稱(chēng)是TextView1,所對(duì)應(yīng)的指針變量名是mTextView1 Ptr(命名規(guī)則固定為 m+ID+Ptr);按適昌列表口屬性凸壬聲r(shí) P n扈性直IDTextViewl文寧text大小16垂亙吾口內(nèi)容與邊框的I:顔色遁背嶷頻色

21、設(shè)置粗體否否文宇滾動(dòng)關(guān)閉站滾頑新目150文字滾5文字滾動(dòng)方向從右施坐標(biāo)目列表子項(xiàng)U滑動(dòng)窗口組夕曲滑動(dòng)主窗口港動(dòng)窗口圖標(biāo)控件 ID 名稱(chēng)所對(duì)應(yīng)的指針變量已經(jīng)事件響應(yīng)函數(shù)如下cj mainLogic.cc *main.ftuB mainActivity.cpp 茨h) mainActivhy.hf *1*I.4.4.4.:*2 /een auto by zuitools項(xiàng)目資源営理器B %曲 480_272_X3_SampleUI磚 800_480_X7_master Samplelll v 話(huà) Hello鼾制 Includesv 於 jni 念 mainActivity.cpp血j mainAc

22、tivity.h D include7 釘 logic也可以在 mainActivity.cpp 文件中,查看所有控件的名稱(chēng)。Ah/*TAG:GlobalVariablefl*/static ZKButton* mButtonlPtr;static ZKTextView* mTextViewlPtr;static mainActivity* mActivityPtr;10/*register activity*/REGISTER_ACTIVITY(mainActivity);13五、編譯下載調(diào)試1、在上面hello工程目錄下,點(diǎn)擊右鍵下載調(diào)試,使用USB線(xiàn)將開(kāi)發(fā)板與電腦連接,正常情況下當(dāng)前的應(yīng)

23、用會(huì)直接下載到開(kāi)發(fā)板中運(yùn)行。1 workspace - Hello/jni/activity/mainActivity.cpp - YOXIOS IDE文件(D編輯(E)源碼重構(gòu)導(dǎo)航(N)搜素(A) IM設(shè)備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打開(kāi)文件所在目錄勵(lì)過(guò)中打開(kāi)(N) E ffi復(fù)制(C)Ctrl+C w歯粘貼(P)Ctr

24、l+Vv e X刪除(D)測(cè)除移動(dòng)(V)“.於te重離(M).F2新建(N)導(dǎo)入(I).G: GlobalVariable 全局變里*/ ic ZKButton* mButtonlPtr; ic ZKTextView* mTextViewlPtr; ic mainActivity* mActivityPtr;gister activity*/STER_ACTIVITY(mainActivity);def struct int id; /定時(shí)器ID ,不能重復(fù)int time; /定時(shí)器時(shí)間間踽單位臺(tái)秒CTIVITY_TIMEER;F5lude logic/mainLogic.ccCtrl +

25、Alt+ZAlt+EnterharedLibrary :/libs/armeabi/li下圖是應(yīng)用代碼推送到開(kāi)發(fā)板之后的執(zhí)行情況注意:1、下載調(diào)試只是將目前開(kāi)發(fā)的應(yīng)用推送到目標(biāo)開(kāi)發(fā)板中運(yùn)行,但程序并不會(huì)固化在開(kāi)發(fā)板 上,也就是重新上電就恢復(fù)成原來(lái)的應(yīng)用。如果需要將應(yīng)用固化到開(kāi)發(fā)板上,請(qǐng)查看下一章 節(jié)的燒錄固件。2、由于CPU硬件資源的不同,X7的下載調(diào)試需要插入TF卡,在TF卡中臨時(shí)運(yùn)行,在重新 上電之后如果TF卡中有應(yīng)用程序,會(huì)優(yōu)先運(yùn)行TF卡中的應(yīng)用程序。3、部分機(jī)型除了 USB 口下載調(diào)試之外,還可以通過(guò)網(wǎng)口和wifi來(lái)進(jìn)行調(diào)試,可以通過(guò)調(diào)試 配置YOXIOS ADB連接方式,設(shè)置為USB

26、或網(wǎng)絡(luò)IP地址。如果USB和WIFI都不能下載 程序,還可以使用TF卡啟動(dòng)程序。2、LOG 調(diào)試和查看日志YOXIOS的打印統(tǒng)一調(diào)用LOGD或LOGE宏輸出,使用方法與C語(yǔ)言的printf相同;默認(rèn)生成的代碼里就有調(diào)用的例子(默認(rèn)被注釋掉,需要時(shí)打開(kāi)),代碼如下:#include utils/Logh/需要調(diào)用頭文件static bool onButtonClick_Button1(ZKButton *pButton) LOGD(onButtonClick_Button1n); /打印輸出日志return true;在菜單欄上 選擇調(diào)試配置- 切換日志窗口,工具會(huì)切換到另一個(gè)界面,這 是程序執(zhí)

27、行的日志可以在這個(gè)窗口進(jìn)行查看。注意,此功能需要安裝和連接好ADB|Q zkswe-zkswe. Online529PID85TID85Applicatio5295298585858552S85855298585529529529858585958585529529525858585858585529858552985853、命令行模式 在菜單欄調(diào)試配置 打開(kāi)系統(tǒng)命令行可以使用命令行模式與系統(tǒng)通信:c - 0X1 OS IDE湄試配置(D奮口帶助ADBmainLogic.cc main17 static bool on181920212223打開(kāi)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國(guó) ma in ActivityV Hello掛二-麗 Includesfi&jni& libs& obje resourcesv B uia main.ftu 話(huà) testtextbutton配置好輸出目錄,現(xiàn)在點(diǎn)擊上圖中的按鈕開(kāi)始編譯,它會(huì)將編譯結(jié)果打包,并 生成update.img文件輸出到配置的目錄下。update.img文件成功生成后,將其拷貝

29、到TF卡里(注意:使用前,請(qǐng)將TF卡格式化為FAT32格式),將TF卡插入機(jī)器中,機(jī)器重新上電,系統(tǒng)檢測(cè)到TF卡里的文件,就會(huì)啟動(dòng)升級(jí)程序,在下圖的界面中,勾選升級(jí)的項(xiàng)目,點(diǎn)擊升級(jí)。升級(jí)完成后及時(shí)拔掉升級(jí)卡,防止重復(fù)升級(jí)。3、從 TF 卡啟動(dòng)程序如果 USB 或 WIFI 都不能下載程序,可以使用 TF 卡來(lái)啟動(dòng)程序。點(diǎn)擊導(dǎo)航條 旁邊編譯輸出田按鈕的黑色下拉箭頭,在彈出的菜單中選擇路徑配置, 在彈出的對(duì)話(huà)框里選擇 TF 卡盤(pán)符,請(qǐng)確保 TF 卡可以正常使用,并且是 FAT32 格式。二進(jìn)制Inc ludes配置好輸出目錄之后,點(diǎn)擊上圖中的編譯輸出按鈕開(kāi)始編譯,它會(huì)將編譯結(jié)果 打包輸出到配置的盤(pán)

30、符下。操作成功后,將在TF卡的根目錄下生成EasyUI.cfg 、ui、lib、 font 等目錄和文件。將 TF 卡插入機(jī)器中,重新上電, 系統(tǒng)檢測(cè)到 TF 卡里的文件,就會(huì)啟動(dòng)卡里的程序,而不是系統(tǒng)內(nèi)的程序。七、多窗口界面和控件介紹1、第一個(gè)啟動(dòng)界面當(dāng)我們新建一個(gè)工程時(shí),生成的模板代碼里面有一個(gè)Main.cpp文件,jni/Main.cpp,其中onStartupApp是啟動(dòng)時(shí)調(diào)用的界面,下圖紅框內(nèi)表示啟動(dòng)的是mainActivity界面,對(duì)應(yīng)的UI資源文件為main.ftu。rn workspace - Hello/jni/Main.cpp - YOXIOS IDE文件(E)編輯源碼 M

31、teCD 導(dǎo)航搜索 IM 設(shè)備(DJ謂試配置CD 窗口曲報(bào)助QD480_272_X3_SampleUI:-磚 800_480_X7_master_SampleUI v 話(huà) Hello蝶二 飆 Includesv砂factivityD include鉛 logic: libeasyui.so - arm/le MakefileH初始化時(shí)打開(kāi)串口UARTCONTEXT-openUart(CONFIGMANAGER-getUartName().c_str(UARTCONTEXT|n我們也可以看一下 jni/activity/mainActivity.cpp 里面的代碼,就清楚知道對(duì)應(yīng)的是哪個(gè) UI

32、資源了,如下圖:F3園物I釦A;含引9中 匕項(xiàng)目空源號(hào)理器回 ma inLog ic.cc o main.ftuIS % p480_272_X3_SampleUI書(shū) 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/退出應(yīng)用時(shí)需要反注冊(cè)EASYUICONTEXT-unregisterGlobalTouchListener(this); onUI_quit();.y.Qf.jgjg或您巳滾坦或創(chuàng)2或幾塢 (onProtocolDatallpdatconst char* mainActivity:getAppName() const return main.ftu;/|22、124 /TAG:onCreateA125 void mai

34、nActivity:onCreate() 126Activity:onCreate();2、多個(gè)應(yīng)用界面在ui目錄下右鍵,選擇新建YOXIOSUI文件,在彈出的新窗口輸入新UI文件名,我們?cè)谶@個(gè)例程中輸入setup.ftu,點(diǎn)確定即可新建一個(gè)setup的窗口。7 磚 HelloIncludesjni libs obj131 static bool onButtonClick_Buttonl(LOGD(n ButtonClick Buttonl !I/在這里寫(xiě)下按鍵的代碼mTextViewlPtr-setText(Helloreturn false;137r已匚已tw新建N Q YOXIOS U

35、I 文眸洞 打開(kāi)文件所在目錄在細(xì)口 口打開(kāi)打文件文件夾復(fù)制Q.l:在 Main.ftu 主窗口中,我們新增一個(gè)按鍵,并且增加下面一行代碼來(lái)打開(kāi) setup窗口。 EASYUICONTEXT- openActivity(setu pActivity);在 setup.ftu 界面,我們也新增一個(gè)按鈕,并且把按鈕的 ID 名字改為 sys_back,不需要寫(xiě)代碼,即可返回上一個(gè)界面。也可以使用EASYUICONTEXT-goBack();語(yǔ)句,來(lái)返回到上一級(jí)界面。如下圖:b頊目資源善理器 筋 800_480_X7_ma ster Sa mplel * v 於 Hello弒二團(tuán) Includesvv

36、 於 activity挺ma i nActivity.cpp雖| mainActivity.h廚 setupActivity.cpp國(guó) setupActivity.h3 includev 0 logic品 mainLogic園 setupLogp uartc| Main.cpp雇性值IDsys backS3波形圄單卿粗體否斟休否好滾動(dòng)文字滾換新時(shí)隹150好滾薛5文字滾動(dòng)方向從右到左舸昱否0令|甸|輛蠶匸竄|西旦已”= 編譯完成后可以下載到開(kāi)發(fā)板運(yùn)行,我們已經(jīng)新建了一個(gè)setup的窗口,并且 執(zhí)行了打開(kāi)和返回的動(dòng)作。下面是與界面控制相關(guān)的語(yǔ)句EASYUICONTEXT- openActivity

37、( subActivity );/打開(kāi)窗口EASYUICONTEXT- closeActivity( subActivity); /關(guān)閉窗口EASYUICONTEXT-goBack();/返回上一級(jí)EASYUICONTEXT-goHome (); /返回主頁(yè)(第一個(gè)啟動(dòng)界面)3、界面活動(dòng)周期3.1在介紹界面的活動(dòng)周期之前,我們先來(lái)了解一下界面的層級(jí)關(guān)系首先應(yīng)用啟動(dòng)之后會(huì)先進(jìn)入mainActivity對(duì)應(yīng)的界面,即啟動(dòng)界面。之后通 過(guò)openActivity方法打開(kāi)了 subActivity對(duì)應(yīng)的界面,接著再進(jìn)入 thirdActivity對(duì)應(yīng)的界面,就形成了上圖所看到的層級(jí)效果了;最后打開(kāi)的

38、界面在層級(jí)上層,它們間形成了棧的這樣一種關(guān)系;3.2打開(kāi)界面時(shí)的活動(dòng)流程我們?cè)賮?lái)看看調(diào)用openActivity方法后,程序走了哪些流程,這里分兩種情 況介紹:3.2.1界面棧中不存在即將要打開(kāi)的界面我們先來(lái)看一下subLogic.cc中的onUI_init函數(shù),只有界面棧中不存在該界 面情況下,第一次打開(kāi)時(shí),會(huì)走這個(gè)函數(shù),走到這里意味著所有控件指針也就 初始化完成了,在這個(gè)函數(shù)里我們就可以開(kāi)始對(duì)它們進(jìn)行一些操作,如下: static void onUI_init() /Tips :添加UI初始化的顯示代碼到這里,如:mTextView1Ptr-setText(123);LOGD(sub on

39、UI_initn);mTextView1Ptr-setText(123);界面打開(kāi)時(shí)有數(shù)據(jù)傳遞過(guò)來(lái),在onUI_intent回調(diào)函數(shù)中接收處理:static void onUI_intent(const Intent *intentPtr) LOGD(sub onUI_intentn);/判斷不為空if (intentPtr) /鍵值解析std:stringcmd = intentPtr-getExtra(cmd);/ openstd:stringvalue = intentPtr-getExtra(value);/ ok界面顯示完成回調(diào)onUI_show函數(shù);3.2.2 界面棧中 存在 即將

40、要打開(kāi)的界面/ mainActivityo pen Activity (su bActiv ity )ma in ActivitysubLogic,CC這種情況只是將界面棧中對(duì)應(yīng)的界面移動(dòng)到頂層,不走onUI_init流程;q pe n Activity s u bActivityJ(打開(kāi)顯示一個(gè)界面,意味著之前頂層的界面被隱藏掉了;假設(shè)在mainActivity界面打開(kāi)了 subActivity界面,它們的活動(dòng)流程如下:mainLogic.cconU!_hidesubLogic.cc3.3 關(guān)閉界面時(shí)的活動(dòng)流程當(dāng)我們調(diào)用goBack()函數(shù)時(shí),會(huì)將頂層的界面彈出,直到啟動(dòng)界面;thirdAc

41、tivity7subActivity / mainActivity/ goBack/main ActivitysubActivity關(guān)閉界面時(shí)會(huì)回調(diào)onUl_quit函數(shù),如果界面打開(kāi)后有申請(qǐng)一些什么資源的,記得要在這里進(jìn)行釋放;退出頂層的界面后,會(huì)將下一層界面顯示出來(lái),即會(huì)回調(diào)下一層界面的onUI_show接口;當(dāng)我們調(diào)用goHome()函數(shù)時(shí),會(huì)直接回退到啟動(dòng)界面,將其他界面都彈出;當(dāng)我們調(diào)用closeActivity(xxx)函數(shù)時(shí),可以移除除啟動(dòng)界面外任意界面; 當(dāng)移除的不是頂層的界面時(shí),下一層的界面不會(huì)走onUI_show流程;4、系統(tǒng)內(nèi)置的界面下面列舉一些系統(tǒng)內(nèi)置的界面及調(diào)用方法E

42、ASYUICONTEXT-openActivity(ZKSettingActivity);/系統(tǒng)設(shè)置 EASYUICONTEXT-openActivity(NetSettingActivity);/網(wǎng)絡(luò)設(shè)置 EASYUICONTEXT- openActivity(WifiSettingActivity ); /wifi 設(shè)置EASYUICONTEXT-openActivity(SoftApSettingActivity);/AP 設(shè)置EASYUICONTEXT- openActivity( LanguageSettingActivity ); /語(yǔ)言設(shè)置EASYUICONTEXT- openA

43、ctivity(TouchCalibrationActivity);/觸摸設(shè)置EASYUICONTEXT- openActivity(DeveloperSettingActivity) ;/開(kāi)發(fā)者選項(xiàng)5、控件通用屬性介紹控件的唯一標(biāo)識(shí)是ID,每一個(gè)ftu文件里的控件ID值是不允許重名的,不同 的ftu文件里的控件ID值允許重名;設(shè)置ID值后,編譯完會(huì)在activity目錄 下對(duì)應(yīng)的頭文件中生成相應(yīng)的宏定義。文件(E)歸輯源碼重構(gòu)CD 導(dǎo)航CN)搜案 工具設(shè)會(huì)凋試配置CD D(W)幫助CH)ITS 辺嘰 | 釦/3 矽fr - PO 二項(xiàng)目資源肯理器 setup.ftu 回 setupActiv

44、i.jj setupLogic.cc 國(guó) 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 轉(zhuǎn)include 轉(zhuǎn)include 林include 轉(zhuǎn)include 林include 轉(zhuǎn)include 轉(zhuǎn)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國(guó) setu pActivity, h3 include3 animation& appD camera凸 cont

46、rol已 entry凸 imev 已 json 國(guó) 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,下面列舉一些控件屬性的常見(jiàn)方法include/control/ZKBase.h /接口定義于控件基類(lèi) ZKBase 中int id = pButton-getID(); /獲取控件 ID 值LayoutPosition pos(0, 0, 100, 200);/ 左:0,上:0,寬:100,高:200 pButton-setPosition(pos); / 設(shè)置按鈕控件位置LayoutPosition pos = pButton-getPosition(); /獲取按鈕控件位置 pButton-setBackgroundColor(0 xFF0000); / 設(shè)置背景

48、顏色 mButton1Ptr-setBackgroundPic(/mnt/extsd/pic/bg.png);/設(shè)置背景圖,絕對(duì)路徑mButton1Ptr-setBackgroundPic(bg.png);/ 設(shè)置resources目錄下bgpng圖片 mButton1Ptr-setVisible(TRUE); / 顯示按鈕控件 mButton1Ptr-setVisible(FALSE); / 隱藏按鈕控件mButton1Ptr-setInvalid(TRUE); / 設(shè)置無(wú)效狀態(tài)mButton1Ptr-setInvalid(FALSE); / 設(shè)置無(wú)效狀態(tài)6、定時(shí)器介紹在 mainLogic

49、.cc 啟動(dòng)代碼中,有一個(gè)定時(shí)器注冊(cè)語(yǔ)句,如下圖。右項(xiàng)號(hào)空源音理器480_272_X3_SampleUI話(huà) 800_480_X7_master_SampleUI曲 DHT12Demo話(huà) ESP8266TCPDemo7 GpioDemo掛二 妙 Includesv 斜 jni 0 activityv 妙 logicJs mainLogic.cc區(qū)CommDef.h回 ProtocolData.h|x| ProtocolParser.cpph Protocol Pa rser.h園 ProtocolSender.cppi mainLogic.cc 關(guān) I 國(guó) ProtocolSend. 也 Pro

50、tocolPars. h UartContextcpp 39 5/if 38 void sensor_read(void);/讀394142434445464748495040 float TempratureHumi;/定義溫濕度變里,it匕變里為全局變里 /*注冊(cè)定時(shí)器*在此數(shù)組中添加即可*/static S_ACTIVITY_TIMEER REGISTER .ACTIVITY .TIMER .TAB = /0,2000, /7定時(shí)器id=0,時(shí)間間話(huà)秒1, 1000,;l竊 51 static void onUI_init() 53筍 54 static void onUI_quit()

51、 55 RA定時(shí)器注冊(cè)之后,可以在onUI_Timer添加定時(shí)器的邏輯代碼,當(dāng)定時(shí)器觸發(fā)/爭(zhēng)口數(shù)IS回調(diào)接口6061 static bool onUI_Timer(int id) 62636465666768697071727476787Q/Tips :添加定時(shí)器響應(yīng)的代碼到這里但是需要在本文件的REGISTER_ACTIVITY_TIMER_TAB數(shù)纟 /id是定時(shí)器設(shè)置時(shí)假的標(biāo)簽這里不要寫(xiě)耗時(shí)的操作,否則影響UT刷ruturn: true繼續(xù)運(yùn)行定廿 switch (id) case 0:break;case 1:/走時(shí)器mTextView3Ptr-setText(hello);break

52、;default: break; return true;時(shí),會(huì)執(zhí)行與定時(shí)器 ID 相同的邏輯代碼。八、GPIO、UART、I2C、SPI 接口操作1、GPIO 口操作 以開(kāi)發(fā)板X(qián)3為例,接口中預(yù)留了 2個(gè)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 二匡嚴(yán)!匚 GPIOPE12二)匡盧匚二 中】02GPIO 口操作可以添加GpioHelper

53、Ex.cpp文件到工程中,路徑為:/jni/include/utils/GpioHelperEx.cpp,如安裝包內(nèi)沒(méi)有此文件可到 下載。在代碼中添加頭文件#include utils/GpioHelperEx.h文件(B 扁輯 源碼重構(gòu)CD導(dǎo)航搜索(A)工具設(shè)備9)凋試配置 D(W)耕助凹丨釘幺4 和若項(xiàng)目空源音理器B & netD os3 securitye storage3 system y & utils迪 AdcHelper.hh BitmapHelper.hcj GpioHelperExxpph GpioHelperEx.hl2CHelper.hI國(guó) JsonHelper.hh|

54、Log.hh MessageQueue.hh ScreenHelper.hh SpiHelper.hh| TimeHelper.h區(qū)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 轉(zhuǎn)define GPIO X3 102 E 12 -14-/* brief GPIO作幫助類(lèi) TOC o 1-5 h z */17 class GpioHelperEx 18 public:196/* brief讀技口狀態(tài)* (return -1尖敗,1/0(高/低電平)咸功*/static int input(const char *pPin);設(shè)置 GPIO 口輸出狀態(tài)和讀取狀態(tài)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 口狀態(tài)2、UART 串口操作Linux系統(tǒng)的串口編程有別于單片機(jī)的UART,對(duì)于硬件直接讀寫(xiě)寄存器的操作 封裝成API調(diào)用,所以可以沿用標(biāo)準(zhǔn)Linux編程來(lái)操作串口。Linux串口編程分 為以下 5 個(gè)步驟:打開(kāi)串口、配置串口、讀串口、寫(xiě)串口、關(guān)閉串口。為了簡(jiǎn)化開(kāi)發(fā)流程,使開(kāi)發(fā)人員更多的關(guān)注業(yè)務(wù)邏輯的開(kāi)發(fā),我們的工具在新建 工程時(shí)會(huì)自動(dòng)生成串口通訊的代碼,在 jni/uart 目錄下,同時(shí)我們也提供了協(xié)議 數(shù)據(jù)與界面交互的回調(diào)接口,在 mainLogic.cc 文件下。牡項(xiàng)目空源號(hào)理器v

57、齡 jniQ activitye includev 釘 logicIcj mainLogic.cc廚 setupLogic.ccy & uart國(guó)國(guó) 0 園國(guó)園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 協(xié)議解析和封裝文件UartContext:串口的實(shí)體控制層,提供串口

58、的開(kāi)關(guān),發(fā)送,接收接口ProtocolData:定義通訊的數(shù)據(jù)結(jié)構(gòu)體,用于保存通訊協(xié)議轉(zhuǎn)化出來(lái)的實(shí)際變量;Protocolsender:完成數(shù)據(jù)發(fā)送的封裝;ProtocolParser:完成數(shù)據(jù)的協(xié)議解析部分,然后將解析好的數(shù)據(jù)放到ProtocolData的數(shù)據(jù)結(jié)構(gòu)中;同時(shí)管理了應(yīng)用監(jiān)聽(tīng)串口數(shù)據(jù)變化的回調(diào)接口;具體工作流程如下圖所示:無(wú)論是接收還是發(fā)送流程,最底層都是要經(jīng)過(guò)UartContext對(duì)串口進(jìn)行讀寫(xiě)操作,如果不需要使用封裝后的串口通信協(xié)議,可以對(duì)文件進(jìn)行修改。2.2創(chuàng)建串口 Demo程序 每創(chuàng)建一個(gè)工程項(xiàng)目時(shí),都會(huì)提示設(shè)置串口名稱(chēng)和波特率,也可以在工程的屬性 里修改。在工程源碼路徑j(luò)

59、ni/Main.cpp里,我們可以看到在程序初始化和銷(xiāo)毀時(shí)分 別有對(duì)串口打開(kāi)和關(guān)閉的操作,如需要更多串口通信例程可以訪(fǎng)問(wèn)論壇下載。 void onEasyUIInit(EasyUIContext *pContext) /打開(kāi)串口UARTCONTEXT-openUart(CONFIGMANAGER-getUartName().c_str(), CONFIGMANAGER-getUartBaudRate();void onEasyUIDeinit(EasyUIContext *pContext) LOGD(onDestroyn);/關(guān)閉串口UARTCONTEXT-closeUart();/寫(xiě)串口s

60、tring s = AT+CWMODE=1rn;UARTCONTEXT-send(BYTE *)s.c_str(),s.length();3、I2C 接口操作以 DHT12 溫濕度傳感器為例#include utils/I2CHelper.h/參數(shù)1: i2c總線(xiàn)號(hào) 以X3開(kāi)發(fā)板為例,總線(xiàn)號(hào)為2/參數(shù)2:從機(jī)地址,一定要注意是7bit地址/參數(shù)3:超時(shí)時(shí)間,單位:ms/參數(shù)4:重試次數(shù)I2CHelper i2c(2,0 xB8 1, 1000, 5);/總線(xiàn)號(hào) 2tx0 = 0;tx1 = 0Xb9;if (!i2c.transfer(tx, 1, rx,5) Humi_H = rx0;Hum

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論