Re: [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-09-03 Thread Pawel Osciak
On Thu, Sep 4, 2014 at 4:40 AM, Vincent Palatin  wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
>
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
>
> Signed-off-by: Vincent Palatin 
>
> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc

Sorry, forgot to mention this previously, please remove gerrit ids
from the patches.
Thanks,
P.

> ---
> Changes from v1/v2:
> - rebased
>
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 
> +---
>  1 file changed, 55 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c 
> b/drivers/media/usb/uvc/uvc_ctrl.c
> index 0eb82106..d703cb0 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
> .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
> .index  = 12,
> .size   = 4,
> -   .flags  = UVC_CTRL_FLAG_SET_CUR | 
> UVC_CTRL_FLAG_GET_MIN
> -   | UVC_CTRL_FLAG_GET_MAX | 
> UVC_CTRL_FLAG_GET_RES
> -   | UVC_CTRL_FLAG_GET_DEF
> +   .flags  = UVC_CTRL_FLAG_SET_CUR
> +   | UVC_CTRL_FLAG_GET_RANGE
> | UVC_CTRL_FLAG_AUTO_UPDATE,
> },
> {
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping 
> *mapping,
> data[2] = min((int)abs(value), 0xff);
>  }
>
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +   __u8 query, const __u8 *data)
> +{
> +   int first = mapping->offset / 8;
> +   __s8 rel = (__s8)data[first];
> +
> +   switch (query) {
> +   case UVC_GET_CUR:
> +   return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +: -data[first+1]);
> +   case UVC_GET_MIN:
> +   return -data[first+1];
> +   case UVC_GET_MAX:
> +   case UVC_GET_RES:
> +   case UVC_GET_DEF:
> +   default:
> +   return data[first+1];
> +   }
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +   __s32 value, __u8 *data)
> +{
> +   int first = mapping->offset / 8;
> +
> +   data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +   data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> {
> .id = V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> },
> {
> +   .id = V4L2_CID_PAN_SPEED,
> +   .name   = "Pan (Speed)",
> +   .entity = UVC_GUID_UVC_CAMERA,
> +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +   .size   = 16,
> +   .offset = 0,
> +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
> +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> +   .get= uvc_ctrl_get_rel_speed,
> +   .set= uvc_ctrl_set_rel_speed,
> +   },
> +   {
> +   .id = V4L2_CID_TILT_SPEED,
> +   .name   = "Tilt (Speed)",
> +   .entity = UVC_GUID_UVC_CAMERA,
> +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +   .size   = 16,
> +   .offset = 16,
> +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
> +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> +   .get= uvc_ctrl_get_rel_speed,
> +   .set= uvc_ctrl_set_rel_speed,
> +   },
> +   {
> .id = V4L2_CID_PRIVACY,
> .name   = "Privacy",
> .entity = UVC_GUID_UVC_CAMERA,
> --
> 2.1.0.rc2.206.gedb03e5
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-09-03 Thread Pawel Osciak
On Thu, Sep 4, 2014 at 4:40 AM, Vincent Palatin vpala...@chromium.org wrote:
 Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
 CT_PANTILT_RELATIVE_CONTROL terminal control request.

 Tested by plugging a Logitech ConferenceCam C3000e USB camera
 and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
 Verified that it can pan and tilt at the same time in both directions.

 Signed-off-by: Vincent Palatin vpala...@chromium.org

 Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc

Sorry, forgot to mention this previously, please remove gerrit ids
from the patches.
Thanks,
P.

 ---
 Changes from v1/v2:
 - rebased

  drivers/media/usb/uvc/uvc_ctrl.c | 58 
 +---
  1 file changed, 55 insertions(+), 3 deletions(-)

 diff --git a/drivers/media/usb/uvc/uvc_ctrl.c 
 b/drivers/media/usb/uvc/uvc_ctrl.c
 index 0eb82106..d703cb0 100644
 --- a/drivers/media/usb/uvc/uvc_ctrl.c
 +++ b/drivers/media/usb/uvc/uvc_ctrl.c
 @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
 .index  = 12,
 .size   = 4,
 -   .flags  = UVC_CTRL_FLAG_SET_CUR | 
 UVC_CTRL_FLAG_GET_MIN
 -   | UVC_CTRL_FLAG_GET_MAX | 
 UVC_CTRL_FLAG_GET_RES
 -   | UVC_CTRL_FLAG_GET_DEF
 +   .flags  = UVC_CTRL_FLAG_SET_CUR
 +   | UVC_CTRL_FLAG_GET_RANGE
 | UVC_CTRL_FLAG_AUTO_UPDATE,
 },
 {
 @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping 
 *mapping,
 data[2] = min((int)abs(value), 0xff);
  }

 +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
 +   __u8 query, const __u8 *data)
 +{
 +   int first = mapping-offset / 8;
 +   __s8 rel = (__s8)data[first];
 +
 +   switch (query) {
 +   case UVC_GET_CUR:
 +   return (rel == 0) ? 0 : (rel  0 ? data[first+1]
 +: -data[first+1]);
 +   case UVC_GET_MIN:
 +   return -data[first+1];
 +   case UVC_GET_MAX:
 +   case UVC_GET_RES:
 +   case UVC_GET_DEF:
 +   default:
 +   return data[first+1];
 +   }
 +}
 +
 +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
 +   __s32 value, __u8 *data)
 +{
 +   int first = mapping-offset / 8;
 +
 +   data[first] = value == 0 ? 0 : (value  0) ? 1 : 0xff;
 +   data[first+1] = min_t(int, abs(value), 0xff);
 +}
 +
  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 {
 .id = V4L2_CID_BRIGHTNESS,
 @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
 },
 {
 +   .id = V4L2_CID_PAN_SPEED,
 +   .name   = Pan (Speed),
 +   .entity = UVC_GUID_UVC_CAMERA,
 +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
 +   .size   = 16,
 +   .offset = 0,
 +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
 +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
 +   .get= uvc_ctrl_get_rel_speed,
 +   .set= uvc_ctrl_set_rel_speed,
 +   },
 +   {
 +   .id = V4L2_CID_TILT_SPEED,
 +   .name   = Tilt (Speed),
 +   .entity = UVC_GUID_UVC_CAMERA,
 +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
 +   .size   = 16,
 +   .offset = 16,
 +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
 +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
 +   .get= uvc_ctrl_get_rel_speed,
 +   .set= uvc_ctrl_set_rel_speed,
 +   },
 +   {
 .id = V4L2_CID_PRIVACY,
 .name   = Privacy,
 .entity = UVC_GUID_UVC_CAMERA,
 --
 2.1.0.rc2.206.gedb03e5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-09-02 Thread Pawel Osciak
On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin  wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
>
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
>
> Signed-off-by: Vincent Palatin 

Reviewed-by: Pawel Osciak 

> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
> ---
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 
> +---
>  1 file changed, 55 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c 
> b/drivers/media/usb/uvc/uvc_ctrl.c
> index 0eb82106..d703cb0 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
> .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
> .index  = 12,
> .size   = 4,
> -   .flags  = UVC_CTRL_FLAG_SET_CUR | 
> UVC_CTRL_FLAG_GET_MIN
> -   | UVC_CTRL_FLAG_GET_MAX | 
> UVC_CTRL_FLAG_GET_RES
> -   | UVC_CTRL_FLAG_GET_DEF
> +   .flags  = UVC_CTRL_FLAG_SET_CUR
> +   | UVC_CTRL_FLAG_GET_RANGE
> | UVC_CTRL_FLAG_AUTO_UPDATE,
> },
> {
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping 
> *mapping,
> data[2] = min((int)abs(value), 0xff);
>  }
>
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +   __u8 query, const __u8 *data)
> +{
> +   int first = mapping->offset / 8;
> +   __s8 rel = (__s8)data[first];
> +
> +   switch (query) {
> +   case UVC_GET_CUR:
> +   return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +: -data[first+1]);
> +   case UVC_GET_MIN:
> +   return -data[first+1];
> +   case UVC_GET_MAX:
> +   case UVC_GET_RES:
> +   case UVC_GET_DEF:
> +   default:
> +   return data[first+1];
> +   }
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +   __s32 value, __u8 *data)
> +{
> +   int first = mapping->offset / 8;
> +
> +   data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +   data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> {
> .id = V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> },
> {
> +   .id = V4L2_CID_PAN_SPEED,
> +   .name   = "Pan (Speed)",
> +   .entity = UVC_GUID_UVC_CAMERA,
> +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +   .size   = 16,
> +   .offset = 0,
> +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
> +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> +   .get= uvc_ctrl_get_rel_speed,
> +   .set= uvc_ctrl_set_rel_speed,
> +   },
> +   {
> +   .id = V4L2_CID_TILT_SPEED,
> +   .name   = "Tilt (Speed)",
> +   .entity = UVC_GUID_UVC_CAMERA,
> +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +   .size   = 16,
> +   .offset = 16,
> +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
> +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> +   .get= uvc_ctrl_get_rel_speed,
> +   .set= uvc_ctrl_set_rel_speed,
> +   },
> +   {
> .id = V4L2_CID_PRIVACY,
> .name   = "Privacy",
> .entity = UVC_GUID_UVC_CAMERA,
> --
> 2.0.0.526.g5318336
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-09-02 Thread Pawel Osciak
On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin  wrote:
>
> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
> camera by setting its rotation speed around its axis.
>
> Signed-off-by: Vincent Palatin 

Reviewed-by: Pawel Osciak 

>
> ---
> Changes from v1:
> - update the documentation wording according to Pawel suggestion.
>
>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++
>  Documentation/DocBook/media/v4l/controls.xml | 21 +
>  drivers/media/v4l2-core/v4l2-ctrls.c |  2 ++
>  include/uapi/linux/v4l2-controls.h   |  2 ++
>  4 files changed, 35 insertions(+)
>
> diff --git a/Documentation/DocBook/media/v4l/compat.xml 
> b/Documentation/DocBook/media/v4l/compat.xml
> index eee6f0f..21910e9 100644
> --- a/Documentation/DocBook/media/v4l/compat.xml
> +++ b/Documentation/DocBook/media/v4l/compat.xml
> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
>
>  
>
> +
> +  V4L2 in Linux 3.17

This will need a bump.

>
> +  
> +   
> + Added V4L2_CID_PAN_SPEED and
> + V4L2_CID_TILT_SPEED camera controls.
> +   
> +  
> +
> +
>  
>Relation of V4L2 to other Linux multimedia APIs
>
> diff --git a/Documentation/DocBook/media/v4l/controls.xml 
> b/Documentation/DocBook/media/v4l/controls.xml
> index 47198ee..be88e64 100644
> --- a/Documentation/DocBook/media/v4l/controls.xml
> +++ b/Documentation/DocBook/media/v4l/controls.xml
> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.
>   
>   
>
> + 
> +spanname="id">V4L2_CID_PAN_SPEED
> +   integer
> + This control turns the
> +camera horizontally at the specific speed. The unit is undefined. A
> +positive value moves the camera to the right (clockwise when viewed
> +from above), a negative value to the left. A value of zero stops the motion
> +if one is in progress and has no effect otherwise.
> + 
> + 
> +
> + 
> +spanname="id">V4L2_CID_TILT_SPEED
> +   integer
> + This control turns the
> +camera vertically at the specified speed. The unit is undefined. A
> +positive value moves the camera up, a negative value down. A value of zero
> +stops the motion if one is in progress and has no effect otherwise.
> + 
> + 
> +
> 
>
>  
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c 
> b/drivers/media/v4l2-core/v4l2-ctrls.c
> index 55c6832..57ddaf4 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
> case V4L2_CID_AUTO_FOCUS_STOP:  return "Auto Focus, Stop";
> case V4L2_CID_AUTO_FOCUS_STATUS:return "Auto Focus, Status";
> case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range";
> +   case V4L2_CID_PAN_SPEED:return "Pan, Speed";
> +   case V4L2_CID_TILT_SPEED:   return "Tilt, Speed";
>
> /* FM Radio Modulator control */
> /* Keep the order of the 'case's the same as in videodev2.h! */
> diff --git a/include/uapi/linux/v4l2-controls.h 
> b/include/uapi/linux/v4l2-controls.h
> index 2ac5597..5576044 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
> V4L2_AUTO_FOCUS_RANGE_INFINITY  = 3,
>  };
>
> +#define V4L2_CID_PAN_SPEED 
> (V4L2_CID_CAMERA_CLASS_BASE+32)
> +#define V4L2_CID_TILT_SPEED
> (V4L2_CID_CAMERA_CLASS_BASE+33)
>
>  /* FM Modulator class control IDs */
>
> --
> 2.1.0.rc2.206.gedb03e5
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-09-02 Thread Pawel Osciak
On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin vpala...@chromium.org wrote:

 The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
 camera by setting its rotation speed around its axis.

 Signed-off-by: Vincent Palatin vpala...@chromium.org

Reviewed-by: Pawel Osciak posc...@chromium.org


 ---
 Changes from v1:
 - update the documentation wording according to Pawel suggestion.

  Documentation/DocBook/media/v4l/compat.xml   | 10 ++
  Documentation/DocBook/media/v4l/controls.xml | 21 +
  drivers/media/v4l2-core/v4l2-ctrls.c |  2 ++
  include/uapi/linux/v4l2-controls.h   |  2 ++
  4 files changed, 35 insertions(+)

 diff --git a/Documentation/DocBook/media/v4l/compat.xml 
 b/Documentation/DocBook/media/v4l/compat.xml
 index eee6f0f..21910e9 100644
 --- a/Documentation/DocBook/media/v4l/compat.xml
 +++ b/Documentation/DocBook/media/v4l/compat.xml
 @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
/orderedlist
  /section

 +section
 +  titleV4L2 in Linux 3.17/title

This will need a bump.


 +  orderedlist
 +   listitem
 + paraAdded constantV4L2_CID_PAN_SPEED/constant and
 + constantV4L2_CID_TILT_SPEED/constant camera controls./para
 +   /listitem
 +  /orderedlist
 +/section
 +
  section id=other
titleRelation of V4L2 to other Linux multimedia APIs/title

 diff --git a/Documentation/DocBook/media/v4l/controls.xml 
 b/Documentation/DocBook/media/v4l/controls.xml
 index 47198ee..be88e64 100644
 --- a/Documentation/DocBook/media/v4l/controls.xml
 +++ b/Documentation/DocBook/media/v4l/controls.xml
 @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls./entry
   /row
   rowentry/entry/row

 + row
 +   entry 
 spanname=idconstantV4L2_CID_PAN_SPEED/constantnbsp;/entry
 +   entryinteger/entry
 + /rowrowentry spanname=descrThis control turns the
 +camera horizontally at the specific speed. The unit is undefined. A
 +positive value moves the camera to the right (clockwise when viewed
 +from above), a negative value to the left. A value of zero stops the motion
 +if one is in progress and has no effect otherwise./entry
 + /row
 + rowentry/entry/row
 +
 + row
 +   entry 
 spanname=idconstantV4L2_CID_TILT_SPEED/constantnbsp;/entry
 +   entryinteger/entry
 + /rowrowentry spanname=descrThis control turns the
 +camera vertically at the specified speed. The unit is undefined. A
 +positive value moves the camera up, a negative value down. A value of zero
 +stops the motion if one is in progress and has no effect otherwise./entry
 + /row
 + rowentry/entry/row
 +
 /tbody
/tgroup
  /table
 diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c 
 b/drivers/media/v4l2-core/v4l2-ctrls.c
 index 55c6832..57ddaf4 100644
 --- a/drivers/media/v4l2-core/v4l2-ctrls.c
 +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
 @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 case V4L2_CID_AUTO_FOCUS_STOP:  return Auto Focus, Stop;
 case V4L2_CID_AUTO_FOCUS_STATUS:return Auto Focus, Status;
 case V4L2_CID_AUTO_FOCUS_RANGE: return Auto Focus, Range;
 +   case V4L2_CID_PAN_SPEED:return Pan, Speed;
 +   case V4L2_CID_TILT_SPEED:   return Tilt, Speed;

 /* FM Radio Modulator control */
 /* Keep the order of the 'case's the same as in videodev2.h! */
 diff --git a/include/uapi/linux/v4l2-controls.h 
 b/include/uapi/linux/v4l2-controls.h
 index 2ac5597..5576044 100644
 --- a/include/uapi/linux/v4l2-controls.h
 +++ b/include/uapi/linux/v4l2-controls.h
 @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
 V4L2_AUTO_FOCUS_RANGE_INFINITY  = 3,
  };

 +#define V4L2_CID_PAN_SPEED 
 (V4L2_CID_CAMERA_CLASS_BASE+32)
 +#define V4L2_CID_TILT_SPEED
 (V4L2_CID_CAMERA_CLASS_BASE+33)

  /* FM Modulator class control IDs */

 --
 2.1.0.rc2.206.gedb03e5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-09-02 Thread Pawel Osciak
On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin vpala...@chromium.org wrote:
 Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
 CT_PANTILT_RELATIVE_CONTROL terminal control request.

 Tested by plugging a Logitech ConferenceCam C3000e USB camera
 and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
 Verified that it can pan and tilt at the same time in both directions.

 Signed-off-by: Vincent Palatin vpala...@chromium.org

Reviewed-by: Pawel Osciak posc...@chromium.org

 Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
 ---
  drivers/media/usb/uvc/uvc_ctrl.c | 58 
 +---
  1 file changed, 55 insertions(+), 3 deletions(-)

 diff --git a/drivers/media/usb/uvc/uvc_ctrl.c 
 b/drivers/media/usb/uvc/uvc_ctrl.c
 index 0eb82106..d703cb0 100644
 --- a/drivers/media/usb/uvc/uvc_ctrl.c
 +++ b/drivers/media/usb/uvc/uvc_ctrl.c
 @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
 .index  = 12,
 .size   = 4,
 -   .flags  = UVC_CTRL_FLAG_SET_CUR | 
 UVC_CTRL_FLAG_GET_MIN
 -   | UVC_CTRL_FLAG_GET_MAX | 
 UVC_CTRL_FLAG_GET_RES
 -   | UVC_CTRL_FLAG_GET_DEF
 +   .flags  = UVC_CTRL_FLAG_SET_CUR
 +   | UVC_CTRL_FLAG_GET_RANGE
 | UVC_CTRL_FLAG_AUTO_UPDATE,
 },
 {
 @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping 
 *mapping,
 data[2] = min((int)abs(value), 0xff);
  }

 +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
 +   __u8 query, const __u8 *data)
 +{
 +   int first = mapping-offset / 8;
 +   __s8 rel = (__s8)data[first];
 +
 +   switch (query) {
 +   case UVC_GET_CUR:
 +   return (rel == 0) ? 0 : (rel  0 ? data[first+1]
 +: -data[first+1]);
 +   case UVC_GET_MIN:
 +   return -data[first+1];
 +   case UVC_GET_MAX:
 +   case UVC_GET_RES:
 +   case UVC_GET_DEF:
 +   default:
 +   return data[first+1];
 +   }
 +}
 +
 +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
 +   __s32 value, __u8 *data)
 +{
 +   int first = mapping-offset / 8;
 +
 +   data[first] = value == 0 ? 0 : (value  0) ? 1 : 0xff;
 +   data[first+1] = min_t(int, abs(value), 0xff);
 +}
 +
  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 {
 .id = V4L2_CID_BRIGHTNESS,
 @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
 },
 {
 +   .id = V4L2_CID_PAN_SPEED,
 +   .name   = Pan (Speed),
 +   .entity = UVC_GUID_UVC_CAMERA,
 +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
 +   .size   = 16,
 +   .offset = 0,
 +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
 +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
 +   .get= uvc_ctrl_get_rel_speed,
 +   .set= uvc_ctrl_set_rel_speed,
 +   },
 +   {
 +   .id = V4L2_CID_TILT_SPEED,
 +   .name   = Tilt (Speed),
 +   .entity = UVC_GUID_UVC_CAMERA,
 +   .selector   = UVC_CT_PANTILT_RELATIVE_CONTROL,
 +   .size   = 16,
 +   .offset = 16,
 +   .v4l2_type  = V4L2_CTRL_TYPE_INTEGER,
 +   .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
 +   .get= uvc_ctrl_get_rel_speed,
 +   .set= uvc_ctrl_set_rel_speed,
 +   },
 +   {
 .id = V4L2_CID_PRIVACY,
 .name   = Privacy,
 .entity = UVC_GUID_UVC_CAMERA,
 --
 2.0.0.526.g5318336

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-08-06 Thread Pawel Osciak
On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin  wrote:
>
> On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak  wrote:
> > This looks good to me in general (with one comment below). I don't think we
> > can easily implement current V4L2 pan and tilt controls that are for
> > movement by a specified amount in terms of UVC pan/tilt speed controls,
> > which only let us set speed and direction...
> >
> > On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin 
> > wrote:
> >>
> >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
> >> camera by setting its rotation speed around its axis.
> >>
> >> Signed-off-by: Vincent Palatin 
> >>
> >> ---
> >>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++
> >>  Documentation/DocBook/media/v4l/controls.xml | 21 +
> >>  drivers/media/v4l2-core/v4l2-ctrls.c |  2 ++
> >>  include/uapi/linux/v4l2-controls.h   |  2 ++
> >>  4 files changed, 35 insertions(+)
> >>
> >> diff --git a/Documentation/DocBook/media/v4l/compat.xml
> >> b/Documentation/DocBook/media/v4l/compat.xml
> >> index eee6f0f..21910e9 100644
> >> --- a/Documentation/DocBook/media/v4l/compat.xml
> >> +++ b/Documentation/DocBook/media/v4l/compat.xml
> >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
> >>
> >>  
> >>
> >> +
> >> +  V4L2 in Linux 3.17
> >> +  
> >> +   
> >> + Added V4L2_CID_PAN_SPEED and
> >> + V4L2_CID_TILT_SPEED camera controls.
> >> +   
> >> +  
> >> +
> >> +
> >>  
> >>Relation of V4L2 to other Linux multimedia APIs
> >>
> >> diff --git a/Documentation/DocBook/media/v4l/controls.xml
> >> b/Documentation/DocBook/media/v4l/controls.xml
> >> index 47198ee..cdf97f0 100644
> >> --- a/Documentation/DocBook/media/v4l/controls.xml
> >> +++ b/Documentation/DocBook/media/v4l/controls.xml
> >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus
> >> controls.
> >>   
> >>   
> >>
> >> + 
> >> +>> spanname="id">V4L2_CID_PAN_SPEED
> >> +   integer
> >> + This control turns the
> >> +camera horizontally at the specific speed. The unit is undefined. A
> >> +positive value moves the camera to the right (clockwise when viewed
> >> +from above), a negative value to the left. A value of zero does not
> >> +cause or stop the motion.
> >
> >
> > How do we stop/start?
>
> As mentioned in the last sentence of the paragraph above, setting 0
> stops the movement.
> setting non-zero value starts it if needed.
>

The sentence says "A value of zero does *not* cause or stop the
motion.". Perhaps "not" is a typo then?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-08-06 Thread Pawel Osciak
On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin vpala...@chromium.org wrote:

 On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak posc...@chromium.org wrote:
  This looks good to me in general (with one comment below). I don't think we
  can easily implement current V4L2 pan and tilt controls that are for
  movement by a specified amount in terms of UVC pan/tilt speed controls,
  which only let us set speed and direction...
 
  On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin vpala...@chromium.org
  wrote:
 
  The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
  camera by setting its rotation speed around its axis.
 
  Signed-off-by: Vincent Palatin vpala...@chromium.org
 
  ---
   Documentation/DocBook/media/v4l/compat.xml   | 10 ++
   Documentation/DocBook/media/v4l/controls.xml | 21 +
   drivers/media/v4l2-core/v4l2-ctrls.c |  2 ++
   include/uapi/linux/v4l2-controls.h   |  2 ++
   4 files changed, 35 insertions(+)
 
  diff --git a/Documentation/DocBook/media/v4l/compat.xml
  b/Documentation/DocBook/media/v4l/compat.xml
  index eee6f0f..21910e9 100644
  --- a/Documentation/DocBook/media/v4l/compat.xml
  +++ b/Documentation/DocBook/media/v4l/compat.xml
  @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
 /orderedlist
   /section
 
  +section
  +  titleV4L2 in Linux 3.17/title
  +  orderedlist
  +   listitem
  + paraAdded constantV4L2_CID_PAN_SPEED/constant and
  + constantV4L2_CID_TILT_SPEED/constant camera controls./para
  +   /listitem
  +  /orderedlist
  +/section
  +
   section id=other
 titleRelation of V4L2 to other Linux multimedia APIs/title
 
  diff --git a/Documentation/DocBook/media/v4l/controls.xml
  b/Documentation/DocBook/media/v4l/controls.xml
  index 47198ee..cdf97f0 100644
  --- a/Documentation/DocBook/media/v4l/controls.xml
  +++ b/Documentation/DocBook/media/v4l/controls.xml
  @@ -3914,6 +3914,27 @@ by exposure, white balance or focus
  controls./entry
/row
rowentry/entry/row
 
  + row
  +   entry
  spanname=idconstantV4L2_CID_PAN_SPEED/constantnbsp;/entry
  +   entryinteger/entry
  + /rowrowentry spanname=descrThis control turns the
  +camera horizontally at the specific speed. The unit is undefined. A
  +positive value moves the camera to the right (clockwise when viewed
  +from above), a negative value to the left. A value of zero does not
  +cause or stop the motion./entry
 
 
  How do we stop/start?

 As mentioned in the last sentence of the paragraph above, setting 0
 stops the movement.
 setting non-zero value starts it if needed.


The sentence says A value of zero does *not* cause or stop the
motion.. Perhaps not is a typo then?
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/