📄 input.c
字号:
/* * stop watch : sample program * key input * * Copyright (C) 2002-2003 by Personal Media Corporation */#include "navigator.h"#include <basic.h>#include <tk/tkernel.h>#include <device/kbpd.h>#include <string.h>EXPORT ID input_tid; /* key input task ID */EXPORT ID kbpd_dd; /* kbpd device descriptor */LOCAL UB keymap[32]; /* current key status */LOCAL UW PrevKeyStat; /* previous key status *//* old key scan code */#define O_SW1_1 0x8c#define O_SW1_2 0x8b#define O_SW1_3 0x89#define O_SW1_4 0x8a#define O_SW1_5 0x1c#define O_SW2 0x04#define O_SW3 0x02#define O_KEY_EXIT O_SW1_5#define O_KEY_ZOOM_IN O_SW2#define O_KEY_ZOOM_OUT O_SW3/* new key scan code */#define SW1_1 0x6c#define SW1_2 0x6b#define SW1_3 0x69#define SW1_4 0x6a#define SW1_5 0x6d#define SW2 0x6e#define SW3 0x6f#define KEY_EXIT SW1_5#define KEY_ZOOM_IN SW2#define KEY_ZOOM_OUT SW3/* * key input task */EXPORT void input_task( INT stacd, VP exinf ){ ID ercd; /* error code */ INT asiz; /* read/write size */ UB devnm[8]; /* device name */ int m; /* message */ int keystat; /* key state */#define KeyOn(n) (keymap[(n) >> 3] & (0x80 >> ((n) & 7))) /* open kbpd device */ strcpy( devnm, "kbpd" ); kbpd_dd = tk_opn_dev( "kbpd", TD_READ ); /* open device */ PrevKeyStat = 0; /* loop */ for(;;) { /* read current key status */ ercd=tk_srea_dev( kbpd_dd, DN_KEYMAP, &keymap[0], 32, &asiz ); /* input check */ keystat = 0; if (KeyOn(KEY_EXIT) || KeyOn(O_KEY_EXIT)){ keystat |= 0x1;} if (KeyOn(KEY_ZOOM_IN) || KeyOn(O_KEY_ZOOM_IN)){ keystat |= 0x2;} if (KeyOn(KEY_ZOOM_OUT) || KeyOn(O_KEY_ZOOM_OUT)) {keystat |= 0x4;} if ((keystat & 0x1) && !(PrevKeyStat & 0x1)){ m = MSG_EXIT; tk_snd_mbf( mbf_id, &m, sizeof(int), TMO_POL ); } if ((keystat & 0x2) && !(PrevKeyStat & 0x2)){ m = MSG_ZOOM_IN; tk_snd_mbf( mbf_id, &m, sizeof(int), TMO_POL ); } if ((keystat & 0x4) && !(PrevKeyStat & 0x4)){ m = MSG_ZOOM_OUT; tk_snd_mbf( mbf_id, &m, sizeof(int), TMO_POL ); } PrevKeyStat = keystat; /* wait for 25ms */ ercd = tk_dly_tsk( 25); /* in case of break, exit loop for termination */ if (MERCD(ercd) == MERCD(E_RLWAI)) break; } /* close kbpd device */ tk_cls_dev( kbpd_dd, 0 ); /* terminate/delete key input task */ tk_exd_tsk();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -