/* main.c - Application main entry point */

/*
 * Copyright (c) 2015-2016 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/types.h>
#include <stddef.h>
#include <zephyr/sys/printk.h>
#include <zephyr/sys/util.h>
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/uart.h>
#include <zephyr/pm/device.h>
#include <zephyr/sys/poweroff.h>
#include <soc.h>
#include <stdio.h>
#include <string.h>



#include <hal/nrf_gpio.h>
#include <hal/nrf_power.h>
#include <nrfx_nvmc.h>
#include <nrfx_timer.h>


#include "freq_meter.h"



volatile uint16_t tilt_counter = 0;
volatile uint16_t in_counter = 0;
volatile uint32_t total_tilt_counter = 0;
volatile uint32_t total_in_counter = 0;


//DEBUG
volatile uint16_t num_int = 0;



static void timer_handler(nrf_timer_event_t event_type, void* p_context)
{
	num_int++;
	if (event_type == NRF_TIMER_EVENT_COMPARE0)
    {
		tilt_counter=nrfx_timer_capture(&timer1,0);
		total_tilt_counter+=tilt_counter;
		in_counter=nrfx_timer_capture(&timer2,0);
		total_in_counter+=in_counter;
		nrfx_timer_clear(&timer1);
		nrfx_timer_clear(&timer2);
	}
	/*
	//my_printk("Timer0 INT\r\n");
    if (NRF_TIMER3->EVENTS_COMPARE[0] != 0)
    {
        NRF_TIMER3->EVENTS_COMPARE[0] = 0;
		NRF_TIMER3->EVENTS_COMPARE[1] = 0;
		NRF_TIMER1->TASKS_CAPTURE[0] = 1;
        NRF_TIMER2->TASKS_CAPTURE[0] = 1;
		tilt_counter = NRF_TIMER1->CC[0];
        total_tilt_counter+=tilt_counter; 
		in_counter = NRF_TIMER2->CC[0];       
		total_in_counter+=in_counter;
        
        NRF_TIMER3->TASKS_CLEAR = 1;
		NRF_TIMER1->TASKS_CLEAR = 1;
        NRF_TIMER2->TASKS_CLEAR = 1;    

        NRF_TIMER3->TASKS_START = 1;           
    }
	*/	
}
#define TIMER_INST_IDX 3

int main(void)
{
	
    nrf_gpio_cfg_input(int1_tilt.pin, NRF_GPIO_PIN_NOPULL);
    nrf_gpio_cfg_input(int1_in.pin, NRF_GPIO_PIN_NOPULL);

	IRQ_DIRECT_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_TIMER_INST_GET(TIMER_INST_IDX)), IRQ_PRIO_LOWEST,
                       NRFX_TIMER_INST_HANDLER_GET(TIMER_INST_IDX), 0);

	counter1_init();  
	counter2_init();  
    timer_init(timer_handler);    	
    gpiote_init(int1_tilt.pin, int1_in.pin);
    
	
	ppi_timer_stop_counter_init();
	ppi_timer_start_counter_init();
	ppi_gpiote_counter_init();
    
	
	uint32_t capt;
	do {
		capt = nrfx_timer_capture(&timer2,1);
		printk("Captured %d num_int %d\r\n", capt, num_int);
		printk("tilt counter %d\n", tilt_counter);
		printk("in counter %d\n", in_counter);
		
		k_sleep(K_MSEC(1000));
	} while (1);


	return 0;
}
