private void TX_Sync(DevicePacket devicePacket) { SerialPort_Lock.WaitOne(); try { DashboardPacket packet = new DashboardPacket(); packet.Sync1 = '$'; packet.Sync2 = '&'; packet.length = (UInt16)(devicePacket.Length); packet.id = (byte)devicePacket.ID; packet.crc = 0xAA; foreach (var t in devicePacket.Data) { packet.crc += t; } // Write header byte[] bPacket = ByteMethods.ToBytes(packet); SP.Write(bPacket, 0, 6); // Write packet data SP.Write(devicePacket.Data, 0, devicePacket.Length); byte[] dump = new byte[64]; for (int lol = 0; lol < 64; lol++) { dump[lol] = 64; } SP.Write(dump, 0, 16); } catch (Exception ex) { } SerialPort_Lock.Release(); }
public static T ToObject <T>(byte[] data) { T item = (T)Activator.CreateInstance(typeof(T)); object o = (object)item; ByteMethods.ToObject(data, ref o); return((T)o); }
private void SP_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { while (SP.BytesToRead > 0) { byte[] bf = new byte[SP.BytesToRead]; SP.Read(bf, 0, bf.Length); RX_Buffer.AddRange(bf); } // Search for packages for (int i = 0; i < RX_Buffer.Count; i++) { if (RX_Buffer[i] == '$' && RX_Buffer[i + 1] == '&' && RX_Buffer.Count - i > 4) { int length = BitConverter.ToUInt16(RX_Buffer.ToArray(), i + 2); int id = RX_Buffer[i + 4]; byte[] data = new byte[length]; if (length + i > RX_Buffer.Count && length < 128) { break; } ByteMethods.memcpy(data, RX_Buffer.ToArray(), length, 0, i + 5); DevicePacket packet = new DevicePacket(id, data); if (RX != null) { RX(packet, this); } // Done if (length + i > RX_Buffer.Count) { RX_Buffer.Clear(); } else { RX_Buffer.RemoveRange(i, length + 5); } } } if (RX_Buffer.Count > 300) { RX_Buffer.Clear(); } } catch (Exception ex) { } }