Exemplo n.º 1
0
        private void ParsePackage(ref string package)
        {
            if (package.Length > 1)
            {
                CANPackage pack = new CANPackage();
                int        i, j;
                switch (package[0])
                {
                case 't':
                    pack.FrameType = CanFrameType.CAN_RTR_DATA;
                    pack.IdType    = CanIdType.CAN_ID_STD;
                    break;

                case 'T':
                    pack.FrameType = CanFrameType.CAN_RTR_DATA;
                    pack.IdType    = CanIdType.CAN_ID_EXT;
                    break;

                case 'r':
                    pack.FrameType = CanFrameType.CAN_RTR_REMOTE;
                    pack.IdType    = CanIdType.CAN_ID_STD;
                    break;

                case 'R':
                    pack.FrameType = CanFrameType.CAN_RTR_REMOTE;
                    pack.IdType    = CanIdType.CAN_ID_EXT;
                    break;

                default:
                    return;
                }

                if (pack.IdType == CanIdType.CAN_ID_STD)
                {
                    j = 3;
                }
                else if (pack.IdType == CanIdType.CAN_ID_EXT)
                {
                    j = 8;
                }
                else
                {
                    return;
                }

                for (i = 1; i <= j;)
                {
                    pack.ID <<= 4;
                    pack.ID  |= GetPackData(ref package, i++);
                }
                pack.DLC = (UInt16)GetPackData(ref package, i++);
                if (pack.DLC <= 8)
                {
                    for (j = 0; j < pack.DLC; j++)
                    {
                        pack.Data[j]  = (byte)(GetPackData(ref package, i++) << 4);
                        pack.Data[j] |= GetPackData(ref package, i++);
                    }
                }
                if (m_rolling != null)
                {
                    m_rolling.Add(pack);
                }
                if (m_matrix != null)
                {
                    m_matrix.Add(pack);
                }
            }
        }