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:
parent
058473dce9
commit
a816b6f747
6 changed files with 27 additions and 8 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue