/** * @brief Manages how data is displayed in the main text box when the source is CAN1 * @param None * @retval None */ void guiCan1ManageMainTextBox(bool ShouldRefresh) { const uint32_t constStartFlashAddress = FLASH_ADR_CAN1_DATA; /* Get the current write address, this is the address where the last data is */ uint32_t currentWriteAddress = can1GetCurrentWriteAddress(); /* Get the current settings of the channel */ CANSettings* settings = can1GetSettings(); SemaphoreHandle_t* settingsSemaphore = can1GetSettingsSemaphore(); /* Make sure we don't try to update the display if we are clearing the channel */ if (!prvClearingInProgress) { uint32_t numOfMessagesSaved = settings->numOfMessagesSaved; static uint32_t numOfMessagesDisplayed = 0; if (numOfMessagesSaved != prvNumOfMessagesDisplayed) { guiCan1WriteNextCanMessageFromFlashToMainTextBox(constStartFlashAddress, currentWriteAddress, settings, settingsSemaphore); prvNumOfMessagesDisplayed++; } /* Update the display */ if (ShouldRefresh) { prvWriteMessageListToDisplay(); } } }
/** * @brief Update the GUI elements for this channel that are dependent on the value of the settings * @param None * @retval None */ void guiCan1UpdateGuiElementsReadFromSettings() { /* Get the current settings */ CANSettings* settings = can1GetSettings(); /* Update the bit rate text to match what is actually set */ switch (settings->bitRate) { case CANBitRate_10k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "10kbit/s", 1); break; case CANBitRate_20k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "20kbit/s", 1); break; case CANBitRate_50k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "50kbit/s", 1); break; case CANBitRate_100k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "100kbit/s", 1); break; case CANBitRate_125k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "125kbit/s", 1); break; case CANBitRate_250k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "250kbit/s", 1); break; case CANBitRate_500k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "500kbit/s", 1); break; case CANBitRate_1M: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "1Mbit/s", 1); break; default: break; } }
/** * @brief Callback for the save settings button, will save the settings of the channels to SPI FLASH * @param Event: The event that caused the callback * @param ButtonId: The button ID that the event happened on * @retval None */ void guiSaveSettingsButtonCallback(GUITouchEvent Event, uint32_t ButtonId) { if (Event == GUITouchEvent_Up) { volatile uint32_t currentFlashAddress = FLASH_ADR_CHANNEL_SETTINGS; /* Start by erasing all the old settings */ SPI_FLASH_EraseSector(currentFlashAddress); /* CAN */ SPI_FLASH_WriteBuffer((uint8_t*)can1GetSettings(), currentFlashAddress, sizeof(CANSettings)); currentFlashAddress += sizeof(CANSettings); SPI_FLASH_WriteBuffer((uint8_t*)can2GetSettings(), currentFlashAddress, sizeof(CANSettings)); currentFlashAddress += sizeof(CANSettings); /* UART */ SPI_FLASH_WriteBuffer((uint8_t*)uart1GetSettings(), currentFlashAddress, sizeof(UARTSettings)); currentFlashAddress += sizeof(UARTSettings); SPI_FLASH_WriteBuffer((uint8_t*)uart2GetSettings(), currentFlashAddress, sizeof(UARTSettings)); currentFlashAddress += sizeof(UARTSettings); SPI_FLASH_WriteBuffer((uint8_t*)rs232GetSettings(), currentFlashAddress, sizeof(UARTSettings)); currentFlashAddress += sizeof(UARTSettings); } }
/** * @brief * @param Event: The event that caused the callback * @param ButtonId: The button ID that the event happened on * @retval None */ void guiCan1BitRateSelectionCallback(GUITouchEvent Event, uint32_t ButtonId) { if (Event == GUITouchEvent_Up) { CANBitRate newBitRate; switch (ButtonId) { case GUIButtonId_Can1BitRate10k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "10kbit/s", 1); newBitRate = CANBitRate_10k; break; case GUIButtonId_Can1BitRate20k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "20kbit/s", 1); newBitRate = CANBitRate_20k; break; case GUIButtonId_Can1BitRate50k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "50kbit/s", 1); newBitRate = CANBitRate_50k; break; case GUIButtonId_Can1BitRate100k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "100kbit/s", 1); newBitRate = CANBitRate_100k; break; case GUIButtonId_Can1BitRate125k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "125kbit/s", 1); newBitRate = CANBitRate_125k; break; case GUIButtonId_Can1BitRate250k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "250kbit/s", 1); newBitRate = CANBitRate_250k; break; case GUIButtonId_Can1BitRate500k: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "500kbit/s", 1); newBitRate = CANBitRate_500k; break; case GUIButtonId_Can1BitRate1M: GUIButton_SetTextForRow(GUIButtonId_Can1BitRate, "1Mbit/s", 1); newBitRate = CANBitRate_1M; break; default: newBitRate = 0; break; } CANSettings* settings = can1GetSettings(); SemaphoreHandle_t* settingsSemaphore = can1GetSettingsSemaphore(); /* Try to take the settings semaphore */ if (newBitRate != 0 && *settingsSemaphore != 0 && xSemaphoreTake(*settingsSemaphore, 100) == pdTRUE) { settings->bitRate = newBitRate; can1UpdateWithNewSettings(); /* Restart the channel if it was on */ if (settings->connection == CANConnection_Connected) can1Restart(); /* Give back the semaphore now that we are done */ xSemaphoreGive(*settingsSemaphore); } /* Hide the pop out */ GUIContainer_Hide(GUIContainerId_PopoutCan1BitRate); GUI_SetActiveLayer(GUILayer_0); GUIButton_SetLayer(GUIButtonId_Can1BitRate, GUILayer_0); GUIButton_SetState(GUIButtonId_Can1BitRate, GUIButtonState_Disabled); /* Refresh the main text box */ guiCan1ManageMainTextBox(true); } }