Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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) { }
        }