protected EusbType GetPduType(byte[] data) { if (null == data) return EusbType.UNKNOWN; EusbPdu pdu = new EusbPdu(); if (!PduMarshaler.Unmarshal(data, pdu)) { return EusbType.UNKNOWN; } switch (pdu.Mask) { case Mask_Values.STREAM_ID_NONE: { return EusbType.RIM_EXCHANGE_CAPABILITY_REQUEST; } case Mask_Values.STREAM_ID_PROXY: { if (pdu.InterfaceId == (uint)EusbInterfaceId_Values.ADD_VIRTUAL_CHANNEL_OR_DEVICE) { EusbRequestPdu requestPdu = new EusbRequestPdu(); if (!PduMarshaler.Unmarshal(data, requestPdu)) { return EusbType.UNKNOWN; } switch ((FunctionId_Values)requestPdu.FunctionId) { case FunctionId_Values.ADD_DEVICE: return EusbType.ADD_DEVICE; case FunctionId_Values.ADD_VIRTUAL_CHANNEL: return EusbType.ADD_VIRTUAL_CHANNEL; default: break; } } else if (pdu.InterfaceId == (uint)EusbInterfaceId_Values.CHANNEL_CREATED_CLIENT) { return EusbType.CHANNEL_CREATED; } else { EusbRequestPdu requestPdu = new EusbRequestPdu(); if (!PduMarshaler.Unmarshal(data, requestPdu)) { return EusbType.UNKNOWN; } if (requestPdu.InterfaceId == RequestCompletionInterfaceId) { switch ((FunctionId_Values)requestPdu.FunctionId) { case FunctionId_Values.IOCONTROL_COMPLETION: return EusbType.IOCONTROL_COMPLETION; case FunctionId_Values.URB_COMPLETION: return EusbType.URB_COMPLETION; case FunctionId_Values.URB_COMPLETION_NO_DATA: return EusbType.URB_COMPLETION_NO_DATA; default: break; } } } } break; case Mask_Values.STREAM_ID_STUB: { return EusbType.QUERY_DEVICE_TEXT; } default: return EusbType.UNKNOWN; } return EusbType.UNKNOWN; }
private EusbType GetPduType(byte[] data) { if (null == data) return EusbType.UNKNOWN; EusbRequestPdu pdu = new EusbRequestPdu(); if (!PduMarshaler.Unmarshal(data, pdu)) { return EusbType.UNKNOWN; } switch (pdu.Mask) { case Mask_Values.STREAM_ID_NONE: { return EusbType.RIM_EXCHANGE_CAPABILITY_REQUEST; } case Mask_Values.STREAM_ID_PROXY: { if (pdu.InterfaceId == (uint)EusbInterfaceId_Values.ADD_VIRTUAL_CHANNEL_OR_DEVICE) { EusbRequestPdu requestPdu = new EusbRequestPdu(); if (!PduMarshaler.Unmarshal(data, requestPdu)) { return EusbType.UNKNOWN; } switch ((FunctionId_Values)requestPdu.FunctionId) { case FunctionId_Values.ADD_DEVICE: return EusbType.ADD_DEVICE; case FunctionId_Values.ADD_VIRTUAL_CHANNEL: return EusbType.ADD_VIRTUAL_CHANNEL; default: break; } } else if (pdu.InterfaceId == (uint)EusbInterfaceId_Values.CHANNEL_CREATED_SERVER) { return EusbType.CHANNEL_CREATED; } else { EusbRequestPdu requestPdu = new EusbRequestPdu(); if (!PduMarshaler.Unmarshal(data, requestPdu)) { return EusbType.UNKNOWN; } switch ((FunctionId_Values)requestPdu.FunctionId) { case FunctionId_Values.CANCEL_REQUEST: return EusbType.CANCEL_REQUEST; case FunctionId_Values.REGISTER_REQUEST_CALLBACK: return EusbType.REGISTER_REQUEST_CALLBACK; case FunctionId_Values.IO_CONTROL: return EusbType.IO_CONTROL; case FunctionId_Values.INTERNAL_IO_CONTROL: return EusbType.INTERNAL_IO_CONTROL; case FunctionId_Values.QUERY_DEVICE_TEXT: return EusbType.QUERY_DEVICE_TEXT; case FunctionId_Values.TRANSFER_IN_REQUEST: return EusbType.TRANSFER_IN_REQUEST; case FunctionId_Values.TRANSFER_OUT_REQUEST: return EusbType.TRANSFER_OUT_REQUEST; case FunctionId_Values.RETRACT_DEVICE: return EusbType.RETRACT_DEVICE; default: break; } } } break; case Mask_Values.STREAM_ID_STUB: { return EusbType.QUERY_DEVICE_TEXT; } default: return EusbType.UNKNOWN; } return EusbType.UNKNOWN; }