rb-blink1 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,7 +8,7 @@
8
8
  8/22/2009
9
9
 
10
10
  Copyright 2009, All Rights Reserved.
11
-
11
+
12
12
  At the discretion of the user of this library,
13
13
  this software may be licensed under the terms of the
14
14
  GNU Public License v3, a BSD-Style license, or the
@@ -36,7 +36,7 @@ typedef LONG NTSTATUS;
36
36
  #define _wcsdup wcsdup
37
37
  #endif
38
38
 
39
- //#define HIDAPI_USE_DDK
39
+ /*#define HIDAPI_USE_DDK*/
40
40
 
41
41
  #ifdef __cplusplus
42
42
  extern "C" {
@@ -47,13 +47,13 @@ extern "C" {
47
47
  #include <hidsdi.h>
48
48
  #endif
49
49
 
50
- // Copied from inc/ddk/hidclass.h, part of the Windows DDK.
50
+ /* Copied from inc/ddk/hidclass.h, part of the Windows DDK. */
51
51
  #define HID_OUT_CTL_CODE(id) \
52
52
  CTL_CODE(FILE_DEVICE_KEYBOARD, (id), METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
53
53
  #define IOCTL_HID_GET_FEATURE HID_OUT_CTL_CODE(100)
54
54
 
55
55
  #ifdef __cplusplus
56
- } // extern "C"
56
+ } /* extern "C" */
57
57
  #endif
58
58
 
59
59
  #include <stdio.h>
@@ -63,7 +63,7 @@ extern "C" {
63
63
  #include "hidapi.h"
64
64
 
65
65
  #ifdef _MSC_VER
66
- // Thanks Microsoft, but I know how to use strncpy().
66
+ /* Thanks Microsoft, but I know how to use strncpy(). */
67
67
  #pragma warning(disable:4996)
68
68
  #endif
69
69
 
@@ -72,10 +72,10 @@ extern "C" {
72
72
  #endif
73
73
 
74
74
  #ifndef HIDAPI_USE_DDK
75
- // Since we're not building with the DDK, and the HID header
76
- // files aren't part of the SDK, we have to define all this
77
- // stuff here. In lookup_functions(), the function pointers
78
- // defined below are set.
75
+ /* Since we're not building with the DDK, and the HID header
76
+ files aren't part of the SDK, we have to define all this
77
+ stuff here. In lookup_functions(), the function pointers
78
+ defined below are set. */
79
79
  typedef struct _HIDD_ATTRIBUTES{
80
80
  ULONG Size;
81
81
  USHORT VendorID;
@@ -120,7 +120,7 @@ extern "C" {
120
120
 
121
121
  static HMODULE lib_handle = NULL;
122
122
  static BOOLEAN initialized = FALSE;
123
- #endif // HIDAPI_USE_DDK
123
+ #endif /* HIDAPI_USE_DDK */
124
124
 
125
125
  struct hid_device_ {
126
126
  HANDLE device_handle;
@@ -151,6 +151,14 @@ static hid_device *new_hid_device()
151
151
  return dev;
152
152
  }
153
153
 
154
+ static void free_hid_device(hid_device *dev)
155
+ {
156
+ CloseHandle(dev->ol.hEvent);
157
+ CloseHandle(dev->device_handle);
158
+ LocalFree(dev->last_error_str);
159
+ free(dev->read_buf);
160
+ free(dev);
161
+ }
154
162
 
155
163
  static void register_error(hid_device *device, const char *op)
156
164
  {
@@ -162,11 +170,11 @@ static void register_error(hid_device *device, const char *op)
162
170
  NULL,
163
171
  GetLastError(),
164
172
  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
165
- (LPWSTR)&msg, 0/*sz*/,
173
+ (LPVOID)&msg, 0/*sz*/,
166
174
  NULL);
167
-
168
- // Get rid of the CR and LF that FormatMessage() sticks at the
169
- // end of the message. Thanks Microsoft!
175
+
176
+ /* Get rid of the CR and LF that FormatMessage() sticks at the
177
+ end of the message. Thanks Microsoft! */
170
178
  ptr = msg;
171
179
  while (*ptr) {
172
180
  if (*ptr == '\r') {
@@ -176,8 +184,8 @@ static void register_error(hid_device *device, const char *op)
176
184
  ptr++;
177
185
  }
178
186
 
179
- // Store the message off in the Device entry so that
180
- // the hid_error() function can pick it up.
187
+ /* Store the message off in the Device entry so that
188
+ the hid_error() function can pick it up. */
181
189
  LocalFree(device->last_error_str);
182
190
  device->last_error_str = msg;
183
191
  }
@@ -220,7 +228,7 @@ static HANDLE open_device(const char *path, BOOL enumerate)
220
228
  share_mode,
221
229
  NULL,
222
230
  OPEN_EXISTING,
223
- FILE_FLAG_OVERLAPPED,//FILE_ATTRIBUTE_NORMAL,
231
+ FILE_FLAG_OVERLAPPED,/*FILE_ATTRIBUTE_NORMAL,*/
224
232
  0);
225
233
 
226
234
  return handle;
@@ -254,10 +262,10 @@ int HID_API_EXPORT hid_exit(void)
254
262
  struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id)
255
263
  {
256
264
  BOOL res;
257
- struct hid_device_info *root = NULL; // return object
265
+ struct hid_device_info *root = NULL; /* return object */
258
266
  struct hid_device_info *cur_dev = NULL;
259
267
 
260
- // Windows objects for interacting with the driver.
268
+ /* Windows objects for interacting with the driver. */
261
269
  GUID InterfaceClassGuid = {0x4d1e55b2, 0xf16f, 0x11cf, {0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30} };
262
270
  SP_DEVINFO_DATA devinfo_data;
263
271
  SP_DEVICE_INTERFACE_DATA device_interface_data;
@@ -269,16 +277,16 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
269
277
  if (hid_init() < 0)
270
278
  return NULL;
271
279
 
272
- // Initialize the Windows objects.
280
+ /* Initialize the Windows objects. */
273
281
  memset(&devinfo_data, 0x0, sizeof(devinfo_data));
274
282
  devinfo_data.cbSize = sizeof(SP_DEVINFO_DATA);
275
283
  device_interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
276
284
 
277
- // Get information for all the devices belonging to the HID class.
285
+ /* Get information for all the devices belonging to the HID class. */
278
286
  device_info_set = SetupDiGetClassDevsA(&InterfaceClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
279
-
280
- // Iterate over each device in the HID class, looking for the right one.
281
-
287
+
288
+ /* Iterate over each device in the HID class, looking for the right one. */
289
+
282
290
  for (;;) {
283
291
  HANDLE write_handle = INVALID_HANDLE_VALUE;
284
292
  DWORD required_size = 0;
@@ -289,16 +297,16 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
289
297
  &InterfaceClassGuid,
290
298
  device_index,
291
299
  &device_interface_data);
292
-
300
+
293
301
  if (!res) {
294
- // A return of FALSE from this function means that
295
- // there are no more devices.
302
+ /* A return of FALSE from this function means that
303
+ there are no more devices. */
296
304
  break;
297
305
  }
298
306
 
299
- // Call with 0-sized detail size, and let the function
300
- // tell us how long the detail struct needs to be. The
301
- // size is put in &required_size.
307
+ /* Call with 0-sized detail size, and let the function
308
+ tell us how long the detail struct needs to be. The
309
+ size is put in &required_size. */
302
310
  res = SetupDiGetDeviceInterfaceDetailA(device_info_set,
303
311
  &device_interface_data,
304
312
  NULL,
@@ -306,13 +314,13 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
306
314
  &required_size,
307
315
  NULL);
308
316
 
309
- // Allocate a long enough structure for device_interface_detail_data.
317
+ /* Allocate a long enough structure for device_interface_detail_data. */
310
318
  device_interface_detail_data = (SP_DEVICE_INTERFACE_DETAIL_DATA_A*) malloc(required_size);
311
319
  device_interface_detail_data->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);
312
320
 
313
- // Get the detailed data for this device. The detail data gives us
314
- // the device path for this device, which is then passed into
315
- // CreateFile() to get a handle to the device.
321
+ /* Get the detailed data for this device. The detail data gives us
322
+ the device path for this device, which is then passed into
323
+ CreateFile() to get a handle to the device. */
316
324
  res = SetupDiGetDeviceInterfaceDetailA(device_info_set,
317
325
  &device_interface_data,
318
326
  device_interface_detail_data,
@@ -321,18 +329,18 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
321
329
  NULL);
322
330
 
323
331
  if (!res) {
324
- //register_error(dev, "Unable to call SetupDiGetDeviceInterfaceDetail");
325
- // Continue to the next device.
332
+ /* register_error(dev, "Unable to call SetupDiGetDeviceInterfaceDetail");
333
+ Continue to the next device. */
326
334
  goto cont;
327
335
  }
328
336
 
329
- // Make sure this device is of Setup Class "HIDClass" and has a
330
- // driver bound to it.
337
+ /* Make sure this device is of Setup Class "HIDClass" and has a
338
+ driver bound to it. */
331
339
  for (i = 0; ; i++) {
332
340
  char driver_name[256];
333
341
 
334
- // Populate devinfo_data. This function will return failure
335
- // when there are no more interfaces left.
342
+ /* Populate devinfo_data. This function will return failure
343
+ when there are no more interfaces left. */
336
344
  res = SetupDiEnumDeviceInfo(device_info_set, i, &devinfo_data);
337
345
  if (!res)
338
346
  goto cont;
@@ -343,7 +351,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
343
351
  goto cont;
344
352
 
345
353
  if (strcmp(driver_name, "HIDClass") == 0) {
346
- // See if there's a driver bound.
354
+ /* See if there's a driver bound. */
347
355
  res = SetupDiGetDeviceRegistryPropertyA(device_info_set, &devinfo_data,
348
356
  SPDRP_DRIVER, NULL, (PBYTE)driver_name, sizeof(driver_name), NULL);
349
357
  if (res)
@@ -353,26 +361,26 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
353
361
 
354
362
  //wprintf(L"HandleName: %s\n", device_interface_detail_data->DevicePath);
355
363
 
356
- // Open a handle to the device
364
+ /* Open a handle to the device */
357
365
  write_handle = open_device(device_interface_detail_data->DevicePath, TRUE);
358
366
 
359
- // Check validity of write_handle.
367
+ /* Check validity of write_handle. */
360
368
  if (write_handle == INVALID_HANDLE_VALUE) {
361
- // Unable to open the device.
369
+ /* Unable to open the device. */
362
370
  //register_error(dev, "CreateFile");
363
371
  goto cont_close;
364
- }
372
+ }
365
373
 
366
374
 
367
- // Get the Vendor ID and Product ID for this device.
375
+ /* Get the Vendor ID and Product ID for this device. */
368
376
  attrib.Size = sizeof(HIDD_ATTRIBUTES);
369
377
  HidD_GetAttributes(write_handle, &attrib);
370
378
  //wprintf(L"Product/Vendor: %x %x\n", attrib.ProductID, attrib.VendorID);
371
379
 
372
- // Check the VID/PID to see if we should add this
373
- // device to the enumeration list.
374
- if ((vendor_id == 0x0 && product_id == 0x0) ||
375
- (attrib.VendorID == vendor_id && attrib.ProductID == product_id)) {
380
+ /* Check the VID/PID to see if we should add this
381
+ device to the enumeration list. */
382
+ if ((vendor_id == 0x0 || attrib.VendorID == vendor_id) &&
383
+ (product_id == 0x0 || attrib.ProductID == product_id)) {
376
384
 
377
385
  #define WSTR_LEN 512
378
386
  const char *str;
@@ -381,7 +389,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
381
389
  HIDP_CAPS caps;
382
390
  BOOLEAN res;
383
391
  NTSTATUS nt_res;
384
- wchar_t wstr[WSTR_LEN]; // TODO: Determine Size
392
+ wchar_t wstr[WSTR_LEN]; /* TODO: Determine Size */
385
393
  size_t len;
386
394
 
387
395
  /* VID/PID match. Create the record. */
@@ -394,7 +402,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
394
402
  }
395
403
  cur_dev = tmp;
396
404
 
397
- // Get the Usage Page and Usage for this device.
405
+ /* Get the Usage Page and Usage for this device. */
398
406
  res = HidD_GetPreparsedData(write_handle, &pp_data);
399
407
  if (res) {
400
408
  nt_res = HidP_GetCaps(pp_data, &caps);
@@ -405,7 +413,7 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
405
413
 
406
414
  HidD_FreePreparsedData(pp_data);
407
415
  }
408
-
416
+
409
417
  /* Fill out the record */
410
418
  cur_dev->next = NULL;
411
419
  str = device_interface_detail_data->DevicePath;
@@ -469,14 +477,14 @@ struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned shor
469
477
  cont_close:
470
478
  CloseHandle(write_handle);
471
479
  cont:
472
- // We no longer need the detail data. It can be freed
480
+ /* We no longer need the detail data. It can be freed */
473
481
  free(device_interface_detail_data);
474
482
 
475
483
  device_index++;
476
484
 
477
485
  }
478
486
 
479
- // Close the device information handle.
487
+ /* Close the device information handle. */
480
488
  SetupDiDestroyDeviceInfoList(device_info_set);
481
489
 
482
490
  return root;
@@ -485,7 +493,7 @@ cont:
485
493
 
486
494
  void HID_API_EXPORT HID_API_CALL hid_free_enumeration(struct hid_device_info *devs)
487
495
  {
488
- // TODO: Merge this with the Linux version. This function is platform-independent.
496
+ /* TODO: Merge this with the Linux version. This function is platform-independent. */
489
497
  struct hid_device_info *d = devs;
490
498
  while (d) {
491
499
  struct hid_device_info *next = d->next;
@@ -501,11 +509,11 @@ void HID_API_EXPORT HID_API_CALL hid_free_enumeration(struct hid_device_info *d
501
509
 
502
510
  HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number)
503
511
  {
504
- // TODO: Merge this functions with the Linux version. This function should be platform independent.
512
+ /* TODO: Merge this functions with the Linux version. This function should be platform independent. */
505
513
  struct hid_device_info *devs, *cur_dev;
506
514
  const char *path_to_open = NULL;
507
515
  hid_device *handle = NULL;
508
-
516
+
509
517
  devs = hid_enumerate(vendor_id, product_id);
510
518
  cur_dev = devs;
511
519
  while (cur_dev) {
@@ -531,7 +539,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open(unsigned short vendor_id, unsi
531
539
  }
532
540
 
533
541
  hid_free_enumeration(devs);
534
-
542
+
535
543
  return handle;
536
544
  }
537
545
 
@@ -549,17 +557,17 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path)
549
557
 
550
558
  dev = new_hid_device();
551
559
 
552
- // Open a handle to the device
560
+ /* Open a handle to the device */
553
561
  dev->device_handle = open_device(path, FALSE);
554
562
 
555
- // Check validity of write_handle.
563
+ /* Check validity of write_handle. */
556
564
  if (dev->device_handle == INVALID_HANDLE_VALUE) {
557
- // Unable to open the device.
565
+ /* Unable to open the device. */
558
566
  register_error(dev, "CreateFile");
559
567
  goto err;
560
568
  }
561
569
 
562
- // Get the Input Report length for the device.
570
+ /* Get the Input Report length for the device. */
563
571
  res = HidD_GetPreparsedData(dev->device_handle, &pp_data);
564
572
  if (!res) {
565
573
  register_error(dev, "HidD_GetPreparsedData");
@@ -567,7 +575,7 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path)
567
575
  }
568
576
  nt_res = HidP_GetCaps(pp_data, &caps);
569
577
  if (nt_res != HIDP_STATUS_SUCCESS) {
570
- register_error(dev, "HidP_GetCaps");
578
+ register_error(dev, "HidP_GetCaps");
571
579
  goto err_pp_data;
572
580
  }
573
581
  dev->output_report_length = caps.OutputReportByteLength;
@@ -580,9 +588,8 @@ HID_API_EXPORT hid_device * HID_API_CALL hid_open_path(const char *path)
580
588
 
581
589
  err_pp_data:
582
590
  HidD_FreePreparsedData(pp_data);
583
- err:
584
- CloseHandle(dev->device_handle);
585
- free(dev);
591
+ err:
592
+ free_hid_device(dev);
586
593
  return NULL;
587
594
  }
588
595
 
@@ -614,21 +621,21 @@ int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char *
614
621
  }
615
622
 
616
623
  res = WriteFile(dev->device_handle, buf, length, NULL, &ol);
617
-
624
+
618
625
  if (!res) {
619
626
  if (GetLastError() != ERROR_IO_PENDING) {
620
- // WriteFile() failed. Return error.
627
+ /* WriteFile() failed. Return error. */
621
628
  register_error(dev, "WriteFile");
622
629
  bytes_written = -1;
623
630
  goto end_of_function;
624
631
  }
625
632
  }
626
633
 
627
- // Wait here until the write is done. This makes
628
- // hid_write() synchronous.
634
+ /* Wait here until the write is done. This makes
635
+ hid_write() synchronous. */
629
636
  res = GetOverlappedResult(dev->device_handle, &ol, &bytes_written, TRUE/*wait*/);
630
637
  if (!res) {
631
- // The Write operation failed.
638
+ /* The Write operation failed. */
632
639
  register_error(dev, "WriteFile");
633
640
  bytes_written = -1;
634
641
  goto end_of_function;
@@ -647,20 +654,20 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char
647
654
  DWORD bytes_read = 0;
648
655
  BOOL res;
649
656
 
650
- // Copy the handle for convenience.
657
+ /* Copy the handle for convenience. */
651
658
  HANDLE ev = dev->ol.hEvent;
652
659
 
653
660
  if (!dev->read_pending) {
654
- // Start an Overlapped I/O read.
661
+ /* Start an Overlapped I/O read. */
655
662
  dev->read_pending = TRUE;
656
663
  memset(dev->read_buf, 0, dev->input_report_length);
657
664
  ResetEvent(ev);
658
665
  res = ReadFile(dev->device_handle, dev->read_buf, dev->input_report_length, &bytes_read, &dev->ol);
659
-
666
+
660
667
  if (!res) {
661
668
  if (GetLastError() != ERROR_IO_PENDING) {
662
- // ReadFile() has failed.
663
- // Clean up and return error.
669
+ /* ReadFile() has failed.
670
+ Clean up and return error. */
664
671
  CancelIo(dev->device_handle);
665
672
  dev->read_pending = FALSE;
666
673
  goto end_of_function;
@@ -669,21 +676,21 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char
669
676
  }
670
677
 
671
678
  if (milliseconds >= 0) {
672
- // See if there is any data yet.
679
+ /* See if there is any data yet. */
673
680
  res = WaitForSingleObject(ev, milliseconds);
674
681
  if (res != WAIT_OBJECT_0) {
675
- // There was no data this time. Return zero bytes available,
676
- // but leave the Overlapped I/O running.
682
+ /* There was no data this time. Return zero bytes available,
683
+ but leave the Overlapped I/O running. */
677
684
  return 0;
678
685
  }
679
686
  }
680
687
 
681
- // Either WaitForSingleObject() told us that ReadFile has completed, or
682
- // we are in non-blocking mode. Get the number of bytes read. The actual
683
- // data has been copied to the data[] array which was passed to ReadFile().
688
+ /* Either WaitForSingleObject() told us that ReadFile has completed, or
689
+ we are in non-blocking mode. Get the number of bytes read. The actual
690
+ data has been copied to the data[] array which was passed to ReadFile(). */
684
691
  res = GetOverlappedResult(dev->device_handle, &dev->ol, &bytes_read, TRUE/*wait*/);
685
-
686
- // Set pending back to false, even if GetOverlappedResult() returned error.
692
+
693
+ /* Set pending back to false, even if GetOverlappedResult() returned error. */
687
694
  dev->read_pending = FALSE;
688
695
 
689
696
  if (res && bytes_read > 0) {
@@ -703,13 +710,13 @@ int HID_API_EXPORT HID_API_CALL hid_read_timeout(hid_device *dev, unsigned char
703
710
  memcpy(data, dev->read_buf, copy_len);
704
711
  }
705
712
  }
706
-
713
+
707
714
  end_of_function:
708
715
  if (!res) {
709
716
  register_error(dev, "GetOverlappedResult");
710
717
  return -1;
711
718
  }
712
-
719
+
713
720
  return bytes_read;
714
721
  }
715
722
 
@@ -760,17 +767,17 @@ int HID_API_EXPORT HID_API_CALL hid_get_feature_report(hid_device *dev, unsigned
760
767
 
761
768
  if (!res) {
762
769
  if (GetLastError() != ERROR_IO_PENDING) {
763
- // DeviceIoControl() failed. Return error.
770
+ /* DeviceIoControl() failed. Return error. */
764
771
  register_error(dev, "Send Feature Report DeviceIoControl");
765
772
  return -1;
766
773
  }
767
774
  }
768
775
 
769
- // Wait here until the write is done. This makes
770
- // hid_get_feature_report() synchronous.
776
+ /* Wait here until the write is done. This makes
777
+ hid_get_feature_report() synchronous. */
771
778
  res = GetOverlappedResult(dev->device_handle, &ol, &bytes_returned, TRUE/*wait*/);
772
779
  if (!res) {
773
- // The operation failed.
780
+ /* The operation failed. */
774
781
  register_error(dev, "Send Feature Report GetOverLappedResult");
775
782
  return -1;
776
783
  }
@@ -783,18 +790,14 @@ void HID_API_EXPORT HID_API_CALL hid_close(hid_device *dev)
783
790
  if (!dev)
784
791
  return;
785
792
  CancelIo(dev->device_handle);
786
- CloseHandle(dev->ol.hEvent);
787
- CloseHandle(dev->device_handle);
788
- LocalFree(dev->last_error_str);
789
- free(dev->read_buf);
790
- free(dev);
793
+ free_hid_device(dev);
791
794
  }
792
795
 
793
796
  int HID_API_EXPORT_CALL HID_API_CALL hid_get_manufacturer_string(hid_device *dev, wchar_t *string, size_t maxlen)
794
797
  {
795
798
  BOOL res;
796
799
 
797
- res = HidD_GetManufacturerString(dev->device_handle, string, 2 * maxlen);
800
+ res = HidD_GetManufacturerString(dev->device_handle, string, sizeof(wchar_t) * maxlen);
798
801
  if (!res) {
799
802
  register_error(dev, "HidD_GetManufacturerString");
800
803
  return -1;
@@ -807,7 +810,7 @@ int HID_API_EXPORT_CALL HID_API_CALL hid_get_product_string(hid_device *dev, wch
807
810
  {
808
811
  BOOL res;
809
812
 
810
- res = HidD_GetProductString(dev->device_handle, string, 2 * maxlen);
813
+ res = HidD_GetProductString(dev->device_handle, string, sizeof(wchar_t) * maxlen);
811
814
  if (!res) {
812
815
  register_error(dev, "HidD_GetProductString");
813
816
  return -1;
@@ -820,7 +823,7 @@ int HID_API_EXPORT_CALL HID_API_CALL hid_get_serial_number_string(hid_device *de
820
823
  {
821
824
  BOOL res;
822
825
 
823
- res = HidD_GetSerialNumberString(dev->device_handle, string, 2 * maxlen);
826
+ res = HidD_GetSerialNumberString(dev->device_handle, string, sizeof(wchar_t) * maxlen);
824
827
  if (!res) {
825
828
  register_error(dev, "HidD_GetSerialNumberString");
826
829
  return -1;
@@ -833,7 +836,7 @@ int HID_API_EXPORT_CALL HID_API_CALL hid_get_indexed_string(hid_device *dev, int
833
836
  {
834
837
  BOOL res;
835
838
 
836
- res = HidD_GetIndexedString(dev->device_handle, string_index, string, 2 * maxlen);
839
+ res = HidD_GetIndexedString(dev->device_handle, string_index, string, sizeof(wchar_t) * maxlen);
837
840
  if (!res) {
838
841
  register_error(dev, "HidD_GetIndexedString");
839
842
  return -1;
@@ -849,10 +852,10 @@ HID_API_EXPORT const wchar_t * HID_API_CALL hid_error(hid_device *dev)
849
852
  }
850
853
 
851
854
 
852
- //#define PICPGM
853
- //#define S11
855
+ /*#define PICPGM*/
856
+ /*#define S11*/
854
857
  #define P32
855
- #ifdef S11
858
+ #ifdef S11
856
859
  unsigned short VendorID = 0xa0a0;
857
860
  unsigned short ProductID = 0x0001;
858
861
  #endif
@@ -878,36 +881,36 @@ int __cdecl main(int argc, char* argv[])
878
881
  UNREFERENCED_PARAMETER(argc);
879
882
  UNREFERENCED_PARAMETER(argv);
880
883
 
881
- // Set up the command buffer.
884
+ /* Set up the command buffer. */
882
885
  memset(buf,0x00,sizeof(buf));
883
886
  buf[0] = 0;
884
887
  buf[1] = 0x81;
885
-
886
888
 
887
- // Open the device.
889
+
890
+ /* Open the device. */
888
891
  int handle = open(VendorID, ProductID, L"12345");
889
892
  if (handle < 0)
890
893
  printf("unable to open device\n");
891
894
 
892
895
 
893
- // Toggle LED (cmd 0x80)
896
+ /* Toggle LED (cmd 0x80) */
894
897
  buf[1] = 0x80;
895
898
  res = write(handle, buf, 65);
896
899
  if (res < 0)
897
900
  printf("Unable to write()\n");
898
901
 
899
- // Request state (cmd 0x81)
902
+ /* Request state (cmd 0x81) */
900
903
  buf[1] = 0x81;
901
904
  write(handle, buf, 65);
902
905
  if (res < 0)
903
906
  printf("Unable to write() (2)\n");
904
907
 
905
- // Read requested state
908
+ /* Read requested state */
906
909
  read(handle, buf, 65);
907
910
  if (res < 0)
908
911
  printf("Unable to read()\n");
909
912
 
910
- // Print out the returned buffer.
913
+ /* Print out the returned buffer. */
911
914
  for (int i = 0; i < 4; i++)
912
915
  printf("buf[%d]: %d\n", i, buf[i]);
913
916
 
@@ -916,5 +919,5 @@ int __cdecl main(int argc, char* argv[])
916
919
  #endif
917
920
 
918
921
  #ifdef __cplusplus
919
- } // extern "C"
920
- #endif
922
+ } /* extern "C" */
923
+ #endif