public void RequestFirmware()
        {
            const int    majorVersion = 5;
            const int    minorVersion = 1;
            const string Name         = "Arduïno Firmata";

            var connection = new MockSerialConnection();
            var session    = CreateFirmataSession(connection);

            connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF0, 0x79, majorVersion, minorVersion });
            connection.EnqueueResponse(Name.To14BitIso());
            connection.EnqueueResponse(0xF7);

            session.RequestFirmware();
            Assert.AreEqual(1, _messagesReceived.Count, "Message event error");
            IFirmataMessage message = _messagesReceived.Dequeue();

            //Assert.AreEqual(MessageType.FirmwareResponse, message.Type);
            Assert.IsInstanceOfType(message, typeof(FirmataMessage <Firmware>));

            var firmware = (Firmware)message.Value;

            Assert.AreEqual(firmware.MajorVersion, majorVersion);
            Assert.AreEqual(firmware.MinorVersion, minorVersion);
            Assert.AreEqual(firmware.Name, Name);
        }
Exemple #2
0
        private void DeliverMessage(IFirmataMessage message)
        {
            _messageHeader._processMessage = null;

            lock (_messageHeader._receivedMessageList)
            {
                if (_messageHeader._receivedMessageList.Count >= MessageHeader.MaxQueuelength)
                {
                    throw new OverflowException(global::Arduino.Firmata.Messages.OverflowEx_MsgBufferFull);
                }

                // Remove all unprocessed and timed-out messages.
                while (_messageHeader._receivedMessageList.Count > 0 &&
                       ((DateTime.UtcNow - _messageHeader._receivedMessageList.First.Value.Time).TotalMilliseconds > _messageHeader.TimeOut))
                {
                    _messageHeader._receivedMessageList.RemoveFirst();
                }

                _messageHeader._receivedMessageList.AddLast(message);
                Monitor.PulseAll(_messageHeader._receivedMessageList);
            }

            _messageHeader._arduinoSession.OnMessageReceivedHandler(new FirmataMessageEventArgs(message));
            //if (MessageReceived != null && message.Type != MessageType.I2CReply)
            //    MessageReceived(this, new FirmataMessageEventArgs(message));
        }
        public void ResetBoard()
        {
            var connection = new MockSerialConnection();
            var session    = CreateFirmataSession(connection);

            connection.EnqueueRequestAndResponse(new byte[] { 0xFF }, new byte[] { 0xF9, 2, 3 });
            session.ResetBoard();

            Assert.AreEqual(1, _messagesReceived.Count);
            IFirmataMessage message = _messagesReceived.Dequeue();

            //Assert.AreEqual(MessageType.ProtocolVersion, message.Type);
            Assert.IsInstanceOfType(message, typeof(FirmataMessage <ProtocolVersion>));
            var version = (ProtocolVersion)message.Value;

            Assert.AreEqual(2, version.Major);
            Assert.AreEqual(3, version.Minor);
        }
        public void RequestBoardAnalogMapping()
        {
            var connection = new MockSerialConnection();
            var session    = CreateFirmataSession(connection);

            connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x69, 0xF7 }, 0xF0, 0x6A);
            connection.EnqueueResponse(0x0F);
            connection.EnqueueResponse(0xF7);

            session.RequestBoardAnalogMapping();
            IFirmataMessage message = _messagesReceived.Dequeue();

            //Assert.AreEqual(MessageType.AnalogMappingResponse, message.Type);
            Assert.IsInstanceOfType(message, typeof(FirmataMessage <BoardAnalogMapping>));
            BoardAnalogMapping mapping = (BoardAnalogMapping)message.Value;

            Assert.AreEqual(1, mapping.PinMappings.Length);
            Assert.AreEqual(0, mapping.PinMappings[0].PinNumber);
            Assert.AreEqual(15, mapping.PinMappings[0].Channel);
        }
        public void RequestPinState()
        {
            var connection = new MockSerialConnection();
            var session    = CreateFirmataSession(connection);

            connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6D, 0x01, 0xF7 }, 0xF0, 0x6E);
            // Pin 1 Digital Output mode, value = 0
            connection.EnqueueResponse(0x01, 0x01, 0x00);
            connection.EnqueueResponse(0xF7);

            session.RequestPinState(1);
            IFirmataMessage message = _messagesReceived.Dequeue();

            //Assert.AreEqual(MessageType.PinStateResponse, message.Type);
            Assert.IsInstanceOfType(message, typeof(FirmataMessage <PinState>));
            PinState state = (PinState)message.Value;

            Assert.AreEqual(1, state.PinNumber);
            Assert.AreEqual(PinMode.DigitalOutput, state.Mode);
            Assert.AreEqual(0, state.Value);
        }
        public void RequestBoardCapability()
        {
            var connection = new MockSerialConnection();
            var session    = CreateFirmataSession(connection);

            // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO, 0/1/2/3/4
            connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C);
            connection.EnqueueResponse(2, 8, 0x7F);
            connection.EnqueueResponse(0, 127, 1, 127, 0x7F);
            connection.EnqueueResponse(0xF7);

            session.RequestBoardCapability();
            IFirmataMessage message = _messagesReceived.Dequeue();

            //Assert.AreEqual(MessageType.CapabilityResponse, message.Type);
            Assert.IsInstanceOfType(message, typeof(FirmataMessage <BoardCapability>));
            BoardCapability capability = (BoardCapability)message.Value;

            Assert.AreEqual(2, capability.Pins.Length);
            Assert.AreEqual(0, capability.Pins[0].PinNumber);
            Assert.AreEqual(false, capability.Pins[0].DigitalInput);
            Assert.AreEqual(false, capability.Pins[0].DigitalOutput);
            Assert.AreEqual(true, capability.Pins[0].Analog);
            Assert.AreEqual(8, capability.Pins[0].AnalogResolution);
            Assert.AreEqual(false, capability.Pins[0].Pwm);
            Assert.AreEqual(0, capability.Pins[0].PwmResolution);
            Assert.AreEqual(false, capability.Pins[0].Servo);
            Assert.AreEqual(0, capability.Pins[0].ServoResolution);

            Assert.AreEqual(1, capability.Pins[1].PinNumber);
            Assert.AreEqual(true, capability.Pins[1].DigitalInput);
            Assert.AreEqual(true, capability.Pins[1].DigitalOutput);
            Assert.AreEqual(false, capability.Pins[1].Analog);
            Assert.AreEqual(0, capability.Pins[1].AnalogResolution);
            Assert.AreEqual(false, capability.Pins[1].Pwm);
            Assert.AreEqual(0, capability.Pins[1].PwmResolution);
            Assert.AreEqual(false, capability.Pins[1].Servo);
            Assert.AreEqual(0, capability.Pins[1].ServoResolution);
        }
Exemple #7
0
 internal FirmataMessageEventArgs(IFirmataMessage value)
 {
     Value = value;
 }