/*
 * COMPASS_LEDS.c
 *
 *  Created on: Apr 3, 2021
 *      Author: Think
 */

#include "COMPASS_LEDS.h"

bool COMPASS_LEDS_Init(COMPASS_LEDS *compassLeds)
{
	compassLeds->southLed.Pin = GPIO_PIN_15;
	compassLeds->eastLed.Pin = GPIO_PIN_12;
	compassLeds->northLed.Pin = GPIO_PIN_13;
	compassLeds->westLed.Pin = GPIO_PIN_14;

	compassLeds->southLed.Mode = GPIO_MODE_OUTPUT_PP;
	compassLeds->eastLed.Mode = GPIO_MODE_OUTPUT_PP;
	compassLeds->northLed.Mode = GPIO_MODE_OUTPUT_PP;
	compassLeds->westLed.Mode = GPIO_MODE_OUTPUT_PP;

	compassLeds->southLed.Speed = GPIO_SPEED_LOW;
	compassLeds->eastLed.Speed = GPIO_SPEED_LOW;
	compassLeds->northLed.Speed = GPIO_SPEED_LOW;
	compassLeds->westLed.Speed = GPIO_SPEED_LOW;

	HAL_GPIO_Init(GPIOD, &compassLeds->southLed);
	HAL_GPIO_Init(GPIOD, &compassLeds->eastLed);
	HAL_GPIO_Init(GPIOD, &compassLeds->northLed);
	HAL_GPIO_Init(GPIOD, &compassLeds->westLed);

	HAL_GPIO_WritePin(GPIOD, compassLeds->southLed.Pin, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, compassLeds->eastLed.Pin, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, compassLeds->northLed.Pin, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, compassLeds->westLed.Pin, GPIO_PIN_RESET);

	return true;
}

bool COMPASS_LEDS_Light(COMPASS_LEDS *compassLeds, Heading heading)
{
	switch(heading)
	{
	case SOUTH:
		HAL_GPIO_WritePin(GPIOD, compassLeds->southLed.Pin, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->eastLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->northLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->westLed.Pin, GPIO_PIN_RESET);
		break;
	case NORTH:
		HAL_GPIO_WritePin(GPIOD, compassLeds->southLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->eastLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->northLed.Pin, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->westLed.Pin, GPIO_PIN_RESET);
		break;
	case EAST:
		HAL_GPIO_WritePin(GPIOD, compassLeds->southLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->eastLed.Pin, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->northLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->westLed.Pin, GPIO_PIN_RESET);
		break;
	case WEST:
		HAL_GPIO_WritePin(GPIOD, compassLeds->southLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->eastLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->northLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->westLed.Pin, GPIO_PIN_SET);
		break;
	default:
		HAL_GPIO_WritePin(GPIOD, compassLeds->southLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->eastLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->northLed.Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOD, compassLeds->westLed.Pin, GPIO_PIN_RESET);
	}
	return true;
}


