Update camera reader to work with new camera
We had a Rev. A version of arducam's imx462 lowlight camera, but they've
updated to Rev. C since then, and it needs a different driver.
This change relies on pull request #2 in frc971/linux which pulls in their arducam-pivariety driver
Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: Ib73f197125aaa7deef2e313d9fdca8b32d1cad73
diff --git a/frc971/rockpi/.config b/frc971/rockpi/.config
index 636a585..3860117 100644
--- a/frc971/rockpi/.config
+++ b/frc971/rockpi/.config
@@ -3358,6 +3358,7 @@
# Camera sensor devices
#
# CONFIG_VIDEO_AR0521 is not set
+CONFIG_VIDEO_ARDUCAM_PIVARIETY=m
# CONFIG_VIDEO_HI556 is not set
# CONFIG_VIDEO_HI846 is not set
# CONFIG_VIDEO_HI847 is not set
diff --git a/frc971/vision/v4l2_reader.cc b/frc971/vision/v4l2_reader.cc
index 053bfa1..a6bcb4d 100644
--- a/frc971/vision/v4l2_reader.cc
+++ b/frc971/vision/v4l2_reader.cc
@@ -366,16 +366,19 @@
PCHECK(ImageSensorIoctl(VIDIOC_S_EXT_CTRLS, &controls) == 0);
}
-void RockchipV4L2Reader::SetBlanking(size_t hblank, size_t vblank) {
- v4l2_control hblank_control;
- hblank_control.id = V4L2_CID_HBLANK;
- hblank_control.value = static_cast<int>(hblank);
- PCHECK(ImageSensorIoctl(VIDIOC_S_CTRL, &hblank_control) == 0);
+void RockchipV4L2Reader::SetVerticalBlanking(size_t vblank) {
+ struct v4l2_ext_controls controls;
+ memset(&controls, 0, sizeof(controls));
+ struct v4l2_ext_control control[1];
+ memset(&control, 0, sizeof(control));
- v4l2_control vblank_control;
- vblank_control.id = V4L2_CID_VBLANK;
- vblank_control.value = static_cast<int>(vblank);
- PCHECK(ImageSensorIoctl(VIDIOC_S_CTRL, &vblank_control) == 0);
+ controls.ctrl_class = V4L2_CTRL_CLASS_IMAGE_SOURCE;
+ controls.count = 1;
+ controls.controls = control;
+ control[0].id = V4L2_CID_VBLANK;
+ control[0].value = vblank;
+
+ PCHECK(ImageSensorIoctl(VIDIOC_S_EXT_CTRLS, &controls) == 0);
}
} // namespace vision
diff --git a/frc971/vision/v4l2_reader.h b/frc971/vision/v4l2_reader.h
index e36fef8..669c157 100644
--- a/frc971/vision/v4l2_reader.h
+++ b/frc971/vision/v4l2_reader.h
@@ -80,7 +80,7 @@
aos::monotonic_clock::time_point monotonic_eof);
void Send() {
- (void)builder.Send(message_offset);
+ builder.CheckOk(builder.Send(message_offset));
message_offset = flatbuffers::Offset<CameraImage>();
}
@@ -154,7 +154,7 @@
void SetGain(size_t gain);
void SetGainExt(size_t gain);
- void SetBlanking(size_t hblank, size_t vblank);
+ void SetVerticalBlanking(size_t vblank);
private:
void OnImageReady();
diff --git a/y2023/vision/camera_reader.cc b/y2023/vision/camera_reader.cc
index 560e9ee..fca5d53 100644
--- a/y2023/vision/camera_reader.cc
+++ b/y2023/vision/camera_reader.cc
@@ -30,7 +30,7 @@
width = 1920;
height = 1080;
color_format = MEDIA_BUS_FMT_SRGGB10_1X10;
- camera_device_string = "imx290 4-0036";
+ camera_device_string = "arducam-pivariety 4-000c";
}
media_device->Reset();
@@ -94,9 +94,9 @@
rkisp1_selfpath->device(), camera->device());
if (FLAGS_lowlight_camera) {
- v4l2_reader.SetGain(72);
- v4l2_reader.SetExposure(30);
- v4l2_reader.SetBlanking(2480, 45);
+ v4l2_reader.SetGainExt(100);
+ v4l2_reader.SetVerticalBlanking(1000);
+ v4l2_reader.SetExposure(50);
} else {
v4l2_reader.SetGainExt(1000);
v4l2_reader.SetExposure(1000);
diff --git a/y2023/y2023_pi_template.json b/y2023/y2023_pi_template.json
index ba8f3c0..fd3e97f 100644
--- a/y2023/y2023_pi_template.json
+++ b/y2023/y2023_pi_template.json
@@ -164,7 +164,7 @@
"type": "frc971.vision.CameraImage",
"source_node": "pi{{ NUM }}",
"frequency": 40,
- "max_size": 2600000,
+ "max_size": 4200000,
"num_readers": 4,
"read_method": "PIN",
"num_senders": 18