/* * This file is part of the OpenMV project. * Copyright (c) 2013/2014 Ibrahim Abdelkader * This work is licensed under the MIT license, see the file LICENSE for details. * * Sensor abstraction layer. * */ #ifndef __SENSOR_H__ #define __SENSOR_H__ #include #define OV9650_PID (0x96) #define OV2640_PID (0x26) #define OV7725_PID (0x77) typedef struct { uint8_t MIDH; uint8_t MIDL; uint8_t PID; uint8_t VER; } sensor_id_t; typedef enum { PIXFORMAT_RGB565, // 2BPP/RGB565 PIXFORMAT_YUV422, // 2BPP/YUV422 PIXFORMAT_GRAYSCALE, // 1BPP/GRAYSCALE PIXFORMAT_JPEG, // JPEG/COMPRESSED PIXFORMAT_RGB888, // 3BPP/RGB888 } pixformat_t; typedef enum { FRAMESIZE_40x30, // 40x30 FRAMESIZE_64x32, // 64x32 FRAMESIZE_64x64, // 64x64 FRAMESIZE_QQCIF, // 88x72 FRAMESIZE_QQVGA, // 160x120 FRAMESIZE_QQVGA2, // 128x160 FRAMESIZE_QCIF, // 176x144 FRAMESIZE_HQVGA, // 220x160 FRAMESIZE_QVGA, // 320x240 FRAMESIZE_CIF, // 400x296 FRAMESIZE_VGA, // 640x480 FRAMESIZE_SVGA, // 800x600 FRAMESIZE_XGA, // 1024x768 FRAMESIZE_SXGA, // 1280x1024 FRAMESIZE_UXGA, // 1600x1200 } framesize_t; typedef enum { FRAMERATE_2FPS =0x9F, FRAMERATE_8FPS =0x87, FRAMERATE_15FPS=0x83, FRAMERATE_30FPS=0x81, FRAMERATE_60FPS=0x80, } framerate_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 } reset_polarity_t; typedef void (*line_filter_t) (uint8_t *src, int src_stride, uint8_t *dst, int dst_stride, void *args); #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_GET(s, x) ((s)->hw_flags & (1<hw_flags |= (v<hw_flags &= ~(1<