Add led value and color commands
This commit is contained in:
parent
5bab59a526
commit
304e7534c9
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#ifndef __SCRATCH__
|
#ifndef __SCRATCH__
|
||||||
#include <board/scratch.h>
|
#include <board/scratch.h>
|
||||||
|
#include <board/kbled.h>
|
||||||
#include <board/keymap.h>
|
#include <board/keymap.h>
|
||||||
#endif
|
#endif
|
||||||
#include <board/smfi.h>
|
#include <board/smfi.h>
|
||||||
@ -183,6 +184,54 @@ static enum Result cmd_keymap_set(void) {
|
|||||||
return RES_ERR;
|
return RES_ERR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum Result cmd_led_get_value(void) {
|
||||||
|
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
|
||||||
|
if (index == CMD_LED_INDEX_ALL) {
|
||||||
|
smfi_cmd[SMFI_CMD_DATA + 1] = kbled_get();
|
||||||
|
smfi_cmd[SMFI_CMD_DATA + 2] = kbled_max();
|
||||||
|
return RES_OK;
|
||||||
|
} else {
|
||||||
|
return RES_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum Result cmd_led_set_value(void) {
|
||||||
|
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
|
||||||
|
if (index == CMD_LED_INDEX_ALL) {
|
||||||
|
kbled_set(smfi_cmd[SMFI_CMD_DATA + 1]);
|
||||||
|
return RES_OK;
|
||||||
|
} else {
|
||||||
|
return RES_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum Result cmd_led_get_color(void) {
|
||||||
|
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
|
||||||
|
if (index == CMD_LED_INDEX_ALL) {
|
||||||
|
uint32_t color = kbled_get_color();
|
||||||
|
smfi_cmd[SMFI_CMD_DATA + 1] = (uint8_t)(color >> 16);
|
||||||
|
smfi_cmd[SMFI_CMD_DATA + 2] = (uint8_t)(color >> 8);
|
||||||
|
smfi_cmd[SMFI_CMD_DATA + 3] = (uint8_t)(color >> 0);
|
||||||
|
return RES_OK;
|
||||||
|
} else {
|
||||||
|
return RES_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum Result cmd_led_set_color(void) {
|
||||||
|
uint8_t index = smfi_cmd[SMFI_CMD_DATA];
|
||||||
|
if (index == CMD_LED_INDEX_ALL) {
|
||||||
|
kbled_set_color(
|
||||||
|
(((uint32_t)smfi_cmd[SMFI_CMD_DATA + 1]) << 16) |
|
||||||
|
(((uint32_t)smfi_cmd[SMFI_CMD_DATA + 2]) << 8) |
|
||||||
|
(((uint32_t)smfi_cmd[SMFI_CMD_DATA + 3]) << 0)
|
||||||
|
);
|
||||||
|
return RES_OK;
|
||||||
|
} else {
|
||||||
|
return RES_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif // !defined(__SCRATCH__)
|
#endif // !defined(__SCRATCH__)
|
||||||
|
|
||||||
#if defined(__SCRATCH__)
|
#if defined(__SCRATCH__)
|
||||||
@ -296,6 +345,18 @@ void smfi_event(void) {
|
|||||||
case CMD_KEYMAP_SET:
|
case CMD_KEYMAP_SET:
|
||||||
smfi_cmd[SMFI_CMD_RES] = cmd_keymap_set();
|
smfi_cmd[SMFI_CMD_RES] = cmd_keymap_set();
|
||||||
break;
|
break;
|
||||||
|
case CMD_LED_GET_VALUE:
|
||||||
|
smfi_cmd[SMFI_CMD_RES] = cmd_led_get_value();
|
||||||
|
break;
|
||||||
|
case CMD_LED_SET_VALUE:
|
||||||
|
smfi_cmd[SMFI_CMD_RES] = cmd_led_set_value();
|
||||||
|
break;
|
||||||
|
case CMD_LED_GET_COLOR:
|
||||||
|
smfi_cmd[SMFI_CMD_RES] = cmd_led_get_color();
|
||||||
|
break;
|
||||||
|
case CMD_LED_SET_COLOR:
|
||||||
|
smfi_cmd[SMFI_CMD_RES] = cmd_led_set_color();
|
||||||
|
break;
|
||||||
#endif // !defined(__SCRATCH__)
|
#endif // !defined(__SCRATCH__)
|
||||||
case CMD_SPI:
|
case CMD_SPI:
|
||||||
smfi_cmd[SMFI_CMD_RES] = cmd_spi();
|
smfi_cmd[SMFI_CMD_RES] = cmd_spi();
|
||||||
|
@ -26,6 +26,14 @@ enum Command {
|
|||||||
CMD_KEYMAP_GET = 9,
|
CMD_KEYMAP_GET = 9,
|
||||||
// Set keyboard map index
|
// Set keyboard map index
|
||||||
CMD_KEYMAP_SET = 10,
|
CMD_KEYMAP_SET = 10,
|
||||||
|
// Get LED value by index
|
||||||
|
CMD_LED_GET_VALUE = 11,
|
||||||
|
// Set LED value by index
|
||||||
|
CMD_LED_SET_VALUE = 12,
|
||||||
|
// Get LED color by index
|
||||||
|
CMD_LED_GET_COLOR = 13,
|
||||||
|
// Set LED color by index
|
||||||
|
CMD_LED_SET_COLOR = 14,
|
||||||
//TODO
|
//TODO
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -48,4 +56,6 @@ enum CommandSpiFlag {
|
|||||||
CMD_SPI_FLAG_BACKUP = (1 << 3),
|
CMD_SPI_FLAG_BACKUP = (1 << 3),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define CMD_LED_INDEX_ALL 0xFF
|
||||||
|
|
||||||
#endif // _COMMON_COMMAND_H
|
#endif // _COMMON_COMMAND_H
|
||||||
|
@ -25,6 +25,10 @@ enum Cmd {
|
|||||||
FanSet = 8,
|
FanSet = 8,
|
||||||
KeymapGet = 9,
|
KeymapGet = 9,
|
||||||
KeymapSet = 10,
|
KeymapSet = 10,
|
||||||
|
LedGetValue = 11,
|
||||||
|
LedSetValue = 12,
|
||||||
|
LedGetColor = 13,
|
||||||
|
LedSetColor = 14,
|
||||||
}
|
}
|
||||||
|
|
||||||
const CMD_SPI_FLAG_READ: u8 = 1 << 0;
|
const CMD_SPI_FLAG_READ: u8 = 1 << 0;
|
||||||
@ -193,6 +197,53 @@ impl<A: Access> Ec<A> {
|
|||||||
];
|
];
|
||||||
self.command(Cmd::KeymapSet, &mut data)
|
self.command(Cmd::KeymapSet, &mut data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get LED value by index
|
||||||
|
pub unsafe fn led_get_value(&mut self, index: u8) -> Result<(u8, u8), Error> {
|
||||||
|
let mut data = [
|
||||||
|
index,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
self.command(Cmd::LedGetValue, &mut data)?;
|
||||||
|
Ok((data[1], data[2]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set LED value by index
|
||||||
|
pub unsafe fn led_set_value(&mut self, index: u8, value: u8) -> Result<(), Error> {
|
||||||
|
let mut data = [
|
||||||
|
index,
|
||||||
|
value,
|
||||||
|
];
|
||||||
|
self.command(Cmd::LedSetValue, &mut data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get LED color by index
|
||||||
|
pub unsafe fn led_get_color(&mut self, index: u8) -> Result<(u8, u8, u8), Error> {
|
||||||
|
let mut data = [
|
||||||
|
index,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
self.command(Cmd::LedGetColor, &mut data)?;
|
||||||
|
Ok((
|
||||||
|
data[1],
|
||||||
|
data[2],
|
||||||
|
data[3],
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set LED color by index
|
||||||
|
pub unsafe fn led_set_color(&mut self, index: u8, red: u8, green: u8, blue: u8) -> Result<(), Error> {
|
||||||
|
let mut data = [
|
||||||
|
index,
|
||||||
|
red,
|
||||||
|
green,
|
||||||
|
blue,
|
||||||
|
];
|
||||||
|
self.command(Cmd::LedSetColor, &mut data)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct EcSpi<'a, A: Access> {
|
pub struct EcSpi<'a, A: Access> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user