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)); }
/// <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); }