@@ -41,10 +41,14 @@ static int brightVal = 250; // Brightnes
4141static int fadeInterval = 5 ; // LED fade interval
4242static int delayInterval = 30 ; // Delay between changing fade intervals
4343static int patternType = 1 ; // default LED pattern: case 1
44- static int CPUFreq = 240 ; // Default CPU speed = 240MHz
44+ // static int CPUFreq = 240; // Default CPU speed = 240MHz
4545
46- static QueueHandle_t msgQueue;
47- static SemaphoreHandle_t mutex1; // for `brightVal`, `fadeInterval`, `delayInterval`, `patternType` & `CPUFreq`
46+ static QueueHandle_t msgQueue; // Queue for CLI messages
47+ static SemaphoreHandle_t mutex1; // for `brightVal`, `fadeInterval`, `delayInterval` & `patternType`
48+ // static SemaphoreHandle_t brightValMutex; // Mutex for `brightVal`
49+ // static SemaphoreHandle_t fadeInttMutex; // Mutex for `fadeInterval`
50+ // static SemaphoreHandle_t delayIntMutex; // Mutex for `delayInteval`
51+ // static SemaphoreHandle_t patternMutex; // Mutex for `patternType`
4852
4953struct Command // Struct for user Commands
5054{
@@ -100,7 +104,7 @@ void msgRXTask(void *param)
100104 uint8_t cpuLen = strlen (cpuCmd);
101105 uint8_t valLen = strlen (getValues);
102106 uint8_t freqLen = strlen (getFreq);
103- uint8_t cpuFreq; // 80, 160 or 240Mhz
107+ uint8_t localCPUFreq; // 80, 160 or 240Mhz
104108 char buffer[BUF_LEN]; // string buffer for Terminal Message
105109 short ledDelay; // blink delay in ms
106110 short fadeAmt;
@@ -156,7 +160,7 @@ void msgRXTask(void *param)
156160 patternType = pattern; // Change global pattern variable
157161 xSemaphoreGive (mutex1); // exit critical section
158162
159- if (abs (pattern) <= NUM_PATTERNS)
163+ if (int ( abs (pattern)) <= NUM_PATTERNS && int (pattern) != 0 ) // BUGFIX: "New Pattern: 0" with invalid entry
160164 {
161165 sprintf (buffer, " New Pattern: %d\n\n " , pattern);
162166 Serial.print (buffer);
@@ -185,21 +189,17 @@ void msgRXTask(void *param)
185189 else if (memcmp (someMsg.cmd , cpuCmd, cpuLen) == 0 ) // check for `cpu ` command
186190 {
187191 char * tailPtr = someMsg.cmd + cpuLen;
188- cpuFreq = atoi (tailPtr);
189- cpuFreq = abs (cpuFreq );
190- if (cpuFreq != 240 && cpuFreq != 160 && cpuFreq != 80 )
192+ localCPUFreq = atoi (tailPtr);
193+ localCPUFreq = abs (localCPUFreq );
194+ if (localCPUFreq != 240 && localCPUFreq != 160 && localCPUFreq != 80 )
191195 {
192196 Serial.println (" Invalid Input: Must Be 240, 160, or 80Mhz" );
193197 Serial.println (" Returning....\n " );
194198 continue ;
195199 }
200+ setCpuFrequencyMhz (localCPUFreq); // Set New CPU Freq
201+ vTaskDelay (10 / portTICK_PERIOD_MS); // yield for a brief moment
196202
197- xSemaphoreTake (mutex1, portMAX_DELAY); // Access Critical Section
198- CPUFreq = cpuFreq; // change global CPU Frequency
199- setCpuFrequencyMhz (CPUFreq); // Set New CPU Freq
200- xSemaphoreGive (mutex1); // Exit Critical Section
201-
202- vTaskDelay (10 / portTICK_PERIOD_MS);
203203 sprintf (buffer, " \n New CPU Frequency is: %dMHz\n\n " , getCpuFrequencyMhz ());
204204 Serial.print (buffer);
205205 memset (buffer, 0 , BUF_LEN); // Clear Input Buffer;
0 commit comments