/* * This file is part of the OpenMV project. * * Copyright (c) 2013-2021 Ibrahim Abdelkader * Copyright (c) 2013-2021 Kwabena W. Agyeman * * This work is licensed under the MIT license, see the file LICENSE for details. * * Sensor abstraction layer. */ #ifndef __SENSOR_H__ #define __SENSOR_H__ #include #include "cambus.h" #include "imlib.h" #define OV2640_SLV_ADDR (0x60) #define OV5640_SLV_ADDR (0x78) #define OV7725_SLV_ADDR (0x42) #define MT9V034_SLV_ADDR (0xB8) #define MT9M114_SLV_ADDR (0x90) #define LEPTON_SLV_ADDR (0x54) #define HM01B0_SLV_ADDR (0x48) #define GC2145_SLV_ADDR (0x78) // Chip ID Registers #define OV5640_CHIP_ID (0x300A) #define OV_CHIP_ID (0x0A) #define ON_CHIP_ID (0x00) #define HIMAX_CHIP_ID (0x0001) #define GC_CHIP_ID (0xF0) // Chip ID Values #define OV2640_ID (0x26) #define OV5640_ID (0x56) #define OV7670_ID (0x76) #define OV7690_ID (0x76) #define OV7725_ID (0x77) #define OV9650_ID (0x96) #define MT9V034_ID (0x13) #define MT9M114_ID (0x81) #define LEPTON_ID (0x54) #define HM01B0_ID (0xB0) #define GC2145_ID (0x21) typedef enum { FRAMESIZE_INVALID = 0, // C/SIF Resolutions FRAMESIZE_QQCIF, // 88x72 FRAMESIZE_QCIF, // 176x144 FRAMESIZE_CIF, // 352x288 FRAMESIZE_QQSIF, // 88x60 FRAMESIZE_QSIF, // 176x120 FRAMESIZE_SIF, // 352x240 // VGA Resolutions FRAMESIZE_QQQQVGA, // 40x30 FRAMESIZE_QQQVGA, // 80x60 FRAMESIZE_QQVGA, // 160x120 FRAMESIZE_QVGA, // 320x240 FRAMESIZE_VGA, // 640x480 FRAMESIZE_HQQQQVGA, // 30x20 FRAMESIZE_HQQQVGA, // 60x40 FRAMESIZE_HQQVGA, // 120x80 FRAMESIZE_HQVGA, // 240x160 FRAMESIZE_HVGA, // 480x320 // FFT Resolutions FRAMESIZE_64X32, // 64x32 FRAMESIZE_64X64, // 64x64 FRAMESIZE_128X64, // 128x64 FRAMESIZE_128X128, // 128x128 // Himax Resolutions FRAMESIZE_160X160, // 160x160 FRAMESIZE_320X320, // 320x320 // Other FRAMESIZE_LCD, // 128x160 FRAMESIZE_QQVGA2, // 128x160 FRAMESIZE_WVGA, // 720x480 FRAMESIZE_WVGA2, // 752x480 FRAMESIZE_SVGA, // 800x600 FRAMESIZE_XGA, // 1024x768 FRAMESIZE_SXGA, // 1280x1024 FRAMESIZE_UXGA, // 1600x1200 FRAMESIZE_HD, // 1280x720 FRAMESIZE_FHD, // 1920x1080 FRAMESIZE_QHD, // 2560x1440 FRAMESIZE_QXGA, // 2048x1536 FRAMESIZE_WQXGA, // 2560x1600 FRAMESIZE_WQXGA2, // 2592x1944 } framesize_t; typedef enum { GAINCEILING_2X, GAINCEILING_4X, GAINCEILING_8X, GAINCEILING_16X, GAINCEILING_32X, GAINCEILING_64X, GAINCEILING_128X, } gainceiling_t; typedef enum { SDE_NORMAL, SDE_NEGATIVE, } sde_t; typedef enum { ATTR_CONTRAST=0, ATTR_BRIGHTNESS, ATTR_SATURATION, ATTR_GAINCEILING, } sensor_attr_t; typedef enum { ACTIVE_LOW, ACTIVE_HIGH } polarity_t; typedef enum { IOCTL_SET_READOUT_WINDOW, IOCTL_GET_READOUT_WINDOW, IOCTL_SET_TRIGGERED_MODE, IOCTL_GET_TRIGGERED_MODE, IOCTL_TRIGGER_AUTO_FOCUS, IOCTL_PAUSE_AUTO_FOCUS, IOCTL_RESET_AUTO_FOCUS, IOCTL_WAIT_ON_AUTO_FOCUS, IOCTL_LEPTON_GET_WIDTH, IOCTL_LEPTON_GET_HEIGHT, IOCTL_LEPTON_GET_RADIOMETRY, IOCTL_LEPTON_GET_REFRESH, IOCTL_LEPTON_GET_RESOLUTION, IOCTL_LEPTON_RUN_COMMAND, IOCTL_LEPTON_SET_ATTRIBUTE, IOCTL_LEPTON_GET_ATTRIBUTE, IOCTL_LEPTON_GET_FPA_TEMPERATURE, IOCTL_LEPTON_GET_AUX_TEMPERATURE, IOCTL_LEPTON_SET_MEASUREMENT_MODE, IOCTL_LEPTON_GET_MEASUREMENT_MODE, IOCTL_LEPTON_SET_MEASUREMENT_RANGE, IOCTL_LEPTON_GET_MEASUREMENT_RANGE, IOCTL_HIMAX_MD_ENABLE, IOCTL_HIMAX_MD_CLEAR, IOCTL_HIMAX_MD_WINDOW, IOCTL_HIMAX_MD_THRESHOLD, IOCTL_HIMAX_OSC_ENABLE, } ioctl_t; #define SENSOR_HW_FLAGS_VSYNC (0) // vertical sync polarity. #define SENSOR_HW_FLAGS_HSYNC (1) // horizontal sync polarity. #define SENSOR_HW_FLAGS_PIXCK (2) // pixel clock edge. #define SENSOR_HW_FLAGS_FSYNC (3) // hardware frame sync. #define SENSOR_HW_FLAGS_JPEGE (4) // hardware JPEG encoder. #define SENSOR_HW_FLAGS_RGB565_REV (5) // byte reverse rgb565. #define SENSOR_HW_FLAGS_GET(s, x) ((s)->hw_flags & (1<hw_flags |= (v<hw_flags &= ~(1<