I/O设备控制块
- struct rt_device
- {
- struct rt_object parent;
- /* 设备类型 */
- enum rt_device_class_type type;
- /* 设备参数及打开参数 */
- rt_uint16_t flag, open_flag;
- /* 提供给上层应用的回调函数 */
- rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);
- rt_err_t (*tx_complete)(rt_device_t dev, void* buffer);
- /* 公共的设备接口(由驱动程序提供) */
- rt_err_t (*init) (rt_device_t dev);
- rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);
- rt_err_t (*close)(rt_device_t dev);
- rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size);
- rt_size_t (*write)(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size);
- rt_err_t (*control)(rt_device_t dev, rt_uint8_t cmd, void *args);
- /* 设备的私有数据 */
- void* user_data;
- };
- typedef struct rt_device* rt_device_t;
当前RT-Thread支持的设备类型包括:
- enum rt_device_class_type
- {
- RT_Device_Class_Char = 0, /* 字符设备 */
- RT_Device_Class_Block, /* 块设备 */
- RT_Device_Class_NetIf, /* 网络接口设备 */
- RT_Device_Class_MTD, /* 内存设备 */
- RT_Device_Class_CAN, /* CAN设备 */
- RT_Device_Class_RTC, /* RTC设备 */
- RT_Device_Class_Sound, /* 声音设备 */
- RT_Device_Class_Graphic, /* 图形设备 */
- RT_Device_Class_I2CBUS, /* I2C总线 */
- RT_Device_Class_USBDevice, /* USB device设备 */
- RT_Device_Class_USBHost, /* USB host设备 */
- RT_Device_Class_SPIBUS, /* SPI总线 */
- RT_Device_Class_SPIDevice, /* SPI设备 */
- RT_Device_Class_SDIO, /* SDIO设备 */
- RT_Device_Class_PM, /* 电源管理设备 */
- RT_Device_Class_Pipe, /* 管道设备 */
- RT_Device_Class_Portal, /* 双向管道设备 */
- RT_Device_Class_Timer,
- RT_Device_Class_Miscellaneous, /* 杂类设备 */
- RT_Device_Class_Unknown /* 未知设备 */
- };
从设备控制块,我们可以看到,每个设备对象都会在内核中维护一个设备控制块结构,这种结构使设备对象继承rt_object基类,然后形成rt_device设备类型。