/* * player_actions.c * Code related to the player states and actions * * Created on: Oct 17, 2025 * Author: sowgro */ #include #include #include #include #include "song.h" #include "LED.h" #include "systick.h" static uint8_t state = STOPPED_STATE; /** * Returns the current player state to other files */ uint8_t player_get_state() { return state; } /** * Sets the current player state from other files */ void player_set_state(uint8_t newState) { state = newState; } /** * Prints the help message */ 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"); printf("PLAY - Play the song (LED on)\r\n"); printf("PAUSE - Pause the song (LED flash)\r\n"); printf("STOP - Stop the song (LED off)\r\n"); } /** * Advances the player to the next song. */ void player_next() { static int current_song = -1; current_song++; if (current_song > 4) current_song = 0; void *song = get_song(current_song).p_song; parse_song(song); song_info_t song_info = parser_get_song_info(); printf("Song #%i\r\n", current_song + 1); if (song_info.title) printf("Title: %s\r\n", song_info.title); if (song_info.copyright) printf("Copyright: %s\r\n", song_info.copyright); if (song_info.tempo) printf("Tempo: %i\r\n", song_info.tempo); } /** * Switches to the play state */ void player_play() { state = PLAYING_STATE; LED_On(); } /** * Switches to the pause state */ void player_pause() { state = PAUSED_STATE; } /** * Switches to the stop state */ void player_stop() { state = STOPPED_STATE; LED_Off(); } /** * Toggles the LED every second if in pause mode */ void player_tick() { int count = systick_get_count(); switch (state) { case PAUSED_STATE: if(!(count & 1023)) { LED_Toggle(); }; break; case PLAYING_STATE: parser_play_notes(count); break; } }