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
@@ -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();