mirror of
https://github.com/polhenarejos/pico-keys-sdk
synced 2026-06-18 20:35:57 +02:00
Added PHY options to control the brigthness of the LED and its dimming.
Signed-off-by: Pol Henarejos <pol.henarejos@cttc.es>
This commit is contained in:
@@ -72,15 +72,16 @@
|
|||||||
#define PHY_VID 0x0
|
#define PHY_VID 0x0
|
||||||
#define PHY_PID 0x2
|
#define PHY_PID 0x2
|
||||||
#define PHY_LED_GPIO 0x4
|
#define PHY_LED_GPIO 0x4
|
||||||
#define PHY_LED_MODE 0x5
|
#define PHY_LED_BTNESS 0x5
|
||||||
#define PHY_OPTS 0x6
|
#define PHY_OPTS 0x6
|
||||||
|
|
||||||
#define PHY_OPT_WCID 0x1
|
#define PHY_OPT_WCID 0x1
|
||||||
#define PHY_OPT_VPID 0x2
|
#define PHY_OPT_VPID 0x2
|
||||||
#define PHY_OPT_GPIO 0x4
|
#define PHY_OPT_GPIO 0x4
|
||||||
#define PHY_OPT_LED 0x8
|
#define PHY_OPT_BTNESS 0x8
|
||||||
|
#define PHY_OPT_DIMM 0x10
|
||||||
|
|
||||||
#define PHY_OPT_MASK (PHY_OPT_WCID)
|
#define PHY_OPT_MASK (PHY_OPT_DIMM | PHY_OPT_WCID)
|
||||||
|
|
||||||
#define PHY_MAX_SIZE 8
|
#define PHY_MAX_SIZE 8
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ extern void led_driver_color(uint8_t, uint32_t, float);
|
|||||||
|
|
||||||
static uint32_t led_mode = MODE_NOT_MOUNTED;
|
static uint32_t led_mode = MODE_NOT_MOUNTED;
|
||||||
|
|
||||||
|
uint32_t led_phy_btness = MAX_BTNESS;
|
||||||
|
bool led_dimmable = false;
|
||||||
|
|
||||||
void led_set_mode(uint32_t mode) {
|
void led_set_mode(uint32_t mode) {
|
||||||
led_mode = mode;
|
led_mode = mode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ enum {
|
|||||||
#define LED_ON_NO_BLINK ((1000 << LED_ON_SHIFT) | (0 << LED_OFF_SHIFT))
|
#define LED_ON_NO_BLINK ((1000 << LED_ON_SHIFT) | (0 << LED_OFF_SHIFT))
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
MODE_NOT_MOUNTED = (HALF_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_RED << LED_COLOR_SHIFT) | (500 << LED_ON_SHIFT) | (500 << LED_OFF_SHIFT),
|
MODE_NOT_MOUNTED = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_RED << LED_COLOR_SHIFT) | (500 << LED_ON_SHIFT) | (500 << LED_OFF_SHIFT),
|
||||||
MODE_MOUNTED = (HALF_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_GREEN << LED_COLOR_SHIFT) | (500 << LED_ON_SHIFT) | (500 << LED_OFF_SHIFT),
|
MODE_MOUNTED = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_GREEN << LED_COLOR_SHIFT) | (500 << LED_ON_SHIFT) | (500 << LED_OFF_SHIFT),
|
||||||
MODE_SUSPENDED = (HALF_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_BLUE << LED_COLOR_SHIFT) | (1000 << LED_ON_SHIFT) | (2000 << LED_OFF_SHIFT),
|
MODE_SUSPENDED = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_BLUE << LED_COLOR_SHIFT) | (1000 << LED_ON_SHIFT) | (2000 << LED_OFF_SHIFT),
|
||||||
MODE_PROCESSING = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_GREEN << LED_COLOR_SHIFT) | (50 << LED_ON_SHIFT) | (50 << LED_OFF_SHIFT),
|
MODE_PROCESSING = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_GREEN << LED_COLOR_SHIFT) | (50 << LED_ON_SHIFT) | (50 << LED_OFF_SHIFT),
|
||||||
MODE_BUTTON = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_YELLOW << LED_COLOR_SHIFT) | (1000 << LED_ON_SHIFT) | (100 << LED_OFF_SHIFT),
|
MODE_BUTTON = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_YELLOW << LED_COLOR_SHIFT) | (1000 << LED_ON_SHIFT) | (100 << LED_OFF_SHIFT),
|
||||||
|
|
||||||
@@ -66,4 +66,7 @@ extern void led_blinking_task();
|
|||||||
extern void led_off_all();
|
extern void led_off_all();
|
||||||
extern void led_init();
|
extern void led_init();
|
||||||
|
|
||||||
|
extern uint32_t led_phy_btness;
|
||||||
|
extern bool led_dimmable;
|
||||||
|
|
||||||
#endif // _LED_H_
|
#endif // _LED_H_
|
||||||
|
|||||||
@@ -47,7 +47,10 @@ void led_driver_init() {
|
|||||||
|
|
||||||
void led_driver_color(uint8_t color, uint32_t led_brightness, float progress) {
|
void led_driver_color(uint8_t color, uint32_t led_brightness, float progress) {
|
||||||
static tNeopixel spx = {.index = 0, .rgb = 0};
|
static tNeopixel spx = {.index = 0, .rgb = 0};
|
||||||
float brightness = ((float)led_brightness / MAX_BTNESS) * progress;
|
if (!led_dimmable) {
|
||||||
|
progress = progress >= 0.5 ? 1 : 0;
|
||||||
|
}
|
||||||
|
float brightness = ((float)led_brightness / MAX_BTNESS) * ((float)led_phy_btness / MAX_BTNESS) * progress;
|
||||||
uint32_t pixel_color = pixel[color].rgb;
|
uint32_t pixel_color = pixel[color].rgb;
|
||||||
uint8_t r = (pixel_color >> 16) & 0xFF;
|
uint8_t r = (pixel_color >> 16) & 0xFF;
|
||||||
uint8_t g = (pixel_color >> 8) & 0xFF;
|
uint8_t g = (pixel_color >> 8) & 0xFF;
|
||||||
|
|||||||
@@ -80,7 +80,10 @@ uint32_t pixel[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void led_driver_color(uint8_t color, uint32_t led_brightness, float progress) {
|
void led_driver_color(uint8_t color, uint32_t led_brightness, float progress) {
|
||||||
float brightness = ((float)led_brightness / MAX_BTNESS) * progress;
|
if (!led_dimmable) {
|
||||||
|
progress = progress >= 0.5 ? 1 : 0;
|
||||||
|
}
|
||||||
|
float brightness = ((float)led_brightness / MAX_BTNESS) * ((float)led_phy_btness / MAX_BTNESS) * progress;
|
||||||
uint32_t pixel_color = pixel[color];
|
uint32_t pixel_color = pixel[color];
|
||||||
uint8_t r = (pixel_color >> 16) & 0xFF;
|
uint8_t r = (pixel_color >> 16) & 0xFF;
|
||||||
uint8_t g = (pixel_color >> 24) & 0xFF;
|
uint8_t g = (pixel_color >> 24) & 0xFF;
|
||||||
|
|||||||
@@ -65,11 +65,17 @@ void usb_init() {
|
|||||||
if (opts & PHY_OPT_WCID) {
|
if (opts & PHY_OPT_WCID) {
|
||||||
enable_wcid = true;
|
enable_wcid = true;
|
||||||
}
|
}
|
||||||
|
if (opts & PHY_OPT_DIMM) {
|
||||||
|
led_dimmable = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (file_get_size(ef_phy) >= 4 && opts & PHY_OPT_VPID) {
|
if (file_get_size(ef_phy) >= 4 && opts & PHY_OPT_VPID) {
|
||||||
desc_device.idVendor = (data[PHY_VID] << 8) | data[PHY_VID+1];
|
desc_device.idVendor = (data[PHY_VID] << 8) | data[PHY_VID+1];
|
||||||
desc_device.idProduct = (data[PHY_PID] << 8) | data[PHY_PID+1];
|
desc_device.idProduct = (data[PHY_PID] << 8) | data[PHY_PID+1];
|
||||||
}
|
}
|
||||||
|
if (opts & PHY_OPT_BTNESS) {
|
||||||
|
led_phy_btness = data[PHY_LED_BTNESS];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mutex_init(&mutex);
|
mutex_init(&mutex);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user