예제 #1
0
        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);
            FirmataMessage message = _messagesReceived.Dequeue();

            Assert.AreEqual(MessageType.ProtocolVersion, message.Type);
            var version = (ProtocolVersion)message.Value;

            Assert.AreEqual(2, version.Major);
            Assert.AreEqual(3, version.Minor);
        }
예제 #2
0
        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);
            FirmataMessage message = _messagesReceived.Dequeue();

            Assert.AreEqual(MessageType.PinStateResponse, message.Type);
            PinState state = (PinState)message.Value;

            Assert.AreEqual(1, state.PinNumber);
            Assert.AreEqual(PinMode.DigitalOutput, state.Mode);
            Assert.AreEqual(0, state.Value);
        }
예제 #3
0
        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();
            FirmataMessage message = _messagesReceived.Dequeue();

            Assert.AreEqual(MessageType.AnalogMappingResponse, message.Type);

            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);
        }
예제 #4
0
        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();
            FirmataMessage message = _messagesReceived.Dequeue();

            Assert.AreEqual(MessageType.CapabilityResponse, message.Type);
            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);
        }
예제 #5
0
        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");
            FirmataMessage message = _messagesReceived.Dequeue();

            Assert.AreEqual(MessageType.FirmwareResponse, message.Type);
            var firmware = (Firmware)message.Value;

            Assert.AreEqual(firmware.MajorVersion, majorVersion);
            Assert.AreEqual(firmware.MinorVersion, minorVersion);
            Assert.AreEqual(firmware.Name, Name);
        }