24 #include "CorsairLightingProtocolConstants.h"
26 #if defined(ARDUINO_ARCH_AVR)
30 #if defined(ARDUINO_ARCH_AVR) && defined(USBCON)
31 #define SUPPORT_RAW_HID
34 #if defined(SUPPORT_RAW_HID)
37 #undef RAWHID_USAGE_PAGE
38 #define RAWHID_USAGE_PAGE 0xFFC0
41 #define RAWHID_USAGE 0x0C00
43 #if defined(__AVR_ATmega16U2__)
44 #define RAWHID_TX_SIZE 64
46 #define RAWHID_TX_SIZE 16
48 #define RAWHID_RX_SIZE 64
52 #if defined(ARDUINO_ARCH_AVR) && defined(USBCON)
54 #define EPTYPE_DESCRIPTOR_SIZE uint8_t
57 #define ENDPOINT_COUNT 1
59 class RawHID_ :
public PluggableUSBModule,
public Stream {
69 void setFeatureReport(
void* report,
int length) {
71 featureReport = (uint8_t*)report;
72 featureLength = length;
75 disableFeatureReport();
79 int availableFeatureReport(
void) {
80 if (featureLength < 0) {
81 return featureLength & ~0x8000;
86 void enableFeatureReport(
void) { featureLength &= ~0x8000; }
88 void disableFeatureReport(
void) { featureLength |= 0x8000; }
90 void begin(
void* report,
int length) {
92 data = (uint8_t*)report;
103 void enable(
void) { dataAvailable = 0; }
105 void disable(
void) { dataAvailable = -1; }
107 virtual int available(
void) {
108 if (dataAvailable < 0) {
111 return dataAvailable;
116 if (dataAvailable > 0) {
118 return data[dataLength - dataAvailable--];
125 if (dataAvailable > 0) {
126 return data[dataLength - dataAvailable];
131 virtual void flush(
void) {
140 virtual size_t write(
const uint8_t* buffer,
size_t size) {
141 return USB_Send(pluggedEndpoint | TRANSFER_RELEASE, buffer, size);
146 int getInterface(uint8_t* interfaceCount)
override;
147 int getDescriptor(USBSetup& setup)
override;
148 bool setup(USBSetup& setup)
override;
149 uint8_t getShortName(
char* name)
override;
151 EPTYPE_DESCRIPTOR_SIZE epType[ENDPOINT_COUNT];
159 const char* serialNumber;
161 uint8_t* featureReport;
164 extern RawHID_ RawHID;
virtual size_t write(uint8_t b)
Definition: RawHID.h:138
void setSerialNumber(const char *serialNumber)
Definition: RawHID.cpp:67