📄 keyboard_up.h~
字号:
#ifndef _PUBLIC_H#define _PUBLIC_H#include <linux/fb.h>#include <stdio.h>#include <linux/fb.h>#include <fcntl.h>#include <errno.h>#include <unistd.h>#include <sys/mman.h>#include <sys/ioctl.h>#define SYS_BLACK 0x00000000#define SYS_WHITE 0xffffffff// Framebuffer device display information
unsigned int fb_bpp;
unsigned int fb_width;
unsigned int fb_height;
unsigned int fb_pixel_size;
unsigned int fb_line_size;
unsigned int fb_buffer_size;// Define macro of display information
#define BPP fb_bpp
#define SCREEN_WIDTH fb_width
#define SCREEN_HEIGHT fb_height
#define PIXEL_SIZE fb_pixel_size
#define LINE_SIZE fb_line_size
#define BUFFER_SIZE fb_buffer_size/* Keyboard values*/typedef unsigned short MWKEY;typedef unsigned short MWSCANCODE;/* Keyboard state modifiers*/typedef unsigned int MWKEYMOD;#define MWKEY_UNKNOWN 0#define MWKEY_NONASCII_MASK 0xFF00/* Numeric keypad*/#define MWKEY_KP0 '0'#define MWKEY_KP1 '1'#define MWKEY_KP2 '2'#define MWKEY_KP3 '3'#define MWKEY_KP4 '4'#define MWKEY_KP5 '5'#define MWKEY_KP6 '6'#define MWKEY_KP7 '7'#define MWKEY_KP8 '8'#define MWKEY_KP9 '9'#define MWKEY_KP_DEL 0x7F#define MWKEY_KP_DIVIDE '/'#define MWKEY_KP_MULTIPLY '*'#define MWKEY_KP_MINUS '-'#define MWKEY_KP_PLUS '+'#define MWKEY_KP_ENTER 13#define MWKEY_KP_EQUALS 61#define MWKEY_KP_NUMLOCK 0XFF#define MWKEY_C_DEL '.' //0x7F#define MWKEY_C_DIVIDE '/'#define MWKEY_C_MULTIPLY '*'#define MWKEY_C_MINUS '-'#define MWKEY_C_PLUS '+'#define MWKEY_C_ENTER 13#define MWKEY_C_EQUALS 61#define MWKEY_C_NUMLOCK 0XFF/* Following keysyms are mapped to private use portion of Unicode-16*//* arrows + home/end pad*/#define MWKEY_FIRST MWKEY_KP4#define MWKEY_LEFT MWKEY_KP4#define MWKEY_RIGHT MWKEY_KP6#define MWKEY_UP MWKEY_KP8#define MWKEY_DOWN MWKEY_KP2#define MWKEY_INSERT MWKEY_KP0#define MWKEY_DELETE MWKEY_KP_DEL#define MWKEY_HOME MWKEY_KP7#define MWKEY_END MWKEY_KP1#define MWKEY_PAGEUP MWKEY_KP9#define MWKEY_PAGEDOWN MWKEY_KP3#define MWKEY_NUMLOCK MWKEY_KP_NUMLOCK#define KEYBOARD "/dev/mcu/kbd"typedef struct{ int r; int g; int b;} color;/* Interface to Keyboard Device Driver*/typedef struct _kbddevice { int (*Open)(void); void (*Close)(void); void (*GetModifierInfo)(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers); int (*Read)(MWKEY *buf,MWKEYMOD *modifiers,MWSCANCODE *scancode); int (*Poll)(void); /* not required if have select()*/} KBDDEVICE;static int fd;typedef struct{ MWKEY mwkey; int scancode;}KeyMap;static MWKEY scancodes[64];static KeyMap keymap[] = { //update map policy {MWKEY_KP0, 0x0b}, {MWKEY_KP1, 0x02}, {MWKEY_KP2, 0x03}, {MWKEY_KP3, 0x04}, {MWKEY_KP4, 0x05}, {MWKEY_KP5, 0x06}, {MWKEY_KP6, 0x07}, {MWKEY_KP7, 0x08}, {MWKEY_KP8, 0x09}, {MWKEY_KP9, 0x0a}, {MWKEY_NUMLOCK, 0x2a}, {MWKEY_KP_DIVIDE, 0x35}, {MWKEY_KP_MULTIPLY, 0x37}, {MWKEY_KP_MINUS, 0x4a}, {MWKEY_KP_PLUS, 0x4e}, {MWKEY_KP_ENTER, 0x1c}, {MWKEY_KP_DEL, 0x53}, };intKBD_Open(void){ int i; fd = open(KEYBOARD, O_RDONLY | O_NONBLOCK); if (fd < 0) { printf("%s - Can't open keyboard!\n", __FUNCTION__); return -1; } for (i=0; i<sizeof(scancodes)/sizeof(scancodes[0]); i++) scancodes[i]=MWKEY_UNKNOWN; for (i=0; i< sizeof(keymap)/sizeof(keymap[0]); i++) scancodes[keymap[i].scancode]=keymap[i].mwkey; return fd;}voidKBD_Close(void){ close(fd); fd = -1;}voidKBD_GetModifierInfo(MWKEYMOD * modifiers, MWKEYMOD * curmodifiers){ if (modifiers) *modifiers = 0; /* no modifiers available */ if (curmodifiers) *curmodifiers = 0;}intKBD_Read(char* kbuf, MWKEYMOD * modifiers, MWSCANCODE * scancode){ int keydown = 0; int cc = 0; char buf, key; cc = read(fd, &buf, 1); if (cc < 0) { if ((errno != EINTR) && (errno != EAGAIN) && (errno != EINVAL)) { perror("KBD KEY"); return (-1); } else { return (0); } } if (cc == 0) return (0); *modifiers = 0; if (buf & 0x80) { keydown = 1; /* Key pressed but not released */ } else { keydown = 2; /* key released */ } buf &= (~0x80); *scancode = scancodes[(int) buf]; *kbuf = *scancode ; return keydown;}int kbd_init(){ if (KBD_Open() < 0) { printf("Can't open keyboard!\n"); return -1; } return 0;}int kbd_close(){ KBD_Close(); return 0;}char get_key(void){ int keydown = 0; char key = 0; MWKEYMOD modifiers; MWSCANCODE scancode; while(1) { keydown = KBD_Read(&key, &modifiers, &scancode); if(keydown == 1) { return key; }else return 'n'; }}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -