EGI是設計運行在OpenWRT環境下的一款開源mini GUI, 簡單好玩。用它可以來開發一些簡單圖形小界面,同時支持加入聲效背景,GIF動畫等。EGI是在WidoraNEO硬件環境下開發的,它非常適合開源軟件教育,嵌入式愛好者們也可以通過它發揮自己的創意創造。
EGI的第一個程序: Hello World.
/*------------------------------------------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
A 'Hello World' program for EGI.
Midas Zhou
[email protected]
https://github.com/widora/wegi
------------------------------------------------------------------*/
#include <egi_common.h>
#include <egi_utils.h>
#include <egi_FTsymbol.h> /* FreeType2 矢量字體顯示引擎 */
int main(int argc, char **argv)
{
/* <<<<<< 1. EGI general init EGI初始化流程 >>>>>> */
/* 對不必要的一些步驟可以省略 */
/* 1.1 Start sys tick 開啓系統計數 */
printf("tm_start_egitick()...\n");
tm_start_egitick();
/* 1.2 Start egi log 開啓日誌記錄 */
#if 0
printf("egi_init_log()...\n");
if(egi_init_log("/mmc/log_egi")!=0) {
printf("Fail to init egi logger, quit.\n");
return -1;
}
#endif
/* 1.3 Load symbol pages 加載圖形/符號映像 */
#if 0
printf("FTsymbol_load_allpages()...\n");
if(FTsymbol_load_allpages() !=0) /* FT derived sympg_ascii */
printf("Fail to load FTsym pages! go on anyway...\n");
printf("symbol_load_allpages()...\n");
if(symbol_load_allpages() !=0) {
printf("Fail to load sym pages, quit.\n");
return -1;
}
#endif
/* 1.4 Load freetype fonts 加載FreeTpype字體 */
/* 由於要用到sysfont的bold字體,在/home目錄下建立一個egi.conf文件,
輸入如下內容:
[SYS_FONTS]
bold = /mmc/fonts/hanserif/SourceHanSerifSC-Heavy.otf
字體文件可以按自己喜好選定。
*/
printf("FTsymbol_load_sysfonts()...\n");
if(FTsymbol_load_sysfonts() !=0) {
printf("Fail to load FT sysfonts, quit.\n");
return -1;
}
#if 0
printf("FTsymbol_load_appfonts()...\n");
if(FTsymbol_load_appfonts() !=0) {
printf("Fail to load FT appfonts, quit.\n");
return -1;
}
#endif
/* 1.5 Initilize sys FBDEV 初始化FB顯示設備 */
printf("init_fbdev()...\n");
if(init_fbdev(&gv_fb_dev))
return -1;
/* 1.6 Start touch read thread 啓動觸摸屏線程 */
printf("Start touchread thread...\n");
if(egi_start_touchread() !=0)
return -1;
/* 1.7 Set sys FB mode 設置顯示模式: 是否直接操作FB映像數據, 設置橫豎屏 */
fb_set_directFB(&gv_fb_dev,true); /* 直接操作FB映像數據,不通過FBbuffer. 播放動畫時可能出現撕裂線。 */
fb_position_rotate(&gv_fb_dev,3); /* 橫屏模式 */
/* <<<<< End of EGI general init EGI初始化流程結束 >>>>>> */
/**************************************
* Hello World程序部分
***************************************/
/* 2. 在屏幕上書寫多行文字 */
/* 2.1 Clear scree 用黑色清屏 */
clear_screen( &gv_fb_dev, WEGI_COLOR_DARKGRAY);
/* 2.2 書寫多行文字 */
FTsymbol_uft8strings_writeFB( &gv_fb_dev, egi_sysfonts.bold, /* FB設備,字體 FBdev, fontface */
45, 45,(const unsigned char *)"Hello World!\n 世界你好!", /* 字寬,字高,字符 fw,fh, pstr */
320, 6, 10, /* 每行長度,行數,行間距 pixpl, lines, gap */
10, 40, /* 起點座標 x0,y0, */
WEGI_COLOR_PINK, -1, -1, /* 字體顏色, fontcolor, transcolor,opaque */
NULL, NULL, NULL, NULL); /* int *cnt, int *lnleft, int* penx, int* peny */
/* <<<<< 3. EGI general release EGI釋放流程 >>>>>> */
/* 3.1 Release sysfonts and appfonts 釋放所有FreeTpype字體 */
printf("FTsymbol_release_allfonts()...\n");
FTsymbol_release_allfonts();
/* 3.2 Release all symbol pages 釋放所有圖形/符號映像 */
printf("symbol_release_allpages()...\n");
symbol_release_allpages();
printf("FTsymbol_release_allpage()...\n");
FTsymbol_release_allpages(); /* release FT derived symbol pages: sympg_ascii */
/* 3.3 Release FBDEV and its data 釋放FB顯示設備及數據 */
printf("fb_filo_flush() and release_fbdev()...\n");
fb_filo_flush(&gv_fb_dev);
release_fbdev(&gv_fb_dev);
/* 3.4 Release virtual FBDEV 釋放虛擬FB顯示設備 */
#if 0
printf("release virtual fbdev...\n");
release_virt_fbdev(&vfb);
#endif
/* 3.5 End touch read thread 結束觸摸屏線程 */
printf("egi_end_touchread()...\n");
egi_end_touchread();
/* 3.6 結束日誌記錄 */
#if 0
printf("egi_quit_log()...\n");
egi_quit_log();
#endif
printf("<------- END ------>\n");
return 0;
}