public static PacketType ParsePacket(byte[] buffer, out PacketBase packet, out string errorMessage)
{
// Initalize output paramters
packet = null;
errorMessage = null;
// Check parameters
if (buffer == null)
{
errorMessage = SysLogger.LogError(new ArgumentNullException("buffer", "Attempted to parse an empty packet buffer."));
return PacketType.U_N_D_F_I_N_E_D;
}
if (buffer.Length < PREAMBLE_SIZE)
{
errorMessage = SysLogger.LogError(new rfidInvalidPacketException(rfidErrorCode.PacketDataTooSmall, buffer, 0));
return PacketType.U_N_D_F_I_N_E_D;
}
// Initialize locals
PacketType rslt = GetPacketTypeFromBuffer(buffer, 0);
if (rslt == PacketType.U_N_D_F_I_N_E_D)
{
errorMessage = SysLogger.LogError(new rfidInvalidPacketException(rfidErrorCode.UnknownPacketType, buffer, 0));
return PacketType.U_N_D_F_I_N_E_D;
}
packet = PacketData.CreatePacket(rslt);
try
{
Parse_Fields(packet, buffer, 0, FullPacketBytes(buffer, 0));
} catch (rfidInvalidPacketException exp)
{
errorMessage =SysLogger.LogError(exp);
packet = null;
return PacketType.U_N_D_F_I_N_E_D;
}
return rslt;
}