/* * 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 #define IOCTL_PWM_GET_PERIOD_NS 1 #define IOCTL_PWM_GET_PULSE_WIDTH_NS 2 enum driver_type { DRIVER_TYPE_ADC, DRIVER_TYPE_GPIO, DRIVER_TYPE_I2C, DRIVER_TYPE_PWM, DRIVER_TYPE_RNG, 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_ */