private ArduinoSession CreateSerialSession(IDataConnection connection, int timeout = -1)
        {
            var session = new ArduinoSession(connection);

            session.TimeOut          = timeout;
            session.MessageReceived += (o, e) =>
            {
                Assert.Fail("MessageReceived event triggered");
            };
            session.EvintFirmata().AnalogStateReceived += (o, e) =>
            {
                Assert.Fail("AnalogStateReceived event triggered");
            };
            session.EvintFirmata().DigitalStateReceived += (o, e) =>
            {
                Assert.Fail("DigitalStateReceived event triggered");
            };
            session.EvintI2C().I2CReplyReceived += (o, e) =>
            {
                Assert.Fail("I2CReplyReceived event triggered");
            };
            session.EvintString().StringReceived += (o, e) =>
            {
                Console.WriteLine("Received: '{0}'", e.Text);
            };
            return(session);
        }
Example #2
0
        /// <summary>
        /// Creates an observable object tracking <see cref="AnalogState" /> messages for a specific channel.
        /// </summary>
        /// <param name="channel">The channel to track</param>
        /// <returns>
        /// An <see cref="IObservable{AnalogState}" /> interface
        /// </returns>
        public static IObservable <AnalogState> CreateAnalogStateMonitor(this ArduinoSession session, int channel)
        {
            if (channel < 0 || channel > 15)
            {
                throw new ArgumentOutOfRangeException(nameof(channel), Messages.ArgumentEx_ChannelRange0_15);
            }

            return(new AnalogStateTracker(session.EvintFirmata(), channel));
        }
Example #3
0
        public static IObservable <DigitalPinState> CreateDigitalStateChangeMonitor(this ArduinoSession session, int port)
        {
            if (port < 0 || port > 15)
            {
                throw new ArgumentOutOfRangeException(nameof(port), Messages.ArgumentEx_PortRange0_15);
            }

            return(new DigitalStateChangeTracker(session.EvintFirmata(), port));
        }
Example #4
0
        private const byte SYSEX_REALTIME           = 0X7F; // MIDI Reserved for realtime messages


        ///// <summary>
        ///// Event, raised for every SysEx (0xF0) and ProtocolVersion (0xF9) message not handled by an <see cref="IFirmataProtocol"/>'s Get method.
        ///// </summary>
        ///// <remarks>
        ///// When e.g. method <see cref="RequestBoardCapability"/> is invoked, the party system's response message raises this event.
        ///// However, when method <see cref="GetBoardCapability"/> or <see cref="GetBoardCapabilityAsync"/> is invoked, the response is returned
        ///// to the respective method and event <see cref="MessageReceived"/> is not raised.
        /////
        ///// This event is not raised for either analog or digital I/O messages.
        ///// </remarks>
        //event MessageReceivedHandler MessageReceived;

        ///// <summary>
        ///// Event, raised when an analog state message (command 0xE0) is received.
        ///// </summary>
        ///// <remarks>
        ///// The frequency at which analog state messages are being sent by the party system can be set with method <see cref="SetSamplingInterval"/>.
        ///// </remarks>
        //event AnalogStateReceivedHandler AnalogStateReceived;

        ///// <summary>
        ///// Event, raised when a digital I/O message (command 0x90) is received.
        ///// </summary>
        ///// <remarks>
        ///// Please note that the StandardFirmata implementation for Arduino only sends updates of digital port states if necessary.
        ///// When none of a port's digital input pins have changed state since a previous polling cycle, no Firmata.sendDigitalPort message
        ///// is sent.
        ///// <para>
        ///// Also, calling method <see cref="SetDigitalReportMode"/> does not guarantee this event will receive a (first) Firmata.sendDigitalPort message.
        ///// Use method <see cref="GetPinState"/> or <see cref="GetPinStateAsync"/> inquiring the current pin states.
        ///// </para>
        ///// </remarks>
        //event DigitalStateReceivedHandler DigitalStateReceived;

        /// <summary>
        /// Creates an observable object tracking <see cref="AnalogState"/> messages.
        /// </summary>
        /// <returns>An <see cref="IObservable{AnalogState}"/> interface</returns>
        public static IObservable <AnalogState> CreateAnalogStateMonitor(this ArduinoSession session)
        {
            return(new AnalogStateTracker(session.EvintFirmata()));
        }
Example #5
0
 public static IObservable <DigitalPinState> CreateDigitalStateChangeMonitor(this ArduinoSession session)
 {
     return(new DigitalStateChangeTracker(session.EvintFirmata()));
 }