#pragma once // stl includes #include #include #include // libusb include #include // Hyperion includes #include /// /// LedDevice implementation for a lightpack device (http://code.google.com/p/light-pack/) /// class LedDeviceLightpack : public LedDevice { public: /// /// Constructs the LedDeviceLightpack /// LedDeviceLightpack(const std::string & serialNumber = ""); /// /// Destructor of the LedDevice; closes the output device if it is open /// virtual ~LedDeviceLightpack(); /// /// Opens and configures the output device7 /// /// @return Zero on succes else negative /// int open(); int write(const std::vector& ledValues); int switchOff(); private: struct Version { int majorVersion; int minorVersion; }; /// write bytes to the device int writeBytes(uint8_t *data, int size); /// Disable the internal smoothing on the Lightpack device int disableSmoothing(); static libusb_device_handle * openDevice(libusb_device * device); static std::string getString(libusb_device * device, int stringDescriptorIndex); static Version getVersion(libusb_device * device); private: /// libusb context libusb_context * _libusbContext; /// libusb device handle libusb_device_handle * _deviceHandle; /// harware bus number int _busNumber; /// hardware address number int _addressNumber; /// device serial number std::string _serialNumber; /// firmware version of the device Version _firmwareVersion; /// the number of leds of the device int _ledCount; /// the number of bits per channel int _bitsPerChannel; /// buffer for led data std::vector _ledBuffer; };