/* * 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; }