add USB mouse support to UAE

pull/9/head
jean-marcharvengt 2020-11-03 15:43:05 +01:00
rodzic 43bcf15b37
commit e55ba9e02b
3 zmienionych plików z 181 dodań i 124 usunięć

Wyświetl plik

@ -34,8 +34,13 @@ static const uint16_t * logo = deflogo;
#ifdef HAS_USBKEY
#include "USBHost_t36.h" // Read this header first for key info
USBHost myusb;
//USBHub hub1(myusb);
KeyboardController keyboard1(myusb);
USBHIDParser hid1(myusb);
MouseController mouse1(myusb);
#endif
static bool mouseDetected = false;
static bool keyboardDetected = false;
static uint8_t usbnavpad=0;
#ifdef USE_SDFS
@ -927,6 +932,152 @@ char * menuSelection(void)
int emu_GetMouse(int *x, int *y, int *buts) {
#ifdef HAS_USBKEY
if (mouse1.available()) {
*buts = mouse1.getButtons();
*x = mouse1.getMouseX();
*y = mouse1.getMouseY();
mouse1.mouseDataClear();
mouseDetected = true;
return 1;
}
#endif
return 0;
}
#ifdef HAS_USBKEY
void OnPress(auto key)
{
keyboardDetected = true;
uint8_t keymodifier = keyboard1.getModifiers();
if(keymodifier == 0x40){
// ALTGR Key modifier FR Keyboard
switch (key) {
#ifdef LAYOUT_FRENCH
case 233 : key = '~' ; break;
case 34 : key = '#' ; break;
case 39 : key = '{' ; break;
case 40 : key = '[' ; break;
case 45 : key = '|' ; break;
case 232 : key = '`' ; break;
case 95 : key = 92 ; break;
case 231 : key = '^' ; break;
case 224 : key = '@' ; break;
case 41 : key = ']' ; break;
case 61 : key = '}' ; break;
#endif
#ifdef LAYOUT_FRENCH_BELGIAN
case 38 : key = '|' ; break; //1
case 233 : key = '@' ; break; //2
case 34 : key = '#' ; break; //3
case 167 : key = '^' ; break; //6
case 231 : key = '{' ; break; //9
case 224 : key = '}' ; break; //0
case 36 : key = ']' ; break; //$
case 61 : key = '~' ; break; //=
#endif
}
}
if (menuActive())
{
switch (key)
{
case 217:
usbnavpad |= MASK_JOY2_DOWN;
break;
case 218:
usbnavpad |= MASK_JOY2_UP;
break;
case 216:
usbnavpad |= MASK_JOY2_LEFT;
break;
case 215:
usbnavpad |= MASK_JOY2_RIGHT;
break;
case 10:
usbnavpad |= MASK_JOY2_BTN;
break;
}
}
else
{
emu_KeyboardOnDown(keymodifier, key);
}
}
void OnRelease(int key)
{
keyboardDetected = true;
uint8_t keymodifier = keyboard1.getModifiers();
if(keymodifier == 0x40){
// ALTGR Key modifier FR Keyboard
switch (key) {
#ifdef LAYOUT_FRENCH
case 233 : key = '~' ; break;
case 34 : key = '#' ; break;
case 39 : key = '{' ; break;
case 40 : key = '[' ; break;
case 45 : key = '|' ; break;
case 232 : key = '`' ; break;
case 95 : key = 92 ; break;
case 231 : key = '^' ; break;
case 224 : key = '@' ; break;
case 41 : key = ']' ; break;
case 61 : key = '}' ; break;
#endif
#ifdef LAYOUT_FRENCH_BELGIAN
case 38 : key = '|' ; break; //1
case 233 : key = '@' ; break; //2
case 34 : key = '#' ; break; //3
case 167 : key = '^' ; break; //6
case 231 : key = '{' ; break; //9
case 224 : key = '}' ; break; //0
case 36 : key = ']' ; break; //$
case 61 : key = '~' ; break; //=
#endif
}
}
if (menuActive())
{
switch (key)
{
case 217:
usbnavpad &= ~MASK_JOY2_DOWN;
break;
case 218:
usbnavpad &= ~MASK_JOY2_UP;
break;
case 216:
usbnavpad &= ~MASK_JOY2_LEFT;
break;
case 215:
usbnavpad &= ~MASK_JOY2_RIGHT;
break;
case 10:
usbnavpad &= ~MASK_JOY2_BTN;
break;
}
}
else
{
emu_KeyboardOnUp(keymodifier, key);
}
}
#endif
int emu_MouseDetected(void) {
return (mouseDetected?1:0);
}
int emu_KeyboardDetected(void) {
return (keyboardDetected?1:0);
}
static void callibrationInit(void)
{
callibrationOn=true;
@ -1387,127 +1538,6 @@ void emu_FileTempWrite(int addr, unsigned char val)
#endif
}
#ifdef HAS_USBKEY
void OnPress(auto key)
{
uint8_t keymodifier = keyboard1.getModifiers();
if(keymodifier == 0x40){
// ALTGR Key modifier FR Keyboard
switch (key) {
#ifdef LAYOUT_FRENCH
case 233 : key = '~' ; break;
case 34 : key = '#' ; break;
case 39 : key = '{' ; break;
case 40 : key = '[' ; break;
case 45 : key = '|' ; break;
case 232 : key = '`' ; break;
case 95 : key = 92 ; break;
case 231 : key = '^' ; break;
case 224 : key = '@' ; break;
case 41 : key = ']' ; break;
case 61 : key = '}' ; break;
#endif
#ifdef LAYOUT_FRENCH_BELGIAN
case 38 : key = '|' ; break; //1
case 233 : key = '@' ; break; //2
case 34 : key = '#' ; break; //3
case 167 : key = '^' ; break; //6
case 231 : key = '{' ; break; //9
case 224 : key = '}' ; break; //0
case 36 : key = ']' ; break; //$
case 61 : key = '~' ; break; //=
#endif
}
}
if (menuActive())
{
switch (key)
{
case 217:
usbnavpad |= MASK_JOY2_DOWN;
break;
case 218:
usbnavpad |= MASK_JOY2_UP;
break;
case 216:
usbnavpad |= MASK_JOY2_LEFT;
break;
case 215:
usbnavpad |= MASK_JOY2_RIGHT;
break;
case 10:
usbnavpad |= MASK_JOY2_BTN;
break;
}
}
else
{
emu_KeyboardOnDown(keymodifier, key);
}
}
void OnRelease(int key)
{
uint8_t keymodifier = keyboard1.getModifiers();
if(keymodifier == 0x40){
// ALTGR Key modifier FR Keyboard
switch (key) {
#ifdef LAYOUT_FRENCH
case 233 : key = '~' ; break;
case 34 : key = '#' ; break;
case 39 : key = '{' ; break;
case 40 : key = '[' ; break;
case 45 : key = '|' ; break;
case 232 : key = '`' ; break;
case 95 : key = 92 ; break;
case 231 : key = '^' ; break;
case 224 : key = '@' ; break;
case 41 : key = ']' ; break;
case 61 : key = '}' ; break;
#endif
#ifdef LAYOUT_FRENCH_BELGIAN
case 38 : key = '|' ; break; //1
case 233 : key = '@' ; break; //2
case 34 : key = '#' ; break; //3
case 167 : key = '^' ; break; //6
case 231 : key = '{' ; break; //9
case 224 : key = '}' ; break; //0
case 36 : key = ']' ; break; //$
case 61 : key = '~' ; break; //=
#endif
}
}
if (menuActive())
{
switch (key)
{
case 217:
usbnavpad &= ~MASK_JOY2_DOWN;
break;
case 218:
usbnavpad &= ~MASK_JOY2_UP;
break;
case 216:
usbnavpad &= ~MASK_JOY2_LEFT;
break;
case 215:
usbnavpad &= ~MASK_JOY2_RIGHT;
break;
case 10:
usbnavpad &= ~MASK_JOY2_BTN;
break;
}
}
else
{
emu_KeyboardOnUp(keymodifier, key);
}
}
#endif
void emu_init(void)
{

Wyświetl plik

@ -144,6 +144,9 @@ extern int emu_SwapJoysticks(int statusOnly);
extern unsigned short emu_DebounceLocalKeys(void);
extern int emu_ReadKeys(void);
extern int emu_GetPad(void);
extern int emu_GetMouse(int *x, int *y, int *buts);
extern int emu_MouseDetected(void);
extern int emu_KeyboardDetected(void);
extern int emu_ReadAnalogJoyX(int min, int max);
extern int emu_ReadAnalogJoyY(int min, int max);
extern int emu_ReadI2CKeyboard(void);

Wyświetl plik

@ -293,9 +293,12 @@ const int i2ckeyConv[] =
void uae_Input(int bClick) {
buttonstate[0] = 0;
buttonstate[2] = 0;
hk = emu_ReadI2CKeyboard();
k = emu_ReadKeys();
// Toggle keymap + mouse/joystick
if (bClick & MASK_KEY_USER2) {
if (isMouse) isMouse = false;
@ -305,6 +308,29 @@ void uae_Input(int bClick) {
#endif
}
// force joystick mode if mouse detected
if (emu_MouseDetected() ) isMouse = false;
int buts,dx,dy;
int mouseEvent = emu_GetMouse(&dx,&dy,&buts);
if (mouseEvent){
lastmx += dx;
if ( lastmx > 640 ) {
lastmx = 639;
}
else if ( lastmx < 0 ) {
lastmx = 0;
}
lastmy += dy;
if ( lastmy > 480 ) {
lastmy = 399;
}
else if ( lastmy < 0 ) {
lastmy = 0;
}
if (buts & 0x1) buttonstate[0] = 1;
if (buts & 0x2) buttonstate[2] = 1;
}
// Diskswap in joystick mode
if (bClick & MASK_KEY_USER1) {
if (!isMouse) disk_swap(df0,df1);
@ -351,8 +377,6 @@ void uae_Input(int bClick) {
}
}
buttonstate[0] = 0;
buttonstate[2] = 0;
if ( (k & MASK_JOY1_BTN)|| ( k & MASK_JOY2_BTN)) buttonstate[0] = 1;
if (k & MASK_KEY_USER1) buttonstate[2] = 1;
}