#ifndef INCLUDED_DRV_DEVICE_H #define INCLUDED_DRV_DEVICE_H #ifndef INCLUDED_OS_TYPES_H #include #endif /*INCLUDED_OS_TYPES_H*/ #ifndef INCLUDED_OS_COMPILER_H #include #endif /*INCLUDED_OS_COMPILER_H*/ #ifndef INCLUDED_OS_MACROS_H #include #endif /*INCLUDED_OS_MACROS_H*/ #ifndef INCLUDED_OS_LIST_H #include #endif /*INCLUDED_OS_LIST_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ typedef struct { void* handle; os_err_t (*init)(void* handle, void* args); os_err_t (*destroy)(void* handle, void* args); os_err_t (*open)(void* handle, void* args); os_err_t (*close)(void* handle, void* args); os_err_t (*read)(void* handle, uint8_t * buf, os_size_t buf_size, os_size_t * rd_size, void* args); os_err_t (*write)(void* handle, const uint8_t * data, os_size_t data_size, os_size_t * wr_size, void* args); void* args; char name[OS_CFG_NAME_MAX]; }drv_device_t; #define drv_device_init(dev) (dev)->init((dev)->handle, (dev)->args) #define drv_device_destroy(dev) (dev)->destroy((dev)->handle, (dev)->args) #define drv_device_open(dev) (dev)->open((dev)->handle, (dev)->args) #define drv_device_close(dev) (dev)->close((dev)->handle, (dev)->args) #define drv_device_read(dev, buf, buf_sz, rd_sz) (dev)->read((dev)->handle, (uint8_t*)(buf), (os_size_t)(buf_sz), rd_sz, (dev)->args) #define drv_device_write(dev, buf, buf_sz, wr_sz) (dev)->write((dev)->handle, (const uint8_t*)(buf), (os_size_t)(buf_sz), wr_sz, (dev)->args) /* ------------------------------------------------------------------------------------------------------------------ */ /* */ void drv_device_system_init(void); void drv_device_register(drv_device_t* self, const char* name, void* handle, os_err_t (*init)(void* handle, void* args), os_err_t (*destroy)(void* handle, void* args), os_err_t (*open)(void* handle, void* args), os_err_t (*close)(void* handle, void* args), os_err_t (*read)(void* handle, uint8_t * buf, os_size_t buf_size, os_size_t * rd_size, void* args), os_err_t (*write)(void* handle, const uint8_t * data, os_size_t data_size, os_size_t * wr_size, void* args), void* args); void drv_device_unregister(drv_device_t* self); drv_device_t* drv_device_find(const char* name); #endif /*INCLUDED_DRV_DEVICE_H*/