/*
 * pwm.h
 *
 *  Created on: Aug 9, 2016
 *      Author: tkl
 */

#ifndef SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_PWM_H_
#define SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_PWM_H_

//! \brief Function pointer to the open function.
typedef int (*pwm_fp_open_t)(const void*);

//! \brief Function pointer to the close function.
typedef int (*pwm_fp_close_t)(const void*);

//! \brief Function pointer to the read function.
typedef int (*pwm_fp_set_duty_cycle_t)(const void*, unsigned int duty_cycle_percent);

struct pwm_fp {
	const pwm_fp_open_t open;
	const pwm_fp_close_t close;
	const pwm_fp_set_duty_cycle_t set_duty_cycle;
};

struct pwm {
	const void *arch_dep_device;	//!< Architecture depended pwm device (i.e. stm32f10x_pwm_t).
	const struct pwm_fp *fp;				//!< Function pointer for the pwm driver access.
};

int pwm_open(const struct pwm *device);
int pwm_close(const struct pwm *device);
int pwm_set_duty_cycle(const struct pwm *device, unsigned int duty_cycle_percent);

#endif /* SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_PWM_H_ */
