Remove bug。

This commit is contained in:
TAO Cheng
2014-03-10 12:19:35 +08:00
parent 50542c4435
commit 684c0c9761
9 changed files with 243 additions and 111 deletions
@@ -39,11 +39,11 @@ unsigned __stdcall CSO7_Proto::g_EP02_Thread(LPVOID pThis)
CSO7_Proto* _This = (CSO7_Proto*)pThis;
for (;;)
{
TRACE0("g_hEP02_Thread in loop set.\n");
//TRACE0("g_hEP02_Thread in loop set.\n");
if (g_hEP02_Thread_State == THREAD_EXIT)
ExitThread(0);
WaitForSingleObject(ep_buff[EP_02_CMD_IDX]._event,INFINITE);
TRACE0("g_hEP02_Thread obtained event.\n");
//TRACE0("g_hEP02_Thread obtained event.\n");
switch (g_hEP02_Thread_State)
{
case THREAD_EXIT:
@@ -54,16 +54,16 @@ unsigned __stdcall CSO7_Proto::g_EP02_Thread(LPVOID pThis)
break;
case THREAD_RUNNING_STATE1:
{
TRACE0("g_hEP02_Thread calling _send_usb_cmd. EP_S07_02; \n");
//TRACE0("g_hEP02_Thread calling _send_usb_cmd. EP_S07_02; \n");
_This->_send_usb_cmd(EP_02_CMD_IDX);
TRACE0("g_hEP02_Thread return _send_usb_cmd. EP_S07_02; \n");
//TRACE0("g_hEP02_Thread return _send_usb_cmd. EP_S07_02; \n");
break;
}
case THREAD_RUNNING_STATE2:
{
TRACE0("g_hSerialUsbThread processing _write_usb_data_only();\n");
//TRACE0("g_hSerialUsbThread processing _write_usb_data_only();\n");
_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;
}
default:
@@ -82,11 +82,11 @@ unsigned __stdcall CSO7_Proto::g_EP8x_Thread(LPVOID pThis)
CSO7_Proto* _This = (CSO7_Proto*)pThis;
for (;;)
{
TRACE0("g_hEP8x_Thread_State in loop set.\n");
//TRACE0("g_hEP8x_Thread_State in loop set.\n");
if (g_hEP8x_Thread_State == THREAD_EXIT)
ExitThread(0);
WaitForSingleObject(ep_buff[EP_82_DATA_IDX]._event, INFINITE);
TRACE0("g_hEP8x_Thread_State obtained event.\n");
//TRACE0("g_hEP8x_Thread_State obtained event.\n");
switch (g_hEP8x_Thread_State)
{
case THREAD_EXIT:
@@ -288,8 +288,7 @@ void CSO7_Proto::_process_rcv_transfer_data(int iEP)
break;
};
}
TRACE0("_process_rcv_transfer_data() : Update EP_82_DATA_IDX status.\r\n");
//TRACE0("_process_rcv_transfer_data() : Update EP_82_DATA_IDX status.\r\n");
break;
case EP_02_CMD_IDX :
TRACE0("_process_rcv_transfer_data() : Update EP_02_CMD_IDX.\r\n");
@@ -2833,14 +2832,14 @@ SSI_STATUS_MOTION CSO7_Proto::Exit_SO7Usb()
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::_do_single_threaded_usb_comm(int iEP_Base)
{
TRACE1("=====_do_single_threaded_usb_comm(iEP) g_hEP01_Thread_Event. %x\n", iEP_Base);
//TRACE1("=====_do_single_threaded_usb_comm(iEP) g_hEP01_Thread_Event. %x\n", iEP_Base);
while ((ep_buff[iEP_Base]._hProtoPending == TRUE) || (ep_buff[iEP_Base+1]._hProtoPending == TRUE))
{
ASSERT(0);
Sleep(3);
}
ep_buff[iEP_Base]._hProtoPending = ep_buff[iEP_Base+1]._hProtoPending = TRUE;
TRACE1("=====_do_single_threaded_usb_comm(iEP_Base) SetEvent(g_hEP01_Thread_Event): %X \r\n", ep_buff[iEP_Base]._save_send_cmd);
//TRACE1("=====_do_single_threaded_usb_comm(iEP_Base) SetEvent(g_hEP01_Thread_Event): %X \r\n", ep_buff[iEP_Base]._save_send_cmd);
if (iEP_Base == EP_01_CMD_IDX)
SetEvent(ep_buff[EP_82_DATA_IDX]._event);
else
@@ -2849,7 +2848,7 @@ SSI_STATUS_MOTION CSO7_Proto::_do_single_threaded_usb_comm(int iEP_Base)
{
Sleep(3);
}
TRACE1("=====_do_single_threaded_usb_comm(iEP) g_hProtoDoneEvents. %x\n", iEP_Base);
//TRACE1("=====_do_single_threaded_usb_comm(iEP) g_hProtoDoneEvents. %x\n", iEP_Base);
return SSI_STATUS_MOTION_NORMAL;
}
@@ -2892,7 +2891,7 @@ SSI_STATUS_MOTION CSO7_Proto::_read_data_8x(int iEP_Base)
}
if (iEP_Base == EP_82_DATA_IDX)
{
TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size);
//TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size);
int _ret;
_ret = usb_bulk_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 5000);
if (_ret > 0)
@@ -2910,7 +2909,7 @@ SSI_STATUS_MOTION CSO7_Proto::_read_data_8x(int iEP_Base)
}
else
{
TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size);
//TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size);
int _ret;
_ret = usb_interrupt_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 20);
if (_ret > 0)
@@ -2945,7 +2944,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_usb_cmd(int iEP_Base)
ep_buff[iEP_Base]._save_send_cmd0 = ep_buff[iEP_Base]._buffer[1];
ep_buff[iEP_Base]._save_send_cmd1 = ep_buff[iEP_Base]._buffer[2];
TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]);
//TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]);
_ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50);
if (_ret < 0)
@@ -2977,7 +2976,7 @@ SSI_STATUS_MOTION CSO7_Proto::_write_usb_data_only(int iEP_Base)
ep_buff[iEP_Base]._save_send_cmd0 = ep_buff[iEP_Base]._buffer[1];
ep_buff[iEP_Base]._save_send_cmd1 = ep_buff[iEP_Base]._buffer[2];
TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]);
//TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]);
_ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50);
if (_ret < 0)
@@ -3464,6 +3463,8 @@ 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+2) = SpeedGear;
TRACE1("[MOVE_X]:%d\n",SpeedGear);
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
@@ -3483,6 +3484,8 @@ 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+2) = SpeedGear;
TRACE1("[MOVE_Y]:%d\n",SpeedGear);
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
@@ -3502,6 +3505,8 @@ 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+2) = SpeedGear;
TRACE1("[MOVE_Z]:%d\n",SpeedGear);
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
@@ -3539,6 +3544,8 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_STOP_MOVE_XYZ()
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOPA;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00;
TRACE("[STOP_XYZ]");
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x04;
@@ -4687,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+3)=SpeedGearY;
TRACE2("--MOVEXY--[X]:%d;[Y]:%d.\r\n",SpeedGearX,SpeedGearY);
TRACE2("[MOVE_XY]:X %d;Y %d.\n",SpeedGearX,SpeedGearY);
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x45;
@@ -3882,3 +3882,83 @@ 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
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.
Destruct Cso7_Proto.
Construct Cso7_Proto.
Destruct Cso7_Proto.
Construct Cso7_Proto.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
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.
@@ -11,11 +11,11 @@ MOVETOSPEED_FAST_Z=0.00000000
MOVETOSPEED_SLOW_Z=0.00000000
MOVETOSPEED_SCALE_Z=1.00000000
;
SPEED_BASE_X1=28
SPEED_BASE_X1=20
SPEED_MAX_X1=20
SPEED_START_X1=20
SPEED_FRESH_X1=8
SPEED_SLOW_X1=3.400
SPEED_SLOW_X1=3.299
;
SPEED_BASE_X2=16
SPEED_MAX_X2=10
@@ -102,12 +102,12 @@ SPEED_FRESH_Z5=10
SPEED_SLOW_Z5=0.100
;
X_MOTOR_PRECISION=0.004
Y_MOTOR_PRECISION=0.009
Y_MOTOR_PRECISION=0.008
Z_MOTOR_PRECISION=0.004
;
X_MOTOR_WHEELBASE=1.500
Y_MOTOR_WHEELBASE=1.500
Z_MOTOR_WHEELBASE=1.500
X_MOTOR_WHEELBASE=1.200
Y_MOTOR_WHEELBASE=1.200
Z_MOTOR_WHEELBASE=1.200
;
MOTOR_PULSE_NUM=10000
;
@@ -18,8 +18,8 @@
#include "So7_Option.h"
#include "..\..\..\Tesa\TesaStarE.h"
#include "TestTesaStarEDialog.h"
#include "Mv_MainDlg.h"
#include "KeyenceTM065_Dlg.h"
#include "Mv_MainDlg.h"
CMv_Proto *m_pMv_Proto = NULL;
CKeyenceTM065_Proto *m_pKeyenceTM065_Proto = NULL;
@@ -152,10 +152,10 @@ BOOL CMv_MainDlg::OnInitDialog()
{
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_MITUTOYO))->SetCheck(false);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_MICROVU))->SetCheck(false);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_SevenOcean))->SetCheck(false);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_SevenOcean))->SetCheck(true);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_TM_065))->SetCheck(false);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_ANIMATICS))->SetCheck(false);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_TESASTARE))->SetCheck(true);
((CButton *)GetDlgItem(IDC_RADIO_MACHINE_TESASTARE))->SetCheck(false);
((CButton *)GetDlgItem(IDC_BUTTON_PROTOCOL_ANALYZER))->EnableWindow(true);
((CButton *)GetDlgItem(IDC_BUTTON_FILE_UTILITIES))->EnableWindow(true);
@@ -21,8 +21,8 @@
#include "EditableListCtrl.h"
#include "SetSo7MotionConfig.h"
#include "So7_Config_Pages.h"
#include "SO7_UtilDlg.h"
#include "So7_XBoxController.h"
#include "SO7_UtilDlg.h"
// CSO7_UtilDlg ¶Ô»°¿ò
#define HBIT0 0X01
@@ -36,10 +36,10 @@
extern CPSerial* m_pSO7_PCDSerial;
extern CSO7_Proto* m_pSO7_Proto;
extern CXBOXController* XBoxPlayer;
CLogger* g_pLoggerDebug=NULL;
CSO7_VolComp* g_pVolComp=NULL;
CAutoZoom* m_pSO7_AutoZoom=NULL;
CXBOXController* XBoxPlayer = new CXBOXController(1);
IMPLEMENT_DYNAMIC(CSO7_UtilDlg, CDialog)
CSO7_UtilDlg::CSO7_UtilDlg(CWnd* pParent /*=NULL*/)
@@ -414,7 +414,14 @@ void CSO7_UtilDlg::OnBnClickedButtonStartSo7machine()
if(XBoxPlayer->IsConnected())
{
XBoxPlayer->XBoxControllerInit();
m_OutMessage=_T("XBoxController has connected.");
OutputWithScroll(m_OutMessage,m_edMSG);
}
else
{
m_OutMessage=_T("XBoxController connection fails.");
OutputWithScroll(m_OutMessage,m_edMSG);
}
m_pSO7_Proto->Load_So7_Config();
//m_pSO7_Proto->so7_motion_startup(0.5, 0.5, 0.5);
m_pSO7_Proto->_start_machine();
@@ -39,6 +39,7 @@
#include "..\..\..\SevenOcean\Serial.h"
#include "So7_Manual_Machine.h"
#include "So7_XBoxController.h"
#include "So7_Option.h"
#include "afxdialogex.h"
@@ -54,6 +55,7 @@ CKeyence_Proto* m_pKeyence_Proto=NULL;
CSo7_Interface* m_pSo7_Interface=NULL;
CEF8000_Interface* m_pEF8000_Interface=NULL;
CXBOXController* XBoxPlayer =NULL;
// CSo7_Option dialog
@@ -167,9 +169,20 @@ void CSo7_Option::OnBnClickedOk()
{
m_pSO7_Proto = new CSO7_Proto();
}
if (!XBoxPlayer)
{
XBoxPlayer = new CXBOXController(1);
}
CSO7_UtilDlg* pSO7_UtilDlg=new CSO7_UtilDlg();
pSO7_UtilDlg->DoModal();
delete pSO7_UtilDlg;
if (XBoxPlayer)
{
delete XBoxPlayer;
XBoxPlayer=NULL;
}
if (m_pSO7_Proto)
{
delete m_pSO7_Proto;
@@ -1,30 +1,35 @@
#include "StdAfx.h"
#include "So7_XBoxController.h"
#include <math.h>
#include "..\..\..\SevenOcean\SO7_Proto.h"
#include "..\..\..\Animatics\Animatics_Proto.h"
#include "math.h"
#include "So7_XBoxController.h"
#define M_PI 3.14159265358979323846
const double XBOX_X_ANGLE=(M_PI / 180.0 * 10.0);
const double XBOX_Y_ANGLE=(M_PI / 180.0 * 80.0);
const double XBOX_XY_ANGLE_BEGIN=(M_PI / 180.0 * 35.0);
const double XBOX_XY_ANGLE_END=(M_PI / 180.0 * 55.0);
extern CSO7_Proto* m_pSO7_Proto;
extern SmartMotor_Proto* pSmartMotor_Proto;
HANDLE CXBOXController::XBoxhThread = NULL;
HANDLE CXBOXController::XBoxThreadMutex = NULL;
HANDLE CXBOXController::XBoxhTriggerEvent;
int CXBOXController::XBoxThreadState = THREAD_PAUSED;
int CXBOXController::XBoxThreadState = XBTHREAD_PAUSED;
bool CXBOXController::XYWAITSTOP = false;
bool CXBOXController::ZWAITSTOP = false;
short LX = 0, LY = 0, RX = 0, RY = 0;
WORD wBtns = 0;
BYTE TopLightValue = 0;
BYTE BottomLightValue = 0;
static short LX = 0, LY = 0, RX = 0, RY = 0;
static WORD wBtns = 0;
static BYTE TopLightValue = 0;
static BYTE BottomLightValue = 0;
static int TopLightBtnDown = 0;
static int BottomLightBtnDown = 0;
static char MoveSpeedGear[3]={0};
CXBOXController::CXBOXController(int playerNumber)
{
_controllerNum = playerNumber - 1;
m_ControllerNum = playerNumber - 1;
m_IsConnected=false;
}
CXBOXController::~CXBOXController()
@@ -34,67 +39,73 @@ CXBOXController::~CXBOXController()
void CXBOXController::XBoxControllerInit(void)
{
XBoxThreadState = THREAD_RUNNING_STATE;
if (m_IsConnected)
{
XBoxThreadState = XBTHREAD_RUNNING_STATE;
XBoxhTriggerEvent = CreateEvent(NULL, FALSE, NULL, NULL);
XBoxhThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)g_XBox_Thread, (LPVOID)this, 0, NULL);
XBoxThreadMutex = CreateMutex(NULL, FALSE, NULL);
XBoxhTriggerEvent = CreateEvent(NULL, FALSE, NULL, NULL);
XBoxhThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)g_XBox_Thread, (LPVOID)this, 0, NULL);
XBoxThreadMutex = CreateMutex(NULL, FALSE, NULL);
}
}
void CXBOXController::XBoxControllerExit(void)
{
XBoxThreadState = THREAD_EXIT;
SetEvent(XBoxhTriggerEvent);
if (XBoxhThread)
if (m_IsConnected)
{
DWORD dwCode = STILL_ACTIVE;
while (dwCode == STILL_ACTIVE)
XBoxThreadState = XBTHREAD_EXIT;
SetEvent(XBoxhTriggerEvent);
if (XBoxhThread)
{
GetExitCodeThread(XBoxhThread, &dwCode);
Sleep(1);
DWORD dwCode = STILL_ACTIVE;
while (dwCode == STILL_ACTIVE)
{
GetExitCodeThread(XBoxhThread, &dwCode);
Sleep(1);
}
}
}
SetEvent(XBoxhTriggerEvent);
CloseHandle(XBoxhTriggerEvent);
SetEvent(XBoxhTriggerEvent);
CloseHandle(XBoxhTriggerEvent);
XBoxThreadState = THREAD_EXIT;
XBoxThreadState = XBTHREAD_EXIT;
ReleaseMutex(XBoxThreadMutex);
CloseHandle(XBoxhThread);
ReleaseMutex(XBoxThreadMutex);
CloseHandle(XBoxhThread);
}
}
bool CXBOXController::IsConnected()
{
ZeroMemory(&_controllerState, sizeof(XINPUT_STATE));
DWORD Result = XInputGetState(_controllerNum, &_controllerState);
ZeroMemory(&m_ControllerState, sizeof(XINPUT_STATE));
DWORD Result = XInputGetState(m_ControllerNum, &m_ControllerState);
if (Result == ERROR_SUCCESS)
{
return true;
m_IsConnected=true;
}
else
{
return false;
m_IsConnected=false;
}
return m_IsConnected;
}
XINPUT_STATE CXBOXController::GetState()
{
ZeroMemory(&_controllerState, sizeof(XINPUT_STATE));
XInputGetState(_controllerNum, &_controllerState);
ZeroMemory(&m_ControllerState, sizeof(XINPUT_STATE));
XInputGetState(m_ControllerNum, &m_ControllerState);
return _controllerState;
return m_ControllerState;
}
void CXBOXController::Vibrate(int leftVal, int rightVal)
{
XINPUT_VIBRATION Vibration;
ZeroMemory(&Vibration, sizeof(XINPUT_VIBRATION));
Vibration.wLeftMotorSpeed = (WORD)leftVal;
Vibration.wRightMotorSpeed = (WORD)rightVal;
XInputSetState(_controllerNum, &Vibration);
XINPUT_VIBRATION Vibration;
ZeroMemory(&Vibration, sizeof(XINPUT_VIBRATION));
Vibration.wLeftMotorSpeed = (WORD)leftVal;
Vibration.wRightMotorSpeed = (WORD)rightVal;
XInputSetState(m_ControllerNum, &Vibration);
}
unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis)
@@ -108,16 +119,21 @@ unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis)
RX = _This->GetState().Gamepad.sThumbRX;
RY = _This->GetState().Gamepad.sThumbRY;
wBtns = _This->GetState().Gamepad.wButtons;
//TRACE2("[XBOX]LX:%d LY:%d\n",LX,LY);
//TRACE2("[XBOX]RX:%d RY:%d\n",RX,RY);
//Z Direction
if(LY>128 && abs(LX)<LY/tan(XBOX_Y_ANGLE))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z((char)((LY - 128) / 8160 + 1));
MoveSpeedGear[2]=static_cast<char>((LY - 128) / 8160 + 1);
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z(MoveSpeedGear[2]);
ZWAITSTOP = true;
}
else if(LY<128 && abs(LX)<-LY/tan(XBOX_Y_ANGLE))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z((char)((LY + 128) / 8160.25 - 1));
MoveSpeedGear[2]=static_cast<char>((LY + 128) / 8160.25 - 1);
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Z(MoveSpeedGear[2]);
ZWAITSTOP = true;
}
else if(ZWAITSTOP)
@@ -129,46 +145,75 @@ unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis)
//XY Direction
if(RX<128 && abs(RY)<-RX*tan(XBOX_X_ANGLE))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X((char)((RX + 128) / 8160.25 - 1));
MoveSpeedGear[0]=static_cast<char>((RX + 128) / 8160.25 - 1);
MoveSpeedGear[0]=3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X(MoveSpeedGear[0]);
XYWAITSTOP = true;
}
else if(RX<128 && RY>-RX*tan(XBOX_XY_ANGLE_BEGIN) && RY<-RX*tan(XBOX_XY_ANGLE_END))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY((char)((RX + 128) / 8160.25 - 1), (char)((RY - 128) / 8160 + 1));
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))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Y((char)((RY - 128) / 8160 + 1));
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))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY((char)((RX - 128) / 8160 + 1), (char)((RY - 128) / 8160 +1));
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))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X((char)((RX - 128) / 8160 + 1));
MoveSpeedGear[0]=static_cast<char>((RX - 128) / 8160 + 1);
MoveSpeedGear[0]=-3;
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X(MoveSpeedGear[0]);
XYWAITSTOP = true;
}
else if(RX>128 && -RY>RX*tan(XBOX_XY_ANGLE_BEGIN) && -RY<RX*tan(XBOX_XY_ANGLE_END))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY((char)((RX - 128) / 8160 + 1), (char)((RY + 128) / 8160.25 - 1));
MoveSpeedGear[0]=static_cast<char>((RX - 128) / 8160 + 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(RY<128 && abs(RX)<-RY/tan(XBOX_Y_ANGLE))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_Y((char)((RY + 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_Y(MoveSpeedGear[1]);
XYWAITSTOP = true;
}
else if(RX<128 && -RY>-RX*tan(XBOX_XY_ANGLE_BEGIN) && -RY<-RX*tan(XBOX_XY_ANGLE_END))
{
m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_XY((char)((RX + 128) / 8160.25 - 1), (char)((RY + 128) / 8160.25 - 1));
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;
}
@@ -419,33 +464,17 @@ unsigned __stdcall CXBOXController::g_XBox_Thread(LPVOID pThis)
_This->Vibrate();
}
/*
/***************************************************************
/////////////////////////////Other State////////////////////////
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ();
}
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ();
}
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT)
{
pSmartMotor_Proto->_send_cmd_SMARTMOTOR_DECEL_STOPX();
}
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT)
{
pSmartMotor_Proto->_send_cmd_SMARTMOTOR_DECEL_STOPX();
}
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_START)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ();
}*/
if(_This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_BACK)
***************************************************************/
if(XBoxThreadState == THREAD_EXIT || _This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_BACK)
if(XBoxThreadState == XBTHREAD_EXIT || _This->GetState().Gamepad.wButtons & XINPUT_GAMEPAD_BACK)
{
break;
}
@@ -4,10 +4,6 @@
#define XBTHREAD_PAUSED 1
#define XBTHREAD_RUNNING_STATE 0
#define XBTHREAD_EXIT -1
#define XBOX_X_ANGLE PI / 180 * 10
#define XBOX_Y_ANGLE PI / 180 * 80
#define XBOX_XY_ANGLE_BEGIN PI / 180 * 35
#define XBOX_XY_ANGLE_END PI / 180 * 55
#pragma comment(lib, "XInput.lib")
@@ -19,11 +15,11 @@ protected:
static HANDLE XBoxhTriggerEvent;
static int XBoxThreadState;
static bool XYWAITSTOP;
static bool ZWAITSTOP;
XINPUT_STATE _controllerState;
int _controllerNum;
static bool ZWAITSTOP;
XINPUT_STATE m_ControllerState;
int m_ControllerNum;
bool m_IsConnected;
public:
CXBOXController(int playerNumber);
~CXBOXController();