/* * Command.c * * Created: Thu Oct 13 2022 16:37:17 * Author Chris */ // ============================================================================================ // Includes #include "Command.h" #include "pico/stdlib.h" #include "pico/multicore.h" #include "hardware/irq.h" // ============================================================================================ // Defines #define COMMAND_BUFFER_SIZE 16 #define INVALID -1 // ============================================================================================ // Variables static Command_u _Command_Buffer[COMMAND_BUFFER_SIZE]; // ============================================================================================ // Function Declarations void Command_Send_Multicore_Command(uint8_t command, uint8_t parameter, uint16_t value); void Command_Add_Multicore_Command_To_Buffer(uint command); /******************************************************************* Interrupt Service Routines *******************************************************************/ void ISR_MULTICORE_READ() { uint32_t Multicore_Data; // Just record the latest entry while(multicore_fifo_rvalid()) { Multicore_Data = multicore_fifo_pop_blocking(); Command_Add_Multicore_Command_To_Buffer(Multicore_Data); } multicore_fifo_clear_irq(); } /******************************************************************* Functions *******************************************************************/ void Command_Init() { for(uint i=0;i to_us_since_boot(get_absolute_time())); return Return_Value; } int Command_Get_Request_Response_By_Command_And_Parameter(uint8_t command, uint8_t parameter, int timeout_us) { int Return_Value = INVALID; uint64_t Timeout_Time_us = to_us_since_boot(get_absolute_time()) + timeout_us; do { for(uint i=0;i to_us_since_boot(get_absolute_time())); return Return_Value; } uint Command_Get_Request_Response_Buffer_Fill_Count() { uint Fill_Count = 0; for(uint i=0;i