Exemple #1
0
/*----------------------------------------------------------------------------
	DispatchEvent 
	
	Handles all OSL messages that this object should handle
----------------------------------------------------------------------------*/
void AEGenericClass::DispatchEvent(AEDesc *token, const AppleEvent *appleEvent, AppleEvent *reply)
{
	OSErr		err = noErr;
	
	AEEventID		eventID;
	OSType		typeCode;
	Size			actualSize 	= 0L;
	
	// Get the event ID
	err = AEGetAttributePtr(appleEvent, 	keyEventIDAttr, 
									typeType, 
									&typeCode, 
									(Ptr)&eventID, 
									sizeof(eventID), 
									&actualSize);
	ThrowIfOSErr(err);
	
	try
	{
		switch (eventID)
		{
			case kAEClone:
				HandleDuplicate(token, appleEvent, reply);
				break;
				
			case kAEClose:
				HandleClose(token, appleEvent, reply);
				break;
				
			case kAECountElements:
				HandleCount(token, appleEvent, reply);
				break;
				
			case kAECreateElement:
				HandleMake(token, appleEvent, reply);
				break;
				
			case kAEDelete:
				HandleDelete(token, appleEvent, reply);
				break;
				
			case kAEDoObjectsExist:
				HandleExists(token, appleEvent, reply);
				break;
				
			case kAEGetData:
				HandleGetData(token, appleEvent, reply);
				break;
				
			case kAEGetDataSize:
				HandleDataSize(token, appleEvent, reply);
				break;
				
			case kAEMove:
				HandleMove(token, appleEvent, reply);
				break;
				
			case kAEOpen:		// == kAEOpenDocuments
				HandleOpen(token, appleEvent, reply);
				break;
				
			case kAEPrint:
				HandlePrint(token, appleEvent, reply);
				break;
			
			case kAEOpenApplication:
				HandleRun(token, appleEvent, reply);
				break;
			
			case kAEReopenApplication:
			  HandleReOpen(token, appleEvent, reply);
			  break; 
							
			case kAEQuitApplication:
				HandleQuit(token, appleEvent, reply);
				break;
				
			case kAESave:
				HandleSave(token, appleEvent, reply);
				break;
				
			case kAESetData:
				HandleSetData(token, appleEvent, reply);
				break;

			// MT-NW suite
			case kAEExtract:
				HandleExtract(token, appleEvent, reply);
				break;
				
			case kAESendMessage:
				HandleSendMessage(token, appleEvent, reply);
				break;
				
			default:
				err = errAEEventNotHandled;
				break;
		}
	}
	catch (OSErr catchErr)
	{
		PutReplyErrorNumber(reply, catchErr);
		throw;
	}
	catch ( ... )
	{
		PutReplyErrorNumber(reply, paramErr);
		throw;
	}
}
/*移动位置,包括手动操作和归零操作*/
void ScanThread::Move()
{
    /*检测上升按键的边缘*/
    if(a_last){
        if(!(spark_info->c_array[C_Z_IN0] & 0x10)){
            a_edge = RISE;
        }
        else
            a_edge = NONE;
    }else{
        if((spark_info->c_array[C_Z_IN0] & 0x10)){
            if(spark_info->hand.Mutex == Hand_NULL_MUTEX){
                a_edge = FALL;
                AxisSwitch(&spark_info->hand ,Hand_Z_AXIS ,Hand_A_DRIECT);
                spark_info->hand.Mutex = Hand_MOVE_MUTEX;
            }else{
                qDebug()<<"Can't handle this axis!";
            }
        }
        else
            a_edge = NONE;
    }

    /*检测上升按键的边缘*/
    if(b_last){
        if(!(spark_info->c_array[C_Z_IN0] & 0x20)){
            b_edge = RISE;
        }
        else
            b_edge = NONE;
    }else{
        if((spark_info->c_array[C_Z_IN0] & 0x20)){
            if(spark_info->hand.Mutex == Hand_NULL_MUTEX){
                b_edge = FALL;
                AxisSwitch(&spark_info->hand ,Hand_Z_AXIS ,Hand_B_DRIECT);
                spark_info->hand.Mutex = Hand_MOVE_MUTEX;
            }else{
                qDebug()<<"Can't handle this axis!";
            }
        }
        else
            b_edge = NONE;
    }

    /*检测自动归零的边缘*/
    if(c_last){
        if(!spark_info->b_array[B_ZERO]){
            c_edge = RISE;
        }
        else
            c_edge = NONE;
    }else{
        if(spark_info->b_array[B_ZERO]){
            if(spark_info->hand.Mutex == Hand_NULL_MUTEX){
                c_edge = FALL;
                AxisSwitch(&program ,Hand_Z_AXIS ,Hand_A_DRIECT);
                program.Mutex = Hand_ZERO_MUTEX;
                spark_info->hand.Mutex = Hand_ZERO_MUTEX;
            }
        }
        else
            c_edge = NONE;
    }

    /*检测Z轴向上归原点的边缘*/
    if(e_last){
        if(!spark_info->b_array[B_HOME_Z_UP]){
            e_edge = RISE;
        }
        else
            e_edge = NONE;
    }else{
        if(spark_info->b_array[B_HOME_Z_UP]){
            if(spark_info->hand.Mutex == Hand_NULL_MUTEX){
                e_edge = FALL;
                AxisSwitch(&program ,Hand_Z_AXIS ,Hand_A_DRIECT);
                program.Mutex = Hand_HOME_MUTEX;
                spark_info->hand.Mutex = Hand_HOME_MUTEX;
            }
        }
        else
            e_edge = NONE;
    }

    /*检测Z轴向下归原点的边缘*/
    if(f_last){
        if(!spark_info->b_array[B_HOME_Z_DOWN]){
            f_edge = RISE;
        }
        else
            f_edge = NONE;
    }else{
        if(spark_info->b_array[B_HOME_Z_DOWN]){
            if(spark_info->hand.Mutex == Hand_NULL_MUTEX){
                f_edge = FALL;
                AxisSwitch(&program ,Hand_Z_AXIS ,Hand_B_DRIECT);
                program.Mutex = Hand_HOME_MUTEX;
                spark_info->hand.Mutex = Hand_HOME_MUTEX;
            }
        }
        else
            f_edge = NONE;
    }

    switch(spark_info->hand.Mutex){
    case Hand_NULL_MUTEX:
        break;
    case Hand_MOVE_MUTEX:
        HandleMove();
        break;
    case Hand_ZERO_MUTEX:
        ZeroMove();
        break;
    case Hand_HOME_MUTEX:
        HomeMove();
        break;
    case Hand_POINT_MUTEX:
    case Hand_CALIB_MUTEX:
    case Hand_SPARK_MUTEX:
        break;
    }

}
Exemple #3
0
/*
 * entry point for the background thread
 */
wxThread::ExitCode WorkerThread::Entry()
{
    bool bDone = TestDestroy();

    Debug.AddLine("WorkerThread::Entry() begins");

#if defined(__WINDOWS__)
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    Debug.AddLine("worker thread CoInitializeEx returns %x", hr);
#endif

    while (!bDone)
    {
        WORKER_THREAD_REQUEST message;
        bool dummy;
        wxMessageQueueError queueError = m_wakeupQueue.Receive(dummy);

        Debug.AddLine("Worker thread wakes up");

        assert(queueError == wxMSGQUEUE_NO_ERROR);

        queueError = m_highPriorityQueue.ReceiveTimeout(0, message);

        if (queueError == wxMSGQUEUE_TIMEOUT)
        {
            queueError = m_lowPriorityQueue.ReceiveTimeout(0, message);
            assert(queueError != wxMSGQUEUE_TIMEOUT);
        }

        assert(queueError == wxMSGQUEUE_NO_ERROR);

        switch(message.request)
        {
            bool bError;

            case REQUEST_NONE:
                Debug.AddLine("worker thread servicing REQUEST_NONE");
                break;
            case REQUEST_TERMINATE:
                Debug.AddLine("worker thread servicing REQUEST_TERMINATE");
                bDone = true;
                break;
            case REQUEST_EXPOSE:
                Debug.AddLine("worker thread servicing REQUEST_EXPOSE %d",
                    message.args.expose.exposureDuration);
                bError = HandleExpose(&message.args.expose);
                SendWorkerThreadExposeComplete(message.args.expose.pImage, bError);
                break;
            case REQUEST_MOVE: {
                Debug.AddLine(wxString::Format("worker thread servicing REQUEST_MOVE %s dir %d (%.2f, %.2f)",
                    message.args.move.pMount->GetMountClassName(), message.args.move.direction,
                    message.args.move.vectorEndpoint.X, message.args.move.vectorEndpoint.Y));
                Mount::MOVE_RESULT moveResult = HandleMove(&message.args.move);
                SendWorkerThreadMoveComplete(message.args.move.pMount, moveResult);
                break;
            }
            default:
                Debug.AddLine("worker thread servicing unknown request %d", message.request);
                break;
        }

        Debug.AddLine("worker thread done servicing request");
        bDone |= TestDestroy();
    }

    Debug.AddLine("WorkerThread::Entry() ends");
    Debug.Flush();

    return (wxThread::ExitCode)0;
}
long ProjectPrefsGUI::HandleButtonClick(NativeControl Handle, NativeGUIWin NW, int ButtonID)
{

if (SwapInProgress || MoveInProgress)
	{
	SwapInProgress = MoveInProgress = 0;
#ifdef _WIN32
	if (Curse)
		SetClassLong(GetDlgItem(NativeWin, IDC_PARLIST), GCL_HCURSOR, (long)Curse);
#endif // _WIN32
	EndPointer();
	} // if
switch (ButtonID)
	{
	case ID_KEEP:
		{
		AppScope->MCP->SetParam(1, WCS_TOOLBARCLASS_MODULES, WCS_TOOLBAR_CLOSE_MOD,
			WCS_TOOLBAR_ITEM_PPG, 0);
		break;
		} // 
	case IDCANCEL:
		{
		DoCancel();
		//AppScope->MCP->SetParam(1, WCS_TOOLBARCLASS_MODULES, WCS_TOOLBAR_CLOSE_MOD,
		//	WCS_TOOLBAR_ITEM_PPG, 0);
		break;
		} // 
	case IDC_MATRIX_1:
		{
		SetViewport(0);
		break;
		} // 
	case IDC_MATRIX_2:
		{
		SetViewport(1);
		break;
		} // 
	case IDC_MATRIX_3:
		{
		SetViewport(2);
		break;
		} // 
	case IDC_MATRIX_4:
		{
		SetViewport(3);
		break;
		} // 
	case IDC_MATRIX_5:
		{
		SetViewport(4);
		break;
		} // 
	case IDC_MATRIX_6:
		{
		SetViewport(5);
		break;
		} // 
	case IDC_MATRIX_7:
		{
		SetViewport(6);
		break;
		} // 
	case IDC_MATRIX_8:
		{
		SetViewport(7);
		break;
		} // 
	case IDC_MATRIX_9:
		{
		SetViewport(8);
		break;
		} // 
	case IDC_MATRIX_10:
		{
		SetViewport(9);
		break;
		} // 
	case IDC_MATRIX_11:
		{
		SetViewport(10);
		break;
		} // 
	case IDC_MATRIX_12:
		{
		SetViewport(11);
		break;
		} // 
	case ID_DEFAULT:
		{
		DoDefaultDir();
		break;
		} // 
	case IDC_ADD:
		{
		DoAdd();
		break;
		} // 
	case IDC_MOVEDLUP:
		{
		HandleMove(0); // up
		break;
		} // up
	case IDC_MOVEDLDOWN:
		{
		HandleMove(1); // down
		break;
		} // down
/*
	case IDC_SWAP:
		{
		//DoSwap(0);
		break;
		} // 
	case IDC_MOVE:
		{
		//DoMove(0);
		break;
		} // 
*/
	case IDC_REMOVE:
		{
		DoRemove();
		break;
		} // 
	case IDC_READONLY:
		{
		DoReadOnly();
		break;
		} // 
	case IDC_LOAD:
		{
		DoLoad();
		break;
		} // 
	case IDC_SET:
		{
		DoAdvConfig(1);
		break;
		} // SET
	case IDC_UNSET:
		{
		DoAdvConfig(2);
		break;
		} // IDC_UNSET
	} // switch

return(0);

} // ProjectPrefsGUI::HandleButtonClick