?? comm_drive.c
字號:
/* IAL輸入引擎底層驅(qū)動。
本驅(qū)動程序是用于MagicARM2200實(shí)驗(yàn)箱,采用16個(gè)按鍵和觸摸屏輸入。
*/
#include "common.h"
#include "minigui.h"
#include "ucos_ii.h"
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
// 定義輸入消息數(shù)據(jù)結(jié)構(gòu)
typedef struct TOUCH_KEY
{ uint8 sta; // 狀態(tài)字,d1位為1時(shí)表示按鍵輸入,d0為1時(shí)表示觸摸屏輸入;
// d7為1時(shí)表示按鍵/觸摸屏按下,為0時(shí)表示放開。
uint8 key; // 按鍵碼(0--15)
// 觸摸屏輸入的坐標(biāo)
uint16 x;
uint16 y;
} TouchKey_Sta;
extern OS_EVENT *TouchKeyMbox; // 聲明按鍵/觸摸屏消息郵箱
static TouchKey_Sta *event_input;
/* (模擬)鼠標(biāo)左、中、右按鍵鍵值定義 */
#define IAL_MOUSE_LEFTBUTTON 4
#define IAL_MOUSE_MIDDLEBUTTON 2
#define IAL_MOUSE_RIGHTBUTTON 1
/* --------------------- For Common IAL Engine ----------------- */
/* Should be implemented if you use common ial engine in MiniGUI */
#define COMM_MOUSEINPUT 0x01 /* 鼠標(biāo)或觸摸屏事件 */
#define COMM_KBINPUT 0x02 /* 按鍵事件 */
/* 定義按鍵功能,16個(gè)按鍵安排如下:
-----------------------------
| 7 | 8 | 9 | / |
-----------------------------
| 4 | 5 | 6 | * |
-----------------------------
| 1 | 2 | 3 | - |
-----------------------------
| 0 | . | + | Enter|
-----------------------------
*/
typedef struct
{ unsigned char event;
unsigned char value;
} KEY_EVENT;
KEY_EVENT EVENT_CHG_TAB[16] =
{ {COMM_KBINPUT, SCANCODE_0},
{COMM_KBINPUT, SCANCODE_1},
{COMM_KBINPUT, SCANCODE_2},
{COMM_KBINPUT, SCANCODE_3},
{COMM_KBINPUT, SCANCODE_4},
{COMM_KBINPUT, SCANCODE_5},
{COMM_KBINPUT, SCANCODE_6},
{COMM_KBINPUT, SCANCODE_7},
{COMM_KBINPUT, SCANCODE_8},
{COMM_KBINPUT, SCANCODE_9},
{COMM_KBINPUT, SCANCODE_PERIOD}, // 小數(shù)點(diǎn)
{COMM_KBINPUT, SCANCODE_KEYPADPLUS}, // 加號
{COMM_KBINPUT, SCANCODE_ENTER}, // 回車
{COMM_KBINPUT, SCANCODE_MINUS}, // 減號
{COMM_KBINPUT, SCANCODE_KEYPADMULTIPLY}, // 乘法
{COMM_KBINPUT, SCANCODE_SLASH} // 減號
};
/*
* Waits for input for keyboard and touchpanel.
* If no data, this function should go into sleep;
* when data is available, keyboard or touchpanel driver should wake up
* the task/thread in MiniGUI who call comm_wait_for_input.
*
* Normal implementation make this function sleep on a ucosii semaphore.
* return COMM_MOUSEINPUT or COMM_KBINPUT according to type of the input event.
*/
// 查詢鍵盤或鼠標(biāo)事件
int comm_wait_for_input (void)
{ unsigned char err;
/* 等待按鍵/觸摸屏消息 */
event_input = (TouchKey_Sta *) OSMboxPend(TouchKeyMbox, 0, &err);
// 判斷是什么事件,然后返回相應(yīng)的值
if(err==OS_NO_ERR)
{ if((event_input->sta&0x01) != 0)
{ return(COMM_MOUSEINPUT);
}
if((event_input->sta&0x02) != 0)
{ return(COMM_KBINPUT);
}
}
return(0);
}
/*
* Gets touchpanel position and button data.
* x, y : position values
* button : Non-zero value means pen is down.
*/
// 該函數(shù)的返回值可以是IAL_MOUSE_LEFTBUTTON(表示左鍵按下)、
// IAL_MOUSE_RIGHTBUTTON(表示右鍵按下)等值"或"的結(jié)果。
// 取得鼠標(biāo)/觸摸屏的參數(shù)
int comm_ts_getdata (int *x, int *y, int *button)
{ /* 根據(jù)觸摸按下或放開進(jìn)行相應(yīng)的處理 */
if((event_input->sta&0x80) != 0) // 觸摸按下
{ *x = event_input->x;
*y = event_input->y;
*button = IAL_MOUSE_LEFTBUTTON;
}
else // 觸摸放開
{ *button = 0;
} // end of if((key&0x80) != 0)...else...
return(0);
}
/*
* Gets keyboard key data.
* key : return MiniGUI scancode of the key.
* key_status : key down or up, non-zero value means down.
*/
// 取得按鍵的參數(shù)
int comm_kb_getdata (short *key, short *key_status)
{ /* 根據(jù)按鍵按下或放開進(jìn)行相應(yīng)的處理 */
if((event_input->sta&0x80) != 0) // 按鍵按下
{ *key = EVENT_CHG_TAB[event_input->key].value;
*key_status = 1;
}
else // 按鍵放開
{ *key_status = 0;
} // end of if((event_input.sta&0x80) != 0)...else...
return(0);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -