コード例 #1
0
ファイル: gui_can1.c プロジェクト: hampussandberg/HexConnect
/**
 * @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();
		}
	}
}
コード例 #2
0
ファイル: gui_can1.c プロジェクト: hampussandberg/HexConnect
/**
 * @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;
	}
}
コード例 #3
0
ファイル: gui_system.c プロジェクト: efimefimefim/HexConnect
/**
 * @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);
	}
}
コード例 #4
0
ファイル: gui_can1.c プロジェクト: hampussandberg/HexConnect
/**
 * @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);
	}
}