Rework to use only a single hid_device

This commit is contained in:
Adam Honse
2026-01-29 12:23:48 -06:00
parent 44cff859b4
commit bbc65c436b
4 changed files with 35 additions and 85 deletions

View File

@@ -12,9 +12,11 @@
#include <cstring>
#include "HIDLampArrayController.h"
HIDLampArrayController::HIDLampArrayController(lamparray_hid_devs *devs_handle)
HIDLampArrayController::HIDLampArrayController(hid_device *dev_handle, const char *path, std::string dev_name)
{
devs = devs_handle;
dev = dev_handle;
location = path;
name = dev_name;
/*-----------------------------------------------------*\
| Get LampArrayAttributesReport |
@@ -39,12 +41,17 @@ HIDLampArrayController::HIDLampArrayController(lamparray_hid_devs *devs_handle)
HIDLampArrayController::~HIDLampArrayController()
{
hid_close(dev);
}
std::string HIDLampArrayController::GetDeviceLocation()
{
return("");
return("HID: " + location);
}
std::string HIDLampArrayController::GetDeviceName()
{
return(name);
}
std::string HIDLampArrayController::GetSerialString()
@@ -72,7 +79,7 @@ void HIDLampArrayController::GetLampArrayAttributesReport()
/*-----------------------------------------------------*\
| Get the report |
\*-----------------------------------------------------*/
report_size = hid_get_feature_report(devs->hid_dev_LampArrayAttributesReport, usb_buf, sizeof(usb_buf));
report_size = hid_get_feature_report(dev, usb_buf, sizeof(usb_buf));
memcpy(&LampArray, &usb_buf[1], sizeof(LampArray));
}
@@ -93,7 +100,7 @@ void HIDLampArrayController::GetLampAttributesResponseReport()
/*-----------------------------------------------------*\
| Get the report |
\*-----------------------------------------------------*/
report_size = hid_get_feature_report(devs->hid_dev_LampAttributesResponseReport, usb_buf, sizeof(usb_buf));
report_size = hid_get_feature_report(dev, usb_buf, sizeof(usb_buf));
memcpy(&attributes, &usb_buf[1], sizeof(attributes));
@@ -122,7 +129,7 @@ void HIDLampArrayController::SetLampArrayControlReport(unsigned char AutonomousM
/*-----------------------------------------------------*\
| Send the report |
\*-----------------------------------------------------*/
hid_send_feature_report(devs->hid_dev_LampArrayControlReport, usb_buf, sizeof(usb_buf));
hid_send_feature_report(dev, usb_buf, sizeof(usb_buf));
}
void HIDLampArrayController::SetLampAttributesRequestReport(unsigned short LampId)
@@ -144,7 +151,7 @@ void HIDLampArrayController::SetLampAttributesRequestReport(unsigned short LampI
/*-----------------------------------------------------*\
| Send the report |
\*-----------------------------------------------------*/
hid_send_feature_report(devs->hid_dev_LampAttributesRequestReport, usb_buf, sizeof(usb_buf));
hid_send_feature_report(dev, usb_buf, sizeof(usb_buf));
}
void HIDLampArrayController::SetLampMultiUpdateReport(unsigned char LampCount, unsigned char LampUpdateFlags, unsigned short * LampIds, LampArrayColor * UpdateColors)
@@ -173,5 +180,5 @@ void HIDLampArrayController::SetLampMultiUpdateReport(unsigned char LampCount, u
/*-----------------------------------------------------*\
| Send the report |
\*-----------------------------------------------------*/
hid_send_feature_report(devs->hid_dev_LampMultiUpdateReport, usb_buf, sizeof(usb_buf));
hid_send_feature_report(dev, usb_buf, sizeof(usb_buf));
}

View File

@@ -12,7 +12,7 @@
#pragma once
#include <string>
#include <hidapi/hidapi.h>
#include <hidapi.h>
#include "RGBController.h"
@@ -27,17 +27,6 @@
#define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop))
#endif
typedef struct
{
hid_device * hid_dev_LampArray;
hid_device * hid_dev_LampArrayAttributesReport;
hid_device * hid_dev_LampAttributesRequestReport;
hid_device * hid_dev_LampAttributesResponseReport;
hid_device * hid_dev_LampMultiUpdateReport;
hid_device * hid_dev_LampRangeUpdateReport;
hid_device * hid_dev_LampArrayControlReport;
} lamparray_hid_devs;
PACK(struct LampArrayAttributes
{
unsigned short LampCount;
@@ -119,24 +108,20 @@ enum
class HIDLampArrayController
{
public:
HIDLampArrayController(lamparray_hid_devs *devs_handle);
HIDLampArrayController(hid_device *dev_handle, const char *path, std::string dev_name);
~HIDLampArrayController();
std::string GetDeviceLocation();
std::string GetDeviceName();
std::string GetSerialString();
unsigned int GetLampCount();
void SetLampMultiUpdateReport(unsigned char LampCount, unsigned char LampUpdateFlags, unsigned short * LampIds, LampArrayColor * UpdateColors);
void SetLampMultiUpdateReport(unsigned char LampCount, unsigned char LampUpdateFlags, unsigned short * LampIds, LampArrayColor * UpdateColors);
private:
void GetLampArrayAttributesReport();
void GetLampAttributesResponseReport();
void SetLampArrayControlReport(unsigned char AutonomousMode);
void SetLampAttributesRequestReport(unsigned short LampId);
lamparray_hid_devs * devs;
std::string location;
hid_device * dev;
std::string location;
std::string name;
/*-----------------------------------------------------*\
| Vector to store lamp attributes for each lamp |
@@ -147,4 +132,9 @@ private:
| Parameters from LampArrayAttributesReport |
\*-----------------------------------------------------*/
LampArrayAttributes LampArray;
void GetLampArrayAttributesReport();
void GetLampAttributesResponseReport();
void SetLampArrayControlReport(unsigned char AutonomousMode);
void SetLampAttributesRequestReport(unsigned short LampId);
};

View File

@@ -14,9 +14,7 @@
#include "RGBController.h"
#include "RGBController_HIDLampArray.h"
#include <vector>
#include <hidapi/hidapi.h>
static lamparray_hid_devs devs;
#include <hidapi.h>
void DetectHIDLampArrayControllers(hid_device_info* info, const std::string& name)
{
@@ -24,56 +22,11 @@ void DetectHIDLampArrayControllers(hid_device_info* info, const std::string& nam
if(dev)
{
if(info->usage_page == 0x59 && info->usage == 0x01)
{
devs.hid_dev_LampArray = dev;
}
if(info->usage_page == 0x59 && info->usage == 0x02)
{
devs.hid_dev_LampArrayAttributesReport = dev;
}
if(info->usage_page == 0x59 && info->usage == 0x20)
{
devs.hid_dev_LampAttributesRequestReport = dev;
}
if(info->usage_page == 0x59 && info->usage == 0x22)
{
devs.hid_dev_LampAttributesResponseReport = dev;
}
if(info->usage_page == 0x59 && info->usage == 0x50)
{
devs.hid_dev_LampMultiUpdateReport = dev;
}
if(info->usage_page == 0x59 && info->usage == 0x60)
{
devs.hid_dev_LampRangeUpdateReport = dev;
}
if(info->usage_page == 0x59 && info->usage == 0x70)
{
devs.hid_dev_LampArrayControlReport = dev;
}
}
if(devs.hid_dev_LampArray
&& devs.hid_dev_LampArrayAttributesReport
&& devs.hid_dev_LampAttributesRequestReport
&& devs.hid_dev_LampAttributesResponseReport
&& devs.hid_dev_LampMultiUpdateReport
&& devs.hid_dev_LampRangeUpdateReport
&& devs.hid_dev_LampArrayControlReport)
{
HIDLampArrayController* controller = new HIDLampArrayController(&devs);
HIDLampArrayController* controller = new HIDLampArrayController(dev, info->path, name);
RGBController_HIDLampArray* rgb_controller = new RGBController_HIDLampArray(controller);
rgb_controller->name = name;
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
} /* DetectHIDLampArrayControllers() */
}
REGISTER_HID_DETECTOR("Arduino Zero HID Lamp Array Demo", DetectHIDLampArrayControllers, 0x2341, 0x804D);
REGISTER_HID_DETECTOR_PU("Arduino Zero HID Lamp Array Demo", DetectHIDLampArrayControllers, 0x2341, 0x804D, 0x59, 0x01);

View File

@@ -15,7 +15,7 @@ RGBController_HIDLampArray::RGBController_HIDLampArray(HIDLampArrayController* c
{
controller = controller_ptr;
name = "HID LampArray Device";
name = controller->GetDeviceName();
vendor = "Generic";
type = DEVICE_TYPE_MOUSEMAT;
description = "HID LampArray Device";
@@ -34,7 +34,7 @@ RGBController_HIDLampArray::RGBController_HIDLampArray(HIDLampArrayController* c
RGBController_HIDLampArray::~RGBController_HIDLampArray()
{
delete controller;
}
void RGBController_HIDLampArray::SetupZones()