]> rtime.felk.cvut.cz Git - lincan.git/blob - embedded/board/arm/ul_usb1/libs/bspbase/kbd_io_hisc.c
Merge branch 'master' into can-usb1
[lincan.git] / embedded / board / arm / ul_usb1 / libs / bspbase / kbd_io_hisc.c
1 #include <cpu_def.h>
2 #include "kbd.h"
3
4 unsigned char kbd_onerow(unsigned char scan)
5 {
6         kbdisr_lock_level_t level;
7         unsigned int scan_mask=KBD_SCAN_MASK;
8         unsigned int scan_val;
9         unsigned int ret;
10         int delay=10;
11
12         kbdisr_lock(level);
13
14        #ifdef KBD_USE_IO_SETCLR_OPS
15         scan_val=(scan<<KBD_SCAN_BIT0) & scan_mask;
16         SET_OUT_PIN(KBD_PORT,scan_mask);
17         CLR_OUT_PIN(KBD_PORT,scan_val);
18        #else    
19         scan_val=(~scan<<KBD_SCAN_BIT0) & scan_mask;
20         KBD_DR|=scan_val;
21         KBD_DR&=scan_val|~scan_mask;
22        #endif /* KBD_USE_IO_SETCLR_OPS */
23         kbdisr_unlock(level);
24
25         while(delay--)
26                 ret=KBD_SSR;
27         ret=KBD_SSR;
28
29         kbdisr_lock(level);
30        #ifdef KBD_USE_IO_SETCLR_OPS
31         SET_OUT_PIN(KBD_PORT,scan_mask);
32        #else    
33         KBD_DR |= scan_mask;
34        #endif /* KBD_USE_IO_SETCLR_OPS */
35         kbdisr_unlock(level);
36         
37         return (~ret>>KBD_RET_BIT0)&((1<<KBD_RET_CNT)-1);
38 }
39
40 void kbd_setio(void)
41 {
42         kbdisr_lock_level_t level;
43         unsigned int scan_mask=KBD_SCAN_MASK;
44        #ifndef KBD_USE_IO_SETCLR_OPS
45         unsigned int ret_mask=KBD_RET_MASK;
46        #endif /* KBD_USE_IO_SETCLR_OPS */
47
48         kbdisr_lock(level);
49         
50        #ifdef KBD_USE_IO_SETCLR_OPS
51         SET_OUT_PIN(KBD_PORT,scan_mask);
52        #else    
53         KBD_DR|=scan_mask;
54         KBD_DDIR|=scan_mask;
55         KBD_DDIR&=~ret_mask;
56         KBD_PUEN|=ret_mask;
57        #endif /* KBD_USE_IO_SETCLR_OPS */
58
59         kbdisr_unlock(level);
60 }
61
62 const scan2key_t kbd_scan2key_hisc_keypad[]={
63         [0x00]={0,0},
64         [0x01]={'3',0},
65         [0x02]={'6',0},
66         [0x03]={'9',0},
67         [0x04]={'\r',0},
68         [0x05]={'A',0},
69         [0x06]={'2',0},
70         [0x07]={'5',0},
71         [0x08]={'8',0},
72         [0x09]={'0',0},
73         [0x0a]={'B',0},
74         [0x0b]={'1',0},
75         [0x0c]={'4',0},
76         [0x0d]={'7',0},
77         [0x0e]={'*',0},
78         [0x0f]={'C',0},
79 };
80
81 const scan2mod_t kbd_scan2mod_hisc_keypad[]={
82         {0,0,0,0}
83 };
84
85 scan2key_t *kbd_scan2key_tab=(scan2key_t*)kbd_scan2key_hisc_keypad;
86 scan2mod_t *kbd_scan2mod_tab=(scan2mod_t*)kbd_scan2mod_hisc_keypad;
87
88