static ssize_t skel_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
{
struct usb_satkel *dev;
int retval;
int bytes_read;
dev = (struct usb_skel *)file->prive_data; **
mutex_lock(&dev->io_mutex); ** 互斥锁
if (!dev->interface) { /* disconnect() was called */
retval = -ENODEV; **接口打开失败 设备 断开
goto exit;
}
/* do a blocking bulk read to get data from the device */ **做个块批量 读 从设备 获得 数据
retval = usb_bulk_msg(dev->udev, ** 从设备进行一次 阻塞的 批量读
usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
dev->bulk_in_buffer,
min(dev->bulk_in_size, count),
&bytes_read, 10000);
/* if the read was successful, copy the data to userspace */ **假如读成功 复制数据到 用户空间
if (!retval) {
if (copy_to_user(buffer, dev->bulk_in_buffer, bytes_read))
retval = -EFAULT;
else
retval = bytes_read;
}
exit:
mutex_unlock(&dev->io_mutex);
return retval;
}
usb-skeleton.c 之 11---skel_read
最新推荐文章于 2023-08-28 16:09:11 发布