From cd33c3597481af67082b7db56bdab45ebd403ef6 Mon Sep 17 00:00:00 2001 From: Joe Kearney Date: Sat, 1 Mar 2025 16:57:45 -0600 Subject: [PATCH] Fixes after testing. --- BLE/BLE_Packets.c | 10 ++- States/Playing/State_Playing__Interacting.c | 1 + States/State_Configuring.c | 87 ++++++++++++++++++++- States/State_Initializing.c | 10 --- 4 files changed, 92 insertions(+), 16 deletions(-) diff --git a/BLE/BLE_Packets.c b/BLE/BLE_Packets.c index 578bfce..a1da397 100644 --- a/BLE/BLE_Packets.c +++ b/BLE/BLE_Packets.c @@ -154,10 +154,12 @@ void BLE_UpdateStatusPacket(uint8_t current_state) uint8_t team_ID; uint8_t player_ID; uint8_t weapon_ID; + uint32_t secondary_color; Protocol_T protocol; (void) SETTINGS_get_uint8_t(SYSTEMK_SETTING_TEAMID, &team_ID); (void) SETTINGS_get_uint8_t(SYSTEMK_SETTING_PLAYERID, &player_ID); (void) SETTINGS_get_uint8_t(SYSTEMK_SETTING_WEAPONID, &weapon_ID); + (void) SETTINGS_get_uint32_t(SYSTEMK_SETTING_SECONDARY_COLOR, &secondary_color); protocol = GetWeaponFromID(weapon_ID).Protocol; uint32_t Team_Color = (uint32_t)PROTOCOLS_GetColor(protocol, team_ID, player_ID); @@ -186,10 +188,10 @@ void BLE_UpdateStatusPacket(uint8_t current_state) Advertising_Data.data[19] = (Team_Color >> 8) & 0xFF; Advertising_Data.data[20] = (Team_Color >> 16) & 0xFF; Advertising_Data.data[21] = (Team_Color >> 24) & 0xFF; - Advertising_Data.data[22] = (Team_Color >> 0) & 0xFF; // Secondary Color - Advertising_Data.data[23] = (Team_Color >> 8) & 0xFF; // Secondary Color - Advertising_Data.data[24] = (Team_Color >> 16) & 0xFF; // Secondary Color - Advertising_Data.data[25] = (Team_Color >> 24) & 0xFF; // Secondary Color + Advertising_Data.data[22] = (secondary_color >> 0) & 0xFF; + Advertising_Data.data[23] = (secondary_color >> 8) & 0xFF; + Advertising_Data.data[24] = (secondary_color >> 16) & 0xFF; + Advertising_Data.data[25] = (secondary_color >> 24) & 0xFF; Advertising_Data.data[26] = current_state; Advertising_Data.data[27] = 0xFF; Advertising_Data.data[28] = 0xFF; diff --git a/States/Playing/State_Playing__Interacting.c b/States/Playing/State_Playing__Interacting.c index 8adc07e..0b1fd32 100644 --- a/States/Playing/State_Playing__Interacting.c +++ b/States/Playing/State_Playing__Interacting.c @@ -60,6 +60,7 @@ static void Playing__Interacting_Entry(StateMachineContext_T * context) Playing_Entry(context); srand(xTaskGetTickCount()); } + BLE_UpdateStatusPacket(STATE_PLAYING__INTERACTING); LOG("Entering the Interacting substate of the Playing state."); } diff --git a/States/State_Configuring.c b/States/State_Configuring.c index e27b0f8..f196438 100644 --- a/States/State_Configuring.c +++ b/States/State_Configuring.c @@ -68,7 +68,7 @@ static void Configuring_Entry(StateMachineContext_T *context) AudioAction_T audio_action = {.ID = AUDIO_PLAY_BEEP, .Data = (void *)0x00}; Perform_Audio_Action(&audio_action); } - + BLE_UpdateHelloPacket(); if (BLE_ScanAndAdvertise() != SYSTEMK_RESULT_SUCCESS) @@ -81,7 +81,7 @@ static void Configuring_Entry(StateMachineContext_T *context) BLEConfigurationResponseTimer = xTimerCreateStatic( "BLEConfigResponse", xBLEConfigurationResponseTimerPeriod, - pdTRUE, + pdFALSE, (void *)0, BLEConfigurationResponseTimerCallback, &xBLEConfigurationResponseTimerBuffer); @@ -105,6 +105,13 @@ static void Configuring_Do(StateMachineContext_T *context) { portBASE_TYPE xStatus; static KEvent_T Event; + + // For the first hunderd milliseconds, keep updating the Hello packet, since on some platforms (PSoC6), one call is not enough. + // TODO: Fix the Hello packet hack on PSoC6. + if ((xTaskGetTickCount() - context->Time_At_State_Entry_In_Ticks) < (100 / portTICK_PERIOD_MS)) + { + BLE_UpdateHelloPacket(); + } xStatus = Receive_KEvent(&Event); @@ -278,11 +285,87 @@ static SystemKResult_T HandleParameterChangeRequest(BLE_ParameterKey_T key, uint { result = Set_Team_With_Audio_Feedback(team_ID); } + if (result == SYSTEMK_RESULT_SUCCESS) + { + KLOG_INFO(KLOG_TAG, "Team set to %u over BLE.", team_ID); + } } else if (key == BLE_PARAMETER_KEY_PLAYER_ID) { uint8_t player_ID = (uint8_t)value; result = Set_Player_With_Audio_Feedback(player_ID); + if (result == SYSTEMK_RESULT_SUCCESS) + { + KLOG_INFO(KLOG_TAG, "Player set to %u over BLE.", player_ID); + } + } + else if (key == BLE_PARAMETER_KEY_GAME_LENGTH) + { + result = SETTINGS_set_uint32_t(SYSTEMK_SETTING_T_GAME_LENGTH_in_ms, value); + + if (result == SYSTEMK_RESULT_SUCCESS) + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BEEP, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + KLOG_INFO(KLOG_TAG, "Game length set to %lu ms over BLE.", value); + } + else + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BONK, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + } + } + else if (key == BLE_PARAMETER_KEY_MAX_HEALTH) + { + uint8_t max_health = (uint8_t)value; + Set_Max_Health(max_health); + result = SETTINGS_set_uint8_t(SYSTEMK_SETTING_MAX_HEALTH, max_health); + + if (result == SYSTEMK_RESULT_SUCCESS) + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BEEP, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + KLOG_INFO(KLOG_TAG, "Max health set to %u over BLE.", max_health); + } + else + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BONK, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + } + } + else if (key == BLE_PARAMETER_KEY_SECONDARY_COLOR) + { + result = SETTINGS_set_uint32_t(SYSTEMK_SETTING_SECONDARY_COLOR, value); + + if (result == SYSTEMK_RESULT_SUCCESS) + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BEEP, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + KLOG_INFO(KLOG_TAG, "Secondary color set to %lu over BLE.", value); + } + else + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BONK, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + } + } + else if (key == BLE_PARAMETER_KEY_SPECIAL_WEAPONS_ON_REENTRY) + { + uint8_t n_weapons_on_reentry = (uint8_t)value; + Set_Available_Bombs(n_weapons_on_reentry); + result = SETTINGS_set_uint8_t(SYSTEMK_SETTING_N_SPECIAL_WEAPONS_ON_REENTRY, n_weapons_on_reentry); + + if (result == SYSTEMK_RESULT_SUCCESS) + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BEEP, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + KLOG_INFO(KLOG_TAG, "Number of special weapons granted on reentry set to %u over BLE.", n_weapons_on_reentry); + } + else + { + AudioAction_T audio_action = {.ID = AUDIO_PLAY_BONK, .Data = (void *)0x00}; + Perform_Audio_Action(&audio_action); + } } return result; diff --git a/States/State_Initializing.c b/States/State_Initializing.c index 14a0d09..0b490d8 100644 --- a/States/State_Initializing.c +++ b/States/State_Initializing.c @@ -114,14 +114,4 @@ static void Initializing_Exit(StateMachineContext_T * context) uint8_t weapon_ID = NERF_LASER_STRIKE_BLASTER_ID; (void) SETTINGS_set_uint8_t(SYSTEMK_SETTING_WEAPONID, weapon_ID); (void) SETTINGS_Save(); - - //! \todo TEAM_PURPLE is always one-hit kill. - uint8_t team_ID; - (void) SETTINGS_get_uint8_t(SYSTEMK_SETTING_TEAMID, &team_ID); - TeamID_t my_common_team_ID = Resolve_Common_Team_ID(team_ID); - - if (my_common_team_ID == TEAM_PURPLE) - { - Set_Health(10); - } }