# HG changeset patch
# User sl
# Date 1400741114 -7200
# Node ID 21033ded8f8634ff7c03770e845ba49deb2396ef
# Parent  e5b84f315be743add4f658cd3fbbb4b510002a2f
Adding vendor/product/serial number strings support to our HidDevice.

diff -r e5b84f315be7 -r 21033ded8f86 inc/HidDevice.h
--- a/inc/HidDevice.h	Thu May 22 08:17:14 2014 +0200
+++ b/inc/HidDevice.h	Thu May 22 08:45:14 2014 +0200
@@ -8,6 +8,7 @@
 #include "HidReport.h"
 #include "hidapi.h"
 
+const int KMaxHidStringChar=256;
 
 /**
 TODO: move to another header
@@ -27,10 +28,21 @@
     int Write(const HidReport<S>& aOutputReport);
     //
     const wchar_t* Error();
+    //
+    wchar_t* Vendor();
+    wchar_t* Product();
+    wchar_t* SerialNumber();
+
+private:
+    void FetchStrings();
 
 private:
     ///Our USB HID device
     hid_device* iHidDevice;
+    //
+    wchar_t iVendor[KMaxHidStringChar];
+    wchar_t iProduct[KMaxHidStringChar];
+    wchar_t iSerialNumber[KMaxHidStringChar];
     };
 
 
diff -r e5b84f315be7 -r 21033ded8f86 src/HidDevice.cpp
--- a/src/HidDevice.cpp	Thu May 22 08:17:14 2014 +0200
+++ b/src/HidDevice.cpp	Thu May 22 08:45:14 2014 +0200
@@ -12,7 +12,7 @@
 
 HidDevice::HidDevice():iHidDevice(NULL)
     {
-
+    Close();
     }
 
 /**
@@ -29,6 +29,8 @@
 		return 0;
 		}
 
+    FetchStrings();
+
 	return 1;
 	}
 
@@ -37,6 +39,8 @@
 */
 int HidDevice::Open(unsigned short aVendorId, unsigned short aProductId, const wchar_t* aSerialNumber)
 	{
+    Close();
+
 	iHidDevice = hid_open(aVendorId, aProductId, aSerialNumber);
 
 	if (!iHidDevice)
@@ -45,6 +49,8 @@
 		return 0;
 		}
 
+    FetchStrings();
+
 	return 1;
 	}
 
@@ -54,6 +60,10 @@
 	{
 	hid_close(iHidDevice);
 	iHidDevice=NULL;
+    //
+    memset(iVendor,0,sizeof(iVendor));
+    memset(iProduct,0,sizeof(iProduct));
+    memset(iSerialNumber,0,sizeof(iSerialNumber));
 	}
 
 /**
@@ -79,3 +89,34 @@
 	//Set read operation as non blocking
 	return hid_set_nonblocking(iHidDevice, aNonBlocking);
 	}
+
+/**
+*/
+wchar_t* HidDevice::Vendor()
+    {
+    return iVendor;
+    }
+
+/**
+*/
+wchar_t* HidDevice::Product()
+    {
+    return iProduct;
+    }
+
+/**
+*/
+wchar_t* HidDevice::SerialNumber()
+    {
+    return iSerialNumber;
+    }
+
+/**
+
+*/
+void HidDevice::FetchStrings()
+    {
+    hid_get_manufacturer_string(iHidDevice,iVendor,sizeof(iVendor));
+    hid_get_product_string(iHidDevice,iProduct,sizeof(iProduct));
+    hid_get_serial_number_string(iHidDevice,iSerialNumber,sizeof(iSerialNumber));
+    }