Add led value and color commands
This commit is contained in:
		
				
					committed by
					
						
						Jeremy Soller
					
				
			
			
				
	
			
			
			
						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> {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user