📄 key.c
字号:
/*""FILE COMMENT""*************************************************************
* System Name : RENESAS T-Engine, micro T-Engine series
* File Name : key.c
* Version : 1.00.00
* Contents : Key switch
* Model : T-Engine/SH7727
* CPU : SH7727
* Compiler : GNU
* OS : T-Kernel
* note : The Software is being delivered to you "AS IS"
* : and Renesas,whether explicitly or implicitly makes
* : no warranty as to its Use or performance.
* : RENESAS AND ITS SUPPLIER DO NOT AND CANNOT WARRANT
* : THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING
* : THE SOFTWARE. AS TO ANY MATTER INCLUDING WITHOUT
* : LIMITATION NONINFRINGEMENT OF THIRD PARTY RIGHTS,
* : MERCHANTABILITY, INTEGRATION, SATISFACTORY QUALITY,
* : OR FITNESS FOR ANY PARTICULAR PURPOSE.
*
* Copyright (c) 2006 RENESAS TECHNOLOGY CORP. All Rights Reserved.
* AND RENESAS SOLUTIONS CORP. All Rights Reserved.
* history : 2006.07.28 ver1.00.00
*""FILE COMMENT END""*********************************************************/
#include <machine.h>
#include <tk/tkernel.h>
#include "key.h"
#include "sample_main.h"
#include <sys/svc/h8io_svc.h>
/* MessageBuffer ID */
LOCAL ID mbfid;
/* key code Table */
UH codetbl[11] = {sw1_1,sw1_2,sw1_3,sw1_4,sw1_5,0,0,0,sw3,0,sw2};
/* interrupt enable/disable flag */
BOOL int_flg;
EXPORT ID ks_init(void)
{
T_CMBF cmbf;
// writeREG(KEYCR, 1, KEY_Cnt_STR | KEY_Cnt_ONI | KEY_Cnt_OFFI | KEY_Cnt_ARKEYI);
writeREG(KEYCR, 1, KEY_Cnt_STR | KEY_Cnt_ONI | KEY_Cnt_OFFI);
cmbf.exinf = NULL;
cmbf.mbfatr = TA_TFIFO;
cmbf.bufsz = DEF_BUFSZ;
cmbf.maxmsz = DEF_MAXMSZ;
mbfid = tk_cre_mbf (&cmbf);
ks_ena_int();
writeREG(KATIMER, 1, KS_100MS);
return mbfid;
}
EXPORT UH ks_get_key(void)
{
UH reg_keyptr;
reg_keyptr = readREG(KBITPR, 2);
return reg_keyptr;
}
EXPORT ER ks_chg_key(UH *onoff,UH *code,TMO tmout)
{
ER ercd;
KeyEvt keyevt;
ercd = tk_rcv_mbf(mbfid, &keyevt, tmout);
if(ercd > 0){
*code = keyevt.code;
*onoff = keyevt.h.evttyp;
ercd = E_OK;
}
return ercd;
}
EXPORT void ks_ena_int(void)
{
UINT imask;
DI(imask);
int_flg = TRUE;
EI(imask);
}
EXPORT void ks_dis_int(void)
{
UINT imask;
DI(imask);
int_flg = FALSE;
EI(imask);
}
EXPORT ER ke_set_rtime(UB time)
{
INT i,cnt = 0;
UB timemsk = 0x01;
if(time == 0) return E_PAR;
for(i=0;i<8;i++){
if(time & timemsk){
cnt++;
if(cnt>1) return E_PAR;
}
timemsk = timemsk << 1;
}
writeREG(KATIMER, 1, time); /* set Auto Repeat Time */
return E_OK;
}
EXPORT void ks_inthdr(UINT dintno)
{
INT i;
UH keyptr, keyptr2;
UH bitmsk = 0x01;
UB reg_keysr;
KeyEvt evt;
keyptr = ks_get_key(); /* get Key Pattern */
if(int_flg){
reg_keysr = readREG(KEYSR, 1);
if(reg_keysr & 0x04){ /* OFF */
if(last_keyptr == keyptr){
evt.h.evttyp = TDE_KEYUP;
tk_snd_mbf(mbfid, &evt, DEF_MAXMSZ,TMO_POL);
keyptr = 0;
}
}
else {
keyptr2 = last_keyptr ^ keyptr;
if(keyptr2){
for(i=0; i<=10; i++){
if(keyptr2 & bitmsk){
if(!(last_keyptr & bitmsk)){ /* ON */
evt.h.evttyp = TDE_KEYDOWN;
evt.code = codetbl[i];
tk_snd_mbf(mbfid, &evt, DEF_MAXMSZ,TMO_POL);
}
}
bitmsk = bitmsk << 1;
}
}
}
}
last_keyptr = keyptr;
reg_keysr = readREG(KEYSR, 1);
writeREG(KEYSR, 1, reg_keysr & 0xf1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -