示例#1
0
static int fill_cam_struct(IOUSBDeviceInterface197 **devIf,
						   uvccCam *cam)
{
    IOReturn ior;
    if((ior = (*devIf)->GetLocationID(devIf, &(cam->idLocation))) != kIOReturnSuccess)
    {
		uvcc_err("fill_cam_struct: GetLocationID", ior);
		return -1;
	}
	if((get_dev_desc(devIf, &(cam->devDesc))) != 0)
	{
		if(!logger) perror("uvcc error! fill_cam_struct: Could not retrieve device descriptor");
        else asl_log(logger, NULL, ASL_LEVEL_ERR, "fill_cam_struct: Could not retrieve device descriptor: %s", strerror(errno));
		return -1;
	}
	cam->mID = (struct uvccModelID *)&(cam->devDesc.hwIdVendor);
	cam->devIf = devIf;
	if((cam->ctrlIf = get_ctrl_if(devIf)) == NULL)
	{
		(*(cam->devIf))->Release(cam->devIf);
		CFRelease(cam->regName);
		if(!logger) perror("uvcc error! fill_cam_struct: Could not retrieve control interface");
        else asl_log(logger, NULL, ASL_LEVEL_ERR, "fill_cam_struct: Could not retrieve control interface: %s", strerror(errno));
		return -1;
	}
    if((ior = (*(cam->ctrlIf))->GetInterfaceNumber(cam->ctrlIf, &(cam->ifNo))) != kIOReturnSuccess)
    {
		(*(cam->devIf))->Release(cam->devIf);
		(*(cam->ctrlIf))->Release(cam->ctrlIf);
		uvcc_err("fill_cam_struct: GetInterfaceNumber", ior);
		return -1;
	}
	return 0;
}
示例#2
0
文件: hwstub.cpp 项目: aozima/rockbox
error handle::get_desc(uint16_t desc, void *buf, size_t& buf_sz)
{
    std::unique_lock<std::recursive_mutex> lock(m_mutex);
    /* get a pointer so that it's not destroyed during the runtime of the function,
     * the pointer will be released at the end of the function */
    std::shared_ptr<context> ctx = m_dev->get_context();
    if(!ctx)
        return error::NO_CONTEXT;
    /* ensure valid status */
    error err = status();
    if(err != error::SUCCESS)
        return err;
    return get_dev_desc(desc, buf, buf_sz);
}
示例#3
0
error handle::get_dev_desc(uint16_t desc, void *buf, size_t& buf_sz)
{
    auto p = m_hwdev.lock();
    return p ? p->get_dev_desc(desc, buf, buf_sz) : error::DISCONNECTED;
}