sensor.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*
  2. * This file is part of the OpenMV project.
  3. * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
  4. * This work is licensed under the MIT license, see the file LICENSE for details.
  5. *
  6. * Sensor abstraction layer.
  7. *
  8. */
  9. #ifndef __SENSOR_H__
  10. #define __SENSOR_H__
  11. #include <stdint.h>
  12. #define OV9650_PID (0x96)
  13. #define OV2640_PID (0x26)
  14. #define OV7725_PID (0x77)
  15. #define OV3660_PID (0x36)
  16. typedef enum {
  17. PIXFORMAT_RGB565, // 2BPP/RGB565
  18. PIXFORMAT_YUV422, // 2BPP/YUV422
  19. PIXFORMAT_GRAYSCALE, // 1BPP/GRAYSCALE
  20. PIXFORMAT_JPEG, // JPEG/COMPRESSED
  21. PIXFORMAT_RGB888, // 3BPP/RGB888
  22. PIXFORMAT_RAW, // RAW
  23. PIXFORMAT_RGB444, // 3BP2P/RGB444
  24. PIXFORMAT_RGB555, // 3BP2P/RGB555
  25. } pixformat_t;
  26. typedef enum {
  27. FRAMESIZE_QQVGA, // 160x120
  28. FRAMESIZE_QQVGA2, // 128x160
  29. FRAMESIZE_QCIF, // 176x144
  30. FRAMESIZE_HQVGA, // 240x176
  31. FRAMESIZE_QVGA, // 320x240
  32. FRAMESIZE_CIF, // 400x296
  33. FRAMESIZE_VGA, // 640x480
  34. FRAMESIZE_SVGA, // 800x600
  35. FRAMESIZE_XGA, // 1024x768
  36. FRAMESIZE_SXGA, // 1280x1024
  37. FRAMESIZE_UXGA, // 1600x1200
  38. FRAMESIZE_QXGA, // 2048*1536
  39. FRAMESIZE_INVALID
  40. } framesize_t;
  41. typedef enum {
  42. GAINCEILING_2X,
  43. GAINCEILING_4X,
  44. GAINCEILING_8X,
  45. GAINCEILING_16X,
  46. GAINCEILING_32X,
  47. GAINCEILING_64X,
  48. GAINCEILING_128X,
  49. } gainceiling_t;
  50. typedef struct {
  51. uint8_t MIDH;
  52. uint8_t MIDL;
  53. uint8_t PID;
  54. uint8_t VER;
  55. } sensor_id_t;
  56. typedef struct {
  57. framesize_t framesize;//0 - 10
  58. uint8_t quality;//0 - 63
  59. int8_t brightness;//-2 - 2
  60. int8_t contrast;//-2 - 2
  61. int8_t saturation;//-2 - 2
  62. int8_t sharpness;//-2 - 2
  63. uint8_t denoise;
  64. uint8_t special_effect;//0 - 6
  65. uint8_t wb_mode;//0 - 4
  66. uint8_t awb;
  67. uint8_t awb_gain;
  68. uint8_t aec;
  69. uint8_t aec2;
  70. int8_t ae_level;//-2 - 2
  71. uint16_t aec_value;//0 - 1200
  72. uint8_t agc;
  73. uint8_t agc_gain;//0 - 30
  74. uint8_t gainceiling;//0 - 6
  75. uint8_t bpc;
  76. uint8_t wpc;
  77. uint8_t raw_gma;
  78. uint8_t lenc;
  79. uint8_t hmirror;
  80. uint8_t vflip;
  81. uint8_t dcw;
  82. uint8_t colorbar;
  83. } camera_status_t;
  84. typedef struct _sensor sensor_t;
  85. typedef struct _sensor {
  86. sensor_id_t id; // Sensor ID.
  87. uint8_t slv_addr; // Sensor I2C slave address.
  88. pixformat_t pixformat;
  89. camera_status_t status;
  90. int xclk_freq_hz;
  91. // Sensor function pointers
  92. int (*init_status) (sensor_t *sensor);
  93. int (*reset) (sensor_t *sensor);
  94. int (*set_pixformat) (sensor_t *sensor, pixformat_t pixformat);
  95. int (*set_framesize) (sensor_t *sensor, framesize_t framesize);
  96. int (*set_contrast) (sensor_t *sensor, int level);
  97. int (*set_brightness) (sensor_t *sensor, int level);
  98. int (*set_saturation) (sensor_t *sensor, int level);
  99. int (*set_sharpness) (sensor_t *sensor, int level);
  100. int (*set_denoise) (sensor_t *sensor, int level);
  101. int (*set_gainceiling) (sensor_t *sensor, gainceiling_t gainceiling);
  102. int (*set_quality) (sensor_t *sensor, int quality);
  103. int (*set_colorbar) (sensor_t *sensor, int enable);
  104. int (*set_whitebal) (sensor_t *sensor, int enable);
  105. int (*set_gain_ctrl) (sensor_t *sensor, int enable);
  106. int (*set_exposure_ctrl) (sensor_t *sensor, int enable);
  107. int (*set_hmirror) (sensor_t *sensor, int enable);
  108. int (*set_vflip) (sensor_t *sensor, int enable);
  109. int (*set_aec2) (sensor_t *sensor, int enable);
  110. int (*set_awb_gain) (sensor_t *sensor, int enable);
  111. int (*set_agc_gain) (sensor_t *sensor, int gain);
  112. int (*set_aec_value) (sensor_t *sensor, int gain);
  113. int (*set_special_effect) (sensor_t *sensor, int effect);
  114. int (*set_wb_mode) (sensor_t *sensor, int mode);
  115. int (*set_ae_level) (sensor_t *sensor, int level);
  116. int (*set_dcw) (sensor_t *sensor, int enable);
  117. int (*set_bpc) (sensor_t *sensor, int enable);
  118. int (*set_wpc) (sensor_t *sensor, int enable);
  119. int (*set_raw_gma) (sensor_t *sensor, int enable);
  120. int (*set_lenc) (sensor_t *sensor, int enable);
  121. } sensor_t;
  122. // Resolution table (in camera.c)
  123. extern const int resolution[][2];
  124. #endif /* __SENSOR_H__ */