Compare commits

...

5 Commits

Author SHA1 Message Date
38544628b8 - Corrected some Midi -> MIDI 2025-11-24 15:52:50 +01:00
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
7b0c993e0b Merge branch 'main' of https://git.chrosweb.com/root/RP2350_MIDI_Lighter into main 2025-11-24 08:12:59 +01:00
d5f5c27694 - Fixed some details on the housing 2025-11-24 08:12:54 +01:00
d082c49215 - Added CC 123 Command to reset the NoteOn Counters
- Fixed Bug, where NoteOn Counters could be negative
2025-11-24 08:09:56 +01:00
9 changed files with 207 additions and 45 deletions

View File

@@ -82,6 +82,10 @@
#define MULTICORE_COMMAND_GET_LED_ENABLE_PIN 'c'
#define MULTICORE_COMMAND_GET_LED_ALERT_PIN 'd'
// Mode Change via MIDI //
#define MULTICORE_COMMAND_GET_MODE_CHANGE_RECEIVED 'e'
#define MULTICORE_COMMAND_GET_MODE_CHANGE_NEW_MODE 'f'
// ============================================================================================
// Datatypes
@@ -283,6 +287,10 @@ enum Idle_Screen
#define MIDI_SYSTEM_ACTIVE_SENSING 0xE // Active Sensing (Keep Alive)
#define MIDI_SYSTEM_RESET 0xF // Reset
// MIDI Control Changes
#define MIDI_CC_GENERAL_PURPOSE_ONOFF_1 0x52 // Generic on/off switch ≤63 off, ≥64 on (82)
#define MIDI_CC_ALL_NOTES_OFF 0x7B // [Channel Mode Message] All Notes Off (123)
/////////////////////////////////////////
// Helping functions parsing MIDI Data //

View File

@@ -102,14 +102,22 @@ void Core1_Parse_Command(uint8_t command, uint8_t parameter, int16_t value)
case MULTICORE_COMMAND_SET_INA260_BUSVOLTAGE: Core1_LED_Enable_Update_INA260_BusVoltage((uint16_t)value); break;
///////////////////
// Get Functions //
///////////////////
///////////////////////////////////////
// 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;
}
}

View File

@@ -27,8 +27,6 @@
#define NOTE_COLOR_COUNT_RESET_THRESHOLD_TICKS (_EEPROM_Content.Channel_MIDI_Configuration[ch].Note_Reset_Timeout * (1000 / TIMER_INTERVALL_LED_UPDATE_ms))
// #define COUNT_APPLIED_NOTES
// ============================================================================================
// Datatypes
@@ -45,6 +43,9 @@ volatile Pause_Light_Timer_s _Pause_Light_Timer[NUM_LED_CHANNELS];
volatile int _NoteOn_Color_Counter[NUM_LED_CHANNELS][NUM_LED_COLORS];
volatile int _NoteOn_Color_Reset_Counter;
static bool _Mode_Change_Received[NUM_LED_CHANNELS];
static Mode _Mode_Change_New_Mode[NUM_LED_CHANNELS];
// 1 LED Channel, 3 LED Colors, 2 Event Types (Note On & Off)
int32_t _Event_Received_Counter[NUM_LED_CHANNELS][NUM_LED_COLORS][2];
@@ -120,6 +121,9 @@ void Core1_Light_Controller_Init(void)
_Event_Received_Counter[ch][col][MIDI_EVENT_NOTE_OFF - MIDI_EVENT_NOTE_OFF] = 0;
_Event_Received_Counter[ch][col][MIDI_EVENT_NOTE_ON - MIDI_EVENT_NOTE_OFF] = 0;
}
_Mode_Change_Received[ch] = false;
_Mode_Change_New_Mode[ch] = MIDI;
}
Core1_Light_Controller_Reset_NoteOn_Counter();
@@ -268,7 +272,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t
{
if(midi_note_in_octave == NOTE_COLOR_RED || midi_note_in_octave == NOTE_COLOR_RED_ALT)
{
_NoteOn_Color_Counter[ch][R]--;
if(_NoteOn_Color_Counter[ch][R] > 0) {
_NoteOn_Color_Counter[ch][R]--;
}
if(_NoteOn_Color_Counter[ch][R] == 0) { Core1_LED_Control_Set_DC_Direct(ch, R, 0); }
#ifdef COUNT_APPLIED_NOTES
@@ -277,7 +284,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t
}
else if(midi_note_in_octave == NOTE_COLOR_GREEN || midi_note_in_octave == NOTE_COLOR_GREEN_ALT)
{
_NoteOn_Color_Counter[ch][G]--;
if(_NoteOn_Color_Counter[ch][G] > 0) {
_NoteOn_Color_Counter[ch][G]--;
}
if(_NoteOn_Color_Counter[ch][G] == 0) { Core1_LED_Control_Set_DC_Direct(ch, G, 0); }
#ifdef COUNT_APPLIED_NOTES
@@ -286,7 +296,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t
}
else if(midi_note_in_octave == NOTE_COLOR_BLUE || midi_note_in_octave == NOTE_COLOR_BLUE_ALT)
{
_NoteOn_Color_Counter[ch][B]--;
if(_NoteOn_Color_Counter[ch][B] > 0) {
_NoteOn_Color_Counter[ch][B]--;
}
if(_NoteOn_Color_Counter[ch][B] == 0) { Core1_LED_Control_Set_DC_Direct(ch, B, 0); }
#ifdef COUNT_APPLIED_NOTES
@@ -313,16 +326,103 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t
}
}
void Core1_Light_Controller_MIDI_Full_ProgramChange_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t program_number)
{
Core1_Light_Controller_Pause_Light_Trigger(midi_event, midi_channel);
if(midi_event != MIDI_EVENT_PROGRAM_CHANGE) {
return;
}
for(uint32_t ch=0;ch<NUM_LED_CHANNELS;ch++)
{
if(Core1_Light_Controller_Check_Channel_Match(ch, midi_channel) != true) {
continue;
}
switch (program_number)
{
case MIDI:
case JAM:
case CONSTANT:
_Mode_Change_Received[ch] = true;
_Mode_Change_New_Mode[ch] = program_number;
break;
default:
break;
}
}
}
void Core1_Light_Controller_MIDI_Full_ControlChange_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t controller_number, uint8_t controller_value)
{
Core1_Light_Controller_Pause_Light_Trigger(midi_event, midi_channel);
if(midi_event != MIDI_EVENT_CONTROL_CHANGE) {
return;
}
for(uint32_t ch=0;ch<NUM_LED_CHANNELS;ch++)
{
if(Core1_Light_Controller_Check_Channel_Match(ch, midi_channel) != true) {
continue;
}
switch(controller_number)
{
case MIDI_CC_GENERAL_PURPOSE_ONOFF_1:
_EEPROM_Content.Pause_Light_Configuration[ch].Enabled = (controller_value >= 64);
if(!_EEPROM_Content.Pause_Light_Configuration[ch].Enabled)
{
_Pause_Light_Timer[ch].Timer = 0;
Core1_LED_Control_Set_Fade_Speed(ch, 0);
}
break;
case MIDI_CC_ALL_NOTES_OFF:
Core1_Light_Controller_Reset_NoteOn_Counter();
break;
default:
break;
}
}
}
void Core1_Light_Controller_Set_MIDI_To_Light_Enabled(bool enabled)
{
_MIDI_To_Light_Enabled = enabled;
for(uint ch=0;ch<NUM_LED_CHANNELS;ch++) {
for(uint32_t ch=0;ch<NUM_LED_CHANNELS;ch++) {
_Pause_Light_Timer[ch].Timer = 0;
_Pause_Light_Timer[ch].Is_Active = false;
}
}
bool Core1_Light_Controller_Get_Mode_Change_Received(enum LED_Channel channel)
{
if(channel >= NUM_LED_CHANNELS) {
return false;
}
bool Return_Value = _Mode_Change_Received[channel];
_Mode_Change_Received[channel] = false;
return Return_Value;
}
Mode Core1_Light_Controller_Get_Mode_Change_New_Mode(enum LED_Channel channel)
{
if(channel >= NUM_LED_CHANNELS) {
return MIDI;
}
return _Mode_Change_New_Mode[channel];
}
/*******************************************************************
Internal Functions
@@ -351,7 +451,7 @@ bool Core1_Light_Controller_Check_Octave_Match(enum LED_Channel channel, uint mi
void Core1_Light_Controller_Pause_Light_Trigger(uint8_t midi_event, uint8_t midi_channel)
{
for(uint ch=0;ch<NUM_LED_CHANNELS;ch++)
for(uint32_t ch=0;ch<NUM_LED_CHANNELS;ch++)
{
bool Match_Success = false;
@@ -405,16 +505,15 @@ void Core1_Light_Controller_Pause_Light_Trigger(uint8_t midi_event, uint8_t midi
void Core1_Light_Controller_Reset_NoteOn_Counter()
{
for(uint ch=0;ch<NUM_LED_CHANNELS;ch++)
for(uint32_t ch=0;ch<NUM_LED_CHANNELS;ch++)
{
for(uint l=0;l<NUM_LED_COLORS;l++)
{
if(_NoteOn_Color_Counter[ch][l] > 0) {
Core1_LED_Control_Set_DC_Direct(ch, l, 0);
}
_NoteOn_Color_Counter[ch][l] = 0;
}
if(_NoteOn_Color_Counter[ch][R] > 0) { Core1_LED_Control_Set_DC_Direct(ch, R, 0); }
if(_NoteOn_Color_Counter[ch][G] > 0) { Core1_LED_Control_Set_DC_Direct(ch, G, 0); }
if(_NoteOn_Color_Counter[ch][B] > 0) { Core1_LED_Control_Set_DC_Direct(ch, B, 0); }
_NoteOn_Color_Counter[ch][R] = 0;
_NoteOn_Color_Counter[ch][G] = 0;
_NoteOn_Color_Counter[ch][B] = 0;
}
}

View File

@@ -14,6 +14,7 @@
#include "pico/types.h"
#include "Mode_Manager.h"
#include "EEPROM_M24C64.h"
#include "Command_Definition.h"
@@ -34,9 +35,14 @@ void Core1_Light_Controller_Tick(void);
void Core1_Light_Controller_MIDI_OnOff_Event_Received(uint8_t midi_command_shifted_right, uint8_t midi_channel);
void Core1_Light_Controller_MIDI_Other_Event_Received(uint8_t midi_data);
void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t midi_note, uint8_t value);
void Core1_Light_Controller_MIDI_Full_ProgramChange_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t program_number);
void Core1_Light_Controller_MIDI_Full_ControlChange_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t controller_number, uint8_t controller_value);
void Core1_Light_Controller_Set_MIDI_To_Light_Enabled(bool enabled);
Note_t Core1_Light_Controller_Get_Octave_Note_For_Channel(enum LED_Channel channel);
Value_t Core1_Light_Controller_Get_Note_Value_For_Channel(enum LED_Channel channel);
bool Core1_Light_Controller_Get_Mode_Change_Received(enum LED_Channel channel);
Mode Core1_Light_Controller_Get_Mode_Change_New_Mode(enum LED_Channel channel);
#endif /* CORE1_LIGHT_CONTROLLER_H_ */

View File

@@ -24,8 +24,8 @@
enum PARSING_STATE_e
{
WAITING_FOR_COMMAND,
WAITING_FOR_NOTE,
WAITING_FOR_VALUE
WAITING_FOR_DATA1,
WAITING_FOR_DATA2
};
struct PARSING_s
@@ -33,7 +33,7 @@ struct PARSING_s
enum PARSING_STATE_e State;
uint8_t MIDI_Event;
uint8_t MIDI_Channel;
uint8_t MIDI_Note;
uint8_t MIDI_Data1;
};
volatile struct PARSING_s _Parsing;
@@ -46,7 +46,7 @@ History_Buffer_t _MIDI_History_Buffer[RECEIVED_MIDI_HISTORY_BUFFER_SIZE];
void Core1_MIDI_Receiver_Histroy_Update (uint8_t data);
void Core1_MIDI_Receiver_Issue_Event_On_Off_Received(uint8_t midi_channel, uint8_t midi_event);
void Core1_MIDI_Receiver_Issue_Data_Received (uint8_t midi_data);
void Core1_MIDI_Receiver_Issue_Full_Note_Received (uint8_t midi_event, uint8_t midi_channel, uint8_t midi_note, uint8_t value);
void Core1_MIDI_Receiver_Issue_Full_Event_Received (uint8_t midi_event, uint8_t midi_channel, uint8_t midi_data1, uint8_t midi_data2);
/*******************************************************************
@@ -70,7 +70,7 @@ void Core1_MIDI_Receiver_Init(void)
_Parsing.State = WAITING_FOR_COMMAND;
_Parsing.MIDI_Event = MIDI_EVENT_NOTE_ON;
_Parsing.MIDI_Channel = MIDI_CHANNEL_1;
_Parsing.MIDI_Note = NOTE_UNDEFINED;
_Parsing.MIDI_Data1 = NOTE_UNDEFINED;
}
void Core1_MIDI_Receiver_Process(void)
@@ -83,24 +83,35 @@ void Core1_MIDI_Receiver_Process(void)
switch(_Parsing.State)
{
case WAITING_FOR_COMMAND:
if(MIDI_EVENT_FROM_COMMAND(Data) == MIDI_EVENT_NOTE_ON || MIDI_EVENT_FROM_COMMAND(Data) == MIDI_EVENT_NOTE_OFF)
if( MIDI_EVENT_FROM_COMMAND(Data) == MIDI_EVENT_NOTE_ON ||
MIDI_EVENT_FROM_COMMAND(Data) == MIDI_EVENT_NOTE_OFF ||
MIDI_EVENT_FROM_COMMAND(Data) == MIDI_EVENT_CONTROL_CHANGE ||
MIDI_EVENT_FROM_COMMAND(Data) == MIDI_EVENT_PROGRAM_CHANGE
)
{
_Parsing.MIDI_Event = MIDI_EVENT_FROM_COMMAND(Data);
_Parsing.MIDI_Channel = MIDI_CHANNEL_FROM_COMMAND(Data);
_Parsing.State = WAITING_FOR_NOTE;
_Parsing.State = WAITING_FOR_DATA1;
Core1_MIDI_Receiver_Issue_Event_On_Off_Received(_Parsing.MIDI_Channel, _Parsing.MIDI_Event);
// Core1_MIDI_Receiver_Issue_Event_On_Off_Received(_Parsing.MIDI_Channel, _Parsing.MIDI_Event);
break;
}
Core1_MIDI_Receiver_Issue_Data_Received(Data);
break;
case WAITING_FOR_NOTE:
case WAITING_FOR_DATA1:
if(IS_MIDI_DATA(Data))
{
_Parsing.MIDI_Note = Data;
_Parsing.State = WAITING_FOR_VALUE;
_Parsing.MIDI_Data1 = Data;
if(_Parsing.MIDI_Event == MIDI_EVENT_PROGRAM_CHANGE) {
_Parsing.State = WAITING_FOR_COMMAND;
Core1_MIDI_Receiver_Issue_Full_Event_Received(_Parsing.MIDI_Event, _Parsing.MIDI_Channel, _Parsing.MIDI_Data1, NOTE_UNDEFINED);
}
else {
_Parsing.State = WAITING_FOR_DATA2;
}
}
else
{
@@ -110,10 +121,10 @@ void Core1_MIDI_Receiver_Process(void)
}
break;
case WAITING_FOR_VALUE:
case WAITING_FOR_DATA2:
if(IS_MIDI_DATA(Data))
{
Core1_MIDI_Receiver_Issue_Full_Note_Received(_Parsing.MIDI_Event, _Parsing.MIDI_Channel, _Parsing.MIDI_Note, Data);
Core1_MIDI_Receiver_Issue_Full_Event_Received(_Parsing.MIDI_Event, _Parsing.MIDI_Channel, _Parsing.MIDI_Data1, Data);
}
// Reset State Machine and wait for next MIDI Command
@@ -151,7 +162,24 @@ void Core1_MIDI_Receiver_Issue_Data_Received(uint8_t midi_data)
Core1_Light_Controller_MIDI_Other_Event_Received(midi_data);
}
void Core1_MIDI_Receiver_Issue_Full_Note_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t midi_note, uint8_t value)
void Core1_MIDI_Receiver_Issue_Full_Event_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t midi_data1, uint8_t midi_data2)
{
Core1_Light_Controller_MIDI_Full_Note_Received(midi_event, midi_channel, midi_note, value);
switch (midi_event)
{
case MIDI_EVENT_NOTE_ON:
case MIDI_EVENT_NOTE_OFF:
Core1_Light_Controller_MIDI_Full_Note_Received(midi_event, midi_channel, midi_data1, midi_data2);
break;
case MIDI_EVENT_PROGRAM_CHANGE:
Core1_Light_Controller_MIDI_Full_ProgramChange_Received(midi_event, midi_channel, midi_data1);
break;
case MIDI_EVENT_CONTROL_CHANGE:
Core1_Light_Controller_MIDI_Full_ControlChange_Received(midi_event, midi_channel, midi_data1, midi_data2);
break;
default:
break;
}
}

View File

@@ -54,6 +54,19 @@ void Mode_Manager_Init(void)
void Mode_Manager_Tick(void)
{
Command_Issue_Get_Request(MULTICORE_COMMAND_GET_MODE_CHANGE_RECEIVED, 0);
bool New_Mode_Received = Command_Get_Request_Response_By_Command_Only(MULTICORE_COMMAND_GET_MODE_CHANGE_RECEIVED, 100) > 0;
if(New_Mode_Received) {
Command_Issue_Get_Request(MULTICORE_COMMAND_GET_MODE_CHANGE_NEW_MODE, 0);
_Current_Mode = Command_Get_Request_Response_By_Command_Only(MULTICORE_COMMAND_GET_MODE_CHANGE_NEW_MODE, 100);
Mode_Manager_Set_Mode(_Current_Mode);
Screen_Setup_Mode_Change(TRANSITION_NONE, TRANSITION_NONE, SCREEN_TRANSITION_DEFAULT_EASING, SCREEN_TRANSITION_DEFAULT_FRAMES, _Current_Mode);
return;
}
if(_Current_Mode != JAM) {
return;
}

View File

@@ -69,11 +69,11 @@ static Object_ID _Object_Const_Color_Text_1, _Object_Const_Color_Text_2;
// ============================================================================================
// Function Declarations
void Common_Screen_Element_Init_Mode_Activity_Midi();
void Common_Screen_Element_Init_Mode_Activity_MIDI();
void Common_Screen_Element_Init_Mode_Activity_Jam();
void Common_Screen_Element_Init_Mode_Activity_Const();
void Common_Screen_Element_Tick_Mode_Activity_Midi();
void Common_Screen_Element_Tick_Mode_Activity_MIDI();
void Common_Screen_Element_Tick_Mode_Activity_Jam();
void Common_Screen_Element_Tick_Mode_Activity_Const();
@@ -106,7 +106,7 @@ void Common_Screen_Element_Init_Mode_Activity(Mode mode)
{
switch (mode)
{
case MIDI: Common_Screen_Element_Init_Mode_Activity_Midi(); break;
case MIDI: Common_Screen_Element_Init_Mode_Activity_MIDI(); break;
case JAM: Common_Screen_Element_Init_Mode_Activity_Jam(); break;
case CONSTANT: Common_Screen_Element_Init_Mode_Activity_Const(); break;
}
@@ -116,7 +116,7 @@ void Common_Screen_Element_Tick_Mode_Activity(Mode mode)
{
switch (mode)
{
case MIDI: Common_Screen_Element_Tick_Mode_Activity_Midi(); break;
case MIDI: Common_Screen_Element_Tick_Mode_Activity_MIDI(); break;
case JAM: Common_Screen_Element_Tick_Mode_Activity_Jam(); break;
case CONSTANT: Common_Screen_Element_Tick_Mode_Activity_Const(); break;
}
@@ -126,7 +126,7 @@ void Common_Screen_Element_Tick_Mode_Activity(Mode mode)
/*******************************************************************
Internal Functions
*******************************************************************/
void Common_Screen_Element_Init_Mode_Activity_Midi()
void Common_Screen_Element_Init_Mode_Activity_MIDI()
{
_Pause_Light_Timeout_s = 0.0f;
_Pause_Light_Timeout_Ticks = 0;
@@ -141,7 +141,7 @@ void Common_Screen_Element_Init_Mode_Activity_Midi()
Font_ID Font_Bold = Display_Objects_Add_Font(_Font_DejaVu_Sans_Mono_Bold_11x17, 0);
int16_t Midi_Y_Percent = 20;
Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, "Midi to Light", Font_Bold, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION);
Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, "MIDI to Light", Font_Bold, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION);
Midi_Y_Percent += Text_Y_Percent_Distance;
_Object_Midi_Text_MIDI_Enabled = Display_Objects_Add_Text(LEFT_MIDDLE, BOTH_IN_PERCENT, 20, Midi_Y_Percent, NOT_SELECTABLE, "", Font_Regular, DISPLAY_COLOR_BLACK, NO_STYLE, NO_ANIMATION);
@@ -209,7 +209,7 @@ void Common_Screen_Element_Init_Mode_Activity_Const()
_Object_Const_Color_Text_2 = Display_Objects_Add_Text(CENTER_TOP, BOTH_IN_PERCENT, 50, 70, NOT_SELECTABLE, "is on", Font, DISPLAY_COLOR_LIGHTGREY, NO_STYLE, NO_ANIMATION);
}
void Common_Screen_Element_Tick_Mode_Activity_Midi()
void Common_Screen_Element_Tick_Mode_Activity_MIDI()
{
char MIDI_Last_Applied[100];
char Event[4];

View File

@@ -1 +1 @@
840
854

View File

@@ -7,7 +7,7 @@ include <RP2350_MIDI_Lighter_PCB.scad>
include <RP2350_MIDI_Lighter_Definition.scad>
Show_FAD_Logo = false;
Show_FAD_Logo = true;
Show_PCB = false;
Audio_Jack_Present = false;
Debug_Present = false;
@@ -26,10 +26,10 @@ if(Show_PCB)
// Only for display purposes
// translate([0, 0, eps])
// Top();
Top();
// Top_Wall();
Bottom(Bottom_Mount, true);
// Bottom(Bottom_Mount, true);
// Bottom_Wall();
// rotate([0, 180, 0])
// translate([0, 0, eps]) Display_GC9A01A_Cover();