/* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved.
 *
 * The information contained herein is property of Nordic Semiconductor ASA.
 * Terms and conditions of usage are described in detail in NORDIC
 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
 *
 * Licensees are granted free, non-transferable use of the information. NO
 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
 * the file.
 *
 */

/** @file
*
* @defgroup nrf_radio_test_example_main main.c
* @{
* @ingroup nrf_radio_test_example
* @brief Radio Test Example Application main file.
*
* This file contains the source code for a sample application using the NRF_RADIO, and is controlled through the serial port.
*
*/


#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include "bsp.h"
#include "nrf.h"
#include "radio_test.h"
#include "app_uart.h"
#include "app_error.h"
#include "nordic_common.h"
#include "nrf_delay.h"


static uint8_t mode_          = RADIO_MODE_MODE_Nrf_1Mbit;//RADIO_MODE_MODE_Nrf_1Mbit;//RADIO_MODE_MODE_Nrf_2Mbit;
static uint8_t txpower_       = RADIO_TXPOWER_TXPOWER_0dBm;
static int channel_start_     = 2;

uint8_t change_set_flg =0;
bool change_flg=0;
bool change_TX_RX = 0; // TX=1 , RX = 0

typedef enum
{
    RADIO_TEST_NOP,      /**< No test running.      */
    RADIO_TEST_TXCC,     /**< TX constant carrier.  */
    RADIO_TEST_TXMC,     /**< TX modulated carrier. */
    RADIO_TEST_TXSWEEP,  /**< TX sweep.             */
    RADIO_TEST_RXC,      /**< RX constant carrier.  */
    RADIO_TEST_RXSWEEP,  /**< RX sweep.             */
} radio_tests_t;


#define BELL 7 // Bell

#define UART_TX_BUF_SIZE 512                                                          /**< UART TX buffer size. */
#define UART_RX_BUF_SIZE 1                                                            /**< UART RX buffer size. */
#define BUTTON_PIN	5

void uart_error_handle(app_uart_evt_t * p_event)
{
    if (p_event->evt_type == APP_UART_COMMUNICATION_ERROR)
    {
        APP_ERROR_HANDLER(p_event->data.error_communication);
    }
    else if (p_event->evt_type == APP_UART_FIFO_ERROR)
    {
        APP_ERROR_HANDLER(p_event->data.error_code);
    }
}

/** @brief Function for configuring all peripherals used in this example.
*/
static void init(void)
{
    NRF_RNG->TASKS_START = 1;

    // Start 16 MHz crystal oscillator
    NRF_CLOCK->EVENTS_HFCLKSTARTED  = 0;
    NRF_CLOCK->TASKS_HFCLKSTART     = 1;

    // Wait for the external oscillator to start up
    while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)
    {
        // Do nothing.
    }
}

/** @brief Function for main application entry.
 */
int main(void)
{
    init();

//    NVIC_EnableIRQ(TIMER0_IRQn);
//    __enable_irq();
			
		nrf_gpio_cfg_input(BUTTON_PIN,GPIO_PIN_CNF_PULL_Pullup);  
		
		radio_sweep_end();
		nrf_delay_ms(5);					
		radio_tx_carrier(txpower_, mode_, channel_start_);		
			
    while (true)
    {
			
			if( !nrf_gpio_pin_read(BUTTON_PIN)) //if BUTTON_PIN = low wile change 
			{
				
				nrf_delay_ms(50);
				if( nrf_gpio_pin_read(BUTTON_PIN)) //if BUTTON_PIN = hi  
				{
					
					if(change_set_flg < 5)
						change_set_flg +=1;
					else 
						change_set_flg =0;
						
					change_flg =1;
				}		
			}

			if(change_flg )
			{	
				change_flg = 0;
				
				switch (change_set_flg)
        {				
					case 0:						
						change_TX_RX = 1;
						channel_start_ 	= 2;					
						break;

					case 1:						
						change_TX_RX = 1;
						//channel_start_ 	= 41;		//change 2441MHz to 2440MHz
					  channel_start_ 	= 40;		//change 2441MHz to 2440MHz
						break;

					case 2:
						change_TX_RX = 1;
						channel_start_ 	= 80;
						break;

					case 3:
						change_TX_RX = 0;
						channel_start_ 	= 2;
						break;					
					
					case 4:
						change_TX_RX = 0;
						//channel_start_ 	= 41;		//change 2441MHz to 2440MHz
					  channel_start_ 	= 40;		//change 2441MHz to 2440MHz
						break;					
					
					case 5:
						change_TX_RX = 0;
						channel_start_ 	= 80;

						break;					

          default:// No implementation needed.             
						break;
        }

				if(change_TX_RX) 	//TX
				{
					radio_sweep_end();
					nrf_delay_ms(5);					
					//radio_tx_carrier(txpower_, mode_, channel_start_);
          radio_modulated_tx_carrier(txpower_, mode_, channel_start_);	
				}
				else							//RX
				{
					radio_sweep_end();
					nrf_delay_ms(5);					
					radio_rx_carrier(mode_, channel_start_);
					
				}							
			}	
		}
}					
//			radio_tx_carrier(txpower_, mode_, 2);
//			nrf_delay_ms(5000);
//			radio_sweep_end();
//			nrf_delay_ms(50);
//			
//			radio_tx_carrier(txpower_, mode_, 41);
//			nrf_delay_ms(5000);
//			radio_sweep_end();
//			nrf_delay_ms(50);			
//			
//			radio_tx_carrier(txpower_, mode_, 80);
//			nrf_delay_ms(5000);
//			radio_sweep_end();
//			nrf_delay_ms(50);
//			

//			radio_rx_carrier(mode_, 2);
//			nrf_delay_ms(5000);
//			radio_sweep_end();
//			nrf_delay_ms(50);

//			radio_rx_carrier(mode_, 41);
//			nrf_delay_ms(5000);
//			radio_sweep_end();
//			nrf_delay_ms(50);

//			radio_rx_carrier(mode_, 80);
//			nrf_delay_ms(5000);
//			radio_sweep_end();
//			nrf_delay_ms(50);



/** @} */
