#ifndef PIOS_TIM_PRIV_H
#define PIOS_TIM_PRIV_H

#include <pios_stm32.h>

struct pios_tim_clock_cfg {
	TIM_TypeDef * timer;
	const TIM_TimeBaseInitTypeDef * time_base_init;
	struct stm32_irq irq;
};

struct pios_tim_channel {
	TIM_TypeDef * timer;
	uint8_t timer_chan;

	struct stm32_gpio pin;
	uint32_t remap;
};

struct pios_tim_callbacks {
	void (*overflow)(uint32_t tim_id, uint32_t context, uint8_t chan_idx, uint16_t count);
	void (*edge)(uint32_t tim_id, uint32_t context, uint8_t chan_idx, uint16_t count);
};

extern int32_t PIOS_TIM_InitClock(const struct pios_tim_clock_cfg * cfg);
extern int32_t PIOS_TIM_InitChannels(uint32_t * tim_id, const struct pios_tim_channel * channels, uint8_t num_channels, const struct pios_tim_callbacks * callbacks, uint32_t context);

#endif	/* PIOS_TIM_PRIV_H */