コード例 #1
0
 public static Result libusb_get_string_descriptor(this ILibUsb lib, IntPtr deviceHandle,
                                                   byte index, ushort langId, IntPtr data, int length)
 {
     return(lib.libusb_control_transfer(deviceHandle,
                                        (byte)EndpointDirection.In,
                                        (byte)StandardRequest.LIBUSB_REQUEST_GET_DESCRIPTOR,
                                        (ushort)(((byte)DescriptorType.LIBUSB_DT_STRING << 8) | index),
                                        langId,
                                        data,
                                        (ushort)length,
                                        1000));
 }
コード例 #2
0
        static LibUsb()
        {
            switch (Environment.OSVersion.Platform)
            {
            case PlatformID.MacOSX:
            case PlatformID.Unix:
                _libUsb = new LibUsbMac();
                break;

            case PlatformID.Win32NT:
            case PlatformID.Win32S:
            case PlatformID.Win32Windows:
            case PlatformID.WinCE:
                _libUsb = new LibUsbWindows();
                break;
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: aloker/LokerIT.LibUsb
        private static unsafe string GetStringDescriptor(ILibUsb impl, IntPtr deviceHandle, byte index,
                                                         string fallback)
        {
            const int Buffer = 255;

            byte[] str = new byte[Buffer];
            if (index > 0)
            {
                fixed(byte *ptr = str)
                {
                    var res = impl.libusb_get_string_descriptor(deviceHandle, 0, 0, new IntPtr(ptr), Buffer);

                    if ((int)res < 4)
                    {
                        return(fallback);
                    }

                    var langId = (ushort)(str[2] | (str[3] << 8));

                    res = impl.libusb_get_string_descriptor(deviceHandle, index, langId, new IntPtr(ptr), Buffer);
                    if (res < 0)
                    {
                        return(fallback);
                    }

                    if (str[1] != (int)DescriptorType.LIBUSB_DT_STRING)
                    {
                        return(fallback);
                    }

                    if (str[0] > (int)res)
                    {
                        return(fallback);
                    }

                    return(Encoding.Unicode.GetString(str, 2, (int)res));
                }
            }

            return(fallback);
        }