Added console detection code

Cleanup of commented code.
Added fd variable to hold file descriptor for the console (/dev/tty).
Modified ioctl() calls to use fd instead of the hardcoded "0".
This commit is contained in:
Dimitris Panokostas 2016-09-13 00:40:34 +02:00
parent 909604663b
commit 8a20344198
5 changed files with 40 additions and 158 deletions

View file

@ -12,7 +12,8 @@
#define KEYCODE_FBCON 2
extern char keyboard_type;
extern void init_keyboard(void);
extern void init_keyboard(void);
extern int fd; /* File descriptor for console (/dev/tty/) */
/* First, two dummies */
#define AK_mousestuff 0x100

View file

@ -623,7 +623,7 @@ void virtualdevice_init (void)
static int real_main2 (int argc, TCHAR **argv)
{
printf("Amiberry v2.0 build 2016-09-11\n");
printf("Amiberry v2.0 build 2016-09-12\n");
#ifdef PANDORA_SPECIFIC
SDL_Init(SDL_INIT_NOPARACHUTE | SDL_INIT_VIDEO);
#else
@ -695,6 +695,7 @@ static int real_main2 (int argc, TCHAR **argv)
memset (&gui_data, 0, sizeof gui_data);
gui_data.cd = -1;
gui_data.hd = -1;
// gui_data.powerled = 1;
#ifdef PICASSO96
picasso_reset ();
@ -733,7 +734,6 @@ static int real_main2 (int argc, TCHAR **argv)
}
currprefs.produce_sound = 0;
}
gui_flicker_led(LED_POWER, 0, 1);
start_program ();
}
return 0;

View file

@ -100,27 +100,9 @@ public:
#ifdef RASPBERRY
else if (actionEvent.getSource() == cboKBDLed_num)
changed_prefs.kbd_led_num = cboKBDLed_num->getSelected();
// if (cboKBDLed_num->getSelected() == 0) changed_prefs.kbd_led_num = -1; // Nothing
// if (cboKBDLed_num->getSelected() == 7) changed_prefs.kbd_led_num = 5; // HD
// if (cboKBDLed_num->getSelected() == 6) changed_prefs.kbd_led_num = -2; // Any DFs
// if (cboKBDLed_num->getSelected() >= 1 && cboKBDLed_num->getSelected() <= 4) changed_prefs.kbd_led_num = cboKBDLed_num->getSelected() - 1; // Specific DF#
// else if (actionEvent.getSource() == cboKBDLed_cap)
// {
// if (cboKBDLed_cap->getSelected() == 0) changed_prefs.kbd_led_cap = -1;
// if (cboKBDLed_cap->getSelected() == 7) changed_prefs.kbd_led_cap = 5;
// if (cboKBDLed_cap->getSelected() == 6) changed_prefs.kbd_led_cap = -2;
// if (cboKBDLed_cap->getSelected() >= 1 && cboKBDLed_cap->getSelected() <= 4) changed_prefs.kbd_led_cap = cboKBDLed_cap->getSelected() - 1;
// }
else if (actionEvent.getSource() == cboKBDLed_scr)
changed_prefs.kbd_led_scr = cboKBDLed_scr->getSelected();
// if (cboKBDLed_scr->getSelected() == 0) changed_prefs.kbd_led_scr = -1;
// if (cboKBDLed_scr->getSelected() == 7) changed_prefs.kbd_led_scr = 5;
// if (cboKBDLed_scr->getSelected() == 6) changed_prefs.kbd_led_scr = -2;
// if (cboKBDLed_scr->getSelected() >= 1 && cboKBDLed_scr->getSelected() <= 4) changed_prefs.kbd_led_scr = cboKBDLed_scr->getSelected() - 1;
#endif
}
};
@ -262,20 +244,5 @@ void RefreshPanelMisc(void)
#ifdef RASPBERRY
cboKBDLed_num->setSelected(changed_prefs.kbd_led_num);
cboKBDLed_scr->setSelected(changed_prefs.kbd_led_scr);
// if (changed_prefs.kbd_led_num == -1) cboKBDLed_num->setSelected(0);
// if (changed_prefs.kbd_led_num == -2) cboKBDLed_num->setSelected(6);
// if (changed_prefs.kbd_led_num == 5) cboKBDLed_num->setSelected(7);
// if (changed_prefs.kbd_led_num >= 1 && changed_prefs.kbd_led_num <= 4) cboKBDLed_num->setSelected(changed_prefs.kbd_led_num + 1);
// if (changed_prefs.kbd_led_cap == -1) cboKBDLed_cap->setSelected(0);
// if (changed_prefs.kbd_led_cap == -2) cboKBDLed_cap->setSelected(6);
// if (changed_prefs.kbd_led_cap == 5) cboKBDLed_cap->setSelected(7);
// if (changed_prefs.kbd_led_cap >= 1 && changed_prefs.kbd_led_cap <= 4) cboKBDLed_cap->setSelected(changed_prefs.kbd_led_cap + 1);
// if (changed_prefs.kbd_led_scr == -1) cboKBDLed_scr->setSelected(0);
// if (changed_prefs.kbd_led_scr == -2) cboKBDLed_scr->setSelected(6);
// if (changed_prefs.kbd_led_scr == 5) cboKBDLed_scr->setSelected(7);
// if (changed_prefs.kbd_led_scr >= 1 && changed_prefs.kbd_led_scr <= 4) cboKBDLed_scr->setSelected(changed_prefs.kbd_led_scr + 1);
#endif
}

View file

@ -8,6 +8,7 @@
#include <algorithm>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <asm/sigcontext.h>
@ -57,13 +58,20 @@ int customControlMap[SDLK_LAST];
char start_path_data[MAX_DPATH];
char currentDir[MAX_DPATH];
#ifdef CAPSLOCK_DEBIAN_WORKAROUND
#include <linux/kd.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
unsigned long kbd_led_status;
char kbd_flags;
#endif
int fd; /* File descriptor for console (/dev/tty/) */
static char config_path[MAX_DPATH];
static char rom_path[MAX_DPATH];
static char rp9_path[MAX_DPATH];
@ -780,7 +788,14 @@ uae_u32 emulib_target_getcpurate (uae_u32 v, uae_u32 *low)
int main (int argc, char *argv[])
{
struct sigaction action;
if ((fd = open("/dev/tty", O_NOCTTY)) == -1)
{
printf("Error getting /dev/tty, got %d\n", fd);
// return fd;
}
close(fd);
// printf("Debug: Got /dev/tty as %d\n", fd);
defaultCpuSpeed = getDefaultCpuSpeed();
// Get startup path
@ -810,24 +825,25 @@ int main (int argc, char *argv[])
#ifdef CAPSLOCK_DEBIAN_WORKAROUND
// set capslock state based upon current "real" state
ioctl(0, KDGKBLED, &kbd_flags);
ioctl(0, KDGETLED, &kbd_led_status);
ioctl(fd, KDGKBLED, &kbd_flags);
ioctl(fd, KDGETLED, &kbd_led_status);
if ((kbd_flags & 07) & LED_CAP)
{
// record capslock pressed
// printf("Caps lock was pressed");
kbd_led_status |= LED_CAP;
inputdevice_do_keyboard(AK_CAPSLOCK, 1);
}
else
{
// record capslock as not pressed
// printf("Caps lock was NOT pressed");
kbd_led_status &= ~LED_CAP;
inputdevice_do_keyboard(AK_CAPSLOCK, 0);
}
ioctl(0, KDSETLED, kbd_led_status);
ioctl(fd, KDSETLED, kbd_led_status);
#endif
//keyboard_settrans();
real_main (argc, argv);
ClearAvailableROMList();
@ -853,6 +869,7 @@ int handle_msgpump (void)
SDL_Event rEvent;
int keycode;
int modifier;
int fd; /* File descriptor for console (/dev/tty/) */
if(delayed_mousebutton)
{
@ -931,9 +948,9 @@ int handle_msgpump (void)
#ifdef CAPSLOCK_DEBIAN_WORKAROUND
if (rEvent.key.keysym.sym == SDLK_CAPSLOCK)
{
ioctl(0, KDGETLED, &kbd_led_status);
ioctl(fd, KDGETLED, &kbd_led_status);
kbd_led_status |= LED_CAP;
ioctl(0, KDSETLED, kbd_led_status);
ioctl(fd, KDSETLED, kbd_led_status);
}
#endif
break;
@ -993,9 +1010,9 @@ int handle_msgpump (void)
#ifdef CAPSLOCK_DEBIAN_WORKAROUND
if (rEvent.key.keysym.sym == SDLK_CAPSLOCK)
{
ioctl(0, KDGETLED, &kbd_led_status);
ioctl(fd, KDGETLED, &kbd_led_status);
kbd_led_status &= ~LED_CAP;
ioctl(0, KDSETLED, kbd_led_status);
ioctl(fd, KDSETLED, kbd_led_status);
}
#endif
break;

View file

@ -36,11 +36,17 @@
#ifdef RASPBERRY
#include <linux/kd.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#endif //RASPBERRY
int emulating = 0;
extern int screen_is_picasso;
extern int fd; /* File descriptor for console (/dev/tty/) */
struct gui_msg
{
@ -604,120 +610,10 @@ void moveVertical(int value)
void gui_handle_events(void)
{
//int i;
Uint8 *keystate = SDL_GetKeyState(NULL);
/*int triggerL = keystate[SDLK_RSHIFT];
int triggerR = keystate[SDLK_RCTRL];*/
if (keystate[SDLK_LCTRL] && keystate[SDLK_LSUPER] && (keystate[SDLK_RSUPER] || keystate[SDLK_MENU]))
uae_reset(0, 1);
// L + R
//if (triggerL && triggerR)
//{
// //up
// if (keystate[SDLK_UP])
// moveVertical(1);
// //down
// else if (keystate[SDLK_DOWN])
// moveVertical(-1);
// //1
// else if (keystate[SDLK_1])
// {
// changed_prefs.gfx_size.height = amigaheight_values[0];
// update_display(&changed_prefs);
// }
// //2
// else if (keystate[SDLK_2])
// {
// changed_prefs.gfx_size.height = amigaheight_values[1];
// update_display(&changed_prefs);
// }
// //3
// else if (keystate[SDLK_3])
// {
// changed_prefs.gfx_size.height = amigaheight_values[2];
// update_display(&changed_prefs);
// }
// //4
// else if (keystate[SDLK_4])
// {
// changed_prefs.gfx_size.height = amigaheight_values[3];
// update_display(&changed_prefs);
// }
// //5
// else if (keystate[SDLK_5])
// {
// changed_prefs.gfx_size.height = amigaheight_values[4];
// update_display(&changed_prefs);
// }
// //6
// else if (keystate[SDLK_6])
// {
// changed_prefs.gfx_size.height = amigaheight_values[5];
// update_display(&changed_prefs);
// }
// //9
// else if (keystate[SDLK_9])
// {
// for (i = 0; i < AMIGAHEIGHT_COUNT; ++i)
// {
// if (currprefs.gfx_size.height == amigaheight_values[i])
// {
// if (i > 0)
// changed_prefs.gfx_size.height = amigaheight_values[i - 1];
// else
// changed_prefs.gfx_size.height = amigaheight_values[AMIGAHEIGHT_COUNT - 1];
// break;
// }
// }
// update_display(&changed_prefs);
// }
// //0
// else if (keystate[SDLK_0])
// {
// for (i = 0; i < AMIGAHEIGHT_COUNT; ++i)
// {
// if (currprefs.gfx_size.height == amigaheight_values[i])
// {
// if (i < AMIGAHEIGHT_COUNT - 1)
// changed_prefs.gfx_size.height = amigaheight_values[i + 1];
// else
// changed_prefs.gfx_size.height = amigaheight_values[0];
// break;
// }
// }
// update_display(&changed_prefs);
// }
//else if (keystate[SDLK_w])
//{
// // Change width
// for (i = 0; i < AMIGAWIDTH_COUNT; ++i)
// {
// if (currprefs.gfx_size.width == amigawidth_values[i])
// {
// if (i < AMIGAWIDTH_COUNT - 1)
// changed_prefs.gfx_size.width = amigawidth_values[i + 1];
// else
// changed_prefs.gfx_size.width = amigawidth_values[0];
// break;
// }
// }
// update_display(&changed_prefs);
//}
//// r
//else if (keystate[SDLK_r])
//{
// // Change resolution (lores/hires)
// if (currprefs.gfx_size.width > 600)
// changed_prefs.gfx_size.width = currprefs.gfx_size.width / 2;
// else
// changed_prefs.gfx_size.width = currprefs.gfx_size.width * 2;
// update_display(&changed_prefs);
//}
//}
}
void gui_disk_image_change(int unitnum, const char *name, bool writeprotected)
@ -733,7 +629,8 @@ void gui_led(int led, int on)
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);
// printf("Debug: About to get KB LED status, using fd: %d\n", fd);
ioctl(fd, KDGETLED, &kbd_led_status);
// Handle floppy led status
if (led == LED_DF0 || led == LED_DF1 || led == LED_DF2 || led == LED_DF3)
@ -751,7 +648,6 @@ void gui_led(int led, int on)
}
else
// Handle power, hd/cd led status
// if (led == LED_POWER || led == LED_HD || led == LED_CD)
{
if (currprefs.kbd_led_num == led)
{
@ -764,7 +660,8 @@ void gui_led(int led, int on)
else kbd_led_status &= ~LED_SCR;
}
}
ioctl(0, KDSETLED, kbd_led_status);
// printf("Debug: About to set KB LED status, using fd: %d\n", fd);
ioctl(fd, KDSETLED, kbd_led_status);
#endif
}