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); } } }