//----------------------------------------------------
/**
	\file		sens/inc/hwboard.h
	\ingroup	platform
	\ingroup	cortex-m4

	\brief		Knihovna HW funkci desky ctbrd03c
				<<< CTBRD03C >>>

	\author		ConTeK s.r.o., Bc. Jakub Kastner
	\version	01.01
	\date		05.03.2014
*/
//----------------------------------------------------

#ifndef _HWBOARD_H_
#define _HWBOARD_H_			//!< Definice pritomnosti knihovny

#include <libsets.h>
#include <cortex-m4/inc/ctktypes.h>
#include <cortex-m4/inc/hwmodel.h>


//----------------------------------------------------
//!	Pocet LED

#define LED_COUNT	2

#define MCK			CHIP_FREQ_CPU_MAX


//----------------------------------------------------
/**
	\brief	Adresa konfiguracnich dat
*/
//----------------------------------------------------

#define CFGDATA_ADDR			(0x5E00)

//--------------------------------------------------
/**
	\brief	Inicializace nezapojenych pinu
*/
//--------------------------------------------------

void InitPins(void);

//--------------------------------------------------
/**
	\brief	Funkce inicialuzuje vystupni piny tak, aby slo ovladat LED
*/
//--------------------------------------------------

void InitLed(void);

//--------------------------------------------------
/**
	\brief	Funkce v zavislosti na svem parametru rozsviti ci zhasne danou LED

	\param	nm	Cislo ledky, pocinaje od 0
	\param	on	Pokud je TRUE, led se rozsviti, jinak zhasne
*/
//--------------------------------------------------

void SetLedEx(const uint32_t nm, const bool_t on);

//--------------------------------------------------
/**
	\brief	Funkce zmeni stav dane LED diody

	\param	nm	Cislo ledky, pocinaje od 0
*/
//--------------------------------------------------

void SwapLedEx(const uint32_t nm);

//--------------------------------------------------
/**
	\brief	Funkce v zavislosti na svem parametru rozsviti ci zhasne LED

	\param	on	Pokud je TRUE, led se rozsviti, jinak zhasne
*/
//--------------------------------------------------

void SetLed(const bool_t on);

//--------------------------------------------------
/**
	\brief	Funkce v zavislosti na svem parametru rozsviti ci zhasne LED

	\param	on	Pokud je TRUE, led se rozsviti, jinak zhasne
*/
//--------------------------------------------------

void SwapLed(void);

//--------------------------------------------------
/**
	\brief	Ukonceni LED (zhasnuti vsech)
*/
//--------------------------------------------------

void LedFinalize(void);

//--------------------------------------------------
/**
	\brief	Funkce inicialuzuje vystupni piny tak, aby se daly cist jumpery
*/
//--------------------------------------------------

void InitJumper(void);

//--------------------------------------------------
/**
	\brief	Funkce zjisti stav propojky na desce

	\param	num		cislo testovane propojky

	\return	TRUE	propojka neni nasazena
			FALSE	propojka je nasazena (stahuje uroven k zemi)
*/
//--------------------------------------------------

bool_t GetJumper( const uint8_t num );

//--------------------------------------------------
/**
 	 \brief		Funkce konfiguruje nastaveni pro jednotlive kanaly SPI

 	 \return	Konfigurace SPI kanalu - ta se uklada do konfiguracniho registru SPI_CSR[x]
 */
//--------------------------------------------------

uint32_t getSPIChannelConfig(const uint8_t channel);


//--------------------------------------------------------------------------------------------
//	RTC

//#define RTC_TWI				0

//#define	RTC_TWI_CHANNEL		1		//!< Kanal TWI pouzivany RTC


//--------------------------------------------------
//	FRAM

#define FRAM_SIZE			2048	//!< Velikost FRAM v bytech

#define FRAM_TWI			0

#define	FRAM_TWI_CHANNEL	0		//!< Kanal TWI pouzivany FRAM


//--------------------------------------------------
//	DATAFLASH

#define DATAFLASH_A_SPI_CHANNEL		0


//--------------------------------------------------------------------------------------------
//	Include komponent

#ifdef USEHW_FRAM
#include <fram_fm24c.h>
#endif // USEHW_FRAM

#ifdef USEHW_DATAFLASH_A
#include <dataflash_at45db.h>
#endif // USEHW_DATAFLASH_A



//------------------------------------------------
/**
	\brief	Funkce inicializuje desku

	\param	FramCtx			Kontext Fram, pokud je pouzita FRAM
	\param	TwiCtx			Kontext twi, bude inicializovan, pokud je pouzita FRAM
	\param	DataFlashACtx	Kontext dataflash, je-li pozita
	\param	SpiACtx			Kontext spi, bude inicializovan, pokud je pouzita dataflashA

	\return	true, pokud se inicializace zdarila
*/
//--------------------------------------------------

bool_t HWBoardInitialize(
#ifdef USEHW_FRAM
		FRAM_CTX * const FramCtx,
		TWIDESC * const TwiCtx
#endif // USEHW_FRAM
#if defined(USEHW_RTC) && !defined(USEHW_FRAM)
		TWIDESC * const TwiCtx
#endif
#ifdef USEHW_DATAFLASH_A
 #if defined(USEHW_FRAM) || defined(USEHW_RTC)
		,
 #endif
		DATAFLASH_CTX * const DataFlashACtx,
		SPIDESC * const SpiACtx
#endif
	);


//--------------------------------------------------
/**
	\brief	Funkce ukoncuje praci s deskou

	\return	true, pokud byla finalizace uspesna
*/
//--------------------------------------------------

bool_t HWBoardFinalize (
#ifdef USEHW_FRAM
		FRAM_CTX * const FramCtx,
		TWIDESC * const TwiCtx
#endif
#if defined(USEHW_RTC) && !defined(USEHW_FRAM)
		TWIDESC * const TwiCtx
#endif
#ifdef USEHW_DATAFLASH_A
 #if defined(USEHW_FRAM) || defined(USEHW_RTC)
		,
 #endif
		DATAFLASH_CTX * const DataFlashACtx,
		SPIDESC * const SpiACtx
#endif
	);

#endif // _HWBOARD_H_
