usb-skeleton.c 之 11---skel_read

来源:互联网 发布:js重定向url带参数 编辑:程序博客网 时间:2024/05/16 14:08

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

原创粉丝点击