- cleaned up libsicksaxis code a little to make it easier for me to understand what's going on.

This commit is contained in:
Fledge68 2020-05-27 15:18:38 -05:00
parent 64cf5a6858
commit bca9764f4b
4 changed files with 46 additions and 46 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 MiB

After

Width:  |  Height:  |  Size: 4.1 MiB

View File

@ -140,6 +140,7 @@ void CMenu::ButtonsPressed()
gc_btnsPressed = 0; gc_btnsPressed = 0;
/* ds3 controller */ /* ds3 controller */
/* libsicksaxis uses a thread to do scan pads so we need to use a delay here to give that thread time to read the controller */
if(CheckTime()) if(CheckTime())
{ {
ds3_btnsPressed = DS3_ButtonsDown(); ds3_btnsPressed = DS3_ButtonsDown();
@ -165,7 +166,7 @@ void CMenu::ButtonsPressed()
void CMenu::ButtonsHeld() void CMenu::ButtonsHeld()
{ {
/* wii, gc, drc, and wupc controllers = no ds3 not sure why */ /* wii, gc, drc, and wupc controllers = no ds3 because libsicksaxis does not have a function to check for buttons held */
gc_btnsHeld = 0; gc_btnsHeld = 0;
gc_btnsHeld |= wiidrc_to_pad(WiiDRC_ButtonsHeld()); gc_btnsHeld |= wiidrc_to_pad(WiiDRC_ButtonsHeld());
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
@ -273,7 +274,7 @@ void CMenu::LeftStick()
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{ {
if(left_stick_mag[chan] > 0.15 || abs(PAD_StickX(chan)) > 20 || abs(PAD_StickY(chan)) > 20 || abs(WUPC_lStickX(chan)) > 160 || abs(WUPC_lStickY(chan)) > 160 if(left_stick_mag[chan] > 0.15 || abs(PAD_StickX(chan)) > 20 || abs(PAD_StickY(chan)) > 20 || abs(WUPC_lStickX(chan)) > 160 || abs(WUPC_lStickY(chan)) > 160
|| (chan == 0 && (abs(DS3_StickX()) > 20 || abs(DS3_StickY()) > 20)) || (chan == 0 && (abs(WiiDRC_lStickX()) > 20 || abs(WiiDRC_lStickY()) > 20))) || (chan == 0 && (abs(DS3_LStickX()) > 20 || abs(DS3_LStickY()) > 20)) || (chan == 0 && (abs(WiiDRC_lStickX()) > 20 || abs(WiiDRC_lStickY()) > 20)))
{ {
m_show_pointer[chan] = true; m_show_pointer[chan] = true;
if(LEFT_STICK_LEFT) if(LEFT_STICK_LEFT)
@ -281,7 +282,7 @@ void CMenu::LeftStick()
speed = (u8)(left_stick_mag[chan] * 10.00); speed = (u8)(left_stick_mag[chan] * 10.00);
pSpeed = (u8)(((int)abs(PAD_StickX(chan))/10)|((int)abs(WUPC_lStickX(chan))/80)|((int)abs(WiiDRC_lStickX())/8)); pSpeed = (u8)(((int)abs(PAD_StickX(chan))/10)|((int)abs(WUPC_lStickX(chan))/80)|((int)abs(WiiDRC_lStickX())/8));
if(chan == 0) if(chan == 0)
pSpeed |= (int)abs(DS3_StickX()/10); pSpeed |= (int)abs(DS3_LStickX()/10);
if(stickPointer_x[chan] > m_cursor[chan].width()/2) if(stickPointer_x[chan] > m_cursor[chan].width()/2)
stickPointer_x[chan] = stickPointer_x[chan]-speed-pSpeed; stickPointer_x[chan] = stickPointer_x[chan]-speed-pSpeed;
pointerhidedelay[chan] = 150; pointerhidedelay[chan] = 150;
@ -291,7 +292,7 @@ void CMenu::LeftStick()
speed = (u8)(left_stick_mag[chan] * 10.00); speed = (u8)(left_stick_mag[chan] * 10.00);
pSpeed = (u8)(((int)abs(PAD_StickY(chan))/10)|((int)abs(WUPC_lStickY(chan))/80)|((int)abs(WiiDRC_lStickY())/8)); pSpeed = (u8)(((int)abs(PAD_StickY(chan))/10)|((int)abs(WUPC_lStickY(chan))/80)|((int)abs(WiiDRC_lStickY())/8));
if(chan == 0) if(chan == 0)
pSpeed |= (int)abs(DS3_StickY()/10); pSpeed |= (int)abs(DS3_LStickY()/10);
if(stickPointer_y[chan] < (m_vid.height() + (m_cursor[chan].height()/2))) if(stickPointer_y[chan] < (m_vid.height() + (m_cursor[chan].height()/2)))
stickPointer_y[chan] = stickPointer_y[chan]+speed+pSpeed; stickPointer_y[chan] = stickPointer_y[chan]+speed+pSpeed;
pointerhidedelay[chan] = 150; pointerhidedelay[chan] = 150;
@ -301,7 +302,7 @@ void CMenu::LeftStick()
speed = (u8)(left_stick_mag[chan] * 10.00); speed = (u8)(left_stick_mag[chan] * 10.00);
pSpeed = (u8)(((int)abs(PAD_StickX(chan))/10)|((int)abs(WUPC_lStickX(chan))/80)|((int)abs(WiiDRC_lStickX())/8)); pSpeed = (u8)(((int)abs(PAD_StickX(chan))/10)|((int)abs(WUPC_lStickX(chan))/80)|((int)abs(WiiDRC_lStickX())/8));
if(chan == 0) if(chan == 0)
pSpeed |= (int)abs(DS3_StickX()/10); pSpeed |= (int)abs(DS3_LStickX()/10);
if(stickPointer_x[chan] < (m_vid.width() + (m_cursor[chan].width()/2))) if(stickPointer_x[chan] < (m_vid.width() + (m_cursor[chan].width()/2)))
stickPointer_x[chan] = stickPointer_x[chan]+speed+pSpeed; stickPointer_x[chan] = stickPointer_x[chan]+speed+pSpeed;
pointerhidedelay[chan] = 150; pointerhidedelay[chan] = 150;
@ -311,7 +312,7 @@ void CMenu::LeftStick()
speed = (u8)(left_stick_mag[chan] * 10.00); speed = (u8)(left_stick_mag[chan] * 10.00);
pSpeed = (u8)(((int)abs(PAD_StickY(chan))/10)|((int)abs(WUPC_lStickY(chan))/80)|((int)abs(WiiDRC_lStickY())/8)); pSpeed = (u8)(((int)abs(PAD_StickY(chan))/10)|((int)abs(WUPC_lStickY(chan))/80)|((int)abs(WiiDRC_lStickY())/8));
if(chan == 0) if(chan == 0)
pSpeed |= (int)abs(DS3_StickY()/10); pSpeed |= (int)abs(DS3_LStickY()/10);
if(stickPointer_y[chan] > m_cursor[chan].height()/2) if(stickPointer_y[chan] > m_cursor[chan].height()/2)
stickPointer_y[chan] = stickPointer_y[chan]-speed-pSpeed; stickPointer_y[chan] = stickPointer_y[chan]-speed-pSpeed;
pointerhidedelay[chan] = 150; pointerhidedelay[chan] = 150;
@ -496,7 +497,7 @@ bool CMenu::gc_btnRepeat(s64 btn)
bool CMenu::lStick_Up(void) bool CMenu::lStick_Up(void)
{ {
if(WiiDRC_lStickY() > 20 || DS3_StickY() < -20) if(WiiDRC_lStickY() > 20 || DS3_LStickY() < -20)
return true; return true;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{ {
@ -508,7 +509,7 @@ bool CMenu::lStick_Up(void)
bool CMenu::lStick_Right(void) bool CMenu::lStick_Right(void)
{ {
if(WiiDRC_lStickX() > 20 || DS3_StickX() > 20) if(WiiDRC_lStickX() > 20 || DS3_LStickX() > 20)
return true; return true;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{ {
@ -520,7 +521,7 @@ bool CMenu::lStick_Right(void)
bool CMenu::lStick_Down(void) bool CMenu::lStick_Down(void)
{ {
if(WiiDRC_lStickY() < -20 || DS3_StickY() > 20) if(WiiDRC_lStickY() < -20 || DS3_LStickY() > 20)
return true; return true;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{ {
@ -532,7 +533,7 @@ bool CMenu::lStick_Down(void)
bool CMenu::lStick_Left(void) bool CMenu::lStick_Left(void)
{ {
if(WiiDRC_lStickX() < -20 || DS3_StickX() < -20) if(WiiDRC_lStickX() < -20 || DS3_LStickX() < -20)
return true; return true;
for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--)
{ {
@ -543,6 +544,7 @@ bool CMenu::lStick_Left(void)
} }
/* right stick movements are only used in menu_main and menu_game to move the coverflow up, down, left, right just like the d-pad */ /* right stick movements are only used in menu_main and menu_game to move the coverflow up, down, left, right just like the d-pad */
/* DS3 right stick is not checked */
bool CMenu::rStick_Up(void) bool CMenu::rStick_Up(void)
{ {
if(WiiDRC_rStickY() > 30) if(WiiDRC_rStickY() > 30)

View File

@ -5,45 +5,41 @@
#include <sicksaxis.h> #include <sicksaxis.h>
#include "sicksaxis-wrapper.h" #include "sicksaxis-wrapper.h"
static DS3 first; static DS3 Controller1;
static bool psPressed = false; static bool psPressed = false;
bool DS3_Init() bool DS3_Init()// does not check for and connect controller
{ {
USB_Initialize(); USB_Initialize();
ss_init();// add controller to ios heap
if (ss_init() < 0) ss_initialize(&Controller1);// set all values to initial states
{
return false;
}
ss_initialize(&first);
return true; return true;
} }
void DS3_Rumble() void DS3_Rumble()
{ {
if (first.connected && psPressed) //if (DS3_Connected())
if (Controller1.connected && psPressed)
{ {
ss_set_rumble(&first, 2, 255, 2, 255); ss_set_rumble(&Controller1, 2, 255, 2, 255);
} }
} }
void DS3_Cleanup() void DS3_Cleanup()
{ {
psPressed = false; psPressed = false;
ss_close(&first); ss_close(&Controller1);
USB_Deinitialize(); USB_Deinitialize();
} }
unsigned int DS3_ButtonsDown() unsigned int DS3_ButtonsDown()
{ {
if (!ss_is_connected(&first) || !psPressed) //if (!DS3_Connected())
if (!ss_is_connected(&Controller1) || !psPressed)
return 0; return 0;
DS3 *controller; DS3 *controller;
controller = &first; controller = &Controller1;
unsigned int pressed = 0; unsigned int pressed = 0;
@ -68,46 +64,48 @@ unsigned int DS3_ButtonsDown()
return pressed; return pressed;
} }
bool DS3_Connected() bool DS3_Connected()// not used but could be used in the functions ButtonsDown() and Rumble() above
{ {
return first.connected > 0 && psPressed; return Controller1.connected > 0 && psPressed;
} }
/* does not scan pads. simply connects with the controller and starts a thread to read the controller. */
/* on later calls it simply checks if the PS button on the controller has been pressed and lights up the LED */
void DS3_ScanPads() void DS3_ScanPads()
{ {
if (!ss_is_connected(&first)) if (!ss_is_connected(&Controller1))
{ {
psPressed = false; psPressed = false;
ss_initialize(&first); ss_initialize(&Controller1);
if (ss_open(&first) > 0) if (ss_open(&Controller1) > 0)
{ {
ss_start_reading(&first); ss_start_reading(&Controller1);
ss_set_led(&first, 0); ss_set_led(&Controller1, 0);
} }
} }
else if (first.pad.buttons.PS && !psPressed) else if (Controller1.pad.buttons.PS && !psPressed)
{ {
psPressed = true; psPressed = true;
ss_set_led(&first, 1); ss_set_led(&Controller1, 1);
} }
} }
int DS3_StickX() int DS3_LStickX()
{ {
return psPressed? first.pad.left_analog.x - 128 : 0; return psPressed? Controller1.pad.left_analog.x - 128 : 0;
} }
int DS3_SubStickX() int DS3_RStickX()
{ {
return psPressed? first.pad.right_analog.x - 128 : 0; return psPressed? Controller1.pad.right_analog.x - 128 : 0;
} }
int DS3_StickY() int DS3_LStickY()
{ {
return psPressed? first.pad.left_analog.y - 128 : 0; return psPressed? Controller1.pad.left_analog.y - 128 : 0;
} }
int DS3_SubStickY() int DS3_RStickY()
{ {
return psPressed? first.pad.right_analog.y - 128 : 0; return psPressed? Controller1.pad.right_analog.y - 128 : 0;
} }

View File

@ -39,10 +39,10 @@ void DS3_Rumble();
void DS3_Cleanup(); void DS3_Cleanup();
unsigned int DS3_ButtonsDown(); unsigned int DS3_ButtonsDown();
void DS3_ScanPads(); void DS3_ScanPads();
int DS3_StickX(); int DS3_LStickX();
int DS3_SubStickX(); int DS3_RStickX();
int DS3_StickY(); int DS3_LStickY();
int DS3_SubStickY(); int DS3_RStickY();
#ifdef __cplusplus #ifdef __cplusplus
} }