kopia lustrzana https://github.com/Jean-MarcHarvengt/MCUME
add USB mouse support to UAE
rodzic
43bcf15b37
commit
e55ba9e02b
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue