UVC 设备有哪些描述符

2024-04-26 03:48
文章标签 设备 描述符 uvc

本文主要是介绍UVC 设备有哪些描述符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一般的USB设备有设备描述符、配置描述符、接口描述符、端点描述符四种描述符。特定的USB设备还有它自己独特的描述符

典型的UVC设备的描述符结构:

以Melis摄像头方案为例,它的描述符在代码中的组织如下图所示:

UVC设备中的概念,以及概念之间的关联:

 插入UVC设备,通过/dev/media0节点枚举UVC设备实体:

#include <string.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h> 
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/videodev2.h>
#include <linux/media.h>int main(void)
{int media_fd;int ret;struct media_device_info media_info;media_fd = open("/dev/media0", O_RDWR);if(media_fd < 0){printf("%s line %d, open media device failure.fd = %d.\n", __func__, __LINE__, media_fd);return -1;}ret = ioctl(media_fd, MEDIA_IOC_DEVICE_INFO, &media_info);if(ret < 0){printf("%s line %d, get media device info failure.\n", __func__, __LINE__);return -1;}printf("=======================================================================\n");printf("Media Device info:\n");printf("    driver:%s.\n", media_info.driver);printf("    model :%s.\n", media_info.model);printf("    serial:%s.\n", media_info.serial);printf("    businf:%s.\n", media_info.bus_info);printf("    media_version 0x%x, hw_revision 0x%x, driver_version 0x%x.\n", media_info.media_version, media_info.hw_revision,media_info.driver_version);printf("=======================================================================\n");unsigned int id;struct media_entity_desc media_desc;int path = 0;for(id = 0; ; id = media_desc.id){media_desc.id = id | MEDIA_ENT_ID_FLAG_NEXT;ret = ioctl(media_fd, MEDIA_IOC_ENUM_ENTITIES, &media_desc);if(ret < 0){printf("%s line %d, return failure.\n", __func__, __LINE__);return -1;}printf("media_entity_desc entity %d:id[0x%x],name[%s],type[0x%x],flags[%d],pads[%d],links[%d],major/minor[%d/%d]\n", path ++, media_desc.id, media_desc.name, media_desc.type,\media_desc.flags, media_desc.pads,media_desc.links,media_desc.v4l.major,media_desc.v4l.minor);int type = media_desc.type & MEDIA_ENT_TYPE_MASK;if(type != MEDIA_ENT_T_DEVNODE && MEDIA_ENT_T_V4L2_SUBDEV){printf("%s line %d, bypass this device.\n", __func__, __LINE__);continue;}char sysname[32];char target[1024];memset(sysname, 0x00, 32);memset(target, 0x00, 1024);sprintf(sysname, "/sys/dev/char/%u:%u", media_desc.v4l.major, media_desc.v4l.minor);ret = readlink(sysname, target, sizeof(target));if(ret < 0){printf("%s line %d, readlink failure.\n", __func__, __LINE__);return -1;}printf("sysname:%s, target %s.\n", sysname, target);}return 0;
}

运行结果:

czl@czl-RedmiBook-14:~/Workspace/camera$ gcc main.c 
czl@czl-RedmiBook-14:~/Workspace/camera$ sudo ./a.out 
=======================================================================
Media Device info:driver:uvcvideo.model :Integrated Camera: Integrated C.serial:.businf:usb-0000:00:14.0-2.media_version 0x50477, hw_revision 0x1012, driver_version 0x50477.
=======================================================================
media_entity_desc entity 0:id[0x1],name[Integrated Camera: Integrated C],type[0x10001],flags[1],pads[1],links[0],major/minor[81/0]
sysname:/sys/dev/char/81:0, target ../../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/video4linux/video0.
media_entity_desc entity 1:id[0x4],name[Integrated Camera: Integrated C],type[0x10001],flags[0],pads[0],links[0],major/minor[81/1]
sysname:/sys/dev/char/81:1, target ../../devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/video4linux/video1.
media_entity_desc entity 2:id[0x8],name[Extension 4],type[0x20000],flags[0],pads[2],links[1],major/minor[0/0]
main line 65, bypass this device.
media_entity_desc entity 3:id[0xb],name[Extension 3],type[0x20000],flags[0],pads[2],links[1],major/minor[0/0]
main line 65, bypass this device.
media_entity_desc entity 4:id[0xe],name[Processing 2],type[0x20000],flags[0],pads[2],links[1],major/minor[0/0]
main line 65, bypass this device.
media_entity_desc entity 5:id[0x11],name[Camera 1],type[0x20001],flags[0],pads[1],links[1],major/minor[0/0]
main line 65, bypass this device.
main line 55, return failure.
czl@czl-RedmiBook-14:~/Workspace/camera$

结束!

这篇关于UVC 设备有哪些描述符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936632

相关文章

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

OpenCV结构分析与形状描述符(11)椭圆拟合函数fitEllipse()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 围绕一组2D点拟合一个椭圆。 该函数计算出一个椭圆,该椭圆在最小二乘意义上最好地拟合一组2D点。它返回一个内切椭圆的旋转矩形。使用了由[90]描述的第一个算法。开发者应该注意,由于数据点靠近包含的 Mat 元素的边界,返回的椭圆/旋转矩形数据

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

全英文地图/天地图和谷歌瓦片地图杂交/设备分布和轨迹回放/无需翻墙离线使用

一、前言说明 随着风云局势的剧烈变化,对我们搞软件开发的人员来说,影响也是越发明显,比如之前对美对欧的软件居多,现在慢慢的变成了对大鹅和中东以及非洲的居多,这两年明显问有没有俄语或者阿拉伯语的输入法的增多,这要是放在2019年以前,一年也遇不到一个人问这种需求场景的。 地图应用这块也是,之前的应用主要在国内,现在慢慢的多了一些外国的应用场景,这就遇到一个大问题,我们平时主要开发用的都是国内的地

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

海鲜加工污水处理设备处理效果高

诸城市鑫淼环保小编带大家了解一下海鲜加工污水处理设备处理效果高   海鲜加工污水处理设备通常采用物理、化学和生物处理相结合的方法,对废水中的污染物进行高xiao去除。设备设计紧凑,占地面积小,操作简便,适用于不同规模的海鲜加工厂。   设备特点   高xiao性:采用先进的处理工艺和技术,确保废水处理效果稳定可靠。   占地面积小:设备设计紧凑,占地面积小,适合在有限的空间内安装。

集运系统需要与哪些硬件设备集成?

随着电商和跨境贸易的不断发展,集运服务越来越受到海外用户的青睐。集运系统作为一种高效的跨境物流管理工具,可以协调各个环节之间的物流流程,提高物流效率和管理水平,被越来越多的集运企业采用。而集运系统作为集运服务的重要组成部分,也需要配套相应的硬件设备才能更好地支持跨境集运业务。下面就来介绍一下集运系统需要哪些硬件设备支持呢? 1.PDA:是一种便携式电子设备,可以轻松地进行数据采集和处理,具有移

3.门锁_STM32_矩阵按键设备实现

概述 需求来源: 门锁肯定是要输入密码,这个门锁提供了两个输入密码的方式:一个是蓝牙输入,一个是按键输入。对于按键输入,采用矩阵按键来实现。矩阵按键是为了模拟触摸屏的按键输入,后续如果项目结束前还有时间就更新为触摸屏按键输入。 矩阵按键开发整体思路: 由于矩阵按键就是GPIO的控制,所以不进行芯片和设备的分层编写,控制写在同一个文件中,最终向应用层提供一个接口。 代码层级关系:

Anroid BLE蓝牙(手机分别作为中心设备和外围设备)

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。  BLE蓝牙模块主要应用领域     1、移动扩展设备     2、汽车电子设备     3、健康医疗用品:心跳带、血压计等     4、定位应用:室内定位、井下定位等     5、近距离数据采集:无线

OpenCV结构分析与形状描述符(10)检测并提取轮廓函数findContours()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 在二值图像中查找轮廓。 该函数使用算法 253从二值图像中检索轮廓。轮廓是有用的工具,可用于形状分析和对象检测与识别。参见 OpenCV 示例目录中的 squares.cpp。 findContours 是 OpenCV 库中的一个重要函数