Merge branch 'master' into sdl2

This commit is contained in:
Dimitris Panokostas 2016-10-01 10:53:12 +02:00
commit ca03dea1ab
3 changed files with 90 additions and 94 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;
}
}