mirror of
https://github.com/whowechina/aic_pico.git
synced 2025-02-17 19:09:24 +01:00
Support HID lights
This commit is contained in:
parent
d34bb01271
commit
c6b0ebc392
Binary file not shown.
@ -201,6 +201,13 @@ void light_set_color_all(uint32_t color)
|
||||
}
|
||||
}
|
||||
|
||||
static uint64_t last_hid = 0;
|
||||
void light_hid_light(uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
light_set_color_all(rgb32(r, g, b, false));
|
||||
last_hid = time_us_64();
|
||||
}
|
||||
|
||||
void light_set_brg(unsigned index, const uint8_t *brg_array, size_t num)
|
||||
{
|
||||
if (index >= RGB_NUM) {
|
||||
@ -246,7 +253,7 @@ void light_set_rainbow(bool enable)
|
||||
|
||||
void light_update()
|
||||
{
|
||||
if (rainbow) {
|
||||
if (rainbow && (time_us_64() > last_hid + 1000000)) {
|
||||
generate_color_wheel();
|
||||
rainbow_update();
|
||||
rainbow_fade();
|
||||
|
@ -20,6 +20,7 @@ uint32_t rgb32_from_hsv(uint8_t h, uint8_t s, uint8_t v);
|
||||
|
||||
void light_set_color(unsigned index, uint32_t color);
|
||||
void light_set_color_all(uint32_t color);
|
||||
void light_hid_light(uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
void light_set_rainbow(bool enable);
|
||||
void light_stimulate();
|
||||
|
@ -350,4 +350,10 @@ void tud_hid_set_report_cb(uint8_t itf, uint8_t report_id,
|
||||
hid_report_type_t report_type, uint8_t const *buffer,
|
||||
uint16_t bufsize)
|
||||
{
|
||||
if ((report_id == REPORT_ID_LIGHTS) &&
|
||||
(report_type == HID_REPORT_TYPE_OUTPUT)) {
|
||||
if (bufsize >= 3) {
|
||||
light_hid_light(buffer[0], buffer[1], buffer[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
//------------- CLASS -------------//
|
||||
#define CFG_TUD_HID 2
|
||||
#define CFG_TUD_HID 3
|
||||
#define CFG_TUD_CDC 2
|
||||
#define CFG_TUD_MSC 0
|
||||
#define CFG_TUD_MIDI 0
|
||||
|
@ -79,6 +79,10 @@ uint8_t const desc_hid_report_nkro[] = {
|
||||
AIC_PICO_REPORT_DESC_NKRO,
|
||||
};
|
||||
|
||||
uint8_t const desc_hid_report_light[] = {
|
||||
AIC_PICO_REPORT_DESC_LIGHT,
|
||||
};
|
||||
|
||||
// Invoked when received GET HID REPORT DESCRIPTOR
|
||||
// Application return pointer to descriptor
|
||||
// Descriptor contents must exist long enough for transfer to complete
|
||||
@ -89,6 +93,8 @@ uint8_t const* tud_hid_descriptor_report_cb(uint8_t itf)
|
||||
return desc_hid_report_cardio;
|
||||
case 1:
|
||||
return desc_hid_report_nkro;
|
||||
case 2:
|
||||
return desc_hid_report_light;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
@ -97,15 +103,16 @@ uint8_t const* tud_hid_descriptor_report_cb(uint8_t itf)
|
||||
// Configuration Descriptor
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
enum { ITF_NUM_CARDIO, ITF_NUM_NKRO,
|
||||
enum { ITF_NUM_CARDIO, ITF_NUM_NKRO, ITF_NUM_LIGHT,
|
||||
ITF_NUM_CLI, ITF_NUM_CLI_DATA,
|
||||
ITF_NUM_AIME, ITF_NUM_AIME_DATA,
|
||||
ITF_NUM_TOTAL };
|
||||
|
||||
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN * 2 + TUD_CDC_DESC_LEN * 2)
|
||||
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_DESC_LEN * 3 + TUD_CDC_DESC_LEN * 2)
|
||||
|
||||
#define EPNUM_CARDIO 0x81
|
||||
#define EPNUM_KEY 0x82
|
||||
#define EPNUM_LIGHT 0x83
|
||||
|
||||
#define EPNUM_CLI_NOTIF 0x85
|
||||
#define EPNUM_CLI_OUT 0x06
|
||||
@ -131,10 +138,14 @@ uint8_t const desc_configuration_dev[] = {
|
||||
sizeof(desc_hid_report_nkro), EPNUM_KEY,
|
||||
CFG_TUD_HID_EP_BUFSIZE, 1),
|
||||
|
||||
TUD_CDC_DESCRIPTOR(ITF_NUM_CLI, 6, EPNUM_CLI_NOTIF,
|
||||
TUD_HID_DESCRIPTOR(ITF_NUM_LIGHT, 6, HID_ITF_PROTOCOL_NONE,
|
||||
sizeof(desc_hid_report_light), EPNUM_LIGHT,
|
||||
CFG_TUD_HID_EP_BUFSIZE, 4),
|
||||
|
||||
TUD_CDC_DESCRIPTOR(ITF_NUM_CLI, 7, EPNUM_CLI_NOTIF,
|
||||
8, EPNUM_CLI_OUT, EPNUM_CLI_IN, 64),
|
||||
|
||||
TUD_CDC_DESCRIPTOR(ITF_NUM_AIME, 7, EPNUM_AIME_NOTIF,
|
||||
TUD_CDC_DESCRIPTOR(ITF_NUM_AIME, 8, EPNUM_AIME_NOTIF,
|
||||
8, EPNUM_AIME_OUT, EPNUM_AIME_IN, 64),
|
||||
};
|
||||
|
||||
@ -159,8 +170,12 @@ const char *string_desc_arr[] = {
|
||||
serial_number_str, // 3: Serials, should use chip ID
|
||||
"AIC Pico CardIO",
|
||||
"AIC Pico Keypad",
|
||||
"AIC Pico LED",
|
||||
"AIC Pico CLI Port",
|
||||
"AIC Pico AIME Port",
|
||||
"AIC Pico Red Light",
|
||||
"AIC Pico Green Light",
|
||||
"AIC Pico Blue Light",
|
||||
};
|
||||
|
||||
// Invoked when received GET STRING DESCRIPTOR request
|
||||
|
@ -7,6 +7,7 @@
|
||||
enum {
|
||||
REPORT_ID_EAMU = 1,
|
||||
REPORT_ID_FELICA = 2,
|
||||
REPORT_ID_LIGHTS = 3,
|
||||
};
|
||||
|
||||
#define AIC_PICO_REPORT_DESC_CARDIO \
|
||||
@ -28,38 +29,56 @@ enum {
|
||||
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
HID_COLLECTION_END
|
||||
|
||||
#define AIC_PICO_REPORT_DESC_NKRO \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
|
||||
HID_USAGE(HID_USAGE_DESKTOP_KEYBOARD), \
|
||||
HID_COLLECTION(HID_COLLECTION_APPLICATION), \
|
||||
/* Modifier */ \
|
||||
HID_REPORT_SIZE(1), \
|
||||
HID_REPORT_COUNT(8), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), \
|
||||
HID_USAGE_MIN(224), \
|
||||
HID_USAGE_MAX(231), \
|
||||
HID_LOGICAL_MIN(0), \
|
||||
HID_LOGICAL_MAX(1), \
|
||||
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
/* LED output that we don't care */ \
|
||||
HID_REPORT_COUNT(5), \
|
||||
HID_REPORT_SIZE(1), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_LED), \
|
||||
HID_USAGE_MIN(1), \
|
||||
HID_USAGE_MAX(5), \
|
||||
HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
HID_REPORT_COUNT(1), \
|
||||
HID_REPORT_SIZE(3), \
|
||||
HID_OUTPUT(HID_CONSTANT), \
|
||||
/* Full Keyboard Bitmap */ \
|
||||
HID_REPORT_SIZE(1), \
|
||||
HID_REPORT_COUNT(120), \
|
||||
HID_LOGICAL_MIN(0), \
|
||||
HID_LOGICAL_MAX(1), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), \
|
||||
HID_USAGE_MIN(0), \
|
||||
HID_USAGE_MAX(119), \
|
||||
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
#define AIC_PICO_REPORT_DESC_NKRO \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
|
||||
HID_USAGE(HID_USAGE_DESKTOP_KEYBOARD), \
|
||||
HID_COLLECTION(HID_COLLECTION_APPLICATION), \
|
||||
/* Modifier */ \
|
||||
HID_REPORT_SIZE(1), \
|
||||
HID_REPORT_COUNT(8), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), \
|
||||
HID_USAGE_MIN(224), \
|
||||
HID_USAGE_MAX(231), \
|
||||
HID_LOGICAL_MIN(0), \
|
||||
HID_LOGICAL_MAX(1), \
|
||||
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
/* LED output that we don't care */ \
|
||||
HID_REPORT_COUNT(5), \
|
||||
HID_REPORT_SIZE(1), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_LED), \
|
||||
HID_USAGE_MIN(1), \
|
||||
HID_USAGE_MAX(5), \
|
||||
HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE),\
|
||||
HID_REPORT_COUNT(1), \
|
||||
HID_REPORT_SIZE(3), \
|
||||
HID_OUTPUT(HID_CONSTANT), \
|
||||
/* Full Keyboard Bitmap */ \
|
||||
HID_REPORT_SIZE(1), \
|
||||
HID_REPORT_COUNT(120), \
|
||||
HID_LOGICAL_MIN(0), \
|
||||
HID_LOGICAL_MAX(1), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_KEYBOARD), \
|
||||
HID_USAGE_MIN(0), \
|
||||
HID_USAGE_MAX(119), \
|
||||
HID_INPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
HID_COLLECTION_END
|
||||
|
||||
#define HID_STRING_MINIMUM(x) HID_REPORT_ITEM(x, 8, RI_TYPE_LOCAL, 1)
|
||||
#define HID_STRING_MAXIMUM(x) HID_REPORT_ITEM(x, 9, RI_TYPE_LOCAL, 1)
|
||||
|
||||
#define AIC_PICO_REPORT_DESC_LIGHT \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_DESKTOP), \
|
||||
HID_USAGE(0x00), \
|
||||
HID_COLLECTION(HID_COLLECTION_APPLICATION), \
|
||||
HID_REPORT_ID(REPORT_ID_LIGHTS) \
|
||||
HID_REPORT_COUNT(3), HID_REPORT_SIZE(8), \
|
||||
HID_LOGICAL_MIN(0x00), HID_LOGICAL_MAX_N(0x00ff, 2), \
|
||||
HID_USAGE_PAGE(HID_USAGE_PAGE_ORDINAL), \
|
||||
HID_STRING_MINIMUM(9), HID_STRING_MAXIMUM(12), \
|
||||
HID_USAGE_MIN(8), HID_USAGE_MAX(11), \
|
||||
HID_OUTPUT(HID_DATA | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
HID_REPORT_COUNT(15), HID_REPORT_SIZE(8), \
|
||||
HID_INPUT(HID_CONSTANT | HID_VARIABLE | HID_ABSOLUTE), \
|
||||
HID_COLLECTION_END
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user