
/// This file deals with calculating RPM
#pragma once

#include "main.h"
#if !defined RPMTIMER
#warning RPMTIMER was not set 
#endif

#if RPMTIMER==1
// construct macros to deal with interrupts from the given Timer channel
#define TIMER_IRQ_HANDLER TIM1_IRQHandler
#define TIMER_HANDLE htim1
#elif RPMTIMER==2
#define TIMER_IRQ_HANDLER TIM2_IRQHandler
#define TIMER_HANDLE htim2
#elif RPMTIMER==3
#define TIMER_IRQ_HANDLER TIM3_IRQHandler
#define TIMER_HANDLE htim3
#elif RPMTIMER==4
#define TIMER_IRQ_HANDLER TIM4_IRQHandler
#define TIMER_HANDLE htim4
#endif


#if defined RPMTIMER

#define RPM_FLAG (1UL << 16)    // set high if the CB points are opened
#define RPM_SAMPLES 256         // sample times per 100mS or 1000mS when testing
#define RPM_COUNT_RATE 100000UL // Counter increments at 100KHz (need to match in STM32CubeMX)

#define RPM_AVERAGE 4

#if defined __cplusplus
extern "C"
{
#endif
    // return rpm estimate or -1 if not calculated this time 
    extern int  CalculateRPM(void);

#if defined __cplusplus
}
#endif

#endif