#ifndef INC_INPUT_CAPTURE_H_
#define INC_INPUT_CAPTURE_H_

#define CPU_FCK	64000000

#define DSHOT150_TIM_TRIG 					CPU_FCK/1000000*6670/2000
#define DSHOT300_TIM_TRIG 					CPU_FCK/1000000*3330/2000
#define DSHOT600_TIM_TRIG 					CPU_FCK/1000000*1670/2000

#define DShot_150	0
#define DShot_300	1
#define DShot_600	2
#define DShot_Auto	3

typedef struct
{
	uint16_t Value; // 0...47 command, 48...2047 throttle
	uint8_t Type;
	uint32_t T1[16];
	uint32_t T2[16];
	uint16_t Dif[16];
	uint16_t TDif;
	uint8_t Restart_Counter;
} DShotStruct;


void DMA1_Channel1_IRQ (DMA_HandleTypeDef *hdma);
void Dshot_Init(uint8_t type);
void Dshot_DeInit(void);
uint32_t DShot_Get(void);

typedef struct
{
	uint32_t Value;
	uint32_t OverCaptureCounter;
} PWMInputStruct;

void PWMInput_Init(void);
void PWMInput_DeInit(void);
uint32_t PWMInput_Get(void);
void TIM3_IRQ(void);

#endif
