diff --git a/src/inputevents.def b/src/inputevents.def index 1ecd01ad..673389be 100644 --- a/src/inputevents.def +++ b/src/inputevents.def @@ -176,6 +176,7 @@ DEFEVENT(KEY_TAB,_T("Tab"),AM_K,0,0,AK_TAB) DEFEVENT(KEY_CTRL,_T("CTRL"),AM_K,0,0,AK_CTRL) DEFEVENT(KEY_CAPS_LOCK,_T("Caps Lock"),AM_K,0,0,AK_CAPSLOCK) DEFEVENT(KEY_SHIFT_LEFT,_T("Left Shift"),AM_K,0,0,AK_LSH) +DEFEVENT(KEY_LTGT,_T("Lower Greater"),AM_K,0,0,AK_LTGT) DEFEVENT(KEY_ALT_LEFT,_T("Left Alt"),AM_K,0,0,AK_LALT) DEFEVENT(KEY_AMIGA_LEFT,_T("Left Amiga"),AM_K,0,0,AK_LAMI) DEFEVENT(KEY_AMIGA_RIGHT,_T("Right Amiga"),AM_K,0,0,AK_RAMI) diff --git a/src/main.cpp b/src/main.cpp index e647440a..a7816dee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -515,6 +515,8 @@ static int real_main2 (int argc, TCHAR **argv) SDL_Init (SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE); #endif #endif + + keyboard_settrans(); if (restart_config[0]) { default_prefs (&currprefs, 0); diff --git a/src/od-pandora/keyboard.cpp b/src/od-pandora/keyboard.cpp index 65a94c95..7f2ee60d 100644 --- a/src/od-pandora/keyboard.cpp +++ b/src/od-pandora/keyboard.cpp @@ -15,6 +15,240 @@ #include +static struct uae_input_device_kbr_default keytrans_amiga_x11[] = { + + { 9 , INPUTEVENT_KEY_ESC}, + { 67, INPUTEVENT_KEY_F1}, + { 68, INPUTEVENT_KEY_F2}, + { 69, INPUTEVENT_KEY_F3}, + { 70, INPUTEVENT_KEY_F4}, + { 71, INPUTEVENT_KEY_F5}, + { 72, INPUTEVENT_KEY_F6}, + { 73, INPUTEVENT_KEY_F7}, + { 74, INPUTEVENT_KEY_F8}, + { 75, INPUTEVENT_KEY_F9}, + { 76, INPUTEVENT_KEY_F10}, + //{ 95, INPUTEVENT_KEY_F11}, + //{ 96, INPUTEVENT_KEY_F12}, + + { 49, INPUTEVENT_KEY_BACKQUOTE}, + + { 10, INPUTEVENT_KEY_1}, + { 11, INPUTEVENT_KEY_2}, + { 12, INPUTEVENT_KEY_3}, + { 13, INPUTEVENT_KEY_4}, + { 14, INPUTEVENT_KEY_5}, + { 15, INPUTEVENT_KEY_6}, + { 16, INPUTEVENT_KEY_7}, + { 17, INPUTEVENT_KEY_8}, + { 18, INPUTEVENT_KEY_9}, + { 19, INPUTEVENT_KEY_0}, + { 20, INPUTEVENT_KEY_SUB}, + { 21, INPUTEVENT_KEY_EQUALS}, + { 22, INPUTEVENT_KEY_BACKSLASH}, + + { 23, INPUTEVENT_KEY_TAB}, + { 24, INPUTEVENT_KEY_Q}, + { 25, INPUTEVENT_KEY_W}, + { 26, INPUTEVENT_KEY_E}, + { 27, INPUTEVENT_KEY_R}, + { 28, INPUTEVENT_KEY_T}, + { 29, INPUTEVENT_KEY_Y}, + { 30, INPUTEVENT_KEY_U}, + { 31, INPUTEVENT_KEY_I}, + { 32, INPUTEVENT_KEY_O}, + { 33, INPUTEVENT_KEY_P}, + { 34, INPUTEVENT_KEY_LEFTBRACKET}, + { 35, INPUTEVENT_KEY_RIGHTBRACKET}, + { 36, INPUTEVENT_KEY_RETURN}, + + { 66, INPUTEVENT_KEY_CAPS_LOCK}, + { 38, INPUTEVENT_KEY_A}, + { 39, INPUTEVENT_KEY_S}, + { 40, INPUTEVENT_KEY_D}, + { 41, INPUTEVENT_KEY_F}, + { 42, INPUTEVENT_KEY_G}, + { 43, INPUTEVENT_KEY_H}, + { 44, INPUTEVENT_KEY_J}, + { 45, INPUTEVENT_KEY_K}, + { 46, INPUTEVENT_KEY_L}, + { 47, INPUTEVENT_KEY_SEMICOLON}, + { 48, INPUTEVENT_KEY_SINGLEQUOTE}, + { 51, INPUTEVENT_KEY_BACKSLASH}, + + { 50, INPUTEVENT_KEY_SHIFT_LEFT}, + { 94, INPUTEVENT_KEY_LTGT}, + { 52, INPUTEVENT_KEY_Z}, + { 53, INPUTEVENT_KEY_X}, + { 54, INPUTEVENT_KEY_C}, + { 55, INPUTEVENT_KEY_V}, + { 56, INPUTEVENT_KEY_B}, + { 57, INPUTEVENT_KEY_N}, + { 58, INPUTEVENT_KEY_M}, + { 59, INPUTEVENT_KEY_COMMA}, + { 60, INPUTEVENT_KEY_PERIOD}, + { 61, INPUTEVENT_KEY_DIV}, + { 62, INPUTEVENT_KEY_SHIFT_RIGHT}, + + { 37, INPUTEVENT_KEY_CTRL}, + { 64, INPUTEVENT_KEY_ALT_LEFT}, + { 65, INPUTEVENT_KEY_SPACE}, + + { 108, INPUTEVENT_KEY_ALT_RIGHT}, + + //{ 78, INPUTEVENT_KEY_SCROLLOCK}, + + //{ 77, INPUTEVENT_KEY_NUMLOCK}, + { 106, INPUTEVENT_KEY_NP_DIV}, + { 63, INPUTEVENT_KEY_NP_MUL}, + { 82, INPUTEVENT_KEY_NP_SUB}, + + { 79, INPUTEVENT_KEY_NP_7}, + { 80, INPUTEVENT_KEY_NP_8}, + { 81, INPUTEVENT_KEY_NP_9}, + { 86, INPUTEVENT_KEY_NP_ADD}, + + { 83, INPUTEVENT_KEY_NP_4}, + { 84, INPUTEVENT_KEY_NP_5}, + { 85, INPUTEVENT_KEY_NP_6}, + + { 87, INPUTEVENT_KEY_NP_1}, + { 88, INPUTEVENT_KEY_NP_2}, + { 89, INPUTEVENT_KEY_NP_3}, + { 104, INPUTEVENT_KEY_ENTER}, // The ENT from keypad.. + + { 90, INPUTEVENT_KEY_NP_0}, + { 91, INPUTEVENT_KEY_PERIOD}, + + { 111, INPUTEVENT_KEY_CURSOR_UP}, + { 113, INPUTEVENT_KEY_CURSOR_LEFT}, + { 116, INPUTEVENT_KEY_CURSOR_DOWN}, + { 114, INPUTEVENT_KEY_CURSOR_RIGHT}, + + { 133, INPUTEVENT_KEY_AMIGA_LEFT}, // Left amiga mapped to left Windows + { 134, INPUTEVENT_KEY_AMIGA_RIGHT}, // Right amiga mapped to right windows key. + { 135, INPUTEVENT_KEY_AMIGA_RIGHT} // Right amiga mapped to Menu key. + }; + + + +static struct uae_input_device_kbr_default keytrans_amiga_fbcon[] = { + + { 9 +8 , INPUTEVENT_KEY_ESC}, + { 67 +8 , INPUTEVENT_KEY_F1}, + { 68 +8 , INPUTEVENT_KEY_F2}, + { 69 +8 , INPUTEVENT_KEY_F3}, + { 70 +8 , INPUTEVENT_KEY_F4}, + { 71 +8 , INPUTEVENT_KEY_F5}, + { 72 +8 , INPUTEVENT_KEY_F6}, + { 73 +8 , INPUTEVENT_KEY_F7}, + { 74 +8 , INPUTEVENT_KEY_F8}, + { 75 +8 , INPUTEVENT_KEY_F9}, + { 76 +8 , INPUTEVENT_KEY_F10}, + // { 95 +8 , INPUTEVENT_KEY_F11}, + // { 96 +8 , INPUTEVENT_KEY_F12}, + + { 49 +8 , INPUTEVENT_KEY_BACKQUOTE}, + + { 10 +8 , INPUTEVENT_KEY_1}, + { 11 +8 , INPUTEVENT_KEY_2}, + { 12 +8 , INPUTEVENT_KEY_3}, + { 13 +8 , INPUTEVENT_KEY_4}, + { 14 +8 , INPUTEVENT_KEY_5}, + { 15 +8 , INPUTEVENT_KEY_6}, + { 16 +8 , INPUTEVENT_KEY_7}, + { 17 +8 , INPUTEVENT_KEY_8}, + { 18 +8 , INPUTEVENT_KEY_9}, + { 19 +8 , INPUTEVENT_KEY_0}, + { 20 +8 , INPUTEVENT_KEY_SUB}, + { 21 +8 , INPUTEVENT_KEY_EQUALS}, + { 22 +8 , INPUTEVENT_KEY_BACKSLASH}, + + { 23 +8 , INPUTEVENT_KEY_TAB}, + { 24 +8 , INPUTEVENT_KEY_Q}, + { 25 +8 , INPUTEVENT_KEY_W}, + { 26 +8 , INPUTEVENT_KEY_E}, + { 27 +8 , INPUTEVENT_KEY_R}, + { 28 +8 , INPUTEVENT_KEY_T}, + { 29 +8 , INPUTEVENT_KEY_Y}, + { 30 +8 , INPUTEVENT_KEY_U}, + { 31 +8 , INPUTEVENT_KEY_I}, + { 32 +8 , INPUTEVENT_KEY_O}, + { 33 +8 , INPUTEVENT_KEY_P}, + { 34 +8 , INPUTEVENT_KEY_LEFTBRACKET}, + { 35 +8 , INPUTEVENT_KEY_RIGHTBRACKET}, + { 36 +8 , INPUTEVENT_KEY_RETURN}, + + { 66 +8 , INPUTEVENT_KEY_CAPS_LOCK}, + { 38 +8 , INPUTEVENT_KEY_A}, + { 39 +8 , INPUTEVENT_KEY_S}, + { 40 +8 , INPUTEVENT_KEY_D}, + { 41 +8 , INPUTEVENT_KEY_F}, + { 42 +8 , INPUTEVENT_KEY_G}, + { 43 +8 , INPUTEVENT_KEY_H}, + { 44 +8 , INPUTEVENT_KEY_J}, + { 45 +8 , INPUTEVENT_KEY_K}, + { 46 +8 , INPUTEVENT_KEY_L}, + { 47 +8 , INPUTEVENT_KEY_SEMICOLON}, + { 48 +8 , INPUTEVENT_KEY_SINGLEQUOTE}, + { 51 +8 , INPUTEVENT_KEY_BACKSLASH}, + + { 50 +8 , INPUTEVENT_KEY_SHIFT_LEFT}, + { 94 +8 , INPUTEVENT_KEY_LTGT}, + { 52 +8 , INPUTEVENT_KEY_Z}, + { 53 +8 , INPUTEVENT_KEY_X}, + { 54 +8 , INPUTEVENT_KEY_C}, + { 55 +8 , INPUTEVENT_KEY_V}, + { 56 +8 , INPUTEVENT_KEY_B}, + { 57 +8 , INPUTEVENT_KEY_N}, + { 58 +8 , INPUTEVENT_KEY_M}, + { 59 +8 , INPUTEVENT_KEY_COMMA}, + { 60 +8 , INPUTEVENT_KEY_PERIOD}, + { 61 +8 , INPUTEVENT_KEY_DIV}, + { 62 +8 , INPUTEVENT_KEY_SHIFT_RIGHT}, + + { 37 +8 , INPUTEVENT_KEY_CTRL}, + { 64 +8 , INPUTEVENT_KEY_ALT_LEFT}, + { 65 +8 , INPUTEVENT_KEY_SPACE}, + + { 108 +8 , INPUTEVENT_KEY_ALT_RIGHT}, + + //{ 78 +8 , INPUTEVENT_KEY_SCROLLOCK}, + + //{ 77 +8 , INPUTEVENT_KEY_NUMLOCK}, + { 106 +8 , INPUTEVENT_KEY_NP_DIV}, + { 63 +8 , INPUTEVENT_KEY_NP_MUL}, + { 82 +8 , INPUTEVENT_KEY_NP_SUB}, + + { 79 +8 , INPUTEVENT_KEY_NP_7}, + { 80 +8 , INPUTEVENT_KEY_NP_8}, + { 81 +8 , INPUTEVENT_KEY_NP_9}, + { 86 +8 , INPUTEVENT_KEY_NP_ADD}, + + { 83 +8 , INPUTEVENT_KEY_NP_4}, + { 84 +8 , INPUTEVENT_KEY_NP_5}, + { 85 +8 , INPUTEVENT_KEY_NP_6}, + + { 87 +8 , INPUTEVENT_KEY_NP_1}, + { 88 +8 , INPUTEVENT_KEY_NP_2}, + { 89 +8 , INPUTEVENT_KEY_NP_3}, + { 104 +8 , INPUTEVENT_KEY_ENTER}, // The ENT from keypad.. + + { 90 +8 , INPUTEVENT_KEY_NP_0}, + { 91 +8 , INPUTEVENT_KEY_PERIOD}, + + { 111 +8, INPUTEVENT_KEY_CURSOR_UP}, + { 113 +8, INPUTEVENT_KEY_CURSOR_LEFT}, + { 116 +8, INPUTEVENT_KEY_CURSOR_DOWN}, + { 114 +8, INPUTEVENT_KEY_CURSOR_RIGHT}, + + + { 133 +8 , INPUTEVENT_KEY_AMIGA_LEFT}, // Left amiga mapped to left Windows + { 134 +8 , INPUTEVENT_KEY_AMIGA_RIGHT}, // Right amiga mapped to right windows key. + { 135 +8 , INPUTEVENT_KEY_AMIGA_RIGHT} // Right amiga mapped to Menu key. + }; + + static struct uae_input_device_kbr_default keytrans_amiga[] = { { SDLK_a, INPUTEVENT_KEY_A }, @@ -83,6 +317,20 @@ static struct uae_input_device_kbr_default *keytrans[] = { keytrans_amiga }; + +static struct uae_input_device_kbr_default *keytrans_x11[] = { + keytrans_amiga_x11, + keytrans_amiga_x11, + keytrans_amiga_x11 +}; + + +static struct uae_input_device_kbr_default *keytrans_fbcon[] = { + keytrans_amiga_fbcon, + keytrans_amiga_fbcon, + keytrans_amiga_fbcon +}; + static int kb_none[] = { -1 }; static int *kbmaps[] = { kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none }; @@ -90,12 +338,30 @@ static int *kbmaps[] = { kb_none, kb_none, kb_none, kb_none, kb_none, void keyboard_settrans (void) { - inputdevice_setkeytranslation (keytrans, kbmaps); + char vid_drv_name[32]; + // get display type... + SDL_VideoDriverName(vid_drv_name, sizeof(vid_drv_name)); + if (strcmp(vid_drv_name, "x11") == 0) + { + printf("Will use keycode from x11 mapping.\n"); + inputdevice_setkeytranslation (keytrans_x11, kbmaps); + } else if (strcmp(vid_drv_name, "fbcon") == 0) + { + printf("Will use keycode from fbcon mapping.\n"); + inputdevice_setkeytranslation (keytrans_fbcon, kbmaps); + } else + { + printf("Unknown keycode to use, will use keysym\n"); + inputdevice_setkeytranslation (keytrans, kbmaps); + } } int translate_pandora_keys(int symbol, int *modifier) { +#ifndef PANDORA_SPECIFIC + return 0; +#endif switch(symbol) { case SDLK_UP: diff --git a/src/od-pandora/pandora.cpp b/src/od-pandora/pandora.cpp index 28e2c720..39c13631 100644 --- a/src/od-pandora/pandora.cpp +++ b/src/od-pandora/pandora.cpp @@ -834,7 +834,7 @@ int main (int argc, char *argv[]) alloc_AmigaMem(); RescanROMs(); - keyboard_settrans(); + //keyboard_settrans(); real_main (argc, argv); ClearAvailableROMList(); @@ -921,7 +921,11 @@ int handle_msgpump (void) inputdevice_do_keyboard(AK_LSH, 0); inputdevice_do_keyboard(keycode, 1); } else { +#ifdef RASPBERRY + inputdevice_translatekeycode(0, rEvent.key.keysym.scancode, 1); +#else inputdevice_translatekeycode(0, rEvent.key.keysym.sym, 1); +#endif } break; } @@ -966,7 +970,11 @@ int handle_msgpump (void) if(modifier == KMOD_SHIFT) inputdevice_do_keyboard(AK_LSH, 0); } else { +#ifdef RASPBERRY + inputdevice_translatekeycode(0, rEvent.key.keysym.scancode, 0); +#else inputdevice_translatekeycode(0, rEvent.key.keysym.sym, 0); +#endif } break; } diff --git a/src/sd-sdl/sound_sdl_new.cpp b/src/sd-sdl/sound_sdl_new.cpp index 5cf38c6e..5bd062a0 100644 --- a/src/sd-sdl/sound_sdl_new.cpp +++ b/src/sd-sdl/sound_sdl_new.cpp @@ -51,7 +51,6 @@ static int cdrdcnt = 0; #ifdef NO_SOUND - void finish_sound_buffer (void) { } int setup_sound (void) { sound_available = 0; return 0; } @@ -145,7 +144,7 @@ static void sound_thread_mixer(void *ud, Uint8 *stream, int len) //if((cnt%SOUND_BUFFERS_COUNT) == (wrcnt%SOUND_BUFFERS_COUNT)) //printf("Error: Both consumer and writer use same buffer\n"); - cdrdcnt = cdwrcnt; + //cdrdcnt = cdwrcnt; cnt++; #ifdef SOUND_USE_SEMAPHORES sem_post(&callback_sem); @@ -277,7 +276,7 @@ void finish_cdaudio_buffer (void) { cdwrcnt++; cdbufpt = render_cdbuff = cdaudio_buffer[cdwrcnt & (CDAUDIO_BUFFERS - 1)]; - finish_cdbuff = cdbufpt + CDAUDIO_BUFFER_LEN; + finish_cdbuff = cdbufpt + CDAUDIO_BUFFER_LEN * 2; audio_activate(); }