版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)入門教程基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)2020-05)提示:閱讀此文檔需要有一定的單片機(jī)開發(fā)、C/C++編程語言、和使用IDE開發(fā)工具的基礎(chǔ)(C)2020游芯科技第1頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)目錄YOXIOS入門教程...................................................................................................................................1簡介............................................................................................................................................................3一、安裝YOXIOS開發(fā)工具...........................................................................................................3YOXIOS硬件開發(fā)板.............................................................................................................4新建工程項(xiàng)目..................................................................................................................................4World..........................................................................................................................9編譯下載調(diào)試................................................................................................................................12燒錄固件和修改開機(jī)LOGO.......................................................................................................15多窗口界面和控件介紹................................................................................................................19GPIO、UART、I2C、SPI接口操作..........................................................................................30網(wǎng)絡(luò)、文件、多媒體....................................................................................................................37YOXIOS................................................................................................................................41第2頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)操作系統(tǒng)是基于LinuxGUI框架和開發(fā)工具,高集成度和低成本的硬件方案,提高開發(fā)效率,降低硬件和人力成本,使嵌入式硬件圖形化編程更容易。一、安裝開發(fā)工具登錄開發(fā)工具的下載鏈接,在電腦上執(zhí)行安裝即可。安裝成功后在桌面有快捷方式,雙擊運(yùn)行。注意:1、安裝路徑不可以有中文字符或者空格,否則可能會(huì)影響后續(xù)編譯。2、目前IDE開發(fā)工具只支持Widnows操作系統(tǒng)。第3頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)二、選購硬件開發(fā)板可以登錄X3和X7以根據(jù)自己的需求,選購相應(yīng)的硬件開發(fā)板。三、新建工程項(xiàng)目項(xiàng)目新建一個(gè)工程項(xiàng)目2、輸入項(xiàng)目名稱,選擇平臺(tái)類型,根據(jù)硬件開發(fā)板的型號(hào),選擇X3或者X7第4頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)認(rèn)參數(shù)點(diǎn)擊完成。至此,一個(gè)新的hello的項(xiàng)目就創(chuàng)建完畢了。3、新建項(xiàng)目完成之后,IDE整體的界面如下項(xiàng)目管理器的文件目錄下,分為jni、libs、obj、resources、ui等文件夾,其中l(wèi)ibs和obj是庫文件和編譯目標(biāo)文件。第5頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)4、jni文件結(jié)構(gòu)介紹Jni文件主要存放代碼文件,它包含了activity、include、logic、uart、Main.cpp、Makefile共6個(gè)部分。文件結(jié)構(gòu)和include文件結(jié)構(gòu)4.1jni\activity文件夾activity文件夾是保存UI文件的基礎(chǔ)類代碼,每一個(gè)UI會(huì)生成相同前綴名的Activity類和Logic.cc文件。例如:UI文件夾下有一個(gè)main.ftu,那么經(jīng)過編譯后,會(huì)生成mainActivity.h、mainActivity.cpp以及mainLogic.cc,mainActivity類會(huì)存放在activity文件夾中,mainLogic.cc文件會(huì)存放在logic文件夾中。第6頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)4.2jni\include文件夾Include譯。4.3jni\logic文件夾Logic文件夾主要存放用戶的邏輯代碼。每一個(gè)UI文件在編譯后都會(huì)生成相對(duì)應(yīng)前綴名的Logic.ccLogic.cc文件中。4.4jni\uart文件夾Uart文件夾主要存放串口操作相關(guān)的代碼,包括讀寫串口,協(xié)議解析等。4.5jni\Main.cppMain.cpp是整個(gè)應(yīng)用的入口代碼,包括選擇開機(jī)的界面以及一些初始化,一般情況不需要修改該文件。4.6jni\MakefileMakefile/Android.mk、Application.mk是編譯配置文件,包含了具體的源碼編譯過程,一般情況下不需要修改。在編譯通過后,會(huì)在項(xiàng)目下生成libs目錄,和obj目錄,它們分別是編譯的目標(biāo)存放目錄和編譯的中間文件目錄。5、resources文件夾resources文件夾主要用來存放項(xiàng)目的各種資源文件,包括圖片、字體、輸入法配置文件等。如果你還有其他資源文件也可以添加到該文件夾,該文件夾第7頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)會(huì)完全拷貝到機(jī)器中。但是,由于機(jī)器自身存儲(chǔ)空間的限制,不建議將大文件存放到該目錄,推薦將較大的資源文件存放到TF卡中。我們可以在代碼中獲取resources目錄下的某個(gè)文件的絕對(duì)路徑。例如:如下代碼可以獲取resources/test.txt的絕對(duì)路徑。#include"manager/ConfigManager.h"std::stringresPath=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文件夾下右鍵新建>>YOXIOSUI文件創(chuàng)建多個(gè)ftu文件。第8頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)四、演示Hello文本控件和按鍵控件到點(diǎn)擊鼠標(biāo)右鍵,跳轉(zhuǎn)到相關(guān)代碼,如下圖在這個(gè)例程中,ui的界面文件是main.ftu,那么對(duì)應(yīng)的邏輯代碼文件就是第9頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)控件是Button1。按鈕按下的事件,會(huì)觸發(fā)onButtonClick_Button1這個(gè)函數(shù),我們?cè)谶@里輸入代碼//設(shè)置控件的文字顯示為Hello//mPtr是文本控件對(duì)應(yīng)的指針變量,命名規(guī)則(m+ID+Ptr)然后在在項(xiàng)目管理器窗口選擇hello這個(gè)項(xiàng)目的目錄,點(diǎn)擊右鍵,選擇編譯(快捷鍵如下圖第10頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)如果代碼沒有錯(cuò)誤,則在控制臺(tái)會(huì)顯示編譯成功的信息。2、控件命名規(guī)則每一個(gè)控件都有一個(gè)名稱,經(jīng)過編譯后,會(huì)自動(dòng)生成一個(gè)對(duì)應(yīng)的指針變量。如文本控件的ID名稱是TextView1,所對(duì)應(yīng)的指針變量名是(命名規(guī)則固定為m+ID+Ptr);第11頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)控件名稱所對(duì)應(yīng)的指針變量已經(jīng)事件響應(yīng)函數(shù)如下也可以在文件中,查看所有控件的名稱。五、編譯下載調(diào)試1、在上面hello工程目錄下,點(diǎn)擊右鍵>>下載調(diào)試,使用USB線將開發(fā)板與電腦連接,正常情況下當(dāng)前的應(yīng)用會(huì)直接下載到開發(fā)板中運(yùn)行。第12頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)下圖是應(yīng)用代碼推送到開發(fā)板之后的執(zhí)行情況第13頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)注意:1、下載調(diào)試只是將目前開發(fā)的應(yīng)用推送到目標(biāo)開發(fā)板中運(yùn)行,但程序并不會(huì)固化在開發(fā)板節(jié)的燒錄固件。CPU的下載調(diào)試需要插入TFTF上電之后如果TF卡中有應(yīng)用程序,會(huì)優(yōu)先運(yùn)行TF卡中的應(yīng)用程序。USBwifi配置>>YOXIOS>>ADB連接方式,設(shè)置為USB或網(wǎng)絡(luò)IP地址。如果USB和WIFI都不能下載程序,還可以使用TF卡啟動(dòng)程序。調(diào)試和查看日志YOXIOS的打印統(tǒng)一調(diào)用LOGD或LOGE宏輸出,使用方法與C語言的printf相同;默認(rèn)生成的代碼里就有調(diào)用的例子(默認(rèn)被注釋掉,需要時(shí)打開),代碼如下:#include"utils/Log.h"http://需要調(diào)用頭文件staticboolonButtonClick_Button1(ZKButton*pButton){LOGD("onButtonClick_Button1\n");//打印輸出日志returntrue;}在菜單欄上選擇調(diào)試配置->切換日志窗口,工具會(huì)切換到另一個(gè)界面,這是程序執(zhí)行的日志可以在這個(gè)窗口進(jìn)行查看。注意,此功能需要安裝和連接好ADB第14頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)3、命令行模式在菜單欄調(diào)試配置>>打開系統(tǒng)命令行可以使用命令行模式與系統(tǒng)通信在系統(tǒng)命令行模式下,輸入adbshellls,可以列出目錄內(nèi)容,如下圖注意:命令行模式謹(jǐn)慎使用六、燒錄固件和修改開機(jī)1、修改開機(jī)第15頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)系統(tǒng)允許用戶自行修改開機(jī)首先準(zhǔn)備一張開機(jī)圖片,圖片必須滿足以下條件:1、圖片名稱固定為boot_logo.JPG,注意,文件后綴是大寫的JPG;其他名稱將無法識(shí)別。2、圖片大小不能超過128KB。3、圖片分辨率必須與屏幕分辨率完全相同,如480*272,800*480。操作步驟:首先將boot_logo.JPG拷貝到TF卡根目錄下,再將TF卡插入到機(jī)器中,設(shè)備會(huì)自動(dòng)彈出升級(jí)提示或者重新開機(jī),出現(xiàn)下圖界面后,選擇boot_logo然后點(diǎn)擊升級(jí)即可。升級(jí)完成后系統(tǒng)會(huì)關(guān)機(jī)重啟,此時(shí)拔出TF卡,防止系統(tǒng)再次升級(jí)。提示:升級(jí)一張全黑的圖片可以去掉開機(jī)LOGO。2、燒錄固件第16頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)我們通過下載調(diào)試運(yùn)行程序,并不能將程序固化到設(shè)備中,如果您拔掉TF卡或者斷電重啟,程序?qū)⒆詣?dòng)恢復(fù)。燒錄固件可以將程序固化在設(shè)備內(nèi)部,一上電,默認(rèn)就會(huì)啟動(dòng)該程序。選擇菜單欄制作image升級(jí)包按鈕,選擇路徑配置,在彈出框中選擇TF卡目錄或者鏡像文件的輸出目錄,點(diǎn)確定。配置好輸出目錄,現(xiàn)在點(diǎn)擊上圖中的按鈕開始編譯,它會(huì)將編譯結(jié)果打包,并生成update.img文件輸出到配置的目錄下。update.img文件成功生成后,將其拷貝到TF卡里(注意:使用前,請(qǐng)將TF卡格式化為FAT32格式TF卡插入機(jī)器中,機(jī)器重新上電,系統(tǒng)檢測到TF卡里的文件,就會(huì)啟動(dòng)升級(jí)程第17頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)序,在下圖的界面中,勾選升級(jí)的項(xiàng)目,點(diǎn)擊升級(jí)。升級(jí)完成后及時(shí)拔掉升級(jí)卡,防止重復(fù)升級(jí)。注意:如果屏幕損壞或觸摸不準(zhǔn)情況下,導(dǎo)致不能通過點(diǎn)擊按鈕進(jìn)行升級(jí),那么這種情況下,我們可以通過自動(dòng)升級(jí)方式來升級(jí)系統(tǒng),請(qǐng)查看。3、從TF卡啟動(dòng)程序如果USB或WIFI都不能下載程序,可以使用TF卡來啟動(dòng)程序。點(diǎn)擊導(dǎo)航條旁邊編譯輸出按鈕的黑色下拉箭頭,在彈出的菜單中選擇路徑配置,在彈出的對(duì)話框里選擇TFTFFAT32格式。第18頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)配置好輸出目錄之后,點(diǎn)擊上圖中的編譯輸出按鈕開始編譯,它會(huì)將編譯結(jié)果打包輸出到配置的盤符下。操作成功后,將在TF卡的根目錄下生成EasyUI.cfgfont等目錄和文件。將TF卡插入機(jī)器中,重新上電,系統(tǒng)檢測到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。第19頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)我們也可以看一下jni/activity/mainActivity.cpp里面的代碼,就清楚知道對(duì)應(yīng)的是哪個(gè)UI資源了,如下圖2、多個(gè)應(yīng)用界面在uiUI文件,在彈出的新窗口輸入新UI文件名,我們?cè)谶@個(gè)例程中輸入setup.ftu,點(diǎn)確定即可新建一個(gè)setup的窗口。第20頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)在Main.ftusetup窗口。EASYUICONTEXT->openActivity("setupActivity"第21頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)在setup.ftu名字改為sys_back,EASYUICONTEXT->goBack();語句,來返回到上一級(jí)界面。如下圖:編譯完成后可以下載到開發(fā)板運(yùn)行,我們已經(jīng)新建了一個(gè)setup的窗口,并且執(zhí)行了打開和返回的動(dòng)作。下面是與界面控制相關(guān)的語句第22頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)EASYUICONTEXT->openActivity("subActivity");//打開窗口EASYUICONTEXT->closeActivity("subActivity");//關(guān)閉窗口EASYUICONTEXT->goBack();//返回上一級(jí)EASYUICONTEXT->goHome();//返回主頁(第一個(gè)啟動(dòng)界面)3、界面活動(dòng)周期3.1在介紹界面的活動(dòng)周期之前,我們先來了解一下界面的層級(jí)關(guān)系首先應(yīng)用啟動(dòng)之后會(huì)先進(jìn)入mainActivity對(duì)應(yīng)的界面,即啟動(dòng)界面。之后通過openActivity方法打開了subActivity對(duì)應(yīng)的界面,接著再進(jìn)入thirdActivity對(duì)應(yīng)的界面,就形成了上圖所看到的層級(jí)效果了;最后打開的界面在層級(jí)上層,它們間形成了棧的這樣一種關(guān)系;3.2打開界面時(shí)的活動(dòng)流程我們?cè)賮砜纯凑{(diào)用openActivity方法后,程序走了哪些流程,這里分兩種情況介紹:3.2.1界面棧中[不存在]即將要打開的界面第23頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)我們先來看一下subLogic.cc中的onUI_init函數(shù),只有界面棧中不存在該界面情況下,第一次打開時(shí),會(huì)走這個(gè)函數(shù),走到這里意味著所有控件指針也就初始化完成了,在這個(gè)函數(shù)里我們就可以開始對(duì)它們進(jìn)行一些操作,如下:staticvoidonUI_init(){//Tips:添加UI初始化的顯示代碼到這里,如:mTextView1Ptr->setText("123");LOGD("subonUI_init\n");mTextView1Ptr->setText("123");}界面打開時(shí)有數(shù)據(jù)傳遞過來,在onUI_intent回調(diào)函數(shù)中接收處理:staticvoidonUI_intent(constIntent*intentPtr){LOGD("subonUI_intent\n");//判斷不為空if(intentPtr){第24頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)//鍵值解析std::stringcmd=intentPtr->getExtra("cmd");//"open"std::stringvalue=intentPtr->getExtra("value");//"ok"......}}界面顯示完成回調(diào)onUI_show函數(shù);3.2.2界面棧中[存在]即將要打開的界面這種情況只是將界面棧中對(duì)應(yīng)的界面移動(dòng)到頂層,不走onUI_init流程;mainActivity界面打開了subActivity界面,它們的活動(dòng)流程如下:第25頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)3.3關(guān)閉界面時(shí)的活動(dòng)流程當(dāng)我們調(diào)用goBack()函數(shù)時(shí),會(huì)將頂層的界面彈出,直到啟動(dòng)界面;關(guān)閉界面時(shí)會(huì)回調(diào)onUI_quit函數(shù),如果界面打開后有申請(qǐng)一些什么資源的,記得要在這里進(jìn)行釋放;第26頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)退出頂層的界面后,會(huì)將下一層界面顯示出來,即會(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)用方法EASYUICONTEXT->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");//語言設(shè)置EASYUICONTEXT->openActivity("TouchCalibrationActivity");//觸摸設(shè)置EASYUICONTEXT->openActivity("DeveloperSettingActivity");//開發(fā)者選項(xiàng)5、控件通用屬性介紹控件的唯一標(biāo)識(shí)是ID,每一個(gè)ftu文件里的控件ID值是不允許重名的,不同的ftu文件里的控件IDIDactivity目錄下對(duì)應(yīng)的頭文件中生成相應(yīng)的宏定義。第27頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)下面列舉一些控件屬性的常見方法include/control/ZKBase.h//接口定義于控件基類ZKBase中intid=pButton->getID();//獲取控件ID值LayoutPositionpos(0,0,100,200);//左:0,上:0,寬:100,高:200pButton->setPosition(pos);//設(shè)置按鈕控件位置LayoutPositionpos=pButton->getPosition();//獲取按鈕控件位置pButton->setBackgroundColor(0xFF0000);//設(shè)置背景顏色mButton1Ptr->setBackgroundPic("/mnt/extsd/pic/bg.png");//設(shè)置背景圖,絕對(duì)路徑mButton1Ptr->setBackgroundPic("bg.png");//設(shè)置resources目錄下bg.png圖片mButton1Ptr->setVisible(TRUE);//顯示按鈕控件mButton1Ptr->setVisible(FALSE);//隱藏按鈕控件第28頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)mButton1Ptr->setInvalid(TRUE);//設(shè)置無效狀態(tài)mButton1Ptr->setInvalid(FALSE);//設(shè)置無效狀態(tài)6、定時(shí)器介紹在mainLogic.cc啟動(dòng)代碼中,有一個(gè)定時(shí)器注冊(cè)語句,如下圖。定時(shí)器注冊(cè)之后,可以在onUI_Timer添加定時(shí)器的邏輯代碼,當(dāng)定時(shí)器觸發(fā)時(shí),會(huì)執(zhí)行與定時(shí)器相同的邏輯代碼。第29頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)接口操作1、GPIO口操作以開發(fā)板X3為例,接口中預(yù)留了2個(gè)口,如下圖原理圖所示口操作可以添加GpioHelperEx.cpp文件到工程中,路徑為:/jni/include/utils/GpioHelperEx.cpp,如安裝包內(nèi)沒有此文件可到下載。在代碼中添加頭文件#include"utils/GpioHelperEx.h"第30頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)設(shè)置口輸出狀態(tài)和讀取狀態(tài)GpioHelperExoutput(GPIO_X3_IO1,1);//GPIO口輸出為高GpioHelperExoutput(GPIO_X3_IO1,0);//GPIO口輸出為低intstate=GpioHelperEx::input(GPIO_X3_IO2);GPIO口狀態(tài)串口操作Linux系統(tǒng)的串口編程有別于單片機(jī)的封裝成Linux串口編程分為以下5個(gè)步驟:打開串口、配置串口、讀串口、寫串口、關(guān)閉串口。jni/uart數(shù)據(jù)與界面交互的回調(diào)接口,在mainLogic.cc文件下。第31頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)2.1uart協(xié)議解析和封裝文件UartContext:串口的實(shí)體控制層,提供串口的開關(guān),發(fā)送,接收接口ProtocolData:定義通訊的數(shù)據(jù)結(jié)構(gòu)體,用于保存通訊協(xié)議轉(zhuǎn)化出來的實(shí)際變量;ProtocolSender:完成數(shù)據(jù)發(fā)送的封裝;ProtocolParser:完成數(shù)據(jù)的協(xié)議解析部分,然后將解析好的數(shù)據(jù)放到ProtocolData的數(shù)據(jù)結(jié)構(gòu)中;同時(shí)管理了應(yīng)用監(jiān)聽串口數(shù)據(jù)變化的回調(diào)接口;具體工作流程如下圖所示:第32頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)無論是接收還是發(fā)送流程,最底層都是要經(jīng)過UartContext對(duì)串口進(jìn)行讀寫操作,如果不需要使用封裝后的串口通信協(xié)議,可以對(duì)文件進(jìn)行修改。2.2創(chuàng)建串口Demo程序里修改。在工程源碼路徑j(luò)ni/Main.cpp里,我們可以看到在程序初始化和銷毀時(shí)分別有對(duì)串口打開和關(guān)閉的操作,如需要更多串口通信例程可以訪問論壇下載。voidonEasyUIInit(EasyUIContext*pContext){LOGD("onInit\n");//打開串口第33頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)UARTCONTEXT->openUart(CONFIGMANAGER->getUartName().c_str(),CONFIGMANAGER->getUartBaudRate());}voidonEasyUIDeinit(EasyUIContext*pContext){LOGD("onDestroy\n");//關(guān)閉串口UARTCONTEXT->closeUart();}寫串口strings="AT+CWMODE=1\r\n";UARTCONTEXT->send((BYTE*)s.c_str(),s.length());3、I2C接口操作以DHT12溫濕度傳感器為例#include"utils/I2CHelper.h"http://參數(shù)1:i2c總線號(hào)以X3開發(fā)板為例,總線號(hào)為2//參數(shù)2:從機(jī)地址,一定要注意是7bit地址//參數(shù)3:超時(shí)時(shí)間,單位:ms//參數(shù)4:重試次數(shù)I2CHelperi2c(2,0xB8>>1,1000,5);//總線號(hào)2tx[0]=0;tx[1]=0Xb9;if(!i2c.transfer(tx,1,rx,5)){LOGD("i2ci2c_transfercfgerror!\n");第34頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)}Humi_H=rx[0];Humi_L=rx[1];Temp_H=rx[2];Temp_L=rx[3];Temp_CAL=rx[4];由于不同型號(hào)的開發(fā)板的I2C總線號(hào)可能不一致,以X3為例,可以在IDE工具欄的調(diào)試配置->打開系統(tǒng)命令行->shellls-li2c總線號(hào)為address]由7位地址和一位R/W讀寫位組成的,這字節(jié)是個(gè)器件地址,因此需要把8位地址變成7位地址,在我們的I2CHelperi2c(2,0xB8>>1,1000,5)函數(shù)中需要右移一位。4、SPI接口操作SPI接口操作需要引入頭文件#include//所需頭文件#include"utils/SpiHelper.h"staticvoidtestSpi(){uint8_ttx[512],rx[512];/***定義變量*參數(shù)1:spi總線號(hào)第35頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)*參數(shù)2:模式,可選值:SPI_MODE_0、SPI_MODE_1、SPI_MODE_2、SPI_MODE_3*參數(shù)3:spi時(shí)鐘頻率,這里設(shè)置了50M*參數(shù)4:一個(gè)字有多少位,默認(rèn)值:8*參數(shù)5:位順序,true:表示低位在前,false:表示高位在前;默認(rèn)值:false,高位在前*/SpiHelperspi(1,SPI_MODE_0,50*1000*1000,8,false);memset(tx,0,512);memset(rx,0,512);tx[0]=0x4B;/***單工寫*參數(shù)1:寫數(shù)據(jù)地址*參數(shù)2:數(shù)據(jù)長度*/if(!spi.write(tx,5)){LOGD("spitxerror!\n");}/***單工讀*參數(shù)1:讀數(shù)據(jù)地址*參數(shù)2:數(shù)據(jù)長度*/if(!spi.read(rx,8)){LOGD("spirxerror!\n");第36頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)}for(inti=0;i<8;i++){LOGD("spi[%d]=0x%x\n",i,rx[i]);}/***半雙工傳輸*參數(shù)1:寫數(shù)據(jù)地址*參數(shù)2:寫數(shù)據(jù)長度*參數(shù)3:讀數(shù)據(jù)地址*參數(shù)4:讀數(shù)據(jù)長度*/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]);}}九、網(wǎng)絡(luò)、文件、多媒體1、網(wǎng)絡(luò)部分開發(fā)板才支持網(wǎng)絡(luò)功能,如果使用X3開發(fā)板,可以選擇串口通信的WIFI模塊,使用串口進(jìn)行網(wǎng)絡(luò)通信。此處案例以板載WIFI通信功能為例第37頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)啟動(dòng)系統(tǒng)自帶的wifi設(shè)置界面EASYUICONTEXT->openActivity("WifiSettingActivity");wifi操作接口說明#include"net/NetManager.h"WifiManager*pWM=NETMANAGER->getWifiManager();//獲取WifiManager對(duì)象//可以定義個(gè)宏,方便以下接口調(diào)用#defineWIFIMANAGERNETMANAGER->getWifiManager()WIFIMANAGER->isSupported();//檢測機(jī)器是否支持wifiWIFIMANAGER->isWifiEnable();//檢測wifi是否打開WIFIMANAGER->enableWifi(true);//開關(guān)wifiWIFIMANAGER->startScan();//掃描wifiWIFIMANAGER->connect(ssid,pw);//連接wifiWIFIMANAGER->disconnect();//斷開wifi連接WIFIMANAGER->isConnected();//檢測wifi是否已連接WIFIMANAGER->getConnectionInfo();//獲取已連接wifi的信息voidaddWifiListener(IWifiListener*pListener);//注冊(cè)wifi信息監(jiān)聽voidremoveWifiListener(IWifiListener*pListener);//反注冊(cè)wifi信息監(jiān)聽2、文件C語言文件讀寫接口做了簡單的封裝,方便使用??梢缘较螺dioutil.h以下步驟,將源碼集成到自己的項(xiàng)目中。2.1、在項(xiàng)目的jni文件夾下新建一個(gè)文件夾,命名為io,下載ioutil.h、第38頁共41頁--基于Linux的輕量化GUI圖形系統(tǒng)和硬件平臺(tái)ioutil.cpp兩個(gè)文件,保存到io文件夾下。示例代碼#include"io/ioutil.h"http://引入頭文件//將“0123456789”這個(gè)字符串寫入到123.txt這個(gè)文件中constchar*filename="/mnt/extsd/123.txt";//文件保存的路徑constchar*str="0123456789";ioutil::WriteFile(filename,str,strlen(str));//寫文件//將內(nèi)容追加到文件的末尾,如果指定的文件不存在,則新建文件。constchar*append_str="abcdefgh";ioutil::AppendFile(filename,append_st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 焦化廠料棚衛(wèi)生標(biāo)準(zhǔn)制度
- 樓道衛(wèi)生值日制度
- 豬場內(nèi)環(huán)境衛(wèi)生管理制度
- 洗衣房內(nèi)務(wù)衛(wèi)生管理制度
- 歐洲近代衛(wèi)生制度
- 鄉(xiāng)政府衛(wèi)生防疫管理制度
- 衛(wèi)生室管理制度
- 衛(wèi)生院述職測評(píng)制度
- 瀝青站環(huán)境衛(wèi)生制度
- 浴足店衛(wèi)生管理制度
- 八年級(jí)地理《中國氣候的主要特征》單元核心課教學(xué)設(shè)計(jì)
- 《國家十五五規(guī)劃綱要》全文
- 年產(chǎn) 48 萬平方米高頻高速、多層及高密度印制電路板 生產(chǎn)線擴(kuò)建項(xiàng)目 環(huán)境影響報(bào)告書
- 2025年秋季第一學(xué)期學(xué)校全面工作計(jì)劃:融合教育守初心 全面發(fā)展啟新程【課件】
- 2024年度EHS工作計(jì)劃安全工作計(jì)劃安全工作方案(管理方案)
- 2025屆上海市高考英語考綱詞匯表
- 公司證照管理管理制度
- 黑龍江哈爾濱2024年中考語文現(xiàn)代文閱讀真題
- 知識(shí)圖譜構(gòu)建實(shí)踐
- 部編版五年級(jí)語文上冊(cè)快樂讀書吧測試題及答案
- 衛(wèi)星傳輸專業(yè)試題題庫及答案
評(píng)論
0/150
提交評(píng)論