// CRC: AANGEPAST VOOR DEBUGGING
// REVISION: 3.0_C6_PATCH
// DATE: 03\01\2026
// DIR: CAL\ESP\ESP_CAL_RMT.c
/*********************************************************************
 * Flowcode CAL RMT File - PATCHED FOR ESP32-C6
 *********************************************************************/

#define MX_RMT_CHANNEL_X		MX_RMT_NUM
#define MX_RMT_MODE_X			CAL_APPEND(MX_RMT_MODE_, MX_RMT_NUM)
#define MX_RMT_PIN_X			CAL_APPEND(MX_RMT_PIN_, MX_RMT_NUM)
#define MX_RMT_MEMBLKNUM_X		CAL_APPEND(MX_RMT_MEMBLKNUM_, MX_RMT_NUM)
#define MX_RMT_CLKDIV_X			CAL_APPEND(MX_RMT_CLKDIV_, MX_RMT_NUM)

#define MX_RMT_TXLOOPEN_X		CAL_APPEND(MX_RMT_TXLOOPEN_, MX_RMT_NUM)
#define MX_RMT_TXCARRIEREN_X	CAL_APPEND(MX_RMT_TXCARRIEREN_, MX_RMT_NUM)
#define MX_RMT_TXCARRIERFREQ_X  CAL_APPEND(MX_RMT_TXCARRIERFREQ_, MX_RMT_NUM)
#define MX_RMT_TXCARRIERDUTY_X	CAL_APPEND(MX_RMT_TXCARRIERDUTY_, MX_RMT_NUM)
#define MX_RMT_TXCARRIERLVL_X	CAL_APPEND(MX_RMT_TXCARRIERLVL_, MX_RMT_NUM)
#define MX_RMT_TXIDLEEN_X		CAL_APPEND(MX_RMT_TXIDLEEN_, MX_RMT_NUM)
#define MX_RMT_TXIDLELVL_X		CAL_APPEND(MX_RMT_TXIDLELVL_, MX_RMT_NUM)

#define MX_RMT_RXFILTEREN_X		CAL_APPEND(MX_RMT_RXFILTEREN_, MX_RMT_NUM)
#define MX_RMT_RXFILTERTICKS_X	CAL_APPEND(MX_RMT_RXFILTERTICKS_, MX_RMT_NUM)
#define MX_RMT_IDLETHRESH_X		CAL_APPEND(MX_RMT_IDLETHRESH_, MX_RMT_NUM)

#define MX_RMT_BUFFER_X			CAL_APPEND(MX_RMT_Buffer_, MX_RMT_NUM)
#define MX_RMT_BUFFSZ_X			CAL_APPEND(MX_RMT_BUFFSZ_, MX_RMT_NUM)

//Function Prototypes
CALFUNCTION(void, FC_CAL_RMT_Init_, (void));
CALFUNCTION(void, FC_CAL_RMT_WriteData_, (MX_UINT32 address, MX_UINT32 val));
CALFUNCTION(MX_UINT32, FC_CAL_RMT_ReadData_, (MX_UINT32 address));
CALFUNCTION(void, FC_CAL_RMT_TX_, (MX_UINT8 waitWhileComplete));
CALFUNCTION(MX_UINT8, FC_CAL_RMT_TXBusy_, (void));
CALFUNCTION(void, FC_CAL_RMT_RX_, (void));

#if defined MX_CAL_ESP32
	#include "driver/rmt.h"
	//Data Buffer
	rmt_item32_t MX_RMT_BUFFER_X[MX_RMT_BUFFSZ_X];
#endif

CALFUNCTION(void, FC_CAL_RMT_Init_, (void))
{
	#if defined MX_CAL_ESP32
		rmt_config_t config;
		config.rmt_mode = MX_RMT_MODE_X;
		config.channel = MX_RMT_CHANNEL_X;
		
		// DEBUG FIX: We negeren MX_RMT_PIN_X (die de 538 fout geeft) en forceren Pin 8
		config.gpio_num = 8; 
		
		config.mem_block_num = MX_RMT_MEMBLKNUM_X;

		#if (MX_RMT_MODE_X == RMT_MODE_TX)
			config.tx_config.loop_en = MX_RMT_TXLOOPEN_X;
			config.tx_config.carrier_en = MX_RMT_TXCARRIEREN_X;
			config.tx_config.carrier_freq_hz = MX_RMT_TXCARRIERFREQ_X;
			config.tx_config.carrier_duty_percent = MX_RMT_TXCARRIERDUTY_X;
			config.tx_config.carrier_level = MX_RMT_TXCARRIERLVL_X;
			config.tx_config.idle_output_en = MX_RMT_TXIDLEEN_X;
			config.tx_config.idle_level = MX_RMT_TXIDLELVL_X;
		#endif

		#if (MX_RMT_MODE_X == RMT_MODE_RX)
			config.rx_config.filter_en = MX_RMT_RXFILTEREN_X;
			config.rx_config.filter_ticks_thresh = MX_RMT_RXFILTERTICKS_X;
			config.rx_config.idle_threshold = 0;
		#endif

		config.clk_div = MX_RMT_CLKDIV_X;

		// We verwijderen de ERROR_CHECK omdat de structuur in v5.3 'deprecated' is
		// maar we hopen dat de legacy driver de waarden nog accepteert.
		rmt_config(&config);
		rmt_driver_install(config.channel, 0, 0);
	#endif
}

CALFUNCTION(void, FC_CAL_RMT_TX_, (MX_UINT8 waitWhileComplete))
{
	#if defined MX_CAL_ESP32
		rmt_write_items(MX_RMT_CHANNEL_X, MX_RMT_BUFFER_X, MX_RMT_BUFFSZ_X, false);

		if (waitWhileComplete)
		{
			uint32_t status;
			do
			{
				rmt_get_status(MX_RMT_CHANNEL_X, &status);
			}
			while (status & 0x1000000);
		}
	#endif
}

CALFUNCTION(MX_UINT8, FC_CAL_RMT_TXBusy_, (void))
{
	MX_UINT8 ret = 0;
	#if defined MX_CAL_ESP32
		uint32_t status;
		rmt_get_status(MX_RMT_CHANNEL_X, &status);
		if (status & 0x1000000)
		{
			ret = 1;
		}
	#endif
	return ret;
}

CALFUNCTION(void, FC_CAL_RMT_RX_, (void))
{
	#if defined MX_CAL_ESP32
	#endif
}