/// <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); } }
/// <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; } } }
/// <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); } }
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; } } }
/// <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; } } }
/// <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); }
/// <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); }