#pragma once
#include <cdefs.h>
#include <stdint.h>

/**
 * An enum representing each of the Sonata's RGB LEDs.
 */
enum class SonataRgbLed
{
	Led0 = 0,
	Led1 = 1,
};

/**
 * A driver for the Sonata's RGB LED Controller
 */
struct SonataRgbLedController
{
	/**
	 * Registers for setting the 8-bit red, green, and blue values
	 * for the two RGB Leds.
	 */
	uint32_t ledColors[2];
	/**
	 * Control Register. See `SonataRgbLedController::ControlFields` for the
	 * fields.
	 */
	uint32_t control;
	/**
	 * Status Register See `SonataRgbLedController::StatusFields` for the
	 * fields.
	 */
	uint32_t status;

	/// Control Register Fields
	enum [[clang::flag_enum]] ControlFields : uint32_t
	{
		/// Write 1 to set RGB LEDs to specified colours.
		ControlSet = 1 << 0,
		/**
		 * Write 1 to turn off RGB LEDs.
		 * Write to ControlSet to turn on again.
		 */
		ControlOff = 1 << 1,
	};

	/// Status Register Fields
	enum [[clang::flag_enum]] StatusFields : uint32_t
	{
		/**
		 * When asserted controller is idle and new colours can be set,
		 * otherwise writes to regLed0, regLed1, and control are ignored.
		 */
		StatusIdle = 1 << 0,
	};

	/**
	 * Blocks until the controller is not busy.
	 *
	 * The controller can be busy when it is in the process of updating the
	 * LEDs. While busy, register writes will be ignored.
	 */
	void wait_for_idle() volatile
	{
		while ((status & StatusIdle) == 0) {}
	}

	/**
	 * Set the desired Red, Green, and Blue value of an LED. To apply these
	 * changes, one needs to run `SonataRgbLedController::update()`.
	 */
	void
	rgb(SonataRgbLed led, uint8_t red, uint8_t green, uint8_t blue) volatile
	{
		wait_for_idle();
		ledColors[static_cast<uint32_t>(led)] =
		  (static_cast<uint32_t>(blue) << 16) |
		  (static_cast<uint32_t>(green) << 8) | static_cast<uint32_t>(red);
	}

	/// Update the colours of the LEDs.
	void update() volatile
	{
		wait_for_idle();
		control = ControlSet;
	}

	/// Switch all of the RGB LEDs off.
	void off() volatile
	{
		wait_for_idle();
		control = ControlOff;
	}
};

static_assert(sizeof(SonataRgbLedController) == 16,
              "The SonataRgbLedController structure is the wrong size.");
