text: /**
   * Keil project template
   *
   * Before you start, select your target, on the right of the "Load" button
   *
   * @author    Tilen MAJERLE
   * @email     tilen@majerle.eu
   * @website   http://stm32f4-discovery.net
   * @ide       Keil uVision 5
   * @conf      PLL parameters are set in "Options for Target" -> "C/C++" -> "Defines"
   * @packs     STM32F4xx/STM32F7xx Keil packs are requred with HAL driver support
   * @stdperiph STM32F4xx/STM32F7xx HAL drivers required
   */
  /* Include core modules */
  #include "stm32fxxx_hal.h"
  /* Include my libraries here */
  #include "defines.h"
  #include "tm_stm32_disco.h"
  #include "tm_stm32_delay.h"
  #include "tm_stm32_nrf24l01.h"
  #include "tm_stm32_usart.h"
  
  /* Receiver address */
  uint8_t TxAddress[] = {
  	0xE7,
  	0xE7,
  	0xE7,
  	0xE7,
  	0xE7
  };
  /* My address */
  uint8_t MyAddress[] = {
  	0x7E,
  	0x7E,
  	0x7E,
  	0x7E,
  	0x7E
  };
  
  /* Data received and data for send */
  uint8_t dataOut[32], dataIn[32];
  
  /* NRF transmission status */
  TM_NRF24L01_Transmit_Status_t transmissionStatus;
  
  int main(void) {
  	/* Init system clock for maximum system speed */
  	TM_RCC_InitSystem();
  	
  	/* Init HAL layer */
  	HAL_Init();
  	
  	/* Init leds */
  	TM_DISCO_LedInit();
  	
  	/* Init button */
  	TM_DISCO_ButtonInit();
  	
  	/* Initialize USART, TX: PB6, RX: PB7 */
  	TM_USART_Init(USART1, TM_USART_PinsPack_2, 115200);
  	
  	/* Initialize NRF24L01+ on channel 15 and 32bytes of payload */
  	/* By default 2Mbps data rate and 0dBm output power */
  	/* NRF24L01 goes to RX mode by default */
  	TM_NRF24L01_Init(15, 32);
  	
  	/* Set RF settings, Data rate to 2Mbps, Output power to -18dBm */
  	TM_NRF24L01_SetRF(TM_NRF24L01_DataRate_2M, TM_NRF24L01_OutputPower_M18dBm);
  	
  	/* Set my address, 5 bytes */
  	TM_NRF24L01_SetMyAddress(MyAddress);
  	
  	/* Set TX address, 5 bytes */
  	TM_NRF24L01_SetTxAddress(TxAddress);
  	
  	while (1) {
  		/* If data is ready on NRF24L01+ */
  		if (TM_NRF24L01_DataReady()) {
  			/* Get data from NRF24L01+ */
  			TM_NRF24L01_GetData(dataIn);
  			
  			/* Start send */
  			TM_DISCO_LedOn(LED_GREEN);
  			
  			/* Send it back, automatically goes to TX mode */
  			TM_NRF24L01_Transmit(dataIn);
  			
  			/* Wait for data to be sent */
  			do {
  				/* Wait till sending */
  				transmissionStatus = TM_NRF24L01_GetTransmissionStatus();
  			} while (transmissionStatus == TM_NRF24L01_Transmit_Status_Sending);
  			
  			/* Send done */
  			TM_DISCO_LedOff(LED_GREEN);
  			
  			/* Go back to RX mode */
  			TM_NRF24L01_PowerUpRx();		
  		}
  	}
  }
  