RE: UVCIOC_CTRL_MAP not work

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ricardo,

So I modify the `uvc_xu_control_mapping` struct as follows:
(full code reference attachment `uvc_xu_v4l_mapping_demo.c`)
struct uvc_xu_control_mapping mapping = {
        .id = 0x01,
        .name = "My Extension Unit",
        .entity = {0x10, 0xbc, 0x46, 0xba, 0x28, 0x5a, 0x4d, 0x7b, 0x97, 0x0e, 0xfd, 0x91, 0x46, 0xa5, 0x2f, 0x2d},
        .selector = 0x01,
        .size = 32,
        .offset = 0,
        .v4l2_type = V4L2_CTRL_TYPE_INTEGER,
        .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED,
        .menu_info = NULL,
        .menu_count = 0,
        .reserved = {0},
};

And I got difference error message `UVCIOC_CTRL_MAP: No such file or directory`
Please check attachment `strace_20230428_2.log` for strace output


Best Regards,
Hardy


-----Original Message-----
From: Ricardo Ribalda <ribalda@xxxxxxxxxxxx> 
Sent: Friday, April 28, 2023 4:26 PM
To: hardycheng(鄭易昕) <hardycheng@xxxxxxx>
Cc: linux-media@xxxxxxxxxxxxxxx
Subject: Re: UVCIOC_CTRL_MAP not work

Hi Hardy

Seems like you can only add mappings for  V4L2_CTRL_TYPE_INTEGER, V4L2_CTRL_TYPE_BOOLEAN:V4L2_CTRL_TYPE_BUTTON  and V4L2_CTRL_TYPE_MENU.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/media/usb/uvc/uvc_v4l2.c#n130

You are trying to add a map for a V4L2_CTRL_TYPE_STRING

Regards

On Fri, 28 Apr 2023 at 10:20, hardycheng(鄭易昕) <hardycheng@xxxxxxx> wrote:
>
> Hi Ricardo,
>
> Thanks for reply,
>
> I replace `_IOWR('u', 0x20, struct uvc_xu_control_mapping)` to ` 
> UVCIOC_CTRL_MAP` and got the same error, Please check attachment for 
> command output `strace -f ./uvc_xu_v4l_mapping_demo`
>
> Best Regards,
> Hardy
>
> -----Original Message-----
> From: Ricardo Ribalda <ribalda@xxxxxxxxxxxx>
> Sent: Friday, April 28, 2023 4:04 PM
> To: hardycheng(鄭易昕) <hardycheng@xxxxxxx>
> Cc: linux-media@xxxxxxxxxxxxxxx
> Subject: Re: UVCIOC_CTRL_MAP not work
>
> Hi Hardy
>
> Why are you using:
>
> result = ioctl(fd, _IOWR('u', 0x20, struct uvc_xu_control_mapping), 
> &mapping);
>
> instead of
>
> result = ioctl(fd, UVCIOC_CTRL_MAP, &mapping);
>
> Can you return the output of:
>
> strace -f  uvc_xu_v4l_mapping_demo
>
> Thanks!
>
> On Fri, 28 Apr 2023 at 09:15, hardycheng(鄭易昕) <hardycheng@xxxxxxx> wrote:
> >
> > Hi,
> >
> > # Environment:
> >
> > OS = Ubuntu 22.04 LTS (Linux version 5.19.0-41-generic) Program 
> > Language = C Language
> >
> > # Overview:
> >
> > We plug in our UVC camera to PC, and try to use `UVCIOC_CTRL_MAP` 
> > function on PC to create the v4l2 control mapping, but we got error
> > `UVCIOC_CTRL_MAP: Inappropriate ioctl for device` Development with 
> > `C language` in `Ubuntu 22.04 LTS`
> >
> > # Description:
> >
> > We have a custom UVC camera and we can modify the extension unit(XU) 
> > by ourself. (USB descriptions reference attachments 
> > `uvc_xu_descriptor.PNG` & `usb_decriptions.txt`)
> >
> > We make sure that UVCIOC_CTRL_QUERY is work to control our XU item 
> > (demo code in attachment `uvc_xu_ioctl_demo.c`)
> >
> > but UVCIOC_CTRL_MAP function fail with error message `UVCIOC_CTRL_MAP:
> > Inappropriate ioctl for device` (demo code in attachment
> > `uvc_xu_v4l_mapping_demo.c`)
> >
> > # Problems:
> >
> > 1.      Is UVCIOC_CTRL_MAP function using in the PC host?
> > 2.      Can you found any syntax problem in our demo code `uvc_xu_v4l_mapping_demo.c`?
> > 3.      Is there any sample code about struct `uvc_xu_control_mapping` using?
> >
> > Looking forward to your reply,
> > Best Regards,
> > Hardy#2374
> >
> > *****CONFIDENTIAL INFORMATION*****
> >
> > This email is intended only for the use of the person or entity to 
> > whom it is addressed and contains information that may be subject to 
> > and/or may be restricted from disclosure by contract or applicable 
> > law. If you are not the intended recipient of this email, be advised 
> > that any disclosure, copy, distribution or use of the contents of this message is strictly prohibited.
> > If you are not the intended recipient of this email, please notify 
> > the sender that you have received this in error by replying to this 
> > message. Then, please delete it from your system. Our Privacy Policy 
> > is available here https://www.msi.com/page/privacy-policy. Thank you.
>
>
>
> --
> Ricardo Ribalda
>
>
> *****CONFIDENTIAL INFORMATION*****
>
> This email is intended only for the use of the person or entity to 
> whom it is addressed and contains information that may be subject to 
> and/or may be restricted from disclosure by contract or applicable 
> law. If you are not the intended recipient of this email, be advised 
> that any disclosure, copy, distribution or use of the contents of this message is strictly prohibited.
> If you are not the intended recipient of this email, please notify the 
> sender that you have received this in error by replying to this 
> message. Then, please delete it from your system. Our Privacy Policy 
> is available here https://www.msi.com/page/privacy-policy. Thank you.



--
Ricardo Ribalda


*****CONFIDENTIAL INFORMATION*****

This email is intended only for the use of the person or entity to whom it is
addressed and contains information that may be subject to and/or may be
restricted from disclosure by contract or applicable law. If you are not the 
intended recipient of this email, be advised that any disclosure, copy, 
distribution or use of the contents of this message is strictly prohibited. 
If you are not the intended recipient of this email, please notify the sender 
that you have received this in error by replying to this message. Then, 
please delete it from your system. Our Privacy Policy is available here 
https://www.msi.com/page/privacy-policy. Thank you.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/usb/video.h>
#include <linux/uvcvideo.h>
#include <linux/videodev2.h>

int main(){
    int result;
    int fd = open("/dev/video0", O_RDWR);
    if(fd < 0) {
        perror("File Open Fail");
        goto close;
    }

    struct uvc_xu_control_mapping mapping = {
        .id = 0x01,
        .name = "My Extension Unit",
        .entity = {0x10, 0xbc, 0x46, 0xba, 0x28, 0x5a, 0x4d, 0x7b, 0x97, 0x0e, 0xfd, 0x91, 0x46, 0xa5, 0x2f, 0x2d},
        .selector = 0x01,
        .size = 32,
        .offset = 0,
        .v4l2_type = V4L2_CTRL_TYPE_INTEGER,
        .data_type = UVC_CTRL_DATA_TYPE_UNSIGNED,
        .menu_info = NULL,
        .menu_count = 0,
        .reserved = {0},
    };

    result = ioctl(fd, UVCIOC_CTRL_MAP, &mapping);
    if (result != 0) {
        perror("UVCIOC_CTRL_MAP");
        goto close;
    }

    close:
    close(fd);
    return 0;
}

Attachment: strace_20230428_2.log
Description: strace_20230428_2.log


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux