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