public void SendPacketTest() { SerialReaderWriter rw = new SerialReaderWriter(new SerialSettings()); rw.ParseData("T01N01I00P32Q00"); Packet p = new Packet(); p.PacketType = (PacketTypes)"01".FromHexStringToInt(); p.NodeID = "01".FromHexStringToInt(); p.CommandID = (Commands)"40".FromHexStringToInt(); p.Payload = "32".FromHexStringToInt(); p.Parity = "00".FromHexStringToInt(); Assert.AreEqual(rw.incomingPacket, p); //TODO: expand test (test other fields, test with more strings) }
public void SendPacket(PacketTypes ptype, int nodeId, int sensorID, Commands command, int payload) { Packet res= new Packet(); res.PacketType = ptype; res.NodeID = nodeId; res.SensorID = sensorID; res.CommandID = command; res.Payload = payload; res.Parity = ComputeParity(); //TODO spManager.SendSerialData(res.ToStringMessageArray()); }
public void ParseData(string packetStr) { Debug.WriteLine("New packet:\t string:" + packetStr); for (int i = 0; i < packetStr.Length; i++) { //Simple state-machine if (packetStr[i] == 'T') { incomingPacket = new Packet { RawString = packetStr }; currentField = PacketFields.Type; } else if (packetStr[i] == 'N') currentField = PacketFields.NodeID; else if (packetStr[i] == 'I') { if (incomingPacket.PacketType == PacketTypes.Command || incomingPacket.PacketType == PacketTypes.Command_Reply) currentField = PacketFields.CommandID; else if (incomingPacket.PacketType == PacketTypes.Data_Array_Request || incomingPacket.PacketType == PacketTypes.Data_Int || incomingPacket.PacketType == PacketTypes.Data_Request) { currentField = PacketFields.SensorID; } } else if (packetStr[i] == 'P') currentField = PacketFields.Payload; else if (packetStr[i] == 'Q') currentField = PacketFields.Parity; else { switch (currentField) { case PacketFields.Type: incomingPacket.PacketType = (PacketTypes)packetStr.Substring(i, 2).FromHexStringToInt(); i++; break; case PacketFields.NodeID: incomingPacket.NodeID = packetStr.Substring(i, 2).FromHexStringToInt(); i++; break; case PacketFields.SensorID: incomingPacket.SensorID = packetStr.Substring(i, 2).FromHexStringToInt(); i++; break; case PacketFields.CommandID: incomingPacket.CommandID = (Commands)packetStr.Substring(i, 2).FromHexStringToInt(); i++; break; case PacketFields.Payload: incomingPacket.Payload = packetStr.Substring(i, 2).FromHexStringToInt(); i++; break; case PacketFields.Parity: incomingPacket.Parity = packetStr.Substring(i, 2).FromHexStringToInt(); i = packetStr.Length; //we're done with this packet if (SerialMessageReceived != null && ComputeParity() == incomingPacket.Parity) //&& parity klopt SerialMessageReceived(this, new SerialArduinoMessageEventArgs(incomingPacket)); else { Debug.WriteLine("Parity failed"); } break; default: throw new ArgumentOutOfRangeException(); } } } }
public SerialArduinoMessageEventArgs(Packet pckt) { Packet = pckt; }