/// <summary>
        /// Receive a 64-byte response message from a raw HID device.
        /// </summary>
        /// <param name="resp">64-byte response message.</param>
        public void Receive(IO.Interfaces.Message64.Message resp)
        {
            int error;
            int count;

            if (this.timeout > 0)
            {
                int[] files   = { this.fd };
                int[] events  = { IO.Bindings.libsimpleio.libLinux.POLLIN };
                int[] results = { 0 };

                IO.Bindings.libsimpleio.libLinux.LINUX_poll(1, files, events,
                                                            results, this.timeout, out error);

                if (error != 0)
                {
                    throw new Exception("LINUX_poll() failed", error);
                }
            }

            IO.Bindings.libsimpleio.libHIDRaw.HIDRAW_receive(this.myfd,
                                                             resp.payload, IO.Interfaces.Message64.Message.Size,
                                                             out count, out error);

            if (error != 0)
            {
                throw new Exception("HIDRAW_send() failed", error);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Receive a 64-byte message from a USB HID device.
        /// </summary>
        /// <param name="resp">Message received.</param>
        public void Receive(IO.Interfaces.Message64.Message resp)
        {
            switch (this.transport)
            {
            case Transport.libsimpleio:
            {
                int count;
                int error;

                if (this.timeout > 0)
                {
                    int[] files   = { this.fd };
                    int[] events  = { libLinux.POLLIN };
                    int[] results = { 0 };

                    libLinux.LINUX_poll(1, files, events, results,
                                        this.timeout, out error);

                    if (error != 0)
                    {
                        throw new Exception("LINUX_poll() failed");
                    }
                }

                libHIDRaw.HIDRAW_receive(this.fd, resp.payload,
                                         IO.Interfaces.Message64.Message.Size, out count,
                                         out error);

                if (error != 0)
                {
                    throw new Exception("HIDRAW_send() failed");
                }

                return;
            }

            case Transport.HidSharp:
            {
                byte[] inbuf =
                    new byte[IO.Interfaces.Message64.Message.Size + 1];

                int len = this.hid_stream.Read(inbuf);

                if (len != IO.Interfaces.Message64.Message.Size +
                    this.reportID_offset)
                {
                    throw new Exception("Invalid response message size");
                }

                for (int i = 0; i < IO.Interfaces.Message64.Message.Size; i++)
                {
                    resp.payload[i] = inbuf[i + this.reportID_offset];
                }

                return;
            }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Receive a 64-byte response message from a raw HID device.
        /// </summary>
        /// <param name="resp">64-byte response message.</param>
        public void Receive(IO.Interfaces.Message64.Message resp)
        {
            EndPoint sender = new IPEndPoint(0, 0);

            this.s.ReceiveFrom(resp.payload, ref sender);

            if (!this.server.Equals(sender))
            {
                throw new System.Exception("Message not from server node");
            }
        }
        /// <summary>
        /// Send a 64-byte command message to a raw HID device.
        /// </summary>
        /// <param name="cmd">64-byte command message.</param>
        public void Send(IO.Interfaces.Message64.Message cmd)
        {
            int error;
            int count;

            IO.Bindings.libsimpleio.libHIDRaw.HIDRAW_send(this.myfd,
                                                          cmd.payload, IO.Interfaces.Message64.Message.Size, out count,
                                                          out error);

            if (error != 0)
            {
                throw new Exception("HIDRAW_send() failed", error);
            }
        }
Beispiel #5
0
        static void Main(string[] args)
        {
            Console.WriteLine("\nHID Button and LED Test\n");

            // Open the raw HID device

            IO.Interfaces.Message64.Messenger dev =
                new IO.Objects.libsimpleio.HID.Messenger(IO.Devices.USB.Munts.HID.Vendor,
                                                         IO.Devices.USB.Munts.HID.Product, 0);

            IO.Interfaces.Message64.Message ButtonState =
                new IO.Interfaces.Message64.Message(0);

            IO.Interfaces.Message64.Message LEDCommand =
                new IO.Interfaces.Message64.Message(0);

            // Process incoming keypress reports

            for (;;)
            {
                dev.Receive(ButtonState);

                switch (ButtonState.payload[0])
                {
                case 0:
                    Console.WriteLine("RELEASE");
                    LEDCommand.payload[0] = 0;
                    dev.Send(LEDCommand);
                    break;

                case 1:
                    Console.WriteLine("PRESS");
                    LEDCommand.payload[0] = 1;
                    dev.Send(LEDCommand);
                    break;

                default:
                    Console.WriteLine("ERROR: Unexpected keypress status value");
                    break;
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Send a 64-byte message to a USB HID device.
        /// </summary>
        /// <param name="cmd">Message to be sent.</param>
        public void Send(IO.Interfaces.Message64.Message cmd)
        {
            switch (this.transport)
            {
            case Transport.libsimpleio:
            {
                int count;
                int error;

                libHIDRaw.HIDRAW_send(this.fd, cmd.payload,
                                      IO.Interfaces.Message64.Message.Size, out count,
                                      out error);

                if (error != 0)
                {
                    throw new Exception("HIDRAW_send() failed");
                }

                return;
            }

            case Transport.HidSharp:
            {
                byte[] outbuf =
                    new byte[IO.Interfaces.Message64.Message.Size + 1];

                outbuf[0] = 0;

                for (int i = 0; i < IO.Interfaces.Message64.Message.Size; i++)
                {
                    outbuf[i + this.reportID_offset] = cmd.payload[i];
                }

                this.hid_stream.Write(outbuf);

                return;
            }
            }
        }
Beispiel #7
0
 /// <summary>
 /// Send a 64-byte command message and receive a 64-byte response
 /// message.
 /// </summary>
 /// <param name="cmd">64-byte command message.</param>
 /// <param name="resp">64-byte response message.</param>
 public void Transaction(IO.Interfaces.Message64.Message cmd,
                         IO.Interfaces.Message64.Message resp)
 {
     this.Send(cmd);
     this.Receive(resp);
 }
Beispiel #8
0
 /// <summary>
 /// Send a 64-byte command message to a raw HID device.
 /// </summary>
 /// <param name="cmd">64-byte command message.</param>
 public void Send(IO.Interfaces.Message64.Message cmd)
 {
     this.s.SendTo(cmd.payload, this.server);
 }