public void IsHigh_Pin_Argument_Is8()
        {
            var state = new DigitalPortState();

            typeof(DigitalPortState).GetProperty("Pins").SetValue(state, 0);
            state.IsSet(8);
        }
 public void IsHigh_Pins_Is255()
 {
     var state = new DigitalPortState() { Pins = 255 };
     Assert.AreEqual(true, state.IsSet(0));
     Assert.AreEqual(true, state.IsSet(1));
     Assert.AreEqual(true, state.IsSet(2));
     Assert.AreEqual(true, state.IsSet(3));
     Assert.AreEqual(true, state.IsSet(4));
     Assert.AreEqual(true, state.IsSet(5));
     Assert.AreEqual(true, state.IsSet(6));
     Assert.AreEqual(true, state.IsSet(7));
 }
Example #3
0
        /// <summary>
        /// Handle messages that harve arrived from the board and successfully processed by Firmata
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventArgs"></param>
        private void HandleFirmataMessageReceived(Object sender, FirmataMessageEventArgs eventArgs)
        {
            var        fmessage = eventArgs.Value;
            ADMMessage message  = null;

            try
            {
                switch (fmessage.Type)
                {
                case Solid.Arduino.Firmata.MessageType.FirmwareResponse:
                    break;

                case Solid.Arduino.Firmata.MessageType.StringData:
                    StringData sd = (StringData)fmessage.Value;
                    try
                    {
                        String serialized = sd.Text;
                        message = ADMMessage.Deserialize <ADMMessage>(serialized, MessageEncoding.BYTES_ARRAY);
                    }
                    catch (Exception e)
                    {
                        String sbytes = BitConverter.ToString(Chetch.Utilities.Convert.ToBytes(sd.Text));
                        Tracing?.TraceEvent(TraceEventType.Error, 4000, "Deserializing {0} produced exception {1}: {2}", sbytes, e.GetType(), e.Message);
                        throw e;
                    }
                    break;

                case Solid.Arduino.Firmata.MessageType.PinStateResponse:
                    break;

                case Solid.Arduino.Firmata.MessageType.DigitalPortState:
                    DigitalPortState portState = (DigitalPortState)fmessage.Value;
                    String           s         = BitConverter.ToString(BitConverter.GetBytes(portState.Pins));

                    int pinsChanged;
                    if (_portStates.ContainsKey(portState.Port))
                    {
                        pinsChanged = portState.Pins ^ _portStates[portState.Port].Pins;
                    }
                    else
                    {
                        pinsChanged = 255;
                    }
                    _portStates[portState.Port] = portState;

                    for (int i = 0; i < 8; i++)
                    {
                        int bit2check = (int)System.Math.Pow(2, i);
                        if ((bit2check & pinsChanged) == 0)
                        {
                            continue;
                        }

                        bool state     = portState.IsSet(i);
                        int  pinNumber = GetPinForPort(portState.Port, i);    //TODO: this might need to be board dependent
                        var  devs      = GetDevicesByPin(pinNumber);
                        if (devs != null)
                        {
                            foreach (var dev in devs)
                            {
                                dev.HandleDigitalPinStateChange(pinNumber, state);
                            }
                        }
                    }

                    //String s1 = System.Convert.ToString(portState.Pins, 2);
                    //String s2 = System.Convert.ToString(pinsChanged, 2);
                    //Debug.Print("Pins/2change: " + s1 + "/" + s2);
                    break;

                case Solid.Arduino.Firmata.MessageType.CapabilityResponse:
                    break;

                default:
                    break;
                }
            } catch (Exception e)
            {
                byte tag = message != null ? message.Tag : (byte)0;
                message       = new ADMMessage();
                message.Type  = Messaging.MessageType.ERROR;
                message.Value = e.Message;
                message.Tag   = tag;
            }

            if (message != null)
            {
                Task.Run(() => { HandleReceivedADMMessage(message); });
            }
        }
        public void IsHigh_Pin_Argument_IsNegative()
        {
            var state = new DigitalPortState();

            state.IsSet(-1);
        }