Пример #1
0
        private byte[] ReadOneFrame(IPack pack, bool isFinish)
        {
            byte[] result = new byte[100];
            int pos = 0;
            byte before = 0;
            while (Box.ReadBytes(result, pos++, 1) == 1)
            {
                if (before == 0x0D && (result[pos - 1] == 0x0A))
                {
                    break;
                }
                before = result[pos - 1];
            }

            if (before == 0x0D && result[pos - 1] == 0x0A)
            {
                // break normal
                result = pack.Unpack(result, 0, pos);
            }
            else
            {
                result = null;
            }
            FinishExecute(isFinish);
            return result;
        }
Пример #2
0
        private byte[] ReadOneFrame(IPack pack, bool isFinish)
        {
            byte[] result = new byte[100];
            int    pos    = 0;
            byte   before = 0;

            while (Box.ReadBytes(result, pos++, 1) == 1)
            {
                if (before == 0x0D && (result[pos - 1] == 0x0A))
                {
                    break;
                }
                before = result[pos - 1];
            }

            if (before == 0x0D && result[pos - 1] == 0x0A)
            {
                // break normal
                result = pack.Unpack(result, 0, pos);
            }
            else
            {
                result = null;
            }
            FinishExecute(isFinish);
            return(result);
        }
Пример #3
0
        public byte[] ReadFrames(IPack pack)
        {
            byte[] buff = new byte[128];
            int    i;

            for (i = 0; i < buff.Length; i++)
            {
                if (Box.ReadBytes(buff, i, 1) != 1)
                {
                    break;
                }
            }

            if (i < 5)
            {
                FinishExecute(true);
                return(null);
            }

            List <byte> result = new List <byte>();
            int         j      = 3;
            int         k      = 0;

            while (j < i) // Multi Frame
            {
                if ((buff[k] == buff[j]) &&
                    (buff[k + 1] == buff[j + 1]) &&
                    (buff[k + 2] == buff[j + 2]))
                {
                    result.AddRange(pack.Unpack(buff, k, j - k));
                    k = j;
                }
                j++;
            }

            result.AddRange(pack.Unpack(buff, k, j - k)); // Add last frame or it's a single frame
            FinishExecute(true);

            return(result.ToArray());
        }
Пример #4
0
        public byte[] ReadOneFrame(IPack pack)
        {
            byte[] buff = new byte[128];
            int i;
            for (i = 0; i < buff.Length; i++)
            {
                if (Box.ReadBytes(buff, i, 1) != 1)
                    break;
            }

            if (i < 5 || i > 11)
            {
                return null;
            }

            return pack.Unpack(buff, 0, i);
        }
Пример #5
0
        public byte[] ReadOneFrame(IPack pack)
        {
            byte[] buff = new byte[128];
            int    i;

            for (i = 0; i < buff.Length; i++)
            {
                if (Box.ReadBytes(buff, i, 1) != 1)
                {
                    break;
                }
            }

            if (i < 5 || i > 11)
            {
                return(null);
            }

            return(pack.Unpack(buff, 0, i));
        }
Пример #6
0
        private byte[] ReadOneFrame(IPack pack, bool isFinish)
        {
            byte[] temp        = new byte[3];
            byte[] result      = new byte[255];
            int    frameLength = 0;
            int    length      = 0;
            byte   checksum    = 0;
            int    i;

            length = Box.ReadBytes(temp, 0, temp.Length);

            if (length <= 0)
            {
                FinishExecute(isFinish);
                return(null);
            }

            if (temp[1] == options.SourceAddress)
            {
                if (temp[0] == 0x80)
                {
                    byte[] b = new byte[1];
                    length = Box.ReadBytes(b, 0, 1);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return(null);
                    }

                    length = Convert.ToInt32(b[0]);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return(null);
                    }

                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    Array.Copy(b, 0, result, frameLength, 1);
                    ++frameLength;
                    length       = Box.ReadBytes(result, KWPPack.KWP80_HEADER_LENGTH, length + KWPPack.KWP_CHECKSUM_LENGTH);
                    frameLength += length;
                }
                else
                {
                    length = Convert.ToInt32(temp[0] - 0x80);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return(null);
                    }

                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    length       = Box.ReadBytes(result, temp.Length, length + KWPPack.KWP_CHECKSUM_LENGTH);
                    frameLength += length;
                }
            }
            else
            {
                if (temp[0] == 0x00)
                {
                    length = Convert.ToInt32(temp[1]);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return(null);
                    }
                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    length       = Box.ReadBytes(result, temp.Length, length);
                    frameLength += length;
                }
                else
                {
                    length = Convert.ToInt32(temp[0]);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return(null);
                    }

                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    length       = Box.ReadBytes(result, temp.Length, length - KWPPack.KWP_CHECKSUM_LENGTH);
                    frameLength += length;
                }
            }

            FinishExecute(isFinish);
            if (frameLength <= 0)
            {
                return(null);
            }

            for (i = 0; i < frameLength - 1; i++)
            {
                checksum += result[i];
            }

            if (checksum != result[frameLength - 1])
            {
                return(null);
            }

            return(pack.Unpack(result, 0, frameLength));
        }
Пример #7
0
        public byte[] ReadFrames(IPack pack)
        {
            byte[] buff = new byte[128];
            int i;
            for (i = 0; i < buff.Length; i++)
            {
                if (Box.ReadBytes(buff, i, 1) != 1)
                    break;
            }

            if (i < 5)
            {
                FinishExecute(true);
                return null;
            }

            List<byte> result = new List<byte>();
            int j = 3;
            int k = 0;

            while (j < i) // Multi Frame
            {
                if ((buff[k] == buff[j]) &&
                    (buff[k + 1] == buff[j + 1]) &&
                    (buff[k + 2] == buff[j + 2]))
                {
                    result.AddRange(pack.Unpack(buff, k, j - k));
                    k = j;
                }
                j++;
            }

            result.AddRange(pack.Unpack(buff, k, j - k)); // Add last frame or it's a single frame
            FinishExecute(true);

            return result.ToArray();
        }
Пример #8
0
        private byte[] ReadOneFrame(IPack pack, bool isFinish)
        {
            byte[] temp = new byte[3];
            byte[] result = new byte[255];
            int frameLength = 0;
            int length = 0;
            byte checksum = 0;
            int i;

            length = Box.ReadBytes(temp, 0, temp.Length);

            if (length <= 0)
            {
                FinishExecute(isFinish);
                return null;
            }

            if (temp[1] == options.SourceAddress)
            {
                if (temp[0] == 0x80)
                {
                    byte[] b = new byte[1];
                    length = Box.ReadBytes(b, 0, 1);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return null;
                    }

                    length = Convert.ToInt32(b[0]);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return null;
                    }

                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    Array.Copy(b, 0, result, frameLength, 1);
                    ++frameLength;
                    length = Box.ReadBytes(result, KWPPack.KWP80_HEADER_LENGTH, length + KWPPack.KWP_CHECKSUM_LENGTH);
                    frameLength += length;
                }
                else
                {
                    length = Convert.ToInt32(temp[0] - 0x80);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return null;
                    }

                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    length = Box.ReadBytes(result, temp.Length, length + KWPPack.KWP_CHECKSUM_LENGTH);
                    frameLength += length;
                }
            }
            else
            {
                if (temp[0] == 0x00)
                {
                    length = Convert.ToInt32(temp[1]);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return null;
                    }
                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    length = Box.ReadBytes(result, temp.Length, length);
                    frameLength += length;
                }
                else
                {
                    length = Convert.ToInt32(temp[0]);
                    if (length <= 0)
                    {
                        FinishExecute(isFinish);
                        return null;
                    }

                    Array.Copy(temp, 0, result, 0, temp.Length);
                    frameLength += temp.Length;
                    length = Box.ReadBytes(result, temp.Length, length - KWPPack.KWP_CHECKSUM_LENGTH);
                    frameLength += length;
                }
            }

            FinishExecute(isFinish);
            if (frameLength <= 0)
            {
                return null;
            }

            for (i = 0; i < frameLength - 1; i++)
            {
                checksum += result[i];
            }

            if (checksum != result[frameLength - 1])
            {
                return null;
            }

            return pack.Unpack(result, 0, frameLength);
        }