예제 #1
0
        public bool GetFeature(byte reportId, byte[] data, int offset, int count)
        {
            lock (lockObject)
            {
                if (reference == null)
                {
                    throw new InvalidOperationException("The HID reference is null.");
                }
                else if (reference.IsInvalid)
                {
                    throw new InvalidOperationException("The HID reference is invalid");
                }

                featureBuffer[0] = reportId;

                GCHandle gch = GCHandle.Alloc(featureBuffer, GCHandleType.Pinned);

                bool ret = Hid.HidD_GetFeature(reference, gch.AddrOfPinnedObject(), (uint)(count + 1));

                gch.Free();

                if (ret)
                {
                    Buffer.BlockCopy(featureBuffer, 1, data, offset, count);
                }

                return(ret);
            }
        }
예제 #2
0
        public bool GetFeature <T>(byte reportId, T data)
            where T : struct
        {
            lock (lockObject)
            {
                if (reference == null)
                {
                    throw new InvalidOperationException("The HID reference is null.");
                }
                else if (reference.IsInvalid)
                {
                    throw new InvalidOperationException("The HID reference is invalid");
                }

                featureBuffer[0] = reportId;

                GCHandle gch = GCHandle.Alloc(featureBuffer, GCHandleType.Pinned);

                bool ret = Hid.HidD_GetFeature(reference, gch.AddrOfPinnedObject(), (uint)Marshal.SizeOf <T>());

                if (ret)
                {
                    data = Marshal.PtrToStructure <T>(gch.AddrOfPinnedObject());
                }

                gch.Free();

                return(ret);
            }
        }
예제 #3
0
        public bool GetFeature(byte[] rawBuffer, int count)
        {
            lock (lockObject)
            {
                if (reference == null)
                {
                    throw new InvalidOperationException("The HID reference is null.");
                }
                else if (reference.IsInvalid)
                {
                    throw new InvalidOperationException("The HID reference is invalid");
                }

                GCHandle gch = GCHandle.Alloc(rawBuffer, GCHandleType.Pinned);

                bool ret = Hid.HidD_GetFeature(reference, gch.AddrOfPinnedObject(), (uint)count);

                gch.Free();

                return(ret);
            }
        }
예제 #4
0
 public bool GetFeature(int reportNumber, out byte[] result)
 {
     result    = new byte[64];
     result[0] = Convert.ToByte(reportNumber);
     return(Hid.HidD_GetFeature(this._handle, ref result[0], result.Length));
 }