자답입니다.
해보니 처음에 GdOpenKeyboard() 함수를 써서 open을 했는데, 이게 결국은 2
번 open을 하게 되는 격이되어 버리네여... 그래서 나온 문제 였습니다.
알아서 open을 하는가 봅니다.
GdOpenKeyboard()하지 않고 100ms마다 읽으니까 정상적으로 동작을 하네요~~
이제 serial 통신을 구현할 차례네요~~~
모두 즐삽하시길 ~~

hani337 wrote..
:
: 안녕하세요
: 얼마전 마이크로 윈도우에서 GPIO를 이용해서 키패드를 구현하려고 합니다.
: 디바이스 드라이버는 read만하면 ASCII로 키 값이 들어오도록 만들어 두었습 니
: 다. 그냥 test 프로그램으로 돌리니 키 입력이 들어오더라구요... 됐구나 싶 어
: 서 마이크로 윈도우에 연결하려고 하는데 잘 안되네요....어떻게 연결야 하 는
: 지 GPIO OPEN error 만 뜨네요...
:
: 우선 마이크로 윈도우에 key_gpio.c를 만들었습니다.
: 그리고 키 입력을 맵핑 시켜줬습니다. 그다음에 config파일에 NOKEY를Y로 KEY
: GPIO를 Y로 했습니다. 그다음 driver안에 Makefile에 Key_gpio.c도 컴파일 이
: 되도록 하였습니다. 그리고 Microwindow에서는 i=GdOpenKeyboard();로 open 하
: 고, GdReadKeyboard(key,mod,scan);로 100ms마다 읽도록 하였는데... Open자 체
: 가 안되네요.....
: 어떻게 해야 할지 막막하기만 합니다. 혹시 경험이 있으신 분은 답변 부탁드 립
: 니다. 혹은 참조할 만한 자료라도 부탁드리겠습니다
:
: static int
: GPIO_Open(KBDDEVICE *pkd)
: {
: int i;
: // char *kbd;
:
: Fd=open("/dev/gpio",O_RDWR|O_NDELAY);
: if(Fd<0){
: printf("GPIO open error
");
: return -1;
: }
: return Fd;
: }
:
: /*
: * Close the keyboard.
: */
: static void
: GPIO_Close(void)
: {
: if(Fd>=0){
: perror("keypad Close");
: close(Fd);
: }
: Fd=-1;
: }
:
: /*
: * Return the possible modifiers for the keyboard.
: */
: static void
: GPIO_GetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers)
: {
: if (modifiers)
: *modifiers = 0; /* no modifiers available
: */
: if (curmodifiers)
: *curmodifiers = 0;
: }
:
: /*
: * This reads one keystroke from the keyboard, and the current state of
: * the modifier keys (ALT, SHIFT, etc). Returns -1 on error, 0 if no
: data
: * is ready, 1 on a keypress, and 2 on keyrelease.
: * This is a non-blocking call.
: */
: static int
: GPIO_Read(MWKEY *kbuf, MWKEYMOD *modifiers, MWSCANCODE *pscancode)
: {
: int keydown=0;
: int cc=0;
: char Buff[1];
:
: cc=read(Fd, &Buff,1);
: if(cc<0){
: if((errno!=EINTR)&&(errno!=EAGAIN)&&(errno!=EINVAL)){
: // perror("GPIO KEY ERROR
");
: return -1;
: }
: else
: return 0;
: }
: if(cc==0)
: return 0;
: *modifiers=0;
: keydown = 2; /* key released */
: *pscancode = *Buff;
:
: switch(*pscancode)
: {
: case MENU1_KEY: *kbuf=MWKEY_KP1;
: break;
: case MENU2_KEY: *kbuf=MWKEY_KP2;
: break;
: case MENU3_KEY: *kbuf=MWKEY_KP3;
: break;
: case MENU4_KEY: *kbuf=MWKEY_KP4;
: break;
: case MENU5_KEY: *kbuf=MWKEY_KP5;
: break;
: case MENU6_KEY: *kbuf=MWKEY_KP6;
: break;
: case MENU7_KEY: *kbuf=MWKEY_KP7;
: break;
: default:
: printf("Unknown Scancode %d
",*pscancode);
: return 0;
: }
: return keydown;
: }