xref: /DragonOS/kernel/src/driver/base/char/mod.rs (revision 1496ba7b24a5e6954291ca9643b9f3cec567479a)
1 use crate::syscall::SystemError;
2 
3 use super::device::Device;
4 
5 pub trait CharDevice: Device {
6     /// Notice buffer对应设备按字节划分,使用u8类型
7     /// Notice offset应该从0开始计数
8 
9     /// @brief: 从设备的第offset个字节开始,读取len个byte,存放到buf中
10     /// @parameter offset: 起始字节偏移量
11     /// @parameter len: 读取字节的数量
12     /// @parameter buf: 目标数组
13     /// @return: 如果操作成功,返回操作的长度(单位是字节);否则返回错误码;如果操作异常,但是并没有检查出什么错误,将返回已操作的长度
14     fn read(&self, len: usize, buf: &mut [u8]) -> Result<usize, SystemError>;
15 
16     /// @brief: 从设备的第offset个字节开始,把buf数组的len个byte,写入到设备中
17     /// @parameter offset: 起始字节偏移量
18     /// @parameter len: 读取字节的数量
19     /// @parameter buf: 目标数组
20     /// @return: 如果操作成功,返回操作的长度(单位是字节);否则返回错误码;如果操作异常,但是并没有检查出什么错误,将返回已操作的长度
21     fn write(&self, len: usize, buf: &[u8]) -> Result<usize, SystemError>;
22 
23     /// @brief: 同步信息,把所有的dirty数据写回设备 - 待实现
24     fn sync(&self) -> Result<(), SystemError>;
25 }
26