]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/board/arm/ul_usb1/libs/bspbase/kbd_io_hisc.c
Included ARM LPC21xx related code from uLan project. The snapshot date is 2008-07-05
[lincan.git] / embedded / board / arm / ul_usb1 / libs / bspbase / kbd_io_hisc.c
diff --git a/embedded/board/arm/ul_usb1/libs/bspbase/kbd_io_hisc.c b/embedded/board/arm/ul_usb1/libs/bspbase/kbd_io_hisc.c
new file mode 100644 (file)
index 0000000..ff4d1d5
--- /dev/null
@@ -0,0 +1,88 @@
+#include <cpu_def.h>
+#include "kbd.h"
+
+unsigned char kbd_onerow(unsigned char scan)
+{
+       kbdisr_lock_level_t level;
+       unsigned int scan_mask=KBD_SCAN_MASK;
+       unsigned int scan_val;
+       unsigned int ret;
+       int delay=10;
+
+       kbdisr_lock(level);
+
+       #ifdef KBD_USE_IO_SETCLR_OPS
+       scan_val=(scan<<KBD_SCAN_BIT0) & scan_mask;
+        SET_OUT_PIN(KBD_PORT,scan_mask);
+        CLR_OUT_PIN(KBD_PORT,scan_val);
+       #else   
+       scan_val=(~scan<<KBD_SCAN_BIT0) & scan_mask;
+       KBD_DR|=scan_val;
+       KBD_DR&=scan_val|~scan_mask;
+       #endif /* KBD_USE_IO_SETCLR_OPS */
+       kbdisr_unlock(level);
+
+       while(delay--)
+               ret=KBD_SSR;
+       ret=KBD_SSR;
+
+       kbdisr_lock(level);
+       #ifdef KBD_USE_IO_SETCLR_OPS
+        SET_OUT_PIN(KBD_PORT,scan_mask);
+       #else   
+       KBD_DR |= scan_mask;
+       #endif /* KBD_USE_IO_SETCLR_OPS */
+       kbdisr_unlock(level);
+       
+       return (~ret>>KBD_RET_BIT0)&((1<<KBD_RET_CNT)-1);
+}
+
+void kbd_setio(void)
+{
+       kbdisr_lock_level_t level;
+       unsigned int scan_mask=KBD_SCAN_MASK;
+       #ifndef KBD_USE_IO_SETCLR_OPS
+       unsigned int ret_mask=KBD_RET_MASK;
+       #endif /* KBD_USE_IO_SETCLR_OPS */
+
+       kbdisr_lock(level);
+       
+       #ifdef KBD_USE_IO_SETCLR_OPS
+        SET_OUT_PIN(KBD_PORT,scan_mask);
+       #else   
+       KBD_DR|=scan_mask;
+       KBD_DDIR|=scan_mask;
+       KBD_DDIR&=~ret_mask;
+       KBD_PUEN|=ret_mask;
+       #endif /* KBD_USE_IO_SETCLR_OPS */
+
+       kbdisr_unlock(level);
+}
+
+const scan2key_t kbd_scan2key_hisc_keypad[]={
+       [0x00]={0,0},
+       [0x01]={'3',0},
+       [0x02]={'6',0},
+       [0x03]={'9',0},
+       [0x04]={'\r',0},
+       [0x05]={'A',0},
+       [0x06]={'2',0},
+       [0x07]={'5',0},
+       [0x08]={'8',0},
+       [0x09]={'0',0},
+       [0x0a]={'B',0},
+       [0x0b]={'1',0},
+       [0x0c]={'4',0},
+       [0x0d]={'7',0},
+       [0x0e]={'*',0},
+       [0x0f]={'C',0},
+};
+
+const scan2mod_t kbd_scan2mod_hisc_keypad[]={
+       {0,0,0,0}
+};
+
+scan2key_t *kbd_scan2key_tab=(scan2key_t*)kbd_scan2key_hisc_keypad;
+scan2mod_t *kbd_scan2mod_tab=(scan2mod_t*)kbd_scan2mod_hisc_keypad;
+
+