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:
Pol Henarejos 2024-09-27 20:55:49 +02:00
parent 058473dce9
commit a816b6f747
No known key found for this signature in database
GPG key ID: C0095B7870A4CCD3
6 changed files with 27 additions and 8 deletions

View file

@ -72,15 +72,16 @@
#define PHY_VID 0x0
#define PHY_PID 0x2
#define PHY_LED_GPIO 0x4
#define PHY_LED_MODE 0x5
#define PHY_LED_BTNESS 0x5
#define PHY_OPTS 0x6
#define PHY_OPT_WCID 0x1
#define PHY_OPT_VPID 0x2
#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

View file

@ -31,6 +31,9 @@ extern void led_driver_color(uint8_t, uint32_t, float);
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) {
led_mode = mode;
}

View file

@ -51,9 +51,9 @@ enum {
#define LED_ON_NO_BLINK ((1000 << LED_ON_SHIFT) | (0 << LED_OFF_SHIFT))
enum {
MODE_NOT_MOUNTED = (HALF_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_SUSPENDED = (HALF_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_BLUE << LED_COLOR_SHIFT) | (1000 << LED_ON_SHIFT) | (2000 << 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 = (MAX_BTNESS << LED_BTNESS_SHIFT) | (LED_COLOR_GREEN << LED_COLOR_SHIFT) | (500 << LED_ON_SHIFT) | (500 << 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_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_init();
extern uint32_t led_phy_btness;
extern bool led_dimmable;
#endif // _LED_H_

View file

@ -47,7 +47,10 @@ void led_driver_init() {
void led_driver_color(uint8_t color, uint32_t led_brightness, float progress) {
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;
uint8_t r = (pixel_color >> 16) & 0xFF;
uint8_t g = (pixel_color >> 8) & 0xFF;

View file

@ -80,7 +80,10 @@ uint32_t pixel[] = {
};
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];
uint8_t r = (pixel_color >> 16) & 0xFF;
uint8_t g = (pixel_color >> 24) & 0xFF;

View file

@ -65,11 +65,17 @@ void usb_init() {
if (opts & PHY_OPT_WCID) {
enable_wcid = true;
}
if (opts & PHY_OPT_DIMM) {
led_dimmable = true;
}
}
if (file_get_size(ef_phy) >= 4 && opts & PHY_OPT_VPID) {
desc_device.idVendor = (data[PHY_VID] << 8) | data[PHY_VID+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);
#endif