void RcGetActCode( void ) { int x=0; unsigned short code = 0; static unsigned short cw=0; #if defined HAVE_DREAMBOX_HARDWARE || defined HAVE_IPBOX_HARDWARE char buf[32]; if ( fd != -1 ) x = read( fd, buf, 32 ); if ( x < 2 ) { realcode=0xee; if ( cw == 1 ) cw = 0; return; } x -= 2; memcpy(&code,buf+x,2); if (!drop && !keyboard) { drop = 1; return; } code=translate(code); realcode=code; if ( code == 0xee ) { drop = 0; return; } #else struct input_event ev; if ( fd != -1 ) { do { x = read(fd, &ev, sizeof(struct input_event)); if ((x == sizeof(struct input_event)) && ((ev.value == 1)||(ev.value == 2))) break; } while (x == sizeof(struct input_event)); } if ( x % sizeof(struct input_event) ) { //KbGetActCode(); realcode=0xee; return; } Debug("%d bytes from FB received ...\n",x); realcode=code=ev.code; Debug("code=%04x\n",code); #endif if ( cw == 2 ) { actcode=code; return; } switch(code) { #if 0 case RC_HELP: if ( !cw ) FBPrintScreen(); cw=1; break; #endif case RC_SPKR: if ( !cw ) { cw=2; FBPause(); cw=0; } break; case RC_HOME: doexit=3; break; #ifdef HAVE_DBOX_HARDWARE case KEY_1: actcode = 1; break; case KEY_2: actcode = 2; break; case KEY_3: actcode = 3; break; case KEY_4: actcode = 4; break; case KEY_5: actcode = 5; break; case KEY_6: actcode = 6; break; case KEY_7: actcode = 7; break; case KEY_8: actcode = 8; break; case KEY_9: actcode = 9; break; case KEY_0: actcode = 0; break; #endif #if 0 case RC_UP: case RC_DOWN: case RC_RIGHT: case RC_LEFT: case RC_OK: #endif default : cw=0; actcode=code; break; } return; }
void KbGetActCode( void ) { unsigned char buf[256]; int x=0; int left; unsigned short code = 0; unsigned char *p = buf; realcode=0xee; if ( kbfd != -1 ) x = read(kbfd,buf,256); if ( x>0 ) { for(p=buf, left=x; left; left--,p++) { switch(*p) { case 0x1b : if ( left >= 3 ) { p+=2; code = kb_translate(*p); if ( code ) actcode = code; left-=2; } else left=1; break; case 0x03 : doexit=3; break; case 0x0d : actcode=RC_OK; break; #if 0 case 0x1c : FBPrintScreen(); break; #endif case '?' : actcode=RC_HELP; break; case 'b' : actcode=RC_BLUE; break; case 'r' : actcode=RC_RED; break; case 'g' : actcode=RC_GREEN; break; case 'y' : actcode=RC_YELLOW; break; case '0' : case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : actcode=*p-48; break; case '-' : actcode=RC_MINUS; break; case '+' : actcode=RC_PLUS; break; case 'q' : actcode=RC_SPKR; FBPause(); break; } } realcode=actcode; } }
void CTable::HandleKeysPressed() { static bool HelpOnScreen = false; static bool MenuOnScreen = false; timeval tv; tv.tv_sec = 0; tv.tv_usec = 60000; select( 0, 0, 0, 0, &tv ); /* 60ms pause */ RcGetActCode(); if( realcode == 0xee ) return; if( true == HelpOnScreen ) { FBCopyImage( 0, 0, WIDTH, HEIGHT, BBGetData() ); #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif HelpOnScreen = false; return; } switch( actcode ) { case RC_0 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ BLOCK ] = true; act_slot = BLOCK; ChangeSelection( ); break; case RC_1 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU1 ] = true; act_slot = TABLEAU1; ChangeSelection( true, false ); break; case RC_2 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU2 ] = true; act_slot = TABLEAU2; ChangeSelection( true, false ); break; case RC_3 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU3 ] = true; act_slot = TABLEAU3; ChangeSelection( true, false ); break; case RC_4 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU4 ] = true; act_slot = TABLEAU4; ChangeSelection( true, false ); break; case RC_5 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU5 ] = true; act_slot = TABLEAU5; ChangeSelection( true, false ); break; case RC_6 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU6 ] = true; act_slot = TABLEAU6; ChangeSelection( true, false ); break; case RC_7 : ChangeSelection( false ); changed[ act_slot ] = true; changed[ TABLEAU7 ] = true; act_slot = TABLEAU7; ChangeSelection( true, false ); break; case RC_8 : break; case RC_9 : break; case RC_RIGHT : this->MoveCursor( 2 ); break; case RC_LEFT : this->MoveCursor( 0 ); break; case RC_UP : this->MoveCursor( 1 ); break; case RC_DOWN : this->MoveCursor( 3 ); break; case RC_OK : this->DoAction(); break; case RC_SPKR : break; case RC_STANDBY : break; case RC_GREEN : break; case RC_YELLOW : FBPrintScreen(); break; case RC_RED : this->Init(); #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif break; case RC_BLUE : Wizard(); #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif break; case RC_PLUS : changed[ act_slot ] = true; ChangeSelection( true, false ); break; case RC_MINUS : changed[ act_slot ] = true; ChangeSelection( false, false ); break; case RC_HELP : this->ShowHelp(); #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif HelpOnScreen = true; break; case RC_SETUP : if( this->Setup() ) this->Init(); FBCopyImage( 0, 0, WIDTH, HEIGHT, BBGetData() ); #if defined(HAVE_SPARK_HARDWARE) || defined(HAVE_DUCKBOX_HARDWARE) FBFlushGrafic(); #endif break; case RC_HOME : break; case RC_PAGE_DOWN : break; case RC_PAGE_UP : break; default: // return; break; } this->Display(); actcode = 0; }