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);
        }
Beispiel #2
0
        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);
        }