usb-skeleton.c 之 11---skel_read

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值