// Small debug program for BisonCam, NB Pro (5986:0241)
// Author: Jérôme Pouiller (jezz AT sysmic DOT org)

#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

#include <linux/ioctl.h>
#include <linux/videodev2.h>

#include <errno.h>
#include <string.h>

int main(int argc, char **argv) {
  int fd;
  int ret;

  fd = open("/dev/video0", O_RDONLY);

  struct v4l2_queryctrl queryctrl;
  printf("Enumerate all controls:\n");
  for (int i = V4L2_CID_BASE; i < V4L2_CID_LASTP1 ; i++) {
    queryctrl.id = i;
    ret = ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl);

    if (ret) {
      printf("  id:0x%X, ret:%d, flags:0x%X, err:%d (%s)\n", queryctrl.id, ret, queryctrl.flags, errno, strerror(errno));
    } else {
      printf("  id:0x%X, ret:%d, flags:0x%X, name:%s\n", queryctrl.id, ret, queryctrl.flags, queryctrl.name);
    }
  }

  struct v4l2_control ctrl;
  printf("Try to control Hue:\n");
  ctrl.id = V4L2_CID_HUE;
  ret = ioctl(fd, VIDIOC_G_CTRL, &ctrl);
  printf("  id:0x%X, ret:%d, value:%d, err:%d (%s)\n", ctrl.id, ret, ctrl.value, errno, strerror(errno));
  close(fd);
  return 0;
}

