2 Commits

Author SHA1 Message Date
1f1d98ba77 simple rgblight control via hid for promicro 2024-03-08 00:42:29 +09:00
bbbb483aa5 simple rgblight control via hid for raspberry pi pico 2024-03-08 00:42:01 +09:00
4 changed files with 52 additions and 14 deletions

View File

@@ -2,6 +2,8 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RAW_ENABLE
#ifndef CORTEX_ENABLE_WFI_IDLE
# define CORTEX_ENABLE_WFI_IDLE TRUE
#endif // CORTEX_ENABLE_WFI_IDLE

View File

@@ -44,6 +44,7 @@
#include "usb_descriptor.h"
#include "usb_driver.h"
#include "usb_types.h"
#include "rgblight.h"
#ifdef NKRO_ENABLE
# include "keycode_config.h"
@@ -973,10 +974,29 @@ void raw_hid_send(uint8_t *data, uint8_t length) {
chnWrite(&drivers.raw_driver.driver, data, length);
}
__attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
// Users should #include "raw_hid.h" in their own code
// and implement this function there. Leave this as weak linkage
// so users can opt to not handle data coming in.
enum HID_RGBLED_COMMAND { HID_PING = 0, HID_SET_HSV, HID_SET_RGB };
void raw_hid_receive(uint8_t *data, uint8_t length) {
switch (data[0]) {
case HID_PING:
data[0] = 1;
data[1] = 'R';
data[2] = 'G';
data[3] = 'B';
break;
case HID_SET_HSV:
rgblight_sethsv_noeeprom(data[1], data[2], data[3]);
data[0] = 1;
break;
case HID_SET_RGB:
rgblight_setrgb(data[1], data[2], data[3]);
data[0] = 1;
break;
default:
data[1] = data[0];
data[0] = 0;
break;
}
raw_hid_send(data, length);
}
void raw_hid_task(void) {

View File

@@ -55,6 +55,8 @@
#include "usb_device_state.h"
#include <util/atomic.h>
#include "rgblight.h"
#ifdef VIRTSER_ENABLE
# include "virtser.h"
#endif
@@ -137,16 +139,30 @@ void raw_hid_send(uint8_t *data, uint8_t length) {
send_report(RAW_IN_EPNUM, data, RAW_EPSIZE);
}
/** \brief Raw HID Receive
*
* FIXME: Needs doc
*/
__attribute__((weak)) void raw_hid_receive(uint8_t *data, uint8_t length) {
// Users should #include "raw_hid.h" in their own code
// and implement this function there. Leave this as weak linkage
// so users can opt to not handle data coming in.
enum HID_RGBLED_COMMAND { HID_PING = 0, HID_SET_HSV, HID_SET_RGB };
void raw_hid_receive(uint8_t *data, uint8_t length) {
switch (data[0]) {
case HID_PING:
data[0] = 1;
data[1] = 'R';
data[2] = 'G';
data[3] = 'B';
break;
case HID_SET_HSV:
rgblight_sethsv_noeeprom(data[1], data[2], data[3]);
data[0] = 1;
break;
case HID_SET_RGB:
rgblight_setrgb(data[1], data[2], data[3]);
data[0] = 1;
break;
default:
data[1] = data[0];
data[0] = 0;
break;
}
raw_hid_send(data, length);
}
/** \brief Raw HID Task
*
* FIXME: Needs doc

View File

@@ -42,7 +42,7 @@
*/
#pragma once
#define RAW_ENABLE
#include <LUFA/Drivers/USB/USB.h>
#ifdef PROTOCOL_CHIBIOS