#pragma once

#include <stm32h7a3xxq.h>
#include <stm32h7xx_ll_dma.h>

#include "UARTConfig.hpp"
#include "RTClock.hpp"
#include "FIFOTemplated.hpp"

extern "C" void DMA1_Stream0_IRQHandler(void);		//TODO is this really the right way use extern?
extern "C" void DMA1_Stream1_IRQHandler(void);
extern "C" void USART1_IRQHandler(void);

namespace usart1
{
	typedef simpleDeviceRecord fifoRecord;
	void init();
	UARTConfigStruct* getUARTConfig();
//	bool startXfer(uint8_t* command, uint32_t commandSize);
	bool isThisXferDone();
	std::string getRXBuffer();
	static ALIGN_32BYTES(std::uint8_t  rxBuffer[256]);
	uint16_t getQCount_T();
	void deQ_T(fifoRecord &qRecord);
	void clearQ_T();
};