| From 2fb04c2245167e247b95400112b5dbea12fcb206 Mon Sep 17 00:00:00 2001 |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| Date: Wed, 30 Dec 2015 20:02:29 +0100 |
| Subject: [PATCH] hidtest: dont' use a C++ source file, since it's pure C |
| |
| This allows to build the test program with toolchains that don't have |
| C++ support. |
| |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| --- |
| hidtest/Makefile.am | 6 +- |
| hidtest/hidtest.c | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| hidtest/hidtest.cpp | 194 ---------------------------------------------------- |
| 3 files changed, 197 insertions(+), 197 deletions(-) |
| create mode 100644 hidtest/hidtest.c |
| delete mode 100644 hidtest/hidtest.cpp |
| |
| diff --git a/hidtest/Makefile.am b/hidtest/Makefile.am |
| index d278644..5f52c3f 100644 |
| --- a/hidtest/Makefile.am |
| +++ b/hidtest/Makefile.am |
| @@ -4,17 +4,17 @@ AM_CPPFLAGS = -I$(top_srcdir)/hidapi/ |
| if OS_LINUX |
| noinst_PROGRAMS = hidtest-libusb hidtest-hidraw |
| |
| -hidtest_hidraw_SOURCES = hidtest.cpp |
| +hidtest_hidraw_SOURCES = hidtest.c |
| hidtest_hidraw_LDADD = $(top_builddir)/linux/libhidapi-hidraw.la |
| |
| -hidtest_libusb_SOURCES = hidtest.cpp |
| +hidtest_libusb_SOURCES = hidtest.c |
| hidtest_libusb_LDADD = $(top_builddir)/libusb/libhidapi-libusb.la |
| else |
| |
| # Other OS's |
| noinst_PROGRAMS = hidtest |
| |
| -hidtest_SOURCES = hidtest.cpp |
| +hidtest_SOURCES = hidtest.c |
| hidtest_LDADD = $(top_builddir)/$(backend)/libhidapi.la |
| |
| endif |
| diff --git a/hidtest/hidtest.c b/hidtest/hidtest.c |
| new file mode 100644 |
| index 0000000..94f0a5c |
| --- /dev/null |
| +++ b/hidtest/hidtest.c |
| @@ -0,0 +1,194 @@ |
| +/******************************************************* |
| + Windows HID simplification |
| + |
| + Alan Ott |
| + Signal 11 Software |
| + |
| + 8/22/2009 |
| + |
| + Copyright 2009 |
| + |
| + This contents of this file may be used by anyone |
| + for any reason without any conditions and may be |
| + used as a starting point for your own applications |
| + which use HIDAPI. |
| +********************************************************/ |
| + |
| +#include <stdio.h> |
| +#include <wchar.h> |
| +#include <string.h> |
| +#include <stdlib.h> |
| +#include "hidapi.h" |
| + |
| +// Headers needed for sleeping. |
| +#ifdef _WIN32 |
| + #include <windows.h> |
| +#else |
| + #include <unistd.h> |
| +#endif |
| + |
| +int main(int argc, char* argv[]) |
| +{ |
| + int res; |
| + unsigned char buf[256]; |
| + #define MAX_STR 255 |
| + wchar_t wstr[MAX_STR]; |
| + hid_device *handle; |
| + int i; |
| + |
| +#ifdef WIN32 |
| + UNREFERENCED_PARAMETER(argc); |
| + UNREFERENCED_PARAMETER(argv); |
| +#endif |
| + |
| + struct hid_device_info *devs, *cur_dev; |
| + |
| + if (hid_init()) |
| + return -1; |
| + |
| + devs = hid_enumerate(0x0, 0x0); |
| + cur_dev = devs; |
| + while (cur_dev) { |
| + printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number); |
| + printf("\n"); |
| + printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string); |
| + printf(" Product: %ls\n", cur_dev->product_string); |
| + printf(" Release: %hx\n", cur_dev->release_number); |
| + printf(" Interface: %d\n", cur_dev->interface_number); |
| + printf("\n"); |
| + cur_dev = cur_dev->next; |
| + } |
| + hid_free_enumeration(devs); |
| + |
| + // Set up the command buffer. |
| + memset(buf,0x00,sizeof(buf)); |
| + buf[0] = 0x01; |
| + buf[1] = 0x81; |
| + |
| + |
| + // Open the device using the VID, PID, |
| + // and optionally the Serial number. |
| + ////handle = hid_open(0x4d8, 0x3f, L"12345"); |
| + handle = hid_open(0x4d8, 0x3f, NULL); |
| + if (!handle) { |
| + printf("unable to open device\n"); |
| + return 1; |
| + } |
| + |
| + // Read the Manufacturer String |
| + wstr[0] = 0x0000; |
| + res = hid_get_manufacturer_string(handle, wstr, MAX_STR); |
| + if (res < 0) |
| + printf("Unable to read manufacturer string\n"); |
| + printf("Manufacturer String: %ls\n", wstr); |
| + |
| + // Read the Product String |
| + wstr[0] = 0x0000; |
| + res = hid_get_product_string(handle, wstr, MAX_STR); |
| + if (res < 0) |
| + printf("Unable to read product string\n"); |
| + printf("Product String: %ls\n", wstr); |
| + |
| + // Read the Serial Number String |
| + wstr[0] = 0x0000; |
| + res = hid_get_serial_number_string(handle, wstr, MAX_STR); |
| + if (res < 0) |
| + printf("Unable to read serial number string\n"); |
| + printf("Serial Number String: (%d) %ls", wstr[0], wstr); |
| + printf("\n"); |
| + |
| + // Read Indexed String 1 |
| + wstr[0] = 0x0000; |
| + res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); |
| + if (res < 0) |
| + printf("Unable to read indexed string 1\n"); |
| + printf("Indexed String 1: %ls\n", wstr); |
| + |
| + // Set the hid_read() function to be non-blocking. |
| + hid_set_nonblocking(handle, 1); |
| + |
| + // Try to read from the device. There shoud be no |
| + // data here, but execution should not block. |
| + res = hid_read(handle, buf, 17); |
| + |
| + // Send a Feature Report to the device |
| + buf[0] = 0x2; |
| + buf[1] = 0xa0; |
| + buf[2] = 0x0a; |
| + buf[3] = 0x00; |
| + buf[4] = 0x00; |
| + res = hid_send_feature_report(handle, buf, 17); |
| + if (res < 0) { |
| + printf("Unable to send a feature report.\n"); |
| + } |
| + |
| + memset(buf,0,sizeof(buf)); |
| + |
| + // Read a Feature Report from the device |
| + buf[0] = 0x2; |
| + res = hid_get_feature_report(handle, buf, sizeof(buf)); |
| + if (res < 0) { |
| + printf("Unable to get a feature report.\n"); |
| + printf("%ls", hid_error(handle)); |
| + } |
| + else { |
| + // Print out the returned buffer. |
| + printf("Feature Report\n "); |
| + for (i = 0; i < res; i++) |
| + printf("%02hhx ", buf[i]); |
| + printf("\n"); |
| + } |
| + |
| + memset(buf,0,sizeof(buf)); |
| + |
| + // Toggle LED (cmd 0x80). The first byte is the report number (0x1). |
| + buf[0] = 0x1; |
| + buf[1] = 0x80; |
| + res = hid_write(handle, buf, 17); |
| + if (res < 0) { |
| + printf("Unable to write()\n"); |
| + printf("Error: %ls\n", hid_error(handle)); |
| + } |
| + |
| + |
| + // Request state (cmd 0x81). The first byte is the report number (0x1). |
| + buf[0] = 0x1; |
| + buf[1] = 0x81; |
| + hid_write(handle, buf, 17); |
| + if (res < 0) |
| + printf("Unable to write() (2)\n"); |
| + |
| + // Read requested state. hid_read() has been set to be |
| + // non-blocking by the call to hid_set_nonblocking() above. |
| + // This loop demonstrates the non-blocking nature of hid_read(). |
| + res = 0; |
| + while (res == 0) { |
| + res = hid_read(handle, buf, sizeof(buf)); |
| + if (res == 0) |
| + printf("waiting...\n"); |
| + if (res < 0) |
| + printf("Unable to read()\n"); |
| + #ifdef WIN32 |
| + Sleep(500); |
| + #else |
| + usleep(500*1000); |
| + #endif |
| + } |
| + |
| + printf("Data read:\n "); |
| + // Print out the returned buffer. |
| + for (i = 0; i < res; i++) |
| + printf("%02hhx ", buf[i]); |
| + printf("\n"); |
| + |
| + hid_close(handle); |
| + |
| + /* Free static HIDAPI objects. */ |
| + hid_exit(); |
| + |
| +#ifdef WIN32 |
| + system("pause"); |
| +#endif |
| + |
| + return 0; |
| +} |
| diff --git a/hidtest/hidtest.cpp b/hidtest/hidtest.cpp |
| deleted file mode 100644 |
| index 94f0a5c..0000000 |
| --- a/hidtest/hidtest.cpp |
| +++ /dev/null |
| @@ -1,194 +0,0 @@ |
| -/******************************************************* |
| - Windows HID simplification |
| - |
| - Alan Ott |
| - Signal 11 Software |
| - |
| - 8/22/2009 |
| - |
| - Copyright 2009 |
| - |
| - This contents of this file may be used by anyone |
| - for any reason without any conditions and may be |
| - used as a starting point for your own applications |
| - which use HIDAPI. |
| -********************************************************/ |
| - |
| -#include <stdio.h> |
| -#include <wchar.h> |
| -#include <string.h> |
| -#include <stdlib.h> |
| -#include "hidapi.h" |
| - |
| -// Headers needed for sleeping. |
| -#ifdef _WIN32 |
| - #include <windows.h> |
| -#else |
| - #include <unistd.h> |
| -#endif |
| - |
| -int main(int argc, char* argv[]) |
| -{ |
| - int res; |
| - unsigned char buf[256]; |
| - #define MAX_STR 255 |
| - wchar_t wstr[MAX_STR]; |
| - hid_device *handle; |
| - int i; |
| - |
| -#ifdef WIN32 |
| - UNREFERENCED_PARAMETER(argc); |
| - UNREFERENCED_PARAMETER(argv); |
| -#endif |
| - |
| - struct hid_device_info *devs, *cur_dev; |
| - |
| - if (hid_init()) |
| - return -1; |
| - |
| - devs = hid_enumerate(0x0, 0x0); |
| - cur_dev = devs; |
| - while (cur_dev) { |
| - printf("Device Found\n type: %04hx %04hx\n path: %s\n serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number); |
| - printf("\n"); |
| - printf(" Manufacturer: %ls\n", cur_dev->manufacturer_string); |
| - printf(" Product: %ls\n", cur_dev->product_string); |
| - printf(" Release: %hx\n", cur_dev->release_number); |
| - printf(" Interface: %d\n", cur_dev->interface_number); |
| - printf("\n"); |
| - cur_dev = cur_dev->next; |
| - } |
| - hid_free_enumeration(devs); |
| - |
| - // Set up the command buffer. |
| - memset(buf,0x00,sizeof(buf)); |
| - buf[0] = 0x01; |
| - buf[1] = 0x81; |
| - |
| - |
| - // Open the device using the VID, PID, |
| - // and optionally the Serial number. |
| - ////handle = hid_open(0x4d8, 0x3f, L"12345"); |
| - handle = hid_open(0x4d8, 0x3f, NULL); |
| - if (!handle) { |
| - printf("unable to open device\n"); |
| - return 1; |
| - } |
| - |
| - // Read the Manufacturer String |
| - wstr[0] = 0x0000; |
| - res = hid_get_manufacturer_string(handle, wstr, MAX_STR); |
| - if (res < 0) |
| - printf("Unable to read manufacturer string\n"); |
| - printf("Manufacturer String: %ls\n", wstr); |
| - |
| - // Read the Product String |
| - wstr[0] = 0x0000; |
| - res = hid_get_product_string(handle, wstr, MAX_STR); |
| - if (res < 0) |
| - printf("Unable to read product string\n"); |
| - printf("Product String: %ls\n", wstr); |
| - |
| - // Read the Serial Number String |
| - wstr[0] = 0x0000; |
| - res = hid_get_serial_number_string(handle, wstr, MAX_STR); |
| - if (res < 0) |
| - printf("Unable to read serial number string\n"); |
| - printf("Serial Number String: (%d) %ls", wstr[0], wstr); |
| - printf("\n"); |
| - |
| - // Read Indexed String 1 |
| - wstr[0] = 0x0000; |
| - res = hid_get_indexed_string(handle, 1, wstr, MAX_STR); |
| - if (res < 0) |
| - printf("Unable to read indexed string 1\n"); |
| - printf("Indexed String 1: %ls\n", wstr); |
| - |
| - // Set the hid_read() function to be non-blocking. |
| - hid_set_nonblocking(handle, 1); |
| - |
| - // Try to read from the device. There shoud be no |
| - // data here, but execution should not block. |
| - res = hid_read(handle, buf, 17); |
| - |
| - // Send a Feature Report to the device |
| - buf[0] = 0x2; |
| - buf[1] = 0xa0; |
| - buf[2] = 0x0a; |
| - buf[3] = 0x00; |
| - buf[4] = 0x00; |
| - res = hid_send_feature_report(handle, buf, 17); |
| - if (res < 0) { |
| - printf("Unable to send a feature report.\n"); |
| - } |
| - |
| - memset(buf,0,sizeof(buf)); |
| - |
| - // Read a Feature Report from the device |
| - buf[0] = 0x2; |
| - res = hid_get_feature_report(handle, buf, sizeof(buf)); |
| - if (res < 0) { |
| - printf("Unable to get a feature report.\n"); |
| - printf("%ls", hid_error(handle)); |
| - } |
| - else { |
| - // Print out the returned buffer. |
| - printf("Feature Report\n "); |
| - for (i = 0; i < res; i++) |
| - printf("%02hhx ", buf[i]); |
| - printf("\n"); |
| - } |
| - |
| - memset(buf,0,sizeof(buf)); |
| - |
| - // Toggle LED (cmd 0x80). The first byte is the report number (0x1). |
| - buf[0] = 0x1; |
| - buf[1] = 0x80; |
| - res = hid_write(handle, buf, 17); |
| - if (res < 0) { |
| - printf("Unable to write()\n"); |
| - printf("Error: %ls\n", hid_error(handle)); |
| - } |
| - |
| - |
| - // Request state (cmd 0x81). The first byte is the report number (0x1). |
| - buf[0] = 0x1; |
| - buf[1] = 0x81; |
| - hid_write(handle, buf, 17); |
| - if (res < 0) |
| - printf("Unable to write() (2)\n"); |
| - |
| - // Read requested state. hid_read() has been set to be |
| - // non-blocking by the call to hid_set_nonblocking() above. |
| - // This loop demonstrates the non-blocking nature of hid_read(). |
| - res = 0; |
| - while (res == 0) { |
| - res = hid_read(handle, buf, sizeof(buf)); |
| - if (res == 0) |
| - printf("waiting...\n"); |
| - if (res < 0) |
| - printf("Unable to read()\n"); |
| - #ifdef WIN32 |
| - Sleep(500); |
| - #else |
| - usleep(500*1000); |
| - #endif |
| - } |
| - |
| - printf("Data read:\n "); |
| - // Print out the returned buffer. |
| - for (i = 0; i < res; i++) |
| - printf("%02hhx ", buf[i]); |
| - printf("\n"); |
| - |
| - hid_close(handle); |
| - |
| - /* Free static HIDAPI objects. */ |
| - hid_exit(); |
| - |
| -#ifdef WIN32 |
| - system("pause"); |
| -#endif |
| - |
| - return 0; |
| -} |
| -- |
| 2.7.4 |
| |