/***************************************************************************//** * @file lpcie_ioctls.h * Файл содержит определения управляющих запросов драйвера lpcie и типов данных, * используемых для передачи параметров управляющих запросов * @author Borisov Alexey * @date 23.05.2012 * ****************************************************************************/ #ifndef LPCIE_IOCTLS_H #define LPCIE_IOCTLS_H /** Проверка по версии дарайвера, поддерживается ли запрос LPCIE_IOCTL_CYCLE_CHECK_SETUP */ #define LPCIE_IOCTL_SUPPORT_CYCLE_CHECK_SETUP(ver) (ver >= 0x01000900) /** Варианты событий, по которым должно произойти переключение циклического сигнала */ typedef enum { LPCIE_CYCLE_SW_EVT_IMMIDIATLY = 1, /**< сразу по получению команды */ LPCIE_CYCLE_SW_EVT_END_OF_CYCLE = 2 /**< по завершению текущего цикла */ } t_lpcie_cycle_sw_evt; /** параметры для записи значения регистра */ typedef struct { uint32_t addr; /** Адрес регистра */ uint32_t val; /** Значение регистра */ } t_lpcie_mem_rw; /** настройки канала DMA, передаваемые вместе с LPCIE_IOCTL_STREAM_SET_PARAMS */ typedef struct { uint32_t ch; /** канал DMA (ввод/вывод) */ uint32_t res[2]; /** резерв */ uint32_t buf_size; /** размер каждой страницы памяти в PC */ uint32_t irq_step; /** через сколько переданных отсчетов будет генерироваться прерывание */ uint32_t res2[3]; } t_lpcie_stream_ch_params; /** параметры для установки циклического сигнала */ typedef struct { uint32_t ch; /** канал DMA (доступно только на вывод) */ uint32_t size; /** количество отсчетов в циклическом сигнале */ uint32_t irq_step; /** шаг генерации прерываний */ uint32_t res; /** резерв */ } t_lpcie_cycle_set_par; /** параметры для остановки/смены циклического сигнала */ typedef struct { uint32_t ch; /** канал DMA (доступно только на вывод) */ uint32_t evt; /** событие для смены сигнала из #t_lpcie_cycle_sw_evt */ uint32_t res[2]; /** резерв */ } t_lpcie_cycle_evt_par; /** параметры для запроса LPCIE_IOCTL_CYCLE_CHECK_SETUP */ typedef struct { uint32_t ch; /** канал DMA (доступно только на вывод) */ uint32_t done; /** признак, завершена ли установка циклического сигнала */ } t_lpcie_cycle_check_setup_par; /** параметры запроса для получения количества готовых для ввода или вывода отсчетов */ typedef struct { uint32_t ch; /** канал DMA (ввод/вывод) */ uint32_t rdy_size; /** Количество отсчетов доступных на ввод или вывод */ } t_lpcie_get_rdy_par; #ifdef _WIN32 #define LPCIE_IOCTL_GET_DRV_VERSION \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED , FILE_ANY_ACCESS) #define LPCIE_IOCTL_MEMFPGA_RD \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x810, METHOD_BUFFERED , FILE_ANY_ACCESS) #define LPCIE_IOCTL_MEMFPGA_WR \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x811, METHOD_BUFFERED , FILE_ANY_ACCESS) #define LPCIE_IOCTL_POWER_DONW \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x820, METHOD_BUFFERED , FILE_ANY_ACCESS) #define LPCIE_IOCTL_RELOAD_DEVINFO \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x821, METHOD_BUFFERED , FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_SET_PARAMS \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x840, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_GET_PARAMS \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x841, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_GET_RDY_SIZE \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x842, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_START \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x844, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_STOP \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x845, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_FREE \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x846, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_STREAM_START_SINGLE \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x847, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_CYCLE_LOAD \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x850, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_CYCLE_SWITCH \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x851, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_CYCLE_STOP \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x852, METHOD_BUFFERED, FILE_ANY_ACCESS) #define LPCIE_IOCTL_CYCLE_CHECK_SETUP \ CTL_CODE(FILE_DEVICE_UNKNOWN, 0x853, METHOD_BUFFERED, FILE_ANY_ACCESS) #else #define LPCIE_IO_MAGIC 'L' #define LPCIE_IOCTL_GET_DRV_VERSION _IOR(LPCIE_IO_MAGIC, 0x800, uint32_t) #define LPCIE_IOCTL_MEMFPGA_RD _IOWR(LPCIE_IO_MAGIC, 0x810, t_lpcie_mem_rw) #define LPCIE_IOCTL_MEMFPGA_WR _IOW(LPCIE_IO_MAGIC, 0x811, t_lpcie_mem_rw) #define LPCIE_IOCTL_POWER_DONW _IO(LPCIE_IO_MAGIC, 0x820) #define LPCIE_IOCTL_RELOAD_DEVINFO _IO(LPCIE_IO_MAGIC, 0x821) #define LPCIE_IOCTL_STREAM_SET_PARAMS _IOW(LPCIE_IO_MAGIC, 0x840, t_lpcie_stream_ch_params) #define LPCIE_IOCTL_STREAM_GET_PARAMS _IOWR(LPCIE_IO_MAGIC, 0x841, t_lpcie_stream_ch_params) #define LPCIE_IOCTL_STREAM_GET_RDY_SIZE _IOWR(LPCIE_IO_MAGIC, 0x842, t_lpcie_get_rdy_par) #define LPCIE_IOCTL_STREAM_START _IOW(LPCIE_IO_MAGIC, 0x844, uint32_t) #define LPCIE_IOCTL_STREAM_STOP _IOW(LPCIE_IO_MAGIC, 0x845, uint32_t) #define LPCIE_IOCTL_STREAM_FREE _IOW(LPCIE_IO_MAGIC, 0x846, uint32_t) #define LPCIE_IOCTL_STREAM_START_SINGLE _IOW(LPCIE_IO_MAGIC, 0x847, uint32_t) #define LPCIE_IOCTL_CYCLE_LOAD _IOW(LPCIE_IO_MAGIC, 0x850, t_lpcie_cycle_set_par) #define LPCIE_IOCTL_CYCLE_SWITCH _IOW(LPCIE_IO_MAGIC, 0x851, t_lpcie_cycle_evt_par) #define LPCIE_IOCTL_CYCLE_STOP _IOW(LPCIE_IO_MAGIC, 0x852, t_lpcie_cycle_evt_par) #define LPCIE_IOCTL_CYCLE_CHECK_SETUP _IOWR(LPCIE_IO_MAGIC, 0x853, t_lpcie_cycle_check_setup_par) #endif #endif // LPCIE_IOCTLS_H