From a98361e6babc866bd7b4ed6b22f197e98e2dc28a Mon Sep 17 00:00:00 2001 From: sowgro Date: Tue, 4 Nov 2025 18:12:00 -0500 Subject: [incomplete] work on part 2 architecture --- project/Core/Src/Project/local_control.c | 23 ++++++++++ project/Core/Src/Project/project.c | 62 ++++++++------------------ project/Core/Src/Project/remote_control.c | 72 +++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 43 deletions(-) create mode 100644 project/Core/Src/Project/local_control.c create mode 100644 project/Core/Src/Project/remote_control.c (limited to 'project') diff --git a/project/Core/Src/Project/local_control.c b/project/Core/Src/Project/local_control.c new file mode 100644 index 0000000..236e555 --- /dev/null +++ b/project/Core/Src/Project/local_control.c @@ -0,0 +1,23 @@ +/* + * local_control.c + * + * Created on: Nov 4, 2025 + * Author: sowgro + */ + +void local_control_start() { + GPIO_Init(); + NVIC_Enable_IRQ(XTI15_10_IRQn); +} + +void local_control_loop() { + +} + +void local_control_stop() { + +} + +void XTI15_10_IRQHandler() { + +} diff --git a/project/Core/Src/Project/project.c b/project/Core/Src/Project/project.c index 428dc54..a939879 100644 --- a/project/Core/Src/Project/project.c +++ b/project/Core/Src/Project/project.c @@ -13,55 +13,31 @@ #include "hw4.h" #include "player_actions.h" +#define LOCAL_MODE (1) +#define REMOTE_MODE (2) + void project_run() { - char buffer[80]; - char* cur = buffer; - uint8_t state = STOPPED_STATE; + int mode = LOCAL_MODE; + + GPIO_Init(); + NVIC_EnableIRQ(EXTI9_5_IRQn); - help(); for (;;) { + switch (mode) { + case REMOTE_MODE: + remote_control_loop(); break; + case LOCAL_MODE: + local_control_loop(); break; + } + if (state == PAUSED_STATE) pause_loop(); - char ch = read_and_print_char_nonblocking(); - if (!ch) - continue; - if (ch == '\r') { - *cur = 0; - handle_input(buffer, &state); - cur = buffer; - continue; - } - if (ch == 0x08 || ch == 0x7F) { - if (cur <= buffer) - continue; - cur--; - printf("\b \b"); - continue; - } - *cur++ = ch; } } -void handle_input(char buffer[], uint8_t *state) { - if (!strcmp(buffer, "HELP")) { - help(); - } - else if (!strcmp(buffer, "NEXT")) { - next(); - } - else if (!strcmp(buffer, "PLAY")) { - play(); - *state = PLAYING_STATE; - } - else if (!strcmp(buffer, "PAUSE")) { - pause(); - *state = PAUSED_STATE; - } - else if (!strcmp(buffer, "STOP")) { - stop(); - *state = STOPPED_STATE; - } - else { - printf("Unknown command \"%s\"\n\r", buffer); - } +void EXTI9_5_IRQHandler() { + } + + + diff --git a/project/Core/Src/Project/remote_control.c b/project/Core/Src/Project/remote_control.c new file mode 100644 index 0000000..905f966 --- /dev/null +++ b/project/Core/Src/Project/remote_control.c @@ -0,0 +1,72 @@ +/* + * remote_control.c + * + * Created on: Nov 4, 2025 + * Author: sowgro + */ + +static char buffer[80]; +static char* cur = buffer; +static uint8_t state = STOPPED_STATE; + +void remote_control_start() { + NVIC_EnableIRQ (USART2_IRQn); + USART2->CR1 |= USART_CR1_RXNEIE; // 1 << 5 + + help(); +} + +void remote_control_loop() { + +} + +void remote_control_stop() { + +} + +static void parse_input(char buffer[], uint8_t *state) { + if (!strcmp(buffer, "HELP")) { + help(); + } + else if (!strcmp(buffer, "NEXT")) { + next(); + } + else if (!strcmp(buffer, "PLAY")) { + play(); + *state = PLAYING_STATE; + } + else if (!strcmp(buffer, "PAUSE")) { + pause(); + *state = PAUSED_STATE; + } + else if (!strcmp(buffer, "STOP")) { + stop(); + *state = STOPPED_STATE; + } + else { + printf("Unknown command \"%s\"\n\r", buffer); + } +} + +void USART2_IRQHandler() { + int ch = USART_Read(USART2); + remote_control_parse_input(ch); + if (!ch) + continue; + if (ch == '\r') { + *cur = 0; + handle_input(buffer, &state); + cur = buffer; + continue; + } + if (ch == 0x08 || ch == 0x7F) { + if (cur <= buffer) + continue; + cur--; + printf("\b \b"); + continue; + } + *cur++ = ch; +} + + -- cgit v1.2.3