ConfigArgs ParseConfig(byte[] Data) { // 0123456790123456789012345 // $07C 00 S 70 72 00 00 00Z\n ConfigArgs oArgs = new ConfigArgs(); if (Data.Length == 25) { if (Data[1] == 48 && Data[2] == 55) { oArgs.CompassAddress = ParseHex(Data, 4, 3); oArgs.SonarAddress1 = ParseHex(Data, 10, 3); oArgs.SonarAddress2 = ParseHex(Data, 13, 3); oArgs.SonarAddress3 = ParseHex(Data, 16, 3); oArgs.SonarAddress4 = ParseHex(Data, 19, 3); oArgs.SonarAddress5 = ParseHex(Data, 22, 3); } } return(oArgs); }
private void ProcessIncomingData(List <byte> PortBuffer) { byte[] Data; int Front, Back = 0; if (PortBuffer.Count > 0) { Front = PortBuffer.IndexOf((byte)36); if (Front > -1) { Back = PortBuffer.IndexOf((byte)10, Front); if (Back > -1) { Data = new byte[Back - Front]; PortBuffer.CopyTo(Front, Data, 0, Back - Front); Front = ((Data[1] - 48) * 10) + (Data[2] - 48); switch (Front) { case (int)RobotOutputType.Announcement: if (this.AnnounceReceived != null) { AnnounceArgs oArgs = new AnnounceArgs(); this.AnnounceReceived(this, oArgs); } break; case (int)RobotOutputType.Error: if (this.ErrorReceived != null) { ErrorArgs oArgs = ParseError(Data); this.ErrorReceived(this, oArgs); } break; case (int)RobotOutputType.Sensor: if (this.OutputReceived != null) { OutputArgs oArgs = ParseSensor(Data); this.OutputReceived(this, oArgs); } break; case (int)RobotOutputType.Acknowledge: if (this.ACKReceived != null) { ACKArgs oArgs = new ACKArgs(); oArgs.TimeStamp = ParseHex(Data, 3, 6); this.ACKReceived(this, oArgs); } break; case (int)RobotOutputType.Configuration: if (this.ConfigReceived != null) { ConfigArgs oArgs = ParseConfig(Data); this.ConfigReceived(this, oArgs); } break; default: break; } PortBuffer.RemoveRange(0, Back); // Search through the bytes to find the data you want // then remove the data from the list. It is good to // clean up unused bytes (usually everything before // what you're looking for) } // System.Windows.Forms.Message M = new System.Windows.Forms.Message("a"); // MessageReceivedCallBack } } }