MiniDisplay/HidDevice.cpp
author sl
Thu, 29 May 2014 19:46:57 +0200
changeset 18 79801cc3bc94
permissions -rw-r--r--
Restoring some of our on-screen functionality for debug purposes.
We could prove that updating a single pixel is much faster than updating our
whole screen. Single pixel updates runs at full 24 FPS.
sl@4
     1
//
sl@4
     2
//
sl@4
     3
//
sl@4
     4
sl@4
     5
#include "HidDevice.h"
sl@4
     6
sl@4
     7
sl@4
     8
sl@4
     9
//
sl@4
    10
// class HidDevice
sl@4
    11
//
sl@4
    12
sl@4
    13
HidDevice::HidDevice():iHidDevice(NULL)
sl@4
    14
    {
sl@4
    15
    Close();
sl@4
    16
    }
sl@4
    17
sl@4
    18
/**
sl@4
    19
*/
sl@4
    20
int HidDevice::Open(const char* aPath)
sl@4
    21
	{
sl@4
    22
	Close();
sl@4
    23
sl@4
    24
	iHidDevice =  hid_open_path(aPath);
sl@4
    25
sl@4
    26
	if (!iHidDevice)
sl@4
    27
		{
sl@4
    28
		//Fail to connect our device
sl@4
    29
		return 0;
sl@4
    30
		}
sl@4
    31
sl@4
    32
    FetchStrings();
sl@4
    33
sl@4
    34
	return 1;
sl@4
    35
	}
sl@4
    36
sl@4
    37
/**
sl@4
    38
See hidapi documentation.
sl@4
    39
*/
sl@4
    40
int HidDevice::Open(unsigned short aVendorId, unsigned short aProductId, const wchar_t* aSerialNumber)
sl@4
    41
	{
sl@4
    42
    Close();
sl@4
    43
sl@4
    44
	iHidDevice = hid_open(aVendorId, aProductId, aSerialNumber);
sl@4
    45
sl@4
    46
	if (!iHidDevice)
sl@4
    47
		{
sl@4
    48
		//Fail to connect our device
sl@4
    49
		return 0;
sl@4
    50
		}
sl@4
    51
sl@4
    52
    FetchStrings();
sl@4
    53
sl@4
    54
	return 1;
sl@4
    55
	}
sl@4
    56
sl@4
    57
/**
sl@4
    58
*/
sl@4
    59
void HidDevice::Close()
sl@4
    60
	{
sl@4
    61
	hid_close(iHidDevice);
sl@4
    62
	iHidDevice=NULL;
sl@4
    63
    //
sl@4
    64
    memset(iVendor,0,sizeof(iVendor));
sl@4
    65
    memset(iProduct,0,sizeof(iProduct));
sl@4
    66
    memset(iSerialNumber,0,sizeof(iSerialNumber));
sl@4
    67
	}
sl@4
    68
sl@4
    69
/**
sl@4
    70
*/
sl@4
    71
bool HidDevice::IsOpen()
sl@4
    72
    {
sl@4
    73
    return iHidDevice!=NULL;
sl@4
    74
    }
sl@4
    75
sl@4
    76
sl@4
    77
/**
sl@4
    78
*/
sl@4
    79
const wchar_t* HidDevice::Error()
sl@4
    80
	{
sl@4
    81
	return hid_error(iHidDevice);
sl@4
    82
	}
sl@4
    83
sl@4
    84
/**
sl@4
    85
*/
sl@4
    86
int HidDevice::SetNonBlocking(int aNonBlocking)
sl@4
    87
	{
sl@4
    88
	//Success we are now connected to our HID device
sl@4
    89
	//Set read operation as non blocking
sl@4
    90
	return hid_set_nonblocking(iHidDevice, aNonBlocking);
sl@4
    91
	}
sl@4
    92
sl@4
    93
/**
sl@4
    94
*/
sl@4
    95
wchar_t* HidDevice::Vendor()
sl@4
    96
    {
sl@4
    97
    return iVendor;
sl@4
    98
    }
sl@4
    99
sl@4
   100
/**
sl@4
   101
*/
sl@4
   102
wchar_t* HidDevice::Product()
sl@4
   103
    {
sl@4
   104
    return iProduct;
sl@4
   105
    }
sl@4
   106
sl@4
   107
/**
sl@4
   108
*/
sl@4
   109
wchar_t* HidDevice::SerialNumber()
sl@4
   110
    {
sl@4
   111
    return iSerialNumber;
sl@4
   112
    }
sl@4
   113
sl@4
   114
/**
sl@4
   115
sl@4
   116
*/
sl@4
   117
void HidDevice::FetchStrings()
sl@4
   118
    {
sl@4
   119
    hid_get_manufacturer_string(iHidDevice,iVendor,sizeof(iVendor));
sl@4
   120
    hid_get_product_string(iHidDevice,iProduct,sizeof(iProduct));
sl@4
   121
    hid_get_serial_number_string(iHidDevice,iSerialNumber,sizeof(iSerialNumber));
sl@4
   122
    }