您的位置:首页 > 其它

libudev库接口通过匹配vid/pid实现多个摄像头设备节点的管理

2019-02-14 09:58 253 查看

static T_Device p_device = { "067b", "2305", "camera", "Chicony"};
    struct udev *udev = NULL;
    struct udev_enumerate *udev_enumerate = NULL;
    struct udev_list_entry *list_entry = NULL;
    int count = 0;
    
    udev = udev_new(); 
    if (udev == NULL) 
        return -1;
    
    udev_enumerate = udev_enumerate_new(udev);  
    if(udev_enumerate == NULL)
        return -1;
  
    udev_enumerate_add_match_subsystem(udev_enumerate, "video4linux"); // path: /sys/class
//    udev_enumerate_add_match_sysattr(udev_enumerate,"idProduct","2305"); //"manufacturer","SIUPO"

    udev_enumerate_scan_devices(udev_enumerate);
    udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate)) 
    {
        struct udev_device *device;
        device = udev_device_new_from_syspath(udev_enumerate_get_udev(udev_enumerate), 
                udev_list_entry_get_name(list_entry)); 
        if(device != NULL)
        {       

            if(udev_device_get_property_value(device, "ID_VENDOR_ID") != NULL && 
                udev_device_get_property_value(device, "ID_MODEL_ID") != NULL &&
                !strcmp(p_device.vid, udev_device_get_property_value(device, "ID_VENDOR_ID")) &&
                !strcmp(p_device.pid, udev_device_get_property_value(device, "ID_MODEL_ID"))) 
              {
                   LOG(sw_MS, "device: '%s' (%s) (/dev/video%s) %s:%s\n",
                udev_device_get_syspath(device),
                udev_device_get_subsystem(device),
                udev_device_get_sysnum(device),
                udev_device_get_property_value(device, "ID_VENDOR_ID"), // 查询设备信息 udevadm info --query=all --name=/dev/video0
                udev_device_get_property_value(device, "ID_MODEL_ID"));
                sprintf(PathName, "/dev/video%s", udev_device_get_sysnum(device));
                count++;  
              }
               udev_device_unref(device);        
        }else
            return -1;
    }
    
    if (count == 0) 
        return -1;
    
    udev_enumerate_unref(udev_enumerate);
    udev_unref(udev);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐