亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? minigui 體系結構之四 圖形抽象層和輸入抽象層及 native engine 的實現(二).htm

?? 是一個標準的體系結構
?? HTM
?? 第 1 頁 / 共 4 頁
字號:
        <TR>
          <TD><PRE># echo 1 &gt; /dev/tty0
# echo 1 &gt; /dev/tty
</PRE></TD></TR></TBODY></TABLE>
      <P>結果都將把1 輸入到當前終端上。另外,如果從偽終端上運行它們,則第一條指令會將 1 輸出到控制臺的當前終端,而第二條指令會把 1 
      輸出到當前偽終端上。從而 tty0 表示當前控制臺終端,tty 表示當前終端(實際是當前進程控制終端的別名而已)。</P>
      <P>tty0 的設備號是 4,0</P>
      <P>tty1 的設備號是 5, 0</P>
      <P>/dev/tty 是和進程的每一個終端聯系起來的,/dev/tty 的驅動程序所做的只是把所有的請求送到合適的終端。</P>
      <P>缺省情況下,/dev/tty 是普通用戶可讀寫的,而/dev/tty0 則只有超級用戶能夠讀寫,主要是基于這個原因,我們目前使用 
      /dev/tty 作為設備文件。后面所有有關終端處理的程序的都采用它作為當前終端文件,這樣也可以和傳統的 Unix 相兼容。</P>
      <P>鍵盤驅動程序接口如清單 8 所示。</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>                     清單 8  Native 輸入引擎的鍵盤驅動程序接口

typedef struct _kbddevice {
    int  (*Open)(void);
    void (*Close)(void);
    void (*GetModifierInfo)(int *modifiers);
    int  (*Read)(unsigned char *buf,int *modifiers);
    void (*Suspend)(void);
    void (*Resume)(void);
} KBDDEVICE;
</PRE></TD></TR></TBODY></TABLE>
      <P>基本原理非常簡單,初始化時打開 /dev/tty,以后就從該文件讀出所有的數據。由于MiniGUI 需要捕獲 KEY_DOWN 和 
      KEY_UP 消息,鍵盤被置于原始(raw)模式。這樣,程序從 /dev/tty 中直接讀出鍵盤的掃描碼,比如用戶按下A 
      鍵,就可以讀到158,放下,又讀到30。原始模式下,程序必須自己記下各鍵的狀態,特別是shift,ctrl,alt,caps lock 
      等,所以程序維護一個數組,記錄了所有鍵盤的狀態。</P>
      <P>這里說明一下鼠標移動,按鍵等事件是如何被傳送到上層消息隊列的。MiniGUI工作在用戶態,所以它不可能利用中斷這種高效的機制。沒有內核驅動程序的支持,它也很難利用信號等Unix系統的IPC機制。MiniGUI可以做到的就是看 
      /dev/tty, /dev/mouse 等文件是否有數據可以讀。上層通過不斷調用 GAL_WaitEvent 
      嘗試讀取這些文件。這也是線程Parser的主要任務。GAL_WaitEvent 主要利用了系統調用select 
      這一類Unix系統中地位僅次于ioctl的系統調用完成該功能。并將等待到的事件作為返回值返回。</P>
      <P>至此介紹了鍵盤和鼠標的驅動程序,作為簡單的輸入設備,它們的驅動是非常簡單的。事實上,它們的實現代碼也比較少,就是在嵌入式系統中要使用的觸摸屏,如果操作系統內核支持,其驅動程序也是非常簡單的:它只不過是一種特殊的鼠標。</P><A 
      id=5 name=5></A>
      <P><STRONG class=subhead>5 特定嵌入式系統上圖形引擎和輸入引擎實現</STRONG></P>
      <P>如前所述,基于 Linux 的嵌入式系統,其內核一般具備對 FrameBuffer 的支持,從而可以利用已有的 Native 圖形引擎。在 
      MiniGUI 代碼中,可通過調整 src/gal/native/native.h 中的宏定義而定義函數庫中是否包含特定的圖形引擎驅動程序(清單 
      9):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>                          清單 9  定義 Native 引擎的子驅動程序


  16 /* define or undefine these macros 
  17    to include or exclude specific fb driver.
  18  */
  19 #undef _FBLIN1_SUPPORT
  20 // #define _FBLIN1_SUPPORT        1
  21 
  22 #undef _FBLIN2_SUPPORT
  23 // #define _FBLIN2_SUPPORT        1
  24 
  22 #undef _FBLIN_2_SUPPORT
  23 // #define _FBLIN_2_SUPPORT        1
  24 
  25 //#undef _FBLIN4_SUPPORT
  26 #define _FBLIN4_SUPPORT        1
  27 
  28 // #undef _FBLIN8_SUPPORT
  29 #define _FBLIN8_SUPPORT        1
  30 
  31 // #undef _FBLIN16_SUPPORT
  32 #define _FBLIN16_SUPPORT       1
  33 
  34 #undef _FBLIN24_SUPPORT
  35 // #define _FBLIN24_SUPPORT       1
  36 
  37 #undef _FBLIN32_SUPPORT
  38 // #define _FBLIN32_SUPPORT       1
  39 
  40 #define HAVETEXTMODE    1       /* =0 for graphics only systems*/
</PRE></TD></TR></TBODY></TABLE>
      <P>其中,HAVETEXTMODE 定義系統是否有文本模式,可將 MiniGUI 中用來關閉文本模式的代碼屏蔽掉。_FBLIN_2_SUPPORT 
      和_FBLIN2_SUPPORT 分別用來定義 big endian 和 little endian 的 2bpp 驅動程序。</P>
      <P>對于輸入引擎來說,情況就有些不同了。因為目前還沒有統一的處理輸出設備的接口,而且每個嵌入式系統的輸入設備也各不相同,所以,我們通常要針對特定嵌入式系統重新輸入引擎。下面的代碼就是針對 
      ADS 基于 StrongARM 的嵌入式開發系統編寫的輸入引擎(清單 10):</P>
      <TABLE class=code-sample cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD><PRE>           清單 10  為 ADS 公司基于 StrongARM 的嵌入式開發系統編寫的輸入引擎

  30 
  31 #include &lt;stdio.h&gt;
  32 #include &lt;stdlib.h&gt;
  33 #include &lt;string.h&gt;
  34 #include &lt;unistd.h&gt;
  35 #include &lt;sys/io.h&gt;
  36 #include &lt;sys/ioctl.h&gt;
  37 #include &lt;sys/poll.h&gt;
  38 #include &lt;linux/kd.h&gt;
  39 #include &lt;sys/types.h&gt;
  40 #include &lt;sys/stat.h&gt;
  41 #include &lt;fcntl.h&gt;
  42 
  43 #include "common.h"
  44 #include "misc.h"
  45 #include "ads_internal.h"
  46 #include "ial.h"
  47 #include "ads.h"
  48 
  49 #ifndef NR_KEYS
  50 #define NR_KEYS         128
  51 #endif
  52 
  53 static int ts;
  54 static int mousex = 0;
  55 static int mousey = 0;
  56 static POS pos;
  57 
  58 static unsigned char state[NR_KEYS];
  59 
  60 /************************  Low Level Input Operations **********************/
  61 /*
  62  * Mouse operations -- Event
  63  */
  64 static int mouse_update(void)
  65 {
  66         return 0;
  67 }
  68 
  69 static int mouse_getx(void)
  70 {
  71         return mousex;
  72 }
  73 
  74 static int mouse_gety(void)
  75 {
  76         return mousey;
  77 }
  78 
  79 static void mouse_setposition(int x, int y)
  80 {
  81 }
  82 
  83 static int mouse_getbutton(void)
  84 {
  85         return pos.b;
  86 }
  87 
  88 static void mouse_setrange(int minx,int miny,int maxx,int maxy)
  89 {
  90 }
  91 
  92 static int keyboard_update(void)
  93 {
  94         return 0;
  95 }
  96 
  97 static char * keyboard_getstate(void)
  98 {
  99         return (char *)state;
 100 }
 101 
 102 #ifdef _LITE_VERSION 
 103 static int wait_event (int which, int maxfd, fd_set *in, fd_set *out, fd_set  *except,
 104                 struct timeval *timeout)
 105 {
 106         fd_set rfds;
 107         int     e;
 108 
 109     if (!in) {
 110         in = &amp;rfds;
 111         FD_ZERO (in);
 112     }
 113 
 114         if (which &amp; IAL_MOUSEEVENT) {
 115                 FD_SET (ts, in);
 116         if (ts &gt; maxfd) maxfd = ts;
 117         }
 118 
 119         e = select (maxfd + 1, in, out, except, timeout) ;
 120 
 121         if (e &gt; 0) { 
 122                 if (ts &gt;= 0 &amp;&amp; FD_ISSET (ts, in))
 123                 {
 124             FD_CLR (ts, in);
 125                         read (ts, &amp;pos, sizeof (POS));  
 126                         if ( pos.x !=-1 &amp;&amp; pos.y !=-1) {
 127                                 mousex = pos.x;
 128                                 mousey = pos.y;
 129                         }
 130                         pos.b = ( pos.b &gt; 0 ? 4:0);
 131                         return IAL_MOUSEEVENT;
 132                 }
 133 
 134         } else if (e &lt; 0) {
 135                 return -1;
 136         }
 137         return 0;
 138 }
 139 #else
 140 static int wait_event (int which, fd_set *in, fd_set *out, fd_set *except,
 141                 struct timeval *timeout)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www.99精品| 久久66热re国产| 中文成人综合网| 欧美色视频一区| 91视视频在线直接观看在线看网页在线看 | 九九精品一区二区| 亚洲一区二区影院| 国产精品久久久久久久第一福利 | 亚洲夂夂婷婷色拍ww47| 国产精品视频线看| 欧美韩国日本综合| 中文av字幕一区| 中文字幕不卡在线| 国产精品不卡一区| 国产精品成人在线观看| 中文字幕中文乱码欧美一区二区| 国产欧美一区二区三区鸳鸯浴| 欧美一级爆毛片| 日韩亚洲欧美在线观看| 精品日韩av一区二区| 日韩视频一区二区三区在线播放 | 奇米影视在线99精品| 日韩中文字幕亚洲一区二区va在线 | 日韩欧美成人一区| 精品国精品国产| 国产欧美一区二区三区鸳鸯浴| 亚洲国产激情av| 亚洲人成网站在线| 亚洲一二三区视频在线观看| 亚洲va天堂va国产va久| 美女被吸乳得到大胸91| 国产精品自拍毛片| 99久久精品免费看| 欧美精品乱码久久久久久按摩| 日韩欧美在线综合网| 国产丝袜在线精品| 亚洲综合视频在线观看| 婷婷丁香久久五月婷婷| 国产酒店精品激情| 色噜噜狠狠成人中文综合| 欧美日本在线视频| 国产亚洲欧美激情| 亚洲va在线va天堂| 国产二区国产一区在线观看| 色婷婷久久久久swag精品 | 亚洲成av人综合在线观看| 免费av网站大全久久| av中文一区二区三区| 欧美一级片免费看| 亚洲欧洲性图库| 麻豆精品在线观看| 91视视频在线直接观看在线看网页在线看 | 欧美丰满一区二区免费视频| 精品成人一区二区| 夜夜亚洲天天久久| 国产精品一二二区| 欧美精品欧美精品系列| 国产免费成人在线视频| 亚洲国产精品自拍| 99久久精品国产毛片| 日韩欧美的一区二区| 悠悠色在线精品| 国产99久久久精品| 日韩精品一区二区三区蜜臀| 亚洲影院理伦片| www.66久久| 国产欧美日韩久久| 国产一区二区0| 制服丝袜日韩国产| 亚洲大片一区二区三区| 色爱区综合激月婷婷| 国产精品久99| 国产成人亚洲综合a∨猫咪| 欧美一区二区三区在线视频| 一区二区欧美视频| 91无套直看片红桃| 国产精品传媒在线| 99这里只有精品| 国产精品理论片| 成人黄色在线看| 国产日韩欧美精品电影三级在线| 久久99精品国产| 91精品国产91热久久久做人人| 亚洲在线观看免费视频| 在线观看www91| 亚洲一区日韩精品中文字幕| 色综合久久综合中文综合网| 亚洲三级免费电影| 99re在线视频这里只有精品| 亚洲欧美一区二区视频| 91蝌蚪porny成人天涯| 中文字幕一区二区三区乱码在线| 丰满亚洲少妇av| 国产精品女主播在线观看| 成人免费三级在线| 亚洲欧美区自拍先锋| 色综合激情五月| 亚洲一区成人在线| 在线播放/欧美激情| 麻豆精品一区二区三区| 久久嫩草精品久久久精品 | 337p日本欧洲亚洲大胆色噜噜| 久久精品国产久精国产| 久久精品日韩一区二区三区| 国产不卡在线视频| 国产精品不卡视频| 欧美日韩一区二区三区视频| 日本va欧美va精品发布| 久久精品视频一区| 91久久香蕉国产日韩欧美9色| 亚洲午夜在线电影| 欧美va天堂va视频va在线| 福利电影一区二区| 亚洲精品视频在线观看免费| 91精品欧美福利在线观看| 国产精品亚洲专一区二区三区| 亚洲欧美色一区| 日韩精品一区二区三区视频| 成人高清在线视频| 午夜视黄欧洲亚洲| 国产网红主播福利一区二区| 欧美这里有精品| 国产一区二区在线观看免费| 亚洲卡通动漫在线| 精品久久久久久久久久久久包黑料 | 亚洲欧美一区二区在线观看| 欧美猛男超大videosgay| 国产精品一区二区久久不卡| 亚洲线精品一区二区三区八戒| www精品美女久久久tv| 91国模大尺度私拍在线视频| 国产一区二区三区观看| 午夜精品123| 国产女人18水真多18精品一级做| 欧美色中文字幕| 成人黄色国产精品网站大全在线免费观看| 亚洲专区一二三| 中日韩av电影| 日韩欧美第一区| 欧美久久一二区| 日本久久精品电影| av在线这里只有精品| 韩国精品主播一区二区在线观看| 亚洲一区二区三区中文字幕在线| 国产欧美精品区一区二区三区| 911精品国产一区二区在线| 色综合天天综合色综合av| 国产精品99久久久| 免费成人结看片| 日韩综合小视频| 亚洲国产精品精华液网站| 国产精品传媒视频| 国产精品美女久久久久久2018| www亚洲一区| www国产精品av| 精品免费一区二区三区| 日韩欧美另类在线| 欧美一区二区三区在线观看视频| 欧美久久久久久蜜桃| 欧美体内she精高潮| 色综合久久久久| 色婷婷久久久亚洲一区二区三区| fc2成人免费人成在线观看播放| 国产成人啪午夜精品网站男同| 激情欧美一区二区| 国模大尺度一区二区三区| 久久se精品一区精品二区| 激情小说亚洲一区| 国产黄色精品网站| 成人高清在线视频| 91在线观看高清| 欧美色图激情小说| 8x8x8国产精品| 欧美电影免费观看高清完整版在| 欧美一区二区在线看| 日韩精品一区二区三区在线| 精品免费一区二区三区| 久久精品欧美一区二区三区不卡| 国产亚洲综合av| 自拍偷拍亚洲激情| 日韩在线一区二区| 久久99精品久久久久| 国产盗摄女厕一区二区三区| 懂色av中文字幕一区二区三区| av不卡免费在线观看| 欧美三级韩国三级日本三斤| 欧美成人性福生活免费看| 国产日本一区二区| 一区二区在线免费| 寂寞少妇一区二区三区| eeuss鲁片一区二区三区在线观看| 色噜噜狠狠色综合欧洲selulu| 欧美一区二区播放| 国产日韩av一区二区| 亚洲综合色婷婷| 久久99精品国产麻豆婷婷| 99久久精品免费| 日韩女优av电影| 亚洲欧美影音先锋| 久久国产麻豆精品|