Files
Christian Leibold 43f37e0b57 - Added POGRAM CHANGES to switch Mode via MIDI
- Added Control Change to switch On/Off Pause Light
2025-11-24 09:37:03 +01:00

134 lines
4.7 KiB
C

/*
* Core1.c
*
* Created: Wed Dec 08 2021 12:57:45
* Author Chris
*/
// ============================================================================================
// Includes
#include "Core1.h"
#include "Command_Definition.h"
#include "UART0.h"
#include "Core1_ADC.h"
#include "Core1_LED_Enable.h"
#include "Core1_LED_Control.h"
#include "Core1_MIDI_Receiver.h"
#include "Core1_Light_Controller.h"
// ============================================================================================
// Defines
// ============================================================================================
// Variables
// ============================================================================================
// Function Declarations
void Core1_Parse_Command(uint8_t command, uint8_t parameter, int16_t value);
void Core1_Send_Multicore_Answer(uint8_t command, uint8_t parameter, int16_t value);
/*******************************************************************
Interrupt Service Routines
*******************************************************************/
/*******************************************************************
Functions
*******************************************************************/
void Core1_Main(void)
{
// Analog Converter =============================================
Core1_ADC_Init();
// LED PWR Enable =============================================
Core1_LED_Enable_Init();
// PWM / LED Control =========================================
Core1_LED_Control_Init();
// MIDI Receiver =============================================
Core1_MIDI_Receiver_Init();
// Light Controller =============================================
Core1_Light_Controller_Init();
// Main Loop =================================================
while(1)
{
if(multicore_fifo_rvalid())
{
Command_u Command;
Command.Data = multicore_fifo_pop_blocking();
Core1_Parse_Command(Command.Fields.Command, Command.Fields.Parameter, Command.Fields.Value);
}
Core1_MIDI_Receiver_Process();
Core1_Light_Controller_Tick();
Core1_LED_Enable_Tick();
}
}
/*******************************************************************
Internal Functions
*******************************************************************/
void Core1_Parse_Command(uint8_t command, uint8_t parameter, int16_t value)
{
switch (command)
{
/////////////
// General //
/////////////
case MULTICORE_COMMAND_SET_MIDI_TO_LIGHT_ENABLED: Core1_Light_Controller_Set_MIDI_To_Light_Enabled (value > 0); break;
//////////////////////////
// Direct Light Control //
//////////////////////////
case MULTICORE_COMMAND_SET_DIRECT_RED: Core1_LED_Control_Set_DC_Target (LED_Channel_1, R, (uint8_t)value); break;
case MULTICORE_COMMAND_SET_DIRECT_GREEN: Core1_LED_Control_Set_DC_Target (LED_Channel_1, G, (uint8_t)value); break;
case MULTICORE_COMMAND_SET_DIRECT_BLUE: Core1_LED_Control_Set_DC_Target (LED_Channel_1, B, (uint8_t)value); break;
case MULTICORE_COMMAND_SET_DIRECT_FADE_SPEED: Core1_LED_Control_Set_Fade_Speed(LED_Channel_1, (uint8_t)value); break;
/////////////////////////
// Voltage Supervision //
/////////////////////////
case MULTICORE_COMMAND_SET_INA260_BUSVOLTAGE: Core1_LED_Enable_Update_INA260_BusVoltage((uint16_t)value); break;
///////////////////////////////////////
// Get Functions Voltage Supervision //
///////////////////////////////////////
case MULTICORE_COMMAND_GET_ANALOG_VOLTAGE: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_ADC_Get_Result_mV()); break;
case MULTICORE_COMMAND_GET_LED_POWER_ERROR: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_LED_Enable_Get_Error()); break;
case MULTICORE_COMMAND_GET_LED_ENABLE_PIN: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_LED_Enable_Get_Enable_Pin()); break;
case MULTICORE_COMMAND_GET_LED_ALERT_PIN: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_LED_Enable_Get_Alert_Pin()); break;
////////////////////////////////////////
// Get Functions Mode Change via MIDI //
////////////////////////////////////////
case MULTICORE_COMMAND_GET_MODE_CHANGE_RECEIVED: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_Light_Controller_Get_Mode_Change_Received(LED_Channel_1)); break;
case MULTICORE_COMMAND_GET_MODE_CHANGE_NEW_MODE: Core1_Send_Multicore_Answer(command, 0, (int16_t)Core1_Light_Controller_Get_Mode_Change_New_Mode(LED_Channel_1)); break;
default: break;
}
}
void Core1_Send_Multicore_Answer(uint8_t command, uint8_t parameter, int16_t value)
{
Command_u Command;
Command.Fields.Command = command;
Command.Fields.Parameter = parameter;
Command.Fields.Value = value;
multicore_fifo_push_blocking(Command.Data);
}