From 43f64f0e1fad6e3586cdd5b6f0243f03db9adc23 Mon Sep 17 00:00:00 2001 From: jaseg Date: Sat, 12 Jan 2019 12:31:59 +0900 Subject: Split receiver into logical parts --- fw/main.c | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) (limited to 'fw/main.c') diff --git a/fw/main.c b/fw/main.c index cc07245..3eb08af 100644 --- a/fw/main.c +++ b/fw/main.c @@ -26,6 +26,24 @@ void TIM1_BRK_UP_TRG_COM_Handler() { TIM1->SR &= ~TIM_SR_UIF_Msk; } +enum packet_type { + PKT_TYPE_RESERVED = 0, + PKT_TYPE_SET_OUTPUTS_BINARY = 1, + PKT_TYPE_SET_GLOBAL_BRIGHTNESS = 2, + PKT_TYPE_SET_OUTPUTS = 3, + PKT_TYPE_MAX +}; + +struct { + struct command_if_def cmd_if; + int payload_len[PKT_TYPE_MAX]; +} cmd_if = {{PKT_TYPE_MAX}, { + [PKT_TYPE_RESERVED] = 0, + [PKT_TYPE_SET_OUTPUTS_BINARY] = 1, + [PKT_TYPE_SET_GLOBAL_BRIGHTNESS] = 1, + [PKT_TYPE_SET_OUTPUTS] = 8 } +}; + uint8_t out_state = 0x01; void set_outputs(uint8_t val[8]) { /* TODO implement BCM for digital brightness control */ @@ -43,6 +61,23 @@ void set_outputs_binary(int mask, int global_brightness) { set_outputs(val); } +void handle_command(int command, uint8_t *args) { + static int global_brightness = 0xff; + switch (command) { + case PKT_TYPE_SET_OUTPUTS_BINARY: + set_outputs_binary(args[0], global_brightness); + break; + + case PKT_TYPE_SET_GLOBAL_BRIGHTNESS: + global_brightness = args[0]; + break; + + case PKT_TYPE_SET_OUTPUTS: + set_outputs(args); + break; + } +} + int main(void) { RCC->CR |= RCC_CR_HSEON; while (!(RCC->CR&RCC_CR_HSERDY)); @@ -60,8 +95,8 @@ int main(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; GPIOA->MODER |= - (3<