修改好速度档位不能正常切换的问题。

This commit is contained in:
TAO Cheng
2014-03-10 17:55:59 +08:00
parent 684c0c9761
commit ad05ad7437
9 changed files with 396 additions and 118 deletions
@@ -61,7 +61,7 @@ unsigned __stdcall CSO7_Proto::g_EP02_Thread(LPVOID pThis)
} }
case THREAD_RUNNING_STATE2: case THREAD_RUNNING_STATE2:
{ {
//TRACE0("g_hSerialUsbThread processing _write_usb_data_only();\n"); //TRACE0("g_hSerDialUsbThread processing _write_usb_data_only();\n");
_This->_write_usb_data_only(EP_02_CMD_IDX); _This->_write_usb_data_only(EP_02_CMD_IDX);
//TRACE0("g_hSerialUsbThread return from _write_usb_data_only();\n"); //TRACE0("g_hSerialUsbThread return from _write_usb_data_only();\n");
break; break;
@@ -3463,7 +3463,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_X(char SpeedGear)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEX; *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEX;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear; *(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
TRACE1("[MOVE_X]:%d\n",SpeedGear); TRACE1("[MOVE_X]:%d\n",static_cast<int>(SpeedGear));
ep_buff[EP_02_CMD_IDX]._size = 0x03; ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03; ep_buff[EP_81_DATA_IDX]._size = 0x03;
@@ -3484,7 +3484,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_Y(char SpeedGear)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEY; *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEY;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear; *(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
TRACE1("[MOVE_Y]:%d\n",SpeedGear); TRACE1("[MOVE_Y]:%d\n",static_cast<int>(SpeedGear));
ep_buff[EP_02_CMD_IDX]._size = 0x03; ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03; ep_buff[EP_81_DATA_IDX]._size = 0x03;
@@ -3505,7 +3505,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_Z(char SpeedGear)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEZ; *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear; *(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
TRACE1("[MOVE_Z]:%d\n",SpeedGear); TRACE1("[MOVE_Z]:%d\n",static_cast<int>(SpeedGear));
ep_buff[EP_02_CMD_IDX]._size = 0x03; ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03; ep_buff[EP_81_DATA_IDX]._size = 0x03;
@@ -3545,7 +3545,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_STOP_MOVE_XYZ()
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOPA; *(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOPA;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00; *(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00;
TRACE("[STOP_XYZ]"); TRACE("[STOP_XYZ]\n");
ep_buff[EP_02_CMD_IDX]._size = 0x04; ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x04; ep_buff[EP_81_DATA_IDX]._size = 0x04;
@@ -4694,7 +4694,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_XY(char SpeedGearX,char Spe
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=SpeedGearX; *(ep_buff[EP_02_CMD_IDX]._buffer+2)=SpeedGearX;
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=SpeedGearY; *(ep_buff[EP_02_CMD_IDX]._buffer+3)=SpeedGearY;
TRACE2("[MOVE_XY]:X %d;Y %d.\n",SpeedGearX,SpeedGearY); TRACE2("[MOVE_XY]:X %d;Y %d.\n",static_cast<int>(SpeedGearX),static_cast<int>(SpeedGearY));
ep_buff[EP_02_CMD_IDX]._size = 0x04; ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x45; ep_buff[EP_81_DATA_IDX]._size = 0x45;
@@ -8,8 +8,6 @@ CTesaStarE::CTesaStarE(void)
SerialComPort=1; SerialComPort=1;
_bReading=FALSE; _bReading=FALSE;
bEnComm=false; bEnComm=false;
m_TesaStarEAngle[0]=(double)0.0;
m_TesaStarEAngle[1]=(double)0.0;
memset(m_RecvData,0,sizeof(m_RecvData)); memset(m_RecvData,0,sizeof(m_RecvData));
} }
//================================================================== //==================================================================
@@ -20,6 +18,9 @@ CTesaStarE::~CTesaStarE(void)
BOOL CTesaStarE::Initialization(bool _bInitConfig) BOOL CTesaStarE::Initialization(bool _bInitConfig)
{ {
BOOL status(FALSE); BOOL status(FALSE);
m_TesaStarEAngle[0]=0.0;
m_TesaStarEAngle[1]=0.0;
if (_bInitConfig) if (_bInitConfig)
{ {
LoadConfig(); LoadConfig();
@@ -3962,3 +3962,201 @@ Init:Open device succeed .
_start_machine _start_machine
Exit: Exit_SO7Usb Exit: Exit_SO7Usb
Destruct Cso7_Proto. Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
Destruct Cso7_Proto.
@@ -15,13 +15,13 @@ SPEED_BASE_X1=20
SPEED_MAX_X1=20 SPEED_MAX_X1=20
SPEED_START_X1=20 SPEED_START_X1=20
SPEED_FRESH_X1=8 SPEED_FRESH_X1=8
SPEED_SLOW_X1=3.299 SPEED_SLOW_X1=2.000
; ;
SPEED_BASE_X2=16 SPEED_BASE_X2=16
SPEED_MAX_X2=10 SPEED_MAX_X2=10
SPEED_START_X2=12 SPEED_START_X2=12
SPEED_FRESH_X2=10 SPEED_FRESH_X2=10
SPEED_SLOW_X2=2.000 SPEED_SLOW_X2=1.000
; ;
SPEED_BASE_X3=2 SPEED_BASE_X3=2
SPEED_MAX_X3=0 SPEED_MAX_X3=0
@@ -443,13 +443,8 @@ void CSO7_UtilDlg::OnBnClickedButtonStartSo7machine()
//===================================================================== //=====================================================================
void CSO7_UtilDlg::OnBnClickedButtonStopSo7machine() void CSO7_UtilDlg::OnBnClickedButtonStopSo7machine()
{
if(XBoxPlayer->IsConnected())
{ {
XBoxPlayer->XBoxControllerExit(); XBoxPlayer->XBoxControllerExit();
}
CString csPath; CString csPath;
m_pSO7_Proto->GetAppPath(csPath); m_pSO7_Proto->GetAppPath(csPath);
m_pSO7_Proto->Save_SevenOcean_Inifile(csPath+_T("\\Utility_Config.ini")); m_pSO7_Proto->Save_SevenOcean_Inifile(csPath+_T("\\Utility_Config.ini"));
@@ -174,10 +174,10 @@ void CSo7_Option::OnBnClickedOk()
XBoxPlayer = new CXBOXController(1); XBoxPlayer = new CXBOXController(1);
} }
CSO7_UtilDlg* pSO7_UtilDlg=new CSO7_UtilDlg(); CSO7_UtilDlg* pSO7_UtilDlg=new CSO7_UtilDlg();
pSO7_UtilDlg->DoModal(); pSO7_UtilDlg->DoModal();
delete pSO7_UtilDlg; delete pSO7_UtilDlg;
if (XBoxPlayer) if (XBoxPlayer)
{ {
delete XBoxPlayer; delete XBoxPlayer;
@@ -4,10 +4,10 @@
#include "So7_XBoxController.h" #include "So7_XBoxController.h"
#define M_PI 3.14159265358979323846 #define M_PI 3.14159265358979323846
const double XBOX_X_ANGLE=(M_PI / 180.0 * 10.0); const double XBOX_X_ANGLE=(M_PI / 180.0 * 18.0);
const double XBOX_Y_ANGLE=(M_PI / 180.0 * 80.0); const double XBOX_Y_ANGLE=(M_PI / 180.0 * 72.0);
const double XBOX_XY_ANGLE_BEGIN=(M_PI / 180.0 * 35.0); const double XBOX_XY_ANGLE_BEGIN=(M_PI / 180.0 * 20.0);
const double XBOX_XY_ANGLE_END=(M_PI / 180.0 * 55.0); const double XBOX_XY_ANGLE_END=(M_PI / 180.0 * 70.0);
extern CSO7_Proto* m_pSO7_Proto; extern CSO7_Proto* m_pSO7_Proto;
@@ -15,21 +15,19 @@ HANDLE CXBOXController::XBoxhThread = NULL;
HANDLE CXBOXController::XBoxThreadMutex = NULL; HANDLE CXBOXController::XBoxThreadMutex = NULL;
HANDLE CXBOXController::XBoxhTriggerEvent; HANDLE CXBOXController::XBoxhTriggerEvent;
int CXBOXController::XBoxThreadState = XBTHREAD_PAUSED; int CXBOXController::XBoxThreadState = XBTHREAD_PAUSED;
bool CXBOXController::XYWAITSTOP = false;
bool CXBOXController::ZWAITSTOP = false;
static short LX = 0, LY = 0, RX = 0, RY = 0; static short LX(0), LY(0), RX(0), RY(0);
static WORD wBtns = 0; static WORD wBtns(0);
static BYTE TopLightValue = 0; static BYTE TopLightValue(0);
static BYTE BottomLightValue = 0; static BYTE BottomLightValue(0);
static int TopLightBtnDown = 0; static int TopLightBtnDown(0);
static int BottomLightBtnDown = 0; static int BottomLightBtnDown(0);
static char MoveSpeedGear[3]={0}; static INT m_MoveXYZType(0);
static INT m_MoveSpeedGear[3]={0};
CXBOXController::CXBOXController(int playerNumber) CXBOXController::CXBOXController(int playerNumber)
{ {
m_ControllerNum = playerNumber - 1; m_ControllerNum = playerNumber - 1;
m_IsConnected=false;
} }
CXBOXController::~CXBOXController() CXBOXController::~CXBOXController()
@@ -78,6 +76,7 @@ void CXBOXController::XBoxControllerExit(void)
bool CXBOXController::IsConnected() bool CXBOXController::IsConnected()
{ {
m_IsConnected=false;
ZeroMemory(&m_ControllerState, sizeof(XINPUT_STATE)); ZeroMemory(&m_ControllerState, sizeof(XINPUT_STATE));
DWORD Result = XInputGetState(m_ControllerNum, &m_ControllerState); DWORD Result = XInputGetState(m_ControllerNum, &m_ControllerState);
if (Result == ERROR_SUCCESS) if (Result == ERROR_SUCCESS)
@@ -108,114 +107,184 @@ void CXBOXController::Vibrate(int leftVal, int rightVal)
XInputSetState(m_ControllerNum, &Vibration); XInputSetState(m_ControllerNum, &Vibration);
} }
bool CXBOXController::MoveXYZ(int _EMoveType,INT* _SpeedGear)
{
bool rStatus(true);
bool IsSameType(false);
if (m_MoveXYZType==_EMoveType)
{
rStatus=false;
IsSameType=true;
}
switch(_EMoveType)
{
case E_XBOX_STOPXYZ:
{
if (!IsSameType)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ();
}
break;
}
case E_XBOX_MOVE_XL:
case E_XBOX_MOVE_XR:
{
if (_SpeedGear[0]!=m_MoveSpeedGear[0])
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X(static_cast<char>(_SpeedGear[0]));
m_MoveSpeedGear[0]=_SpeedGear[0];
}
break;
}
case E_XBOX_MOVE_YB:
case E_XBOX_MOVE_YF:
{
if (_SpeedGear[1]!=m_MoveSpeedGear[1])
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Y(static_cast<char>(_SpeedGear[1]));
m_MoveSpeedGear[1]=_SpeedGear[1];
}
break;
}
case E_XBOX_MOVE_ZU:
case E_XBOX_MOVE_ZD:
{
if (_SpeedGear[2]!=m_MoveSpeedGear[2])
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z(static_cast<char>(_SpeedGear[2]));
m_MoveSpeedGear[2]=_SpeedGear[2];
}
break;
}
case E_XBOX_MOVE_XLYB:
case E_XBOX_MOVE_XLYF:
case E_XBOX_MOVE_XRYB:
case E_XBOX_MOVE_XRYF:
{
if ((_SpeedGear[0]!=m_MoveSpeedGear[0]) || (_SpeedGear[1]!=m_MoveSpeedGear[1]))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY(static_cast<char>(_SpeedGear[0]),static_cast<char>(_SpeedGear[1]));
m_MoveSpeedGear[0]=_SpeedGear[0];
m_MoveSpeedGear[1]=_SpeedGear[1];
}
break;
}
default:
{
break;
}
}
m_MoveXYZType=_EMoveType;
return rStatus;
}
unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis) unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis)
{ {
CXBOXController* _This = (CXBOXController*)pThis; CXBOXController* _This = (CXBOXController*)pThis;
bool bXYWAITSTOP(false);
bool bZWAITSTOP(false);
INT MoveSpeedGear[3]={0};
for (;;) for (;;)
{ {
if(XBoxThreadState == XBTHREAD_EXIT)
{
ExitThread(0);
}
LX = _This->GetState().Gamepad.sThumbLX; LX = _This->GetState().Gamepad.sThumbLX;
LY = _This->GetState().Gamepad.sThumbLY; LY = _This->GetState().Gamepad.sThumbLY;
RX = _This->GetState().Gamepad.sThumbRX; RX = _This->GetState().Gamepad.sThumbRX;
RY = _This->GetState().Gamepad.sThumbRY; RY = _This->GetState().Gamepad.sThumbRY;
wBtns = _This->GetState().Gamepad.wButtons; wBtns = _This->GetState().Gamepad.wButtons;
//TRACE2("[XBOX]LX:%d LY:%d\n",LX,LY); //TRACE2("[XBOX]LX:%d LY:%d\n",static_cast<int>(LX),static_cast<int>(LY));
//TRACE2("[XBOX]RX:%d RY:%d\n",RX,RY); //TRACE2("[XBOX]RX:%d RY:%d\n",static_cast<int>(RX),static_cast<int>(RY));
//Z Direction //Z Direction
if(LY>128 && abs(LX)<LY/tan(XBOX_Y_ANGLE)) if(LY>128 && abs(LX)<LY/tan(XBOX_Y_ANGLE))
{ {
MoveSpeedGear[2]=static_cast<char>((LY - 128) / 8160 + 1); MoveSpeedGear[0]=0;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z(MoveSpeedGear[2]); MoveSpeedGear[1]=0;
ZWAITSTOP = true; MoveSpeedGear[2]=static_cast<INT>((LY - 128) / 8160 + 1);
_This->MoveXYZ(E_XBOX_MOVE_ZU,MoveSpeedGear);
bZWAITSTOP=true;
} }
else if(LY<128 && abs(LX)<-LY/tan(XBOX_Y_ANGLE)) else if(LY<-128 && abs(LX)<-LY/tan(XBOX_Y_ANGLE))
{ {
MoveSpeedGear[2]=static_cast<char>((LY + 128) / 8160.25 - 1); MoveSpeedGear[0]=0;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z(MoveSpeedGear[2]); MoveSpeedGear[1]=0;
ZWAITSTOP = true; MoveSpeedGear[2]=static_cast<INT>((LY + 128) / 8160.25 - 1);
_This->MoveXYZ(E_XBOX_MOVE_ZD,MoveSpeedGear);
bZWAITSTOP=true;
} }
else if(ZWAITSTOP) else if(bZWAITSTOP)
{ {
m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ(); _This->MoveXYZ(E_XBOX_STOPXYZ,MoveSpeedGear);
ZWAITSTOP = false; bZWAITSTOP=false;
} }
//XY Direction //XY Direction
if(RX<128 && abs(RY)<-RX*tan(XBOX_X_ANGLE)) if(RX<-128 && abs(RY)<-RX*tan(XBOX_X_ANGLE))
{ {
MoveSpeedGear[0]=static_cast<char>((RX + 128) / 8160.25 - 1); MoveSpeedGear[0]=static_cast<INT>((RX + 128) / 8160.25 - 1);
MoveSpeedGear[0]=3; MoveSpeedGear[1]=0;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X(MoveSpeedGear[0]); _This->MoveXYZ(E_XBOX_MOVE_XR,MoveSpeedGear);
XYWAITSTOP = true; bXYWAITSTOP=true;
}
else if(RX<128 && RY>-RX*tan(XBOX_XY_ANGLE_BEGIN) && RY<-RX*tan(XBOX_XY_ANGLE_END))
{
MoveSpeedGear[0]=static_cast<char>((RX + 128) / 8160.25 - 1);
MoveSpeedGear[1]=static_cast<char>((RY - 128) / 8160 + 1);
MoveSpeedGear[0]=3;
MoveSpeedGear[1]=-3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY(MoveSpeedGear[0],MoveSpeedGear[1]);
XYWAITSTOP = true;
}
else if(RY>128 && abs(RX)<RY/tan(XBOX_Y_ANGLE))
{
MoveSpeedGear[1]=static_cast<char>((RY - 128) / 8160 + 1);
MoveSpeedGear[1]=-3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Y(MoveSpeedGear[1]);
XYWAITSTOP = true;
}
else if(RX>128 && RY>RX*tan(XBOX_XY_ANGLE_BEGIN) && RY<RX*tan(XBOX_XY_ANGLE_END))
{
MoveSpeedGear[0]=static_cast<char>((RX - 128) / 8160 + 1);
MoveSpeedGear[1]=static_cast<char>((RY - 128) / 8160 +1);
MoveSpeedGear[0]=-3;
MoveSpeedGear[1]=-3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY(MoveSpeedGear[0],MoveSpeedGear[1]);
XYWAITSTOP = true;
} }
else if(RX>128 && abs(RY)<RX*tan(XBOX_X_ANGLE)) else if(RX>128 && abs(RY)<RX*tan(XBOX_X_ANGLE))
{ {
MoveSpeedGear[0]=static_cast<char>((RX - 128) / 8160 + 1); MoveSpeedGear[0]=static_cast<INT>((RX - 128) / 8160 + 1);
MoveSpeedGear[0]=-3; MoveSpeedGear[1]=0;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X(MoveSpeedGear[0]); _This->MoveXYZ(E_XBOX_MOVE_XL,MoveSpeedGear);
XYWAITSTOP = true; bXYWAITSTOP=true;
}
else if(RY<-128 && abs(RX)<-RY/tan(XBOX_Y_ANGLE))
{
MoveSpeedGear[0]=0;
MoveSpeedGear[1]=static_cast<INT>((RY + 128) / 8160.25 - 1);
_This->MoveXYZ(E_XBOX_MOVE_YF,MoveSpeedGear);
bXYWAITSTOP=true;
}
else if(RY>128 && abs(RX)<RY/tan(XBOX_Y_ANGLE))
{
MoveSpeedGear[0]=0;
MoveSpeedGear[1]=static_cast<INT>((RY - 128) / 8160 + 1);
_This->MoveXYZ(E_XBOX_MOVE_YB,MoveSpeedGear);
bXYWAITSTOP=true;
}
else if(RX<-128 && RY>-RX*tan(XBOX_XY_ANGLE_BEGIN) && RY<-RX*tan(XBOX_XY_ANGLE_END))
{
MoveSpeedGear[0]=static_cast<INT>((RX + 128) / 8160.25 - 1);
MoveSpeedGear[1]=static_cast<INT>((RY - 128) / 8160 + 1);
_This->MoveXYZ(E_XBOX_MOVE_XRYB,MoveSpeedGear);
bXYWAITSTOP=true;
}
else if(RX<-128 && -RY>-RX*tan(XBOX_XY_ANGLE_BEGIN) && -RY<-RX*tan(XBOX_XY_ANGLE_END))
{
MoveSpeedGear[0]=static_cast<INT>((RX + 128) / 8160.25 - 1);
MoveSpeedGear[1]=static_cast<INT>((RY + 128) / 8160.25 - 1);
_This->MoveXYZ(E_XBOX_MOVE_XRYF,MoveSpeedGear);
bXYWAITSTOP=true;
}
else if(RX>128 && RY>RX*tan(XBOX_XY_ANGLE_BEGIN) && RY<RX*tan(XBOX_XY_ANGLE_END))
{
MoveSpeedGear[0]=static_cast<INT>((RX - 128) / 8160 + 1);
MoveSpeedGear[1]=static_cast<INT>((RY - 128) / 8160 +1);
_This->MoveXYZ(E_XBOX_MOVE_XLYB,MoveSpeedGear);
bXYWAITSTOP=true;
} }
else if(RX>128 && -RY>RX*tan(XBOX_XY_ANGLE_BEGIN) && -RY<RX*tan(XBOX_XY_ANGLE_END)) else if(RX>128 && -RY>RX*tan(XBOX_XY_ANGLE_BEGIN) && -RY<RX*tan(XBOX_XY_ANGLE_END))
{ {
MoveSpeedGear[0]=static_cast<char>((RX - 128) / 8160 + 1); MoveSpeedGear[0]=static_cast<INT>((RX - 128) / 8160 + 1);
MoveSpeedGear[1]=static_cast<char>((RY + 128) / 8160.25 - 1); MoveSpeedGear[1]=static_cast<INT>((RY + 128) / 8160.25 - 1);
_This->MoveXYZ(E_XBOX_MOVE_XLYF,MoveSpeedGear);
MoveSpeedGear[0]=-3; bXYWAITSTOP=true;
MoveSpeedGear[1]=3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY(MoveSpeedGear[0],MoveSpeedGear[1]);
XYWAITSTOP = true;
} }
else if(RY<128 && abs(RX)<-RY/tan(XBOX_Y_ANGLE)) else if(bXYWAITSTOP)
{ {
MoveSpeedGear[1]=static_cast<char>((RY + 128) / 8160.25 - 1); _This->MoveXYZ(E_XBOX_STOPXYZ,MoveSpeedGear);
bXYWAITSTOP=false;
MoveSpeedGear[0]=3;
MoveSpeedGear[1]=3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Y(MoveSpeedGear[1]);
XYWAITSTOP = true;
}
else if(RX<128 && -RY>-RX*tan(XBOX_XY_ANGLE_BEGIN) && -RY<-RX*tan(XBOX_XY_ANGLE_END))
{
MoveSpeedGear[0]=static_cast<char>((RX + 128) / 8160.25 - 1);
MoveSpeedGear[1]=static_cast<char>((RY + 128) / 8160.25 - 1);
MoveSpeedGear[0]=3;
MoveSpeedGear[1]=3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY(MoveSpeedGear[0],MoveSpeedGear[1]);
XYWAITSTOP = true;
}
else if(XYWAITSTOP)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ();
XYWAITSTOP = false;
} }
//TopLight //TopLight
@@ -474,13 +543,12 @@ unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis)
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_BACK) if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_BACK)
***************************************************************/ ***************************************************************/
if(XBoxThreadState == XBTHREAD_EXIT || _This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_BACK) if(XBoxThreadState == XBTHREAD_EXIT)
{ {
break; ExitThread(0);
} }
Sleep(200);
Sleep(100); };
}; XBoxThreadState = XBTHREAD_EXIT;
ExitThread(0); ExitThread(0);
} }
@@ -7,6 +7,22 @@
#pragma comment(lib, "XInput.lib") #pragma comment(lib, "XInput.lib")
enum EXBOX_MOVEXYZ_TYPE
{
E_XBOX_STOPXYZ,
E_XBOX_MOVE_XL,
E_XBOX_MOVE_XR,
E_XBOX_MOVE_YB,
E_XBOX_MOVE_YF,
E_XBOX_MOVE_ZU,
E_XBOX_MOVE_ZD,
E_XBOX_MOVE_XLYB,
E_XBOX_MOVE_XLYF,
E_XBOX_MOVE_XRYB,
E_XBOX_MOVE_XRYF,
E_XBOX_MOVE_TOTAL=255
};
class CXBOXController class CXBOXController
{ {
protected: protected:
@@ -14,12 +30,12 @@ protected:
static HANDLE XBoxThreadMutex; static HANDLE XBoxThreadMutex;
static HANDLE XBoxhTriggerEvent; static HANDLE XBoxhTriggerEvent;
static int XBoxThreadState; static int XBoxThreadState;
static bool XYWAITSTOP;
static bool ZWAITSTOP;
XINPUT_STATE m_ControllerState; XINPUT_STATE m_ControllerState;
int m_ControllerNum; int m_ControllerNum;
bool m_IsConnected; bool m_IsConnected;
bool MoveXYZ(int _EMoveType,INT* _SpeedGear);
public: public:
CXBOXController(int playerNumber); CXBOXController(int playerNumber);
~CXBOXController(); ~CXBOXController();