/*
 * driver.h
 *
 *  Created on: Jul 27, 2016
 *      Author: tkl
 */

#ifndef SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_DRIVER_H_
#define SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_DRIVER_H_

#define IOCTL_PWM_SET_DUTY_CYCLE	0

enum driver_type {
	DRIVER_TYPE_ADC,
	DRIVER_TYPE_GPIO,
	DRIVER_TYPE_I2C,
	DRIVER_TYPE_PWM,
	DRIVER_TYPE_RTC,
	DRIVER_TYPE_SPI,
	DRIVER_TYPE_UART
};

#pragma pack(push)
#pragma pack(1)
struct driver {
	enum driver_type driver_type;
	const void *device_driver;
};
#pragma pack(pop)

int drv_open(const struct driver *driver);
int drv_close(const struct driver *driver);
int drv_read(const struct driver *driver, char *buffer, int len);
int drv_write(const struct driver *driver, const char *buffer, int len);
int drv_ioctl(const struct driver *driver, unsigned int cmd, const void *data);

#endif /* SOURCE_FIRMWARE_KERNEL_DRIVER_INCLUDE_DRIVER_H_ */
