Ejemplo n.º 1
0
/**
 * @brief	Read settings from SPI FLASH
 * @param	None
 * @retval	None
 */
static ErrorStatus prvReadSettingsFromSpiFlash()
{
	/* Read to a temporary settings variable */
	CANSettings settings = {0};
	if (SPI_FLASH_ReadBufferDMA((uint8_t*)&settings, FLASH_ADR_CAN1_SETTINGS, sizeof(CANSettings), 2000) == SUCCESS)
	{
		/* Check to make sure the data is reasonable */
		if (IS_CAN_CONNECTION(settings.connection) &&
			IS_CAN_TERMINATION(settings.termination) &&
			IS_CAN_BIT_RATE(settings.bitRate))
		{
			/* Try to take the settings semaphore */
			if (xSettingsSemaphore != 0 && xSemaphoreTake(xSettingsSemaphore, 100) == pdTRUE)
			{
				/* Copy to the real settings variable */
				memcpy(&prvCurrentSettings, &settings, sizeof(CANSettings));
				prvCurrentSettings.connection = CANConnection_Disconnected;
				prvCurrentSettings.termination = CANTermination_Disconnected;
				can1UpdateWithNewSettings();
				/* Give back the semaphore now that we are done */
				xSemaphoreGive(xSettingsSemaphore);
				return SUCCESS;
			}
			else
			{
				/* Something went wrong as we couldn't take the semaphore */
				return ERROR;
			}
		}
		else
			return ERROR;
	}
	else
		return ERROR;
}
Ejemplo n.º 2
0
/**
 * @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);
	}
}