예제 #1
0
        private static bool WaitForMessage(TCubeDCServo cube, int messageTypeID, int requiredMessageID)
        {
            while (true)
            {
                ushort messageType;
                ushort messageID;
                uint   messageData;

                // if no messages waiting
                if (cube.MessageQueueSize() == 0)
                {
                    // reset wait for message event and wait for a message
                    _event.Reset();
                    _event.WaitOne();
                }

                // get the message
                cube.GetNextMessage(out messageType, out messageID, out messageData);

                // if message is correct
                if ((messageType == messageTypeID) && (messageID == requiredMessageID))
                {
                    return(true);
                }

                if (cube.HasLastMsgTimerOverrun())
                {
                    Int64 lastMsg;
                    cube.TimeSinceLastMsgReceived(out lastMsg);
                    Console.WriteLine("device not responded, lastMsg {0}", lastMsg);
                    cube.Close();
                    Console.ReadKey();
                    return(false);
                }
            }
        }