2023-04-17 21:51:52 +00:00
|
|
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
/*
|
|
|
|
* ConfigFS Gadget device handling
|
|
|
|
*
|
|
|
|
* Copyright (C) 2018 Kieran Bingham
|
|
|
|
*
|
|
|
|
* Contact: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __CONFIGFS_H__
|
|
|
|
#define __CONFIGFS_H__
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config_endpoint - Endpoint parameters
|
|
|
|
* @bInterval: Transfer interval (interrupt and isochronous only)
|
|
|
|
* @bMaxBurst: Transfer burst size (super-speed only)
|
|
|
|
* @wMaxPacketSize: Maximum packet size (including the multiplier)
|
|
|
|
*/
|
|
|
|
struct uvc_function_config_endpoint
|
|
|
|
{
|
|
|
|
unsigned int bInterval;
|
|
|
|
unsigned int bMaxBurst;
|
|
|
|
unsigned int wMaxPacketSize;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config_interface - Interface parameters
|
|
|
|
* @bInterfaceNumber: Interface number
|
|
|
|
*/
|
|
|
|
struct uvc_function_config_interface
|
|
|
|
{
|
|
|
|
unsigned int bInterfaceNumber;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config_control - Control interface parameters
|
|
|
|
* @intf: Generic interface parameters
|
|
|
|
*/
|
|
|
|
struct uvc_function_config_control
|
|
|
|
{
|
|
|
|
struct uvc_function_config_interface intf;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config_frame - Streaming frame parameters
|
|
|
|
* @index: Frame index in the UVC descriptors
|
|
|
|
* @width: Frame width in pixels
|
|
|
|
* @height: Frame height in pixels
|
|
|
|
* @num_intervals: Number of entries in the intervals array
|
|
|
|
* @intervals: Array of frame intervals
|
|
|
|
*/
|
|
|
|
struct uvc_function_config_frame
|
|
|
|
{
|
|
|
|
unsigned int index;
|
|
|
|
unsigned int width;
|
|
|
|
unsigned int height;
|
|
|
|
unsigned int num_intervals;
|
|
|
|
unsigned int *intervals;
|
2023-05-08 22:50:41 +00:00
|
|
|
unsigned int maxvideofbsize;
|
2023-04-17 21:51:52 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config_format - Streaming format parameters
|
|
|
|
* @index: Format index in the UVC descriptors
|
|
|
|
* @guid: Format GUID
|
|
|
|
* @fcc: V4L2 pixel format
|
|
|
|
* @num_frames: Number of entries in the frames array
|
|
|
|
* @frames: Array of frame descriptors
|
|
|
|
*/
|
|
|
|
struct uvc_function_config_format
|
|
|
|
{
|
|
|
|
unsigned int index;
|
|
|
|
uint8_t guid[16];
|
|
|
|
unsigned int fcc;
|
|
|
|
unsigned int num_frames;
|
|
|
|
struct uvc_function_config_frame *frames;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config_streaming - Streaming interface parameters
|
|
|
|
* @intf: Generic interface parameters
|
|
|
|
* @ep: Endpoint parameters
|
|
|
|
* @num_formats: Number of entries in the formats array
|
|
|
|
* @formats: Array of format descriptors
|
|
|
|
*/
|
|
|
|
struct uvc_function_config_streaming
|
|
|
|
{
|
|
|
|
struct uvc_function_config_interface intf;
|
|
|
|
struct uvc_function_config_endpoint ep;
|
|
|
|
|
|
|
|
unsigned int num_formats;
|
|
|
|
struct uvc_function_config_format *formats;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct uvc_function_config - UVC function configuration parameters
|
|
|
|
* @video: Full path to the video device node
|
|
|
|
* @udc: UDC name
|
|
|
|
* @control: Control interface configuration
|
|
|
|
* @streaming: Streaming interface configuration
|
|
|
|
*/
|
|
|
|
struct uvc_function_config
|
|
|
|
{
|
|
|
|
char *video;
|
|
|
|
char *udc;
|
|
|
|
|
|
|
|
struct uvc_function_config_control control;
|
|
|
|
struct uvc_function_config_streaming streaming;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct uvc_function_config *configfs_parse_uvc_function (const char *function);
|
|
|
|
void configfs_free_uvc_function (struct uvc_function_config *fc);
|
|
|
|
|
2023-05-08 22:50:41 +00:00
|
|
|
struct uvc_function_config *configfs_parse_uvc_videodev (int fd,
|
|
|
|
const char *video);
|
|
|
|
|
2023-04-17 21:51:52 +00:00
|
|
|
#endif
|