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
|
#ifdef HAS_USBKEY
|
||||||
#include "USBHost_t36.h" // Read this header first for key info
|
#include "USBHost_t36.h" // Read this header first for key info
|
||||||
USBHost myusb;
|
USBHost myusb;
|
||||||
|
//USBHub hub1(myusb);
|
||||||
KeyboardController keyboard1(myusb);
|
KeyboardController keyboard1(myusb);
|
||||||
|
USBHIDParser hid1(myusb);
|
||||||
|
MouseController mouse1(myusb);
|
||||||
#endif
|
#endif
|
||||||
|
static bool mouseDetected = false;
|
||||||
|
static bool keyboardDetected = false;
|
||||||
static uint8_t usbnavpad=0;
|
static uint8_t usbnavpad=0;
|
||||||
|
|
||||||
#ifdef USE_SDFS
|
#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)
|
static void callibrationInit(void)
|
||||||
{
|
{
|
||||||
callibrationOn=true;
|
callibrationOn=true;
|
||||||
|
@ -1387,127 +1538,6 @@ void emu_FileTempWrite(int addr, unsigned char val)
|
||||||
#endif
|
#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)
|
void emu_init(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -144,6 +144,9 @@ extern int emu_SwapJoysticks(int statusOnly);
|
||||||
extern unsigned short emu_DebounceLocalKeys(void);
|
extern unsigned short emu_DebounceLocalKeys(void);
|
||||||
extern int emu_ReadKeys(void);
|
extern int emu_ReadKeys(void);
|
||||||
extern int emu_GetPad(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_ReadAnalogJoyX(int min, int max);
|
||||||
extern int emu_ReadAnalogJoyY(int min, int max);
|
extern int emu_ReadAnalogJoyY(int min, int max);
|
||||||
extern int emu_ReadI2CKeyboard(void);
|
extern int emu_ReadI2CKeyboard(void);
|
||||||
|
|
|
@ -293,9 +293,12 @@ const int i2ckeyConv[] =
|
||||||
|
|
||||||
|
|
||||||
void uae_Input(int bClick) {
|
void uae_Input(int bClick) {
|
||||||
|
buttonstate[0] = 0;
|
||||||
|
buttonstate[2] = 0;
|
||||||
|
|
||||||
hk = emu_ReadI2CKeyboard();
|
hk = emu_ReadI2CKeyboard();
|
||||||
k = emu_ReadKeys();
|
k = emu_ReadKeys();
|
||||||
|
|
||||||
// Toggle keymap + mouse/joystick
|
// Toggle keymap + mouse/joystick
|
||||||
if (bClick & MASK_KEY_USER2) {
|
if (bClick & MASK_KEY_USER2) {
|
||||||
if (isMouse) isMouse = false;
|
if (isMouse) isMouse = false;
|
||||||
|
@ -305,6 +308,29 @@ void uae_Input(int bClick) {
|
||||||
#endif
|
#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
|
// Diskswap in joystick mode
|
||||||
if (bClick & MASK_KEY_USER1) {
|
if (bClick & MASK_KEY_USER1) {
|
||||||
if (!isMouse) disk_swap(df0,df1);
|
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_JOY1_BTN)|| ( k & MASK_JOY2_BTN)) buttonstate[0] = 1;
|
||||||
if (k & MASK_KEY_USER1) buttonstate[2] = 1;
|
if (k & MASK_KEY_USER1) buttonstate[2] = 1;
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue