Add camera exposure setter to v4l2 reader

For rapid react we will use low exposure to focus on the reflected
light.

Signed-off-by: milind-u <milind.upadhyay@gmail.com>
Change-Id: Id1d4b574b13672229f6054e115870b239d21bc5b
diff --git a/y2020/vision/v4l2_reader.cc b/y2020/vision/v4l2_reader.cc
index 91777c7..3f24f1e 100644
--- a/y2020/vision/v4l2_reader.cc
+++ b/y2020/vision/v4l2_reader.cc
@@ -92,6 +92,25 @@
 
 void V4L2Reader::SendLatestImage() { buffers_[saved_buffer_.index].Send(); }
 
+void V4L2Reader::SetExposure(size_t duration) {
+  v4l2_control manual_control;
+  manual_control.id = V4L2_CID_EXPOSURE_AUTO;
+  manual_control.value = V4L2_EXPOSURE_MANUAL;
+  PCHECK(Ioctl(VIDIOC_S_CTRL, &manual_control) == 0);
+
+  v4l2_control exposure_control;
+  exposure_control.id = V4L2_CID_EXPOSURE_ABSOLUTE;
+  exposure_control.value = static_cast<int>(duration);  // 100 micro s units
+  PCHECK(Ioctl(VIDIOC_S_CTRL, &exposure_control) == 0);
+}
+
+void V4L2Reader::UseAutoExposure() {
+  v4l2_control control;
+  control.id = V4L2_CID_EXPOSURE_AUTO;
+  control.value = V4L2_EXPOSURE_AUTO;
+  PCHECK(Ioctl(VIDIOC_S_CTRL, &control) == 0);
+}
+
 void V4L2Reader::Buffer::InitializeMessage(size_t max_image_size) {
   message_offset = flatbuffers::Offset<CameraImage>();
   builder = aos::Sender<CameraImage>::Builder();