|
|
|
@ -2,7 +2,6 @@ |
|
|
|
|
|
|
|
|
|
#include "common/swaglog.h" |
|
|
|
|
#include "system/camerad/cameras/camera_common.h" |
|
|
|
|
#include "system/camerad/cameras/camera_qcom2.h" |
|
|
|
|
#include "system/camerad/sensors/sensor.h" |
|
|
|
|
|
|
|
|
|
namespace { |
|
|
|
@ -17,7 +16,7 @@ const float sensor_analog_gains_AR0231[] = { |
|
|
|
|
5.0 / 4.0, 6.0 / 4.0, 6.0 / 3.0, 7.0 / 3.0, // 8, 9, 10, 11
|
|
|
|
|
7.0 / 2.0, 8.0 / 2.0, 8.0 / 1.0}; // 12, 13, 14, 15 = bypass
|
|
|
|
|
|
|
|
|
|
std::map<uint16_t, std::pair<int, int>> ar0231_build_register_lut(CameraState *c, uint8_t *data) { |
|
|
|
|
std::map<uint16_t, std::pair<int, int>> ar0231_build_register_lut(const AR0231 *s, uint8_t *data) { |
|
|
|
|
// This function builds a lookup table from register address, to a pair of indices in the
|
|
|
|
|
// buffer where to read this address. The buffer contains padding bytes,
|
|
|
|
|
// as well as markers to indicate the type of the next byte.
|
|
|
|
@ -33,7 +32,7 @@ std::map<uint16_t, std::pair<int, int>> ar0231_build_register_lut(CameraState *c |
|
|
|
|
|
|
|
|
|
std::map<uint16_t, std::pair<int, int>> registers; |
|
|
|
|
for (int register_row = 0; register_row < 2; register_row++) { |
|
|
|
|
uint8_t *registers_raw = data + c->sensor->frame_stride * register_row; |
|
|
|
|
uint8_t *registers_raw = data + s->frame_stride * register_row; |
|
|
|
|
assert(registers_raw[0] == 0x0a); // Start of line
|
|
|
|
|
|
|
|
|
|
int value_tag_count = 0; |
|
|
|
@ -58,7 +57,7 @@ std::map<uint16_t, std::pair<int, int>> ar0231_build_register_lut(CameraState *c |
|
|
|
|
cur_addr += 2; |
|
|
|
|
first_val_idx = val_idx; |
|
|
|
|
} else { |
|
|
|
|
registers[cur_addr] = std::make_pair(first_val_idx + c->sensor->frame_stride * register_row, val_idx + c->sensor->frame_stride * register_row); |
|
|
|
|
registers[cur_addr] = std::make_pair(first_val_idx + s->frame_stride * register_row, val_idx + s->frame_stride * register_row); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
value_tag_count++; |
|
|
|
@ -119,9 +118,9 @@ AR0231::AR0231() { |
|
|
|
|
target_grey_factor = 1.0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void AR0231::processRegisters(CameraState *c, cereal::FrameData::Builder &framed) const { |
|
|
|
|
void AR0231::processRegisters(uint8_t *cur_buf, cereal::FrameData::Builder &framed) const { |
|
|
|
|
const uint8_t expected_preamble[] = {0x0a, 0xaa, 0x55, 0x20, 0xa5, 0x55}; |
|
|
|
|
uint8_t *data = (uint8_t *)c->buf.cur_camera_buf->addr + c->sensor->registers_offset; |
|
|
|
|
uint8_t *data = cur_buf + registers_offset; |
|
|
|
|
|
|
|
|
|
if (memcmp(data, expected_preamble, std::size(expected_preamble)) != 0) { |
|
|
|
|
LOGE("unexpected register data found"); |
|
|
|
@ -129,7 +128,7 @@ void AR0231::processRegisters(CameraState *c, cereal::FrameData::Builder &framed |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ar0231_register_lut.empty()) { |
|
|
|
|
ar0231_register_lut = ar0231_build_register_lut(c, data); |
|
|
|
|
ar0231_register_lut = ar0231_build_register_lut(this, data); |
|
|
|
|
} |
|
|
|
|
std::map<uint16_t, uint16_t> registers; |
|
|
|
|
for (uint16_t addr : {0x2000, 0x2002, 0x20b0, 0x20b2, 0x30c6, 0x30c8, 0x30ca, 0x30cc}) { |
|
|
|
|