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