#ifndef __DRIVER_H__ #define __DRIVER_H__ #include "linux/types.h" #include "com_gpio.h" #include "stm32f429xx.h" #define MAJOR_PLATFORM 100 #define MAJOR_I2C 101 #define MAJOR_FMC 102 #define MAJOR_GPIO 103 #define MAJOR_SPI 104 #define MAJOR_ADC 105 #define MAJOR_GPIO_I2C 106 #define IOCTL_MAGIC 'x' #define GENERATE_CMD(__MAGIC__, __MAJOR__, __CMD__) \ ((0x3<<30) | (__MAJOR__<<16) | (__MAGIC__<<8) | __CMD__) /* I2C command */ #define SET_I2C_SPEED GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 0) #define GET_I2C_SPEED GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 1) #define SET_I2C_ADDR GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 2) #define GET_I2C_ADDR GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 3) #define I2C_MASTER_TRANSFER GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 4) #define I2C_MASTER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 5) #define I2C_SLAVE_RECEIVE_IT GENERATE_CMD(IOCTL_MAGIC, MAJOR_I2C, 6) /* FMC command */ #define WRITE_BYTE GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 0) #define READ_BYTE GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 1) #define WRITE_SHORT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 2) #define READ_SHORT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 3) #define WRITE_WORD GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 4) #define READ_WORD GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 5) #define BUS_8BIT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 6) #define BUS_16BIT GENERATE_CMD(IOCTL_MAGIC, MAJOR_FMC, 7) /* SPI command */ #define SPI_MASTER_TRANSFER GENERATE_CMD(IOCTL_MAGIC, MAJOR_SPI, 0) #define SPI_MASTER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_SPI, 1) /* GPIO command */ #define GPIO_INIT GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 0) #define GPIO_WRITE_PIN GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 1) #define GPIO_READ_PIN GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO, 2) /* ADC command */ #define ADC_GET_RESULT GENERATE_CMD(IOCTL_MAGIC, MAJOR_ADC, 0) /* GPIO I2C command */ #define GPIO_I2C_MASTER_TRANSFER GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 0) #define GPIO_I2C_MASTER_RECEIVE GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 1) typedef struct { uint32_t address; uint16_t length; uint8_t data[1024]; } fmc_cpld_t; typedef struct { GPIO_TypeDef* GPIOx; uint16_t GPIO_pin; GPIO_PinState Data; GPIO_InitTypeDef GPIO_Init; } gpio_t; typedef struct { uint8_t DevAddress; /* 8 bit */ uint8_t buf[100]; uint8_t Size; } gpio_i2c_t; typedef struct { uint32_t ClockSpeed; /*!< Specifies the clock frequency. This parameter must be set to a value lower than 400kHz */ uint32_t OwnAddress1; /*!< Specifies the first device own address. This parameter must be a 7-bit address. */ uint8_t DevAddress; /* 8 bit */ uint8_t buf[100]; uint8_t Size; } i2c_arg_t; typedef struct { uint8_t buf[300]; uint32_t Size; } spi_arg_t; typedef struct { uint8_t channel; uint16_t value[10]; } adc_arg_t; #endif /* __DRIVER_H__ */