diff --git a/README.md b/README.md index 22cd78e0..99be3836 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # Changes in forked version + - New target platform: Pi 3 - Optimizations for Pi 3 added - Pi 3 is now the default target if no Platform is specified - Added support for custom functions assignable to keyboard LEDs (e.g. HD activity) - Code formatting and cleanup +- FullHD (1080p) resolution supported in Picasso96 mode. - Pi Zero / Pi 1 version now has full Picasso96 support. - Removed Pandora specific keyboard shortcuts which caused crashes - Loading the Configuration file now respects the input settings diff --git a/src/od-pandora/pandora.cpp b/src/od-pandora/pandora.cpp index e20cf9f5..f1f1fd99 100644 --- a/src/od-pandora/pandora.cpp +++ b/src/od-pandora/pandora.cpp @@ -880,6 +880,27 @@ int handle_msgpump (void) inputdevice_add_inputcode (AKS_ENTERGUI, 1); switch(rEvent.key.keysym.sym) { + #ifdef CAPSLOCK_DEBIAN_WORKAROUND + case SDLK_CAPSLOCK: // capslock + // Treat CAPSLOCK as a toggle. If on, set off and vice/versa + ioctl(0, KDGKBLED, &kbd_flags); + ioctl(0, KDGETLED, &kbd_led_status); + if ((kbd_flags & 07) & LED_CAP) + { + // On, so turn off + kbd_led_status &= ~LED_CAP; + kbd_flags &= ~LED_CAP; + inputdevice_do_keyboard(AK_CAPSLOCK, 0); + } else { + // Off, so turn on + kbd_led_status |= LED_CAP; + kbd_flags |= LED_CAP; + inputdevice_do_keyboard(AK_CAPSLOCK, 1); + } + ioctl(0, KDSETLED, kbd_led_status); + ioctl(0, KDSKBLED, kbd_flags); + break; + #endif case SDLK_LSHIFT: // Shift key inputdevice_do_keyboard(AK_LSH, 1); @@ -931,14 +952,6 @@ int handle_msgpump (void) inputdevice_translatekeycode(0, rEvent.key.keysym.scancode, 1); } -#ifdef CAPSLOCK_DEBIAN_WORKAROUND - if (rEvent.key.keysym.sym == SDLK_CAPSLOCK) - { - ioctl(0, KDGETLED, &kbd_led_status); - kbd_led_status |= LED_CAP; - ioctl(0, KDSETLED, kbd_led_status); - } -#endif break; } break; @@ -946,6 +959,27 @@ int handle_msgpump (void) case SDL_KEYUP: switch(rEvent.key.keysym.sym) { + #ifdef CAPSLOCK_DEBIAN_WORKAROUND + case SDLK_CAPSLOCK: // capslock + // Treat CAPSLOCK as a toggle. If on, set off and vice/versa + ioctl(0, KDGKBLED, &kbd_flags); + ioctl(0, KDGETLED, &kbd_led_status); + if ((kbd_flags & 07) & LED_CAP) + { + // On, so turn off + kbd_led_status &= ~LED_CAP; + kbd_flags &= ~LED_CAP; + inputdevice_do_keyboard(AK_CAPSLOCK, 0); + } else { + // Off, so turn on + kbd_led_status |= LED_CAP; + kbd_flags |= LED_CAP; + inputdevice_do_keyboard(AK_CAPSLOCK, 1); + } + ioctl(0, KDSETLED, kbd_led_status); + ioctl(0, KDSKBLED, kbd_flags); + break; + #endif case SDLK_LSHIFT: // Shift key inputdevice_do_keyboard(AK_LSH, 0); @@ -993,14 +1027,6 @@ int handle_msgpump (void) else inputdevice_translatekeycode(0, rEvent.key.keysym.scancode, 0); } -#ifdef CAPSLOCK_DEBIAN_WORKAROUND - if (rEvent.key.keysym.sym == SDLK_CAPSLOCK) - { - ioctl(0, KDGETLED, &kbd_led_status); - kbd_led_status &= ~LED_CAP; - ioctl(0, KDSETLED, kbd_led_status); - } -#endif break; } break; diff --git a/src/od-pandora/pandora_gui.cpp b/src/od-pandora/pandora_gui.cpp index 5b0c3144..b08ba057 100644 --- a/src/od-pandora/pandora_gui.cpp +++ b/src/od-pandora/pandora_gui.cpp @@ -614,92 +614,60 @@ void gui_disk_image_change(int unitnum, const char *name, bool writeprotected) { } -void gui_led(int led, int on) +void gui_led (int led, int on) { #ifdef RASPBERRY - unsigned long kbd_led_status; - - // Check current prefs/ update if changed - if (currprefs.kbd_led_num != changed_prefs.kbd_led_num) currprefs.kbd_led_num = changed_prefs.kbd_led_num; - if (currprefs.kbd_led_scr != changed_prefs.kbd_led_scr) currprefs.kbd_led_scr = changed_prefs.kbd_led_scr; - - ioctl(0, KDGETLED, &kbd_led_status); - - // Handle floppy led status - if (led == LED_DF0 || led == LED_DF1 || led == LED_DF2 || led == LED_DF3) - { - if (currprefs.kbd_led_num == led || currprefs.kbd_led_num == LED_DFs) - { - if (on) kbd_led_status |= LED_NUM; - else kbd_led_status &= ~LED_NUM; - } - if (currprefs.kbd_led_scr == led || currprefs.kbd_led_scr == LED_DFs) - { - if (on) kbd_led_status |= LED_SCR; - else kbd_led_status &= ~LED_SCR; - } - } - else - // Handle power, hd/cd led status - { - if (currprefs.kbd_led_num == led) - { - if (on) kbd_led_status |= LED_NUM; - else kbd_led_status &= ~LED_NUM; - } - if (currprefs.kbd_led_scr == led) - { - if (on) kbd_led_status |= LED_SCR; - else kbd_led_status &= ~LED_SCR; - } - } - ioctl(0, KDSETLED, kbd_led_status); + #define LED_ALL -1 // Define for all LEDs + + unsigned long kbd_led_status; + + // Check current prefs/ update if changed + if (currprefs.kbd_led_num != changed_prefs.kbd_led_num) currprefs.kbd_led_num = changed_prefs.kbd_led_num; + if (currprefs.kbd_led_scr != changed_prefs.kbd_led_scr) currprefs.kbd_led_scr = changed_prefs.kbd_led_scr; + if (currprefs.kbd_led_cap != changed_prefs.kbd_led_cap) currprefs.kbd_led_cap = changed_prefs.kbd_led_cap; + + ioctl(0, KDGETLED, &kbd_led_status); + + // Handle floppy led status + if (led == LED_DF0 || led == LED_DF1 || led == LED_DF2 || led == LED_DF3) + { + if (currprefs.kbd_led_num == led || currprefs.kbd_led_num == LED_DFs) + { + if (on) kbd_led_status |= LED_NUM; else kbd_led_status &= ~LED_NUM; + } + if (currprefs.kbd_led_scr == led || currprefs.kbd_led_scr == LED_DFs) + { + if (on) kbd_led_status |= LED_SCR; else kbd_led_status &= ~LED_SCR; + } + } + + // Handle power, hd/cd led status + if (led == LED_POWER || led == LED_HD || led == LED_CD) + { + if (currprefs.kbd_led_num == led) + { + if (on) kbd_led_status |= LED_NUM; else kbd_led_status &= ~LED_NUM; + } + if (currprefs.kbd_led_scr == led) + { + if (on) kbd_led_status |= LED_SCR; else kbd_led_status &= ~LED_SCR; + } + } + + // Handle all LEDs off + if (led == LED_ALL) { + kbd_led_status &= ~LED_NUM; + kbd_led_status &= ~LED_SCR; + } + ioctl(0, KDSETLED, kbd_led_status); #endif } -void gui_flicker_led(int led, int unitnum, int status) +void gui_flicker_led (int led, int unitnum, int status) { - static int hd_resetcounter; - - switch (led) - { - case -1: // Reset HD and CD - gui_data.hd = 0; - break; - - case LED_POWER: - if (status == 0) - gui_led(LED_POWER, 0); - else - gui_led(LED_POWER, 1); - break; - - case LED_CD: - if (status == 0) - gui_led(LED_CD, 0); - else - gui_led(LED_CD, 1); - break; - - case LED_HD: - if (status == 0) - { - hd_resetcounter--; - if (hd_resetcounter > 0) - return; #ifdef RASPBERRY - // HD LED off - gui_led(LED_HD, 0); + gui_led(led, status); #endif - } -#ifdef RASPBERRY - // HD LED on - else gui_led(LED_HD, 1); -#endif - gui_data.hd = status; - hd_resetcounter = 2; - break; - } }