fix camera config

pull/2047/head
ZwX1616 5 years ago
parent e66c246f34
commit 4c16aacf64
  1. 4
      selfdrive/camerad/SConscript
  2. 29
      selfdrive/camerad/cameras/camera_qcom2.c
  3. 7
      selfdrive/camerad/cameras/camera_qcom2.h
  4. 624
      selfdrive/camerad/cameras/sensor2_i2c.h
  5. 28
      selfdrive/camerad/test/tici_zclient/livergb.py
  6. 24
      selfdrive/camerad/test/tici_zclient/liveyuv.py
  7. 5
      selfdrive/modeld/SConscript
  8. 13
      selfdrive/modeld/modeld.cc
  9. 13
      selfdrive/modeld/models/driving.cc
  10. 3
      selfdrive/modeld/models/driving.h
  11. 4
      selfdrive/modeld/runners/snpemodel.cc

@ -8,6 +8,10 @@ if arch == "aarch64":
elif arch == "larch64": elif arch == "larch64":
libs += [] libs += []
cameras = ['cameras/camera_qcom2.c'] cameras = ['cameras/camera_qcom2.c']
# no screen
env = env.Clone()
env.Append(CXXFLAGS = '-DNOSCREEN')
env.Append(CFLAGS = '-DNOSCREEN')
else: else:
if webcam: if webcam:
libs += ['opencv_core', 'opencv_highgui', 'opencv_imgproc', 'opencv_videoio'] libs += ['opencv_core', 'opencv_highgui', 'opencv_imgproc', 'opencv_videoio']

@ -45,7 +45,7 @@ CameraInfo cameras_supported[CAMERA_ID_MAX] = {
.frame_height = FRAME_HEIGHT, .frame_height = FRAME_HEIGHT,
.frame_stride = FRAME_STRIDE, .frame_stride = FRAME_STRIDE,
.bayer = true, .bayer = true,
.bayer_flip = 0, .bayer_flip = 1,
.hdr = false .hdr = false
}, },
}; };
@ -777,6 +777,11 @@ void cameras_init(DualCameraState *s) {
camera_init(&s->rear, CAMERA_ID_AR0231, 0, 20); camera_init(&s->rear, CAMERA_ID_AR0231, 0, 20);
camera_init(&s->wide, CAMERA_ID_AR0231, 1, 20); camera_init(&s->wide, CAMERA_ID_AR0231, 1, 20);
camera_init(&s->front, CAMERA_ID_AR0231, 2, 20); camera_init(&s->front, CAMERA_ID_AR0231, 2, 20);
#ifdef NOSCREEN
zsock_t *rgb_sock = zsock_new_push("tcp://192.168.2.221:7768");
assert(rgb_sock);
s->rgb_sock = rgb_sock;
#endif
} }
void cameras_open(DualCameraState *s, VisionBuf *camera_bufs_rear, VisionBuf *camera_bufs_focus, VisionBuf *camera_bufs_stats, VisionBuf *camera_bufs_front) { void cameras_open(DualCameraState *s, VisionBuf *camera_bufs_rear, VisionBuf *camera_bufs_focus, VisionBuf *camera_bufs_stats, VisionBuf *camera_bufs_front) {
@ -882,6 +887,9 @@ static void cameras_close(DualCameraState *s) {
camera_close(&s->rear); camera_close(&s->rear);
//camera_close(&s->front); //camera_close(&s->front);
//camera_close(&s->wide); //camera_close(&s->wide);
#ifdef NOSCREEN
zsock_destroy(&s->rgb_sock)
#endif
} }
struct video_event_data { struct video_event_data {
@ -942,5 +950,24 @@ void cameras_run(DualCameraState *s) {
} }
void camera_autoexposure(CameraState *s, float grey_frac) { void camera_autoexposure(CameraState *s, float grey_frac) {
// TODO: implement autoexposure
struct i2c_random_wr_payload exp_reg_array[] = {{0x3366, 0x7777}, // analog gain
// {0x3056, 0x0080}, // G1
// {0x3058, 0x012A}, // B
// {0x305A, 0x00A0}, // R
// {0x305C, 0x0080}, // G2
// {0x305E, 0x0080}, // global digi gain
{0x3012, 0x0312}}; // integ time
sensors_i2c(s, exp_reg_array, sizeof(exp_reg_array)/sizeof(struct i2c_random_wr_payload),
CAM_SENSOR_PACKET_OPCODE_SENSOR_CONFIG);
} }
#ifdef NOSCREEN
void sendrgb(DualCameraState *s, void* dat, int len) {
int err, err2;
err = zmq_send(zsock_reslove(s->rgb_sock), dat, len, ZMQ_DONTWAIT);
err2 = zmq_errno();
printf("zmq errcode %d, %d\n", err ,err2);
}
#endif

@ -4,6 +4,7 @@
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include <pthread.h> #include <pthread.h>
#include <czmq.h>
#include "common/mat.h" #include "common/mat.h"
#include "common/visionbuf.h" #include "common/visionbuf.h"
@ -71,12 +72,18 @@ typedef struct DualCameraState {
CameraState rear; CameraState rear;
CameraState front; CameraState front;
CameraState wide; CameraState wide;
#ifdef NOSCREEN
zsock_t *rgb_sock;
#endif
} DualCameraState; } DualCameraState;
void cameras_init(DualCameraState *s); void cameras_init(DualCameraState *s);
void cameras_open(DualCameraState *s, VisionBuf *camera_bufs_rear, VisionBuf *camera_bufs_focus, VisionBuf *camera_bufs_stats, VisionBuf *camera_bufs_front); void cameras_open(DualCameraState *s, VisionBuf *camera_bufs_rear, VisionBuf *camera_bufs_focus, VisionBuf *camera_bufs_stats, VisionBuf *camera_bufs_front);
void cameras_run(DualCameraState *s); void cameras_run(DualCameraState *s);
void camera_autoexposure(CameraState *s, float grey_frac); void camera_autoexposure(CameraState *s, float grey_frac);
#ifdef NOSCREEN
void sendrgb(DualCameraState *s, void* dat, int len);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"

@ -3,302 +3,344 @@ struct i2c_random_wr_payload start_reg_array[] = {{0x301a, 0x1c}};
struct i2c_random_wr_payload stop_reg_array[] = {{0x301a, 0x18}};; struct i2c_random_wr_payload stop_reg_array[] = {{0x301a, 0x18}};;
struct i2c_random_wr_payload init_array_ar0231[] = { struct i2c_random_wr_payload init_array_ar0231[] = {
{0x3092, 0x0C24}, {0x301A, 0x0018}, // RESET_REGISTER
{0x337A, 0x0C80},
{0x3520, 0x1288},
{0x3522, 0x880C},
{0x3524, 0x0C12},
{0x352C, 0x1212},
{0x354A, 0x007F},
{0x350C, 28},
{0x3506, 0x3333},
{0x3508, 0x3333},
{0x3100, 0x4000},
{0x3280, 0x0FA0},
{0x3282, 0x0FA0},
{0x3284, 0x0FA0},
{0x3286, 0x0FA0},
{0x3288, 0x0FA0},
{0x328A, 0x0FA0},
{0x328C, 0x0FA0},
{0x328E, 0x0FA0},
{0x3290, 0x0FA0},
{0x3292, 0x0FA0},
{0x3294, 0x0FA0},
{0x3296, 0x0FA0},
{0x3298, 0x0FA0},
{0x329A, 0x0FA0},
{0x329C, 0x0FA0},
{0x329E, 0x0FA0},
// SEQ_DATA_PORT? //
{0x2512, 0x8000}, {0x3092, 0x0C24}, // ROW_NOISE_CONTROL
{0x2510, 0x0905}, {0x337A, 0x0C80}, // DBLC_SCALE0
{0x2510, 0x3350}, {0x3520, 0x1288}, // RESERVED_MFR_3520
{0x2510, 0x2004}, {0x3522, 0x880C}, // RESERVED_MFR_3522
{0x2510, 0x1460}, {0x3524, 0x0C12}, // RESERVED_MFR_3524
{0x2510, 0x1578}, {0x352C, 0x1212}, // RESERVED_MFR_352C
{0x2510, 0x0901}, {0x354A, 0x007F}, // RESERVED_MFR_354A
{0x2510, 0x7B24}, {0x350C, 0x055C}, // RESERVED_MFR_350C
{0x2510, 0xFF24}, {0x3506, 0x3333}, // RESERVED_MFR_3506
{0x2510, 0xFF24}, {0x3508, 0x3333}, // RESERVED_MFR_3508
{0x2510, 0xEA24}, {0x3100, 0x4000}, // DLO_CONTROL0
{0x2510, 0x1022}, {0x3280, 0x0FA0}, // RESERVED_MFR_3280
{0x2510, 0x2410}, {0x3282, 0x0FA0}, // RESERVED_MFR_3282
{0x2510, 0x155A}, {0x3284, 0x0FA0}, // RESERVED_MFR_3284
{0x2510, 0x0901}, {0x3286, 0x0FA0}, // RESERVED_MFR_3286
{0x2510, 0x1400}, {0x3288, 0x0FA0}, // RESERVED_MFR_3288
{0x2510, 0x24FF}, {0x328A, 0x0FA0}, // RESERVED_MFR_328A
{0x2510, 0x24FF}, {0x328C, 0x0FA0}, // RESERVED_MFR_328C
{0x2510, 0x24EA}, {0x328E, 0x0FA0}, // RESERVED_MFR_328E
{0x2510, 0x2324}, {0x3290, 0x0FA0}, // RESERVED_MFR_3290
{0x2510, 0x647A}, {0x3292, 0x0FA0}, // RESERVED_MFR_3292
{0x2510, 0x2404}, {0x3294, 0x0FA0}, // RESERVED_MFR_3294
{0x2510, 0x052C}, {0x3296, 0x0FA0}, // RESERVED_MFR_3296
{0x2510, 0x400A}, {0x3298, 0x0FA0}, // RESERVED_MFR_3298
{0x2510, 0xFF0A}, {0x329A, 0x0FA0}, // RESERVED_MFR_329A
{0x2510, 0xFF0A}, {0x329C, 0x0FA0}, // RESERVED_MFR_329C
{0x2510, 0x1008}, {0x329E, 0x0FA0}, // RESERVED_MFR_329E
{0x2510, 0x3851}, {0x2512, 0x8000}, // SEQ_CTRL_PORT
{0x2510, 0x1440}, {0x2510, 0x0905}, // SEQ_DATA_PORT
{0x2510, 0x0004}, {0x2510, 0x3350}, // SEQ_DATA_PORT
{0x2510, 0x0801}, {0x2510, 0x2004}, // SEQ_DATA_PORT
{0x2510, 0x0408}, {0x2510, 0x1460}, // SEQ_DATA_PORT
{0x2510, 0x1180}, {0x2510, 0x1578}, // SEQ_DATA_PORT
{0x2510, 0x2652}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x1518}, {0x2510, 0x7B24}, // SEQ_DATA_PORT
{0x2510, 0x0906}, {0x2510, 0xFF24}, // SEQ_DATA_PORT
{0x2510, 0x1348}, {0x2510, 0xFF24}, // SEQ_DATA_PORT
{0x2510, 0x1002}, {0x2510, 0xEA24}, // SEQ_DATA_PORT
{0x2510, 0x1016}, {0x2510, 0x1022}, // SEQ_DATA_PORT
{0x2510, 0x1181}, {0x2510, 0x2410}, // SEQ_DATA_PORT
{0x2510, 0x1189}, {0x2510, 0x155A}, // SEQ_DATA_PORT
{0x2510, 0x1056}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x1210}, {0x2510, 0x1400}, // SEQ_DATA_PORT
{0x2510, 0x0901}, {0x2510, 0x24FF}, // SEQ_DATA_PORT
{0x2510, 0x0D09}, {0x2510, 0x24FF}, // SEQ_DATA_PORT
{0x2510, 0x1413}, {0x2510, 0x24EA}, // SEQ_DATA_PORT
{0x2510, 0x8809}, {0x2510, 0x2324}, // SEQ_DATA_PORT
{0x2510, 0x2B15}, {0x2510, 0x647A}, // SEQ_DATA_PORT
{0x2510, 0x8809}, {0x2510, 0x2404}, // SEQ_DATA_PORT
{0x2510, 0x0311}, {0x2510, 0x052C}, // SEQ_DATA_PORT
{0x2510, 0xD909}, {0x2510, 0x400A}, // SEQ_DATA_PORT
{0x2510, 0x1214}, {0x2510, 0xFF0A}, // SEQ_DATA_PORT
{0x2510, 0x4109}, {0x2510, 0xFF0A}, // SEQ_DATA_PORT
{0x2510, 0x0312}, {0x2510, 0x1008}, // SEQ_DATA_PORT
{0x2510, 0x1409}, {0x2510, 0x3851}, // SEQ_DATA_PORT
{0x2510, 0x0110}, {0x2510, 0x1440}, // SEQ_DATA_PORT
{0x2510, 0xD612}, {0x2510, 0x0004}, // SEQ_DATA_PORT
{0x2510, 0x1012}, {0x2510, 0x0801}, // SEQ_DATA_PORT
{0x2510, 0x1212}, {0x2510, 0x0408}, // SEQ_DATA_PORT
{0x2510, 0x1011}, {0x2510, 0x1180}, // SEQ_DATA_PORT
{0x2510, 0xDD11}, {0x2510, 0x2652}, // SEQ_DATA_PORT
{0x2510, 0xD910}, {0x2510, 0x1518}, // SEQ_DATA_PORT
{0x2510, 0x5609}, {0x2510, 0x0906}, // SEQ_DATA_PORT
{0x2510, 0x1511}, {0x2510, 0x1348}, // SEQ_DATA_PORT
{0x2510, 0xDB09}, {0x2510, 0x1002}, // SEQ_DATA_PORT
{0x2510, 0x1511}, {0x2510, 0x1016}, // SEQ_DATA_PORT
{0x2510, 0x9B09}, {0x2510, 0x1181}, // SEQ_DATA_PORT
{0x2510, 0x0F11}, {0x2510, 0x1189}, // SEQ_DATA_PORT
{0x2510, 0xBB12}, {0x2510, 0x1056}, // SEQ_DATA_PORT
{0x2510, 0x1A12}, {0x2510, 0x1210}, // SEQ_DATA_PORT
{0x2510, 0x1014}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x6012}, {0x2510, 0x0D09}, // SEQ_DATA_PORT
{0x2510, 0x5010}, {0x2510, 0x1413}, // SEQ_DATA_PORT
{0x2510, 0x7610}, {0x2510, 0x8809}, // SEQ_DATA_PORT
{0x2510, 0xE609}, {0x2510, 0x2B15}, // SEQ_DATA_PORT
{0x2510, 0x0812}, {0x2510, 0x8809}, // SEQ_DATA_PORT
{0x2510, 0x4012}, {0x2510, 0x0311}, // SEQ_DATA_PORT
{0x2510, 0x6009}, {0x2510, 0xD909}, // SEQ_DATA_PORT
{0x2510, 0x290B}, {0x2510, 0x1214}, // SEQ_DATA_PORT
{0x2510, 0x0904}, {0x2510, 0x4109}, // SEQ_DATA_PORT
{0x2510, 0x1440}, {0x2510, 0x0312}, // SEQ_DATA_PORT
{0x2510, 0x0923}, {0x2510, 0x1409}, // SEQ_DATA_PORT
{0x2510, 0x15C8}, {0x2510, 0x0110}, // SEQ_DATA_PORT
{0x2510, 0x13C8}, {0x2510, 0xD612}, // SEQ_DATA_PORT
{0x2510, 0x092C}, {0x2510, 0x1012}, // SEQ_DATA_PORT
{0x2510, 0x1588}, {0x2510, 0x1212}, // SEQ_DATA_PORT
{0x2510, 0x1388}, {0x2510, 0x1011}, // SEQ_DATA_PORT
{0x2510, 0x0C09}, {0x2510, 0xDD11}, // SEQ_DATA_PORT
{0x2510, 0x0C14}, {0x2510, 0xD910}, // SEQ_DATA_PORT
{0x2510, 0x4109}, {0x2510, 0x5609}, // SEQ_DATA_PORT
{0x2510, 0x1112}, {0x2510, 0x1511}, // SEQ_DATA_PORT
{0x2510, 0x6212}, {0x2510, 0xDB09}, // SEQ_DATA_PORT
{0x2510, 0x6011}, {0x2510, 0x1511}, // SEQ_DATA_PORT
{0x2510, 0xBF11}, {0x2510, 0x9B09}, // SEQ_DATA_PORT
{0x2510, 0xBB10}, {0x2510, 0x0F11}, // SEQ_DATA_PORT
{0x2510, 0x6611}, {0x2510, 0xBB12}, // SEQ_DATA_PORT
{0x2510, 0xFB09}, {0x2510, 0x1A12}, // SEQ_DATA_PORT
{0x2510, 0x3511}, {0x2510, 0x1014}, // SEQ_DATA_PORT
{0x2510, 0xBB12}, {0x2510, 0x6012}, // SEQ_DATA_PORT
{0x2510, 0x6312}, {0x2510, 0x5010}, // SEQ_DATA_PORT
{0x2510, 0x6014}, {0x2510, 0x7610}, // SEQ_DATA_PORT
{0x2510, 0x0015}, {0x2510, 0xE609}, // SEQ_DATA_PORT
{0x2510, 0x0011}, {0x2510, 0x0812}, // SEQ_DATA_PORT
{0x2510, 0xB812}, {0x2510, 0x4012}, // SEQ_DATA_PORT
{0x2510, 0xA012}, {0x2510, 0x6009}, // SEQ_DATA_PORT
{0x2510, 0x0010}, {0x2510, 0x290B}, // SEQ_DATA_PORT
{0x2510, 0x2610}, {0x2510, 0x0904}, // SEQ_DATA_PORT
{0x2510, 0x0013}, {0x2510, 0x1440}, // SEQ_DATA_PORT
{0x2510, 0x0011}, {0x2510, 0x0923}, // SEQ_DATA_PORT
{0x2510, 0x0008}, {0x2510, 0x15C8}, // SEQ_DATA_PORT
{0x2510, 0x3053}, {0x2510, 0x13C8}, // SEQ_DATA_PORT
{0x2510, 0x4215}, {0x2510, 0x092C}, // SEQ_DATA_PORT
{0x2510, 0x4013}, {0x2510, 0x1588}, // SEQ_DATA_PORT
{0x2510, 0x4010}, {0x2510, 0x1388}, // SEQ_DATA_PORT
{0x2510, 0x0210}, {0x2510, 0x0C09}, // SEQ_DATA_PORT
{0x2510, 0x1611}, {0x2510, 0x0C14}, // SEQ_DATA_PORT
{0x2510, 0x8111}, {0x2510, 0x4109}, // SEQ_DATA_PORT
{0x2510, 0x8910}, {0x2510, 0x1112}, // SEQ_DATA_PORT
{0x2510, 0x5612}, {0x2510, 0x6212}, // SEQ_DATA_PORT
{0x2510, 0x1009}, {0x2510, 0x6011}, // SEQ_DATA_PORT
{0x2510, 0x010D}, {0x2510, 0xBF11}, // SEQ_DATA_PORT
{0x2510, 0x0815}, {0x2510, 0xBB10}, // SEQ_DATA_PORT
{0x2510, 0xC015}, {0x2510, 0x6611}, // SEQ_DATA_PORT
{0x2510, 0xD013}, {0x2510, 0xFB09}, // SEQ_DATA_PORT
{0x2510, 0x5009}, {0x2510, 0x3511}, // SEQ_DATA_PORT
{0x2510, 0x1313}, {0x2510, 0xBB12}, // SEQ_DATA_PORT
{0x2510, 0xD009}, {0x2510, 0x6312}, // SEQ_DATA_PORT
{0x2510, 0x0215}, {0x2510, 0x6014}, // SEQ_DATA_PORT
{0x2510, 0xC015}, {0x2510, 0x0015}, // SEQ_DATA_PORT
{0x2510, 0xC813}, {0x2510, 0x0011}, // SEQ_DATA_PORT
{0x2510, 0xC009}, {0x2510, 0xB812}, // SEQ_DATA_PORT
{0x2510, 0x0515}, {0x2510, 0xA012}, // SEQ_DATA_PORT
{0x2510, 0x8813}, {0x2510, 0x0010}, // SEQ_DATA_PORT
{0x2510, 0x8009}, {0x2510, 0x2610}, // SEQ_DATA_PORT
{0x2510, 0x0213}, {0x2510, 0x0013}, // SEQ_DATA_PORT
{0x2510, 0x8809}, {0x2510, 0x0011}, // SEQ_DATA_PORT
{0x2510, 0x0411}, {0x2510, 0x0008}, // SEQ_DATA_PORT
{0x2510, 0xC909}, {0x2510, 0x3053}, // SEQ_DATA_PORT
{0x2510, 0x0814}, {0x2510, 0x4215}, // SEQ_DATA_PORT
{0x2510, 0x0109}, {0x2510, 0x4013}, // SEQ_DATA_PORT
{0x2510, 0x0B11}, {0x2510, 0x4010}, // SEQ_DATA_PORT
{0x2510, 0xD908}, {0x2510, 0x0210}, // SEQ_DATA_PORT
{0x2510, 0x1400}, {0x2510, 0x1611}, // SEQ_DATA_PORT
{0x2510, 0x091A}, {0x2510, 0x8111}, // SEQ_DATA_PORT
{0x2510, 0x1440}, {0x2510, 0x8910}, // SEQ_DATA_PORT
{0x2510, 0x0903}, {0x2510, 0x5612}, // SEQ_DATA_PORT
{0x2510, 0x1214}, {0x2510, 0x1009}, // SEQ_DATA_PORT
{0x2510, 0x0901}, {0x2510, 0x010D}, // SEQ_DATA_PORT
{0x2510, 0x10D6}, {0x2510, 0x0815}, // SEQ_DATA_PORT
{0x2510, 0x1210}, {0x2510, 0xC015}, // SEQ_DATA_PORT
{0x2510, 0x1212}, {0x2510, 0xD013}, // SEQ_DATA_PORT
{0x2510, 0x1210}, {0x2510, 0x5009}, // SEQ_DATA_PORT
{0x2510, 0x11DD}, {0x2510, 0x1313}, // SEQ_DATA_PORT
{0x2510, 0x11D9}, {0x2510, 0xD009}, // SEQ_DATA_PORT
{0x2510, 0x1056}, {0x2510, 0x0215}, // SEQ_DATA_PORT
{0x2510, 0x0917}, {0x2510, 0xC015}, // SEQ_DATA_PORT
{0x2510, 0x11DB}, {0x2510, 0xC813}, // SEQ_DATA_PORT
{0x2510, 0x0913}, {0x2510, 0xC009}, // SEQ_DATA_PORT
{0x2510, 0x11FB}, {0x2510, 0x0515}, // SEQ_DATA_PORT
{0x2510, 0x0905}, {0x2510, 0x8813}, // SEQ_DATA_PORT
{0x2510, 0x11BB}, {0x2510, 0x8009}, // SEQ_DATA_PORT
{0x2510, 0x121A}, {0x2510, 0x0213}, // SEQ_DATA_PORT
{0x2510, 0x1210}, {0x2510, 0x8809}, // SEQ_DATA_PORT
{0x2510, 0x1460}, {0x2510, 0x0411}, // SEQ_DATA_PORT
{0x2510, 0x1250}, {0x2510, 0xC909}, // SEQ_DATA_PORT
{0x2510, 0x1076}, {0x2510, 0x0814}, // SEQ_DATA_PORT
{0x2510, 0x10E6}, {0x2510, 0x0109}, // SEQ_DATA_PORT
{0x2510, 0x0901}, {0x2510, 0x0B11}, // SEQ_DATA_PORT
{0x2510, 0x15A8}, {0x2510, 0xD908}, // SEQ_DATA_PORT
{0x2510, 0x0901}, {0x2510, 0x1400}, // SEQ_DATA_PORT
{0x2510, 0x13A8}, {0x2510, 0x091A}, // SEQ_DATA_PORT
{0x2510, 0x1240}, {0x2510, 0x1440}, // SEQ_DATA_PORT
{0x2510, 0x1260}, {0x2510, 0x0903}, // SEQ_DATA_PORT
{0x2510, 0x0925}, {0x2510, 0x1214}, // SEQ_DATA_PORT
{0x2510, 0x13AD}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x0902}, {0x2510, 0x10D6}, // SEQ_DATA_PORT
{0x2510, 0x0907}, {0x2510, 0x1210}, // SEQ_DATA_PORT
{0x2510, 0x1588}, {0x2510, 0x1212}, // SEQ_DATA_PORT
{0x2510, 0x0901}, {0x2510, 0x1210}, // SEQ_DATA_PORT
{0x2510, 0x138D}, {0x2510, 0x11DD}, // SEQ_DATA_PORT
{0x2510, 0x0B09}, {0x2510, 0x11D9}, // SEQ_DATA_PORT
{0x2510, 0x0914}, {0x2510, 0x1056}, // SEQ_DATA_PORT
{0x2510, 0x4009}, {0x2510, 0x0917}, // SEQ_DATA_PORT
{0x2510, 0x0B13}, {0x2510, 0x11DB}, // SEQ_DATA_PORT
{0x2510, 0x8809}, {0x2510, 0x0913}, // SEQ_DATA_PORT
{0x2510, 0x1C0C}, {0x2510, 0x11FB}, // SEQ_DATA_PORT
{0x2510, 0x0920}, {0x2510, 0x0905}, // SEQ_DATA_PORT
{0x2510, 0x1262}, {0x2510, 0x11BB}, // SEQ_DATA_PORT
{0x2510, 0x1260}, {0x2510, 0x121A}, // SEQ_DATA_PORT
{0x2510, 0x11BF}, {0x2510, 0x1210}, // SEQ_DATA_PORT
{0x2510, 0x11BB}, {0x2510, 0x1460}, // SEQ_DATA_PORT
{0x2510, 0x1066}, {0x2510, 0x1250}, // SEQ_DATA_PORT
{0x2510, 0x090A}, {0x2510, 0x1076}, // SEQ_DATA_PORT
{0x2510, 0x11FB}, {0x2510, 0x10E6}, // SEQ_DATA_PORT
{0x2510, 0x093B}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x11BB}, {0x2510, 0x15A8}, // SEQ_DATA_PORT
{0x2510, 0x1263}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x1260}, {0x2510, 0x13A8}, // SEQ_DATA_PORT
{0x2510, 0x1400}, {0x2510, 0x1240}, // SEQ_DATA_PORT
{0x2510, 0x1508}, {0x2510, 0x1260}, // SEQ_DATA_PORT
{0x2510, 0x11B8}, {0x2510, 0x0925}, // SEQ_DATA_PORT
{0x2510, 0x12A0}, {0x2510, 0x13AD}, // SEQ_DATA_PORT
{0x2510, 0x1200}, {0x2510, 0x0902}, // SEQ_DATA_PORT
{0x2510, 0x1026}, {0x2510, 0x0907}, // SEQ_DATA_PORT
{0x2510, 0x1000}, {0x2510, 0x1588}, // SEQ_DATA_PORT
{0x2510, 0x1300}, {0x2510, 0x0901}, // SEQ_DATA_PORT
{0x2510, 0x1100}, {0x2510, 0x138D}, // SEQ_DATA_PORT
{0x2510, 0x437A}, {0x2510, 0x0B09}, // SEQ_DATA_PORT
{0x2510, 0x0609}, {0x2510, 0x0914}, // SEQ_DATA_PORT
{0x2510, 0x0B05}, {0x2510, 0x4009}, // SEQ_DATA_PORT
{0x2510, 0x0708}, {0x2510, 0x0B13}, // SEQ_DATA_PORT
{0x2510, 0x4137}, {0x2510, 0x8809}, // SEQ_DATA_PORT
{0x2510, 0x502C}, {0x2510, 0x1C0C}, // SEQ_DATA_PORT
{0x2510, 0x2CFE}, {0x2510, 0x0920}, // SEQ_DATA_PORT
{0x2510, 0x15FE}, {0x2510, 0x1262}, // SEQ_DATA_PORT
{0x2510, 0x0C2C}, {0x2510, 0x1260}, // SEQ_DATA_PORT
{0x2510, 0x11BF}, // SEQ_DATA_PORT
{0x2510, 0x11BB}, // SEQ_DATA_PORT
{0x2510, 0x1066}, // SEQ_DATA_PORT
{0x2510, 0x090A}, // SEQ_DATA_PORT
{0x2510, 0x11FB}, // SEQ_DATA_PORT
{0x2510, 0x093B}, // SEQ_DATA_PORT
{0x2510, 0x11BB}, // SEQ_DATA_PORT
{0x2510, 0x1263}, // SEQ_DATA_PORT
{0x2510, 0x1260}, // SEQ_DATA_PORT
{0x2510, 0x1400}, // SEQ_DATA_PORT
{0x2510, 0x1508}, // SEQ_DATA_PORT
{0x2510, 0x11B8}, // SEQ_DATA_PORT
{0x2510, 0x12A0}, // SEQ_DATA_PORT
{0x2510, 0x1200}, // SEQ_DATA_PORT
{0x2510, 0x1026}, // SEQ_DATA_PORT
{0x2510, 0x1000}, // SEQ_DATA_PORT
{0x2510, 0x1300}, // SEQ_DATA_PORT
{0x2510, 0x1100}, // SEQ_DATA_PORT
{0x2510, 0x437A}, // SEQ_DATA_PORT
{0x2510, 0x0609}, // SEQ_DATA_PORT
{0x2510, 0x0B05}, // SEQ_DATA_PORT
{0x2510, 0x0708}, // SEQ_DATA_PORT
{0x2510, 0x4137}, // SEQ_DATA_PORT
{0x2510, 0x502C}, // SEQ_DATA_PORT
{0x2510, 0x2CFE}, // SEQ_DATA_PORT
{0x2510, 0x15FE}, // SEQ_DATA_PORT
{0x2510, 0x0C2C}, // SEQ_DATA_PORT
{0x32E6, 0x00E0}, // RESERVED_MFR_32E6
{0x1008, 0x036F}, // RESERVED_PARAM_1008
{0x100C, 0x058F}, // RESERVED_PARAM_100C
{0x100E, 0x07AF}, // RESERVED_PARAM_100E
{0x1010, 0x014F}, // RESERVED_PARAM_1010
{0x3230, 0x0312}, // FINE_CORRECTION
{0x3232, 0x0532}, // FINE_CORRECTION2
{0x3234, 0x0752}, // FINE_CORRECTION3
{0x3236, 0x00F2}, // FINE_CORRECTION4
{0x3566, 0x3328}, // RESERVED_MFR_3566
{0x32D0, 0x3A02}, // RESERVED_MFR_32D0
{0x32D2, 0x3508}, // RESERVED_MFR_32D2
{0x32D4, 0x3702}, // RESERVED_MFR_32D4
{0x32D6, 0x3C04}, // RESERVED_MFR_32D6
{0x32DC, 0x370A}, // RESERVED_MFR_32DC
{0x30B0, 0x0800}, // DIGITAL_TEST
{0x302A, 0x0006}, // VT_PIX_CLK_DIV
{0x302C, 0x0001}, // VT_SYS_CLK_DIV
{0x302E, 0x0002}, // PRE_PLL_CLK_DIV
{0x3030, 0x002C}, // PLL_MULTIPLIER
{0x3036, 0x000A}, // OP_WORD_CLK_DIV
{0x3038, 0x0001}, // OP_SYS_CLK_DIV
{0x30B0, 0x0800}, // DIGITAL_TEST
{0x30A2, 0x0001}, // X_ODD_INC_
{0x30A6, 0x0001}, // Y_ODD_INC_
{0x3040, 0x0000}, // READ_MODE C000?
{0x30BA, 0x11F2}, // DIGITAL_CTRL
{0x3044, 0x0400}, // DARK_CONTROL
{0x3064, 0x1802}, // SMIA_TEST
{0x33E0, 0x0C80}, // TEST_ASIL_ROWS
{0x3180, 0x0080}, // RESERVED_MFR_3180
{0x33E4, 0x0080}, // RESERVED_MFR_33E4
{0x33E0, 0x0C80}, // TEST_ASIL_ROWS
{0x33E0, 0x0C80}, // TEST_ASIL_ROWS
{0x3004, 0x0000}, // X_ADDR_START_
{0x3008, 0x0787}, // X_ADDR_END_
{0x3002, 0x0000}, // Y_ADDR_START_
{0x3006, 0x04B7}, // Y_ADDR_END_
{0x3032, 0x0000}, // SCALING_MODE
{0x3400, 0x0010}, // RESERVED_MFR_3400
{0x3402, 0x0788}, // X_OUTPUT_CONTROL
{0x3402, 0x0F10}, // X_OUTPUT_CONTROL
{0x3404, 0x04B8}, // Y_OUTPUT_CONTROL
{0x3404, 0x0970}, // Y_OUTPUT_CONTROL
{0x30BA, 0x11F3}, // DIGITAL_CTRL
// end SEQ_DATA_PORT // FPS = 88e6 / 0x09C4 / 0x06E0 = 20
{0x32e6,0xe0}, {0x300C, 0x09C4}, // LINE_LENGTH_PCK_
{0x300A, 0x06E0}, // FRAME_LENGTH_LINES_
{0x3042, 0x0000}, // EXTRA_DELAY
// exposure time // Readout Settings
{0x1008,0x36f}, {0x31AE, 0x0204}, // SERIAL_FORMAT, 4-lane MIPI
{0x100c,0x58f}, {0x31AC, 0x0C0A}, // DATA_FORMAT_BITS, 12 -> 10
{0x100e,0x7af}, {0x3342, 0x122B}, // MIPI_F1_PDT_EDT
{0x1010,0x14f}, {0x3346, 0x122B}, // MIPI_F2_PDT_EDT
{0x3230,0x312}, {0x334A, 0x122B}, // MIPI_F3_PDT_EDT
{0x3232,0x532}, {0x334E, 0x122B}, // MIPI_F4_PDT_EDT
{0x3234,0x752}, {0x3344, 0x0011}, // MIPI_F1_VDT_VC
{0x3236,0xf2}, {0x3348, 0x0111}, // MIPI_F2_VDT_VC
{0x334C, 0x0211}, // MIPI_F3_VDT_VC
{0x3350, 0x0311}, // MIPI_F4_VDT_VC
{0x31B0, 0x0049}, // FRAME_PREAMBLE
{0x31B2, 0x0033}, // LINE_PREAMBLE
{0x31B4, 0x2185}, // RESERVED_MFR_31B4
{0x31B6, 0x1146}, // RESERVED_MFR_31B6
{0x31B8, 0x3047}, // RESERVED_MFR_31B8
{0x31BA, 0x0186}, // RESERVED_MFR_31BA
{0x31BC, 0x0805}, // RESERVED_MFR_31BC
{0x301A, 0x001C}, // RESET_REGISTER
{0x3566, 0x0}, // HDR Settings
{0x32D0, 0x3A02}, {0x3082, 0x0004}, // OPERATION_MODE_CTRL
{0x32D2, 0x3508}, {0x3238, 0x0222}, // EXPOSURE_RATIO
{0x32D4, 0x3702}, {0x3014, 0x098E}, // FINE_INTEGRATION_TIME_
{0x32D6, 0x3C04}, {0x321E, 0x098E}, // FINE_INTEGRATION_TIME2
{0x32DC, 0x370A}, {0x3222, 0x098E}, // FINE_INTEGRATION_TIME3
{0x30b0, 0x200}, {0x3226, 0x098E}, // FINE_INTEGRATION_TIME4
{0x3082, 0x0}, {0x30B0, 0x0800}, // DIGITAL_TEST
{0x33E0, 0x0080}, {0x32EA, 0x3C0E}, // RESERVED_MFR_32EA
{0x3180, 0x0080}, {0x32EC, 0x72A1}, // RESERVED_MFR_32EC
{0x33E4, 0x0080}, {0x31D0, 0x0001}, // COMPANDING
{0x33E0, 0x0C00},
{0x33E0, 0x0000},
{0x31B4, 0x2185}, // Initial Gains
{0x31B6, 0x1146}, {0x3022, 0x01}, // GROUPED_PARAMETER_HOLD_
{0x31B8, 0x3047}, {0x3366, 0x9999}, // ANALOG_GAIN
{0x3060, 0xAAAA}, // ANALOG_COLOR_GAIN
{0x31BA, 0x186}, {0x305A, 0x00BB}, // RED_GAIN
{0x31BC, 0x805}, {0x3058, 0x012A}, // BLUE_GAIN
{0x3056, 0x0080}, // GREEN1_GAIN
// additions {0x305C, 0x0080}, // GREEN2_GAIN
// mipi + 4 lanes {0x3022, 0x00}, // GROUPED_PARAMETER_HOLD_
{0x31AE, 0x0204},
// DATA_FORMAT_RAW = 12
// DATA_FORMAT_OUTPUT = 0?
//{0x31AC, 0x0C08},
{0x31AC, 0x0C0A},
// 0x2B = CSI_RAW10
{0x3342, 0x122B},
{0x3346, 0x122B},
{0x334a, 0x122B},
{0x334e, 0x122B},
// 10-bit
{0x3036, 0xA},
}; };
struct i2c_random_wr_payload poke_array_ov7750[] = { struct i2c_random_wr_payload poke_array_ov7750[] = {

@ -0,0 +1,28 @@
#!/usr/bin/env python
import numpy as np
import cv2
from time import time, sleep
H, W = (604, 964)
if __name__ == '__main__':
import zmq
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://192.168.2.221:7768")
while True:
try:
message = socket.recv()
except Exception as ex:
print(ex)
message = b"123"
dat = np.frombuffer(message, dtype=np.uint8)
b = dat[::3].reshape(H, W)
g = dat[1::3].reshape(H, W)
r = dat[2::3].reshape(H, W)
rgb = cv2.merge((r, g, b))
rgb = cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR)
cv2.imshow('RGB',rgb)
cv2.waitKey(20)
dat.tofile('/tmp/c3rgb.img')

@ -0,0 +1,24 @@
#!/usr/bin/env python
import numpy as np
import cv2
from time import time, sleep
H, W = (256, 512)
if __name__ == '__main__':
import zmq
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://192.168.2.221:7769")
while True:
try:
message = socket.recv()
except Exception as ex:
print(ex)
message = b"123"
dat = np.frombuffer(message, dtype=np.float32)
mc = (dat.reshape(H//2, W//2) * 128 + 128).astype(np.uint8)
cv2.imshow('model fov', mc)
cv2.waitKey(20)
dat.tofile('/home/batman/c3yuv.img')

@ -1,7 +1,7 @@
Import('env', 'arch', 'messaging', 'common', 'gpucommon', 'visionipc') Import('env', 'arch', 'messaging', 'common', 'gpucommon', 'visionipc')
lenv = env.Clone() lenv = env.Clone()
libs = [messaging, common, 'OpenCL', 'SNPE', 'capnp', 'zmq', 'kj', 'yuv', gpucommon, visionipc] libs = [messaging, common, 'OpenCL', 'SNPE', 'capnp', 'zmq', 'czmq', 'kj', 'yuv', gpucommon, visionipc]
common_src = [ common_src = [
"models/commonmodel.c", "models/commonmodel.c",
@ -13,6 +13,9 @@ if arch == "aarch64":
libs += ['gsl', 'CB', 'gnustl_shared'] libs += ['gsl', 'CB', 'gnustl_shared']
elif arch == "larch64": elif arch == "larch64":
libs += ['gsl', 'CB', 'symphony-cpu', 'pthread'] libs += ['gsl', 'CB', 'symphony-cpu', 'pthread']
# no screen
lenv['CFLAGS'].append("-DNOSCREEN")
lenv['CXXFLAGS'].append("-DNOSCREEN")
else: else:
libs += ['symphony-cpu', 'pthread'] libs += ['symphony-cpu', 'pthread']

@ -1,5 +1,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <czmq.h>
#include <eigen3/Eigen/Dense> #include <eigen3/Eigen/Dense>
#include "common/visionbuf.h" #include "common/visionbuf.h"
@ -41,11 +42,19 @@ void* live_thread(void *arg) {
-1.09890110e-03, 0.00000000e+00, 2.81318681e-01, -1.09890110e-03, 0.00000000e+00, 2.81318681e-01,
-1.84808520e-20, 9.00738606e-04,-4.28751576e-02; -1.84808520e-20, 9.00738606e-04,-4.28751576e-02;
#ifndef QCOM2
Eigen::Matrix<float, 3, 3> eon_intrinsics; Eigen::Matrix<float, 3, 3> eon_intrinsics;
eon_intrinsics << eon_intrinsics <<
910.0, 0.0, 582.0, 910.0, 0.0, 582.0,
0.0, 910.0, 437.0, 0.0, 910.0, 437.0,
0.0, 0.0, 1.0; 0.0, 0.0, 1.0;
#else
Eigen::Matrix<float, 3, 3> eon_intrinsics;
eon_intrinsics <<
1484.0, 0.0, 482.0,
0.0, 1484.0, 302.0,
0.0, 0.0, 1.0;
#endif
while (!do_exit) { while (!do_exit) {
for (auto sock : poller->poll(10)){ for (auto sock : poller->poll(10)){
@ -245,6 +254,10 @@ int main(int argc, char **argv) {
delete pathplan_sock; delete pathplan_sock;
delete msg_context; delete msg_context;
#ifdef NOSCREEN
zsock_destroy(&model.yuv_sock)
#endif
model_free(&model); model_free(&model);
LOG("joining live_thread"); LOG("joining live_thread");

@ -42,6 +42,12 @@ void model_init(ModelState* s, cl_device_id device_id, cl_context context, int t
s->m = new DefaultRunModel("../../models/supercombo.dlc", s->output, output_size, USE_GPU_RUNTIME); s->m = new DefaultRunModel("../../models/supercombo.dlc", s->output, output_size, USE_GPU_RUNTIME);
#ifdef NOSCREEN
zsock_t *yuv_sock = zsock_new_push("tcp://192.168.2.221:7769");
assert(yuv_sock);
s->yuv_sock = yuv_sock;
#endif
#ifdef TEMPORAL #ifdef TEMPORAL
assert(temporal); assert(temporal);
s->m->addRecurrent(&s->output[OUTPUT_SIZE], TEMPORAL_SIZE); s->m->addRecurrent(&s->output[OUTPUT_SIZE], TEMPORAL_SIZE);
@ -117,6 +123,13 @@ ModelDataRaw model_eval_frame(ModelState* s, cl_command_queue q,
assert(1==2); assert(1==2);
#endif #endif
#ifdef NOSCREEN
int err, err2;
err = zmq_send(zsock_resolve(s->yuv_sock), new_frame_buf, sizeof(float)*(MODEL_HEIGHT*MODEL_WIDTH*3/2)/6, ZMQ_DONTWAIT); // y1
err2 = zmq_errno();
printf("zmq errcode %d, %d\n", err ,err2);
#endif
clEnqueueUnmapMemObject(q, s->frame.net_input, (void*)new_frame_buf, 0, NULL, NULL); clEnqueueUnmapMemObject(q, s->frame.net_input, (void*)new_frame_buf, 0, NULL, NULL);
// net outputs // net outputs

@ -63,6 +63,9 @@ typedef struct ModelState {
#ifdef TRAFFIC_CONVENTION #ifdef TRAFFIC_CONVENTION
float *traffic_convention; float *traffic_convention;
#endif #endif
#ifdef NOSCREEN
zsock_t *yuv_sock;
#endif
} ModelState; } ModelState;
void model_init(ModelState* s, cl_device_id device_id, void model_init(ModelState* s, cl_device_id device_id,

@ -10,7 +10,7 @@ void PrintErrorStringAndExit() {
} }
SNPEModel::SNPEModel(const char *path, float *output, size_t output_size, int runtime) { SNPEModel::SNPEModel(const char *path, float *output, size_t output_size, int runtime) {
#ifdef QCOM #if defined(QCOM) || defined(QCOM2)
zdl::DlSystem::Runtime_t Runtime; zdl::DlSystem::Runtime_t Runtime;
if (runtime==USE_GPU_RUNTIME) { if (runtime==USE_GPU_RUNTIME) {
Runtime = zdl::DlSystem::Runtime_t::GPU; Runtime = zdl::DlSystem::Runtime_t::GPU;
@ -33,7 +33,7 @@ SNPEModel::SNPEModel(const char *path, float *output, size_t output_size, int ru
// create model runner // create model runner
zdl::SNPE::SNPEBuilder snpeBuilder(container.get()); zdl::SNPE::SNPEBuilder snpeBuilder(container.get());
while (!snpe) { while (!snpe) {
#ifdef QCOM #if defined(QCOM) || defined(QCOM2)
snpe = snpeBuilder.setOutputLayers({}) snpe = snpeBuilder.setOutputLayers({})
.setRuntimeProcessor(Runtime) .setRuntimeProcessor(Runtime)
.setUseUserSuppliedBuffers(true) .setUseUserSuppliedBuffers(true)

Loading…
Cancel
Save