From ab8b31b6af51ac46880d852134267905fc57d5ee Mon Sep 17 00:00:00 2001 From: sowgro Date: Wed, 5 Nov 2025 14:37:53 -0500 Subject: Fix pause --- project/Core/Src/Project/player_actions.c | 38 +++++++++++++++++++++++-------- project/Core/Src/Project/project.c | 13 ++--------- project/Core/Src/Project/remote_control.c | 23 +++++++++---------- 3 files changed, 41 insertions(+), 33 deletions(-) (limited to 'project/Core/Src') diff --git a/project/Core/Src/Project/player_actions.c b/project/Core/Src/Project/player_actions.c index 39b62df..dbb7859 100644 --- a/project/Core/Src/Project/player_actions.c +++ b/project/Core/Src/Project/player_actions.c @@ -13,7 +13,17 @@ #include "LED.h" #include "systick.h" -void help() { +static uint8_t state = STOPPED_STATE; + +uint8_t player_get_state() { + return state; +} + +void player_set_state(uint8_t newState) { + state = newState; +} + +void player_help() { printf("\r***REMOTE LED CONTROL MENU***\r\n"); printf("Available User Commands:\r\n"); printf("NEXT - Show next song info\r\n"); @@ -22,7 +32,7 @@ void help() { printf("STOP - Stop the song (LED off)\r\n"); } -void next() { +void player_next() { static int current_song = -1; current_song++; if (current_song > 4) @@ -40,20 +50,28 @@ void next() { printf("Tempo: %i\r\n", song_info.tempo); } -void play() { +void player_play() { + state = PLAYING_STATE; LED_On(); } -void pause() { +void player_pause() { + state = PAUSED_STATE; init_systick(); } -void pause_loop() { - if (check_systick()) { - LED_Toggle(); - } +void player_stop() { + state = STOPPED_STATE; + LED_Off(); } -void stop() { - LED_Off(); +void SysTick_Handler() { + if (state != PAUSED_STATE) + return; + + static int count = 0; + if(!(count & 1023)) { + LED_Toggle(); + } + count++; } diff --git a/project/Core/Src/Project/project.c b/project/Core/Src/Project/project.c index 7188207..56932f1 100644 --- a/project/Core/Src/Project/project.c +++ b/project/Core/Src/Project/project.c @@ -17,11 +17,6 @@ #include "GPIO.h" #include "project.h" -static uint8_t state = STOPPED_STATE; - -uint8_t *project_get_state() { - return &state; -} static uint8_t mode = REMOTE_MODE; uint8_t project_get_mode() { @@ -42,10 +37,6 @@ void project_run() { case LOCAL_MODE: local_control_loop(); break; } - - if (state == PAUSED_STATE) { - pause_loop(); - } } } @@ -58,9 +49,9 @@ void EXTI15_10_IRQHandler() { mode = !mode; switch (mode) { case REMOTE_MODE: - puts("\r\n***REMOTE MODE ACTIVE***\r\n"); break; + puts("\r\n***REMOTE MODE ACTIVE***\r"); break; case LOCAL_MODE: - puts("\r\n***MANUAL OVERRIDE MODE ACTIVE***\r\n"); break; + puts("\r\n***MANUAL OVERRIDE MODE ACTIVE***\r"); break; } } diff --git a/project/Core/Src/Project/remote_control.c b/project/Core/Src/Project/remote_control.c index 2153a4a..c8c1f73 100644 --- a/project/Core/Src/Project/remote_control.c +++ b/project/Core/Src/Project/remote_control.c @@ -11,6 +11,8 @@ #include "player_actions.h" #include "UART.h" #include "project.h" +#include "systick.h" +#include "player_actions.h" static char buffer[80]; static char* cur = buffer; @@ -19,7 +21,7 @@ void remote_control_init() { NVIC_EnableIRQ (USART2_IRQn); USART2->CR1 |= USART_CR1_RXNEIE; // 1 << 5 - help(); + player_help(); } void remote_control_loop() { @@ -27,36 +29,33 @@ void remote_control_loop() { } static void parse_input(char buffer[]) { - uint8_t *state = project_get_state(); if (!strcmp(buffer, "HELP")) { - help(); + player_help(); } else if (!strcmp(buffer, "NEXT")) { - next(); + player_next(); } else if (!strcmp(buffer, "PLAY")) { - play(); - *state = PLAYING_STATE; + player_play(); } else if (!strcmp(buffer, "PAUSE")) { - pause(); - *state = PAUSED_STATE; + player_pause(); } else if (!strcmp(buffer, "STOP")) { - stop(); - *state = STOPPED_STATE; + player_stop(); } else { printf("Unknown command \"%s\"\n\r", buffer); } } -#include "systick.h" void USART2_IRQHandler() { int ch = USART_Read(USART2); - if (project_get_mode() != REMOTE_MODE) + if (project_get_mode() != REMOTE_MODE) { + cur = buffer; return; + } putchar(ch); if (!ch) -- cgit v1.2.3