diff --git a/CHANGELOG b/CHANGELOG index 15a862b28e2b2a5d9311bc0ed971defc51654c97..d8c62eb1e6dc955474191633a9c7a77c7145fb76 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -29,8 +29,10 @@ TODO:: LAST DONE: CHANGES: -- ver. 0.20.035 <b>2023.11.28</b> Fixed: - - DSP::u::Switch - inputs were incorrectly defined as ouputs. +- ver. 0.20.036 <b>2023.11.29</b> Fixed: + - DSP::u::Switch - inputs were incorrectly defined as outputs + fix in input processing procedure. + - DSP::Component::DefineStandardOutputs - Names for complex outputs corrected + - DSP::Block::DefineStandardInputs - Names for complex inputs corrected - ver. 0.20.033 <b>2023.11.11</b> Fixed: - DSP::u::OutputBuffer - added setting OutputBuffer inputs' clocks (SetBlockInputClock) as equal to ParentClock to allow clock mismatch check when buffers ParentClock dows not match the inputs' clocks. - PROBLEM: the ParentClock match to InputClock is not checked for DSP::u::OutputBuffer which might lead user to not notice that expected NotificationClock is incorectly selected. diff --git a/src/cpp/DSP_modules.cpp b/src/cpp/DSP_modules.cpp index 2617dc68fe85394e57428e99e755112f9d3c5571..b20842f60ee4ddeac7a43dd39b61a8b3758ff3a4 100644 --- a/src/cpp/DSP_modules.cpp +++ b/src/cpp/DSP_modules.cpp @@ -5246,74 +5246,48 @@ void DSP::u::Switch::Select(unsigned int InputIndex, unsigned int OutputIndex) */ } +#define THIS ((DSP::u::Switch *)block) void DSP::u::Switch::InputExecute(INPUT_EXECUTE_ARGS) { UNUSED_DEBUG_ARGUMENT(Caller); - /* \todo_later Consider processing Output as soon as SelectedInputs are avaiable + /* \todo_later Consider processing Output as soon as SelectedInputs are available * \todo_later Consider storing only SelectedInputs, the rest could be ignored * */ - unsigned int index; + THIS->NoOfInputsProcessed++; + if (InputNo==0) + THIS->State[InputNo]=value; + THIS->NoOfInputsProcessed++; -/* - if (InputNo > LastInputInd) - { - if (InputNo == InputSelectionInd) - SelectedInputNo=((int)(floor(value))); - if (InputNo == OutputSelectionInd) - SelectedOutputNo=((int)(floor(value))); - } - else - { -*/ - index=InputNo / ((DSP::u::Switch *)block)->ValuesPerOutput; - ((DSP::u::Switch *)block)->State[index]=value; -/* } */ - ((DSP::u::Switch *)block)->NoOfInputsProcessed++; + if (THIS->NoOfInputsProcessed < THIS->NoOfInputs) + return; + THIS->NoOfInputsProcessed=THIS->InitialNoOfInputsProcessed; - if (((DSP::u::Switch *)block)->NoOfInputsProcessed == ((DSP::u::Switch *)block)->NoOfInputs) + if ((THIS->SelectedInputNo != DSP::FO_NoInput) && (THIS->SelectedOutputNo != DSP::FO_NoOutput)) { -/* - if (SelectedInputNo > MaxSelectedInputNo) - SelectedInputNo = MaxSelectedInputNo; - if (SelectedOutputNo > MaxSelectedOutputNo) - SelectedOutputNo = MaxSelectedOutputNo; - if (SelectedInputNo < MinSelectedIndexNo) - SelectedInputNo = MinSelectedIndexNo; - if (SelectedOutputNo < MinSelectedIndexNo) - SelectedOutputNo = MinSelectedIndexNo; -*/ - if ((((DSP::u::Switch *)block)->SelectedInputNo != DSP::FO_NoInput) && (((DSP::u::Switch *)block)->SelectedOutputNo != DSP::FO_NoOutput)) + if (THIS->ValuesPerOutput == 1) { - if (((DSP::u::Switch *)block)->ValuesPerOutput == 1) - { -// OutputBlocks[SelectedOutputNo]-> -// Execute(OutputBlocks_InputNo[SelectedOutputNo], State[SelectedInputNo], this); - ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo]->EXECUTE_PTR( - ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo], - ((DSP::u::Switch *)block)->OutputBlocks_InputNo[((DSP::u::Switch *)block)->SelectedOutputNo], - ((DSP::u::Switch *)block)->State[((DSP::u::Switch *)block)->SelectedInputNo], block); - } - else // if (ValuesPerOutput == 2) - { -// OutputBlocks[SelectedOutputNo*2]-> -// Execute(OutputBlocks_InputNo[SelectedOutputNo*2], State[SelectedInputNo*2], this); - ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2]->EXECUTE_PTR( - ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2], - ((DSP::u::Switch *)block)->OutputBlocks_InputNo[((DSP::u::Switch *)block)->SelectedOutputNo*2], - ((DSP::u::Switch *)block)->State[((DSP::u::Switch *)block)->SelectedInputNo*2], block); -// OutputBlocks[SelectedOutputNo*2+1]-> -// Execute(OutputBlocks_InputNo[SelectedOutputNo*2+1], State[SelectedInputNo*2+1], this); - ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2+1]->EXECUTE_PTR( - ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2+1], - ((DSP::u::Switch *)block)->OutputBlocks_InputNo[((DSP::u::Switch *)block)->SelectedOutputNo*2+1], - ((DSP::u::Switch *)block)->State[((DSP::u::Switch *)block)->SelectedInputNo*2+1], block); - } - } // otherwise simply ignore input (NO output) - ((DSP::u::Switch *)block)->NoOfInputsProcessed = ((DSP::u::Switch *)block)->InitialNoOfInputsProcessed; - } + THIS->OutputBlocks[THIS->SelectedOutputNo]->EXECUTE_PTR( + THIS->OutputBlocks[THIS->SelectedOutputNo], + THIS->OutputBlocks_InputNo[THIS->SelectedOutputNo], + THIS->State[THIS->SelectedInputNo], block); + } + else // if (ValuesPerOutput == 2) + { + THIS->OutputBlocks[THIS->SelectedOutputNo*2]->EXECUTE_PTR( + THIS->OutputBlocks[THIS->SelectedOutputNo*2], + THIS->OutputBlocks_InputNo[THIS->SelectedOutputNo*2], + THIS->State[THIS->SelectedInputNo*2], block); + THIS->OutputBlocks[THIS->SelectedOutputNo*2+1]->EXECUTE_PTR( + THIS->OutputBlocks[THIS->SelectedOutputNo*2+1], + THIS->OutputBlocks_InputNo[THIS->SelectedOutputNo*2+1], + THIS->State[THIS->SelectedInputNo*2+1], block); + } + } // otherwise simply ignore input (NO output) + THIS->NoOfInputsProcessed = THIS->InitialNoOfInputsProcessed; }; +#undef THIS /**************************************************/ // Decimator without antialias filter diff --git a/src/include/DSP_lib.h b/src/include/DSP_lib.h index f97725f064634d60b4378a5063b1a4f8e0983155..48cdf965bd86841442c52116707c1448733e2de0 100644 --- a/src/include/DSP_lib.h +++ b/src/include/DSP_lib.h @@ -11,7 +11,7 @@ #define DSP_VER_MAJOR 0 #define DSP_VER_MINOR 20 -#define DSP_VER_BUILD 35 // !!! without zeroes before, else this will be treated as octal number +#define DSP_VER_BUILD 36 // !!! without zeroes before, else this will be treated as octal number #define DSP_VER_YEAR 2023 #define DSP_VER DSP_VER_MAJOR.DSP_VER_MINOR.DSP_VER_BUILD