一: 设备组件通用模型
device.c
设备组件
device 组件的运作大致如上图所示。
RTT DEVICE API
1.是用户对设备进行访问的统一接口。
2.设备的访问通过handler索引
3.handler 的来源 是RTT 资源容器(或者称为IO设备管理)
4.所为注册就是向容器内(设备管理器)加入自己的索引。
IO设备管理器是移植RTT 设备层的关键。
以上整个流程IO设备管理层负责接收驱动层的注册,记录其handler。对RTT DEVICE API来说,需要向其提供目标设备的handler索引。
drive.c
rt_err_t rt_device_register(rt_device_t dev,
const char *name,
rt_uint16_t flags)
rt_err_t rt_device_unregister(rt_device_t dev)
rt_device_t rt_device_find(const char *name)
rt_device_t rt_device_create(int type, int attach_size)
void rt_device_destroy(rt_device_t dev)
// device ops
rt_err_t rt_device_init(rt_device_t dev)
rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
rt_err_t rt_device_close(rt_device_t dev)
rt_size_t rt_device_read(rt_device_t dev,
rt_off_t pos,
void *buffer,
rt_size_t size)
rt_size_t rt_device_write(rt_device_t dev,
rt_off_t pos,
const void *buffer,
rt_size_t size)
rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg)
rt_err_t rt_device_set_rx_indicate(rt_device_t dev,
rt_err_t (*rx_ind)(rt_device_t dev,
rt_size_t size))
rt_err_t rt_device_set_tx_complete(rt_device_t dev,
rt_err_t (*tx_done)(rt_device_t dev,
void *buffer))
rt_device_register _object_container获得设备句柄
rt_device_unregister _object_container释放设备句柄
rt_device_find 获取_object_container 中的设备句柄 提供device ops 的依赖 rt_device_t ->ops