EGI的第一個程序: Hello World.

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章