Explorar el Código

remove esp32-camera-master files

CaCO3 hace 3 años
padre
commit
fb03dba60c
Se han modificado 58 ficheros con 0 adiciones y 13544 borrados
  1. 0 27
      code/components/esp32-camera-master/.github/workflows/stale.yml
  2. 0 5
      code/components/esp32-camera-master/.gitignore
  3. 0 202
      code/components/esp32-camera-master/LICENSE
  4. 0 4
      code/components/esp32-camera-master/component.mk
  5. 0 43
      code/components/esp32-camera-master/conversions/include/esp_jpg_decode.h
  6. 0 130
      code/components/esp32-camera-master/conversions/include/img_converters.h
  7. 0 142
      code/components/esp32-camera-master/conversions/private_include/jpge.h
  8. 0 29
      code/components/esp32-camera-master/conversions/private_include/yuv.h
  9. 0 298
      code/components/esp32-camera-master/conversions/yuv.c
  10. 0 60
      code/components/esp32-camera-master/driver/private_include/cam_hal.h
  11. 0 9
      code/components/esp32-camera-master/driver/private_include/xclk.h
  12. 0 9
      code/components/esp32-camera-master/examples/CMakeLists.txt
  13. 0 3
      code/components/esp32-camera-master/examples/main/CMakeLists.txt
  14. 0 5
      code/components/esp32-camera-master/examples/main/component.mk
  15. 0 17
      code/components/esp32-camera-master/examples/sdkconfig.defaults
  16. 0 26
      code/components/esp32-camera-master/library.json
  17. 0 541
      code/components/esp32-camera-master/sensors/bf3005.c
  18. 0 391
      code/components/esp32-camera-master/sensors/gc032a.c
  19. 0 477
      code/components/esp32-camera-master/sensors/gc2145.c
  20. 0 1022
      code/components/esp32-camera-master/sensors/nt99141.c
  21. 0 612
      code/components/esp32-camera-master/sensors/ov2640.c
  22. 0 1053
      code/components/esp32-camera-master/sensors/ov3660.c
  23. 0 1130
      code/components/esp32-camera-master/sensors/ov5640.c
  24. 0 457
      code/components/esp32-camera-master/sensors/ov7670.c
  25. 0 575
      code/components/esp32-camera-master/sensors/ov7725.c
  26. 0 33
      code/components/esp32-camera-master/sensors/private_include/bf3005.h
  27. 0 337
      code/components/esp32-camera-master/sensors/private_include/bf3005_regs.h
  28. 0 31
      code/components/esp32-camera-master/sensors/private_include/gc0308.h
  29. 0 25
      code/components/esp32-camera-master/sensors/private_include/gc0308_regs.h
  30. 0 31
      code/components/esp32-camera-master/sensors/private_include/gc032a.h
  31. 0 82
      code/components/esp32-camera-master/sensors/private_include/gc032a_regs.h
  32. 0 401
      code/components/esp32-camera-master/sensors/private_include/gc032a_settings.h
  33. 0 27
      code/components/esp32-camera-master/sensors/private_include/gc2145.h
  34. 0 85
      code/components/esp32-camera-master/sensors/private_include/gc2145_regs.h
  35. 0 719
      code/components/esp32-camera-master/sensors/private_include/gc2145_settings.h
  36. 0 34
      code/components/esp32-camera-master/sensors/private_include/nt99141.h
  37. 0 211
      code/components/esp32-camera-master/sensors/private_include/nt99141_regs.h
  38. 0 825
      code/components/esp32-camera-master/sensors/private_include/nt99141_settings.h
  39. 0 32
      code/components/esp32-camera-master/sensors/private_include/ov2640.h
  40. 0 216
      code/components/esp32-camera-master/sensors/private_include/ov2640_regs.h
  41. 0 485
      code/components/esp32-camera-master/sensors/private_include/ov2640_settings.h
  42. 0 34
      code/components/esp32-camera-master/sensors/private_include/ov3660.h
  43. 0 211
      code/components/esp32-camera-master/sensors/private_include/ov3660_regs.h
  44. 0 318
      code/components/esp32-camera-master/sensors/private_include/ov3660_settings.h
  45. 0 27
      code/components/esp32-camera-master/sensors/private_include/ov5640.h
  46. 0 213
      code/components/esp32-camera-master/sensors/private_include/ov5640_regs.h
  47. 0 33
      code/components/esp32-camera-master/sensors/private_include/ov7670.h
  48. 0 354
      code/components/esp32-camera-master/sensors/private_include/ov7670_regs.h
  49. 0 33
      code/components/esp32-camera-master/sensors/private_include/ov7725.h
  50. 0 335
      code/components/esp32-camera-master/sensors/private_include/ov7725_regs.h
  51. 0 99
      code/components/esp32-camera-master/target/esp32s2/private_include/tjpgd.h
  52. 0 970
      code/components/esp32-camera-master/target/esp32s2/tjpgd.c
  53. 0 64
      code/components/esp32-camera-master/target/xclk.c
  54. 0 4
      code/components/esp32-camera-master/test/CMakeLists.txt
  55. 0 8
      code/components/esp32-camera-master/test/component.mk
  56. BIN
      code/components/esp32-camera-master/test/pictures/test_inside.jpeg
  57. BIN
      code/components/esp32-camera-master/test/pictures/test_outside.jpeg
  58. BIN
      code/components/esp32-camera-master/test/pictures/testimg.jpeg

+ 0 - 27
code/components/esp32-camera-master/.github/workflows/stale.yml

@@ -1,27 +0,0 @@
-# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
-#
-# You can adjust the behavior by modifying this file.
-# For more information, see:
-# https://github.com/actions/stale
-name: Mark stale issues and pull requests
-
-on:
-  schedule:
-  - cron: '20 9 * * *'
-
-jobs:
-  stale:
-
-    runs-on: ubuntu-latest
-    permissions:
-      issues: write
-      pull-requests: write
-
-    steps:
-    - uses: actions/stale@v3
-      with:
-        repo-token: ${{ secrets.GITHUB_TOKEN }}
-        stale-issue-message: 'This issue appears to be stale. Please close it if its no longer valid.'
-        stale-pr-message: 'This pull request appears to be stale. Please close it if its no longer valid.'
-        stale-issue-label: 'no-issue-activity'
-        stale-pr-label: 'no-pr-activity'

+ 0 - 5
code/components/esp32-camera-master/.gitignore

@@ -1,5 +0,0 @@
-*.DS_Store
-.vscode
-**/build
-**/sdkconfig
-**/sdkconfig.old

+ 0 - 202
code/components/esp32-camera-master/LICENSE

@@ -1,202 +0,0 @@
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

+ 0 - 4
code/components/esp32-camera-master/component.mk

@@ -1,4 +0,0 @@
-COMPONENT_ADD_INCLUDEDIRS := driver/include conversions/include
-COMPONENT_PRIV_INCLUDEDIRS := driver/private_include conversions/private_include sensors/private_include target/private_include
-COMPONENT_SRCDIRS := driver conversions sensors target target/esp32
-CXXFLAGS += -fno-rtti

+ 0 - 43
code/components/esp32-camera-master/conversions/include/esp_jpg_decode.h

@@ -1,43 +0,0 @@
-// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#ifndef _ESP_JPG_DECODE_H_
-#define _ESP_JPG_DECODE_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include "esp_err.h"
-
-typedef enum {
-    JPG_SCALE_NONE,
-    JPG_SCALE_2X,
-    JPG_SCALE_4X,
-    JPG_SCALE_8X,
-    JPG_SCALE_MAX = JPG_SCALE_8X
-} jpg_scale_t;
-
-typedef size_t (* jpg_reader_cb)(void * arg, size_t index, uint8_t *buf, size_t len);
-typedef bool (* jpg_writer_cb)(void * arg, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *data);
-
-esp_err_t esp_jpg_decode(size_t len, jpg_scale_t scale, jpg_reader_cb reader, jpg_writer_cb writer, void * arg);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _ESP_JPG_DECODE_H_ */

+ 0 - 130
code/components/esp32-camera-master/conversions/include/img_converters.h

@@ -1,130 +0,0 @@
-// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#ifndef _IMG_CONVERTERS_H_
-#define _IMG_CONVERTERS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include "esp_camera.h"
-#include "esp_jpg_decode.h"
-
-typedef size_t (* jpg_out_cb)(void * arg, size_t index, const void* data, size_t len);
-
-/**
- * @brief Convert image buffer to JPEG
- *
- * @param src       Source buffer in RGB565, RGB888, YUYV or GRAYSCALE format
- * @param src_len   Length in bytes of the source buffer
- * @param width     Width in pixels of the source image
- * @param height    Height in pixels of the source image
- * @param format    Format of the source image
- * @param quality   JPEG quality of the resulting image
- * @param cp        Callback to be called to write the bytes of the output JPEG
- * @param arg       Pointer to be passed to the callback
- *
- * @return true on success
- */
-bool fmt2jpg_cb(uint8_t *src, size_t src_len, uint16_t width, uint16_t height, pixformat_t format, uint8_t quality, jpg_out_cb cb, void * arg);
-
-/**
- * @brief Convert camera frame buffer to JPEG
- *
- * @param fb        Source camera frame buffer
- * @param quality   JPEG quality of the resulting image
- * @param cp        Callback to be called to write the bytes of the output JPEG
- * @param arg       Pointer to be passed to the callback
- *
- * @return true on success
- */
-bool frame2jpg_cb(camera_fb_t * fb, uint8_t quality, jpg_out_cb cb, void * arg);
-
-/**
- * @brief Convert image buffer to JPEG buffer
- *
- * @param src       Source buffer in RGB565, RGB888, YUYV or GRAYSCALE format
- * @param src_len   Length in bytes of the source buffer
- * @param width     Width in pixels of the source image
- * @param height    Height in pixels of the source image
- * @param format    Format of the source image
- * @param quality   JPEG quality of the resulting image
- * @param out       Pointer to be populated with the address of the resulting buffer.
- *                  You MUST free the pointer once you are done with it.
- * @param out_len   Pointer to be populated with the length of the output buffer
- *
- * @return true on success
- */
-bool fmt2jpg(uint8_t *src, size_t src_len, uint16_t width, uint16_t height, pixformat_t format, uint8_t quality, uint8_t ** out, size_t * out_len);
-
-/**
- * @brief Convert camera frame buffer to JPEG buffer
- *
- * @param fb        Source camera frame buffer
- * @param quality   JPEG quality of the resulting image
- * @param out       Pointer to be populated with the address of the resulting buffer
- * @param out_len   Pointer to be populated with the length of the output buffer
- *
- * @return true on success
- */
-bool frame2jpg(camera_fb_t * fb, uint8_t quality, uint8_t ** out, size_t * out_len);
-
-/**
- * @brief Convert image buffer to BMP buffer
- *
- * @param src       Source buffer in JPEG, RGB565, RGB888, YUYV or GRAYSCALE format
- * @param src_len   Length in bytes of the source buffer
- * @param width     Width in pixels of the source image
- * @param height    Height in pixels of the source image
- * @param format    Format of the source image
- * @param out       Pointer to be populated with the address of the resulting buffer
- * @param out_len   Pointer to be populated with the length of the output buffer
- *
- * @return true on success
- */
-bool fmt2bmp(uint8_t *src, size_t src_len, uint16_t width, uint16_t height, pixformat_t format, uint8_t ** out, size_t * out_len);
-
-/**
- * @brief Convert camera frame buffer to BMP buffer
- *
- * @param fb        Source camera frame buffer
- * @param out       Pointer to be populated with the address of the resulting buffer
- * @param out_len   Pointer to be populated with the length of the output buffer
- *
- * @return true on success
- */
-bool frame2bmp(camera_fb_t * fb, uint8_t ** out, size_t * out_len);
-
-/**
- * @brief Convert image buffer to RGB888 buffer (used for face detection)
- *
- * @param src       Source buffer in JPEG, RGB565, RGB888, YUYV or GRAYSCALE format
- * @param src_len   Length in bytes of the source buffer
- * @param format    Format of the source image
- * @param rgb_buf   Pointer to the output buffer (width * height * 3)
- *
- * @return true on success
- */
-bool fmt2rgb888(const uint8_t *src_buf, size_t src_len, pixformat_t format, uint8_t * rgb_buf);
-
-bool jpg2rgb565(const uint8_t *src, size_t src_len, uint8_t * out, jpg_scale_t scale);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _IMG_CONVERTERS_H_ */

+ 0 - 142
code/components/esp32-camera-master/conversions/private_include/jpge.h

@@ -1,142 +0,0 @@
-// jpge.h - C++ class for JPEG compression.
-// Public domain, Rich Geldreich <richgel99@gmail.com>
-// Alex Evans: Added RGBA support, linear memory allocator.
-#ifndef JPEG_ENCODER_H
-#define JPEG_ENCODER_H
-
-namespace jpge
-{
-    typedef unsigned char  uint8;
-    typedef signed short   int16;
-    typedef signed int     int32;
-    typedef unsigned short uint16;
-    typedef unsigned int   uint32;
-    typedef unsigned int   uint;
-
-    // JPEG chroma subsampling factors. Y_ONLY (grayscale images) and H2V2 (color images) are the most common.
-    enum subsampling_t { Y_ONLY = 0, H1V1 = 1, H2V1 = 2, H2V2 = 3 };
-
-    // JPEG compression parameters structure.
-    struct params {
-            inline params() : m_quality(85), m_subsampling(H2V2) { }
-
-            inline bool check() const {
-                if ((m_quality < 1) || (m_quality > 100)) {
-                    return false;
-                }
-                if ((uint)m_subsampling > (uint)H2V2) {
-                    return false;
-                }
-                return true;
-            }
-
-            // Quality: 1-100, higher is better. Typical values are around 50-95.
-            int m_quality;
-
-            // m_subsampling:
-            // 0 = Y (grayscale) only
-            // 1 = H1V1 subsampling (YCbCr 1x1x1, 3 blocks per MCU)
-            // 2 = H2V1 subsampling (YCbCr 2x1x1, 4 blocks per MCU)
-            // 3 = H2V2 subsampling (YCbCr 4x1x1, 6 blocks per MCU-- very common)
-            subsampling_t m_subsampling;
-    };
-    
-    // Output stream abstract class - used by the jpeg_encoder class to write to the output stream.
-    // put_buf() is generally called with len==JPGE_OUT_BUF_SIZE bytes, but for headers it'll be called with smaller amounts.
-    class output_stream {
-        public:
-            virtual ~output_stream() { };
-            virtual bool put_buf(const void* Pbuf, int len) = 0;
-            virtual uint get_size() const = 0;
-    };
-    
-    // Lower level jpeg_encoder class - useful if more control is needed than the above helper functions.
-    class jpeg_encoder {
-        public:
-            jpeg_encoder();
-            ~jpeg_encoder();
-
-            // Initializes the compressor.
-            // pStream: The stream object to use for writing compressed data.
-            // params - Compression parameters structure, defined above.
-            // width, height  - Image dimensions.
-            // channels - May be 1, or 3. 1 indicates grayscale, 3 indicates RGB source data.
-            // Returns false on out of memory or if a stream write fails.
-            bool init(output_stream *pStream, int width, int height, int src_channels, const params &comp_params = params());
-
-            // Call this method with each source scanline.
-            // width * src_channels bytes per scanline is expected (RGB or Y format).
-            // You must call with NULL after all scanlines are processed to finish compression.
-            // Returns false on out of memory or if a stream write fails.
-            bool process_scanline(const void* pScanline);
-
-            // Deinitializes the compressor, freeing any allocated memory. May be called at any time.
-            void deinit();
-
-        private:
-            jpeg_encoder(const jpeg_encoder &);
-            jpeg_encoder &operator =(const jpeg_encoder &);
-
-            typedef int32 sample_array_t;
-            enum { JPGE_OUT_BUF_SIZE = 512 };
-
-            output_stream *m_pStream;
-            params m_params;
-            uint8 m_num_components;
-            uint8 m_comp_h_samp[3], m_comp_v_samp[3];
-            int m_image_x, m_image_y, m_image_bpp, m_image_bpl;
-            int m_image_x_mcu, m_image_y_mcu;
-            int m_image_bpl_xlt, m_image_bpl_mcu;
-            int m_mcus_per_row;
-            int m_mcu_x, m_mcu_y;
-            uint8 *m_mcu_lines[16];
-            uint8 m_mcu_y_ofs;
-            sample_array_t m_sample_array[64];
-            int16 m_coefficient_array[64];
-
-            int m_last_dc_val[3];
-            uint8 m_out_buf[JPGE_OUT_BUF_SIZE];
-            uint8 *m_pOut_buf;
-            uint m_out_buf_left;
-            uint32 m_bit_buffer;
-            uint m_bits_in;
-            uint8 m_pass_num;
-            bool m_all_stream_writes_succeeded;
-
-            bool jpg_open(int p_x_res, int p_y_res, int src_channels);
-
-            void flush_output_buffer();
-            void put_bits(uint bits, uint len);
-
-            void emit_byte(uint8 i);
-            void emit_word(uint i);
-            void emit_marker(int marker);
-
-            void emit_jfif_app0();
-            void emit_dqt();
-            void emit_sof();
-            void emit_dht(uint8 *bits, uint8 *val, int index, bool ac_flag);
-            void emit_dhts();
-            void emit_sos();
-
-            void compute_quant_table(int32 *dst, const int16 *src);
-            void load_quantized_coefficients(int component_num);
-
-            void load_block_8_8_grey(int x);
-            void load_block_8_8(int x, int y, int c);
-            void load_block_16_8(int x, int c);
-            void load_block_16_8_8(int x, int c);
-
-            void code_coefficients_pass_two(int component_num);
-            void code_block(int component_num);
-
-            void process_mcu_row();
-            bool process_end_of_image();
-            void load_mcu(const void* src);
-            void clear();
-            void init();
-    };
-    
-} // namespace jpge
-
-#endif // JPEG_ENCODER

+ 0 - 29
code/components/esp32-camera-master/conversions/private_include/yuv.h

@@ -1,29 +0,0 @@
-// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#ifndef _CONVERSIONS_YUV_H_
-#define _CONVERSIONS_YUV_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-void yuv2rgb(uint8_t y, uint8_t u, uint8_t v, uint8_t *r, uint8_t *g, uint8_t *b);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _CONVERSIONS_YUV_H_ */

+ 0 - 298
code/components/esp32-camera-master/conversions/yuv.c

@@ -1,298 +0,0 @@
-// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#include "yuv.h"
-#include "esp_attr.h"
-
-typedef struct {
-        int16_t vY;
-        int16_t vVr;
-        int16_t vVg;
-        int16_t vUg;
-        int16_t vUb;
-} yuv_table_row;
-
-static const yuv_table_row yuv_table[256] = {
-    //  Y    Vr    Vg    Ug    Ub     // #
-    {  -18, -204,   50,  104, -258 }, // 0
-    {  -17, -202,   49,  103, -256 }, // 1
-    {  -16, -201,   49,  102, -254 }, // 2
-    {  -15, -199,   48,  101, -252 }, // 3
-    {  -13, -197,   48,  100, -250 }, // 4
-    {  -12, -196,   48,   99, -248 }, // 5
-    {  -11, -194,   47,   99, -246 }, // 6
-    {  -10, -193,   47,   98, -244 }, // 7
-    {   -9, -191,   46,   97, -242 }, // 8
-    {   -8, -189,   46,   96, -240 }, // 9
-    {   -6, -188,   46,   95, -238 }, // 10
-    {   -5, -186,   45,   95, -236 }, // 11
-    {   -4, -185,   45,   94, -234 }, // 12
-    {   -3, -183,   44,   93, -232 }, // 13
-    {   -2, -181,   44,   92, -230 }, // 14
-    {   -1, -180,   44,   91, -228 }, // 15
-    {    0, -178,   43,   91, -226 }, // 16
-    {    1, -177,   43,   90, -223 }, // 17
-    {    2, -175,   43,   89, -221 }, // 18
-    {    3, -173,   42,   88, -219 }, // 19
-    {    4, -172,   42,   87, -217 }, // 20
-    {    5, -170,   41,   86, -215 }, // 21
-    {    6, -169,   41,   86, -213 }, // 22
-    {    8, -167,   41,   85, -211 }, // 23
-    {    9, -165,   40,   84, -209 }, // 24
-    {   10, -164,   40,   83, -207 }, // 25
-    {   11, -162,   39,   82, -205 }, // 26
-    {   12, -161,   39,   82, -203 }, // 27
-    {   13, -159,   39,   81, -201 }, // 28
-    {   15, -158,   38,   80, -199 }, // 29
-    {   16, -156,   38,   79, -197 }, // 30
-    {   17, -154,   37,   78, -195 }, // 31
-    {   18, -153,   37,   78, -193 }, // 32
-    {   19, -151,   37,   77, -191 }, // 33
-    {   20, -150,   36,   76, -189 }, // 34
-    {   22, -148,   36,   75, -187 }, // 35
-    {   23, -146,   35,   74, -185 }, // 36
-    {   24, -145,   35,   73, -183 }, // 37
-    {   25, -143,   35,   73, -181 }, // 38
-    {   26, -142,   34,   72, -179 }, // 39
-    {   27, -140,   34,   71, -177 }, // 40
-    {   29, -138,   34,   70, -175 }, // 41
-    {   30, -137,   33,   69, -173 }, // 42
-    {   31, -135,   33,   69, -171 }, // 43
-    {   32, -134,   32,   68, -169 }, // 44
-    {   33, -132,   32,   67, -167 }, // 45
-    {   34, -130,   32,   66, -165 }, // 46
-    {   36, -129,   31,   65, -163 }, // 47
-    {   37, -127,   31,   65, -161 }, // 48
-    {   38, -126,   30,   64, -159 }, // 49
-    {   39, -124,   30,   63, -157 }, // 50
-    {   40, -122,   30,   62, -155 }, // 51
-    {   41, -121,   29,   61, -153 }, // 52
-    {   43, -119,   29,   60, -151 }, // 53
-    {   44, -118,   28,   60, -149 }, // 54
-    {   45, -116,   28,   59, -147 }, // 55
-    {   46, -114,   28,   58, -145 }, // 56
-    {   47, -113,   27,   57, -143 }, // 57
-    {   48, -111,   27,   56, -141 }, // 58
-    {   50, -110,   26,   56, -139 }, // 59
-    {   51, -108,   26,   55, -137 }, // 60
-    {   52, -106,   26,   54, -135 }, // 61
-    {   53, -105,   25,   53, -133 }, // 62
-    {   54, -103,   25,   52, -131 }, // 63
-    {   55, -102,   25,   52, -129 }, // 64
-    {   57, -100,   24,   51, -127 }, // 65
-    {   58,  -98,   24,   50, -125 }, // 66
-    {   59,  -97,   23,   49, -123 }, // 67
-    {   60,  -95,   23,   48, -121 }, // 68
-    {   61,  -94,   23,   47, -119 }, // 69
-    {   62,  -92,   22,   47, -117 }, // 70
-    {   64,  -90,   22,   46, -115 }, // 71
-    {   65,  -89,   21,   45, -113 }, // 72
-    {   66,  -87,   21,   44, -110 }, // 73
-    {   67,  -86,   21,   43, -108 }, // 74
-    {   68,  -84,   20,   43, -106 }, // 75
-    {   69,  -82,   20,   42, -104 }, // 76
-    {   71,  -81,   19,   41, -102 }, // 77
-    {   72,  -79,   19,   40, -100 }, // 78
-    {   73,  -78,   19,   39,  -98 }, // 79
-    {   74,  -76,   18,   39,  -96 }, // 80
-    {   75,  -75,   18,   38,  -94 }, // 81
-    {   76,  -73,   17,   37,  -92 }, // 82
-    {   77,  -71,   17,   36,  -90 }, // 83
-    {   79,  -70,   17,   35,  -88 }, // 84
-    {   80,  -68,   16,   34,  -86 }, // 85
-    {   81,  -67,   16,   34,  -84 }, // 86
-    {   82,  -65,   16,   33,  -82 }, // 87
-    {   83,  -63,   15,   32,  -80 }, // 88
-    {   84,  -62,   15,   31,  -78 }, // 89
-    {   86,  -60,   14,   30,  -76 }, // 90
-    {   87,  -59,   14,   30,  -74 }, // 91
-    {   88,  -57,   14,   29,  -72 }, // 92
-    {   89,  -55,   13,   28,  -70 }, // 93
-    {   90,  -54,   13,   27,  -68 }, // 94
-    {   91,  -52,   12,   26,  -66 }, // 95
-    {   93,  -51,   12,   26,  -64 }, // 96
-    {   94,  -49,   12,   25,  -62 }, // 97
-    {   95,  -47,   11,   24,  -60 }, // 98
-    {   96,  -46,   11,   23,  -58 }, // 99
-    {   97,  -44,   10,   22,  -56 }, // 100
-    {   98,  -43,   10,   21,  -54 }, // 101
-    {  100,  -41,   10,   21,  -52 }, // 102
-    {  101,  -39,    9,   20,  -50 }, // 103
-    {  102,  -38,    9,   19,  -48 }, // 104
-    {  103,  -36,    8,   18,  -46 }, // 105
-    {  104,  -35,    8,   17,  -44 }, // 106
-    {  105,  -33,    8,   17,  -42 }, // 107
-    {  107,  -31,    7,   16,  -40 }, // 108
-    {  108,  -30,    7,   15,  -38 }, // 109
-    {  109,  -28,    7,   14,  -36 }, // 110
-    {  110,  -27,    6,   13,  -34 }, // 111
-    {  111,  -25,    6,   13,  -32 }, // 112
-    {  112,  -23,    5,   12,  -30 }, // 113
-    {  114,  -22,    5,   11,  -28 }, // 114
-    {  115,  -20,    5,   10,  -26 }, // 115
-    {  116,  -19,    4,    9,  -24 }, // 116
-    {  117,  -17,    4,    8,  -22 }, // 117
-    {  118,  -15,    3,    8,  -20 }, // 118
-    {  119,  -14,    3,    7,  -18 }, // 119
-    {  121,  -12,    3,    6,  -16 }, // 120
-    {  122,  -11,    2,    5,  -14 }, // 121
-    {  123,   -9,    2,    4,  -12 }, // 122
-    {  124,   -7,    1,    4,  -10 }, // 123
-    {  125,   -6,    1,    3,   -8 }, // 124
-    {  126,   -4,    1,    2,   -6 }, // 125
-    {  128,   -3,    0,    1,   -4 }, // 126
-    {  129,   -1,    0,    0,   -2 }, // 127
-    {  130,    0,    0,    0,    0 }, // 128
-    {  131,    1,    0,    0,    2 }, // 129
-    {  132,    3,    0,   -1,    4 }, // 130
-    {  133,    4,   -1,   -2,    6 }, // 131
-    {  135,    6,   -1,   -3,    8 }, // 132
-    {  136,    7,   -1,   -4,   10 }, // 133
-    {  137,    9,   -2,   -4,   12 }, // 134
-    {  138,   11,   -2,   -5,   14 }, // 135
-    {  139,   12,   -3,   -6,   16 }, // 136
-    {  140,   14,   -3,   -7,   18 }, // 137
-    {  142,   15,   -3,   -8,   20 }, // 138
-    {  143,   17,   -4,   -8,   22 }, // 139
-    {  144,   19,   -4,   -9,   24 }, // 140
-    {  145,   20,   -5,  -10,   26 }, // 141
-    {  146,   22,   -5,  -11,   28 }, // 142
-    {  147,   23,   -5,  -12,   30 }, // 143
-    {  148,   25,   -6,  -13,   32 }, // 144
-    {  150,   27,   -6,  -13,   34 }, // 145
-    {  151,   28,   -7,  -14,   36 }, // 146
-    {  152,   30,   -7,  -15,   38 }, // 147
-    {  153,   31,   -7,  -16,   40 }, // 148
-    {  154,   33,   -8,  -17,   42 }, // 149
-    {  155,   35,   -8,  -17,   44 }, // 150
-    {  157,   36,   -8,  -18,   46 }, // 151
-    {  158,   38,   -9,  -19,   48 }, // 152
-    {  159,   39,   -9,  -20,   50 }, // 153
-    {  160,   41,  -10,  -21,   52 }, // 154
-    {  161,   43,  -10,  -21,   54 }, // 155
-    {  162,   44,  -10,  -22,   56 }, // 156
-    {  164,   46,  -11,  -23,   58 }, // 157
-    {  165,   47,  -11,  -24,   60 }, // 158
-    {  166,   49,  -12,  -25,   62 }, // 159
-    {  167,   51,  -12,  -26,   64 }, // 160
-    {  168,   52,  -12,  -26,   66 }, // 161
-    {  169,   54,  -13,  -27,   68 }, // 162
-    {  171,   55,  -13,  -28,   70 }, // 163
-    {  172,   57,  -14,  -29,   72 }, // 164
-    {  173,   59,  -14,  -30,   74 }, // 165
-    {  174,   60,  -14,  -30,   76 }, // 166
-    {  175,   62,  -15,  -31,   78 }, // 167
-    {  176,   63,  -15,  -32,   80 }, // 168
-    {  178,   65,  -16,  -33,   82 }, // 169
-    {  179,   67,  -16,  -34,   84 }, // 170
-    {  180,   68,  -16,  -34,   86 }, // 171
-    {  181,   70,  -17,  -35,   88 }, // 172
-    {  182,   71,  -17,  -36,   90 }, // 173
-    {  183,   73,  -17,  -37,   92 }, // 174
-    {  185,   75,  -18,  -38,   94 }, // 175
-    {  186,   76,  -18,  -39,   96 }, // 176
-    {  187,   78,  -19,  -39,   98 }, // 177
-    {  188,   79,  -19,  -40,  100 }, // 178
-    {  189,   81,  -19,  -41,  102 }, // 179
-    {  190,   82,  -20,  -42,  104 }, // 180
-    {  192,   84,  -20,  -43,  106 }, // 181
-    {  193,   86,  -21,  -43,  108 }, // 182
-    {  194,   87,  -21,  -44,  110 }, // 183
-    {  195,   89,  -21,  -45,  113 }, // 184
-    {  196,   90,  -22,  -46,  115 }, // 185
-    {  197,   92,  -22,  -47,  117 }, // 186
-    {  199,   94,  -23,  -47,  119 }, // 187
-    {  200,   95,  -23,  -48,  121 }, // 188
-    {  201,   97,  -23,  -49,  123 }, // 189
-    {  202,   98,  -24,  -50,  125 }, // 190
-    {  203,  100,  -24,  -51,  127 }, // 191
-    {  204,  102,  -25,  -52,  129 }, // 192
-    {  206,  103,  -25,  -52,  131 }, // 193
-    {  207,  105,  -25,  -53,  133 }, // 194
-    {  208,  106,  -26,  -54,  135 }, // 195
-    {  209,  108,  -26,  -55,  137 }, // 196
-    {  210,  110,  -26,  -56,  139 }, // 197
-    {  211,  111,  -27,  -56,  141 }, // 198
-    {  213,  113,  -27,  -57,  143 }, // 199
-    {  214,  114,  -28,  -58,  145 }, // 200
-    {  215,  116,  -28,  -59,  147 }, // 201
-    {  216,  118,  -28,  -60,  149 }, // 202
-    {  217,  119,  -29,  -60,  151 }, // 203
-    {  218,  121,  -29,  -61,  153 }, // 204
-    {  219,  122,  -30,  -62,  155 }, // 205
-    {  221,  124,  -30,  -63,  157 }, // 206
-    {  222,  126,  -30,  -64,  159 }, // 207
-    {  223,  127,  -31,  -65,  161 }, // 208
-    {  224,  129,  -31,  -65,  163 }, // 209
-    {  225,  130,  -32,  -66,  165 }, // 210
-    {  226,  132,  -32,  -67,  167 }, // 211
-    {  228,  134,  -32,  -68,  169 }, // 212
-    {  229,  135,  -33,  -69,  171 }, // 213
-    {  230,  137,  -33,  -69,  173 }, // 214
-    {  231,  138,  -34,  -70,  175 }, // 215
-    {  232,  140,  -34,  -71,  177 }, // 216
-    {  233,  142,  -34,  -72,  179 }, // 217
-    {  235,  143,  -35,  -73,  181 }, // 218
-    {  236,  145,  -35,  -73,  183 }, // 219
-    {  237,  146,  -35,  -74,  185 }, // 220
-    {  238,  148,  -36,  -75,  187 }, // 221
-    {  239,  150,  -36,  -76,  189 }, // 222
-    {  240,  151,  -37,  -77,  191 }, // 223
-    {  242,  153,  -37,  -78,  193 }, // 224
-    {  243,  154,  -37,  -78,  195 }, // 225
-    {  244,  156,  -38,  -79,  197 }, // 226
-    {  245,  158,  -38,  -80,  199 }, // 227
-    {  246,  159,  -39,  -81,  201 }, // 228
-    {  247,  161,  -39,  -82,  203 }, // 229
-    {  249,  162,  -39,  -82,  205 }, // 230
-    {  250,  164,  -40,  -83,  207 }, // 231
-    {  251,  165,  -40,  -84,  209 }, // 232
-    {  252,  167,  -41,  -85,  211 }, // 233
-    {  253,  169,  -41,  -86,  213 }, // 234
-    {  254,  170,  -41,  -86,  215 }, // 235
-    {  256,  172,  -42,  -87,  217 }, // 236
-    {  257,  173,  -42,  -88,  219 }, // 237
-    {  258,  175,  -43,  -89,  221 }, // 238
-    {  259,  177,  -43,  -90,  223 }, // 239
-    {  260,  178,  -43,  -91,  226 }, // 240
-    {  261,  180,  -44,  -91,  228 }, // 241
-    {  263,  181,  -44,  -92,  230 }, // 242
-    {  264,  183,  -44,  -93,  232 }, // 243
-    {  265,  185,  -45,  -94,  234 }, // 244
-    {  266,  186,  -45,  -95,  236 }, // 245
-    {  267,  188,  -46,  -95,  238 }, // 246
-    {  268,  189,  -46,  -96,  240 }, // 247
-    {  270,  191,  -46,  -97,  242 }, // 248
-    {  271,  193,  -47,  -98,  244 }, // 249
-    {  272,  194,  -47,  -99,  246 }, // 250
-    {  273,  196,  -48,  -99,  248 }, // 251
-    {  274,  197,  -48, -100,  250 }, // 252
-    {  275,  199,  -48, -101,  252 }, // 253
-    {  277,  201,  -49, -102,  254 }, // 254
-    {  278,  202,  -49, -103,  256 }  // 255
-};
-
-#define YUYV_CONSTRAIN(v) ((v)<0)?0:(((v)>255)?255:(v))
-
-void IRAM_ATTR yuv2rgb(uint8_t y, uint8_t u, uint8_t v, uint8_t *r, uint8_t *g, uint8_t *b)
-{
-    int16_t ri, gi, bi;
-
-    ri = yuv_table[y].vY + yuv_table[v].vVr;
-    gi = yuv_table[y].vY + yuv_table[u].vUg + yuv_table[v].vVg;
-    bi = yuv_table[y].vY + yuv_table[u].vUb;
-
-    *r = YUYV_CONSTRAIN(ri);
-    *g = YUYV_CONSTRAIN(gi);
-    *b = YUYV_CONSTRAIN(bi);
-}

+ 0 - 60
code/components/esp32-camera-master/driver/private_include/cam_hal.h

@@ -1,60 +0,0 @@
-// Copyright 2010-2020 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#pragma once
-
-#include "esp_camera.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @brief Uninitialize the lcd_cam module
- *
- * @param handle Provide handle pointer to release resources
- *
- * @return
- *     - ESP_OK Success
- *     - ESP_FAIL Uninitialize fail
- */
-esp_err_t cam_deinit(void);
-
-/**
- * @brief Initialize the lcd_cam module
- *
- * @param config Configurations - see lcd_cam_config_t struct
- *
- * @return
- *     - ESP_OK Success
- *     - ESP_ERR_INVALID_ARG Parameter error
- *     - ESP_ERR_NO_MEM No memory to initialize lcd_cam
- *     - ESP_FAIL Initialize fail
- */
-esp_err_t cam_init(const camera_config_t *config);
-
-esp_err_t cam_config(const camera_config_t *config, framesize_t frame_size, uint16_t sensor_pid);
-
-void cam_stop(void);
-
-void cam_start(void);
-
-camera_fb_t *cam_take(TickType_t timeout);
-
-void cam_give(camera_fb_t *dma_buffer);
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 9
code/components/esp32-camera-master/driver/private_include/xclk.h

@@ -1,9 +0,0 @@
-#pragma once
-
-#include "esp_system.h"
-
-esp_err_t xclk_timer_conf(int ledc_timer, int xclk_freq_hz);
-
-esp_err_t camera_enable_out_clock();
-
-void camera_disable_out_clock();

+ 0 - 9
code/components/esp32-camera-master/examples/CMakeLists.txt

@@ -1,9 +0,0 @@
-# The following lines of boilerplate have to be in your project's
-# CMakeLists in this exact order for cmake to work correctly
-cmake_minimum_required(VERSION 3.5)
-
-set(EXTRA_COMPONENT_DIRS "../")
-
-add_compile_options(-fdiagnostics-color=always)
-include($ENV{IDF_PATH}/tools/cmake/project.cmake)
-project(camera_example)

+ 0 - 3
code/components/esp32-camera-master/examples/main/CMakeLists.txt

@@ -1,3 +0,0 @@
-set(COMPONENT_SRCS take_picture.c)
-set(COMPONENT_ADD_INCLUDEDIRS .)
-register_component()

+ 0 - 5
code/components/esp32-camera-master/examples/main/component.mk

@@ -1,5 +0,0 @@
-#
-# "main" pseudo-component makefile.
-#
-# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
-

+ 0 - 17
code/components/esp32-camera-master/examples/sdkconfig.defaults

@@ -1,17 +0,0 @@
-CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32S2_DEFAULT_CPU_FREQ_240=y
-CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y
-
-CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
-CONFIG_PARTITION_TABLE_OFFSET=0x10000
-
-CONFIG_FREERTOS_HZ=1000
-CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
-CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
-
-CONFIG_SPIRAM_SUPPORT=y
-CONFIG_ESP32_SPIRAM_SUPPORT=y
-CONFIG_ESP32S2_SPIRAM_SUPPORT=y
-CONFIG_ESP32S3_SPIRAM_SUPPORT=y
-CONFIG_SPIRAM_SPEED_80M=y
-

+ 0 - 26
code/components/esp32-camera-master/library.json

@@ -1,26 +0,0 @@
-{
-  "name": "esp32-camera",
-  "version": "2.0.0",
-  "keywords": "esp32, camera, espressif, esp32-cam",
-  "description": "ESP32 compatible driver for OV2640, OV3660, OV5640, OV7670 and OV7725 image sensors.",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/espressif/esp32-camera"
-  },
-  "frameworks": "espidf",
-  "platforms": "*",
-  "build": {
-    "flags": [
-      "-Idriver/include",
-      "-Iconversions/include",
-      "-Idriver/private_include",
-      "-Iconversions/private_include",
-      "-Isensors/private_include",
-      "-Itarget/private_include",
-      "-fno-rtti"
-    ],
-    "includeDir": ".",
-    "srcDir": ".",
-    "srcFilter": ["-<*>", "+<driver>", "+<conversions>", "+<sensors>"]
-  }
-}

+ 0 - 541
code/components/esp32-camera-master/sensors/bf3005.c

@@ -1,541 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * BF3005 driver.
- * 
- * Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
-
- *     http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "sccb.h"
-#include "xclk.h"
-#include "bf3005.h"
-#include "bf3005_regs.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char* TAG = "bf3005";
-#endif
-
-static const uint8_t default_regs[][2] = {
-  {0x12, 0x40}, //soft reset
-  {0xff, 0xff}, //delay 
-  {0xff, 0xff}, //delay 
-  {0xff, 0xff}, //delay 
-  {0xff, 0xff}, //delay 
-  {0x13, 0x10},	
-  {0x8c, 0x00},
-  {0x8d, 0x64},
-  {0x87, 0x10},
-  {0x13, 0x17},
-  {0x00, 0x20},
-  {0x01, 0x1a},
-  {0x02, 0x22},
-  {0x09, 0x03},
-  {0x0c, 0x80},
-  {0x0d, 0x24},
-  {0x0e, 0x21},
-  {0x0f, 0x28},
-  {0x11, 0x08},
-  {0x15, 0x10}, // 0X10
-  {0x16, 0x03},
-  {0x1e, 0x30},
-  {0x20, 0x8a},
-  {0x21, 0x03},
-  {0x23, 0x55},
-  {0x24, 0x68},
-  {0x25, 0x78},
-  {0x2a, 0x00},
-  {0x2b, 0x00},
-  {0x2d, 0x4f},
-  {0x2e, 0x98},
-  {0x2f, 0x04},
-  {0x30, 0xad},
-  {0x31, 0x17},
-  {0x32, 0x6e},
-  {0x33, 0x20},
-  {0x35, 0xa6},
-  {0x3b, 0x00},
-  {0x3e, 0x00},
-  {0x3f, 0xA8},
-  {0x40, 0x38},
-  {0x41, 0x32},
-  {0x42, 0x2b},
-  {0x43, 0x26},
-  {0x44, 0x1a},
-  {0x45, 0x16},
-  {0x46, 0x10},
-  {0x47, 0x0f},
-  {0x48, 0x0c},
-  {0x49, 0x0a},
-  {0x4b, 0x09},
-  {0x4c, 0x08},
-  {0x4d, 0x3c},
-  {0x4e, 0x06},
-  {0x4f, 0x05},
-  {0x50, 0x03},
-  {0x51, 0x25},
-  {0x52, 0x88},
-  {0x53, 0x03},
-  {0x63, 0x20},
-  {0x64, 0x02},
-  {0x65, 0xa6},
-  {0x66, 0xb6},
-  {0x69, 0x00},
-  {0x70, 0xFF},
-  {0x71, 0xa6},
-  {0x72, 0x2f},
-  {0x73, 0x2f},
-  {0x74, 0x2F},
-  {0x75, 0x0e},
-  {0x76, 0x1e},
-  {0x77, 0x00},
-  {0x78, 0x1e},
-  {0x79, 0x8a},
-  {0x7d, 0xe2},
-  {0x80, 0x44},
-  {0x81, 0x00},
-  {0x82, 0x18},
-  {0x83, 0x1b},
-  {0x84, 0x24},
-  {0x85, 0x2a},
-  {0x86, 0x4f},
-  {0x89, 0x82}, //0x82
-  {0x8b, 0x02},
-  {0x8e, 0x03},
-  {0x8f, 0xFC},
-  {0x9d, 0x4d},
-  {0x9e, 0x41},
-  {0xa1, 0x21},
-  {0xa2, 0x12},
-  {0xa3, 0x32},
-  {0xa4, 0x05},
-  {0xa5, 0x32},
-  {0xa6, 0x04},
-  {0xa7, 0x7f},
-  {0xa8, 0x7f},
-  {0xa9, 0x21},
-  {0xaa, 0x21},
-  {0xab, 0x21},
-  {0xac, 0x0a},
-  {0xad, 0xf0},
-  {0xae, 0xff},
-  {0xaf, 0x1d},
-  {0xb0, 0x94},
-  {0xb1, 0xc0},
-  {0xb2, 0xc0},
-  {0xd2, 0x30},
-  {0xe0, 0x0d},
-  {0xe1, 0x44},
-  {0xe7, 0x7c},
-  {0xe8, 0x89},
-  {0xe9, 0x01},
-  {0xea, 0x01},
-  {0xf0, 0x01},
-  {0xf3, 0x49},
-  {0xf4, 0xff},
-  {0xf5, 0x01},
-  {0xf6, 0xf2},
-  {0xf7, 0x6f},
-  {0x1b, 0x80},
-  {0x00, 0x00},
-};
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = SCCB_Read(sensor->slv_addr, reg & 0xFF);
-    if(ret > 0){
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0;
-    ret = SCCB_Read(sensor->slv_addr, reg & 0xFF);
-    if(ret < 0){
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-    ret = SCCB_Write(sensor->slv_addr, reg & 0xFF, value);
-    return ret;
-}
-
-static int set_reg_bits(sensor_t *sensor, uint8_t reg, uint8_t offset, uint8_t length, uint8_t value)
-{
-    int ret = 0;
-    ret = SCCB_Read(sensor->slv_addr, reg);
-    if(ret < 0){
-        return ret;
-    }
-    uint8_t mask = ((1 << length) - 1) << offset;
-    value = (ret & ~mask) | ((value << offset) & mask);
-    ret = SCCB_Write(sensor->slv_addr, reg & 0xFF, value);
-    return ret;
-}
-
-static int get_reg_bits(sensor_t *sensor, uint8_t reg, uint8_t offset, uint8_t length)
-{
-    int ret = 0;
-    ret = SCCB_Read(sensor->slv_addr, reg);
-    if(ret < 0){
-        return ret;
-    }
-    uint8_t mask = ((1 << length) - 1) << offset;
-    return (ret & mask) >> offset;
-}
-
-
-static int reset(sensor_t *sensor)
-{
-    int i=0;
-    const uint8_t (*regs)[2];
-
-    // Write default regsiters
-    for (i=0, regs = default_regs; regs[i][0]; i++) {
-        SCCB_Write(sensor->slv_addr, regs[i][0], regs[i][1]);
-    }
-
-    // Delay
-    vTaskDelay(50 / portTICK_PERIOD_MS);
-
-    return 0;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret=0;
-    sensor->pixformat = pixformat;
-
-    switch (pixformat) {
-    case PIXFORMAT_RGB565:
-        set_reg_bits(sensor, 0x12, 2, 1, 1);
-        break;
-    case PIXFORMAT_RAW:
-        set_reg_bits(sensor, 0x12, 0, 3, 0x4);
-        break;
-    case PIXFORMAT_YUV422:
-    case PIXFORMAT_GRAYSCALE:
-       set_reg_bits(sensor, 0x12, 2, 1, 0);
-        break;
-    default:
-        return -1;
-    }
-
-    // Delay
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret=0;
-    if (framesize > FRAMESIZE_VGA) {
-        return -1;
-    }
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    // uint8_t reg = SCCB_Read(sensor->slv_addr, COM7);
-
-    sensor->status.framesize = framesize;
-
-    // Write MSBs
-    ret |= SCCB_Write(sensor->slv_addr, 0x17, 0);
-    ret |= SCCB_Write(sensor->slv_addr, 0x18, w>>2);
-
-    ret |= SCCB_Write(sensor->slv_addr, 0x19, 0);
-    ret |= SCCB_Write(sensor->slv_addr, 0x1a, h>>2);
-
-    // Write LSBs
-    ret |= SCCB_Write(sensor->slv_addr, 0x03, 0);
-    printf("%s %d\r\n", __func__, __LINE__);
-    if((w<=320)&&(h<=240))
-    {
-        printf("%s %d\r\n", __func__, __LINE__);
-        // Enable auto-scaling/zooming factors
-        //ret |= SCCB_Write(sensor->slv_addr, 0x12, 0x50);
-        set_reg_bits(sensor, 0x12, 4, 1, 1);
-
-        ret |= SCCB_Write(sensor->slv_addr, 0x17, (80-w/4));
-        ret |= SCCB_Write(sensor->slv_addr, 0x18, (80+w/4));
-
-        ret |= SCCB_Write(sensor->slv_addr, 0x19, (60-h/4));
-
-        ret |= SCCB_Write(sensor->slv_addr, 0x1a, (60+h/4));
-        ret |= SCCB_Write(sensor->slv_addr, 0x03, 0);
-
-    } else if((w<=640)&&(h<=480))
-    	{
-       // Enable auto-scaling/zooming factors
-        //ret |= SCCB_Write(sensor->slv_addr, 0x12, 0x40);
-        set_reg_bits(sensor, 0x12, 4, 1, 0);
-
-        ret |= SCCB_Write(sensor->slv_addr, 0x17, (80-w/8));
-        ret |= SCCB_Write(sensor->slv_addr, 0x18, (80+w/8));
-
-        ret |= SCCB_Write(sensor->slv_addr, 0x19, (60-h/8));
-
-        ret |= SCCB_Write(sensor->slv_addr, 0x1a, (60+h/8));
-        ret |= SCCB_Write(sensor->slv_addr, 0x03, 0);
-    }
-
-    // Delay
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int value)
-{
-    int ret=0;
-    sensor->status.colorbar = value;
-
-    ret |= SCCB_Write(sensor->slv_addr, 0xb9, value);
-
-    return ret;
-}
-
-static int set_whitebal(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, 0x13, 1, 1, enable) >= 0){
-        sensor->status.awb = !!enable;
-    }
-    return sensor->status.awb;
-}
-
-
-static int set_gain_ctrl(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, 0x13, 2, 1, enable) >= 0){
-        sensor->status.agc = !!enable;
-    }
-    return sensor->status.agc;
-}
-
-
-static int set_exposure_ctrl(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, 0x13, 0, 1, enable) >= 0){
-        sensor->status.aec = !!enable;
-    }
-    return sensor->status.aec;
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, 0x1e, 5, 1, enable) >= 0){
-        sensor->status.hmirror = !!enable;
-    }
-    return sensor->status.hmirror;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, 0x1e, 4, 1, enable) >= 0){
-        sensor->status.vflip = !!enable;
-    }
-    return sensor->status.vflip;
-}
-
-static int set_raw_gma_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0xf1, 1, 1, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set raw_gma to: %d", !enable);
-        sensor->status.raw_gma = !enable;
-    }
-    return ret;
-}
-
-
-static int set_lenc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0xf1, 0, 1, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set lenc to: %d", !enable);
-        sensor->status.lenc = !enable;
-    }
-    return ret;
-}
-
-static int set_agc_gain(sensor_t *sensor, int option)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0x13, 4, 1, !!option);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gain to: %d", !!option);
-        sensor->status.agc_gain = !!option;
-    }
-    return ret;
-}
-
-static int set_awb_gain_dsp(sensor_t *sensor, int value)
-{
-    int ret = 0;
-    ret = SCCB_Write(sensor->slv_addr, 0xa6, value);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set awb gain threthold to: %d", value);
-        sensor->status.awb_gain = value;
-    }
-    return ret;
-}
-
-static int set_brightness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    ret = SCCB_Write(sensor->slv_addr, 0x55, level);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set brightness to: %d", level);
-        sensor->status.brightness = level;
-    }
-    return ret;
-}
-
-static int set_contrast(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    ret = SCCB_Write(sensor->slv_addr, 0x56, level);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set contrast to: %d", level);
-        sensor->status.contrast = level;
-    }
-    return ret;
-}
-
-static int set_sharpness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    ret = SCCB_Write(sensor->slv_addr, 0x70, level);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set sharpness to: %d", level);
-        sensor->status.sharpness = level;
-    }
-    return ret;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    sensor->status.brightness = SCCB_Read(sensor->slv_addr, 0x55);
-    sensor->status.contrast = SCCB_Read(sensor->slv_addr, 0x56);
-    sensor->status.saturation = 0;
-    sensor->status.ae_level = 0;
-    
-    sensor->status.gainceiling = SCCB_Read(sensor->slv_addr, 0x87);
-    sensor->status.awb = get_reg_bits(sensor, 0x13, 1, 1);
-    sensor->status.awb_gain = SCCB_Read(sensor->slv_addr, 0xa6);
-    sensor->status.aec = get_reg_bits(sensor, 0x13, 0, 1);
-
-    sensor->status.agc = get_reg_bits(sensor, 0x13, 2, 1);
-    
-    sensor->status.raw_gma = get_reg_bits(sensor, 0xf1, 1, 1);
-    sensor->status.lenc = get_reg_bits(sensor, 0xf1, 0, 1);
-    sensor->status.hmirror = get_reg_bits(sensor, 0x1e, 5, 1);
-    sensor->status.vflip = get_reg_bits(sensor, 0x1e, 4, 1);
-    
-    sensor->status.colorbar = SCCB_Read(sensor->slv_addr, 0xb9);
-    sensor->status.sharpness = SCCB_Read(sensor->slv_addr, 0x70);
-    
-    return 0;
-}
-
-static int set_dummy(sensor_t *sensor, int val){ return -1; }
-static int set_gainceiling_dummy(sensor_t *sensor, gainceiling_t val){ return -1; }
-static int set_res_raw(sensor_t *sensor, int startX, int startY, int endX, int endY, int offsetX, int offsetY, int totalX, int totalY, int outputX, int outputY, bool scale, bool binning){return -1;}
-static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div){return -1;}
-
-static int set_xclk(sensor_t *sensor, int timer, int xclk)
-{
-    int ret = 0;
-    sensor->xclk_freq_hz = xclk * 1000000U;
-    ret = xclk_timer_conf(timer, sensor->xclk_freq_hz);
-    return ret;
-}
-
-int bf3005_detect(int slv_addr, sensor_id_t *id)
-{
-    if (BF3005_SCCB_ADDR == slv_addr) {
-        uint16_t PID = SCCB_Read(slv_addr, 0xFC);
-        if (BF3005_PID == PID) {
-            id->PID = PID;
-            id->VER = SCCB_Read(slv_addr, 0xFD);
-            id->MIDL = SCCB_Read(slv_addr, 0xFC);
-            id->MIDH = SCCB_Read(slv_addr, 0xFD);
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int bf3005_init(sensor_t *sensor)
-{
-    // Set function pointers
-    sensor->reset = reset;
-    sensor->init_status = init_status;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_brightness = set_brightness;
-    sensor->set_contrast = set_contrast;
-
-    sensor->set_colorbar = set_colorbar;
-
-    sensor->set_gain_ctrl = set_gain_ctrl;
-    sensor->set_exposure_ctrl = set_exposure_ctrl;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-
-    sensor->set_whitebal = set_whitebal;
-
-    sensor->set_awb_gain = set_awb_gain_dsp;
-    sensor->set_agc_gain = set_agc_gain;
-    
-    sensor->set_raw_gma = set_raw_gma_dsp;
-    sensor->set_lenc = set_lenc_dsp;
-
-    sensor->set_sharpness = set_sharpness;
-    //not supported
-    sensor->set_saturation= set_dummy;
-    sensor->set_denoise = set_dummy;
-    sensor->set_quality = set_dummy;
-    sensor->set_special_effect = set_dummy;
-    sensor->set_wb_mode = set_dummy;
-    sensor->set_ae_level = set_dummy;
-    sensor->set_gainceiling = set_gainceiling_dummy;
-
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = set_res_raw;
-    sensor->set_pll = _set_pll;
-    sensor->set_xclk = set_xclk;
-    
-    ESP_LOGD(TAG, "BF3005 Attached");
-
-    return 0;
-}

+ 0 - 391
code/components/esp32-camera-master/sensors/gc032a.c

@@ -1,391 +0,0 @@
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "sccb.h"
-#include "gc032a.h"
-#include "gc032a_regs.h"
-#include "gc032a_settings.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char *TAG = "gc032a";
-#endif
-
-#define H8(v) ((v)>>8)
-#define L8(v) ((v)&0xff)
-
-//#define REG_DEBUG_ON
-
-static int read_reg(uint8_t slv_addr, const uint16_t reg)
-{
-    int ret = SCCB_Read(slv_addr, reg);
-#ifdef REG_DEBUG_ON
-    if (ret < 0) {
-        ESP_LOGE(TAG, "READ REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int write_reg(uint8_t slv_addr, const uint16_t reg, uint8_t value)
-{
-    int ret = 0;
-#ifndef REG_DEBUG_ON
-    ret = SCCB_Write(slv_addr, reg, value);
-#else
-    int old_value = read_reg(slv_addr, reg);
-    if (old_value < 0) {
-        return old_value;
-    }
-    if ((uint8_t)old_value != value) {
-        ESP_LOGI(TAG, "NEW REG 0x%04x: 0x%02x to 0x%02x", reg, (uint8_t)old_value, value);
-        ret = SCCB_Write(slv_addr, reg, value);
-    } else {
-        ESP_LOGD(TAG, "OLD REG 0x%04x: 0x%02x", reg, (uint8_t)old_value);
-        ret = SCCB_Write(slv_addr, reg, value);//maybe not?
-    }
-    if (ret < 0) {
-        ESP_LOGE(TAG, "WRITE REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int check_reg_mask(uint8_t slv_addr, uint16_t reg, uint8_t mask)
-{
-    return (read_reg(slv_addr, reg) & mask) == mask;
-}
-
-static void print_regs(uint8_t slv_addr)
-{
-#ifdef DEBUG_PRINT_REG
-    vTaskDelay(pdMS_TO_TICKS(100));
-    ESP_LOGI(TAG, "REG list look ======================");
-    for (size_t i = 0xf0; i <= 0xfe; i++) {
-        ESP_LOGI(TAG, "reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-    ESP_LOGI(TAG, "\npage 0 ===");
-    write_reg(slv_addr, 0xfe, 0x00); // page 0
-    for (size_t i = 0x03; i <= 0x24; i++) {
-        ESP_LOGI(TAG, "p0 reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-    for (size_t i = 0x40; i <= 0x95; i++) {
-        ESP_LOGI(TAG, "p0 reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-    ESP_LOGI(TAG, "\npage 3 ===");
-    write_reg(slv_addr, 0xfe, 0x03); // page 3
-    for (size_t i = 0x01; i <= 0x43; i++) {
-        ESP_LOGI(TAG, "p3 reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-#endif
-}
-
-static int set_reg_bits(uint8_t slv_addr, uint16_t reg, uint8_t offset, uint8_t mask, uint8_t value)
-{
-    int ret = 0;
-    uint8_t c_value, new_value;
-    ret = read_reg(slv_addr, reg);
-    if (ret < 0) {
-        return ret;
-    }
-    c_value = ret;
-    new_value = (c_value & ~(mask << offset)) | ((value & mask) << offset);
-    ret = write_reg(slv_addr, reg, new_value);
-    return ret;
-}
-
-static int write_regs(uint8_t slv_addr, const uint16_t (*regs)[2])
-{
-    int i = 0, ret = 0;
-    while (!ret && regs[i][0] != REGLIST_TAIL) {
-        if (regs[i][0] == REG_DLY) {
-            vTaskDelay(regs[i][1] / portTICK_PERIOD_MS);
-        } else {
-            ret = write_reg(slv_addr, regs[i][0], regs[i][1]);
-        }
-        i++;
-    }
-    return ret;
-}
-
-static int reset(sensor_t *sensor)
-{
-    int ret;
-    // Software Reset: clear all registers and reset them to their default values
-    ret = write_reg(sensor->slv_addr, RESET_RELATED, 0xf0);
-    if (ret) {
-        ESP_LOGE(TAG, "Software Reset FAILED!");
-        return ret;
-    }
-    vTaskDelay(100 / portTICK_PERIOD_MS);
-
-    ret = write_regs(sensor->slv_addr, gc032a_default_regs);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Camera defaults loaded");
-        vTaskDelay(100 / portTICK_PERIOD_MS);
-        write_reg(sensor->slv_addr, 0xfe, 0x00);
-        set_reg_bits(sensor->slv_addr, 0xf7, 1, 0x01, 1); // PLL_mode1:div2en
-        set_reg_bits(sensor->slv_addr, 0xf7, 7, 0x01, 1); // PLL_mode1:dvp mode
-        set_reg_bits(sensor->slv_addr, 0xf8, 0, 0x3f, 8); //PLL_mode2 :divx4
-        set_reg_bits(sensor->slv_addr, 0xfa, 4, 0x0f, 2); //vlk div mode :divide_by
-    }
-
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret = 0;
-    switch (pixformat) {
-    case PIXFORMAT_RGB565:
-        write_reg(sensor->slv_addr, 0xfe, 0x00);
-        ret = set_reg_bits(sensor->slv_addr, 0x44, 0, 0x1f, 6);  //RGB565
-        break;
-
-    case PIXFORMAT_YUV422:
-        write_reg(sensor->slv_addr, 0xfe, 0x00);
-        ret = set_reg_bits(sensor->slv_addr, 0x44, 0, 0x1f, 3);
-        break;
-    default:
-        ESP_LOGW(TAG, "unsupport format");
-        ret = -1;
-        break;
-    }
-    if (ret == 0) {
-        sensor->pixformat = pixformat;
-        ESP_LOGD(TAG, "Set pixformat to: %u", pixformat);
-    }
-
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    ESP_LOGI(TAG, "set_framesize");
-    int ret = 0;
-    if (framesize > FRAMESIZE_VGA) {
-        ESP_LOGW(TAG, "Invalid framesize: %u", framesize);
-        framesize = FRAMESIZE_VGA;
-    }
-    sensor->status.framesize = framesize;
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    uint16_t row_s = (resolution[FRAMESIZE_VGA].height - h) / 2;
-    uint16_t col_s = (resolution[FRAMESIZE_VGA].width - w) / 2;
-
-    write_reg(sensor->slv_addr, 0xfe, 0x00);
-    write_reg(sensor->slv_addr, P0_ROW_START_HIGH, H8(row_s)); // Row_start[8]
-    write_reg(sensor->slv_addr, P0_ROW_START_LOW, L8(row_s)); // Row_start[7:0]
-    write_reg(sensor->slv_addr, P0_COLUMN_START_HIGH, H8(col_s)); // Column_start[9:8]
-    write_reg(sensor->slv_addr, P0_COLUMN_START_LOW, L8(col_s)); // Column_start[7:0]
-    write_reg(sensor->slv_addr, P0_WINDOW_HEIGHT_HIGH, H8(h + 8)); //window_height [8]
-    write_reg(sensor->slv_addr, P0_WINDOW_HEIGHT_LOW, L8(h + 8)); //window_height [7:0]
-    write_reg(sensor->slv_addr, P0_WINDOW_WIDTH_HIGH, H8(w + 8)); //window_width [9:8]
-    write_reg(sensor->slv_addr, P0_WINDOW_WIDTH_LOW, L8(w + 8)); //window_width [7:0]
-
-    write_reg(sensor->slv_addr, P0_WIN_MODE, 0x01);
-    write_reg(sensor->slv_addr, P0_OUT_WIN_HEIGHT_HIGH, H8(h));
-    write_reg(sensor->slv_addr, P0_OUT_WIN_HEIGHT_LOW, L8(h));
-    write_reg(sensor->slv_addr, P0_OUT_WIN_WIDTH_HIGH, H8(w));
-    write_reg(sensor->slv_addr, P0_OUT_WIN_WIDTH_LOW, L8(w));
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set framesize to: %ux%u", w, h);
-    }
-    print_regs(sensor->slv_addr);
-    return ret;
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.hmirror = enable;
-    ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
-    ret |= set_reg_bits(sensor->slv_addr, P0_CISCTL_MODE1, 0, 0x01, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set h-mirror to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.vflip = enable;
-    ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
-    ret |= set_reg_bits(sensor->slv_addr, P0_CISCTL_MODE1, 1, 0x01, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set v-flip to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
-    ret |= set_reg_bits(sensor->slv_addr, P0_DEBUG_MODE2, 3, 0x01, enable);
-    if (ret == 0) {
-        sensor->status.colorbar = enable;
-        ESP_LOGD(TAG, "Set colorbar to: %d", enable);
-    }
-    return ret;
-}
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = 0;
-    if (mask > 0xFF) {
-        ESP_LOGE(TAG, "mask should not more than 0xff");
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if (ret > 0) {
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0;
-    if (mask > 0xFF) {
-        ESP_LOGE(TAG, "mask should not more than 0xff");
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if (ret < 0) {
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-
-    if (mask > 0xFF) {
-
-    } else {
-        ret = write_reg(sensor->slv_addr, reg, value);
-    }
-    return ret;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    write_reg(sensor->slv_addr, 0xfe, 0x00);
-    sensor->status.brightness = 0;
-    sensor->status.contrast = 0;
-    sensor->status.saturation = 0;
-    sensor->status.sharpness = 0;
-    sensor->status.denoise = 0;
-    sensor->status.ae_level = 0;
-    sensor->status.gainceiling = 0;
-    sensor->status.awb = 0;
-    sensor->status.dcw = 0;
-    sensor->status.agc = 0;
-    sensor->status.aec = 0;
-    sensor->status.hmirror = check_reg_mask(sensor->slv_addr, P0_CISCTL_MODE1, 0x01);
-    sensor->status.vflip = check_reg_mask(sensor->slv_addr, P0_CISCTL_MODE1, 0x02);
-    sensor->status.colorbar = 0;
-    sensor->status.bpc = 0;
-    sensor->status.wpc = 0;
-    sensor->status.raw_gma = 0;
-    sensor->status.lenc = 0;
-    sensor->status.quality = 0;
-    sensor->status.special_effect = 0;
-    sensor->status.wb_mode = 0;
-    sensor->status.awb_gain = 0;
-    sensor->status.agc_gain = 0;
-    sensor->status.aec_value = 0;
-    sensor->status.aec2 = 0;
-    return 0;
-}
-
-static int set_dummy(sensor_t *sensor, int val)
-{
-    ESP_LOGW(TAG, "Unsupported");
-    return -1;
-}
-static int set_gainceiling_dummy(sensor_t *sensor, gainceiling_t val)
-{
-    ESP_LOGW(TAG, "Unsupported");
-    return -1;
-}
-
-int gc032a_detect(int slv_addr, sensor_id_t *id)
-{
-    if (GC032A_SCCB_ADDR == slv_addr) {
-        uint8_t MIDL = SCCB_Read(slv_addr, SENSOR_ID_LOW);
-        uint8_t MIDH = SCCB_Read(slv_addr, SENSOR_ID_HIGH);
-        uint16_t PID = MIDH << 8 | MIDL;
-        if (GC032A_PID == PID) {
-            id->PID = PID;
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int gc032a_init(sensor_t *sensor)
-{
-    sensor->init_status = init_status;
-    sensor->reset = reset;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_contrast = set_dummy;
-    sensor->set_brightness = set_dummy;
-    sensor->set_saturation = set_dummy;
-    sensor->set_sharpness = set_dummy;
-    sensor->set_denoise = set_dummy;
-    sensor->set_gainceiling = set_gainceiling_dummy;
-    sensor->set_quality = set_dummy;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_whitebal = set_dummy;
-    sensor->set_gain_ctrl = set_dummy;
-    sensor->set_exposure_ctrl = set_dummy;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-
-    sensor->set_aec2 = set_dummy;
-    sensor->set_awb_gain = set_dummy;
-    sensor->set_agc_gain = set_dummy;
-    sensor->set_aec_value = set_dummy;
-
-    sensor->set_special_effect = set_dummy;
-    sensor->set_wb_mode = set_dummy;
-    sensor->set_ae_level = set_dummy;
-
-    sensor->set_dcw = set_dummy;
-    sensor->set_bpc = set_dummy;
-    sensor->set_wpc = set_dummy;
-
-    sensor->set_raw_gma = set_dummy;
-    sensor->set_lenc = set_dummy;
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = NULL;
-    sensor->set_pll = NULL;
-    sensor->set_xclk = NULL;
-
-    ESP_LOGD(TAG, "GC032A Attached");
-    return 0;
-}

+ 0 - 477
code/components/esp32-camera-master/sensors/gc2145.c

@@ -1,477 +0,0 @@
-// Copyright 2015-2021 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include "sccb.h"
-#include "gc2145.h"
-#include "gc2145_regs.h"
-#include "gc2145_settings.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char *TAG = "gc2145";
-#endif
-
-#define H8(v) ((v)>>8)
-#define L8(v) ((v)&0xff)
-
-//#define REG_DEBUG_ON
-
-static int read_reg(uint8_t slv_addr, const uint16_t reg)
-{
-    int ret = SCCB_Read(slv_addr, reg);
-#ifdef REG_DEBUG_ON
-    if (ret < 0) {
-        ESP_LOGE(TAG, "READ REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int write_reg(uint8_t slv_addr, const uint16_t reg, uint8_t value)
-{
-    int ret = 0;
-#ifndef REG_DEBUG_ON
-    ret = SCCB_Write(slv_addr, reg, value);
-#else
-    int old_value = read_reg(slv_addr, reg);
-    if (old_value < 0) {
-        return old_value;
-    }
-    if ((uint8_t)old_value != value) {
-        ESP_LOGI(TAG, "NEW REG 0x%04x: 0x%02x to 0x%02x", reg, (uint8_t)old_value, value);
-        ret = SCCB_Write(slv_addr, reg, value);
-    } else {
-        ESP_LOGD(TAG, "OLD REG 0x%04x: 0x%02x", reg, (uint8_t)old_value);
-        ret = SCCB_Write(slv_addr, reg, value);//maybe not?
-    }
-    if (ret < 0) {
-        ESP_LOGE(TAG, "WRITE REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int check_reg_mask(uint8_t slv_addr, uint16_t reg, uint8_t mask)
-{
-    return (read_reg(slv_addr, reg) & mask) == mask;
-}
-
-static int set_reg_bits(uint8_t slv_addr, uint16_t reg, uint8_t offset, uint8_t mask, uint8_t value)
-{
-    int ret = 0;
-    uint8_t c_value, new_value;
-    ret = read_reg(slv_addr, reg);
-    if (ret < 0) {
-        return ret;
-    }
-    c_value = ret;
-    new_value = (c_value & ~(mask << offset)) | ((value & mask) << offset);
-    ret = write_reg(slv_addr, reg, new_value);
-    return ret;
-}
-
-static int write_regs(uint8_t slv_addr, const uint16_t (*regs)[2])
-{
-    int i = 0, ret = 0;
-    while (!ret && regs[i][0] != REGLIST_TAIL) {
-        if (regs[i][0] == REG_DLY) {
-            vTaskDelay(regs[i][1] / portTICK_PERIOD_MS);
-        } else {
-            ret = write_reg(slv_addr, regs[i][0], regs[i][1]);
-        }
-        i++;
-    }
-    return ret;
-}
-
-static void print_regs(uint8_t slv_addr)
-{
-#ifdef DEBUG_PRINT_REG
-    vTaskDelay(pdMS_TO_TICKS(100));
-    ESP_LOGI(TAG, "REG list look ======================");
-    for (size_t i = 0xf0; i <= 0xfe; i++) {
-        ESP_LOGI(TAG, "reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-    ESP_LOGI(TAG, "\npage 0 ===");
-    write_reg(slv_addr, 0xfe, 0x00); // page 0
-    for (size_t i = 0x03; i <= 0x24; i++) {
-        ESP_LOGI(TAG, "p0 reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-    for (size_t i = 0x80; i <= 0xa2; i++) {
-        ESP_LOGI(TAG, "p0 reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-    ESP_LOGI(TAG, "\npage 3 ===");
-    write_reg(slv_addr, 0xfe, 0x03); // page 3
-    for (size_t i = 0x01; i <= 0x43; i++) {
-        ESP_LOGI(TAG, "p3 reg[0x%02x] = 0x%02x", i, read_reg(slv_addr, i));
-    }
-#endif
-}
-
-static int reset(sensor_t *sensor)
-{
-    int ret = 0;
-    // Software Reset: clear all registers and reset them to their default values
-    ret = write_reg(sensor->slv_addr, RESET_RELATED, 0xe0);
-    if (ret) {
-        ESP_LOGE(TAG, "Software Reset FAILED!");
-        return ret;
-    }
-    vTaskDelay(100 / portTICK_PERIOD_MS);
-    ret = write_regs(sensor->slv_addr, gc2145_default_init_regs);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Camera defaults loaded");
-        vTaskDelay(100 / portTICK_PERIOD_MS);
-#ifdef CONFIG_IDF_TARGET_ESP32
-        write_reg(sensor->slv_addr, 0xfe, 0x00);
-        //ensure pclk <= 15MHz for esp32
-        set_reg_bits(sensor->slv_addr, 0xf8, 0, 0x3f, 2); // divx4
-        set_reg_bits(sensor->slv_addr, 0xfa, 4, 0x0f, 2); // divide_by
-#endif
-
-    }
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret = 0;
-
-    switch (pixformat) {
-    case PIXFORMAT_RGB565:
-        write_reg(sensor->slv_addr, 0xfe, 0x00);
-        ret = set_reg_bits(sensor->slv_addr, P0_OUTPUT_FORMAT, 0, 0x1f, 6);  //RGB565
-        break;
-
-    case PIXFORMAT_YUV422:
-        write_reg(sensor->slv_addr, 0xfe, 0x00);
-        ret = set_reg_bits(sensor->slv_addr, P0_OUTPUT_FORMAT, 0, 0x1f, 2); //yuv422
-        break;
-    default:
-        ESP_LOGW(TAG, "unsupport format");
-        ret = -1;
-        break;
-    }
-
-    if (ret == 0) {
-        sensor->pixformat = pixformat;
-        ESP_LOGD(TAG, "Set pixformat to: %u", pixformat);
-    }
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret = 0;
-    if (framesize > FRAMESIZE_UXGA) {
-        ESP_LOGW(TAG, "Invalid framesize: %u", framesize);
-        framesize = FRAMESIZE_UXGA;
-    }
-    sensor->status.framesize = framesize;
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    uint16_t row_s = (resolution[FRAMESIZE_UXGA].height - h) / 2;
-    uint16_t col_s = (resolution[FRAMESIZE_UXGA].width - w) / 2;
-    (void)row_s;
-    (void)col_s;
-
-#if CONFIG_GC_SENSOR_SUBSAMPLE_MODE
-    struct subsample_cfg {
-        uint16_t ratio_numerator;
-        uint16_t ratio_denominator;
-        uint8_t reg0x99;
-        uint8_t reg0x9b;
-        uint8_t reg0x9c;
-        uint8_t reg0x9d;
-        uint8_t reg0x9e;
-        uint8_t reg0x9f;
-        uint8_t reg0xa0;
-        uint8_t reg0xa1;
-        uint8_t reg0xa2;
-    };
-    const struct subsample_cfg subsample_cfgs[] = { // define some subsample ratio
-        // {60, 420, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //1/7 // A smaller ratio brings a larger view, but it reduces the frame rate
-        // {84, 420, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //1/5
-        // {105, 420, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},//1/4
-        {140, 420, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},//1/3
-        {210, 420, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},//1/2
-        {240, 420, 0x77, 0x02, 0x46, 0x02, 0x46, 0x02, 0x46, 0x02, 0x46},//4/7
-        {252, 420, 0x55, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04, 0x02, 0x04},//3/5
-        {280, 420, 0x33, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00},//2/3
-        {420, 420, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},//1/1
-    };
-    uint16_t win_w = resolution[FRAMESIZE_UXGA].width;
-    uint16_t win_h = resolution[FRAMESIZE_UXGA].height;
-    const struct subsample_cfg *cfg = NULL;
-    /**
-     * Strategy: try to keep the maximum perspective
-     */
-    uint8_t i = 0;
-    if (framesize >= FRAMESIZE_QVGA) {
-        i = 1;
-    }
-    for (; i < sizeof(subsample_cfgs) / sizeof(struct subsample_cfg); i++) {
-        cfg = &subsample_cfgs[i];
-        if ((win_w * cfg->ratio_numerator / cfg->ratio_denominator >= w) && (win_h * cfg->ratio_numerator / cfg->ratio_denominator >= h)) {
-            win_w = w * cfg->ratio_denominator / cfg->ratio_numerator;
-            win_h = h * cfg->ratio_denominator / cfg->ratio_numerator;
-            row_s = (resolution[FRAMESIZE_UXGA].height - win_h) / 2;
-            col_s = (resolution[FRAMESIZE_UXGA].width - win_w) / 2;
-            ESP_LOGI(TAG, "subsample win:%dx%d, ratio:%f", win_w, win_h, (float)cfg->ratio_numerator / (float)cfg->ratio_denominator);
-            break;
-        }
-    }
-
-    write_reg(sensor->slv_addr, 0xfe, 0x00);
-    write_reg(sensor->slv_addr, P0_CROP_ENABLE, 0x01);
-    write_reg(sensor->slv_addr, 0x09, H8(row_s));
-    write_reg(sensor->slv_addr, 0x0a, L8(row_s));
-    write_reg(sensor->slv_addr, 0x0b, H8(col_s));
-    write_reg(sensor->slv_addr, 0x0c, L8(col_s));
-    write_reg(sensor->slv_addr, 0x0d, H8(win_h + 8));
-    write_reg(sensor->slv_addr, 0x0e, L8(win_h + 8));
-    write_reg(sensor->slv_addr, 0x0f, H8(win_w + 16));
-    write_reg(sensor->slv_addr, 0x10, L8(win_w + 16));
-
-    write_reg(sensor->slv_addr, 0x99, cfg->reg0x99);
-    write_reg(sensor->slv_addr, 0x9b, cfg->reg0x9b);
-    write_reg(sensor->slv_addr, 0x9c, cfg->reg0x9c);
-    write_reg(sensor->slv_addr, 0x9d, cfg->reg0x9d);
-    write_reg(sensor->slv_addr, 0x9e, cfg->reg0x9e);
-    write_reg(sensor->slv_addr, 0x9f, cfg->reg0x9f);
-    write_reg(sensor->slv_addr, 0xa0, cfg->reg0xa0);
-    write_reg(sensor->slv_addr, 0xa1, cfg->reg0xa1);
-    write_reg(sensor->slv_addr, 0xa2, cfg->reg0xa2);
-
-    write_reg(sensor->slv_addr, 0x95, H8(h));
-    write_reg(sensor->slv_addr, 0x96, L8(h));
-    write_reg(sensor->slv_addr, 0x97, H8(w));
-    write_reg(sensor->slv_addr, 0x98, L8(w));
-
-
-#elif CONFIG_GC_SENSOR_WINDOWING_MODE
-    write_reg(sensor->slv_addr, 0xfe, 0x00);
-
-    write_reg(sensor->slv_addr, P0_CROP_ENABLE, 0x01);
-    // write_reg(sensor->slv_addr, 0xec, col_s / 8); //measure window
-    // write_reg(sensor->slv_addr, 0xed, row_s / 8);
-    // write_reg(sensor->slv_addr, 0xee, (col_s + h) / 8);
-    // write_reg(sensor->slv_addr, 0xef, (row_s + w) / 8);
-
-    write_reg(sensor->slv_addr, 0x09, H8(row_s));
-    write_reg(sensor->slv_addr, 0x0a, L8(row_s));
-    write_reg(sensor->slv_addr, 0x0b, H8(col_s));
-    write_reg(sensor->slv_addr, 0x0c, L8(col_s));
-    write_reg(sensor->slv_addr, 0x0d, H8(h + 8));
-    write_reg(sensor->slv_addr, 0x0e, L8(h + 8));
-    write_reg(sensor->slv_addr, 0x0f, H8(w + 8));
-    write_reg(sensor->slv_addr, 0x10, L8(w + 8));
-
-    write_reg(sensor->slv_addr, 0x95, H8(h));
-    write_reg(sensor->slv_addr, 0x96, L8(h));
-    write_reg(sensor->slv_addr, 0x97, H8(w));
-    write_reg(sensor->slv_addr, 0x98, L8(w));
-
-#endif
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set framesize to: %ux%u", w, h);
-    }
-    return ret;
-
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.hmirror = enable;
-    ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
-    ret |= set_reg_bits(sensor->slv_addr, P0_ANALOG_MODE1, 0, 0x01, enable != 0);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set h-mirror to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.vflip = enable;
-    ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
-    ret |= set_reg_bits(sensor->slv_addr, P0_ANALOG_MODE1, 1, 0x01, enable != 0);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set v-flip to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    // ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
-    // ret |= set_reg_bits(sensor->slv_addr, P0_DEBUG_MODE3, 3, 0x01, enable);
-    if (ret == 0) {
-        sensor->status.colorbar = enable;
-        ESP_LOGD(TAG, "Set colorbar to: %d", enable);
-    }
-    return ret;
-}
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = 0;
-    if (mask > 0xFF) {
-        ESP_LOGE(TAG, "mask should not more than 0xff");
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if (ret > 0) {
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0;
-    if (mask > 0xFF) {
-        ESP_LOGE(TAG, "mask should not more than 0xff");
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if (ret < 0) {
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-
-    if (mask > 0xFF) {
-
-    } else {
-        ret = write_reg(sensor->slv_addr, reg, value);
-    }
-    return ret;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    write_reg(sensor->slv_addr, 0xfe, 0x00);
-    sensor->status.brightness = 0;
-    sensor->status.contrast = 0;
-    sensor->status.saturation = 0;
-    sensor->status.sharpness = 0;
-    sensor->status.denoise = 0;
-    sensor->status.ae_level = 0;
-    sensor->status.gainceiling = 0;
-    sensor->status.awb = 0;
-    sensor->status.dcw = 0;
-    sensor->status.agc = 0;
-    sensor->status.aec = 0;
-    sensor->status.hmirror = check_reg_mask(sensor->slv_addr, P0_ANALOG_MODE1, 0x01);
-    sensor->status.vflip = check_reg_mask(sensor->slv_addr, P0_ANALOG_MODE1, 0x02);
-    sensor->status.colorbar = 0;
-    sensor->status.bpc = 0;
-    sensor->status.wpc = 0;
-    sensor->status.raw_gma = 0;
-    sensor->status.lenc = 0;
-    sensor->status.quality = 0;
-    sensor->status.special_effect = 0;
-    sensor->status.wb_mode = 0;
-    sensor->status.awb_gain = 0;
-    sensor->status.agc_gain = 0;
-    sensor->status.aec_value = 0;
-    sensor->status.aec2 = 0;
-
-    print_regs(sensor->slv_addr);
-    return 0;
-}
-
-static int set_dummy(sensor_t *sensor, int val)
-{
-    ESP_LOGW(TAG, "Unsupported");
-    return -1;
-}
-static int set_gainceiling_dummy(sensor_t *sensor, gainceiling_t val)
-{
-    ESP_LOGW(TAG, "Unsupported");
-    return -1;
-}
-
-int gc2145_detect(int slv_addr, sensor_id_t *id)
-{
-    if (GC2145_SCCB_ADDR == slv_addr) {
-        uint8_t MIDL = SCCB_Read(slv_addr, CHIP_ID_LOW);
-        uint8_t MIDH = SCCB_Read(slv_addr, CHIP_ID_HIGH);
-        uint16_t PID = MIDH << 8 | MIDL;
-        if (GC2145_PID == PID) {
-            id->PID = PID;
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int gc2145_init(sensor_t *sensor)
-{
-    sensor->init_status = init_status;
-    sensor->reset = reset;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_contrast = set_dummy;
-    sensor->set_brightness = set_dummy;
-    sensor->set_saturation = set_dummy;
-    sensor->set_sharpness = set_dummy;
-    sensor->set_denoise = set_dummy;
-    sensor->set_gainceiling = set_gainceiling_dummy;
-    sensor->set_quality = set_dummy;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_whitebal = set_dummy;
-    sensor->set_gain_ctrl = set_dummy;
-    sensor->set_exposure_ctrl = set_dummy;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-
-    sensor->set_aec2 = set_dummy;
-    sensor->set_awb_gain = set_dummy;
-    sensor->set_agc_gain = set_dummy;
-    sensor->set_aec_value = set_dummy;
-
-    sensor->set_special_effect = set_dummy;
-    sensor->set_wb_mode = set_dummy;
-    sensor->set_ae_level = set_dummy;
-
-    sensor->set_dcw = set_dummy;
-    sensor->set_bpc = set_dummy;
-    sensor->set_wpc = set_dummy;
-
-    sensor->set_raw_gma = set_dummy;
-    sensor->set_lenc = set_dummy;
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = NULL;
-    sensor->set_pll = NULL;
-    sensor->set_xclk = NULL;
-
-    ESP_LOGD(TAG, "GC2145 Attached");
-    return 0;
-}

+ 0 - 1022
code/components/esp32-camera-master/sensors/nt99141.c

@@ -1,1022 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * NT99141 driver.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include "sccb.h"
-#include "xclk.h"
-#include "nt99141.h"
-#include "nt99141_regs.h"
-#include "nt99141_settings.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char *TAG = "NT99141";
-#endif
-
-//#define REG_DEBUG_ON
-
-static int read_reg(uint8_t slv_addr, const uint16_t reg)
-{
-    int ret = SCCB_Read16(slv_addr, reg);
-#ifdef REG_DEBUG_ON
-
-    if (ret < 0) {
-        ESP_LOGE(TAG, "READ REG 0x%04x FAILED: %d", reg, ret);
-    }
-
-#endif
-    return ret;
-}
-
-static int check_reg_mask(uint8_t slv_addr, uint16_t reg, uint8_t mask)
-{
-    return (read_reg(slv_addr, reg) & mask) == mask;
-}
-
-static int read_reg16(uint8_t slv_addr, const uint16_t reg)
-{
-    int ret = 0, ret2 = 0;
-    ret = read_reg(slv_addr, reg);
-
-    if (ret >= 0) {
-        ret = (ret & 0xFF) << 8;
-        ret2 = read_reg(slv_addr, reg + 1);
-
-        if (ret2 < 0) {
-            ret = ret2;
-        } else {
-            ret |= ret2 & 0xFF;
-        }
-    }
-
-    return ret;
-}
-
-
-static int write_reg(uint8_t slv_addr, const uint16_t reg, uint8_t value)
-{
-    int ret = 0;
-#ifndef REG_DEBUG_ON
-    ret = SCCB_Write16(slv_addr, reg, value);
-#else
-    int old_value = read_reg(slv_addr, reg);
-
-    if (old_value < 0) {
-        return old_value;
-    }
-
-    if ((uint8_t)old_value != value) {
-        ESP_LOGD(TAG, "NEW REG 0x%04x: 0x%02x to 0x%02x", reg, (uint8_t)old_value, value);
-        ret = SCCB_Write16(slv_addr, reg, value);
-    } else {
-        ESP_LOGD(TAG, "OLD REG 0x%04x: 0x%02x", reg, (uint8_t)old_value);
-        ret = SCCB_Write16(slv_addr, reg, value);//maybe not?
-    }
-
-    if (ret < 0) {
-        ESP_LOGE(TAG, "WRITE REG 0x%04x FAILED: %d", reg, ret);
-    }
-
-#endif
-    return ret;
-}
-
-static int set_reg_bits(uint8_t slv_addr, uint16_t reg, uint8_t offset, uint8_t mask, uint8_t value)
-{
-    int ret = 0;
-    uint8_t c_value, new_value;
-    ret = read_reg(slv_addr, reg);
-
-    if (ret < 0) {
-        return ret;
-    }
-
-    c_value = ret;
-    new_value = (c_value & ~(mask << offset)) | ((value & mask) << offset);
-    ret = write_reg(slv_addr, reg, new_value);
-    return ret;
-}
-
-static int write_regs(uint8_t slv_addr, const uint16_t (*regs)[2])
-{
-    int i = 0, ret = 0;
-
-    while (!ret && regs[i][0] != REGLIST_TAIL) {
-        if (regs[i][0] == REG_DLY) {
-            vTaskDelay(regs[i][1] / portTICK_PERIOD_MS);
-        } else {
-            ret = write_reg(slv_addr, regs[i][0], regs[i][1]);
-        }
-
-        i++;
-    }
-
-    return ret;
-}
-
-static int write_reg16(uint8_t slv_addr, const uint16_t reg, uint16_t value)
-{
-    if (write_reg(slv_addr, reg, value >> 8) || write_reg(slv_addr, reg + 1, value)) {
-        return -1;
-    }
-
-    return 0;
-}
-
-static int write_addr_reg(uint8_t slv_addr, const uint16_t reg, uint16_t x_value, uint16_t y_value)
-{
-    if (write_reg16(slv_addr, reg, x_value) || write_reg16(slv_addr, reg + 2, y_value)) {
-        return -1;
-    }
-
-    return 0;
-}
-
-#define write_reg_bits(slv_addr, reg, mask, enable) set_reg_bits(slv_addr, reg, 0, mask, enable?mask:0)
-
-static int set_pll(sensor_t *sensor, bool bypass, uint8_t multiplier, uint8_t sys_div, uint8_t pre_div, bool root_2x, uint8_t seld5, bool pclk_manual, uint8_t pclk_div)
-{
-    return -1;
-}
-
-static int set_ae_level(sensor_t *sensor, int level);
-
-static int reset(sensor_t *sensor)
-{
-
-    int ret = 0;
-    // Software Reset: clear all registers and reset them to their default values
-    ret = write_reg(sensor->slv_addr, SYSTEM_CTROL0, 0x01);
-
-    if (ret) {
-        ESP_LOGE(TAG, "Software Reset FAILED!");
-        return ret;
-    }
-
-    vTaskDelay(100 / portTICK_PERIOD_MS);
-    ret = write_regs(sensor->slv_addr, sensor_default_regs);   //re-initial
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Camera defaults loaded");
-        ret = set_ae_level(sensor, 0);
-        vTaskDelay(100 / portTICK_PERIOD_MS);
-    }
-
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret = 0;
-    const uint16_t (*regs)[2];
-
-    switch (pixformat) {
-        case PIXFORMAT_YUV422:
-            regs = sensor_fmt_yuv422;
-            break;
-
-        case PIXFORMAT_GRAYSCALE:
-            regs = sensor_fmt_grayscale;
-            break;
-
-        case PIXFORMAT_RGB565:
-        case PIXFORMAT_RGB888:
-            regs = sensor_fmt_rgb565;
-            break;
-
-        case PIXFORMAT_JPEG:
-            regs = sensor_fmt_jpeg;
-            break;
-
-        case PIXFORMAT_RAW:
-            regs = sensor_fmt_raw;
-            break;
-
-        default:
-            ESP_LOGE(TAG, "Unsupported pixformat: %u", pixformat);
-            return -1;
-    }
-
-    ret = write_regs(sensor->slv_addr, regs);
-
-    if (ret == 0) {
-        sensor->pixformat = pixformat;
-        ESP_LOGD(TAG, "Set pixformat to: %u", pixformat);
-    }
-
-    return ret;
-}
-
-static int set_image_options(sensor_t *sensor)
-{
-    int ret = 0;
-    uint8_t reg20 = 0;
-    uint8_t reg21 = 0;
-    uint8_t reg4514 = 0;
-    uint8_t reg4514_test = 0;
-
-    // V-Flip
-    if (sensor->status.vflip) {
-        reg20 |= 0x01;
-        reg4514_test |= 1;
-    }
-
-    // H-Mirror
-    if (sensor->status.hmirror) {
-        reg21 |= 0x02;
-        reg4514_test |= 2;
-    }
-
-    switch (reg4514_test) {
-
-    }
-
-    if (write_reg(sensor->slv_addr, TIMING_TC_REG20, reg20 | reg21)) {
-        ESP_LOGE(TAG, "Setting Image Options Failed");
-        ret = -1;
-    }
-
-    ESP_LOGD(TAG, "Set Image Options: Compression: %u, Binning: %u, V-Flip: %u, H-Mirror: %u, Reg-4514: 0x%02x",
-             sensor->pixformat == PIXFORMAT_JPEG, sensor->status.binning, sensor->status.vflip, sensor->status.hmirror, reg4514);
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret = 0;
-
-    sensor->status.framesize = framesize;
-    ret = write_regs(sensor->slv_addr, sensor_default_regs);
-
-    if (framesize == FRAMESIZE_QVGA) {
-        ESP_LOGD(TAG, "Set FRAMESIZE_QVGA");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_QVGA);
-#if    CONFIG_NT99141_SUPPORT_XSKIP
-        ESP_LOGD(TAG, "Set FRAMESIZE_QVGA: xskip mode");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_QVGA_xskip);
-#elif  CONFIG_NT99141_SUPPORT_CROP
-        ESP_LOGD(TAG, "Set FRAMESIZE_QVGA: crop mode");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_QVGA_crop);
-#endif
-    } else if (framesize == FRAMESIZE_VGA) {
-        ESP_LOGD(TAG, "Set FRAMESIZE_VGA");
-        // ret = write_regs(sensor->slv_addr, sensor_framesize_VGA);
-        ret = write_regs(sensor->slv_addr, sensor_framesize_VGA_xyskip);// Resolution:640*360 This configuration is equally-scaled without deforming
-#ifdef CONFIG_NT99141_SUPPORT_XSKIP
-        ESP_LOGD(TAG, "Set FRAMESIZE_QVGA: xskip mode");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_VGA_xskip);
-#elif CONFIG_NT99141_SUPPORT_CROP
-        ESP_LOGD(TAG, "Set FRAMESIZE_QVGA: crop mode");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_VGA_crop);
-#endif
-    } else if (framesize >= FRAMESIZE_HD) {
-        ESP_LOGD(TAG, "Set FRAMESIZE_HD");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_HD);
-    } else {
-        ESP_LOGD(TAG, "Dont suppost this size, Set FRAMESIZE_VGA");
-        ret = write_regs(sensor->slv_addr, sensor_framesize_VGA);
-    }
-
-    return ret;
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.hmirror = enable;
-    ret = set_image_options(sensor);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set h-mirror to: %d", enable);
-    }
-
-    return ret;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.vflip = enable;
-    ret = set_image_options(sensor);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set v-flip to: %d", enable);
-    }
-
-    return ret;
-}
-
-static int set_quality(sensor_t *sensor, int qs)
-{
-    int ret = 0;
-    ret = write_reg(sensor->slv_addr, COMPRESSION_CTRL07, qs & 0x3f);
-
-    if (ret == 0) {
-        sensor->status.quality = qs;
-        ESP_LOGD(TAG, "Set quality to: %d", qs);
-    }
-
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, PRE_ISP_TEST_SETTING_1, TEST_COLOR_BAR, enable);
-
-    if (ret == 0) {
-        sensor->status.colorbar = enable;
-        ESP_LOGD(TAG, "Set colorbar to: %d", enable);
-    }
-
-    return ret;
-}
-
-static int set_gain_ctrl(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x32bb, 0x87, enable);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gain_ctrl to: %d", enable);
-        sensor->status.agc = enable;
-    }
-
-    return ret;
-}
-
-static int set_exposure_ctrl(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-       int data = 0;
-    // ret = write_reg_bits(sensor->slv_addr, 0x32bb, 0x87, enable);
-    data = read_reg(sensor->slv_addr, 0x3201);
-    ESP_LOGD(TAG, "set_exposure_ctrl:enable");
-    if (enable) {
-        ESP_LOGD(TAG, "set_exposure_ctrl:enable");
-        ret = write_reg(sensor->slv_addr, 0x3201, (1 << 5) | data);
-    } else {
-        ESP_LOGD(TAG, "set_exposure_ctrl:disable");
-        ret = write_reg(sensor->slv_addr, 0x3201, (~(1 << 5)) & data);
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set exposure_ctrl to: %d", enable);
-        sensor->status.aec = enable;
-    }
-
-    return ret;
-}
-
-static int set_whitebal(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set awb to: %d", enable);
-        sensor->status.awb = enable;
-    }
-
-    return ret;
-}
-
-//Advanced AWB
-static int set_dcw_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set dcw to: %d", enable);
-        sensor->status.dcw = enable;
-    }
-
-    return ret;
-}
-
-//night mode enable
-static int set_aec2(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec2 to: %d", enable);
-        sensor->status.aec2 = enable;
-    }
-
-    return ret;
-}
-
-static int set_bpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set bpc to: %d", enable);
-        sensor->status.bpc = enable;
-    }
-
-    return ret;
-}
-
-static int set_wpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wpc to: %d", enable);
-        sensor->status.wpc = enable;
-    }
-
-    return ret;
-}
-
-//Gamma enable
-static int set_raw_gma_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set raw_gma to: %d", enable);
-        sensor->status.raw_gma = enable;
-    }
-
-    return ret;
-}
-
-static int set_lenc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set lenc to: %d", enable);
-        sensor->status.lenc = enable;
-    }
-
-    return ret;
-}
-
-static int get_agc_gain(sensor_t *sensor)
-{
-    ESP_LOGD(TAG, "get_agc_gain can not be configured at present");
-    return 0;
-}
-
-//real gain
-static int set_agc_gain(sensor_t *sensor, int gain)
-{
-    ESP_LOGD(TAG, "set_agc_gain can not be configured at present");
-    // ESP_LOGD(TAG, "GAIN = %d\n", gain);
-    int cnt = gain / 2;
-
-    switch (cnt) {
-        case 0:
-            ESP_LOGD(TAG, "set_agc_gain: 1x");
-            write_reg(sensor->slv_addr, 0X301D, 0X00);
-            break;
-
-        case 1:
-            ESP_LOGD(TAG,"set_agc_gain: 2x");
-            write_reg(sensor->slv_addr, 0X301D, 0X0F);
-            break;
-
-        case 2:
-            ESP_LOGD(TAG,"set_agc_gain: 4x");
-            write_reg(sensor->slv_addr, 0X301D, 0X2F);
-            break;
-
-        case 3:
-            ESP_LOGD(TAG,"set_agc_gain: 6x");
-            write_reg(sensor->slv_addr, 0X301D, 0X37);
-            break;
-
-        case 4:
-            ESP_LOGD(TAG,"set_agc_gain: 8x");
-            write_reg(sensor->slv_addr, 0X301D, 0X3F);
-            break;
-
-        default:
-            ESP_LOGD(TAG,"fail set_agc_gain");
-            break;
-    }
-
-    return 0;
-}
-
-static int get_aec_value(sensor_t *sensor)
-{
-    ESP_LOGD(TAG, "get_aec_value can not be configured at present");
-    return 0;
-}
-
-static int set_aec_value(sensor_t *sensor, int value)
-{
-    ESP_LOGD(TAG, "set_aec_value can not be configured at present");
-    int ret = 0;
-    // ESP_LOGD(TAG, " set_aec_value to: %d", value);
-    ret = write_reg_bits(sensor->slv_addr, 0x3012, 0x00, (value >> 8) & 0xff);
-    ret = write_reg_bits(sensor->slv_addr, 0x3013, 0x01, value & 0xff);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, " set_aec_value to: %d", value);
-        // sensor->status.aec = enable;
-    }
-
-    return ret;
-}
-
-static int set_ae_level(sensor_t *sensor, int level)
-{
-    ESP_LOGD(TAG, "set_ae_level can not be configured at present");
-    int ret = 0;
-
-    if (level < 0) {
-        level = 0;
-    } else if (level > 9) {
-        level = 9;
-    }
-
-    for (int i = 0; i < 5; i++) {
-        ret += write_reg(sensor->slv_addr, sensor_ae_level[ 5 * level + i ][0], sensor_ae_level[5 * level + i ][1]);
-    }
-
-    if (ret) {
-        ESP_LOGE(TAG, " fail to set ae level: %d", ret);
-    }
-
-    return 0;
-}
-
-static int set_wb_mode(sensor_t *sensor, int mode)
-{
-    int ret = 0;
-
-    if (mode < 0 || mode > 4) {
-        return -1;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x3201, (mode != 0));
-
-    if (ret) {
-        return ret;
-    }
-
-    switch (mode) {
-        case 1://Sunny
-            ret  = write_reg16(sensor->slv_addr, 0x3290, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3291, 0x38)
-                   || write_reg16(sensor->slv_addr, 0x3296, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3297, 0x68)
-                   || write_reg16(sensor->slv_addr, 0x3060, 0x01);
-
-            break;
-
-        case 2://Cloudy
-
-            ret  = write_reg16(sensor->slv_addr, 0x3290, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3291, 0x51)
-                   || write_reg16(sensor->slv_addr, 0x3296, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3297, 0x00)
-                   || write_reg16(sensor->slv_addr, 0x3060, 0x01);
-            break;
-
-        case 3://INCANDESCENCE]
-            ret  = write_reg16(sensor->slv_addr, 0x3290, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3291, 0x30)
-                   || write_reg16(sensor->slv_addr, 0x3296, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3297, 0xCB)
-                   || write_reg16(sensor->slv_addr, 0x3060, 0x01);
-            break;
-
-        case 4://FLUORESCENT
-            ret  = write_reg16(sensor->slv_addr, 0x3290, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3291, 0x70)
-                   || write_reg16(sensor->slv_addr, 0x3296, 0x01)
-                   || write_reg16(sensor->slv_addr, 0x3297, 0xFF)
-                   || write_reg16(sensor->slv_addr, 0x3060, 0x01);
-            break;
-
-        default://AUTO
-            break;
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wb_mode to: %d", mode);
-        sensor->status.wb_mode = mode;
-    }
-
-    return ret;
-}
-
-static int set_awb_gain_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    int old_mode = sensor->status.wb_mode;
-    int mode = enable ? old_mode : 0;
-
-    ret = set_wb_mode(sensor, mode);
-
-    if (ret == 0) {
-        sensor->status.wb_mode = old_mode;
-        ESP_LOGD(TAG, "Set awb_gain to: %d", enable);
-        sensor->status.awb_gain = enable;
-    }
-
-    return ret;
-}
-
-static int set_special_effect(sensor_t *sensor, int effect)
-{
-    int ret = 0;
-
-    if (effect < 0 || effect > 6) {
-        return -1;
-    }
-
-    uint8_t *regs = (uint8_t *)sensor_special_effects[effect];
-    ret =  write_reg(sensor->slv_addr, 0x32F1, regs[0])
-           || write_reg(sensor->slv_addr, 0x32F4, regs[1])
-           || write_reg(sensor->slv_addr, 0x32F5, regs[2])
-           || write_reg(sensor->slv_addr, 0x3060, regs[3]);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set special_effect to: %d", effect);
-        sensor->status.special_effect = effect;
-    }
-
-    return ret;
-}
-
-static int set_brightness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    uint8_t value = 0;
-
-    switch (level) {
-        case 3:
-            value = 0xA0;
-            break;
-
-        case 2:
-            value = 0x90;
-            break;
-
-        case 1:
-            value = 0x88;
-            break;
-
-        case -1:
-            value = 0x78;
-            break;
-
-        case -2:
-            value = 0x70;
-            break;
-
-        case -3:
-            value = 0x60;
-            break;
-
-        default: // 0
-            break;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x32F2, value);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set brightness to: %d", level);
-        sensor->status.brightness = level;
-    }
-
-    return ret;
-}
-
-static int set_contrast(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    uint8_t value1 = 0, value2 = 0 ;
-
-    switch (level) {
-        case 3:
-            value1 = 0xD0;
-            value2 = 0xB0;
-            break;
-
-        case 2:
-            value1 = 0xE0;
-            value2 = 0xA0;
-            break;
-
-        case 1:
-            value1 = 0xF0;
-            value2 = 0x90;
-            break;
-
-        case 0:
-            value1 = 0x00;
-            value2 = 0x80;
-            break;
-
-        case -1:
-            value1 = 0x10;
-            value2 = 0x70;
-            break;
-
-        case -2:
-            value1 = 0x20;
-            value2 = 0x60;
-            break;
-
-        case -3:
-            value1 = 0x30;
-            value2 = 0x50;
-            break;
-
-        default: // 0
-            break;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x32FC, value1);
-    ret = write_reg(sensor->slv_addr, 0x32F2, value2);
-    ret = write_reg(sensor->slv_addr, 0x3060, 0x01);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set contrast to: %d", level);
-        sensor->status.contrast = level;
-    }
-
-    return ret;
-}
-
-static int set_saturation(sensor_t *sensor, int level)
-{
-    int ret = 0;
-
-    if (level > 4 || level < -4) {
-        return -1;
-    }
-
-    uint8_t *regs = (uint8_t *)sensor_saturation_levels[level + 4];
-    {
-        ret = write_reg(sensor->slv_addr, 0x32F3, regs[0]);
-
-        if (ret) {
-            return ret;
-        }
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set saturation to: %d", level);
-        sensor->status.saturation = level;
-    }
-
-    return ret;
-}
-
-static int set_sharpness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-
-    if (level > 3 || level < -3) {
-        return -1;
-    }
-
-    uint8_t mt_offset_2 = (level + 3) * 8;
-    uint8_t mt_offset_1 = mt_offset_2 + 1;
-
-    ret = write_reg_bits(sensor->slv_addr, 0x5308, 0x40, false)//0x40 means auto
-          || write_reg(sensor->slv_addr, 0x5300, 0x10)
-          || write_reg(sensor->slv_addr, 0x5301, 0x10)
-          || write_reg(sensor->slv_addr, 0x5302, mt_offset_1)
-          || write_reg(sensor->slv_addr, 0x5303, mt_offset_2)
-          || write_reg(sensor->slv_addr, 0x5309, 0x10)
-          || write_reg(sensor->slv_addr, 0x530a, 0x10)
-          || write_reg(sensor->slv_addr, 0x530b, 0x04)
-          || write_reg(sensor->slv_addr, 0x530c, 0x06);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set sharpness to: %d", level);
-        sensor->status.sharpness = level;
-    }
-
-    return ret;
-}
-
-static int set_gainceiling(sensor_t *sensor, gainceiling_t level)
-{
-    ESP_LOGD(TAG, "set_gainceiling can not be configured at present");
-    return 0;
-}
-
-static int get_denoise(sensor_t *sensor)
-{
-
-    return (read_reg(sensor->slv_addr, 0x5306) / 4) + 1;
-}
-
-static int set_denoise(sensor_t *sensor, int level)
-{
-    ESP_LOGD(TAG, "set_denoise can not be configured at present");
-    return 0;
-}
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = 0, ret2 = 0;
-
-    if (mask > 0xFF) {
-        ret = read_reg16(sensor->slv_addr, reg);
-
-        if (ret >= 0 && mask > 0xFFFF) {
-            ret2 = read_reg(sensor->slv_addr, reg + 2);
-
-            if (ret2 >= 0) {
-                ret = (ret << 8) | ret2 ;
-            } else {
-                ret = ret2;
-            }
-        }
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-
-    if (ret > 0) {
-        ret &= mask;
-    }
-
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0, ret2 = 0;
-
-    if (mask > 0xFF) {
-        ret = read_reg16(sensor->slv_addr, reg);
-
-        if (ret >= 0 && mask > 0xFFFF) {
-            ret2 = read_reg(sensor->slv_addr, reg + 2);
-
-            if (ret2 >= 0) {
-                ret = (ret << 8) | ret2 ;
-            } else {
-                ret = ret2;
-            }
-        }
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-
-    if (ret < 0) {
-        return ret;
-    }
-
-    value = (ret & ~mask) | (value & mask);
-
-    if (mask > 0xFFFF) {
-        ret = write_reg16(sensor->slv_addr, reg, value >> 8);
-
-        if (ret >= 0) {
-            ret = write_reg(sensor->slv_addr, reg + 2, value & 0xFF);
-        }
-    } else if (mask > 0xFF) {
-        ret = write_reg16(sensor->slv_addr, reg, value);
-    } else {
-        ret = write_reg(sensor->slv_addr, reg, value);
-    }
-
-    return ret;
-}
-
-static int set_res_raw(sensor_t *sensor, int startX, int startY, int endX, int endY, int offsetX, int offsetY, int totalX, int totalY, int outputX, int outputY, bool scale, bool binning)
-{
-    int ret = 0;
-    ret  = write_addr_reg(sensor->slv_addr, X_ADDR_ST_H, startX, startY)
-           || write_addr_reg(sensor->slv_addr, X_ADDR_END_H, endX, endY)
-           || write_addr_reg(sensor->slv_addr, X_OFFSET_H, offsetX, offsetY)
-           || write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, totalX, totalY)
-           || write_addr_reg(sensor->slv_addr, X_OUTPUT_SIZE_H, outputX, outputY);
-
-    if (!ret) {
-        sensor->status.scale = scale;
-        sensor->status.binning = binning;
-        ret = set_image_options(sensor);
-    }
-
-    return ret;
-}
-
-static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div)
-{
-    return set_pll(sensor, bypass > 0, multiplier, sys_div, pre_div, root_2x > 0, seld5, pclk_manual > 0, pclk_div);
-}
-
-static int set_xclk(sensor_t *sensor, int timer, int xclk)
-{
-    int ret = 0;
-    if (xclk > 10)
-    {
-        ESP_LOGE(TAG, "only XCLK under 10MHz is supported, and XCLK is now set to 10M");
-        xclk = 10;
-    }
-    sensor->xclk_freq_hz = xclk * 1000000U;
-    ret = xclk_timer_conf(timer, sensor->xclk_freq_hz);
-    return ret;
-}
-
-int nt99141_detect(int slv_addr, sensor_id_t *id)
-{
-    if (NT99141_SCCB_ADDR == slv_addr) {
-        SCCB_Write16(slv_addr, 0x3008, 0x01);//bank sensor
-        uint16_t h = SCCB_Read16(slv_addr, 0x3000);
-        uint16_t l = SCCB_Read16(slv_addr, 0x3001);
-        uint16_t PID = (h<<8) | l;
-        if (NT99141_PID == PID) {
-            id->PID = PID;
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    sensor->status.brightness = 0;
-    sensor->status.contrast = 0;
-    sensor->status.saturation = 0;
-    sensor->status.sharpness = (read_reg(sensor->slv_addr, 0x3301));
-    sensor->status.denoise = get_denoise(sensor);
-    sensor->status.ae_level = 0;
-    sensor->status.gainceiling = read_reg16(sensor->slv_addr, 0x32F0) & 0xFF;
-    sensor->status.awb = check_reg_mask(sensor->slv_addr, ISP_CONTROL_01, 0x10);
-    sensor->status.dcw = !check_reg_mask(sensor->slv_addr, 0x5183, 0x80);
-    sensor->status.agc = !check_reg_mask(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AGC_MANUALEN);
-    sensor->status.aec = !check_reg_mask(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AEC_MANUALEN);
-    sensor->status.hmirror = check_reg_mask(sensor->slv_addr, TIMING_TC_REG21, TIMING_TC_REG21_HMIRROR);
-    sensor->status.vflip = check_reg_mask(sensor->slv_addr, TIMING_TC_REG20, TIMING_TC_REG20_VFLIP);
-    sensor->status.colorbar = check_reg_mask(sensor->slv_addr, PRE_ISP_TEST_SETTING_1, TEST_COLOR_BAR);
-    sensor->status.bpc = check_reg_mask(sensor->slv_addr, 0x5000, 0x04);
-    sensor->status.wpc = check_reg_mask(sensor->slv_addr, 0x5000, 0x02);
-    sensor->status.raw_gma = check_reg_mask(sensor->slv_addr, 0x5000, 0x20);
-    sensor->status.lenc = check_reg_mask(sensor->slv_addr, 0x5000, 0x80);
-    sensor->status.quality = read_reg(sensor->slv_addr, COMPRESSION_CTRL07) & 0x3f;
-    sensor->status.special_effect = 0;
-    sensor->status.wb_mode = 0;
-    sensor->status.awb_gain = check_reg_mask(sensor->slv_addr, 0x3000, 0x01);
-    sensor->status.agc_gain = get_agc_gain(sensor);
-    sensor->status.aec_value = get_aec_value(sensor);
-    sensor->status.aec2 = check_reg_mask(sensor->slv_addr, 0x3000, 0x04);
-    return 0;
-}
-
-int nt99141_init(sensor_t *sensor)
-{
-    sensor->reset = reset;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_contrast = set_contrast;
-    sensor->set_brightness = set_brightness;
-    sensor->set_saturation = set_saturation;
-    sensor->set_sharpness = set_sharpness;
-    sensor->set_gainceiling = set_gainceiling;
-    sensor->set_quality = set_quality;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_gain_ctrl = set_gain_ctrl;
-    sensor->set_exposure_ctrl = set_exposure_ctrl;
-    sensor->set_whitebal = set_whitebal;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-    sensor->init_status = init_status;
-    sensor->set_aec2 = set_aec2;
-    sensor->set_aec_value = set_aec_value;
-    sensor->set_special_effect = set_special_effect;
-    sensor->set_wb_mode = set_wb_mode;
-    sensor->set_ae_level = set_ae_level;
-    sensor->set_dcw = set_dcw_dsp;
-    sensor->set_bpc = set_bpc_dsp;
-    sensor->set_wpc = set_wpc_dsp;
-    sensor->set_awb_gain = set_awb_gain_dsp;
-    sensor->set_agc_gain = set_agc_gain;
-    sensor->set_raw_gma = set_raw_gma_dsp;
-    sensor->set_lenc = set_lenc_dsp;
-    sensor->set_denoise = set_denoise;
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = set_res_raw;
-    sensor->set_pll = _set_pll;
-    sensor->set_xclk = set_xclk;
-    return 0;
-}

+ 0 - 612
code/components/esp32-camera-master/sensors/ov2640.c

@@ -1,612 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV2640 driver.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include "sccb.h"
-#include "xclk.h"
-#include "ov2640.h"
-#include "ov2640_regs.h"
-#include "ov2640_settings.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char* TAG = "ov2640";
-#endif
-
-static volatile ov2640_bank_t reg_bank = BANK_MAX;
-static int set_bank(sensor_t *sensor, ov2640_bank_t bank)
-{
-    int res = 0;
-    if (bank != reg_bank) {
-        reg_bank = bank;
-        res = SCCB_Write(sensor->slv_addr, BANK_SEL, bank);
-    }
-    return res;
-}
-
-static int write_regs(sensor_t *sensor, const uint8_t (*regs)[2])
-{
-    int i=0, res = 0;
-    while (regs[i][0]) {
-        if (regs[i][0] == BANK_SEL) {
-            res = set_bank(sensor, regs[i][1]);
-        } else {
-            res = SCCB_Write(sensor->slv_addr, regs[i][0], regs[i][1]);
-        }
-        if (res) {
-            return res;
-        }
-        i++;
-    }
-    return res;
-}
-
-static int write_reg(sensor_t *sensor, ov2640_bank_t bank, uint8_t reg, uint8_t value)
-{
-    int ret = set_bank(sensor, bank);
-    if(!ret) {
-        ret = SCCB_Write(sensor->slv_addr, reg, value);
-    }
-    return ret;
-}
-
-static int set_reg_bits(sensor_t *sensor, uint8_t bank, uint8_t reg, uint8_t offset, uint8_t mask, uint8_t value)
-{
-    int ret = 0;
-    uint8_t c_value, new_value;
-
-    ret = set_bank(sensor, bank);
-    if(ret) {
-        return ret;
-    }
-    c_value = SCCB_Read(sensor->slv_addr, reg);
-    new_value = (c_value & ~(mask << offset)) | ((value & mask) << offset);
-    ret = SCCB_Write(sensor->slv_addr, reg, new_value);
-    return ret;
-}
-
-static int read_reg(sensor_t *sensor, ov2640_bank_t bank, uint8_t reg)
-{
-    if(set_bank(sensor, bank)){
-        return 0;
-    }
-    return SCCB_Read(sensor->slv_addr, reg);
-}
-
-static uint8_t get_reg_bits(sensor_t *sensor, uint8_t bank, uint8_t reg, uint8_t offset, uint8_t mask)
-{
-    return (read_reg(sensor, bank, reg) >> offset) & mask;
-}
-
-static int write_reg_bits(sensor_t *sensor, uint8_t bank, uint8_t reg, uint8_t mask, int enable)
-{
-    return set_reg_bits(sensor, bank, reg, 0, mask, enable?mask:0);
-}
-
-#define WRITE_REGS_OR_RETURN(regs) ret = write_regs(sensor, regs); if(ret){return ret;}
-#define WRITE_REG_OR_RETURN(bank, reg, val) ret = write_reg(sensor, bank, reg, val); if(ret){return ret;}
-#define SET_REG_BITS_OR_RETURN(bank, reg, offset, mask, val) ret = set_reg_bits(sensor, bank, reg, offset, mask, val); if(ret){return ret;}
-
-static int reset(sensor_t *sensor)
-{
-    int ret = 0;
-    WRITE_REG_OR_RETURN(BANK_SENSOR, COM7, COM7_SRST);
-    vTaskDelay(10 / portTICK_PERIOD_MS);
-    WRITE_REGS_OR_RETURN(ov2640_settings_cif);
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret = 0;
-    sensor->pixformat = pixformat;
-    switch (pixformat) {
-    case PIXFORMAT_RGB565:
-    case PIXFORMAT_RGB888:
-        WRITE_REGS_OR_RETURN(ov2640_settings_rgb565);
-        break;
-    case PIXFORMAT_YUV422:
-    case PIXFORMAT_GRAYSCALE:
-        WRITE_REGS_OR_RETURN(ov2640_settings_yuv422);
-        break;
-    case PIXFORMAT_JPEG:
-        WRITE_REGS_OR_RETURN(ov2640_settings_jpeg3);
-        break;
-    default:
-        ret = -1;
-        break;
-    }
-    if(!ret) {
-        vTaskDelay(10 / portTICK_PERIOD_MS);
-    }
-
-    return ret;
-}
-
-static int set_window(sensor_t *sensor, ov2640_sensor_mode_t mode, int offset_x, int offset_y, int max_x, int max_y, int w, int h){
-    int ret = 0;
-    const uint8_t (*regs)[2];
-    ov2640_clk_t c;
-    c.reserved = 0;
-
-    max_x /= 4;
-    max_y /= 4;
-    w /= 4;
-    h /= 4;
-    uint8_t win_regs[][2] = {
-        {BANK_SEL, BANK_DSP},
-        {HSIZE, max_x & 0xFF},
-        {VSIZE, max_y & 0xFF},
-        {XOFFL, offset_x & 0xFF},
-        {YOFFL, offset_y & 0xFF},
-        {VHYX, ((max_y >> 1) & 0X80) | ((offset_y >> 4) & 0X70) | ((max_x >> 5) & 0X08) | ((offset_x >> 8) & 0X07)},
-        {TEST, (max_x >> 2) & 0X80},
-        {ZMOW, (w)&0xFF},
-        {ZMOH, (h)&0xFF},
-        {ZMHH, ((h>>6)&0x04)|((w>>8)&0x03)},
-        {0, 0}
-    };
-
-    if (sensor->pixformat == PIXFORMAT_JPEG) {
-        c.clk_2x = 0;
-        c.clk_div = 0;
-        c.pclk_auto = 0;
-        c.pclk_div = 8;
-        if(mode == OV2640_MODE_UXGA) {
-            c.pclk_div = 12;
-        }
-        // if (sensor->xclk_freq_hz == 16000000) {
-        //     c.pclk_div = c.pclk_div / 2;
-        // }
-    } else {
-#if CONFIG_IDF_TARGET_ESP32
-        c.clk_2x = 0;
-#else
-        c.clk_2x = 1;
-#endif
-        c.clk_div = 7;
-        c.pclk_auto = 1;
-        c.pclk_div = 8;
-        if (mode == OV2640_MODE_CIF) {
-            c.clk_div = 3;
-        } else if(mode == OV2640_MODE_UXGA) {
-            c.pclk_div = 12;
-        }
-    }
-    ESP_LOGI(TAG, "Set PLL: clk_2x: %u, clk_div: %u, pclk_auto: %u, pclk_div: %u", c.clk_2x, c.clk_div, c.pclk_auto, c.pclk_div);
-
-    if (mode == OV2640_MODE_CIF) {
-        regs = ov2640_settings_to_cif;
-    } else if (mode == OV2640_MODE_SVGA) {
-        regs = ov2640_settings_to_svga;
-    } else {
-        regs = ov2640_settings_to_uxga;
-    }
-
-    WRITE_REG_OR_RETURN(BANK_DSP, R_BYPASS, R_BYPASS_DSP_BYPAS);
-    WRITE_REGS_OR_RETURN(regs);
-    WRITE_REGS_OR_RETURN(win_regs);
-    WRITE_REG_OR_RETURN(BANK_SENSOR, CLKRC, c.clk);
-    WRITE_REG_OR_RETURN(BANK_DSP, R_DVP_SP, c.pclk);
-    WRITE_REG_OR_RETURN(BANK_DSP, R_BYPASS, R_BYPASS_DSP_EN);
-
-    vTaskDelay(10 / portTICK_PERIOD_MS);
-    //required when changing resolution
-    set_pixformat(sensor, sensor->pixformat);
-
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret = 0;
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    aspect_ratio_t ratio = resolution[framesize].aspect_ratio;
-    uint16_t max_x = ratio_table[ratio].max_x;
-    uint16_t max_y = ratio_table[ratio].max_y;
-    uint16_t offset_x = ratio_table[ratio].offset_x;
-    uint16_t offset_y = ratio_table[ratio].offset_y;
-    ov2640_sensor_mode_t mode = OV2640_MODE_UXGA;
-
-    sensor->status.framesize = framesize;
-
-
-
-    if (framesize <= FRAMESIZE_CIF) {
-        mode = OV2640_MODE_CIF;
-        max_x /= 4;
-        max_y /= 4;
-        offset_x /= 4;
-        offset_y /= 4;
-        if(max_y > 296){
-            max_y = 296;
-        }
-    } else if (framesize <= FRAMESIZE_SVGA) {
-        mode = OV2640_MODE_SVGA;
-        max_x /= 2;
-        max_y /= 2;
-        offset_x /= 2;
-        offset_y /= 2;
-    }
-
-    ret = set_window(sensor, mode, offset_x, offset_y, max_x, max_y, w, h);
-    return ret;
-}
-
-static int set_contrast(sensor_t *sensor, int level)
-{
-    int ret=0;
-    level += 3;
-    if (level <= 0 || level > NUM_CONTRAST_LEVELS) {
-        return -1;
-    }
-    sensor->status.contrast = level-3;
-    for (int i=0; i<7; i++) {
-        WRITE_REG_OR_RETURN(BANK_DSP, contrast_regs[0][i], contrast_regs[level][i]);
-    }
-    return ret;
-}
-
-static int set_brightness(sensor_t *sensor, int level)
-{
-    int ret=0;
-    level += 3;
-    if (level <= 0 || level > NUM_BRIGHTNESS_LEVELS) {
-        return -1;
-    }
-    sensor->status.brightness = level-3;
-    for (int i=0; i<5; i++) {
-        WRITE_REG_OR_RETURN(BANK_DSP, brightness_regs[0][i], brightness_regs[level][i]);
-    }
-    return ret;
-}
-
-static int set_saturation(sensor_t *sensor, int level)
-{
-    int ret=0;
-    level += 3;
-    if (level <= 0 || level > NUM_SATURATION_LEVELS) {
-        return -1;
-    }
-    sensor->status.saturation = level-3;
-    for (int i=0; i<5; i++) {
-        WRITE_REG_OR_RETURN(BANK_DSP, saturation_regs[0][i], saturation_regs[level][i]);
-    }
-    return ret;
-}
-
-static int set_special_effect(sensor_t *sensor, int effect)
-{
-    int ret=0;
-    effect++;
-    if (effect <= 0 || effect > NUM_SPECIAL_EFFECTS) {
-        return -1;
-    }
-    sensor->status.special_effect = effect-1;
-    for (int i=0; i<5; i++) {
-        WRITE_REG_OR_RETURN(BANK_DSP, special_effects_regs[0][i], special_effects_regs[effect][i]);
-    }
-    return ret;
-}
-
-static int set_wb_mode(sensor_t *sensor, int mode)
-{
-    int ret=0;
-    if (mode < 0 || mode > NUM_WB_MODES) {
-        return -1;
-    }
-    sensor->status.wb_mode = mode;
-    SET_REG_BITS_OR_RETURN(BANK_DSP, 0XC7, 6, 1, mode?1:0);
-    if(mode) {
-        for (int i=0; i<3; i++) {
-            WRITE_REG_OR_RETURN(BANK_DSP, wb_modes_regs[0][i], wb_modes_regs[mode][i]);
-        }
-    }
-    return ret;
-}
-
-static int set_ae_level(sensor_t *sensor, int level)
-{
-    int ret=0;
-    level += 3;
-    if (level <= 0 || level > NUM_AE_LEVELS) {
-        return -1;
-    }
-    sensor->status.ae_level = level-3;
-    for (int i=0; i<3; i++) {
-        WRITE_REG_OR_RETURN(BANK_SENSOR, ae_levels_regs[0][i], ae_levels_regs[level][i]);
-    }
-    return ret;
-}
-
-static int set_quality(sensor_t *sensor, int quality)
-{
-    if(quality < 0) {
-        quality = 0;
-    } else if(quality > 63) {
-        quality = 63;
-    }
-    sensor->status.quality = quality;
-    return write_reg(sensor, BANK_DSP, QS, quality);
-}
-
-static int set_agc_gain(sensor_t *sensor, int gain)
-{
-    if(gain < 0) {
-        gain = 0;
-    } else if(gain > 30) {
-        gain = 30;
-    }
-    sensor->status.agc_gain = gain;
-    return write_reg(sensor, BANK_SENSOR, GAIN, agc_gain_tbl[gain]);
-}
-
-static int set_gainceiling_sensor(sensor_t *sensor, gainceiling_t gainceiling)
-{
-    sensor->status.gainceiling = gainceiling;
-    //return write_reg(sensor, BANK_SENSOR, COM9, COM9_AGC_SET(gainceiling));
-    return set_reg_bits(sensor, BANK_SENSOR, COM9, 5, 7, gainceiling);
-}
-
-static int set_aec_value(sensor_t *sensor, int value)
-{
-    if(value < 0) {
-        value = 0;
-    } else if(value > 1200) {
-        value = 1200;
-    }
-    sensor->status.aec_value = value;
-    return set_reg_bits(sensor, BANK_SENSOR, REG04, 0, 3, value & 0x3)
-           || write_reg(sensor, BANK_SENSOR, AEC, (value >> 2) & 0xFF)
-           || set_reg_bits(sensor, BANK_SENSOR, REG45, 0, 0x3F, value >> 10);
-}
-
-static int set_aec2(sensor_t *sensor, int enable)
-{
-    sensor->status.aec2 = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL0, 6, 1, enable?0:1);
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    sensor->status.colorbar = enable;
-    return write_reg_bits(sensor, BANK_SENSOR, COM7, COM7_COLOR_BAR, enable?1:0);
-}
-
-static int set_agc_sensor(sensor_t *sensor, int enable)
-{
-    sensor->status.agc = enable;
-    return write_reg_bits(sensor, BANK_SENSOR, COM8, COM8_AGC_EN, enable?1:0);
-}
-
-static int set_aec_sensor(sensor_t *sensor, int enable)
-{
-    sensor->status.aec = enable;
-    return write_reg_bits(sensor, BANK_SENSOR, COM8, COM8_AEC_EN, enable?1:0);
-}
-
-static int set_hmirror_sensor(sensor_t *sensor, int enable)
-{
-    sensor->status.hmirror = enable;
-    return write_reg_bits(sensor, BANK_SENSOR, REG04, REG04_HFLIP_IMG, enable?1:0);
-}
-
-static int set_vflip_sensor(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.vflip = enable;
-    ret = write_reg_bits(sensor, BANK_SENSOR, REG04, REG04_VREF_EN, enable?1:0);
-    return ret & write_reg_bits(sensor, BANK_SENSOR, REG04, REG04_VFLIP_IMG, enable?1:0);
-}
-
-static int set_raw_gma_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.raw_gma = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL1, 5, 1, enable?1:0);
-}
-
-static int set_awb_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.awb = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL1, 3, 1, enable?1:0);
-}
-
-static int set_awb_gain_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.awb_gain = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL1, 2, 1, enable?1:0);
-}
-
-static int set_lenc_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.lenc = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL1, 1, 1, enable?1:0);
-}
-
-static int set_dcw_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.dcw = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL2, 5, 1, enable?1:0);
-}
-
-static int set_bpc_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.bpc = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL3, 7, 1, enable?1:0);
-}
-
-static int set_wpc_dsp(sensor_t *sensor, int enable)
-{
-    sensor->status.wpc = enable;
-    return set_reg_bits(sensor, BANK_DSP, CTRL3, 6, 1, enable?1:0);
-}
-
-//unsupported
-static int set_sharpness(sensor_t *sensor, int level)
-{
-   return -1;
-}
-
-static int set_denoise(sensor_t *sensor, int level)
-{
-   return -1;
-}
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = read_reg(sensor, (reg >> 8) & 0x01, reg & 0xFF);
-    if(ret > 0){
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0;
-    ret = read_reg(sensor, (reg >> 8) & 0x01, reg & 0xFF);
-    if(ret < 0){
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-    ret = write_reg(sensor, (reg >> 8) & 0x01, reg & 0xFF, value);
-    return ret;
-}
-
-static int set_res_raw(sensor_t *sensor, int startX, int startY, int endX, int endY, int offsetX, int offsetY, int totalX, int totalY, int outputX, int outputY, bool scale, bool binning)
-{
-    return set_window(sensor, (ov2640_sensor_mode_t)startX, offsetX, offsetY, totalX, totalY, outputX, outputY);
-}
-
-static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div)
-{
-    return -1;
-}
-
-static int set_xclk(sensor_t *sensor, int timer, int xclk)
-{
-    int ret = 0;
-    sensor->xclk_freq_hz = xclk * 1000000U;
-    ret = xclk_timer_conf(timer, sensor->xclk_freq_hz);
-    return ret;
-}
-
-static int init_status(sensor_t *sensor){
-    sensor->status.brightness = 0;
-    sensor->status.contrast = 0;
-    sensor->status.saturation = 0;
-    sensor->status.ae_level = 0;
-    sensor->status.special_effect = 0;
-    sensor->status.wb_mode = 0;
-
-    sensor->status.agc_gain = 30;
-    int agc_gain = read_reg(sensor, BANK_SENSOR, GAIN);
-    for (int i=0; i<30; i++){
-        if(agc_gain >= agc_gain_tbl[i] && agc_gain < agc_gain_tbl[i+1]){
-            sensor->status.agc_gain = i;
-            break;
-        }
-    }
-
-    sensor->status.aec_value = ((uint16_t)get_reg_bits(sensor, BANK_SENSOR, REG45, 0, 0x3F) << 10)
-                             | ((uint16_t)read_reg(sensor, BANK_SENSOR, AEC) << 2)
-                             | get_reg_bits(sensor, BANK_SENSOR, REG04, 0, 3);//0 - 1200
-    sensor->status.quality = read_reg(sensor, BANK_DSP, QS);
-    sensor->status.gainceiling = get_reg_bits(sensor, BANK_SENSOR, COM9, 5, 7);
-
-    sensor->status.awb = get_reg_bits(sensor, BANK_DSP, CTRL1, 3, 1);
-    sensor->status.awb_gain = get_reg_bits(sensor, BANK_DSP, CTRL1, 2, 1);
-    sensor->status.aec = get_reg_bits(sensor, BANK_SENSOR, COM8, 0, 1);
-    sensor->status.aec2 = get_reg_bits(sensor, BANK_DSP, CTRL0, 6, 1);
-    sensor->status.agc = get_reg_bits(sensor, BANK_SENSOR, COM8, 2, 1);
-    sensor->status.bpc = get_reg_bits(sensor, BANK_DSP, CTRL3, 7, 1);
-    sensor->status.wpc = get_reg_bits(sensor, BANK_DSP, CTRL3, 6, 1);
-    sensor->status.raw_gma = get_reg_bits(sensor, BANK_DSP, CTRL1, 5, 1);
-    sensor->status.lenc = get_reg_bits(sensor, BANK_DSP, CTRL1, 1, 1);
-    sensor->status.hmirror = get_reg_bits(sensor, BANK_SENSOR, REG04, 7, 1);
-    sensor->status.vflip = get_reg_bits(sensor, BANK_SENSOR, REG04, 6, 1);
-    sensor->status.dcw = get_reg_bits(sensor, BANK_DSP, CTRL2, 5, 1);
-    sensor->status.colorbar = get_reg_bits(sensor, BANK_SENSOR, COM7, 1, 1);
-
-    sensor->status.sharpness = 0;//not supported
-    sensor->status.denoise = 0;
-    return 0;
-}
-
-int ov2640_detect(int slv_addr, sensor_id_t *id)
-{
-    if (OV2640_SCCB_ADDR == slv_addr) {
-        SCCB_Write(slv_addr, 0xFF, 0x01);//bank sensor
-        uint16_t PID = SCCB_Read(slv_addr, 0x0A);
-        if (OV2640_PID == PID) {
-            id->PID = PID;
-            id->VER = SCCB_Read(slv_addr, REG_VER);
-            id->MIDL = SCCB_Read(slv_addr, REG_MIDL);
-            id->MIDH = SCCB_Read(slv_addr, REG_MIDH);
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int ov2640_init(sensor_t *sensor)
-{
-    sensor->reset = reset;
-    sensor->init_status = init_status;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_contrast  = set_contrast;
-    sensor->set_brightness= set_brightness;
-    sensor->set_saturation= set_saturation;
-
-    sensor->set_quality = set_quality;
-    sensor->set_colorbar = set_colorbar;
-
-    sensor->set_gainceiling = set_gainceiling_sensor;
-    sensor->set_gain_ctrl = set_agc_sensor;
-    sensor->set_exposure_ctrl = set_aec_sensor;
-    sensor->set_hmirror = set_hmirror_sensor;
-    sensor->set_vflip = set_vflip_sensor;
-
-    sensor->set_whitebal = set_awb_dsp;
-    sensor->set_aec2 = set_aec2;
-    sensor->set_aec_value = set_aec_value;
-    sensor->set_special_effect = set_special_effect;
-    sensor->set_wb_mode = set_wb_mode;
-    sensor->set_ae_level = set_ae_level;
-
-    sensor->set_dcw = set_dcw_dsp;
-    sensor->set_bpc = set_bpc_dsp;
-    sensor->set_wpc = set_wpc_dsp;
-    sensor->set_awb_gain = set_awb_gain_dsp;
-    sensor->set_agc_gain = set_agc_gain;
-
-    sensor->set_raw_gma = set_raw_gma_dsp;
-    sensor->set_lenc = set_lenc_dsp;
-
-    //not supported
-    sensor->set_sharpness = set_sharpness;
-    sensor->set_denoise = set_denoise;
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = set_res_raw;
-    sensor->set_pll = _set_pll;
-    sensor->set_xclk = set_xclk;
-    ESP_LOGD(TAG, "OV2640 Attached");
-    return 0;
-}

+ 0 - 1053
code/components/esp32-camera-master/sensors/ov3660.c

@@ -1,1053 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV3660 driver.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include "sccb.h"
-#include "xclk.h"
-#include "ov3660.h"
-#include "ov3660_regs.h"
-#include "ov3660_settings.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char *TAG = "ov3660";
-#endif
-
-//#define REG_DEBUG_ON
-
-static int read_reg(uint8_t slv_addr, const uint16_t reg){
-    int ret = SCCB_Read16(slv_addr, reg);
-#ifdef REG_DEBUG_ON
-    if (ret < 0) {
-        ESP_LOGE(TAG, "READ REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int check_reg_mask(uint8_t slv_addr, uint16_t reg, uint8_t mask){
-    return (read_reg(slv_addr, reg) & mask) == mask;
-}
-
-static int read_reg16(uint8_t slv_addr, const uint16_t reg){
-    int ret = 0, ret2 = 0;
-    ret = read_reg(slv_addr, reg);
-    if (ret >= 0) {
-        ret = (ret & 0xFF) << 8;
-        ret2 = read_reg(slv_addr, reg+1);
-        if (ret2 < 0) {
-            ret = ret2;
-        } else {
-            ret |= ret2 & 0xFF;
-        }
-    }
-    return ret;
-}
-
-
-static int write_reg(uint8_t slv_addr, const uint16_t reg, uint8_t value){
-    int ret = 0;
-#ifndef REG_DEBUG_ON
-    ret = SCCB_Write16(slv_addr, reg, value);
-#else
-    int old_value = read_reg(slv_addr, reg);
-    if (old_value < 0) {
-        return old_value;
-    }
-    if ((uint8_t)old_value != value) {
-        ESP_LOGI(TAG, "NEW REG 0x%04x: 0x%02x to 0x%02x", reg, (uint8_t)old_value, value);
-        ret = SCCB_Write16(slv_addr, reg, value);
-    } else {
-        ESP_LOGD(TAG, "OLD REG 0x%04x: 0x%02x", reg, (uint8_t)old_value);
-        ret = SCCB_Write16(slv_addr, reg, value);//maybe not?
-    }
-    if (ret < 0) {
-        ESP_LOGE(TAG, "WRITE REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int set_reg_bits(uint8_t slv_addr, uint16_t reg, uint8_t offset, uint8_t mask, uint8_t value)
-{
-    int ret = 0;
-    uint8_t c_value, new_value;
-    ret = read_reg(slv_addr, reg);
-    if(ret < 0) {
-        return ret;
-    }
-    c_value = ret;
-    new_value = (c_value & ~(mask << offset)) | ((value & mask) << offset);
-    ret = write_reg(slv_addr, reg, new_value);
-    return ret;
-}
-
-static int write_regs(uint8_t slv_addr, const uint16_t (*regs)[2])
-{
-    int i = 0, ret = 0;
-    while (!ret && regs[i][0] != REGLIST_TAIL) {
-        if (regs[i][0] == REG_DLY) {
-            vTaskDelay(regs[i][1] / portTICK_PERIOD_MS);
-        } else {
-            ret = write_reg(slv_addr, regs[i][0], regs[i][1]);
-        }
-        i++;
-    }
-    return ret;
-}
-
-static int write_reg16(uint8_t slv_addr, const uint16_t reg, uint16_t value)
-{
-    if (write_reg(slv_addr, reg, value >> 8) || write_reg(slv_addr, reg + 1, value)) {
-        return -1;
-    }
-    return 0;
-}
-
-static int write_addr_reg(uint8_t slv_addr, const uint16_t reg, uint16_t x_value, uint16_t y_value)
-{
-    if (write_reg16(slv_addr, reg, x_value) || write_reg16(slv_addr, reg + 2, y_value)) {
-        return -1;
-    }
-    return 0;
-}
-
-#define write_reg_bits(slv_addr, reg, mask, enable) set_reg_bits(slv_addr, reg, 0, mask, enable?mask:0)
-
-static int calc_sysclk(int xclk, bool pll_bypass, int pll_multiplier, int pll_sys_div, int pll_pre_div, bool pll_root_2x, int pll_seld5, bool pclk_manual, int pclk_div)
-{
-    const int pll_pre_div2x_map[] = { 2, 3, 4, 6 };//values are multiplied by two to avoid floats
-    const int pll_seld52x_map[] = { 2, 2, 4, 5 };
-
-    if(!pll_sys_div) {
-        pll_sys_div = 1;
-    }
-
-    int pll_pre_div2x = pll_pre_div2x_map[pll_pre_div];
-    int pll_root_div = pll_root_2x?2:1;
-    int pll_seld52x = pll_seld52x_map[pll_seld5];
-
-    int VCO = (xclk / 1000) * pll_multiplier * pll_root_div * 2 / pll_pre_div2x;
-    int PLLCLK = pll_bypass?(xclk):(VCO * 1000 * 2 / pll_sys_div / pll_seld52x);
-    int PCLK = PLLCLK / 2 / ((pclk_manual && pclk_div)?pclk_div:1);
-    int SYSCLK = PLLCLK / 4;
-
-    ESP_LOGI(TAG, "Calculated VCO: %d Hz, PLLCLK: %d Hz, SYSCLK: %d Hz, PCLK: %d Hz", VCO*1000, PLLCLK, SYSCLK, PCLK);
-    return SYSCLK;
-}
-
-static int set_pll(sensor_t *sensor, bool bypass, uint8_t multiplier, uint8_t sys_div, uint8_t pre_div, bool root_2x, uint8_t seld5, bool pclk_manual, uint8_t pclk_div){
-    int ret = 0;
-    if(multiplier > 31 || sys_div > 15 || pre_div > 3 || pclk_div > 31 || seld5 > 3){
-        ESP_LOGE(TAG, "Invalid arguments");
-        return -1;
-    }
-
-    calc_sysclk(sensor->xclk_freq_hz, bypass, multiplier, sys_div, pre_div, root_2x, seld5, pclk_manual, pclk_div);
-
-    ret = write_reg(sensor->slv_addr, SC_PLLS_CTRL0, bypass?0x80:0x00);
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, SC_PLLS_CTRL1, multiplier & 0x1f);
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, SC_PLLS_CTRL2, 0x10 | (sys_div & 0x0f));
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, SC_PLLS_CTRL3, (pre_div & 0x3) << 4 | seld5 | (root_2x?0x40:0x00));
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, PCLK_RATIO, pclk_div & 0x1f);
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, VFIFO_CTRL0C, pclk_manual?0x22:0x20);
-    }
-    if(ret){
-        ESP_LOGE(TAG, "set_sensor_pll FAILED!");
-    }
-    return ret;
-}
-
-static int set_ae_level(sensor_t *sensor, int level);
-
-static int reset(sensor_t *sensor)
-{
-    int ret = 0;
-    // Software Reset: clear all registers and reset them to their default values
-    ret = write_reg(sensor->slv_addr, SYSTEM_CTROL0, 0x82);
-    if(ret){
-        ESP_LOGE(TAG, "Software Reset FAILED!");
-        return ret;
-    }
-    vTaskDelay(100 / portTICK_PERIOD_MS);
-    ret = write_regs(sensor->slv_addr, sensor_default_regs);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Camera defaults loaded");
-        ret = set_ae_level(sensor, 0);
-        vTaskDelay(100 / portTICK_PERIOD_MS);
-    }
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret = 0;
-    const uint16_t (*regs)[2];
-
-    switch (pixformat) {
-    case PIXFORMAT_YUV422:
-        regs = sensor_fmt_yuv422;
-        break;
-
-    case PIXFORMAT_GRAYSCALE:
-        regs = sensor_fmt_grayscale;
-        break;
-
-    case PIXFORMAT_RGB565:
-    case PIXFORMAT_RGB888:
-        regs = sensor_fmt_rgb565;
-        break;
-
-    case PIXFORMAT_JPEG:
-        regs = sensor_fmt_jpeg;
-        break;
-
-    case PIXFORMAT_RAW:
-        regs = sensor_fmt_raw;
-        break;
-
-    default:
-        ESP_LOGE(TAG, "Unsupported pixformat: %u", pixformat);
-        return -1;
-    }
-
-    ret = write_regs(sensor->slv_addr, regs);
-    if(ret == 0) {
-        sensor->pixformat = pixformat;
-        ESP_LOGD(TAG, "Set pixformat to: %u", pixformat);
-    }
-    return ret;
-}
-
-static int set_image_options(sensor_t *sensor)
-{
-    int ret = 0;
-    uint8_t reg20 = 0;
-    uint8_t reg21 = 0;
-    uint8_t reg4514 = 0;
-    uint8_t reg4514_test = 0;
-
-    // compression
-    if (sensor->pixformat == PIXFORMAT_JPEG) {
-        reg21 |= 0x20;
-    }
-
-    // binning
-    if (sensor->status.binning) {
-        reg20 |= 0x01;
-        reg21 |= 0x01;
-        reg4514_test |= 4;
-    } else {
-        reg20 |= 0x40;
-    }
-
-    // V-Flip
-    if (sensor->status.vflip) {
-        reg20 |= 0x06;
-        reg4514_test |= 1;
-    }
-
-    // H-Mirror
-    if (sensor->status.hmirror) {
-        reg21 |= 0x06;
-        reg4514_test |= 2;
-    }
-
-    switch (reg4514_test) {
-        //no binning
-        case 0: reg4514 = 0x88; break;//normal
-        case 1: reg4514 = 0x88; break;//v-flip
-        case 2: reg4514 = 0xbb; break;//h-mirror
-        case 3: reg4514 = 0xbb; break;//v-flip+h-mirror
-        //binning
-        case 4: reg4514 = 0xaa; break;//normal
-        case 5: reg4514 = 0xbb; break;//v-flip
-        case 6: reg4514 = 0xbb; break;//h-mirror
-        case 7: reg4514 = 0xaa; break;//v-flip+h-mirror
-    }
-
-    if(write_reg(sensor->slv_addr, TIMING_TC_REG20, reg20)
-        || write_reg(sensor->slv_addr, TIMING_TC_REG21, reg21)
-        || write_reg(sensor->slv_addr, 0x4514, reg4514)){
-        ESP_LOGE(TAG, "Setting Image Options Failed");
-        ret = -1;
-    }
-
-    if (sensor->status.binning) {
-        ret  = write_reg(sensor->slv_addr, 0x4520, 0x0b)
-            || write_reg(sensor->slv_addr, X_INCREMENT, 0x31)//odd:3, even: 1
-            || write_reg(sensor->slv_addr, Y_INCREMENT, 0x31);//odd:3, even: 1
-    } else {
-        ret  = write_reg(sensor->slv_addr, 0x4520, 0xb0)
-            || write_reg(sensor->slv_addr, X_INCREMENT, 0x11)//odd:1, even: 1
-            || write_reg(sensor->slv_addr, Y_INCREMENT, 0x11);//odd:1, even: 1
-    }
-
-    ESP_LOGD(TAG, "Set Image Options: Compression: %u, Binning: %u, V-Flip: %u, H-Mirror: %u, Reg-4514: 0x%02x",
-        sensor->pixformat == PIXFORMAT_JPEG, sensor->status.binning, sensor->status.vflip, sensor->status.hmirror, reg4514);
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret = 0;
-
-    if(framesize > FRAMESIZE_QXGA){
-        ESP_LOGW(TAG, "Invalid framesize: %u", framesize);
-        framesize = FRAMESIZE_QXGA;
-    }
-    framesize_t old_framesize = sensor->status.framesize;
-    sensor->status.framesize = framesize;
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    aspect_ratio_t ratio = resolution[sensor->status.framesize].aspect_ratio;
-    ratio_settings_t settings = ratio_table[ratio];
-
-    sensor->status.binning = (w <= (settings.max_width / 2) && h <= (settings.max_height / 2));
-    sensor->status.scale = !((w == settings.max_width && h == settings.max_height)
-        || (w == (settings.max_width / 2) && h == (settings.max_height / 2)));
-
-    ret  = write_addr_reg(sensor->slv_addr, X_ADDR_ST_H, settings.start_x, settings.start_y)
-        || write_addr_reg(sensor->slv_addr, X_ADDR_END_H, settings.end_x, settings.end_y)
-        || write_addr_reg(sensor->slv_addr, X_OUTPUT_SIZE_H, w, h);
-
-    if (ret) {
-        goto fail;
-    }
-
-    if (sensor->status.binning) {
-        ret  = write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, settings.total_x, (settings.total_y / 2) + 1)
-            || write_addr_reg(sensor->slv_addr, X_OFFSET_H, 8, 2);
-    } else {
-        ret  = write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, settings.total_x, settings.total_y)
-            || write_addr_reg(sensor->slv_addr, X_OFFSET_H, 16, 6);
-    }
-
-    if (ret == 0) {
-        ret = write_reg_bits(sensor->slv_addr, ISP_CONTROL_01, 0x20, sensor->status.scale);
-    }
-
-    if (ret == 0) {
-        ret = set_image_options(sensor);
-    }
-
-    if (ret) {
-        goto fail;
-    }
-
-    if (sensor->pixformat == PIXFORMAT_JPEG) {
-        if (framesize == FRAMESIZE_QXGA || sensor->xclk_freq_hz == 16000000) {
-            //40MHz SYSCLK and 10MHz PCLK
-            ret = set_pll(sensor, false, 24, 1, 3, false, 0, true, 8);
-        } else {
-            //50MHz SYSCLK and 10MHz PCLK
-            ret = set_pll(sensor, false, 30, 1, 3, false, 0, true, 10);
-        }
-    } else {
-        //tuned for 16MHz XCLK and 8MHz PCLK
-        if (framesize > FRAMESIZE_HVGA) {
-            //8MHz SYSCLK and 8MHz PCLK (4.44 FPS)
-            ret = set_pll(sensor, false, 4, 1, 0, false, 2, true, 2);
-        } else if (framesize >= FRAMESIZE_QVGA) {
-            //16MHz SYSCLK and 8MHz PCLK (10.25 FPS)
-            ret = set_pll(sensor, false, 8, 1, 0, false, 2, true, 4);
-        } else {
-            //32MHz SYSCLK and 8MHz PCLK (17.77 FPS)
-            ret = set_pll(sensor, false, 8, 1, 0, false, 0, true, 8);
-        }
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set framesize to: %ux%u", w, h);
-    }
-    return ret;
-
-fail:
-    sensor->status.framesize = old_framesize;
-    ESP_LOGE(TAG, "Setting framesize to: %ux%u failed", w, h);
-    return ret;
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.hmirror = enable;
-    ret = set_image_options(sensor);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set h-mirror to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.vflip = enable;
-    ret = set_image_options(sensor);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set v-flip to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_quality(sensor_t *sensor, int qs)
-{
-    int ret = 0;
-    ret = write_reg(sensor->slv_addr, COMPRESSION_CTRL07, qs & 0x3f);
-    if (ret == 0) {
-        sensor->status.quality = qs;
-        ESP_LOGD(TAG, "Set quality to: %d", qs);
-    }
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, PRE_ISP_TEST_SETTING_1, TEST_COLOR_BAR, enable);
-    if (ret == 0) {
-        sensor->status.colorbar = enable;
-        ESP_LOGD(TAG, "Set colorbar to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_gain_ctrl(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AGC_MANUALEN, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gain_ctrl to: %d", enable);
-        sensor->status.agc = enable;
-    }
-    return ret;
-}
-
-static int set_exposure_ctrl(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AEC_MANUALEN, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set exposure_ctrl to: %d", enable);
-        sensor->status.aec = enable;
-    }
-    return ret;
-}
-
-static int set_whitebal(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, ISP_CONTROL_01, 0x01, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set awb to: %d", enable);
-        sensor->status.awb = enable;
-    }
-    return ret;
-}
-
-//Advanced AWB
-static int set_dcw_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5183, 0x80, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set dcw to: %d", enable);
-        sensor->status.dcw = enable;
-    }
-    return ret;
-}
-
-//night mode enable
-static int set_aec2(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x3a00, 0x04, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec2 to: %d", enable);
-        sensor->status.aec2 = enable;
-    }
-    return ret;
-}
-
-static int set_bpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x04, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set bpc to: %d", enable);
-        sensor->status.bpc = enable;
-    }
-    return ret;
-}
-
-static int set_wpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x02, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wpc to: %d", enable);
-        sensor->status.wpc = enable;
-    }
-    return ret;
-}
-
-//Gamma enable
-static int set_raw_gma_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x20, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set raw_gma to: %d", enable);
-        sensor->status.raw_gma = enable;
-    }
-    return ret;
-}
-
-static int set_lenc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x80, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set lenc to: %d", enable);
-        sensor->status.lenc = enable;
-    }
-    return ret;
-}
-
-static int get_agc_gain(sensor_t *sensor)
-{
-    int ra = read_reg(sensor->slv_addr, 0x350a);
-    if (ra < 0) {
-        return 0;
-    }
-    int rb = read_reg(sensor->slv_addr, 0x350b);
-    if (rb < 0) {
-        return 0;
-    }
-    int res = (rb & 0xF0) >> 4 | (ra & 0x03) << 4;
-    if (rb & 0x0F) {
-        res += 1;
-    }
-    return res;
-}
-
-//real gain
-static int set_agc_gain(sensor_t *sensor, int gain)
-{
-    int ret = 0;
-    if(gain < 0) {
-        gain = 0;
-    } else if(gain > 64) {
-        gain = 64;
-    }
-
-    //gain value is 6.4 bits float
-    //in order to use the max range, we deduct 1/16
-    int gainv = gain << 4;
-    if(gainv){
-        gainv -= 1;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x350a, gainv >> 8) || write_reg(sensor->slv_addr, 0x350b, gainv & 0xff);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set agc_gain to: %d", gain);
-        sensor->status.agc_gain = gain;
-    }
-    return ret;
-}
-
-static int get_aec_value(sensor_t *sensor)
-{
-    int ra = read_reg(sensor->slv_addr, 0x3500);
-    if (ra < 0) {
-        return 0;
-    }
-    int rb = read_reg(sensor->slv_addr, 0x3501);
-    if (rb < 0) {
-        return 0;
-    }
-    int rc = read_reg(sensor->slv_addr, 0x3502);
-    if (rc < 0) {
-        return 0;
-    }
-    int res = (ra & 0x0F) << 12 | (rb & 0xFF) << 4 | (rc & 0xF0) >> 4;
-    return res;
-}
-
-static int set_aec_value(sensor_t *sensor, int value)
-{
-    int ret = 0, max_val = 0;
-    max_val = read_reg16(sensor->slv_addr, 0x380e);
-    if (max_val < 0) {
-        ESP_LOGE(TAG, "Could not read max aec_value");
-        return -1;
-    }
-    if (value > max_val) {
-        value =max_val;
-    }
-
-    ret =  write_reg(sensor->slv_addr, 0x3500, (value >> 12) & 0x0F)
-        || write_reg(sensor->slv_addr, 0x3501, (value >> 4) & 0xFF)
-        || write_reg(sensor->slv_addr, 0x3502, (value << 4) & 0xF0);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec_value to: %d / %d", value, max_val);
-        sensor->status.aec_value = value;
-    }
-    return ret;
-}
-
-static int set_ae_level(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if (level < -5 || level > 5) {
-        return -1;
-    }
-    //good targets are between 5 and 115
-    int target_level = ((level + 5) * 10) + 5;
-
-    int level_high, level_low;
-    int fast_high, fast_low;
-
-    level_low = target_level * 23 / 25; //0.92 (0.46)
-    level_high = target_level * 27 / 25; //1.08 (2.08)
-
-    fast_low = level_low >> 1;
-    fast_high = level_high << 1;
-
-    if(fast_high>255) {
-        fast_high = 255;
-    }
-
-    ret =  write_reg(sensor->slv_addr, 0x3a0f, level_high)
-        || write_reg(sensor->slv_addr, 0x3a10, level_low)
-        || write_reg(sensor->slv_addr, 0x3a1b, level_high)
-        || write_reg(sensor->slv_addr, 0x3a1e, level_low)
-        || write_reg(sensor->slv_addr, 0x3a11, fast_high)
-        || write_reg(sensor->slv_addr, 0x3a1f, fast_low);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set ae_level to: %d", level);
-        sensor->status.ae_level = level;
-    }
-    return ret;
-}
-
-static int set_wb_mode(sensor_t *sensor, int mode)
-{
-    int ret = 0;
-    if (mode < 0 || mode > 4) {
-        return -1;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x3406, (mode != 0));
-    if (ret) {
-        return ret;
-    }
-    switch (mode) {
-        case 1://Sunny
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x5e0) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x410) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x540);//AWB B GAIN
-            break;
-        case 2://Cloudy
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x650) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x410) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x4f0);//AWB B GAIN
-            break;
-        case 3://Office
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x520) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x410) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x660);//AWB B GAIN
-            break;
-        case 4://HOME
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x420) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x3f0) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x710);//AWB B GAIN
-            break;
-        default://AUTO
-            break;
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wb_mode to: %d", mode);
-        sensor->status.wb_mode = mode;
-    }
-    return ret;
-}
-
-static int set_awb_gain_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    int old_mode = sensor->status.wb_mode;
-    int mode = enable?old_mode:0;
-
-    ret = set_wb_mode(sensor, mode);
-
-    if (ret == 0) {
-        sensor->status.wb_mode = old_mode;
-        ESP_LOGD(TAG, "Set awb_gain to: %d", enable);
-        sensor->status.awb_gain = enable;
-    }
-    return ret;
-}
-
-static int set_special_effect(sensor_t *sensor, int effect)
-{
-    int ret=0;
-    if (effect < 0 || effect > 6) {
-        return -1;
-    }
-
-    uint8_t * regs = (uint8_t *)sensor_special_effects[effect];
-    ret =  write_reg(sensor->slv_addr, 0x5580, regs[0])
-        || write_reg(sensor->slv_addr, 0x5583, regs[1])
-        || write_reg(sensor->slv_addr, 0x5584, regs[2])
-        || write_reg(sensor->slv_addr, 0x5003, regs[3]);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set special_effect to: %d", effect);
-        sensor->status.special_effect = effect;
-    }
-    return ret;
-}
-
-static int set_brightness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    uint8_t value = 0;
-    bool negative = false;
-
-    switch (level) {
-        case 3:
-            value = 0x30;
-            break;
-        case 2:
-            value = 0x20;
-            break;
-        case 1:
-            value = 0x10;
-            break;
-        case -1:
-            value = 0x10;
-            negative = true;
-            break;
-        case -2:
-            value = 0x20;
-            negative = true;
-            break;
-        case -3:
-            value = 0x30;
-            negative = true;
-            break;
-        default: // 0
-            break;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x5587, value);
-    if (ret == 0) {
-        ret = write_reg_bits(sensor->slv_addr, 0x5588, 0x08, negative);
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set brightness to: %d", level);
-        sensor->status.brightness = level;
-    }
-    return ret;
-}
-
-static int set_contrast(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if(level > 3 || level < -3) {
-        return -1;
-    }
-    ret = write_reg(sensor->slv_addr, 0x5586, (level + 4) << 3);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set contrast to: %d", level);
-        sensor->status.contrast = level;
-    }
-    return ret;
-}
-
-static int set_saturation(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if(level > 4 || level < -4) {
-        return -1;
-    }
-
-    uint8_t * regs = (uint8_t *)sensor_saturation_levels[level+4];
-    for(int i=0; i<11; i++) {
-        ret = write_reg(sensor->slv_addr, 0x5381 + i, regs[i]);
-        if (ret) {
-            break;
-        }
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set saturation to: %d", level);
-        sensor->status.saturation = level;
-    }
-    return ret;
-}
-
-static int set_sharpness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if(level > 3 || level < -3) {
-        return -1;
-    }
-
-    uint8_t mt_offset_2 = (level + 3) * 8;
-    uint8_t mt_offset_1 = mt_offset_2 + 1;
-
-    ret = write_reg_bits(sensor->slv_addr, 0x5308, 0x40, false)//0x40 means auto
-        || write_reg(sensor->slv_addr, 0x5300, 0x10)
-        || write_reg(sensor->slv_addr, 0x5301, 0x10)
-        || write_reg(sensor->slv_addr, 0x5302, mt_offset_1)
-        || write_reg(sensor->slv_addr, 0x5303, mt_offset_2)
-        || write_reg(sensor->slv_addr, 0x5309, 0x10)
-        || write_reg(sensor->slv_addr, 0x530a, 0x10)
-        || write_reg(sensor->slv_addr, 0x530b, 0x04)
-        || write_reg(sensor->slv_addr, 0x530c, 0x06);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set sharpness to: %d", level);
-        sensor->status.sharpness = level;
-    }
-    return ret;
-}
-
-static int set_gainceiling(sensor_t *sensor, gainceiling_t level)
-{
-    int ret = 0, l = (int)level;
-
-    ret = write_reg(sensor->slv_addr, 0x3A18, (l >> 8) & 3)
-       || write_reg(sensor->slv_addr, 0x3A19, l & 0xFF);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gainceiling to: %d", l);
-        sensor->status.gainceiling = l;
-    }
-    return ret;
-}
-
-static int get_denoise(sensor_t *sensor)
-{
-    if (!check_reg_mask(sensor->slv_addr, 0x5308, 0x10)) {
-        return 0;
-    }
-    return (read_reg(sensor->slv_addr, 0x5306) / 4) + 1;
-}
-
-static int set_denoise(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if (level < 0 || level > 8) {
-        return -1;
-    }
-
-    ret = write_reg_bits(sensor->slv_addr, 0x5308, 0x10, level > 0);
-    if (ret == 0 && level > 0) {
-        ret = write_reg(sensor->slv_addr, 0x5306, (level - 1) * 4);
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set denoise to: %d", level);
-        sensor->status.denoise = level;
-    }
-    return ret;
-}
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = 0, ret2 = 0;
-    if(mask > 0xFF){
-        ret = read_reg16(sensor->slv_addr, reg);
-        if(ret >= 0 && mask > 0xFFFF){
-            ret2 = read_reg(sensor->slv_addr, reg+2);
-            if(ret2 >= 0){
-                ret = (ret << 8) | ret2 ;
-            } else {
-                ret = ret2;
-            }
-        }
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if(ret > 0){
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0, ret2 = 0;
-    if(mask > 0xFF){
-        ret = read_reg16(sensor->slv_addr, reg);
-        if(ret >= 0 && mask > 0xFFFF){
-            ret2 = read_reg(sensor->slv_addr, reg+2);
-            if(ret2 >= 0){
-                ret = (ret << 8) | ret2 ;
-            } else {
-                ret = ret2;
-            }
-        }
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if(ret < 0){
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-    if(mask > 0xFFFF){
-        ret = write_reg16(sensor->slv_addr, reg, value >> 8);
-        if(ret >= 0){
-            ret = write_reg(sensor->slv_addr, reg+2, value & 0xFF);
-        }
-    } else if(mask > 0xFF){
-        ret = write_reg16(sensor->slv_addr, reg, value);
-    } else {
-        ret = write_reg(sensor->slv_addr, reg, value);
-    }
-    return ret;
-}
-
-static int set_res_raw(sensor_t *sensor, int startX, int startY, int endX, int endY, int offsetX, int offsetY, int totalX, int totalY, int outputX, int outputY, bool scale, bool binning)
-{
-    int ret = 0;
-    ret  = write_addr_reg(sensor->slv_addr, X_ADDR_ST_H, startX, startY)
-        || write_addr_reg(sensor->slv_addr, X_ADDR_END_H, endX, endY)
-        || write_addr_reg(sensor->slv_addr, X_OFFSET_H, offsetX, offsetY)
-        || write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, totalX, totalY)
-        || write_addr_reg(sensor->slv_addr, X_OUTPUT_SIZE_H, outputX, outputY)
-        || write_reg_bits(sensor->slv_addr, ISP_CONTROL_01, 0x20, scale);
-    if(!ret){
-        sensor->status.scale = scale;
-        sensor->status.binning = binning;
-        ret = set_image_options(sensor);
-    }
-    return ret;
-}
-
-static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div)
-{
-    return set_pll(sensor, bypass > 0, multiplier, sys_div, pre_div, root_2x > 0, seld5, pclk_manual > 0, pclk_div);
-}
-
-static int set_xclk(sensor_t *sensor, int timer, int xclk)
-{
-    int ret = 0;
-    sensor->xclk_freq_hz = xclk * 1000000U;
-    ret = xclk_timer_conf(timer, sensor->xclk_freq_hz);
-    return ret;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    sensor->status.brightness = 0;
-    sensor->status.contrast = 0;
-    sensor->status.saturation = 0;
-    sensor->status.sharpness = (read_reg(sensor->slv_addr, 0x5303) / 8) - 3;
-    sensor->status.denoise = get_denoise(sensor);
-    sensor->status.ae_level = 0;
-    sensor->status.gainceiling = read_reg16(sensor->slv_addr, 0x3A18) & 0x3FF;
-    sensor->status.awb = check_reg_mask(sensor->slv_addr, ISP_CONTROL_01, 0x01);
-    sensor->status.dcw = !check_reg_mask(sensor->slv_addr, 0x5183, 0x80);
-    sensor->status.agc = !check_reg_mask(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AGC_MANUALEN);
-    sensor->status.aec = !check_reg_mask(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AEC_MANUALEN);
-    sensor->status.hmirror = check_reg_mask(sensor->slv_addr, TIMING_TC_REG21, TIMING_TC_REG21_HMIRROR);
-    sensor->status.vflip = check_reg_mask(sensor->slv_addr, TIMING_TC_REG20, TIMING_TC_REG20_VFLIP);
-    sensor->status.colorbar = check_reg_mask(sensor->slv_addr, PRE_ISP_TEST_SETTING_1, TEST_COLOR_BAR);
-    sensor->status.bpc = check_reg_mask(sensor->slv_addr, 0x5000, 0x04);
-    sensor->status.wpc = check_reg_mask(sensor->slv_addr, 0x5000, 0x02);
-    sensor->status.raw_gma = check_reg_mask(sensor->slv_addr, 0x5000, 0x20);
-    sensor->status.lenc = check_reg_mask(sensor->slv_addr, 0x5000, 0x80);
-    sensor->status.quality = read_reg(sensor->slv_addr, COMPRESSION_CTRL07) & 0x3f;
-    sensor->status.special_effect = 0;
-    sensor->status.wb_mode = 0;
-    sensor->status.awb_gain = check_reg_mask(sensor->slv_addr, 0x3406, 0x01);
-    sensor->status.agc_gain = get_agc_gain(sensor);
-    sensor->status.aec_value = get_aec_value(sensor);
-    sensor->status.aec2 = check_reg_mask(sensor->slv_addr, 0x3a00, 0x04);
-    return 0;
-}
-
-int ov3660_detect(int slv_addr, sensor_id_t *id)
-{
-    if (OV3660_SCCB_ADDR == slv_addr) {
-        uint8_t h = SCCB_Read16(slv_addr, 0x300A);
-        uint8_t l = SCCB_Read16(slv_addr, 0x300B);
-        uint16_t PID = (h<<8) | l;
-        if (OV3660_PID == PID) {
-            id->PID = PID;
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int ov3660_init(sensor_t *sensor)
-{
-    sensor->reset = reset;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_contrast = set_contrast;
-    sensor->set_brightness = set_brightness;
-    sensor->set_saturation = set_saturation;
-    sensor->set_sharpness = set_sharpness;
-    sensor->set_gainceiling = set_gainceiling;
-    sensor->set_quality = set_quality;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_gain_ctrl = set_gain_ctrl;
-    sensor->set_exposure_ctrl = set_exposure_ctrl;
-    sensor->set_whitebal = set_whitebal;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-    sensor->init_status = init_status;
-    sensor->set_aec2 = set_aec2;
-    sensor->set_aec_value = set_aec_value;
-    sensor->set_special_effect = set_special_effect;
-    sensor->set_wb_mode = set_wb_mode;
-    sensor->set_ae_level = set_ae_level;
-    sensor->set_dcw = set_dcw_dsp;
-    sensor->set_bpc = set_bpc_dsp;
-    sensor->set_wpc = set_wpc_dsp;
-    sensor->set_awb_gain = set_awb_gain_dsp;
-    sensor->set_agc_gain = set_agc_gain;
-    sensor->set_raw_gma = set_raw_gma_dsp;
-    sensor->set_lenc = set_lenc_dsp;
-    sensor->set_denoise = set_denoise;
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = set_res_raw;
-    sensor->set_pll = _set_pll;
-    sensor->set_xclk = set_xclk;
-    return 0;
-}

+ 0 - 1130
code/components/esp32-camera-master/sensors/ov5640.c

@@ -1,1130 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV3660 driver.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include "sccb.h"
-#include "xclk.h"
-#include "ov5640.h"
-#include "ov5640_regs.h"
-#include "ov5640_settings.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char *TAG = "ov5640";
-#endif
-
-//#define REG_DEBUG_ON
-
-static int read_reg(uint8_t slv_addr, const uint16_t reg){
-    int ret = SCCB_Read16(slv_addr, reg);
-#ifdef REG_DEBUG_ON
-    if (ret < 0) {
-        ESP_LOGE(TAG, "READ REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int check_reg_mask(uint8_t slv_addr, uint16_t reg, uint8_t mask){
-    return (read_reg(slv_addr, reg) & mask) == mask;
-}
-
-static int read_reg16(uint8_t slv_addr, const uint16_t reg){
-    int ret = 0, ret2 = 0;
-    ret = read_reg(slv_addr, reg);
-    if (ret >= 0) {
-        ret = (ret & 0xFF) << 8;
-        ret2 = read_reg(slv_addr, reg+1);
-        if (ret2 < 0) {
-            ret = ret2;
-        } else {
-            ret |= ret2 & 0xFF;
-        }
-    }
-    return ret;
-}
-
-//static void dump_reg(sensor_t *sensor, const uint16_t reg){
-//    int v = SCCB_Read16(sensor->slv_addr, reg);
-//    if(v < 0){
-//        ets_printf("  0x%04x: FAIL[%d]\n", reg, v);
-//    } else {
-//        ets_printf("  0x%04x: 0x%02X\n", reg, v);
-//    }
-//}
-//
-//static void dump_range(sensor_t *sensor, const char * name, const uint16_t start_reg, const uint16_t end_reg){
-//    ets_printf("%s: 0x%04x - 0x%04X\n", name, start_reg, end_reg);
-//    for(uint16_t reg = start_reg; reg <= end_reg; reg++){
-//        dump_reg(sensor, reg);
-//    }
-//}
-//
-//static void dump_regs(sensor_t *sensor){
-////    dump_range(sensor, "All Regs", 0x3000, 0x6100);
-////    dump_range(sensor, "system and IO pad control", 0x3000, 0x3052);
-////    dump_range(sensor, "SCCB control", 0x3100, 0x3108);
-////    dump_range(sensor, "SRB control", 0x3200, 0x3211);
-////    dump_range(sensor, "AWB gain control", 0x3400, 0x3406);
-////    dump_range(sensor, "AEC/AGC control", 0x3500, 0x350D);
-////    dump_range(sensor, "VCM control", 0x3600, 0x3606);
-////    dump_range(sensor, "timing control", 0x3800, 0x3821);
-////    dump_range(sensor, "AEC/AGC power down domain control", 0x3A00, 0x3A25);
-////    dump_range(sensor, "strobe control", 0x3B00, 0x3B0C);
-////    dump_range(sensor, "50/60Hz detector control", 0x3C00, 0x3C1E);
-////    dump_range(sensor, "OTP control", 0x3D00, 0x3D21);
-////    dump_range(sensor, "MC control", 0x3F00, 0x3F0D);
-////    dump_range(sensor, "BLC control", 0x4000, 0x4033);
-////    dump_range(sensor, "frame control", 0x4201, 0x4202);
-////    dump_range(sensor, "format control", 0x4300, 0x430D);
-////    dump_range(sensor, "JPEG control", 0x4400, 0x4431);
-////    dump_range(sensor, "VFIFO control", 0x4600, 0x460D);
-////    dump_range(sensor, "DVP control", 0x4709, 0x4745);
-////    dump_range(sensor, "MIPI control", 0x4800, 0x4837);
-////    dump_range(sensor, "ISP frame control", 0x4901, 0x4902);
-////    dump_range(sensor, "ISP top control", 0x5000, 0x5063);
-////    dump_range(sensor, "AWB control", 0x5180, 0x51D0);
-////    dump_range(sensor, "CIP control", 0x5300, 0x530F);
-////    dump_range(sensor, "CMX control", 0x5380, 0x538B);
-////    dump_range(sensor, "gamma control", 0x5480, 0x5490);
-////    dump_range(sensor, "SDE control", 0x5580, 0x558C);
-////    dump_range(sensor, "scale control", 0x5600, 0x5606);
-////    dump_range(sensor, "AVG control", 0x5680, 0x56A2);
-////    dump_range(sensor, "LENC control", 0x5800, 0x5849);
-////    dump_range(sensor, "AFC control", 0x6000, 0x603F);
-//}
-
-static int write_reg(uint8_t slv_addr, const uint16_t reg, uint8_t value){
-    int ret = 0;
-#ifndef REG_DEBUG_ON
-    ret = SCCB_Write16(slv_addr, reg, value);
-#else
-    int old_value = read_reg(slv_addr, reg);
-    if (old_value < 0) {
-        return old_value;
-    }
-    if ((uint8_t)old_value != value) {
-        ESP_LOGI(TAG, "NEW REG 0x%04x: 0x%02x to 0x%02x", reg, (uint8_t)old_value, value);
-        ret = SCCB_Write16(slv_addr, reg, value);
-    } else {
-        ESP_LOGD(TAG, "OLD REG 0x%04x: 0x%02x", reg, (uint8_t)old_value);
-        ret = SCCB_Write16(slv_addr, reg, value);//maybe not?
-    }
-    if (ret < 0) {
-        ESP_LOGE(TAG, "WRITE REG 0x%04x FAILED: %d", reg, ret);
-    }
-#endif
-    return ret;
-}
-
-static int set_reg_bits(uint8_t slv_addr, uint16_t reg, uint8_t offset, uint8_t mask, uint8_t value)
-{
-    int ret = 0;
-    uint8_t c_value, new_value;
-    ret = read_reg(slv_addr, reg);
-    if(ret < 0) {
-        return ret;
-    }
-    c_value = ret;
-    new_value = (c_value & ~(mask << offset)) | ((value & mask) << offset);
-    ret = write_reg(slv_addr, reg, new_value);
-    return ret;
-}
-
-static int write_regs(uint8_t slv_addr, const uint16_t (*regs)[2])
-{
-    int i = 0, ret = 0;
-    while (!ret && regs[i][0] != REGLIST_TAIL) {
-        if (regs[i][0] == REG_DLY) {
-            vTaskDelay(regs[i][1] / portTICK_PERIOD_MS);
-        } else {
-            ret = write_reg(slv_addr, regs[i][0], regs[i][1]);
-        }
-        i++;
-    }
-    return ret;
-}
-
-static int write_reg16(uint8_t slv_addr, const uint16_t reg, uint16_t value)
-{
-    if (write_reg(slv_addr, reg, value >> 8) || write_reg(slv_addr, reg + 1, value)) {
-        return -1;
-    }
-    return 0;
-}
-
-static int write_addr_reg(uint8_t slv_addr, const uint16_t reg, uint16_t x_value, uint16_t y_value)
-{
-    if (write_reg16(slv_addr, reg, x_value) || write_reg16(slv_addr, reg + 2, y_value)) {
-        return -1;
-    }
-    return 0;
-}
-
-#define write_reg_bits(slv_addr, reg, mask, enable) set_reg_bits(slv_addr, reg, 0, mask, (enable)?(mask):0)
-
-static int calc_sysclk(int xclk, bool pll_bypass, int pll_multiplier, int pll_sys_div, int pre_div, bool root_2x, int pclk_root_div, bool pclk_manual, int pclk_div)
-{
-    const float pll_pre_div2x_map[] = { 1, 1, 2, 3, 4, 1.5, 6, 2.5, 8};
-    const int pll_pclk_root_div_map[] = { 1, 2, 4, 8 };
-
-    if(!pll_sys_div) {
-        pll_sys_div = 1;
-    }
-
-    float pll_pre_div = pll_pre_div2x_map[pre_div];
-    unsigned int root_2x_div = root_2x?2:1;
-    unsigned int pll_pclk_root_div = pll_pclk_root_div_map[pclk_root_div];
-
-    unsigned int REFIN = xclk / pll_pre_div;
-
-    unsigned int VCO = REFIN * pll_multiplier / root_2x_div;
-
-    unsigned int PLL_CLK = pll_bypass?(xclk):(VCO / pll_sys_div * 2 / 5);//5 here is 10bit mode / 2, for 8bit it should be 4 (reg 0x3034)
-
-    unsigned int PCLK = PLL_CLK / pll_pclk_root_div / ((pclk_manual && pclk_div)?pclk_div:2);
-
-    unsigned int SYSCLK = PLL_CLK / 4;
-
-    ESP_LOGI(TAG, "Calculated XVCLK: %d Hz, REFIN: %u Hz, VCO: %u Hz, PLL_CLK: %u Hz, SYSCLK: %u Hz, PCLK: %u Hz", xclk, REFIN, VCO, PLL_CLK, SYSCLK, PCLK);
-    return SYSCLK;
-}
-
-static int set_pll(sensor_t *sensor, bool bypass, uint8_t multiplier, uint8_t sys_div, uint8_t pre_div, bool root_2x, uint8_t pclk_root_div, bool pclk_manual, uint8_t pclk_div){
-    int ret = 0;
-    if(multiplier > 252 || multiplier < 4 || sys_div > 15 || pre_div > 8 || pclk_div > 31 || pclk_root_div > 3){
-        ESP_LOGE(TAG, "Invalid arguments");
-        return -1;
-    }
-    if(multiplier > 127){
-        multiplier &= 0xFE;//only even integers above 127
-    }
-    ESP_LOGI(TAG, "Set PLL: bypass: %u, multiplier: %u, sys_div: %u, pre_div: %u, root_2x: %u, pclk_root_div: %u, pclk_manual: %u, pclk_div: %u", bypass, multiplier, sys_div, pre_div, root_2x, pclk_root_div, pclk_manual, pclk_div);
-
-    calc_sysclk(sensor->xclk_freq_hz, bypass, multiplier, sys_div, pre_div, root_2x, pclk_root_div, pclk_manual, pclk_div);
-
-    ret = write_reg(sensor->slv_addr, 0x3039, bypass?0x80:0x00);
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3034, 0x1A);//10bit mode
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3035, 0x01 | ((sys_div & 0x0f) << 4));
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3036, multiplier & 0xff);
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3037, (pre_div & 0xf) | (root_2x?0x10:0x00));
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3108, (pclk_root_div & 0x3) << 4 | 0x06);
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3824, pclk_div & 0x1f);
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x460C, pclk_manual?0x22:0x20);
-    }
-    if (ret == 0) {
-        ret = write_reg(sensor->slv_addr, 0x3103, 0x13);// system clock from pll, bit[1]
-    }
-    if(ret){
-        ESP_LOGE(TAG, "set_sensor_pll FAILED!");
-    }
-    return ret;
-}
-
-static int set_ae_level(sensor_t *sensor, int level);
-
-static int reset(sensor_t *sensor)
-{
-    //dump_regs(sensor);
-    vTaskDelay(100 / portTICK_PERIOD_MS);
-    int ret = 0;
-    // Software Reset: clear all registers and reset them to their default values
-    ret = write_reg(sensor->slv_addr, SYSTEM_CTROL0, 0x82);
-    if(ret){
-        ESP_LOGE(TAG, "Software Reset FAILED!");
-        return ret;
-    }
-    vTaskDelay(100 / portTICK_PERIOD_MS);
-    ret = write_regs(sensor->slv_addr, sensor_default_regs);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Camera defaults loaded");
-        vTaskDelay(100 / portTICK_PERIOD_MS);
-        //write_regs(sensor->slv_addr, sensor_regs_awb0);
-        //write_regs(sensor->slv_addr, sensor_regs_gamma1);
-    }
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret = 0;
-    const uint16_t (*regs)[2];
-
-    switch (pixformat) {
-    case PIXFORMAT_YUV422:
-        regs = sensor_fmt_yuv422;
-        break;
-
-    case PIXFORMAT_GRAYSCALE:
-        regs = sensor_fmt_grayscale;
-        break;
-
-    case PIXFORMAT_RGB565:
-    case PIXFORMAT_RGB888:
-        regs = sensor_fmt_rgb565;
-        break;
-
-    case PIXFORMAT_JPEG:
-        regs = sensor_fmt_jpeg;
-        break;
-
-    case PIXFORMAT_RAW:
-        regs = sensor_fmt_raw;
-        break;
-
-    default:
-        ESP_LOGE(TAG, "Unsupported pixformat: %u", pixformat);
-        return -1;
-    }
-
-    ret = write_regs(sensor->slv_addr, regs);
-    if(ret == 0) {
-        sensor->pixformat = pixformat;
-        ESP_LOGD(TAG, "Set pixformat to: %u", pixformat);
-    }
-    return ret;
-}
-
-static int set_image_options(sensor_t *sensor)
-{
-    int ret = 0;
-    uint8_t reg20 = 0;
-    uint8_t reg21 = 0;
-    uint8_t reg4514 = 0;
-    uint8_t reg4514_test = 0;
-
-    // compression
-    if (sensor->pixformat == PIXFORMAT_JPEG) {
-        reg21 |= 0x20;
-    }
-
-    // binning
-    if (!sensor->status.binning) {
-        reg20 |= 0x40;
-    } else {
-        reg20 |= 0x01;
-        reg21 |= 0x01;
-        reg4514_test |= 4;
-    }
-
-    // V-Flip
-    if (sensor->status.vflip) {
-        reg20 |= 0x06;
-        reg4514_test |= 1;
-    }
-
-    // H-Mirror
-    if (sensor->status.hmirror) {
-        reg21 |= 0x06;
-        reg4514_test |= 2;
-    }
-
-    switch (reg4514_test) {
-        //no binning
-        case 0: reg4514 = 0x88; break;//normal
-        case 1: reg4514 = 0x00; break;//v-flip
-        case 2: reg4514 = 0xbb; break;//h-mirror
-        case 3: reg4514 = 0x00; break;//v-flip+h-mirror
-        //binning
-        case 4: reg4514 = 0xaa; break;//normal
-        case 5: reg4514 = 0xbb; break;//v-flip
-        case 6: reg4514 = 0xbb; break;//h-mirror
-        case 7: reg4514 = 0xaa; break;//v-flip+h-mirror
-    }
-
-    if(write_reg(sensor->slv_addr, TIMING_TC_REG20, reg20)
-        || write_reg(sensor->slv_addr, TIMING_TC_REG21, reg21)
-        || write_reg(sensor->slv_addr, 0x4514, reg4514)){
-        ESP_LOGE(TAG, "Setting Image Options Failed");
-        return -1;
-    }
-
-    if (!sensor->status.binning) {
-        ret  = write_reg(sensor->slv_addr, 0x4520, 0x10)
-            || write_reg(sensor->slv_addr, X_INCREMENT, 0x11)//odd:1, even: 1
-            || write_reg(sensor->slv_addr, Y_INCREMENT, 0x11);//odd:1, even: 1
-    } else {
-        ret  = write_reg(sensor->slv_addr, 0x4520, 0x0b)
-            || write_reg(sensor->slv_addr, X_INCREMENT, 0x31)//odd:3, even: 1
-            || write_reg(sensor->slv_addr, Y_INCREMENT, 0x31);//odd:3, even: 1
-    }
-
-    ESP_LOGD(TAG, "Set Image Options: Compression: %u, Binning: %u, V-Flip: %u, H-Mirror: %u, Reg-4514: 0x%02x",
-        sensor->pixformat == PIXFORMAT_JPEG, sensor->status.binning, sensor->status.vflip, sensor->status.hmirror, reg4514);
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret = 0;
-    framesize_t old_framesize = sensor->status.framesize;
-    sensor->status.framesize = framesize;
-
-    if(framesize > FRAMESIZE_QSXGA){
-        ESP_LOGE(TAG, "Invalid framesize: %u", framesize);
-        return -1;
-    }
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    aspect_ratio_t ratio = resolution[framesize].aspect_ratio;
-    ratio_settings_t settings = ratio_table[ratio];
-
-    sensor->status.binning = (w <= (settings.max_width / 2) && h <= (settings.max_height / 2));
-    sensor->status.scale = !((w == settings.max_width && h == settings.max_height)
-        || (w == (settings.max_width / 2) && h == (settings.max_height / 2)));
-
-    ret  = write_addr_reg(sensor->slv_addr, X_ADDR_ST_H, settings.start_x, settings.start_y)
-        || write_addr_reg(sensor->slv_addr, X_ADDR_END_H, settings.end_x, settings.end_y)
-        || write_addr_reg(sensor->slv_addr, X_OUTPUT_SIZE_H, w, h);
-
-    if (ret) {
-        goto fail;
-    }
-
-    if (!sensor->status.binning) {
-        ret  = write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, settings.total_x, settings.total_y)
-            || write_addr_reg(sensor->slv_addr, X_OFFSET_H, settings.offset_x, settings.offset_y);
-    } else {
-        if (w > 920) {
-            ret = write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, settings.total_x - 200, settings.total_y / 2);
-        } else {
-            ret = write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, 2060, settings.total_y / 2);
-        }
-        if (ret == 0) {
-            ret = write_addr_reg(sensor->slv_addr, X_OFFSET_H, settings.offset_x / 2, settings.offset_y / 2);
-        }
-    }
-
-    if (ret == 0) {
-        ret = write_reg_bits(sensor->slv_addr, ISP_CONTROL_01, 0x20, sensor->status.scale);
-    }
-
-    if (ret == 0) {
-        ret = set_image_options(sensor);
-    }
-
-    if (ret) {
-        goto fail;
-    }
-
-    if (sensor->pixformat == PIXFORMAT_JPEG) {
-        //10MHz PCLK
-        uint8_t sys_mul = 200;
-        if(framesize < FRAMESIZE_QVGA || sensor->xclk_freq_hz == 16000000){
-            sys_mul = 160;
-        } else if(framesize < FRAMESIZE_XGA){
-            sys_mul = 180;
-        }
-        ret = set_pll(sensor, false, sys_mul, 4, 2, false, 2, true, 4);
-        //Set PLL: bypass: 0, multiplier: sys_mul, sys_div: 4, pre_div: 2, root_2x: 0, pclk_root_div: 2, pclk_manual: 1, pclk_div: 4
-    } else {
-        //ret = set_pll(sensor, false, 8, 1, 1, false, 1, true, 4);
-        if (framesize > FRAMESIZE_HVGA) {
-            ret = set_pll(sensor, false, 10, 1, 2, false, 1, true, 2);
-        } else if (framesize >= FRAMESIZE_QVGA) {
-            ret = set_pll(sensor, false, 8, 1, 1, false, 1, true, 4);
-        } else {
-            ret = set_pll(sensor, false, 20, 1, 1, false, 1, true, 8);
-        }
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set framesize to: %ux%u", w, h);
-    }
-    return ret;
-
-fail:
-    sensor->status.framesize = old_framesize;
-    ESP_LOGE(TAG, "Setting framesize to: %ux%u failed", w, h);
-    return ret;
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.hmirror = enable;
-    ret = set_image_options(sensor);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set h-mirror to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    sensor->status.vflip = enable;
-    ret = set_image_options(sensor);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set v-flip to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_quality(sensor_t *sensor, int qs)
-{
-    int ret = 0;
-    ret = write_reg(sensor->slv_addr, COMPRESSION_CTRL07, qs & 0x3f);
-    if (ret == 0) {
-        sensor->status.quality = qs;
-        ESP_LOGD(TAG, "Set quality to: %d", qs);
-    }
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, PRE_ISP_TEST_SETTING_1, TEST_COLOR_BAR, enable);
-    if (ret == 0) {
-        sensor->status.colorbar = enable;
-        ESP_LOGD(TAG, "Set colorbar to: %d", enable);
-    }
-    return ret;
-}
-
-static int set_gain_ctrl(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AGC_MANUALEN, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gain_ctrl to: %d", enable);
-        sensor->status.agc = enable;
-    }
-    return ret;
-}
-
-static int set_exposure_ctrl(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AEC_MANUALEN, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set exposure_ctrl to: %d", enable);
-        sensor->status.aec = enable;
-    }
-    return ret;
-}
-
-static int set_whitebal(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, ISP_CONTROL_01, 0x01, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set awb to: %d", enable);
-        sensor->status.awb = enable;
-    }
-    return ret;
-}
-
-//Advanced AWB
-static int set_dcw_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5183, 0x80, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set dcw to: %d", enable);
-        sensor->status.dcw = enable;
-    }
-    return ret;
-}
-
-//night mode enable
-static int set_aec2(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x3a00, 0x04, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec2 to: %d", enable);
-        sensor->status.aec2 = enable;
-    }
-    return ret;
-}
-
-static int set_bpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x04, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set bpc to: %d", enable);
-        sensor->status.bpc = enable;
-    }
-    return ret;
-}
-
-static int set_wpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x02, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wpc to: %d", enable);
-        sensor->status.wpc = enable;
-    }
-    return ret;
-}
-
-//Gamma enable
-static int set_raw_gma_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x20, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set raw_gma to: %d", enable);
-        sensor->status.raw_gma = enable;
-    }
-    return ret;
-}
-
-static int set_lenc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = write_reg_bits(sensor->slv_addr, 0x5000, 0x80, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set lenc to: %d", enable);
-        sensor->status.lenc = enable;
-    }
-    return ret;
-}
-
-static int get_agc_gain(sensor_t *sensor)
-{
-    int ra = read_reg(sensor->slv_addr, 0x350a);
-    if (ra < 0) {
-        return 0;
-    }
-    int rb = read_reg(sensor->slv_addr, 0x350b);
-    if (rb < 0) {
-        return 0;
-    }
-    int res = (rb & 0xF0) >> 4 | (ra & 0x03) << 4;
-    if (rb & 0x0F) {
-        res += 1;
-    }
-    return res;
-}
-
-//real gain
-static int set_agc_gain(sensor_t *sensor, int gain)
-{
-    int ret = 0;
-    if(gain < 0) {
-        gain = 0;
-    } else if(gain > 64) {
-        gain = 64;
-    }
-
-    //gain value is 6.4 bits float
-    //in order to use the max range, we deduct 1/16
-    int gainv = gain << 4;
-    if(gainv){
-        gainv -= 1;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x350a, gainv >> 8) || write_reg(sensor->slv_addr, 0x350b, gainv & 0xff);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set agc_gain to: %d", gain);
-        sensor->status.agc_gain = gain;
-    }
-    return ret;
-}
-
-static int get_aec_value(sensor_t *sensor)
-{
-    int ra = read_reg(sensor->slv_addr, 0x3500);
-    if (ra < 0) {
-        return 0;
-    }
-    int rb = read_reg(sensor->slv_addr, 0x3501);
-    if (rb < 0) {
-        return 0;
-    }
-    int rc = read_reg(sensor->slv_addr, 0x3502);
-    if (rc < 0) {
-        return 0;
-    }
-    int res = (ra & 0x0F) << 12 | (rb & 0xFF) << 4 | (rc & 0xF0) >> 4;
-    return res;
-}
-
-static int set_aec_value(sensor_t *sensor, int value)
-{
-    int ret = 0, max_val = 0;
-    max_val = read_reg16(sensor->slv_addr, 0x380e);
-    if (max_val < 0) {
-        ESP_LOGE(TAG, "Could not read max aec_value");
-        return -1;
-    }
-    if (value > max_val) {
-        value =max_val;
-    }
-
-    ret =  write_reg(sensor->slv_addr, 0x3500, (value >> 12) & 0x0F)
-        || write_reg(sensor->slv_addr, 0x3501, (value >> 4) & 0xFF)
-        || write_reg(sensor->slv_addr, 0x3502, (value << 4) & 0xF0);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec_value to: %d / %d", value, max_val);
-        sensor->status.aec_value = value;
-    }
-    return ret;
-}
-
-static int set_ae_level(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if (level < -5 || level > 5) {
-        return -1;
-    }
-    //good targets are between 5 and 115
-    int target_level = ((level + 5) * 10) + 5;
-
-    int level_high, level_low;
-    int fast_high, fast_low;
-
-    level_low = target_level * 23 / 25; //0.92 (0.46)
-    level_high = target_level * 27 / 25; //1.08 (2.08)
-
-    fast_low = level_low >> 1;
-    fast_high = level_high << 1;
-
-    if(fast_high>255) {
-        fast_high = 255;
-    }
-
-    ret =  write_reg(sensor->slv_addr, 0x3a0f, level_high)
-        || write_reg(sensor->slv_addr, 0x3a10, level_low)
-        || write_reg(sensor->slv_addr, 0x3a1b, level_high)
-        || write_reg(sensor->slv_addr, 0x3a1e, level_low)
-        || write_reg(sensor->slv_addr, 0x3a11, fast_high)
-        || write_reg(sensor->slv_addr, 0x3a1f, fast_low);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set ae_level to: %d", level);
-        sensor->status.ae_level = level;
-    }
-    return ret;
-}
-
-static int set_wb_mode(sensor_t *sensor, int mode)
-{
-    int ret = 0;
-    if (mode < 0 || mode > 4) {
-        return -1;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x3406, (mode != 0));
-    if (ret) {
-        return ret;
-    }
-    switch (mode) {
-        case 1://Sunny
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x5e0) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x410) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x540);//AWB B GAIN
-            break;
-        case 2://Cloudy
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x650) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x410) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x4f0);//AWB B GAIN
-            break;
-        case 3://Office
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x520) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x410) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x660);//AWB B GAIN
-            break;
-        case 4://HOME
-            ret  = write_reg16(sensor->slv_addr, 0x3400, 0x420) //AWB R GAIN
-                || write_reg16(sensor->slv_addr, 0x3402, 0x3f0) //AWB G GAIN
-                || write_reg16(sensor->slv_addr, 0x3404, 0x710);//AWB B GAIN
-            break;
-        default://AUTO
-            break;
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wb_mode to: %d", mode);
-        sensor->status.wb_mode = mode;
-    }
-    return ret;
-}
-
-static int set_awb_gain_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    int old_mode = sensor->status.wb_mode;
-    int mode = enable?old_mode:0;
-
-    ret = set_wb_mode(sensor, mode);
-
-    if (ret == 0) {
-        sensor->status.wb_mode = old_mode;
-        ESP_LOGD(TAG, "Set awb_gain to: %d", enable);
-        sensor->status.awb_gain = enable;
-    }
-    return ret;
-}
-
-static int set_special_effect(sensor_t *sensor, int effect)
-{
-    int ret=0;
-    if (effect < 0 || effect > 6) {
-        return -1;
-    }
-
-    uint8_t * regs = (uint8_t *)sensor_special_effects[effect];
-    ret =  write_reg(sensor->slv_addr, 0x5580, regs[0])
-        || write_reg(sensor->slv_addr, 0x5583, regs[1])
-        || write_reg(sensor->slv_addr, 0x5584, regs[2])
-        || write_reg(sensor->slv_addr, 0x5003, regs[3]);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set special_effect to: %d", effect);
-        sensor->status.special_effect = effect;
-    }
-    return ret;
-}
-
-static int set_brightness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    uint8_t value = 0;
-    bool negative = false;
-
-    switch (level) {
-        case 3:
-            value = 0x30;
-            break;
-        case 2:
-            value = 0x20;
-            break;
-        case 1:
-            value = 0x10;
-            break;
-        case -1:
-            value = 0x10;
-            negative = true;
-            break;
-        case -2:
-            value = 0x20;
-            negative = true;
-            break;
-        case -3:
-            value = 0x30;
-            negative = true;
-            break;
-        default: // 0
-            break;
-    }
-
-    ret = write_reg(sensor->slv_addr, 0x5587, value);
-    if (ret == 0) {
-        ret = write_reg_bits(sensor->slv_addr, 0x5588, 0x08, negative);
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set brightness to: %d", level);
-        sensor->status.brightness = level;
-    }
-    return ret;
-}
-
-static int set_contrast(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if(level > 3 || level < -3) {
-        return -1;
-    }
-    ret = write_reg(sensor->slv_addr, 0x5586, (level + 4) << 3);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set contrast to: %d", level);
-        sensor->status.contrast = level;
-    }
-    return ret;
-}
-
-static int set_saturation(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if(level > 4 || level < -4) {
-        return -1;
-    }
-
-    uint8_t * regs = (uint8_t *)sensor_saturation_levels[level+4];
-    for(int i=0; i<11; i++) {
-        ret = write_reg(sensor->slv_addr, 0x5381 + i, regs[i]);
-        if (ret) {
-            break;
-        }
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set saturation to: %d", level);
-        sensor->status.saturation = level;
-    }
-    return ret;
-}
-
-static int set_sharpness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if(level > 3 || level < -3) {
-        return -1;
-    }
-
-    uint8_t mt_offset_2 = (level + 3) * 8;
-    uint8_t mt_offset_1 = mt_offset_2 + 1;
-
-    ret = write_reg_bits(sensor->slv_addr, 0x5308, 0x40, false)//0x40 means auto
-        || write_reg(sensor->slv_addr, 0x5300, 0x10)
-        || write_reg(sensor->slv_addr, 0x5301, 0x10)
-        || write_reg(sensor->slv_addr, 0x5302, mt_offset_1)
-        || write_reg(sensor->slv_addr, 0x5303, mt_offset_2)
-        || write_reg(sensor->slv_addr, 0x5309, 0x10)
-        || write_reg(sensor->slv_addr, 0x530a, 0x10)
-        || write_reg(sensor->slv_addr, 0x530b, 0x04)
-        || write_reg(sensor->slv_addr, 0x530c, 0x06);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set sharpness to: %d", level);
-        sensor->status.sharpness = level;
-    }
-    return ret;
-}
-
-static int set_gainceiling(sensor_t *sensor, gainceiling_t level)
-{
-    int ret = 0, l = (int)level;
-
-    ret = write_reg(sensor->slv_addr, 0x3A18, (l >> 8) & 3)
-       || write_reg(sensor->slv_addr, 0x3A19, l & 0xFF);
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gainceiling to: %d", l);
-        sensor->status.gainceiling = l;
-    }
-    return ret;
-}
-
-static int get_denoise(sensor_t *sensor)
-{
-    if (!check_reg_mask(sensor->slv_addr, 0x5308, 0x10)) {
-        return 0;
-    }
-    return (read_reg(sensor->slv_addr, 0x5306) / 4) + 1;
-}
-
-static int set_denoise(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    if (level < 0 || level > 8) {
-        return -1;
-    }
-
-    ret = write_reg_bits(sensor->slv_addr, 0x5308, 0x10, level > 0);
-    if (ret == 0 && level > 0) {
-        ret = write_reg(sensor->slv_addr, 0x5306, (level - 1) * 4);
-    }
-
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set denoise to: %d", level);
-        sensor->status.denoise = level;
-    }
-    return ret;
-}
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = 0, ret2 = 0;
-    if(mask > 0xFF){
-        ret = read_reg16(sensor->slv_addr, reg);
-        if(ret >= 0 && mask > 0xFFFF){
-            ret2 = read_reg(sensor->slv_addr, reg+2);
-            if(ret2 >= 0){
-                ret = (ret << 8) | ret2 ;
-            } else {
-                ret = ret2;
-            }
-        }
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if(ret > 0){
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0, ret2 = 0;
-    if(mask > 0xFF){
-        ret = read_reg16(sensor->slv_addr, reg);
-        if(ret >= 0 && mask > 0xFFFF){
-            ret2 = read_reg(sensor->slv_addr, reg+2);
-            if(ret2 >= 0){
-                ret = (ret << 8) | ret2 ;
-            } else {
-                ret = ret2;
-            }
-        }
-    } else {
-        ret = read_reg(sensor->slv_addr, reg);
-    }
-    if(ret < 0){
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-    if(mask > 0xFFFF){
-        ret = write_reg16(sensor->slv_addr, reg, value >> 8);
-        if(ret >= 0){
-            ret = write_reg(sensor->slv_addr, reg+2, value & 0xFF);
-        }
-    } else if(mask > 0xFF){
-        ret = write_reg16(sensor->slv_addr, reg, value);
-    } else {
-        ret = write_reg(sensor->slv_addr, reg, value);
-    }
-    return ret;
-}
-
-static int set_res_raw(sensor_t *sensor, int startX, int startY, int endX, int endY, int offsetX, int offsetY, int totalX, int totalY, int outputX, int outputY, bool scale, bool binning)
-{
-    int ret = 0;
-    ret  = write_addr_reg(sensor->slv_addr, X_ADDR_ST_H, startX, startY)
-        || write_addr_reg(sensor->slv_addr, X_ADDR_END_H, endX, endY)
-        || write_addr_reg(sensor->slv_addr, X_OFFSET_H, offsetX, offsetY)
-        || write_addr_reg(sensor->slv_addr, X_TOTAL_SIZE_H, totalX, totalY)
-        || write_addr_reg(sensor->slv_addr, X_OUTPUT_SIZE_H, outputX, outputY)
-        || write_reg_bits(sensor->slv_addr, ISP_CONTROL_01, 0x20, scale);
-    if(!ret){
-        sensor->status.scale = scale;
-        sensor->status.binning = binning;
-        ret = set_image_options(sensor);
-    }
-    return ret;
-}
-
-static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div)
-{
-    int ret = 0;
-    ret = set_pll(sensor, bypass > 0, multiplier, sys_div, pre_div, root_2x > 0, seld5, pclk_manual > 0, pclk_div);
-    return ret;
-}
-
-static int set_xclk(sensor_t *sensor, int timer, int xclk)
-{
-    int ret = 0;
-    sensor->xclk_freq_hz = xclk * 1000000U;
-    ret = xclk_timer_conf(timer, sensor->xclk_freq_hz);
-    return ret;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    sensor->status.brightness = 0;
-    sensor->status.contrast = 0;
-    sensor->status.saturation = 0;
-    sensor->status.sharpness = (read_reg(sensor->slv_addr, 0x5303) / 8) - 3;
-    sensor->status.denoise = get_denoise(sensor);
-    sensor->status.ae_level = 0;
-    sensor->status.gainceiling = read_reg16(sensor->slv_addr, 0x3A18) & 0x3FF;
-    sensor->status.awb = check_reg_mask(sensor->slv_addr, ISP_CONTROL_01, 0x01);
-    sensor->status.dcw = !check_reg_mask(sensor->slv_addr, 0x5183, 0x80);
-    sensor->status.agc = !check_reg_mask(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AGC_MANUALEN);
-    sensor->status.aec = !check_reg_mask(sensor->slv_addr, AEC_PK_MANUAL, AEC_PK_MANUAL_AEC_MANUALEN);
-    sensor->status.hmirror = check_reg_mask(sensor->slv_addr, TIMING_TC_REG21, TIMING_TC_REG21_HMIRROR);
-    sensor->status.vflip = check_reg_mask(sensor->slv_addr, TIMING_TC_REG20, TIMING_TC_REG20_VFLIP);
-    sensor->status.colorbar = check_reg_mask(sensor->slv_addr, PRE_ISP_TEST_SETTING_1, TEST_COLOR_BAR);
-    sensor->status.bpc = check_reg_mask(sensor->slv_addr, 0x5000, 0x04);
-    sensor->status.wpc = check_reg_mask(sensor->slv_addr, 0x5000, 0x02);
-    sensor->status.raw_gma = check_reg_mask(sensor->slv_addr, 0x5000, 0x20);
-    sensor->status.lenc = check_reg_mask(sensor->slv_addr, 0x5000, 0x80);
-    sensor->status.quality = read_reg(sensor->slv_addr, COMPRESSION_CTRL07) & 0x3f;
-    sensor->status.special_effect = 0;
-    sensor->status.wb_mode = 0;
-    sensor->status.awb_gain = check_reg_mask(sensor->slv_addr, 0x3406, 0x01);
-    sensor->status.agc_gain = get_agc_gain(sensor);
-    sensor->status.aec_value = get_aec_value(sensor);
-    sensor->status.aec2 = check_reg_mask(sensor->slv_addr, 0x3a00, 0x04);
-    return 0;
-}
-
-int ov5640_detect(int slv_addr, sensor_id_t *id)
-{
-    if (OV5640_SCCB_ADDR == slv_addr) {
-        uint8_t h = SCCB_Read16(slv_addr, 0x300A);
-        uint8_t l = SCCB_Read16(slv_addr, 0x300B);
-        uint16_t PID = (h<<8) | l;
-        if (OV5640_PID == PID) {
-            id->PID = PID;
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int ov5640_init(sensor_t *sensor)
-{
-    sensor->reset = reset;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_contrast = set_contrast;
-    sensor->set_brightness = set_brightness;
-    sensor->set_saturation = set_saturation;
-    sensor->set_sharpness = set_sharpness;
-    sensor->set_gainceiling = set_gainceiling;
-    sensor->set_quality = set_quality;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_gain_ctrl = set_gain_ctrl;
-    sensor->set_exposure_ctrl = set_exposure_ctrl;
-    sensor->set_whitebal = set_whitebal;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-    sensor->init_status = init_status;
-    sensor->set_aec2 = set_aec2;
-    sensor->set_aec_value = set_aec_value;
-    sensor->set_special_effect = set_special_effect;
-    sensor->set_wb_mode = set_wb_mode;
-    sensor->set_ae_level = set_ae_level;
-    sensor->set_dcw = set_dcw_dsp;
-    sensor->set_bpc = set_bpc_dsp;
-    sensor->set_wpc = set_wpc_dsp;
-    sensor->set_awb_gain = set_awb_gain_dsp;
-    sensor->set_agc_gain = set_agc_gain;
-    sensor->set_raw_gma = set_raw_gma_dsp;
-    sensor->set_lenc = set_lenc_dsp;
-    sensor->set_denoise = set_denoise;
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = set_res_raw;
-    sensor->set_pll = _set_pll;
-    sensor->set_xclk = set_xclk;
-    return 0;
-}

+ 0 - 457
code/components/esp32-camera-master/sensors/ov7670.c

@@ -1,457 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * author: Juan Schiavoni <juanjoseschiavoni@hotmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV7725 driver.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include "sccb.h"
-#include "ov7670.h"
-#include "ov7670_regs.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-#include <stdio.h>
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char* TAG = "ov7760";
-#endif
-
-static int ov7670_clkrc = 0x01;
-
-/*
- * The default register settings, as obtained from OmniVision.  There
- * is really no making sense of most of these - lots of "reserved" values
- * and such.
- *
- * These settings give VGA YUYV.
- */
-struct regval_list {
-	uint8_t reg_num;
-	uint8_t value;
-};
-
-static struct regval_list ov7670_default_regs[] = {
-    /* Sensor automatically sets output window when resolution changes. */    
-    {TSLB, 0x04}, 
-    
-    /* Frame rate 30 fps at 12 Mhz clock */    
-	{CLKRC, 0x00},  
-	{DBLV,  0x4A},  
-
-    {COM10, COM10_VSYNC_NEG | COM10_PCLK_FREE},
-
-    /* Improve white balance */ 
-	{COM4, 0x40},  
-    
-    /* Improve color */   
-    {RSVD_B0, 0x84},  
-
-    /* Enable 50/60 Hz auto detection */
-    {COM11, COM11_EXP|COM11_HZAUTO}, 
-
-    /* Disable some delays */
-	{HSYST, 0},
-    {HSYEN, 0},   
-
-    {MVFP, MVFP_SUN}, 
-
-	/* More reserved magic, some of which tweaks white balance */
-	{AWBC1, 0x0a},		
-    {AWBC2, 0xf0},
-	{AWBC3, 0x34},		
-    {AWBC4, 0x58},
-	{AWBC5, 0x28},		
-    {AWBC6, 0x3a},
-	
-    {AWBCTR3, 0x0a},		
-    {AWBCTR2, 0x55},
-	{AWBCTR1, 0x11},		
-    {AWBCTR0, 0x9e}, 
-
-    {COM8, COM8_FAST_AUTO|COM8_STEP_UNLIMIT|COM8_AGC_EN|COM8_AEC_EN|COM8_AWB_EN},
-
-    /* End marker is FF because in ov7670 the address of GAIN 0 and default value too. */
-    {0xFF, 0xFF},  
-};
-
-static struct regval_list ov7670_fmt_yuv422[] = {
-	{ COM7,     0x0                         },  /* Selects YUV mode */
-	{ RGB444,   0                           },  /* No RGB444 please */
-	{ COM1,     0                           },  /* CCIR601 */
-	{ COM15,    COM15_R00FF                 },
-    { MVFP,     MVFP_SUN                    }, 
-	{ COM9,     0x6A                        },  /* 128x gain ceiling; 0x8 is reserved bit */
-	{ MTX1,     0x80                        },  /* "matrix coefficient 1" */
-	{ MTX2,     0x80                        }, 	/* "matrix coefficient 2" */
-	{ MTX3,     0                           },  /* vb */
-	{ MTX4,     0x22                        }, 	/* "matrix coefficient 4" */
-	{ MTX5,     0x5e                        },  /* "matrix coefficient 5" */
-	{ MTX6,     0x80                        },  /* "matrix coefficient 6" */
-	{ COM13,    COM13_UVSAT                 },
-	{ 0xff,     0xff                        },  /* END MARKER */
-};
-
-static struct regval_list ov7670_fmt_rgb565[] = {
-	{ COM7,     COM7_FMT_RGB565             },	/* Selects RGB mode */
-	{ RGB444,   0                           },	/* No RGB444 please */
-	{ COM1,     0x0                         },	/* CCIR601 */
-	{ COM15,    COM15_RGB565 |COM15_R00FF   },
-    { MVFP,     MVFP_SUN                    },   
-	{ COM9,     0x6A                        }, 	/* 128x gain ceiling; 0x8 is reserved bit */
-	{ MTX1,     0xb3                        }, 	/* "matrix coefficient 1" */
-	{ MTX2,     0xb3                        }, 	/* "matrix coefficient 2" */
-	{ MTX3,     0                           },	/* vb */
-	{ MTX4,     0x3d                        }, 	/* "matrix coefficient 4" */
-	{ MTX5,     0xa7                        }, 	/* "matrix coefficient 5" */
-	{ MTX6,     0xe4                        }, 	/* "matrix coefficient 6" */
-	{ COM13,    COM13_UVSAT                 },
-	{ 0xff,     0xff                        },  /* END MARKER */
-};
-
-
-static struct regval_list ov7670_vga[] = {
-    { COM3,                 0x00 },
-    { COM14,                0x00 },
-    { SCALING_XSC,          0x3A },
-    { SCALING_YSC,          0x35 },
-    { SCALING_DCWCTR,       0x11 },
-    { SCALING_PCLK_DIV,     0xF0 },
-    { SCALING_PCLK_DELAY,   0x02 },
-    { 0xff, 0xff },
-};
-
-static struct regval_list ov7670_qvga[] = {
-    { COM3,                 0x04 },
-    { COM14,                0x19 },
-    { SCALING_XSC,          0x3A },
-    { SCALING_YSC,          0x35 },
-    { SCALING_DCWCTR,       0x11 },
-    { SCALING_PCLK_DIV,     0xF1 },
-    { SCALING_PCLK_DELAY,   0x02 },
-    { 0xff, 0xff },
-};
-
-static struct regval_list ov7670_qqvga[] = {
-	{ COM3,                 0x04 }, //DCW enable	
-	{ COM14,                0x1a }, //pixel clock divided by 4, manual scaling enable, DCW and PCLK controlled by register	
-	{ SCALING_XSC,          0x3a },	
-	{ SCALING_YSC,          0x35 },
-	{ SCALING_DCWCTR,       0x22 }, //downsample by 4	
-	{ SCALING_PCLK_DIV,     0xf2 }, //pixel clock divided by 4	
-	{ SCALING_PCLK_DELAY,   0x02 },
-    { 0xff, 0xff },
-};
-
-/*
- * Write a list of register settings; ff/ff stops the process.
- */
-static int ov7670_write_array(sensor_t *sensor, struct regval_list *vals)
-{
-int ret = 0;
-	
-	while ( (vals->reg_num != 0xff || vals->value != 0xff) && (ret == 0) ) {
-        ret = SCCB_Write(sensor->slv_addr, vals->reg_num, vals->value);
-
-	    ESP_LOGD(TAG, "reset reg %02X, W(%02X) R(%02X)", vals->reg_num, 
-                        vals->value, SCCB_Read(sensor->slv_addr, vals->reg_num) );
-		
-		vals++;
-	}
-
-    return ret;
-}
-
-/*
- * Calculate the frame control registers.
- */
-static int ov7670_frame_control(sensor_t *sensor, int hstart, int hstop, int vstart, int vstop)
-{
-struct regval_list frame[7];
-
-    frame[0].reg_num = HSTART;
-    frame[0].value = (hstart >> 3);
-
-    frame[1].reg_num = HSTOP;
-    frame[1].value = (hstop >> 3);
-
-    frame[2].reg_num = HREF;
-    frame[2].value = (((hstop & 0x07) << 3) | (hstart & 0x07));
-    
-    frame[3].reg_num = VSTART;
-    frame[3].value = (vstart >> 2);
-    
-    frame[4].reg_num = VSTOP;
-    frame[4].value = (vstop >> 2);
-
-    frame[5].reg_num = VREF;
-    frame[5].value = (((vstop & 0x02) << 2) | (vstart & 0x02));
-
-    /* End mark */
-    frame[5].reg_num = 0xFF;
-    frame[5].value = 0xFF;
-
-    return ov7670_write_array(sensor, frame);
-}
-
-static int reset(sensor_t *sensor)
-{
-    int ret;
-
-    // Reset all registers
-    SCCB_Write(sensor->slv_addr, COM7, COM7_RESET);
-
-    // Delay 10 ms
-    vTaskDelay(10 / portTICK_PERIOD_MS);
-
-    ret = ov7670_write_array(sensor, ov7670_default_regs);
-
-    // Delay
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    return ret;
-}
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-int ret;
-
-    switch (pixformat) {
-        case PIXFORMAT_RGB565:
-        case PIXFORMAT_RGB888:
-            ret = ov7670_write_array(sensor, ov7670_fmt_rgb565);
-        break;
- 
-        case PIXFORMAT_YUV422:
-        case PIXFORMAT_GRAYSCALE:
-	    default:
-            ret = ov7670_write_array(sensor, ov7670_fmt_yuv422);
-        break;
-    }
-
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    /*
-	 * If we're running RGB565, we must rewrite clkrc after setting
-	 * the other parameters or the image looks poor.  If we're *not*
-	 * doing RGB565, we must not rewrite clkrc or the image looks
-	 * *really* poor.
-	 *
-	 * (Update) Now that we retain clkrc state, we should be able
-	 * to write it unconditionally, and that will make the frame
-	 * rate persistent too.
-	 */
-    if (pixformat == PIXFORMAT_RGB565) {
-        ret = SCCB_Write(sensor->slv_addr, CLKRC, ov7670_clkrc); 
-    }
-
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-   int ret;
-
-    // store clkrc before changing window settings...
-    ov7670_clkrc =  SCCB_Read(sensor->slv_addr, CLKRC);
-     
-	switch (framesize){
-        case FRAMESIZE_VGA:
-            if( (ret = ov7670_write_array(sensor, ov7670_vga)) == 0 ) {
-                /* These values from Omnivision */
-                ret = ov7670_frame_control(sensor, 158, 14, 10, 490);
-            }
-        break;
-	    case FRAMESIZE_QVGA:
-            if( (ret = ov7670_write_array(sensor, ov7670_qvga)) == 0 ) {
-                /* These values from Omnivision */
-                ret = ov7670_frame_control(sensor, 158, 14, 10, 490);
-            }
-        break;
-	    case FRAMESIZE_QQVGA:
-            if( (ret = ov7670_write_array(sensor, ov7670_qqvga)) == 0 ) {
-                /* These values from Omnivision */
-                ret = ov7670_frame_control(sensor, 158, 14, 10, 490);
-            }
-        break; 
-
-        default:
-            ret = -1;   
-    }
-
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    if (ret == 0) {
-        sensor->status.framesize = framesize;
-    }
-
-	return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    uint8_t ret = 0;
-    // Read register scaling_xsc
-    uint8_t reg = SCCB_Read(sensor->slv_addr, SCALING_XSC);
-
-    // Pattern to set color bar bit[0]=0 in every case
-    reg = SCALING_XSC_CBAR(reg);
-
-    // Write pattern to SCALING_XSC
-    ret = SCCB_Write(sensor->slv_addr, SCALING_XSC, reg);
-
-    // Read register scaling_ysc
-    reg = SCCB_Read(sensor->slv_addr, SCALING_YSC);
-
-    // Pattern to set color bar bit[0]=0 in every case
-    reg = SCALING_YSC_CBAR(reg, enable);
-
-    // Write pattern to SCALING_YSC
-    ret = ret | SCCB_Write(sensor->slv_addr, SCALING_YSC, reg);
-
-    // return 0 or 0xFF
-    return ret;
-}
-
-static int set_whitebal(sensor_t *sensor, int enable)
-{
-    // Read register COM8
-    uint8_t reg = SCCB_Read(sensor->slv_addr, COM8);
-
-    // Set white bal on/off
-    reg = COM8_SET_AWB(reg, enable);
-
-    // Write back register COM8
-    return SCCB_Write(sensor->slv_addr, COM8, reg);
-}
-
-static int set_gain_ctrl(sensor_t *sensor, int enable)
-{
-    // Read register COM8
-    uint8_t reg = SCCB_Read(sensor->slv_addr, COM8);
-
-    // Set white bal on/off
-    reg = COM8_SET_AGC(reg, enable);
-
-    // Write back register COM8
-    return SCCB_Write(sensor->slv_addr, COM8, reg);
-}
-
-static int set_exposure_ctrl(sensor_t *sensor, int enable)
-{
-    // Read register COM8
-    uint8_t reg = SCCB_Read(sensor->slv_addr, COM8);
-
-    // Set white bal on/off
-    reg = COM8_SET_AEC(reg, enable);
-
-    // Write back register COM8
-    return SCCB_Write(sensor->slv_addr, COM8, reg);
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    // Read register MVFP
-    uint8_t reg = SCCB_Read(sensor->slv_addr, MVFP);
-
-    // Set mirror on/off
-    reg = MVFP_SET_MIRROR(reg, enable);
-
-    // Write back register MVFP
-    return SCCB_Write(sensor->slv_addr, MVFP, reg);
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    // Read register MVFP
-    uint8_t reg = SCCB_Read(sensor->slv_addr, MVFP);
-
-    // Set mirror on/off
-    reg = MVFP_SET_FLIP(reg, enable);
-
-    // Write back register MVFP
-    return SCCB_Write(sensor->slv_addr, MVFP, reg);
-}
-
-static int init_status(sensor_t *sensor)
-{
-    sensor->status.awb = 0;
-    sensor->status.aec = 0;
-    sensor->status.agc = 0;
-    sensor->status.hmirror = 0;
-    sensor->status.vflip = 0;
-    sensor->status.colorbar = 0;
-    return 0;
-}
-
-static int set_dummy(sensor_t *sensor, int val){ return -1; }
-static int set_gainceiling_dummy(sensor_t *sensor, gainceiling_t val){ return -1; }
-
-int ov7670_detect(int slv_addr, sensor_id_t *id)
-{
-    if (OV7670_SCCB_ADDR == slv_addr) {
-        SCCB_Write(slv_addr, 0xFF, 0x01);//bank sensor
-        uint16_t PID = SCCB_Read(slv_addr, 0x0A);
-        if (OV7670_PID == PID) {
-            id->PID = PID;
-            id->VER = SCCB_Read(slv_addr, REG_VER);
-            id->MIDL = SCCB_Read(slv_addr, REG_MIDL);
-            id->MIDH = SCCB_Read(slv_addr, REG_MIDH);
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int ov7670_init(sensor_t *sensor)
-{
-    // Set function pointers
-    sensor->reset = reset;
-    sensor->init_status = init_status;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_whitebal = set_whitebal;
-    sensor->set_gain_ctrl = set_gain_ctrl;
-    sensor->set_exposure_ctrl = set_exposure_ctrl;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-
-    //not supported
-    sensor->set_brightness= set_dummy;
-    sensor->set_saturation= set_dummy;
-    sensor->set_quality = set_dummy;
-    sensor->set_gainceiling = set_gainceiling_dummy;
-    sensor->set_aec2 = set_dummy;
-    sensor->set_aec_value = set_dummy;
-    sensor->set_special_effect = set_dummy;
-    sensor->set_wb_mode = set_dummy;
-    sensor->set_ae_level = set_dummy;
-    sensor->set_dcw = set_dummy;
-    sensor->set_bpc = set_dummy;
-    sensor->set_wpc = set_dummy;
-    sensor->set_awb_gain = set_dummy;
-    sensor->set_agc_gain = set_dummy;
-    sensor->set_raw_gma = set_dummy;
-    sensor->set_lenc = set_dummy;
-    sensor->set_sharpness = set_dummy;
-    sensor->set_denoise = set_dummy;
-
-    // Retrieve sensor's signature
-    sensor->id.MIDH = SCCB_Read(sensor->slv_addr, REG_MIDH);
-    sensor->id.MIDL = SCCB_Read(sensor->slv_addr, REG_MIDL);
-    sensor->id.PID = SCCB_Read(sensor->slv_addr, REG_PID);
-    sensor->id.VER = SCCB_Read(sensor->slv_addr, REG_VER);
-    
-    ESP_LOGD(TAG, "OV7670 Attached");
-    
-    return 0;
-}

+ 0 - 575
code/components/esp32-camera-master/sensors/ov7725.c

@@ -1,575 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV7725 driver.
- *
- */
-#include <stdint.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "sccb.h"
-#include "xclk.h"
-#include "ov7725.h"
-#include "ov7725_regs.h"
-#include "freertos/FreeRTOS.h"
-#include "freertos/task.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char* TAG = "ov7725";
-#endif
-
-
-static const uint8_t default_regs[][2] = {
-    {COM3,          COM3_SWAP_YUV},
-    {COM7,          COM7_RES_QVGA | COM7_FMT_YUV},
-
-    {COM4,          0x01 | 0x00}, /* bypass PLL (0x00:off, 0x40:4x, 0x80:6x, 0xC0:8x) */
-    {CLKRC,         0x80 | 0x03}, /* Res/Bypass pre-scalar (0x40:bypass, 0x00-0x3F:prescaler PCLK=XCLK/(prescaler + 1)/2 ) */
-
-    // QVGA Window Size
-    {HSTART,        0x3F},
-    {HSIZE,         0x50},
-    {VSTART,        0x03},
-    {VSIZE,         0x78},
-    {HREF,          0x00},
-
-    // Scale down to QVGA Resolution
-    {HOUTSIZE,      0x50},
-    {VOUTSIZE,      0x78},
-    {EXHCH,         0x00},
-
-    {COM12,         0x03},
-    {TGT_B,         0x7F},
-    {FIXGAIN,       0x09},
-    {AWB_CTRL0,     0xE0},
-    {DSP_CTRL1,     0xFF},
-
-    {DSP_CTRL2,     DSP_CTRL2_VDCW_EN | DSP_CTRL2_HDCW_EN | DSP_CTRL2_HZOOM_EN | DSP_CTRL2_VZOOM_EN},
-
-    {DSP_CTRL3,     0x00},
-    {DSP_CTRL4,     0x00},
-    {DSPAUTO,       0xFF},
-
-    {COM8,          0xF0},
-    {COM6,          0xC5},
-    {COM9,          0x11},
-    {COM10,         COM10_VSYNC_NEG | COM10_PCLK_FREE}, //Invert VSYNC and MASK PCLK
-    {BDBASE,        0x7F},
-    {DBSTEP,        0x03},
-    {AEW,           0x75},
-    {AEB,           0x64},
-    {VPT,           0xA1},
-    {EXHCL,         0x00},
-    {AWB_CTRL3,     0xAA},
-    {COM8,          0xFF},
-
-    //Gamma
-    {GAM1,          0x0C},
-    {GAM2,          0x16},
-    {GAM3,          0x2A},
-    {GAM4,          0x4E},
-    {GAM5,          0x61},
-    {GAM6,          0x6F},
-    {GAM7,          0x7B},
-    {GAM8,          0x86},
-    {GAM9,          0x8E},
-    {GAM10,         0x97},
-    {GAM11,         0xA4},
-    {GAM12,         0xAF},
-    {GAM13,         0xC5},
-    {GAM14,         0xD7},
-    {GAM15,         0xE8},
-
-    {SLOP,          0x20},
-    {EDGE1,         0x05},
-    {EDGE2,         0x03},
-    {EDGE3,         0x00},
-    {DNSOFF,        0x01},
-
-    {MTX1,          0xB0},
-    {MTX2,          0x9D},
-    {MTX3,          0x13},
-    {MTX4,          0x16},
-    {MTX5,          0x7B},
-    {MTX6,          0x91},
-    {MTX_CTRL,      0x1E},
-
-    {BRIGHTNESS,    0x08},
-    {CONTRAST,      0x30},
-    {UVADJ0,        0x81},
-    {SDE,           (SDE_CONT_BRIGHT_EN | SDE_SATURATION_EN)},
-
-    // For 30 fps/60Hz
-    {DM_LNL,        0x00},
-    {DM_LNH,        0x00},
-    {BDBASE,        0x7F},
-    {DBSTEP,        0x03},
-
-    // Lens Correction, should be tuned with real camera module
-    {LC_RADI,       0x10},
-    {LC_COEF,       0x10},
-    {LC_COEFB,      0x14},
-    {LC_COEFR,      0x17},
-    {LC_CTR,        0x05},
-    {COM5,          0xF5}, //0x65
-
-    {0x00,          0x00},
-};
-
-static int get_reg(sensor_t *sensor, int reg, int mask)
-{
-    int ret = SCCB_Read(sensor->slv_addr, reg & 0xFF);
-    if(ret > 0){
-        ret &= mask;
-    }
-    return ret;
-}
-
-static int set_reg(sensor_t *sensor, int reg, int mask, int value)
-{
-    int ret = 0;
-    ret = SCCB_Read(sensor->slv_addr, reg & 0xFF);
-    if(ret < 0){
-        return ret;
-    }
-    value = (ret & ~mask) | (value & mask);
-    ret = SCCB_Write(sensor->slv_addr, reg & 0xFF, value);
-    return ret;
-}
-
-static int set_reg_bits(sensor_t *sensor, uint8_t reg, uint8_t offset, uint8_t length, uint8_t value)
-{
-    int ret = 0;
-    ret = SCCB_Read(sensor->slv_addr, reg);
-    if(ret < 0){
-        return ret;
-    }
-    uint8_t mask = ((1 << length) - 1) << offset;
-    value = (ret & ~mask) | ((value << offset) & mask);
-    ret = SCCB_Write(sensor->slv_addr, reg & 0xFF, value);
-    return ret;
-}
-
-static int get_reg_bits(sensor_t *sensor, uint8_t reg, uint8_t offset, uint8_t length)
-{
-    int ret = 0;
-    ret = SCCB_Read(sensor->slv_addr, reg);
-    if(ret < 0){
-        return ret;
-    }
-    uint8_t mask = ((1 << length) - 1) << offset;
-    return (ret & mask) >> offset;
-}
-
-
-static int reset(sensor_t *sensor)
-{
-    int i=0;
-    const uint8_t (*regs)[2];
-
-    // Reset all registers
-    SCCB_Write(sensor->slv_addr, COM7, COM7_RESET);
-
-    // Delay 10 ms
-    vTaskDelay(10 / portTICK_PERIOD_MS);
-
-    // Write default regsiters
-    for (i=0, regs = default_regs; regs[i][0]; i++) {
-        SCCB_Write(sensor->slv_addr, regs[i][0], regs[i][1]);
-    }
-
-    // Delay
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    return 0;
-}
-
-
-static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
-{
-    int ret=0;
-    sensor->pixformat = pixformat;
-    // Read register COM7
-    uint8_t reg = SCCB_Read(sensor->slv_addr, COM7);
-
-    switch (pixformat) {
-    case PIXFORMAT_RGB565:
-        reg =  COM7_SET_RGB(reg, COM7_FMT_RGB565);
-        break;
-    case PIXFORMAT_YUV422:
-    case PIXFORMAT_GRAYSCALE:
-        reg =  COM7_SET_FMT(reg, COM7_FMT_YUV);
-        break;
-    default:
-        return -1;
-    }
-
-    // Write back register COM7
-    ret = SCCB_Write(sensor->slv_addr, COM7, reg);
-
-    // Delay
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    return ret;
-}
-
-static int set_framesize(sensor_t *sensor, framesize_t framesize)
-{
-    int ret=0;
-    if (framesize > FRAMESIZE_VGA) {
-        return -1;
-    }
-    uint16_t w = resolution[framesize].width;
-    uint16_t h = resolution[framesize].height;
-    uint8_t reg = SCCB_Read(sensor->slv_addr, COM7);
-
-    sensor->status.framesize = framesize;
-
-    // Write MSBs
-    ret |= SCCB_Write(sensor->slv_addr, HOUTSIZE, w>>2);
-    ret |= SCCB_Write(sensor->slv_addr, VOUTSIZE, h>>1);
-
-    ret |= SCCB_Write(sensor->slv_addr, HSIZE, w>>2);
-    ret |= SCCB_Write(sensor->slv_addr, VSIZE, h>>1);
-
-    // Write LSBs
-    ret |= SCCB_Write(sensor->slv_addr, HREF, ((w&0x3) | ((h&0x1) << 2)));
-
-    if (framesize < FRAMESIZE_VGA) {
-        // Enable auto-scaling/zooming factors
-        ret |= SCCB_Write(sensor->slv_addr, DSPAUTO, 0xFF);
-
-        ret |= SCCB_Write(sensor->slv_addr, HSTART, 0x3F);
-        ret |= SCCB_Write(sensor->slv_addr, VSTART, 0x03);
-
-        ret |= SCCB_Write(sensor->slv_addr, COM7, reg | COM7_RES_QVGA);
-
-        ret |= SCCB_Write(sensor->slv_addr, CLKRC, 0x80 | 0x01);
-
-    } else {
-        // Disable auto-scaling/zooming factors
-        ret |= SCCB_Write(sensor->slv_addr, DSPAUTO, 0xF3);
-
-        // Clear auto-scaling/zooming factors
-        ret |= SCCB_Write(sensor->slv_addr, SCAL0, 0x00);
-        ret |= SCCB_Write(sensor->slv_addr, SCAL1, 0x00);
-        ret |= SCCB_Write(sensor->slv_addr, SCAL2, 0x00);
-
-        ret |= SCCB_Write(sensor->slv_addr, HSTART, 0x23);
-        ret |= SCCB_Write(sensor->slv_addr, VSTART, 0x07);
-
-        ret |= SCCB_Write(sensor->slv_addr, COM7, reg & ~COM7_RES_QVGA);
-
-        ret |= SCCB_Write(sensor->slv_addr, CLKRC, 0x80 | 0x03);
-    }
-
-    // Delay
-    vTaskDelay(30 / portTICK_PERIOD_MS);
-
-    return ret;
-}
-
-static int set_colorbar(sensor_t *sensor, int enable)
-{
-    int ret=0;
-    uint8_t reg;
-    sensor->status.colorbar = enable;
-
-    // Read reg COM3
-    reg = SCCB_Read(sensor->slv_addr, COM3);
-    // Enable colorbar test pattern output
-    reg = COM3_SET_CBAR(reg, enable);
-    // Write back COM3
-    ret |= SCCB_Write(sensor->slv_addr, COM3, reg);
-
-    // Read reg DSP_CTRL3
-    reg = SCCB_Read(sensor->slv_addr, DSP_CTRL3);
-    // Enable DSP colorbar output
-    reg = DSP_CTRL3_SET_CBAR(reg, enable);
-    // Write back DSP_CTRL3
-    ret |= SCCB_Write(sensor->slv_addr, DSP_CTRL3, reg);
-
-    return ret;
-}
-
-static int set_whitebal(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, COM8, 1, 1, enable) >= 0){
-        sensor->status.awb = !!enable;
-    }
-    return sensor->status.awb;
-}
-
-static int set_gain_ctrl(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, COM8, 2, 1, enable) >= 0){
-        sensor->status.agc = !!enable;
-    }
-    return sensor->status.agc;
-}
-
-static int set_exposure_ctrl(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, COM8, 0, 1, enable) >= 0){
-        sensor->status.aec = !!enable;
-    }
-    return sensor->status.aec;
-}
-
-static int set_hmirror(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, COM3, 6, 1, enable) >= 0){
-        sensor->status.hmirror = !!enable;
-    }
-    return sensor->status.hmirror;
-}
-
-static int set_vflip(sensor_t *sensor, int enable)
-{
-    if(set_reg_bits(sensor, COM3, 7, 1, enable) >= 0){
-        sensor->status.vflip = !!enable;
-    }
-    return sensor->status.vflip;
-}
-
-static int set_dcw_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0x65, 2, 1, !enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set dcw to: %d", enable);
-        sensor->status.dcw = enable;
-    }
-    return ret;
-}
-
-static int set_aec2(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, COM8, 7, 1, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec2 to: %d", enable);
-        sensor->status.aec2 = enable;
-    }
-    return ret;
-}
-
-static int set_bpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0x64, 1, 1, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set bpc to: %d", enable);
-        sensor->status.bpc = enable;
-    }
-    return ret;
-}
-
-static int set_wpc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0x64, 0, 1, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set wpc to: %d", enable);
-        sensor->status.wpc = enable;
-    }
-    return ret;
-}
-
-static int set_raw_gma_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0x64, 2, 1, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set raw_gma to: %d", enable);
-        sensor->status.raw_gma = enable;
-    }
-    return ret;
-}
-
-static int set_lenc_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, LC_CTR, 0, 1, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set lenc to: %d", enable);
-        sensor->status.lenc = enable;
-    }
-    return ret;
-}
-
-//real gain
-static int set_agc_gain(sensor_t *sensor, int gain)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, COM9, 4, 3, gain % 5);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set gain to: %d", gain);
-        sensor->status.agc_gain = gain;
-    }
-    return ret;
-}
-
-static int set_aec_value(sensor_t *sensor, int value)
-{
-    int ret = 0;
-    ret =  SCCB_Write(sensor->slv_addr, AEC, value & 0xff) | SCCB_Write(sensor->slv_addr, AECH, value >> 8);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set aec_value to: %d", value);
-        sensor->status.aec_value = value;
-    }
-    return ret;
-}
-
-static int set_awb_gain_dsp(sensor_t *sensor, int enable)
-{
-    int ret = 0;
-    ret = set_reg_bits(sensor, 0x63, 7, 1, enable);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set awb_gain to: %d", enable);
-        sensor->status.awb_gain = enable;
-    }
-    return ret;
-}
-
-static int set_brightness(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    ret = SCCB_Write(sensor->slv_addr, 0x9B, level);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set brightness to: %d", level);
-        sensor->status.brightness = level;
-    }
-    return ret;
-}
-
-static int set_contrast(sensor_t *sensor, int level)
-{
-    int ret = 0;
-    ret = SCCB_Write(sensor->slv_addr, 0x9C, level);
-    if (ret == 0) {
-        ESP_LOGD(TAG, "Set contrast to: %d", level);
-        sensor->status.contrast = level;
-    }
-    return ret;
-}
-
-static int init_status(sensor_t *sensor)
-{
-    sensor->status.brightness = SCCB_Read(sensor->slv_addr, 0x9B);
-    sensor->status.contrast = SCCB_Read(sensor->slv_addr, 0x9C);
-    sensor->status.saturation = 0;
-    sensor->status.ae_level = 0;
-    sensor->status.special_effect = get_reg_bits(sensor, 0x64, 5, 1);
-    sensor->status.wb_mode = get_reg_bits(sensor, 0x6B, 7, 1);
-    sensor->status.agc_gain = get_reg_bits(sensor, COM9, 4, 3);
-    sensor->status.aec_value = SCCB_Read(sensor->slv_addr, AEC) | (SCCB_Read(sensor->slv_addr, AECH) << 8);
-    sensor->status.gainceiling = SCCB_Read(sensor->slv_addr, 0x00);
-    sensor->status.awb = get_reg_bits(sensor, COM8, 1, 1);
-    sensor->status.awb_gain = get_reg_bits(sensor, 0x63, 7, 1);
-    sensor->status.aec = get_reg_bits(sensor, COM8, 0, 1);
-    sensor->status.aec2 = get_reg_bits(sensor, COM8, 7, 1);
-    sensor->status.agc = get_reg_bits(sensor, COM8, 2, 1);
-    sensor->status.bpc = get_reg_bits(sensor, 0x64, 1, 1);
-    sensor->status.wpc = get_reg_bits(sensor, 0x64, 0, 1);
-    sensor->status.raw_gma = get_reg_bits(sensor, 0x64, 2, 1);
-    sensor->status.lenc = get_reg_bits(sensor, LC_CTR, 0, 1);
-    sensor->status.hmirror = get_reg_bits(sensor, COM3, 6, 1);
-    sensor->status.vflip = get_reg_bits(sensor, COM3, 7, 1);
-    sensor->status.dcw = get_reg_bits(sensor, 0x65, 2, 1);
-    sensor->status.colorbar = get_reg_bits(sensor, COM3, 0, 1);
-    sensor->status.sharpness = get_reg_bits(sensor, EDGE0, 0, 5);
-    sensor->status.denoise = SCCB_Read(sensor->slv_addr, 0x8E);
-    return 0;
-}
-
-static int set_dummy(sensor_t *sensor, int val){ return -1; }
-static int set_gainceiling_dummy(sensor_t *sensor, gainceiling_t val){ return -1; }
-static int set_res_raw(sensor_t *sensor, int startX, int startY, int endX, int endY, int offsetX, int offsetY, int totalX, int totalY, int outputX, int outputY, bool scale, bool binning){return -1;}
-static int _set_pll(sensor_t *sensor, int bypass, int multiplier, int sys_div, int root_2x, int pre_div, int seld5, int pclk_manual, int pclk_div){return -1;}
-
-static int set_xclk(sensor_t *sensor, int timer, int xclk)
-{
-    int ret = 0;
-    sensor->xclk_freq_hz = xclk * 1000000U;
-    ret = xclk_timer_conf(timer, sensor->xclk_freq_hz);
-    return ret;
-}
-
-int ov7725_detect(int slv_addr, sensor_id_t *id)
-{
-    if (OV7725_SCCB_ADDR == slv_addr) {
-        SCCB_Write(slv_addr, 0xFF, 0x01);//bank sensor
-        uint16_t PID = SCCB_Read(slv_addr, 0x0A);
-        if (OV7725_PID == PID) {
-            id->PID = PID;
-            id->VER = SCCB_Read(slv_addr, REG_VER);
-            id->MIDL = SCCB_Read(slv_addr, REG_MIDL);
-            id->MIDH = SCCB_Read(slv_addr, REG_MIDH);
-            return PID;
-        } else {
-            ESP_LOGI(TAG, "Mismatch PID=0x%x", PID);
-        }
-    }
-    return 0;
-}
-
-int ov7725_init(sensor_t *sensor)
-{
-    // Set function pointers
-    sensor->reset = reset;
-    sensor->init_status = init_status;
-    sensor->set_pixformat = set_pixformat;
-    sensor->set_framesize = set_framesize;
-    sensor->set_colorbar = set_colorbar;
-    sensor->set_whitebal = set_whitebal;
-    sensor->set_gain_ctrl = set_gain_ctrl;
-    sensor->set_exposure_ctrl = set_exposure_ctrl;
-    sensor->set_hmirror = set_hmirror;
-    sensor->set_vflip = set_vflip;
-
-    sensor->set_brightness = set_brightness;
-    sensor->set_contrast = set_contrast;
-    sensor->set_aec2 = set_aec2;
-    sensor->set_aec_value = set_aec_value;
-    sensor->set_awb_gain = set_awb_gain_dsp;
-    sensor->set_agc_gain = set_agc_gain;
-    sensor->set_dcw = set_dcw_dsp;
-    sensor->set_bpc = set_bpc_dsp;
-    sensor->set_wpc = set_wpc_dsp;
-    sensor->set_raw_gma = set_raw_gma_dsp;
-    sensor->set_lenc = set_lenc_dsp;
-
-    //not supported
-    sensor->set_saturation= set_dummy;
-    sensor->set_sharpness = set_dummy;
-    sensor->set_denoise = set_dummy;
-    sensor->set_quality = set_dummy;
-    sensor->set_special_effect = set_dummy;
-    sensor->set_wb_mode = set_dummy;
-    sensor->set_ae_level = set_dummy;
-    sensor->set_gainceiling = set_gainceiling_dummy;
-
-
-    sensor->get_reg = get_reg;
-    sensor->set_reg = set_reg;
-    sensor->set_res_raw = set_res_raw;
-    sensor->set_pll = _set_pll;
-    sensor->set_xclk = set_xclk;
-    
-    // Retrieve sensor's signature
-    sensor->id.MIDH = SCCB_Read(sensor->slv_addr, REG_MIDH);
-    sensor->id.MIDL = SCCB_Read(sensor->slv_addr, REG_MIDL);
-    sensor->id.PID = SCCB_Read(sensor->slv_addr, REG_PID);
-    sensor->id.VER = SCCB_Read(sensor->slv_addr, REG_VER);
-    
-    ESP_LOGD(TAG, "OV7725 Attached");
-
-    return 0;
-}

+ 0 - 33
code/components/esp32-camera-master/sensors/private_include/bf3005.h

@@ -1,33 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * BF3005 driver.
- *
- */
-#ifndef __BF3005_H__
-#define __BF3005_H__
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int bf3005_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int bf3005_init(sensor_t *sensor);
-
-#endif // __BF3005_H__

+ 0 - 337
code/components/esp32-camera-master/sensors/private_include/bf3005_regs.h

@@ -1,337 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * BF3005 register definitions.
- */
-#ifndef __REG_REGS_H__
-#define __REG_REGS_H__
-#if 0
-#define GAIN                    0x00 /* AGC ¨C Gain control gain setting  */
-#define BLUE                    0x01 /* AWB ¨C Blue channel gain setting  */
-#define RED                     0x02 /* AWB ¨C Red channel gain setting   */
-#define GREEN                   0x03 /* AWB ¨C Green channel gain setting */
-#define BAVG                    0x05 /* U/B Average Level   */
-#define GAVG                    0x06 /* Y/Gb Average Level  */
-#define RAVG                    0x07 /* V/R Average Level   */
-#define AECH                    0x08 /* Exposure Value ¨C AEC MSBs */
-
-#define COM2                    0x09 /* Common Control 2 */
-#define COM2_SOFT_SLEEP         0x10 /* Soft sleep mode  */
-#define COM2_OUT_DRIVE_1x       0x00 /* Output drive capability 1x */
-#define COM2_OUT_DRIVE_2x       0x01 /* Output drive capability 2x */
-#define COM2_OUT_DRIVE_3x       0x02 /* Output drive capability 3x */
-#define COM2_OUT_DRIVE_4x       0x03 /* Output drive capability 4x */
-
-#define REG_PID                     0x0A /* Product ID Number MSB */
-#define REG_VER                     0x0B /* Product ID Number LSB */
-
-#define COM3                    0x0C /* Common Control 3                                        */
-#define COM3_VFLIP              0x80 /* Vertical flip image ON/OFF selection                    */
-#define COM3_MIRROR             0x40 /* Horizontal mirror image ON/OFF selection                */
-#define COM3_SWAP_BR            0x20 /* Swap B/R output sequence in RGB output mode             */
-#define COM3_SWAP_YUV           0x10 /* Swap Y/UV output sequence in YUV output mode            */
-#define COM3_SWAP_MSB           0x08 /* Swap output MSB/LSB                                     */
-#define COM3_TRI_CLOCK          0x04 /* Tri-state option for output clock at power-down period  */
-#define COM3_TRI_DATA           0x02 /* Tri-state option for output data at power-down period   */
-#define COM3_COLOR_BAR          0x01 /* Sensor color bar test pattern output enable             */
-#define COM3_SET_CBAR(r, x)     ((r&0xFE)|((x&1)<<0))
-#define COM3_SET_MIRROR(r, x)   ((r&0xBF)|((x&1)<<6))
-#define COM3_SET_FLIP(r, x)     ((r&0x7F)|((x&1)<<7))
-
-#define COM4                    0x0D /* Common Control 4         */
-#define COM4_PLL_BYPASS         0x00 /* Bypass PLL               */
-#define COM4_PLL_4x             0x40 /* PLL frequency 4x         */
-#define COM4_PLL_6x             0x80 /* PLL frequency 6x         */
-#define COM4_PLL_8x             0xc0 /* PLL frequency 8x         */
-#define COM4_AEC_FULL           0x00 /* AEC evaluate full window */
-#define COM4_AEC_1_2            0x10 /* AEC evaluate 1/2 window  */
-#define COM4_AEC_1_4            0x20 /* AEC evaluate 1/4 window  */
-#define COM4_AEC_2_3            0x30 /* AEC evaluate 2/3 window  */
-
-#define COM5                    0x0E /* Common Control 5 */
-#define COM5_AFR                0x80 /* Auto frame rate control ON/OFF selection (night mode) */
-#define COM5_AFR_SPEED          0x40 /* Auto frame rate control speed selection */
-#define COM5_AFR_0              0x00 /* No reduction of frame rate          */
-#define COM5_AFR_1_2            0x10 /* Max reduction to 1/2 frame rate     */
-#define COM5_AFR_1_4            0x20 /* Max reduction to 1/4 frame rate     */
-#define COM5_AFR_1_8            0x30 /* Max reduction to 1/8 frame rate     */
-#define COM5_AFR_4x             0x04 /* Add frame when AGC reaches 4x gain  */
-#define COM5_AFR_8x             0x08 /* Add frame when AGC reaches 8x gain  */
-#define COM5_AFR_16x            0x0c /* Add frame when AGC reaches 16x gain */
-#define COM5_AEC_NO_LIMIT       0x01 /* No limit to AEC increase step       */
-
-#define COM6                    0x0F /* Common Control 6 */
-#define COM6_AUTO_WINDOW        0x01 /* Auto window setting ON/OFF selection when format changes */
-
-#define AEC                     0x10 /* AEC[7:0] (see register AECH for AEC[15:8]) */
-#define CLKRC                   0x11 /* Internal Clock */
-
-#define COM7                    0x12 /* Common Control 7         */
-#define COM7_RESET              0x80 /* SCCB Register Reset      */
-#define COM7_RES_VGA            0x00 /* Resolution VGA           */
-#define COM7_RES_QVGA           0x40 /* Resolution QVGA          */
-#define COM7_BT656              0x20 /* BT.656 protocol ON/OFF   */
-#define COM7_SENSOR_RAW         0x10 /* Sensor RAW               */
-#define COM7_FMT_GBR422         0x00 /* RGB output format GBR422 */
-#define COM7_FMT_RGB565         0x04 /* RGB output format RGB565 */
-#define COM7_FMT_RGB555         0x08 /* RGB output format RGB555 */
-#define COM7_FMT_RGB444         0x0C /* RGB output format RGB444 */
-#define COM7_FMT_YUV            0x00 /* Output format YUV        */
-#define COM7_FMT_P_BAYER        0x01 /* Output format Processed Bayer RAW */
-#define COM7_FMT_RGB            0x02 /* Output format RGB        */
-#define COM7_FMT_R_BAYER        0x03 /* Output format Bayer RAW  */
-#define COM7_SET_FMT(r, x)      ((r&0xFC)|((x&0x3)<<0))
-#define COM7_SET_RGB(r, x)      ((r&0xF0)|(x&0x0C)|COM7_FMT_RGB)
-
-#define COM8                    0x13 /* Common Control 8                */
-#define COM8_FAST_AUTO          0x80 /* Enable fast AGC/AEC algorithm   */
-#define COM8_STEP_VSYNC         0x00 /* AEC - Step size limited to vertical blank */
-#define COM8_STEP_UNLIMIT       0x40 /* AEC - Step size unlimited step size       */
-#define COM8_BANDF_EN           0x20 /* Banding filter ON/OFF */
-#define COM8_AEC_BANDF          0x10 /* Enable AEC below banding value */
-#define COM8_AEC_FINE_EN        0x08 /* Fine AEC ON/OFF control */
-#define COM8_AGC_EN             0x04 /* AGC Enable */
-#define COM8_AWB_EN             0x02 /* AWB Enable */
-#define COM8_AEC_EN             0x01 /* AEC Enable */
-#define COM8_SET_AGC(r, x)      ((r&0xFB)|((x&0x1)<<2))
-#define COM8_SET_AWB(r, x)      ((r&0xFD)|((x&0x1)<<1))
-#define COM8_SET_AEC(r, x)      ((r&0xFE)|((x&0x1)<<0))
-
-#define COM9                    0x14 /* Common Control 9 */
-#define COM9_HISTO_AVG          0x80 /* Histogram or average based AEC/AGC selection */
-#define COM9_AGC_GAIN_2x        0x00 /* Automatic Gain Ceiling 2x  */
-#define COM9_AGC_GAIN_4x        0x10 /* Automatic Gain Ceiling 4x  */
-#define COM9_AGC_GAIN_8x        0x20 /* Automatic Gain Ceiling 8x  */
-#define COM9_AGC_GAIN_16x       0x30 /* Automatic Gain Ceiling 16x */
-#define COM9_AGC_GAIN_32x       0x40 /* Automatic Gain Ceiling 32x */
-#define COM9_DROP_VSYNC         0x04 /* Drop VSYNC output of corrupt frame */
-#define COM9_DROP_HREF          0x02 /* Drop HREF output of corrupt frame  */
-#define COM9_SET_AGC(r, x)      ((r&0x8F)|((x&0x07)<<4))
-
-#define COM10                   0x15 /* Common Control 10 */
-#define COM10_NEGATIVE          0x80 /* Output negative data */
-#define COM10_HSYNC_EN          0x40 /* HREF changes to HSYNC */
-#define COM10_PCLK_FREE         0x00 /* PCLK output option: free running PCLK */
-#define COM10_PCLK_MASK         0x20 /* PCLK output option: masked during horizontal blank  */
-#define COM10_PCLK_REV          0x10 /* PCLK reverse */
-#define COM10_HREF_REV          0x08 /* HREF reverse */
-#define COM10_VSYNC_FALLING     0x00 /* VSYNC changes on falling edge of PCLK */
-#define COM10_VSYNC_RISING      0x04 /* VSYNC changes on rising edge of PCLK */
-#define COM10_VSYNC_NEG         0x02 /* VSYNC negative */
-#define COM10_OUT_RANGE_8       0x01 /* Output data range: Full range */
-#define COM10_OUT_RANGE_10      0x00 /* Output data range: Data from [10] to [F0] (8 MSBs) */
-
-#define REG16                   0x16 /* Register 16 */
-#define REG16_BIT_SHIFT         0x80 /* Bit shift test pattern options */
-#define HSTART                  0x17 /* Horizontal Frame (HREF column) Start 8 MSBs (2 LSBs are at HREF[5:4]) */
-#define HSIZE                   0x18 /* Horizontal Sensor Size (2 LSBs are at HREF[1:0]) */
-#define VSTART                  0x19 /* Vertical Frame (row) Start 8 MSBs (1 LSB is at HREF[6]) */
-#define VSIZE                   0x1A /* Vertical Sensor Size (1 LSB is at HREF[2]) */
-#define PSHFT                   0x1B /* Data Format - Pixel Delay Select */
-#define REG_MIDH                    0x1C /* Manufacturer ID Byte ¨C High */
-#define REG_MIDL                    0x1D /* Manufacturer ID Byte ¨C Low */
-#define LAEC                    0x1F /* Fine AEC Value - defines exposure value less than one row period */
-
-#define COM11                   0x20 /* Common Control 11 */
-#define COM11_SNGL_FRAME_EN     0x02 /* Single frame ON/OFF selection */
-#define COM11_SNGL_XFR_TRIG     0x01 /* Single frame transfer trigger */
-
-#define BDBASE                  0x22 /* Banding Filter Minimum AEC Value */
-#define DBSTEP                  0x23 /* Banding Filter Maximum Step */
-#define AEW                     0x24 /* AGC/AEC - Stable Operating Region (Upper Limit) */
-#define AEB                     0x25 /* AGC/AEC - Stable Operating Region (Lower Limit) */
-#define VPT                     0x26 /* AGC/AEC Fast Mode Operating Region */
-#define REG28                   0x28 /* Selection on the number of dummy rows, N */
-#define HOUTSIZE                0x29 /* Horizontal Data Output Size MSBs (2 LSBs at register EXHCH[1:0]) */
-#define EXHCH                   0x2A /* Dummy Pixel Insert MSB */
-#define EXHCL                   0x2B /* Dummy Pixel Insert LSB */
-#define VOUTSIZE                0x2C /* Vertical Data Output Size MSBs (LSB at register EXHCH[2])       */
-#define ADVFL                   0x2D /* LSB of Insert Dummy Rows in Vertical Sync (1 bit equals 1 row)  */
-#define ADVFH                   0x2E /* MSB of Insert Dummy Rows in Vertical Sync */
-#define YAVE                    0x2F /* Y/G Channel Average Value */
-#define LUMHTH                  0x30 /* Histogram AEC/AGC Luminance High Level Threshold */
-#define LUMLTH                  0x31 /* Histogram AEC/AGC Luminance Low Level Threshold  */
-#define HREF                    0x32 /* Image Start and Size Control */
-#define DM_LNL                  0x33 /* Dummy Row Low 8 Bits  */
-#define DM_LNH                  0x34 /* Dummy Row High 8 Bits */
-#define ADOFF_B                 0x35 /* AD Offset Compensation Value for B Channel  */
-#define ADOFF_R                 0x36 /* AD Offset Compensation Value for R Channel  */
-#define ADOFF_GB                0x37 /* AD Offset Compensation Value for GB Channel */
-#define ADOFF_GR                0x38 /* AD Offset Compensation Value for GR Channel */
-#define OFF_B                   0x39 /* AD Offset Compensation Value for B Channel  */
-#define OFF_R                   0x3A /* AD Offset Compensation Value for R Channel  */
-#define OFF_GB                  0x3B /* AD Offset Compensation Value for GB Channel */
-#define OFF_GR                  0x3C /* AD Offset Compensation Value for GR Channel */
-#define COM12                   0x3D /* DC offset compensation for analog process */
-
-#define COM13                   0x3E /* Common Control 13 */
-#define COM13_BLC_EN            0x80 /* BLC enable */
-#define COM13_ADC_EN            0x40 /* ADC channel BLC ON/OFF control */
-#define COM13_ANALOG_BLC        0x20 /* Analog processing channel BLC ON/OFF control */
-#define COM13_ABLC_GAIN_EN      0x04 /* ABLC gain trigger enable */
-
-#define COM14                   0x3F /* Common Control 14 */
-#define COM15                   0x40 /* Common Control 15 */
-#define COM16                   0x41 /* Common Control 16 */
-#define TGT_B                   0x42 /* BLC Blue Channel Target Value   */
-#define TGT_R                   0x43 /* BLC Red Channel Target Value    */
-#define TGT_GB                  0x44 /* BLC Gb Channel Target Value     */
-#define TGT_GR                  0x45 /* BLC Gr Channel Target Value     */
-
-#define LC_CTR                  0x46 /* Lens Correction Control */
-#define LC_CTR_RGB_COMP_1       0x00 /* R, G, and B channel compensation coefficient is set by LC_COEF (0x49) */
-#define LC_CTR_RGB_COMP_3       0x04 /* R, G, and B channel compensation coefficient is set by registers
-                                        LC_COEFB (0x4B), LC_COEF (0x49), and LC_COEFR (0x4C), respectively */
-#define LC_CTR_EN               0x01 /* Lens correction enable */
-#define LC_XC                   0x47 /* X Coordinate of Lens Correction Center Relative to Array Center */
-#define LC_YC                   0x48 /* Y Coordinate of Lens Correction Center Relative to Array Center */
-#define LC_COEF                 0x49 /* Lens Correction Coefficient */
-#define LC_RADI                 0x4A /* Lens Correction Radius */
-#define LC_COEFB                0x4B /* Lens Correction B Channel Compensation Coefficient */
-#define LC_COEFR                0x4C /* Lens Correction R Channel Compensation Coefficient */
-
-#define FIXGAIN                 0x4D /* Analog Fix Gain Amplifier */
-#define AREF0                   0x4E /* Sensor Reference Control */
-#define AREF1                   0x4F /* Sensor Reference Current Control */
-#define AREF2                   0x50 /* Analog Reference Control */
-#define AREF3                   0x51 /* ADC Reference Control */
-#define AREF4                   0x52 /* ADC Reference Control */
-#define AREF5                   0x53 /* ADC Reference Control */
-#define AREF6                   0x54 /* Analog Reference Control */
-#define AREF7                   0x55 /* Analog Reference Control */
-#define UFIX                    0x60 /* U Channel Fixed Value Output */
-#define VFIX                    0x61 /* V Channel Fixed Value Output */
-#define AWBB_BLK                0x62 /* AWB Option for Advanced AWB  */
-
-#define AWB_CTRL0               0x63 /* AWB Control Byte 0   */
-#define AWB_CTRL0_GAIN_EN       0x80 /* AWB gain enable      */
-#define AWB_CTRL0_CALC_EN       0x40 /* AWB calculate enable */
-#define AWB_CTRL0_WBC_MASK      0x0F /* WBC threshold 2      */
-
-#define DSP_CTRL1               0x64 /* DSP Control Byte 1                  */
-#define DSP_CTRL1_FIFO_EN       0x80 /* FIFO enable/disable selection       */
-#define DSP_CTRL1_UV_EN         0x40 /* UV adjust function ON/OFF selection */
-#define DSP_CTRL1_SDE_EN        0x20 /* SDE enable                          */
-#define DSP_CTRL1_MTRX_EN       0x10 /* Color matrix ON/OFF selection       */
-#define DSP_CTRL1_INTRP_EN      0x08 /* Interpolation ON/OFF selection      */
-#define DSP_CTRL1_GAMMA_EN      0x04 /* Gamma function ON/OFF selection     */
-#define DSP_CTRL1_BLACK_EN      0x02 /* Black defect auto correction ON/OFF */
-#define DSP_CTRL1_WHITE_EN      0x01 /* White defect auto correction ON/OFF */
-
-#define DSP_CTRL2               0x65 /* DSP Control Byte 2          */
-#define DSP_CTRL2_VDCW_EN       0x08 /* Vertical DCW enable         */
-#define DSP_CTRL2_HDCW_EN       0x04 /* Horizontal DCW enable       */
-#define DSP_CTRL2_VZOOM_EN      0x02 /* Vertical zoom out enable    */
-#define DSP_CTRL2_HZOOM_EN      0x01 /* Horizontal zoom out enable  */
-
-#define DSP_CTRL3               0x66 /* DSP Control Byte 3                      */
-#define DSP_CTRL3_UV_EN         0x80 /* UV output sequence option               */
-#define DSP_CTRL3_CBAR_EN       0x20 /* DSP color bar ON/OFF selection          */
-#define DSP_CTRL3_FIFO_EN       0x08 /* FIFO power down ON/OFF selection        */
-#define DSP_CTRL3_SCAL1_PWDN    0x04 /* Scaling module power down control 1     */
-#define DSP_CTRL3_SCAL2_PWDN    0x02 /* Scaling module power down control 2     */
-#define DSP_CTRL3_INTRP_PWDN    0x01 /* Interpolation module power down control */
-#define DSP_CTRL3_SET_CBAR(r, x)    ((r&0xDF)|((x&1)<<5))
-
-
-#define DSP_CTRL4               0x67 /* DSP Control Byte 4          */
-#define DSP_CTRL4_YUV_RGB       0x00 /* Output selection YUV or RGB */
-#define DSP_CTRL4_RAW8          0x02 /* Output selection RAW8       */
-#define DSP_CTRL4_RAW10         0x03 /* Output selection RAW10      */
-
-
-#define AWB_BIAS                0x68 /* AWB BLC Level Clip */
-#define AWB_CTRL1               0x69 /* AWB Control 1 */
-#define AWB_CTRL2               0x6A /* AWB Control 2 */
-
-#define AWB_CTRL3               0x6B /* AWB Control 3 */
-#define AWB_CTRL3_ADVANCED      0x80 /* AWB mode select - Advanced AWB */
-#define AWB_CTRL3_SIMPLE        0x00 /* AWB mode select - Simple AWB */
-
-#define AWB_CTRL4               0x6C /* AWB Control 4  */
-#define AWB_CTRL5               0x6D /* AWB Control 5  */
-#define AWB_CTRL6               0x6E /* AWB Control 6  */
-#define AWB_CTRL7               0x6F /* AWB Control 7  */
-#define AWB_CTRL8               0x70 /* AWB Control 8  */
-#define AWB_CTRL9               0x71 /* AWB Control 9  */
-#define AWB_CTRL10              0x72 /* AWB Control 10 */
-#define AWB_CTRL11              0x73 /* AWB Control 11 */
-#define AWB_CTRL12              0x74 /* AWB Control 12 */
-#define AWB_CTRL13              0x75 /* AWB Control 13 */
-#define AWB_CTRL14              0x76 /* AWB Control 14 */
-#define AWB_CTRL15              0x77 /* AWB Control 15 */
-#define AWB_CTRL16              0x78 /* AWB Control 16 */
-#define AWB_CTRL17              0x79 /* AWB Control 17 */
-#define AWB_CTRL18              0x7A /* AWB Control 18 */
-#define AWB_CTRL19              0x7B /* AWB Control 19 */
-#define AWB_CTRL20              0x7C /* AWB Control 20 */
-#define AWB_CTRL21              0x7D /* AWB Control 21 */
-#define GAM1                    0x7E /* Gamma Curve 1st Segment Input End Point 0x04 Output Value */
-#define GAM2                    0x7F /* Gamma Curve 2nd Segment Input End Point 0x08 Output Value */
-#define GAM3                    0x80 /* Gamma Curve 3rd Segment Input End Point 0x10 Output Value */
-#define GAM4                    0x81 /* Gamma Curve 4th Segment Input End Point 0x20 Output Value */
-#define GAM5                    0x82 /* Gamma Curve 5th Segment Input End Point 0x28 Output Value */
-#define GAM6                    0x83 /* Gamma Curve 6th Segment Input End Point 0x30 Output Value */
-#define GAM7                    0x84 /* Gamma Curve 7th Segment Input End Point 0x38 Output Value */
-#define GAM8                    0x85 /* Gamma Curve 8th Segment Input End Point 0x40 Output Value */
-#define GAM9                    0x86 /* Gamma Curve 9th Segment Input End Point 0x48 Output Value */
-#define GAM10                   0x87 /* Gamma Curve 10th Segment Input End Point 0x50 Output Value */
-#define GAM11                   0x88 /* Gamma Curve 11th Segment Input End Point 0x60 Output Value */
-#define GAM12                   0x89 /* Gamma Curve 12th Segment Input End Point 0x70 Output Value */
-#define GAM13                   0x8A /* Gamma Curve 13th Segment Input End Point 0x90 Output Value */
-#define GAM14                   0x8B /* Gamma Curve 14th Segment Input End Point 0xB0 Output Value */
-#define GAM15                   0x8C /* Gamma Curve 15th Segment Input End Point 0xD0 Output Value */
-#define SLOP                    0x8D /* Gamma Curve Highest Segment Slope */
-#define DNSTH                   0x8E /* De-noise Threshold */
-#define EDGE0                   0x8F /* Edge Enhancement Strength Control */
-#define EDGE1                   0x90 /* Edge Enhancement Threshold Control */
-#define DNSOFF                  0x91 /* Auto De-noise Threshold Control */
-#define EDGE2                   0x92 /* Edge Enhancement Strength Upper Limit */
-#define EDGE3                   0x93 /* Edge Enhancement Strength Upper Limit */
-#define MTX1                    0x94 /* Matrix Coefficient 1 */
-#define MTX2                    0x95 /* Matrix Coefficient 2 */
-#define MTX3                    0x96 /* Matrix Coefficient 3 */
-#define MTX4                    0x97 /* Matrix Coefficient 4 */
-#define MTX5                    0x98 /* Matrix Coefficient 5 */
-#define MTX6                    0x99 /* Matrix Coefficient 6 */
-
-#define MTX_CTRL                0x9A /* Matrix Control */
-#define MTX_CTRL_DBL_EN         0x80 /* Matrix double ON/OFF selection */
-
-#define BRIGHTNESS              0x9B /* Brightness Control */
-#define CONTRAST                0x9C /* Contrast Gain */
-#define UVADJ0                  0x9E /* Auto UV Adjust Control 0 */
-#define UVADJ1                  0x9F /* Auto UV Adjust Control 1 */
-#define SCAL0                   0xA0 /* DCW Ratio Control */
-#define SCAL1                   0xA1 /* Horizontal Zoom Out Control */
-#define SCAL2                   0xA2 /* Vertical Zoom Out Control */
-#define FIFODLYM                0xA3 /* FIFO Manual Mode Delay Control */
-#define FIFODLYA                0xA4 /* FIFO Auto Mode Delay Control */
-
-#define SDE                     0xA6 /* Special Digital Effect Control  */
-#define SDE_NEGATIVE_EN         0x40 /* Negative image enable           */
-#define SDE_GRAYSCALE_EN        0x20 /* Gray scale image enable         */
-#define SDE_V_FIXED_EN          0x10 /* V fixed value enable            */
-#define SDE_U_FIXED_EN          0x08 /* U fixed value enable            */
-#define SDE_CONT_BRIGHT_EN      0x04 /* Contrast/Brightness enable      */
-#define SDE_SATURATION_EN       0x02 /* Saturation enable               */
-#define SDE_HUE_EN              0x01 /* Hue enable                      */
-
-#define USAT                    0xA7 /* U Component Saturation Gain     */
-#define VSAT                    0xA8 /* V Component Saturation Gain     */
-#define HUECOS                  0xA9 /* Cosine value ¡Á 0x80             */
-#define HUESIN                  0xAA /* Sine value ¡Á 0x80               */
-#define SIGN_BIT                0xAB /* Sign Bit for Hue and Brightness */
-
-#define DSPAUTO                 0xAC /* DSP Auto Function ON/OFF Control */
-#define DSPAUTO_AWB_EN          0x80 /* AWB auto threshold control */
-#define DSPAUTO_DENOISE_EN      0x40 /* De-noise auto threshold control */
-#define DSPAUTO_EDGE_EN         0x20 /* Sharpness (edge enhancement) auto strength control */
-#define DSPAUTO_UV_EN           0x10 /* UV adjust auto slope control */
-#define DSPAUTO_SCAL0_EN        0x08 /* Auto scaling factor control (register SCAL0 (0xA0)) */
-#define DSPAUTO_SCAL1_EN        0x04 /* Auto scaling factor control (registers SCAL1 (0xA1 and SCAL2 (0xA2))*/
-#define SET_REG(reg, x)         (##reg_DEFAULT|x)
-#endif //__REG_REGS_H__
-#endif

+ 0 - 31
code/components/esp32-camera-master/sensors/private_include/gc0308.h

@@ -1,31 +0,0 @@
-#pragma once
-
-#include "sensor.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int gc0308_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int gc0308_init(sensor_t *sensor);
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 25
code/components/esp32-camera-master/sensors/private_include/gc0308_regs.h

@@ -1,25 +0,0 @@
-/*
- * GC0308 register definitions.
- */
-#ifndef __GC0308_REG_REGS_H__
-#define __GC0308_REG_REGS_H__
-
-#define RESET_RELATED   0xfe    // Bit[7]: Software reset 
-                                // Bit[6:5]: NA
-                                // Bit[4]: CISCTL_restart_n
-                                // Bit[3:1]: NA
-                                // Bit[0]: page select
-                                //  0:page0
-                                //  1:page1
-
-
-// page0:
-
-
-
-/**
- * @brief register value
- */
-
-
-#endif // __GC0308_REG_REGS_H__

+ 0 - 31
code/components/esp32-camera-master/sensors/private_include/gc032a.h

@@ -1,31 +0,0 @@
-/*
- *
- * GC032A driver.
- *
- */
-#ifndef __GC032A_H__
-#define __GC032A_H__
-
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int gc032a_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int gc032a_init(sensor_t *sensor);
-
-#endif // __GC032A_H__

+ 0 - 82
code/components/esp32-camera-master/sensors/private_include/gc032a_regs.h

@@ -1,82 +0,0 @@
-/*
- * GC032A register definitions.
- */
-#ifndef __GC032A_REG_REGS_H__
-#define __GC032A_REG_REGS_H__
-
-#define SENSOR_ID_HIGH 0XF0
-#define SENSOR_ID_LOW 0XF1
-#define PAD_VB_HIZ_MODE 0XF2
-#define SYNC_OUTPUT 0XF3
-#define I2C_CONFIG 0XF4
-#define PLL_MODE1 0XF7
-#define PLL_MODE2 0XF8
-#define CM_MODE 0XF9
-#define ISP_DIV_MODE 0XFA
-#define I2C_DEVICE_ID 0XFB
-#define ANALOG_PWC 0XFC
-#define ISP_DIV_MODE2 0XFD
-#define RESET_RELATED   0XFE    // Bit[7]: Software reset 
-                                // Bit[6]: cm reset 
-                                // Bit[5]: spi reset 
-                                // Bit[4]: CISCTL_restart_n
-                                // Bit[3]: PLL_rst
-                                // Bit[2:0]: page select
-                                //  000:page0
-                                //  001:page1
-                                //  010:page2
-                                //  011:page3
-
-//----page0-----------------------------
-#define P0_EXPOSURE_HIGH 0X03
-#define P0_EXPOSURE_LOW 0X04
-#define P0_HB_HIGH 0X05
-#define P0_HB_LOW 0X06
-#define P0_VB_HIGH 0X07
-#define P0_VB_LOW 0X08
-#define P0_ROW_START_HIGH 0X09
-#define P0_ROW_START_LOW 0X0A
-#define P0_COLUMN_START_HIGH 0X0B
-#define P0_COLUMN_START_LOW 0X0C
-#define P0_WINDOW_HEIGHT_HIGH 0X0D
-#define P0_WINDOW_HEIGHT_LOW 0X0E
-#define P0_WINDOW_WIDTH_HIGH 0X0F
-#define P0_WINDOW_WIDTH_LOW 0X10
-#define P0_SH_DELAY 0X11
-#define P0_VS_ST 0X12
-#define P0_VS_ET 0X13
-#define P0_CISCTL_MODE1 0X17
-
-#define P0_BLOCK_ENABLE_1 0X40
-#define P0_AAAA_ENABLE 0X42
-#define P0_SPECIAL_EFFECT 0X43
-#define P0_SYNC_MODE 0X46
-#define P0_GAIN_CODE 0X48
-#define P0_DEBUG_MODE2 0X4C
-#define P0_WIN_MODE 0X50
-#define P0_OUT_WIN_Y1_HIGH 0X51
-#define P0_OUT_WIN_Y1_LOW 0X52
-#define P0_OUT_WIN_X1_HIGH 0X53
-#define P0_OUT_WIN_X1_LOW 0X54
-#define P0_OUT_WIN_HEIGHT_HIGH 0X55
-#define P0_OUT_WIN_HEIGHT_LOW 0X56
-#define P0_OUT_WIN_WIDTH_HIGH 0X57
-#define P0_OUT_WIN_WIDTH_LOW 0X58
-
-#define P0_GLOBAL_SATURATION 0XD0
-#define P0_SATURATION_CB 0XD1
-#define P0_SATURATION_CR 0XD2
-#define P0_LUMA_CONTRAST 0XD3
-#define P0_CONTRAST_CENTER 0XD4
-#define P0_LUMA_OFFSET 0XD5
-#define P0_FIXED_CB 0XDA
-#define P0_FIXED_CR 0XDB
-
-//----page3-----------------------------
-#define P3_IMAGE_WIDTH_LOW 0X5B
-#define P3_IMAGE_WIDTH_HIGH 0X5C
-#define P3_IMAGE_HEIGHT_LOW 0X5D
-#define P3_IMAGE_HEIGHT_HIGH 0X5E
-
-
-#endif //__GC032A_REG_REGS_H__

+ 0 - 401
code/components/esp32-camera-master/sensors/private_include/gc032a_settings.h

@@ -1,401 +0,0 @@
-#ifndef _GC032A_SETTINGS_H_
-#define _GC032A_SETTINGS_H_
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "esp_attr.h"
-#include "gc032a_regs.h"
-
-
-#define REG_DLY 0xffff
-#define REGLIST_TAIL 0x0000
-
-
-/*
- * The default register settings, as obtained from OmniVision.  There
- * is really no making sense of most of these - lots of "reserved" values
- * and such.
- *
- */
-static const uint16_t gc032a_default_regs[][2] = {
-    /*System*/
-    {0xf3, 0xff},
-    {0xf5, 0x06},
-    {0xf7, 0x01},
-    {0xf8, 0x03},
-    {0xf9, 0xce},
-    {0xfa, 0x00},
-    {0xfc, 0x02},
-    {0xfe, 0x02},
-    {0x81, 0x03},
-
-    {0xfe, 0x00},
-    {0x77, 0x64},
-    {0x78, 0x40},
-    {0x79, 0x60},
-    /*ANALOG & CISCTL*/
-    {0xfe, 0x00},
-    {0x03, 0x01},
-    {0x04, 0xce},
-    {0x05, 0x01},
-    {0x06, 0xad},
-    {0x07, 0x00},
-    {0x08, 0x10},
-    {0x0a, 0x00},
-    {0x0c, 0x00},
-    {0x0d, 0x01},
-    {0x0e, 0xe8}, // height 488
-    {0x0f, 0x02},
-    {0x10, 0x88}, // width 648
-    {0x17, 0x54},
-    {0x19, 0x08},
-    {0x1a, 0x0a},
-    {0x1f, 0x40},
-    {0x20, 0x30},
-    {0x2e, 0x80},
-    {0x2f, 0x2b},
-    {0x30, 0x1a},
-    {0xfe, 0x02},
-    {0x03, 0x02},
-    {0x05, 0xd7},
-    {0x06, 0x60},
-    {0x08, 0x80},
-    {0x12, 0x89},
-
-    /*blk*/
-    {0xfe, 0x00},
-    {0x18, 0x02},
-    {0xfe, 0x02},
-    {0x40, 0x22},
-    {0x45, 0x00},
-    {0x46, 0x00},
-    {0x49, 0x20},
-    {0x4b, 0x3c},
-    {0x50, 0x20},
-    {0x42, 0x10},
-
-    /*isp*/
-    {0xfe, 0x01},
-    {0x0a, 0xc5},
-    {0x45, 0x00},
-    {0xfe, 0x00},
-    {0x40, 0xff},
-    {0x41, 0x25},
-    {0x42, 0xcf},
-    {0x43, 0x10},
-    {0x44, 0x83},
-    {0x46, 0x23},
-    {0x49, 0x03},
-    {0x52, 0x02},
-    {0x54, 0x00},
-    {0xfe, 0x02},
-    {0x22, 0xf6},
-
-    /*Shading*/
-    {0xfe, 0x01},
-    {0xc1, 0x38},
-    {0xc2, 0x4c},
-    {0xc3, 0x00},
-    {0xc4, 0x32},
-    {0xc5, 0x24},
-    {0xc6, 0x16},
-    {0xc7, 0x08},
-    {0xc8, 0x08},
-    {0xc9, 0x00},
-    {0xca, 0x20},
-    {0xdc, 0x8a},
-    {0xdd, 0xa0},
-    {0xde, 0xa6},
-    {0xdf, 0x75},
-
-    /*AWB*/
-    {0xfe, 0x01},
-    {0x7c, 0x09},
-    {0x65, 0x06},
-    {0x7c, 0x08},
-    {0x56, 0xf4},
-    {0x66, 0x0f},
-    {0x67, 0x84},
-    {0x6b, 0x80},
-    {0x6d, 0x12},
-    {0x6e, 0xb0},
-    {0x86, 0x00},
-    {0x87, 0x00},
-    {0x88, 0x00},
-    {0x89, 0x00},
-    {0x8a, 0x00},
-    {0x8b, 0x00},
-    {0x8c, 0x00},
-    {0x8d, 0x00},
-    {0x8e, 0x00},
-    {0x8f, 0x00},
-    {0x90, 0x00},
-    {0x91, 0x00},
-    {0x92, 0xf4},
-    {0x93, 0xd5},
-    {0x94, 0x50},
-    {0x95, 0x0f},
-    {0x96, 0xf4},
-    {0x97, 0x2d},
-    {0x98, 0x0f},
-    {0x99, 0xa6},
-    {0x9a, 0x2d},
-    {0x9b, 0x0f},
-    {0x9c, 0x59},
-    {0x9d, 0x2d},
-    {0x9e, 0xaa},
-    {0x9f, 0x67},
-    {0xa0, 0x59},
-    {0xa1, 0x00},
-    {0xa2, 0x00},
-    {0xa3, 0x0a},
-    {0xa4, 0x00},
-    {0xa5, 0x00},
-    {0xa6, 0xd4},
-    {0xa7, 0x9f},
-    {0xa8, 0x55},
-    {0xa9, 0xd4},
-    {0xaa, 0x9f},
-    {0xab, 0xac},
-    {0xac, 0x9f},
-    {0xad, 0x55},
-    {0xae, 0xd4},
-    {0xaf, 0xac},
-    {0xb0, 0xd4},
-    {0xb1, 0xa3},
-    {0xb2, 0x55},
-    {0xb3, 0xd4},
-    {0xb4, 0xac},
-    {0xb5, 0x00},
-    {0xb6, 0x00},
-    {0xb7, 0x05},
-    {0xb8, 0xd6},
-    {0xb9, 0x8c},
-
-    /*CC*/
-    {0xfe, 0x01},
-    {0xd0, 0x40},
-    {0xd1, 0xf8},
-    {0xd2, 0x00},
-    {0xd3, 0xfa},
-    {0xd4, 0x45},
-    {0xd5, 0x02},
-
-    {0xd6, 0x30},
-    {0xd7, 0xfa},
-    {0xd8, 0x08},
-    {0xd9, 0x08},
-    {0xda, 0x58},
-    {0xdb, 0x02},
-    {0xfe, 0x00},
-
-    /*Gamma*/
-    {0xfe, 0x00},
-    {0xba, 0x00},
-    {0xbb, 0x04},
-    {0xbc, 0x0a},
-    {0xbd, 0x0e},
-    {0xbe, 0x22},
-    {0xbf, 0x30},
-    {0xc0, 0x3d},
-    {0xc1, 0x4a},
-    {0xc2, 0x5d},
-    {0xc3, 0x6b},
-    {0xc4, 0x7a},
-    {0xc5, 0x85},
-    {0xc6, 0x90},
-    {0xc7, 0xa5},
-    {0xc8, 0xb5},
-    {0xc9, 0xc2},
-    {0xca, 0xcc},
-    {0xcb, 0xd5},
-    {0xcc, 0xde},
-    {0xcd, 0xea},
-    {0xce, 0xf5},
-    {0xcf, 0xff},
-
-    /*Auto Gamma*/
-    {0xfe, 0x00},
-    {0x5a, 0x08},
-    {0x5b, 0x0f},
-    {0x5c, 0x15},
-    {0x5d, 0x1c},
-    {0x5e, 0x28},
-    {0x5f, 0x36},
-    {0x60, 0x45},
-    {0x61, 0x51},
-    {0x62, 0x6a},
-    {0x63, 0x7d},
-    {0x64, 0x8d},
-    {0x65, 0x98},
-    {0x66, 0xa2},
-    {0x67, 0xb5},
-    {0x68, 0xc3},
-    {0x69, 0xcd},
-    {0x6a, 0xd4},
-    {0x6b, 0xdc},
-    {0x6c, 0xe3},
-    {0x6d, 0xf0},
-    {0x6e, 0xf9},
-    {0x6f, 0xff},
-
-    /*Gain*/
-    {0xfe, 0x00},
-    {0x70, 0x50},
-
-    /*AEC*/
-    {0xfe, 0x00},
-    {0x4f, 0x01},
-    {0xfe, 0x01},
-    {0x0d, 0x00},
-    {0x12, 0xa0},
-    {0x13, 0x3a},
-    {0x44, 0x04},
-    {0x1f, 0x30},
-    {0x20, 0x40},
-    {0x26, 0x9a},
-    {0x3e, 0x20},
-    {0x3f, 0x2d},
-    {0x40, 0x40},
-    {0x41, 0x5b},
-    {0x42, 0x82},
-    {0x43, 0xb7},
-    {0x04, 0x0a},
-    {0x02, 0x79},
-    {0x03, 0xc0},
-
-    /*measure window*/
-    {0xfe, 0x01},
-    {0xcc, 0x08},
-    {0xcd, 0x08},
-    {0xce, 0xa4},
-    {0xcf, 0xec},
-
-    /*DNDD*/
-    {0xfe, 0x00},
-    {0x81, 0xb8},
-    {0x82, 0x12},
-    {0x83, 0x0a},
-    {0x84, 0x01},
-    {0x86, 0x50},
-    {0x87, 0x18},
-    {0x88, 0x10},
-    {0x89, 0x70},
-    {0x8a, 0x20},
-    {0x8b, 0x10},
-    {0x8c, 0x08},
-    {0x8d, 0x0a},
-
-    /*Intpee*/
-    {0xfe, 0x00},
-    {0x8f, 0xaa},
-    {0x90, 0x9c},
-    {0x91, 0x52},
-    {0x92, 0x03},
-    {0x93, 0x03},
-    {0x94, 0x08},
-    {0x95, 0x44},
-    {0x97, 0x00},
-    {0x98, 0x00},
-
-    /*ASDE*/
-    {0xfe, 0x00},
-    {0xa1, 0x30},
-    {0xa2, 0x41},
-    {0xa4, 0x30},
-    {0xa5, 0x20},
-    {0xaa, 0x30},
-    {0xac, 0x32},
-
-    /*YCP*/
-    {0xfe, 0x00},
-    {0xd1, 0x3c},
-    {0xd2, 0x3c},
-    {0xd3, 0x38},
-    {0xd6, 0xf4},
-    {0xd7, 0x1d},
-    {0xdd, 0x73},
-    {0xde, 0x84},
-
-    /*Banding*/
-    {0xfe, 0x00},
-    {0x05, 0x01},
-    {0x06, 0xad},
-    {0x07, 0x00},
-    {0x08, 0x10},
-
-    {0xfe, 0x01},
-    {0x25, 0x00},
-    {0x26, 0x9a},
-
-    {0x27, 0x01},
-    {0x28, 0xce},
-    {0x29, 0x02},
-    {0x2a, 0x68},
-    {0x2b, 0x02},
-    {0x2c, 0x68},
-    {0x2d, 0x07},
-    {0x2e, 0xd2},
-    {0x2f, 0x0b},
-    {0x30, 0x6e},
-    {0x31, 0x0e},
-    {0x32, 0x70},
-    {0x33, 0x12},
-    {0x34, 0x0c},
-    {0x3c, 0x30},
-
-    /*Analog&Cisctl*/
-    {0xfe, 0x00},
-    {0x05, 0x01},
-    {0x06, 0xa0},
-    {0x07, 0x00},
-    {0x08, 0x20},
-    {0x0a, 0x78},
-    {0x0c, 0xa0},
-    {0x0d, 0x00}, //window_height [8]
-    {0x0e, 0xf8}, //window_height [7:0] 248
-    {0x0f, 0x01}, //window_width [9:8]
-    {0x10, 0x48}, //window_width [7:0]  328
-
-    {0x55, 0x00},
-    {0x56, 0xf0}, // 240
-    {0x57, 0x01},
-    {0x58, 0x40}, // 320
-
-    /*SPI*/
-    {0xfe, 0x03},
-    {0x5b, 0x40},
-    {0x5c, 0x01},
-    {0x5d, 0xf0},
-    {0x5e, 0x00},
-
-    /*AEC*/
-    {0xfe, 0x01},
-    {0x25, 0x00}, //step
-    {0x26, 0x63},
-    {0x27, 0x01},
-    {0x28, 0x29},
-    {0x29, 0x01},
-    {0x2a, 0x29},
-    {0x2b, 0x01},
-    {0x2c, 0x29},
-    {0x2d, 0x01},
-    {0x2e, 0x29},
-    {0x2f, 0x01},
-    {0x30, 0x29},
-    {0x31, 0x01},
-    {0x32, 0x29},
-    {0x33, 0x01},
-    {0x34, 0x29},
-    {0x3c, 0x00},
-
-    /*measure window*/
-    {0xfe, 0x01},
-    {0xcc, 0x04},
-    {0xcd, 0x04},
-    {0xce, 0x72},
-    {0xcf, 0x52},
-    {REGLIST_TAIL, 0x00},
-};
-
-#endif

+ 0 - 27
code/components/esp32-camera-master/sensors/private_include/gc2145.h

@@ -1,27 +0,0 @@
-
-#ifndef __GC2145_H__
-#define __GC2145_H__
-
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int gc2145_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int gc2145_init(sensor_t *sensor);
-
-#endif // __GC2145_H__

+ 0 - 85
code/components/esp32-camera-master/sensors/private_include/gc2145_regs.h

@@ -1,85 +0,0 @@
-/*
- * GC2145 register definitions.
- */
-#ifndef __GC2145_REG_REGS_H__
-#define __GC2145_REG_REGS_H__
-
-#define CHIP_ID_HIGH 0XF0
-#define CHIP_ID_LOW 0XF1
-#define PLL_MODE1 0XF7
-#define PLL_MODE2 0XF8
-#define CM_MODE 0XF9
-#define CLK_DIV_MODE 0XFA
-#define RESET_RELATED   0xfe    // Bit[7]: Software reset 
-                                // Bit[6]: cm reset 
-                                // Bit[5]: mipi reset 
-                                // Bit[4]: CISCTL_restart_n
-                                // Bit[3]: NA
-                                // Bit[2:0]: page select
-                                //  000:page0
-                                //  001:page1
-                                //  010:page2
-                                //  011:page3
-
-//-page0----------------
-
-#define P0_EXPOSURE_HIGH 0X03
-#define P0_EXPOSURE_LOW 0X04
-#define P0_HB_HIGH 0X05
-#define P0_HB_LOW 0X06
-#define P0_VB_HIGH 0X07
-#define P0_VB_LOW 0X08
-#define P0_ROW_START_HIGH 0X09
-#define P0_ROW_START_LOW 0X0A
-#define P0_COL_START_HIGH 0X0B
-#define P0_COL_START_LOW 0X0C
-
-#define P0_WIN_HEIGHT_HIGH 0X0D
-#define P0_WIN_HEIGHT_LOW 0X0E
-#define P0_WIN_WIDTH_HIGH 0X0F
-#define P0_WIN_WIDTH_LOW 0X10
-#define P0_ANALOG_MODE1 0X17
-#define P0_ANALOG_MODE2 0X18
-
-#define P0_SPECIAL_EFFECT 0X83
-#define P0_OUTPUT_FORMAT 0x84 // Format select
-                                // Bit[7]:YUV420 row switch
-                                // Bit[6]:YUV420 col switch
-                                // Bit[7]:YUV420_legacy
-                                // Bit[4:0]:output data mode
-                                //  5’h00 Cb Y Cr Y
-                                //  5’h01 Cr Y Cb Y
-                                //  5’h02 Y Cb Y Cr
-                                //  5’h03 Y Cr Y Cb
-                                //  5’h04 LSC bypass, C/Y
-                                //  5’h05 LSC bypass, Y/C
-                                //  5’h06 RGB 565
-                                //  5’h0f bypass 10bits
-                                //  5’h17 switch odd/even column /row to controls output Bayer pattern
-                                //    00 RGBG
-                                //    01 RGGB
-                                //    10 BGGR
-                                //    11 GBRG
-                                //  5'h18 DNDD out mode
-                                //  5'h19 LSC out mode
-                                //  5;h1b EEINTP out mode
-#define P0_FRAME_START 0X85
-#define P0_SYNC_MODE 0X86
-#define P0_MODULE_GATING 0X88
-#define P0_BYPASS_MODE 0X89
-#define P0_DEBUG_MODE2 0X8C
-#define P0_DEBUG_MODE3 0X8D
-#define P0_CROP_ENABLE 0X90
-#define P0_OUT_WIN_Y1_HIGH 0X91
-#define P0_OUT_WIN_Y1_LOW 0X92
-#define P0_OUT_WIN_X1_HIGH 0X93
-#define P0_OUT_WIN_X1_LOW 0X94
-#define P0_OUT_WIN_HEIGHT_HIGH 0X95
-#define P0_OUT_WIN_HEIGHT_LOW 0X96
-#define P0_OUT_WIN_WIDTH_HIGH 0X97
-#define P0_OUT_WIN_WIDTH_LOW 0X98
-#define P0_SUBSAMPLE 0X99
-#define P0_SUBSAMPLE_MODE 0X9A
-
-
-#endif // __GC2145_REG_REGS_H__

+ 0 - 719
code/components/esp32-camera-master/sensors/private_include/gc2145_settings.h

@@ -1,719 +0,0 @@
-
-#include <stdint.h>
-
-#define REG_DLY 0xffff
-#define REGLIST_TAIL 0x0000 /* Array end token */
-
-static const uint16_t gc2145_default_init_regs[][2] = {
-    {0xfe, 0xf0},
-    {0xfe, 0xf0},
-    {0xfe, 0xf0},
-
-    {0xfc, 0x06},
-    {0xf6, 0x00},
-
-    {0xf7, 0x1d}, //37 //17 //37 //1d//05
-    {0xf8, 0x83}, //87 //83 //82
-    {0xfa, 0x00},
-    {0xf9, 0xfe}, //ff
-    {0xfd, 0x00},
-    {0xc2, 0x00},
-    {0xf2, 0x0f},
-//////////////////////////////////////////////////////
-////////////////////  Analog & Cisctl ////////////////
-//////////////////////////////////////////////////////
-    {0xfe, 0x00},
-
-    {0x03, 0x04}, //exp time
-    {0x04, 0x62}, //exp time
-
-    {0x05, 0x01}, //00 //hb[11:8]
-    {0x06, 0x3b}, //0b //hb
-
-    {0x09, 0x00}, //row start
-    {0x0a, 0x00}, //
-    {0x0b, 0x00}, //col start
-    {0x0c, 0x00},
-    {0x0d, 0x04}, //height
-    {0x0e, 0xc0},
-    {0x0f, 0x06}, //width
-    {0x10, 0x52},
-
-    {0x12, 0x2e}, //sh_delay 太短 YUV出图异常
-    {0x17, 0x14}, //CISCTL Mode1 [1:0]mirror flip
-    {0x18, 0x22}, //sdark mode
-    {0x19, 0x0f}, // AD pipe number
-    {0x1a, 0x01}, //AD manual switch mode
-
-    {0x1b, 0x4b}, //48 restg Width,SH width
-    {0x1c, 0x07}, //06  帧率快后,横条纹 //12 //TX Width,Space Width
-    {0x1d, 0x10}, //double reset
-    {0x1e, 0x88}, //90//98 //fix  竖线//Analog Mode1,TX high,Coln_r
-    {0x1f, 0x78}, //78 //38 //18 //Analog Mode2,txlow
-    {0x20, 0x03}, //07 //Analog Mode3,comv,ad_clk mode
-    {0x21, 0x40}, //10//20//40 //fix 灯管横条纹
-    {0x22, 0xa0}, //d0//f0 //a2 //Vref vpix  FPN严重
-    {0x24, 0x1e},
-    {0x25, 0x01}, //col sel
-    {0x26, 0x10}, //Analog PGA gain1
-    {0x2d, 0x60}, //40//40 //txl drv mode
-    {0x30, 0x01}, //Analog Mode4
-    {0x31, 0x90}, //b0//70 // Analog Mode7 [7:5]rsgh_r灯管横条纹[4:3]isp_g
-    {0x33, 0x06}, //03//02//01 //EQ_hstart_width
-    {0x34, 0x01},
-//
-///////////////////////////////////////////////////
-////////////////////  ISP reg  //////////////////////
-//////////////////////////////////////////////////////
-    {0x80, 0xff}, //outdoor gamma_en, GAMMA_en, CC_en, EE_en, INTP_en, DN_en, DD_en,LSC_en
-    {0x81, 0x24}, //26//24 //BLK dither mode, ll_y_en ,skin_en, edge SA, new_skin_mode, autogray_en,ll_gamma_en,BFF test image
-    {0x82, 0xfa}, //FA //auto_SA, auto_EE, auto_DN, auto_DD, auto_LSC, ABS_en, AWB_en, NA
-    {0x83, 0x00}, //special_effect
-    {0x84, 0x02}, //output format
-    {0x86, 0x03}, //c2 //46 //c2 //sync mode
-    {0x88, 0x03}, //[1]ctl_auto_gating [0]out_auto_gating
-    {0x89, 0x03}, //bypass disable
-    {0x85, 0x30}, //60//frame start cut
-    {0x8a, 0x00}, //ISP_quiet_mode,close aaa pclk,BLK gate mode,exception,close first pipe clock,close dndd clock,close intp clock,DIV_gatedclk_en
-    {0x8b, 0x00}, //[7:6]BFF_gate_mode,[5]BLK switch gain,[4]protect exp,[3:2]pipe gate mode,[1]not split sram,[0]dark current update
-
-    {0xb0, 0x55}, //60 //global gain
-    {0xc3, 0x00}, //[7:4]auto_exp_gamma_th1[11:8],[3:0]auto_exp_gamma_th2[11:8]
-    {0xc4, 0x80}, //auto_exp_gamma_th1[7:0] into
-    {0xc5, 0x90}, //auto_exp_gamma_th2[7:0] out //outdoor gamma
-    {0xc6, 0x38}, //auto_gamma_th1
-    {0xc7, 0x40}, //auto_gamma_th2
-
-    {0xec, 0x06}, //measure window
-    {0xed, 0x04},
-    {0xee, 0x60}, //16  col
-    {0xef, 0x90}, //8  row
-
-    {0xb6, 0x01}, //[0]aec en
-
-    {0x90, 0x01}, //crop
-    {0x91, 0x00},
-    {0x92, 0x00},
-    {0x93, 0x00},
-    {0x94, 0x00}, //08
-    {0x95, 0x04},
-    {0x96, 0xb0},
-    {0x97, 0x06},
-    {0x98, 0x40},
-
-///////////////////////////////////////////////
-///////////  BLK ////////////////////////
-///////////////////////////////////////////////
-    {0x18, 0x02},
-    {0x40, 0x42}, //2b //27
-    {0x41, 0x00}, //80 //dark row sel
-    {0x43, 0x54}, //[7:4]BLK start not smooth  [3:0]output start frame
-
-    {0x5e, 0x00}, //00//10 //18
-    {0x5f, 0x00}, //00//10 //18
-    {0x60, 0x00}, //00//10 //18
-    {0x61, 0x00}, //00///10 //18
-    {0x62, 0x00}, //00//10 //18
-    {0x63, 0x00}, //00//10 //18
-    {0x64, 0x00}, //00/10 //18
-    {0x65, 0x00}, //00//10 //18
-    {0x66, 0x20}, //1e
-    {0x67, 0x20}, //1e
-    {0x68, 0x20}, //1e
-    {0x69, 0x20}, //1e
-
-
-    {0x76, 0x00}, //0f
-
-    {0x6a, 0x00}, //06
-    {0x6b, 0x00}, //06
-    {0x6c, 0x3e}, //06
-    {0x6d, 0x3e}, //06
-    {0x6e, 0x3f}, //06
-    {0x6f, 0x3f}, //06
-    {0x70, 0x00}, //06
-    {0x71, 0x00}, //06 //manual offset
-
-    {0x76, 0x00}, //1f//add offset
-    {0x72, 0xf0}, //[7:4]BLK DD th [3:0]BLK various th
-    {0x7e, 0x3c}, //ndark
-    {0x7f, 0x00},
-
-    {0xfe, 0x02},
-    {0x48, 0x15},
-    {0x49, 0x00}, //04//04 //ASDE OFFSET SLOPE
-    {0x4b, 0x0b}, //ASDE y OFFSET SLOPE
-    {0xfe, 0x00},
-
-///////////////////////////////////////////////
-/////////// AEC ////////////////////////
-///////////////////////////////////////////////
-    {0xfe, 0x01},
-
-    {0x01, 0x04}, //AEC X1
-    {0x02, 0xc0}, //AEC X2
-    {0x03, 0x04}, //AEC Y1
-    {0x04, 0x90}, //AEC Y2
-    {0x05, 0x30}, //20 //AEC center X1
-    {0x06, 0x90}, //40 //AEC center X2
-    {0x07, 0x20}, //30 //AEC center Y1
-    {0x08, 0x70}, //60 //AEC center Y2
-
-    {0x09, 0x00}, //AEC show mode
-    {0x0a, 0xc2}, //[7]col gain enable
-    {0x0b, 0x11}, //AEC every N
-    {0x0c, 0x10}, //AEC_mode3 center weight
-    {0x13, 0x40}, //2a //AEC Y target
-    {0x17, 0x00}, //AEC ignore mode
-    {0x1c, 0x11}, //
-    {0x1e, 0x61}, //
-    {0x1f, 0x30}, //40//50 //max pre gain
-    {0x20, 0x40}, //60//40 //max post gain
-    {0x22, 0x80}, //AEC outdoor THD
-    {0x23, 0x20}, //target_Y_low_limit
-    {0xfe, 0x02},
-    {0x0f, 0x04}, //05
-    {0xfe, 0x01},
-
-    {0x12, 0x35}, //35 //[5:4]group_size [3]slope_disable [2]outdoor_enable [0]histogram_enable
-    {0x15, 0x50}, //target_Y_high_limit
-    {0x10, 0x31}, //num_thd_high
-    {0x3e, 0x28}, //num_thd_low
-    {0x3f, 0xe0}, //luma_thd
-    {0x40, 0x20}, //luma_slope
-    {0x41, 0x0f}, //color_diff
-
-    {0xfe, 0x02},
-    {0x0f, 0x05}, //max_col_level
-///////////////////////////
-////// INTPEE /////////////
-///////////////////////////
-    {0xfe, 0x02}, //page2
-    {0x90, 0x6c}, //ac //eeintp mode1
-    {0x91, 0x03}, //02 ////eeintp mode2
-    {0x92, 0xc8}, //44 //low criteria for direction
-    {0x94, 0x66},
-    {0x95, 0xb5},
-    {0x97, 0x64}, //78 ////edge effect
-    {0xa2, 0x11}, //fix direction
-    {0xfe, 0x00},
-
-/////////////////////////////
-//////// DNDD///////////////
-/////////////////////////////
-    {0xfe, 0x02},
-    {0x80, 0xc1}, //c1 //[7]share mode [6]skin mode  [5]is 5x5 mode [1:0]noise value select 0:2  1:2.5  2:3  3:4
-    {0x81, 0x08}, //
-    {0x82, 0x08}, //signal a 0.6
-    {0x83, 0x08}, //04 //signal b 2.5
-
-    {0x84, 0x0a}, //10 //05 dark_DD_TH
-    {0x86, 0xf0}, //a0 Y_value_dd_th2
-    {0x87, 0x50}, //90 Y_value_dd_th3
-    {0x88, 0x15}, //60 Y_value_dd_th4
-
-    {0x89, 0x50}, //80  // asde th2
-    {0x8a, 0x30}, //60  // asde th3
-    {0x8b, 0x10}, //30  // asde th4
-
-/////////////////////////////////////////////////
-///////////// ASDE ////////////////////////
-/////////////////////////////////////////////////
-    {0xfe, 0x01}, //page 1
-    {0x21, 0x14}, //luma_value_div_sel(分频,与0xef呈2倍关系,增大1,0xef的值减小1倍)
-//ff  ef  luma_value read_only
-
-    {0xfe, 0x02}, //page2
-    {0xa3, 0x40}, //ASDE_low_luma_value_LSC_th_H
-    {0xa4, 0x20}, //ASDE_low_luma_value_LSC_th_L
-
-    {0xa5, 0x40}, //80 //ASDE_LSC_gain_dec_slope_H
-    {0xa6, 0x80}, // 80 //ASDE_LSC_gain_dec_slope_L
-//ff  a7  ASDE_LSC_gain_dec  //read only
-
-    {0xab, 0x40}, //50 //ASDE_low_luma_value_OT_th
-
-    {0xae, 0x0c}, //[3]EE1_effect_inc_or_dec_high,[2]EE2_effect_inc_or_dec_high,
-    //[1]EE1_effect_inc_or_dec_low,[0]EE2_effect_inc_or_dec_low,  1:inc  0:dec
-
-    {0xb3, 0x34}, //44 //ASDE_EE1_effect_slope_low,ASDE_EE2_effect_slope_low
-    {0xb4, 0x44}, //12 //ASDE_EE1_effect_slope_high,ASDE_EE2_effect_slope_high
-
-    {0xb6, 0x38}, //40//40 //ASDE_auto_saturation_dec_slope
-    {0xb7, 0x02}, //04 //ASDE_sub_saturation_slope
-    {0xb9, 0x30}, //[7:0]ASDE_auto_saturation_low_limit
-    {0x3c, 0x08}, //[3:0]auto gray_dec_slope
-    {0x3d, 0x30}, //[7:0]auto gray_dec_th
-
-
-    {0x4b, 0x0d}, //y offset slope
-    {0x4c, 0x20}, //y offset limit
-
-    {0xfe, 0x00},
-//
-///////////////////gamma1////////////////////
-////Gamma
-    {0xfe, 0x02},
-    {0x10, 0x10},
-    {0x11, 0x15},
-    {0x12, 0x1a},
-    {0x13, 0x1f},
-    {0x14, 0x2c},
-    {0x15, 0x39},
-    {0x16, 0x45},
-    {0x17, 0x54},
-    {0x18, 0x69},
-    {0x19, 0x7d},
-    {0x1a, 0x8f},
-    {0x1b, 0x9d},
-    {0x1c, 0xa9},
-    {0x1d, 0xbd},
-    {0x1e, 0xcd},
-    {0x1f, 0xd9},
-    {0x20, 0xe3},
-    {0x21, 0xea},
-    {0x22, 0xef},
-    {0x23, 0xf5},
-    {0x24, 0xf9},
-    {0x25, 0xff},
-
-/////auto gamma/////
-    {0xfe, 0x02},
-    {0x26, 0x0f},
-    {0x27, 0x14},
-    {0x28, 0x19},
-    {0x29, 0x1e},
-    {0x2a, 0x27},
-    {0x2b, 0x33},
-    {0x2c, 0x3b},
-    {0x2d, 0x45},
-    {0x2e, 0x59},
-    {0x2f, 0x69},
-    {0x30, 0x7c},
-    {0x31, 0x89},
-    {0x32, 0x98},
-    {0x33, 0xae},
-    {0x34, 0xc0},
-    {0x35, 0xcf},
-    {0x36, 0xda},
-    {0x37, 0xe2},
-    {0x38, 0xe9},
-    {0x39, 0xf3},
-    {0x3a, 0xf9},
-    {0x3b, 0xff},
-
-///////////////////////////////////////////////
-///////////   YCP       ///////////////////////
-///////////////////////////////////////////////
-    {0xfe, 0x02},
-    {0xd1, 0x30}, //32 //
-    {0xd2, 0x30}, //32 //
-    {0xd3, 0x45},
-    {0xdd, 0x14}, //edge sa
-    {0xde, 0x86}, //asde auto gray
-    {0xed, 0x01}, //
-    {0xee, 0x28},
-    {0xef, 0x30},
-    {0xd8, 0xd8}, //autogray protecy
-
-////////////////////////////
-//////// LSC  0.8///////////////
-////////////////////////////
-    {0xfe, 0x01},
-    {0xa1, 0x80}, // center_row
-    {0xa2, 0x80}, // center_col
-    {0xa4, 0x00}, // sign of b1
-    {0xa5, 0x00}, // sign of b1
-    {0xa6, 0x70}, // sign of b4
-    {0xa7, 0x00}, // sign of b4
-    {0xa8, 0x77}, // sign of b22
-    {0xa9, 0x77}, // sign of b22
-    {0xaa, 0x1f}, // Q1_b1 of R
-    {0xab, 0x0d}, // Q1_b1 of G
-    {0xac, 0x19}, // Q1_b1 of B
-    {0xad, 0x24}, // Q2_b1 of R
-    {0xae, 0x0e}, // Q2_b1 of G
-    {0xaf, 0x1d}, // Q2_b1 of B
-    {0xb0, 0x12}, // Q3_b1 of R
-    {0xb1, 0x0c}, // Q3_b1 of G
-    {0xb2, 0x06}, // Q3_b1 of B
-    {0xb3, 0x13}, // Q4_b1 of R
-    {0xb4, 0x10}, // Q4_b1 of G
-    {0xb5, 0x0c}, // Q4_b1 of B
-    {0xb6, 0x6a}, // right_b2 of R
-    {0xb7, 0x46}, // right_b2 of G
-    {0xb8, 0x40}, // right_b2 of B
-    {0xb9, 0x0b}, // right_b4 of R
-    {0xba, 0x04}, // right_b4 of G
-    {0xbb, 0x00}, // right_b4 of B
-    {0xbc, 0x53}, // left_b2 of R
-    {0xbd, 0x37}, // left_b2 of G
-    {0xbe, 0x2d}, // left_b2 of B
-    {0xbf, 0x0a}, // left_b4 of R
-    {0xc0, 0x0a}, // left_b4 of G
-    {0xc1, 0x14}, // left_b4 of B
-    {0xc2, 0x34}, // up_b2 of R
-    {0xc3, 0x22}, // up_b2 of G
-    {0xc4, 0x18}, // up_b2 of B
-    {0xc5, 0x23}, // up_b4 of R
-    {0xc6, 0x0f}, // up_b4 of G
-    {0xc7, 0x3c}, // up_b4 of B
-    {0xc8, 0x20}, // down_b2 of R
-    {0xc9, 0x1f}, // down_b2 of G
-    {0xca, 0x17}, // down_b2 of B
-    {0xcb, 0x2d}, // down_b4 of R
-    {0xcc, 0x12}, // down_b4 of G
-    {0xcd, 0x20}, // down_b4 of B
-    {0xd0, 0x61}, // right_up_b22 of R
-    {0xd1, 0x2f}, // right_up_b22 of G
-    {0xd2, 0x39}, // right_up_b22 of B
-    {0xd3, 0x45}, // right_down_b22 of R
-    {0xd4, 0x2c}, // right_down_b22 of G
-    {0xd5, 0x21}, // right_down_b22 of B
-    {0xd6, 0x64}, // left_up_b22 of R
-    {0xd7, 0x2d}, // left_up_b22 of G
-    {0xd8, 0x30}, // left_up_b22 of B
-    {0xd9, 0x42}, // left_down_b22 of R
-    {0xda, 0x27}, // left_down_b22 of G
-    {0xdb, 0x13}, // left_down_b22 of B
-    {0xfe, 0x00},
-
-/////////////////////////////////////////////////
-/////////////    AWB     ////////////////////////
-/////////////////////////////////////////////////
-    {0xfe, 0x01},
-
-    {0x4f, 0x00},
-    {0x4f, 0x00},
-    {0x4b, 0x01},
-    {0x4f, 0x00},
-
-
-    {0x4c, 0x01},
-    {0x4d, 0x6f},
-    {0x4e, 0x02},
-    {0x4c, 0x01},
-    {0x4d, 0x70},
-
-    {0x4e, 0x02},
-    {0x4c, 0x01},
-    {0x4d, 0x8f},
-    {0x4e, 0x02},
-
-    {0x4c, 0x01},
-    {0x4d, 0x90},
-    {0x4e, 0x02}, //light
-
-
-    {0x4c, 0x01},
-    {0x4d, 0xed},
-    {0x4e, 0x33}, //light
-    {0x4c, 0x01},
-    {0x4d, 0xcd},
-    {0x4e, 0x33}, //light
-    {0x4c, 0x01},
-    {0x4d, 0xec},
-    {0x4e, 0x03}, //light
-
-    {0x4c, 0x01},
-    {0x4d, 0x6c},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0x6d},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0x6e},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0x8c},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0x8d},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0x8e},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xab},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xac},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xad},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xae},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xcb},
-    {0x4e, 0x03},
-
-    {0x4c, 0x01},
-    {0x4d, 0xcc},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xce},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xeb},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xec},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xee},
-    {0x4e, 0x03},
-    {0x4c, 0x02},
-    {0x4d, 0x0c},
-    {0x4e, 0x03},
-    {0x4c, 0x02},
-    {0x4d, 0x0d},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xea},
-    {0x4e, 0x03},
-    {0x4c, 0x01},
-    {0x4d, 0xaf},
-    {0x4e, 0x03}, //dark
-    {0x4c, 0x01},
-    {0x4d, 0xcf},
-    {0x4e, 0x03}, //dark
-
-    {0x4c, 0x01},
-    {0x4d, 0xca},
-    {0x4e, 0x04}, //light
-    {0x4c, 0x02},
-    {0x4d, 0x0b},
-    {0x4e, 0x05}, //light
-    {0x4c, 0x02},
-    {0x4d, 0xc8},
-    {0x4e, 0x06}, //light 100lux
-    {0x4c, 0x02},
-    {0x4d, 0xa8},
-
-    {0x4e, 0x06}, //light
-    {0x4c, 0x02},
-    {0x4d, 0xa9},
-    {0x4e, 0x06}, //light
-
-
-    {0x4c, 0x02},
-    {0x4d, 0x89},
-    {0x4e, 0x06}, //400lux
-    {0x4c, 0x02},
-    {0x4d, 0x69},
-    {0x4e, 0x06}, //f12
-    {0x4c, 0x02},
-    {0x4d, 0x6a},
-    {0x4e, 0x06}, //f12
-    {0x4c, 0x02},
-    {0x4d, 0xc7},
-    {0x4e, 0x07},
-    {0x4c, 0x02},
-    {0x4d, 0xe7},
-    {0x4e, 0x07}, //100lux
-    {0x4c, 0x03},
-    {0x4d, 0x07},
-    {0x4e, 0x07}, //light
-
-    {0x4c, 0x02},
-    {0x4d, 0xe8},
-    {0x4e, 0x07},
-    {0x4c, 0x02},
-    {0x4d, 0xe9},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x08},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x09},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x27},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x28},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x29},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x47},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x48},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x49},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x67},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x68},
-    {0x4e, 0x07},
-    {0x4c, 0x03},
-    {0x4d, 0x69},
-    {0x4e, 0x07},
-
-    {0x4f, 0x01},
-    {0xfe, 0x01},
-    {0x50, 0x80}, //AWB_PRE_mode
-    {0x51, 0xa8}, //AWB_pre_THD_min[7:0]
-    {0x52, 0x57}, //AWB_pre_THD_min[15:8] Dominiate luma 0.25=639c 0.22=57a8
-    {0x53, 0x38}, //AWB_pre_THD_min_MIX[7:0]
-    {0x54, 0xc7}, //AWB_pre_THD_min_MIX[15:8] Mix luma 0.5
-
-    {0x56, 0x0e}, //AWB_tone mode
-    {0x58, 0x08}, //AWB_C_num_sel,AWB_D_num_sel
-    {0x5b, 0x00}, //AWB_mix_mode
-
-    {0x5c, 0x74}, //green_num0[7:0]
-    {0x5d, 0x8b}, //green_num0[15:8] 0.35
-
-    {0x61, 0xd3}, //R2G_stand0
-    {0x62, 0xb5}, //B2G_stand0
-    {0x63, 0x00}, //88//a4 //AWB gray mode [7]enable
-    {0x65, 0x04}, //AWB margin
-
-    {0x67, 0xb2}, //R2G_stand3[7:0]  FF/CWF
-    {0x68, 0xac}, //B2G_stand3[7:0]
-    {0x69, 0x00}, //R2G_stand4[9:8] B2G_stand4[9:8] R2G_stand3[9:8] B2G_stand3[9:8]
-    {0x6a, 0xb2}, //R2G_stand4[7:0]  TL84/TL84&CWF
-    {0x6b, 0xac}, //B2G_stand4[7:0]
-    {0x6c, 0xb2}, //R2G_stand5[7:0]  A
-    {0x6d, 0xac}, //B2G_stand5[7:0]
-    {0x6e, 0x40}, //AWB_skin_weight R2G_stand5[9:8] B2G_stand5[9:8]
-    {0x6f, 0x18}, //AWB_indoor_THD (0x21=17 caculate)
-    {0x73, 0x00}, //AWB_indoor_mode
-
-    {0x70, 0x10}, //AWB low luma TH
-    {0x71, 0xe8}, //AWB outdoor TH
-    {0x72, 0xc0}, //outdoor mode
-    {0x74, 0x01}, //[2:0]AWB skip mode 2x2,4x4,4x8,8x8
-    {0x75, 0x01}, //[1:0]AWB_every_N
-    {0x7f, 0x08}, //[3]gray world frame start
-
-    {0x76, 0x70}, //R limit
-    {0x77, 0x58}, //G limit
-    {0x78, 0xa0}, //d8 //B limit
-
-    {0xfe, 0x00},
-//
-//////////////////////////////////////////
-///////////  CC   ////////////////////////
-//////////////////////////////////////////
-    {0xfe, 0x02},
-
-    {0xc0, 0x01}, //[5:4] CC mode [0]CCT enable
-
-    {0xC1, 0x50}, //D50/D65
-    {0xc2, 0xF9},
-    {0xc3, 0x00}, //0
-    {0xc4, 0xe8}, //e0
-    {0xc5, 0x48},
-    {0xc6, 0xf0},
-
-
-    {0xC7, 0x50},
-    {0xc8, 0xf2},
-    {0xc9, 0x00},
-    {0xcA, 0xE0},
-    {0xcB, 0x45},
-    {0xcC, 0xec},
-
-    {0xCd, 0x45},
-    {0xce, 0xf0},
-    {0xcf, 0x00},
-    {0xe3, 0xf0},
-    {0xe4, 0x45},
-    {0xe5, 0xe8},
-
-
-    {0xfe, 0x00},
-
-    {0xf2, 0x0f},
-
-
-//////////////frame rate   50Hz
-    {0xfe, 0x00},
-
-    {0xf7, 0x1d},
-    {0xf8, 0x84},
-    {0xfa, 0x00},
-
-    {0x05, 0x01}, //hb
-    {0x06, 0x3b},
-    {0x07, 0x01}, //Vb
-    {0x08, 0x0b},
-
-    {0xfe, 0x01},
-    {0x25, 0x01},
-    {0x26, 0x32}, //step
-    {0x27, 0x03}, //8.15fps
-    {0x28, 0x96},
-    {0x29, 0x03}, //8.15fps
-    {0x2a, 0x96},
-    {0x2b, 0x03}, //8.15fps
-    {0x2c, 0x96},
-    {0x2d, 0x04}, //8.15fps
-    {0x2e, 0x62},
-    {0x3c, 0x00},
-    {0xfe, 0x00},
-
-/////////dark  sun//////
-    {0xfe, 0x00},
-    {0x18, 0x22},
-    {0xfe, 0x02},
-    {0x40, 0xbf},
-    {0x46, 0xcf},
-    {0xfe, 0x00},
-
-    {0xfe, 0x00},
-
-    {0xf7, 0x1d},
-    {0xf8, 0x84},
-    {0xfa, 0x10},
-
-    {0x05, 0x01}, //hb
-    {0x06, 0x18},
-    {0x07, 0x00}, //Vb
-    {0x08, 0x2e},
-
-    {0xfe, 0x01},
-    {0x25, 0x00},
-    {0x26, 0xa2}, //step
-    {0x27, 0x01},
-    {0x28, 0xe6},
-    {0x29, 0x01},
-    {0x2a, 0xe6},
-    {0x2b, 0x01},
-    {0x2c, 0xe6},
-    {0x2d, 0x04}, // AEC_exp_level4[12:8]
-    {0x2e, 0x62}, // AEC_exp_level4[7:0]
-    {0x3c, 0x00},
-    {0xfe, 0x00},
-
-    {0x09, 0x01}, //row start
-    {0x0a, 0xd0}, //
-    {0x0b, 0x02}, //col start
-    {0x0c, 0x70},
-    {0x0d, 0x01}, //height
-    {0x0e, 0x00},
-    {0x0f, 0x01}, //width
-    {0x10, 0x50},
-
-    {0x90, 0x01}, //crop
-    {0x91, 0x00},
-    {0x92, 0x00},
-    {0x93, 0x00},
-    {0x94, 0x00},
-    {0x95, 0x00},
-    {0x96, 0xf0},
-    {0x97, 0x01},
-    {0x98, 0x40},
-
-
-    {REGLIST_TAIL, 0x00},
-};

+ 0 - 34
code/components/esp32-camera-master/sensors/private_include/nt99141.h

@@ -1,34 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * NT99141 driver.
- *
- */
-#ifndef __NT99141_H__
-#define __NT99141_H__
-
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int nt99141_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int nt99141_init(sensor_t *sensor);
-
-#endif // __NT99141_H__

+ 0 - 211
code/components/esp32-camera-master/sensors/private_include/nt99141_regs.h

@@ -1,211 +0,0 @@
-/*
- * NT99141 register definitions.
- */
-#ifndef __NT99141_REG_REGS_H__
-#define __NT99141_REG_REGS_H__
-
-/* system control registers */
-#define SYSTEM_CTROL0   0x3021  // Bit[7]: Software reset 
-                                // Bit[6]: Software power down 
-                                // Bit[5]: Reserved 
-                                // Bit[4]: SRB clock SYNC enable 
-                                // Bit[3]: Isolation suspend select 
-                                // Bit[2:0]: Not used
-
-/* output format control registers */
-#define FORMAT_CTRL     0x501F // Format select
-                                // Bit[2:0]:
-                                //  000: YUV422						
-                                //  001: RGB
-                                //  010: Dither
-                                //  011: RAW after DPC
-                                //  101: RAW after CIP
-
-/* format control registers */
-#define FORMAT_CTRL00   0x4300
-
-/* frame control registers */
-#define FRAME_CTRL01    0x4201  // Control Passed Frame Number When both ON and OFF number set to 0x00,frame control is in bypass mode
-                                // Bit[7:4]: Not used
-                                // Bit[3:0]: Frame ON number
-#define FRAME_CTRL02    0x4202  // Control Masked Frame Number When both ON and OFF number set to 0x00,frame control is in bypass mode
-                                // Bit[7:4]: Not used
-                                // BIT[3:0]: Frame OFF number
-
-/* ISP top control registers */
-#define PRE_ISP_TEST_SETTING_1  0x3025  // Bit[7]: Test enable
-                                        //         0: Test disable
-                                        //         1: Color bar enable
-                                        // Bit[6]: Rolling
-                                        // Bit[5]: Transparent
-                                        // Bit[4]: Square black and white
-                                        // Bit[3:2]: Color bar style
-                                        //         00: Standard 8 color bar
-                                        //         01: Gradual change at vertical mode 1
-                                        //         10: Gradual change at horizontal
-                                        //         11: Gradual change at vertical mode 2
-                                        // Bit[1:0]: Test select
-                                        //         00: Color bar
-                                        //         01: Random data
-                                        //         10: Square data
-                                        //         11: Black image
-
-//exposure = {0x3500[3:0], 0x3501[7:0], 0x3502[7:0]} / 16 × tROW
-
-/* AEC/AGC control functions */
-#define AEC_PK_MANUAL   0x3201  // AEC Manual Mode Control
-                                // Bit[7:6]: Reserved
-                                // Bit[5]: Gain delay option
-                                //         Valid when 0x3503[4]=1’b0
-                                //         0: Delay one frame latch
-                                //         1: One frame latch
-                                // Bit[4:2]: Reserved
-                                // Bit[1]: AGC manual
-                                //         0: Auto enable
-                                //         1: Manual enable
-                                // Bit[0]: AEC manual
-                                //         0: Auto enable
-                                //         1: Manual enable
-
-//gain = {0x350A[1:0], 0x350B[7:0]} / 16
-
-/* mirror and flip registers */
-#define TIMING_TC_REG20 0x3022  // Timing Control Register
-                                // Bit[2:1]: Vertical flip enable
-                                //         00: Normal
-                                //         11: Vertical flip
-                                // Bit[0]: Vertical binning enable
-#define TIMING_TC_REG21 0x3022  // Timing Control Register
-                                // Bit[5]: Compression Enable
-                                // Bit[2:1]: Horizontal mirror enable
-                                //         00: Normal
-                                //         11: Horizontal mirror
-                                // Bit[0]: Horizontal binning enable
-
-#define CLOCK_POL_CONTROL 0x3024// Bit[5]: PCLK polarity 0: active low
-                                //          1: active high
-                                // Bit[3]: Gate PCLK under VSYNC
-                                // Bit[2]: Gate PCLK under HREF
-                                // Bit[1]: HREF polarity
-                                //          0: active low
-                                //          1: active high
-                                // Bit[0] VSYNC polarity
-                                //          0: active low
-                                //          1: active high
-#define DRIVE_CAPABILITY 0x306a // Bit[7:6]:
-                                //          00: 1x
-                                //          01: 2x
-                                //          10: 3x
-                                //          11: 4x
-
-
-#define X_ADDR_ST_H     0x3800 //Bit[3:0]: X address start[11:8]
-#define X_ADDR_ST_L     0x3801 //Bit[7:0]: X address start[7:0]
-#define Y_ADDR_ST_H     0x3802 //Bit[2:0]: Y address start[10:8]
-#define Y_ADDR_ST_L     0x3803 //Bit[7:0]: Y address start[7:0]
-#define X_ADDR_END_H    0x3804 //Bit[3:0]: X address end[11:8]
-#define X_ADDR_END_L    0x3805 //Bit[7:0]:
-#define Y_ADDR_END_H    0x3806 //Bit[2:0]: Y address end[10:8]
-#define Y_ADDR_END_L    0x3807 //Bit[7:0]:
-// Size after scaling
-#define X_OUTPUT_SIZE_H 0x3808 //Bit[3:0]: DVP output horizontal width[11:8]
-#define X_OUTPUT_SIZE_L 0x3809 //Bit[7:0]:
-#define Y_OUTPUT_SIZE_H 0x380a //Bit[2:0]: DVP output vertical height[10:8]
-#define Y_OUTPUT_SIZE_L 0x380b //Bit[7:0]:
-#define X_TOTAL_SIZE_H  0x380c //Bit[3:0]: Total horizontal size[11:8]
-#define X_TOTAL_SIZE_L  0x380d //Bit[7:0]:
-#define Y_TOTAL_SIZE_H  0x380e //Bit[7:0]: Total vertical size[15:8]
-#define Y_TOTAL_SIZE_L  0x380f //Bit[7:0]:
-#define X_OFFSET_H      0x3810 //Bit[3:0]: ISP horizontal offset[11:8]
-#define X_OFFSET_L      0x3811 //Bit[7:0]:
-#define Y_OFFSET_H      0x3812 //Bit[2:0]: ISP vertical offset[10:8]
-#define Y_OFFSET_L      0x3813 //Bit[7:0]:
-#define X_INCREMENT     0x3814 //Bit[7:4]: Horizontal odd subsample increment
-                               //Bit[3:0]: Horizontal even subsample increment
-#define Y_INCREMENT     0x3815 //Bit[7:4]: Vertical odd subsample increment
-                               //Bit[3:0]: Vertical even subsample increment
-// Size before scaling
-//#define X_INPUT_SIZE    (X_ADDR_END - X_ADDR_ST + 1 - (2 * X_OFFSET))
-//#define Y_INPUT_SIZE    (Y_ADDR_END - Y_ADDR_ST + 1 - (2 * Y_OFFSET))
-
-#define ISP_CONTROL_01   0x3021 // Bit[5]: Scale enable
-                                //          0: Disable
-                                //          1: Enable
-
-#define SCALE_CTRL_1     0x5601 // Bit[6:4]: HDIV RW
-                                //          DCW scale times
-                                //          000: DCW 1 time
-                                //          001: DCW 2 times
-                                //          010: DCW 4 times
-                                //          100: DCW 8 times
-                                //          101: DCW 16 times
-                                //          Others: DCW 16 times
-                                // Bit[2:0]: VDIV RW
-                                //          DCW scale times
-                                //          000: DCW 1 time
-                                //          001: DCW 2 times
-                                //          010: DCW 4 times
-                                //          100: DCW 8 times
-                                //          101: DCW 16 times
-                                //          Others: DCW 16 times
-
-#define SCALE_CTRL_2     0x5602 // X_SCALE High Bits
-#define SCALE_CTRL_3     0x5603 // X_SCALE Low Bits
-#define SCALE_CTRL_4     0x5604 // Y_SCALE High Bits
-#define SCALE_CTRL_5     0x5605 // Y_SCALE Low Bits
-#define SCALE_CTRL_6     0x5606 // Bit[3:0]: V Offset
-
-#define PCLK_RATIO       0x3824 // Bit[4:0]: PCLK ratio manual
-#define VFIFO_CTRL0C     0x460C // Bit[1]: PCLK manual enable
-                                //          0: Auto
-                                //          1: Manual by PCLK_RATIO
-
-#define VFIFO_X_SIZE_H   0x4602
-#define VFIFO_X_SIZE_L   0x4603
-#define VFIFO_Y_SIZE_H   0x4604
-#define VFIFO_Y_SIZE_L   0x4605
-
-#define SC_PLLS_CTRL0    0x303a // Bit[7]: PLLS bypass
-#define SC_PLLS_CTRL1    0x303b // Bit[4:0]: PLLS multiplier
-#define SC_PLLS_CTRL2    0x303c // Bit[6:4]: PLLS charge pump control
-                                // Bit[3:0]: PLLS system divider
-#define SC_PLLS_CTRL3    0x303d // Bit[5:4]: PLLS pre-divider
-                                //          00: 1
-                                //          01: 1.5
-                                //          10: 2
-                                //          11: 3
-                                // Bit[2]: PLLS root-divider - 1
-                                // Bit[1:0]: PLLS seld5
-                                //          00: 1
-                                //          01: 1
-                                //          10: 2
-                                //          11: 2.5
-
-#define COMPRESSION_CTRL00 0x4400 //
-#define COMPRESSION_CTRL01 0x4401 //
-#define COMPRESSION_CTRL02 0x4402 //
-#define COMPRESSION_CTRL03 0x4403 //
-#define COMPRESSION_CTRL04 0x4404 //
-#define COMPRESSION_CTRL05 0x4405 //
-#define COMPRESSION_CTRL06 0x4406 //
-#define COMPRESSION_CTRL07 0x3401 // Bit[5:0]: QS
-#define COMPRESSION_ISI_CTRL 0x4408 //
-#define COMPRESSION_CTRL09 0x4409 //
-#define COMPRESSION_CTRL0a 0x440a //
-#define COMPRESSION_CTRL0b 0x440b //
-#define COMPRESSION_CTRL0c 0x440c //
-#define COMPRESSION_CTRL0d 0x440d //
-#define COMPRESSION_CTRL0E 0x440e //
-
-/**
- * @brief register value
- */
-#define TEST_COLOR_BAR  0x02    /* Enable Color Bar roling Test */
-
-#define AEC_PK_MANUAL_AGC_MANUALEN  0x02    /* Enable AGC Manual enable */
-#define AEC_PK_MANUAL_AEC_MANUALEN  0x01    /* Enable AEC Manual enable */
-
-#define TIMING_TC_REG20_VFLIP   0x01 /* Vertical flip enable */
-#define TIMING_TC_REG21_HMIRROR 0x02 /* Horizontal mirror enable */
-
-#endif // __NT99141_REG_REGS_H__

+ 0 - 825
code/components/esp32-camera-master/sensors/private_include/nt99141_settings.h

@@ -1,825 +0,0 @@
-#ifndef _NT99141_SETTINGS_H_
-#define _NT99141_SETTINGS_H_
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "esp_attr.h"
-#include "nt99141_regs.h"
-
-static const ratio_settings_t ratio_table[] = {
-    //  mw,   mh,  sx,  sy,   ex,   ey, ox, oy,   tx,   ty
-    { 1280, 720,   0,   4, 1283, 723, 0, 4, 1660, 963 }, 
-
-};
-
-#define REG_DLY 0xffff
-#define REGLIST_TAIL 0x0000
-
-static const DRAM_ATTR uint16_t sensor_default_regs[][2] = {
- //initial
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x3109, 0x04},
-{0x3040, 0x04},
-{0x3041, 0x02},
-{0x3042, 0xFF},
-{0x3043, 0x08},
-{0x3052, 0xE0},
-{0x305F, 0x33},
-{0x3100, 0x07},
-{0x3106, 0x03},
-{0x3105, 0x01},
-{0x3108, 0x05},
-{0x3110, 0x22},
-{0x3111, 0x57},
-{0x3112, 0x22},
-{0x3113, 0x55},
-{0x3114, 0x05},
-{0x3135, 0x00},
-{0x32F0, 0x01},
-{0x3290, 0x01},
-{0x3291, 0x80},
-{0x3296, 0x01},
-{0x3297, 0x73},
-{0x3250, 0x80},
-{0x3251, 0x03},
-{0x3252, 0xFF},
-{0x3253, 0x00},
-{0x3254, 0x03},
-{0x3255, 0xFF},
-{0x3256, 0x00},
-{0x3257, 0x50},
-{0x3270, 0x00},
-{0x3271, 0x0C},
-{0x3272, 0x18},
-{0x3273, 0x32},
-{0x3274, 0x44},
-{0x3275, 0x54},
-{0x3276, 0x70},
-{0x3277, 0x88},
-{0x3278, 0x9D},
-{0x3279, 0xB0},
-{0x327A, 0xCF},
-{0x327B, 0xE2},
-{0x327C, 0xEF},
-{0x327D, 0xF7},
-{0x327E, 0xFF},
-{0x3302, 0x00},
-{0x3303, 0x40},
-{0x3304, 0x00},
-{0x3305, 0x96},
-{0x3306, 0x00},
-{0x3307, 0x29},
-{0x3308, 0x07},
-{0x3309, 0xBA},
-{0x330A, 0x06},
-{0x330B, 0xF5},
-{0x330C, 0x01},
-{0x330D, 0x51},
-{0x330E, 0x01},
-{0x330F, 0x30},
-{0x3310, 0x07},
-{0x3311, 0x16},
-{0x3312, 0x07},
-{0x3313, 0xBA},
-{0x3326, 0x02},
-{0x32F6, 0x0F},
-{0x32F9, 0x42},
-{0x32FA, 0x24},
-{0x3325, 0x4A},
-{0x3330, 0x00},
-{0x3331, 0x0A},
-{0x3332, 0xFF},
-{0x3338, 0x30},
-{0x3339, 0x84},
-{0x333A, 0x48},
-{0x333F, 0x07},
-{0x3360, 0x10},
-{0x3361, 0x18},
-{0x3362, 0x1f},
-{0x3363, 0x37},
-{0x3364, 0x80},
-{0x3365, 0x80},
-{0x3366, 0x68},
-{0x3367, 0x60},
-{0x3368, 0x30},
-{0x3369, 0x28},
-{0x336A, 0x20},
-{0x336B, 0x10},
-{0x336C, 0x00},
-{0x336D, 0x20},
-{0x336E, 0x1C},
-{0x336F, 0x18},
-{0x3370, 0x10},
-{0x3371, 0x38},
-{0x3372, 0x3C},
-{0x3373, 0x3F},
-{0x3374, 0x3F},
-{0x338A, 0x34},
-{0x338B, 0x7F},
-{0x338C, 0x10},
-{0x338D, 0x23},
-{0x338E, 0x7F},
-{0x338F, 0x14},
-{0x3375, 0x08},
-{0x3376, 0x0C},
-{0x3377, 0x18},
-{0x3378, 0x20},
-{0x3012, 0x02},
-{0x3013, 0xD0},
-{0x3025, 0x02}, //colorbar
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_jpeg[][2] = {
-    {0x32F0, 0x70}, // YUV422
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_raw[][2] = {
-    {0x32F0, 0x50}, // RAW
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_grayscale[][2] = {
-    {0x32F1, 0x01},
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_yuv422[][2] = {
-    {0x32F0, 0x00}, // YUV422
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_rgb565[][2] = {
-    {0x32F0, 0x01}, // RGB
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint8_t sensor_saturation_levels[9][1] = {
-    {0x60},//-4
-    {0x68},//-3
-    {0x70},//-2
-    {0x78},//-1
-    {0x80},//0
-    {0x88},//+1
-    {0x90},//+2
-    {0x98},//+3
-    {0xA0},//+4
-};
-
-static const DRAM_ATTR uint8_t sensor_special_effects[7][4] = {
-    {0x00, 0x80, 0x80, 0x01},//Normal
-    {0x03, 0x80, 0x80, 0x01},//Negative
-    {0x01, 0x80, 0x80, 0x01},//Grayscale
-    {0x05, 0x2A, 0xF0, 0x01},//Red Tint
-    {0x05, 0x60, 0x20, 0x01},//Green Tint
-    {0x05, 0xF0, 0x80, 0x01},//Blue Tint
-    {0x02, 0x80, 0x80, 0x01},//Sepia
-	
-};
-
-// AE LEVEL
-static const DRAM_ATTR uint16_t sensor_ae_level[][2] = {
-
-// 1. [AE_Target : 0x24]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x29 },
- {0x32B9, 0x1F },
- {0x32BC, 0x24 },
- {0x32BD, 0x27 },
- {0x32BE, 0x21 },
-//------------------------------------------------------------------------
-// 2. [AE_Target : 0x28]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x2D },
- {0x32B9, 0x23 },
- {0x32BC, 0x28 },
- {0x32BD, 0x2B },
- {0x32BE, 0x25 },
-//------------------------------------------------------------------------
-// 3. [AE_Target : 0x2C]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x32 },
- {0x32B9, 0x26 },
- {0x32BC, 0x2C },
- {0x32BD, 0x2F },
- {0x32BE, 0x29 },
-//------------------------------------------------------------------------
-// 4, [AE_Target : 0x30]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x36 },
- {0x32B9, 0x2A },
- {0x32BC, 0x30 },
- {0x32BD, 0x33 },
- {0x32BE, 0x2D },
-//------------------------------------------------------------------------
-// 5. [AE_Target : 0x34]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x3B },
- {0x32B9, 0x2D },
- {0x32BC, 0x34 },
- {0x32BD, 0x38 },
- {0x32BE, 0x30 },
-//------------------------------------------------------------------------
-// 6. [AE_Target : 0x38]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x3F },
- {0x32B9, 0x31 },
- {0x32BC, 0x38 },
- {0x32BD, 0x3C },
- {0x32BE, 0x34 },
-//------------------------------------------------------------------------
-// 7. [AE_Target : 0x3D]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x44 },
- {0x32B9, 0x34 },
- {0x32BC, 0x3C },
- {0x32BD, 0x40 },
- {0x32BE, 0x38 },
-//------------------------------------------------------------------------
-// 8. [AE_Target : 0x40]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x48 },
- {0x32B9, 0x38 },
- {0x32BC, 0x40 },
- {0x32BD, 0x44 },
- {0x32BE, 0x3C },
-//------------------------------------------------------------------------
-// 9. [AE_Target : 0x44]
-// Set_Device_Format = FORMAT_16_8
-// SET_Device_Addr = 0x54
- {0x32B8, 0x4D },
- {0x32B9, 0x3B },
- {0x32BC, 0x44 },
- {0x32BD, 0x49 },
- {0x32BE, 0x3F },
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_HD[][2] = {
-//[JPEG_1280x720_8.18_8.18_Fps]
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x3C}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x5E}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x24}, 
-{0x3002, 0x00}, 
-{0x3003, 0x04}, 
-{0x3004, 0x00}, 
-{0x3005, 0x04}, 
-{0x3006, 0x05}, 
-{0x3007, 0x03}, 
-{0x3008, 0x02}, 
-{0x3009, 0xD3}, 
-{0x300A, 0x06}, 
-{0x300B, 0x7C}, 
-{0x300C, 0x02}, 
-{0x300D, 0xE0}, 
-{0x300E, 0x05}, 
-{0x300F, 0x00}, 
-{0x3010, 0x02}, 
-{0x3011, 0xD0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x3F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal 
-{0x3400, 0x01}, 
-{0x3060, 0x01}, 
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_VGA[][2] = {
-//[JPEG_640x480_10.14_10.14_Fps]
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x4B}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x62}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x32E0, 0x02}, 
-{0x32E1, 0x80}, 
-{0x32E2, 0x01}, 
-{0x32E3, 0xE0}, 
-{0x32E4, 0x00}, 
-{0x32E5, 0x80}, 
-{0x32E6, 0x00}, 
-{0x32E7, 0x80}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x24}, 
-{0x3002, 0x00}, 
-{0x3003, 0xA4}, 
-{0x3004, 0x00}, 
-{0x3005, 0x04}, 
-{0x3006, 0x04}, 
-{0x3007, 0x63}, 
-{0x3008, 0x02}, 
-{0x3009, 0xD3}, 
-{0x300A, 0x05}, 
-{0x300B, 0x3C}, 
-{0x300C, 0x02}, 
-{0x300D, 0xE0}, 
-{0x300E, 0x03}, 
-{0x300F, 0xC0}, 
-{0x3010, 0x02}, 
-{0x3011, 0xD0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x7F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal 
-{0x3400, 0x01}, 
-{0x3060, 0x01}, 
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_QVGA[][2] = {
-//[JPEG_320x240_10.14_10.14_Fps] 
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x4B}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x62}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x32E0, 0x01}, 
-{0x32E1, 0x40}, 
-{0x32E2, 0x00}, 
-{0x32E3, 0xF0}, 
-{0x32E4, 0x02}, 
-{0x32E5, 0x02}, 
-{0x32E6, 0x02}, 
-{0x32E7, 0x03}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x24}, 
-{0x3002, 0x00}, 
-{0x3003, 0xA4}, 
-{0x3004, 0x00}, 
-{0x3005, 0x04}, 
-{0x3006, 0x04}, 
-{0x3007, 0x63}, 
-{0x3008, 0x02}, 
-{0x3009, 0xD3}, 
-{0x300A, 0x05}, 
-{0x300B, 0x3C}, 
-{0x300C, 0x02}, 
-{0x300D, 0xE0}, 
-{0x300E, 0x03}, 
-{0x300F, 0xC0}, 
-{0x3010, 0x02}, 
-{0x3011, 0xD0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x7F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal
-{0x3400, 0x01}, 
-{0x3060, 0x01}, 
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_VGA_xyskip[][2] = {
-// [JPEG_640x360_20.00_25.01_Fps_XY_Skip]
-// Set_Device_Format = FORMAT_16_8 
-// SET_Device_Addr = 0x54 
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60 },
-{0x320A, 0xB2 },
-{0x32C0, 0x64 },
-{0x32C1, 0x64 },
-{0x32C2, 0x64 },
-{0x32C3, 0x00 },
-{0x32C4, 0x20 },
-{0x32C5, 0x20 },
-{0x32C6, 0x20 },
-{0x32C7, 0x00 },
-{0x32C8, 0x62 },
-{0x32C9, 0x64 },
-{0x32CA, 0x84 },
-{0x32CB, 0x84 },
-{0x32CC, 0x84 },
-{0x32CD, 0x84 },
-{0x32DB, 0x68 },
-{0x32F0, 0x70 },
-{0x3400, 0x08 },
-{0x3400, 0x00 },
-{0x3401, 0x4E },
-{0x3404, 0x00 },
-{0x3405, 0x00 },
-{0x3410, 0x00 },
-{0x3200, 0x3E },
-{0x3201, 0x0F },
-{0x3028, 0x0F },
-{0x3029, 0x00 },
-{0x302A, 0x08 },
-{0x3022, 0x24 },
-{0x3023, 0x6C },
-{0x3002, 0x00 },
-{0x3003, 0x04 },
-{0x3004, 0x00 },
-{0x3005, 0x04 },
-{0x3006, 0x05 },
-{0x3007, 0x03 },
-{0x3008, 0x02 },
-{0x3009, 0xD3 },
-{0x300A, 0x03 },
-{0x300B, 0xFC },
-{0x300C, 0x01 },
-{0x300D, 0x88 },
-{0x300E, 0x02 },
-{0x300F, 0x80 },
-{0x3010, 0x01 },
-{0x3011, 0x68 },
-{0x32B8, 0x3F },
-{0x32B9, 0x31 },
-{0x32BB, 0x87 },
-{0x32BC, 0x38 },
-{0x32BD, 0x3C },
-{0x32BE, 0x34 },
-{0x3201, 0x3F },
-{0x3025, 0x00 }, //normal
-{0x3021, 0x06 },
-{0x3400, 0x01 },
-{0x3060, 0x01 },
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_VGA_xskip[][2] = {
-//[JPEG_640x480_Xskip_13.32_13.32_Fps]
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x62}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x68}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x32E0, 0x02}, 
-{0x32E1, 0x80}, 
-{0x32E2, 0x01}, 
-{0x32E3, 0xE0}, 
-{0x32E4, 0x00}, 
-{0x32E5, 0x00}, 
-{0x32E6, 0x00}, 
-{0x32E7, 0x80}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x2C}, 
-{0x3002, 0x00}, 
-{0x3003, 0x04}, 
-{0x3004, 0x00}, 
-{0x3005, 0x04}, 
-{0x3006, 0x05}, 
-{0x3007, 0x03}, 
-{0x3008, 0x02}, 
-{0x3009, 0xD3}, 
-{0x300A, 0x03}, 
-{0x300B, 0xFC}, 
-{0x300C, 0x02}, 
-{0x300D, 0xE0}, 
-{0x300E, 0x02}, 
-{0x300F, 0x80}, 
-{0x3010, 0x02}, 
-{0x3011, 0xD0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x7F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal 
-{0x3400, 0x01}, 
-{0x3060, 0x01}, 
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_QVGA_xskip[][2] = {
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-//[JPEG_320x240_Xskip_13.32_13.32_Fps]
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x62}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x68}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x32E0, 0x01}, 
-{0x32E1, 0x40}, 
-{0x32E2, 0x00}, 
-{0x32E3, 0xF0}, 
-{0x32E4, 0x01}, 
-{0x32E5, 0x01}, 
-{0x32E6, 0x02}, 
-{0x32E7, 0x03}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x2C}, 
-{0x3002, 0x00}, 
-{0x3003, 0x04}, 
-{0x3004, 0x00}, 
-{0x3005, 0x04}, 
-{0x3006, 0x05}, 
-{0x3007, 0x03}, 
-{0x3008, 0x02}, 
-{0x3009, 0xD3}, 
-{0x300A, 0x03}, 
-{0x300B, 0xFC}, 
-{0x300C, 0x02}, 
-{0x300D, 0xE0}, 
-{0x300E, 0x02}, 
-{0x300F, 0x80}, 
-{0x3010, 0x02}, 
-{0x3011, 0xD0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x7F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal 
-{0x3400, 0x01}, 
-{0x3060, 0x01},
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-
-static const DRAM_ATTR uint16_t sensor_framesize_VGA_crop[][2] = {
-//[JPEG_640x480_Crop_19.77_19.77_Fps]
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x62}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x68}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x24}, 
-{0x3002, 0x01}, 
-{0x3003, 0x44}, 
-{0x3004, 0x00}, 
-{0x3005, 0x7C}, 
-{0x3006, 0x03}, 
-{0x3007, 0xC3}, 
-{0x3008, 0x02}, 
-{0x3009, 0x5B}, 
-{0x300A, 0x03}, 
-{0x300B, 0xFC}, 
-{0x300C, 0x01}, 
-{0x300D, 0xF0}, 
-{0x300E, 0x02}, 
-{0x300F, 0x80}, 
-{0x3010, 0x01}, 
-{0x3011, 0xE0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x3F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal 
-{0x3400, 0x01}, 
-{0x3060, 0x01}, 
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_framesize_QVGA_crop[][2] = {
-//[JPEG_320x240_Crop_19.77_19.77_Fps]
-{0x3021, 0x00},
-{REG_DLY, 100}, // delay 100ms
-{0x32BF, 0x60}, 
-{0x32C0, 0x5A}, 
-{0x32C1, 0x5A}, 
-{0x32C2, 0x5A}, 
-{0x32C3, 0x00}, 
-{0x32C4, 0x20}, 
-{0x32C5, 0x20}, 
-{0x32C6, 0x20}, 
-{0x32C7, 0x00}, 
-{0x32C8, 0x62}, 
-{0x32C9, 0x5A}, 
-{0x32CA, 0x7A}, 
-{0x32CB, 0x7A}, 
-{0x32CC, 0x7A}, 
-{0x32CD, 0x7A}, 
-{0x32DB, 0x68}, 
-{0x32F0, 0x70}, 
-{0x3400, 0x08}, 
-{0x3400, 0x00}, 
-{0x3401, 0x4E}, 
-{0x3404, 0x00}, 
-{0x3405, 0x00}, 
-{0x3410, 0x00}, 
-{0x32E0, 0x01}, 
-{0x32E1, 0x40}, 
-{0x32E2, 0x00}, 
-{0x32E3, 0xF0}, 
-{0x32E4, 0x01}, 
-{0x32E5, 0x01}, 
-{0x32E6, 0x01}, 
-{0x32E7, 0x02}, 
-{0x3200, 0x3E}, 
-{0x3201, 0x0F}, 
-{0x3028, 0x0F}, 
-{0x3029, 0x00}, 
-{0x302A, 0x08}, 
-{0x3022, 0x24}, 
-{0x3023, 0x24}, 
-{0x3002, 0x01}, 
-{0x3003, 0x44}, 
-{0x3004, 0x00}, 
-{0x3005, 0x7C}, 
-{0x3006, 0x03}, 
-{0x3007, 0xC3}, 
-{0x3008, 0x02}, 
-{0x3009, 0x5B}, 
-{0x300A, 0x03}, 
-{0x300B, 0xFC}, 
-{0x300C, 0x01}, 
-{0x300D, 0xF0}, 
-{0x300E, 0x02}, 
-{0x300F, 0x80}, 
-{0x3010, 0x01}, 
-{0x3011, 0xE0}, 
-{0x32B8, 0x3F}, 
-{0x32B9, 0x31}, 
-{0x32BB, 0x87}, 
-{0x32BC, 0x38}, 
-{0x32BD, 0x3C}, 
-{0x32BE, 0x34}, 
-{0x3201, 0x7F}, 
-{0x3021, 0x06},
-{0x3025, 0x00}, //normal 
-{0x3400, 0x01}, 
-{0x3060, 0x01}, 
-{REGLIST_TAIL, 0x00}, // tail
-};
-
-#endif
-
-

+ 0 - 32
code/components/esp32-camera-master/sensors/private_include/ov2640.h

@@ -1,32 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV2640 driver.
- *
- */
-#ifndef __OV2640_H__
-#define __OV2640_H__
-#include "sensor.h"
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int ov2640_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int ov2640_init(sensor_t *sensor);
-
-#endif // __OV2640_H__

+ 0 - 216
code/components/esp32-camera-master/sensors/private_include/ov2640_regs.h

@@ -1,216 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV2640 register definitions.
- */
-#ifndef __REG_REGS_H__
-#define __REG_REGS_H__
-/* DSP register bank FF=0x00*/
-#define R_BYPASS            0x05
-#define QS                  0x44
-#define CTRLI               0x50
-#define HSIZE               0x51
-#define VSIZE               0x52
-#define XOFFL               0x53
-#define YOFFL               0x54
-#define VHYX                0x55
-#define DPRP                0x56
-#define TEST                0x57
-#define ZMOW                0x5A
-#define ZMOH                0x5B
-#define ZMHH                0x5C
-#define BPADDR              0x7C
-#define BPDATA              0x7D
-#define CTRL2               0x86
-#define CTRL3               0x87
-#define SIZEL               0x8C
-#define HSIZE8              0xC0
-#define VSIZE8              0xC1
-#define CTRL0               0xC2
-#define CTRL1               0xC3
-#define R_DVP_SP            0xD3
-#define IMAGE_MODE          0xDA
-#define RESET               0xE0
-#define MS_SP               0xF0
-#define SS_ID               0xF7
-#define SS_CTRL             0xF7
-#define MC_BIST             0xF9
-#define MC_AL               0xFA
-#define MC_AH               0xFB
-#define MC_D                0xFC
-#define P_CMD               0xFD
-#define P_STATUS            0xFE
-#define BANK_SEL            0xFF
-
-#define CTRLI_LP_DP         0x80
-#define CTRLI_ROUND         0x40
-
-#define CTRL0_AEC_EN        0x80
-#define CTRL0_AEC_SEL       0x40
-#define CTRL0_STAT_SEL      0x20
-#define CTRL0_VFIRST        0x10
-#define CTRL0_YUV422        0x08
-#define CTRL0_YUV_EN        0x04
-#define CTRL0_RGB_EN        0x02
-#define CTRL0_RAW_EN        0x01
-
-#define CTRL2_DCW_EN        0x20
-#define CTRL2_SDE_EN        0x10
-#define CTRL2_UV_ADJ_EN     0x08
-#define CTRL2_UV_AVG_EN     0x04
-#define CTRL2_CMX_EN        0x01
-
-#define CTRL3_BPC_EN        0x80
-#define CTRL3_WPC_EN        0x40
-
-#define R_DVP_SP_AUTO_MODE  0x80
-
-#define R_BYPASS_DSP_EN         0x00
-#define R_BYPASS_DSP_BYPAS      0x01
-
-#define IMAGE_MODE_Y8_DVP_EN    0x40
-#define IMAGE_MODE_JPEG_EN      0x10
-#define IMAGE_MODE_YUV422       0x00
-#define IMAGE_MODE_RAW10        0x04
-#define IMAGE_MODE_RGB565       0x08
-#define IMAGE_MODE_HREF_VSYNC   0x02
-#define IMAGE_MODE_LBYTE_FIRST  0x01
-
-#define RESET_MICROC            0x40
-#define RESET_SCCB              0x20
-#define RESET_JPEG              0x10
-#define RESET_DVP               0x04
-#define RESET_IPU               0x02
-#define RESET_CIF               0x01
-
-#define MC_BIST_RESET           0x80
-#define MC_BIST_BOOT_ROM_SEL    0x40
-#define MC_BIST_12KB_SEL        0x20
-#define MC_BIST_12KB_MASK       0x30
-#define MC_BIST_512KB_SEL       0x08
-#define MC_BIST_512KB_MASK      0x0C
-#define MC_BIST_BUSY_BIT_R      0x02
-#define MC_BIST_MC_RES_ONE_SH_W 0x02
-#define MC_BIST_LAUNCH          0x01
-
-
-typedef enum {
-    BANK_DSP, BANK_SENSOR, BANK_MAX
-} ov2640_bank_t;
-
-/* Sensor register bank FF=0x01*/
-#define GAIN                0x00
-#define COM1                0x03
-#define REG04               0x04
-#define REG08               0x08
-#define COM2                0x09
-#define REG_PID             0x0A
-#define REG_VER             0x0B
-#define COM3                0x0C
-#define COM4                0x0D
-#define AEC                 0x10
-#define CLKRC               0x11
-#define COM7                0x12
-#define COM8                0x13
-#define COM9                0x14 /* AGC gain ceiling */
-#define COM10               0x15
-#define HSTART              0x17
-#define HSTOP               0x18
-#define VSTART              0x19
-#define VSTOP               0x1A
-#define REG_MIDH            0x1C
-#define REG_MIDL            0x1D
-#define AEW                 0x24
-#define AEB                 0x25
-#define VV                  0x26
-#define REG2A               0x2A
-#define FRARL               0x2B
-#define ADDVSL              0x2D
-#define ADDVSH              0x2E
-#define YAVG                0x2F
-#define HSDY                0x30
-#define HEDY                0x31
-#define REG32               0x32
-#define ARCOM2              0x34
-#define REG45               0x45
-#define FLL                 0x46
-#define FLH                 0x47
-#define COM19               0x48
-#define ZOOMS               0x49
-#define COM22               0x4B
-#define COM25               0x4E
-#define BD50                0x4F
-#define BD60                0x50
-#define REG5D               0x5D
-#define REG5E               0x5E
-#define REG5F               0x5F
-#define REG60               0x60
-#define HISTO_LOW           0x61
-#define HISTO_HIGH          0x62
-
-#define REG04_DEFAULT       0x28
-#define REG04_HFLIP_IMG     0x80
-#define REG04_VFLIP_IMG     0x40
-#define REG04_VREF_EN       0x10
-#define REG04_HREF_EN       0x08
-#define REG04_SET(x)        (REG04_DEFAULT|x)
-
-#define COM2_STDBY          0x10
-#define COM2_OUT_DRIVE_1x   0x00
-#define COM2_OUT_DRIVE_2x   0x01
-#define COM2_OUT_DRIVE_3x   0x02
-#define COM2_OUT_DRIVE_4x   0x03
-
-#define COM3_DEFAULT        0x38
-#define COM3_BAND_50Hz      0x04
-#define COM3_BAND_60Hz      0x00
-#define COM3_BAND_AUTO      0x02
-#define COM3_BAND_SET(x)    (COM3_DEFAULT|x)
-
-#define COM7_SRST           0x80
-#define COM7_RES_UXGA       0x00 /* UXGA */
-#define COM7_RES_SVGA       0x40 /* SVGA */
-#define COM7_RES_CIF        0x20 /* CIF  */
-#define COM7_ZOOM_EN        0x04 /* Enable Zoom */
-#define COM7_COLOR_BAR      0x02 /* Enable Color Bar Test */
-
-#define COM8_DEFAULT        0xC0
-#define COM8_BNDF_EN        0x20 /* Enable Banding filter */
-#define COM8_AGC_EN         0x04 /* AGC Auto/Manual control selection */
-#define COM8_AEC_EN         0x01 /* Auto/Manual Exposure control */
-#define COM8_SET(x)         (COM8_DEFAULT|x)
-
-#define COM9_DEFAULT        0x08
-#define COM9_AGC_GAIN_2x    0x00 /* AGC:    2x */
-#define COM9_AGC_GAIN_4x    0x01 /* AGC:    4x */
-#define COM9_AGC_GAIN_8x    0x02 /* AGC:    8x */
-#define COM9_AGC_GAIN_16x   0x03 /* AGC:   16x */
-#define COM9_AGC_GAIN_32x   0x04 /* AGC:   32x */
-#define COM9_AGC_GAIN_64x   0x05 /* AGC:   64x */
-#define COM9_AGC_GAIN_128x  0x06 /* AGC:  128x */
-#define COM9_AGC_SET(x)     (COM9_DEFAULT|(x<<5))
-
-#define COM10_HREF_EN       0x80 /* HSYNC changes to HREF */
-#define COM10_HSYNC_EN      0x40 /* HREF changes to HSYNC */
-#define COM10_PCLK_FREE     0x20 /* PCLK output option: free running PCLK */
-#define COM10_PCLK_EDGE     0x10 /* Data is updated at the rising edge of PCLK */
-#define COM10_HREF_NEG      0x08 /* HREF negative */
-#define COM10_VSYNC_NEG     0x02 /* VSYNC negative */
-#define COM10_HSYNC_NEG     0x01 /* HSYNC negative */
-
-#define CTRL1_AWB           0x08 /* Enable AWB */
-
-#define VV_AGC_TH_SET(h,l)  ((h<<4)|(l&0x0F))
-
-#define REG32_UXGA          0x36
-#define REG32_SVGA          0x09
-#define REG32_CIF           0x89
-
-#define CLKRC_2X            0x80
-#define CLKRC_2X_UXGA       (0x01 | CLKRC_2X)
-#define CLKRC_2X_SVGA       CLKRC_2X
-#define CLKRC_2X_CIF        CLKRC_2X
-
-#endif //__REG_REGS_H__

+ 0 - 485
code/components/esp32-camera-master/sensors/private_include/ov2640_settings.h

@@ -1,485 +0,0 @@
-// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#ifndef _OV2640_SETTINGS_H_
-#define _OV2640_SETTINGS_H_
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "esp_attr.h"
-#include "ov2640_regs.h"
-
-typedef enum {
-    OV2640_MODE_UXGA, OV2640_MODE_SVGA, OV2640_MODE_CIF, OV2640_MODE_MAX
-} ov2640_sensor_mode_t;
-
-typedef struct {
-        union {
-                struct {
-                        uint8_t pclk_div:7;
-                        uint8_t pclk_auto:1;
-                };
-                uint8_t pclk;
-        };
-        union {
-                struct {
-                        uint8_t clk_div:6;
-                        uint8_t reserved:1;
-                        uint8_t clk_2x:1;
-                };
-                uint8_t clk;
-        };
-} ov2640_clk_t;
-
-typedef struct {
-        uint16_t offset_x;
-        uint16_t offset_y;
-        uint16_t max_x;
-        uint16_t max_y;
-} ov2640_ratio_settings_t;
-
-static const DRAM_ATTR ov2640_ratio_settings_t ratio_table[] = {
-    // ox,  oy,   mx,   my
-    {   0,   0, 1600, 1200 }, //4x3
-    {   8,  72, 1584, 1056 }, //3x2
-    {   0, 100, 1600, 1000 }, //16x10
-    {   0, 120, 1600,  960 }, //5x3
-    {   0, 150, 1600,  900 }, //16x9
-    {   2, 258, 1596,  684 }, //21x9
-    {  50,   0, 1500, 1200 }, //5x4
-    { 200,   0, 1200, 1200 }, //1x1
-    { 462,   0,  676, 1200 }  //9x16
-};
-
-// 30fps@24MHz
-const DRAM_ATTR uint8_t ov2640_settings_cif[][2] = {
-    {BANK_SEL, BANK_DSP},
-    {0x2c, 0xff},
-    {0x2e, 0xdf},
-    {BANK_SEL, BANK_SENSOR},
-    {0x3c, 0x32},
-    {CLKRC, 0x01},
-    {COM2, COM2_OUT_DRIVE_3x},
-    {REG04, REG04_DEFAULT},
-    {COM8, COM8_DEFAULT | COM8_BNDF_EN | COM8_AGC_EN | COM8_AEC_EN},
-    {COM9, COM9_AGC_SET(COM9_AGC_GAIN_8x)},
-    {0x2c, 0x0c},
-    {0x33, 0x78},
-    {0x3a, 0x33},
-    {0x3b, 0xfB},
-    {0x3e, 0x00},
-    {0x43, 0x11},
-    {0x16, 0x10},
-    {0x39, 0x92},
-    {0x35, 0xda},
-    {0x22, 0x1a},
-    {0x37, 0xc3},
-    {0x23, 0x00},
-    {ARCOM2, 0xc0},
-    {0x06, 0x88},
-    {0x07, 0xc0},
-    {COM4, 0x87},
-    {0x0e, 0x41},
-    {0x4c, 0x00},
-    {0x4a, 0x81},
-    {0x21, 0x99},
-    {AEW, 0x40},
-    {AEB, 0x38},
-    {VV, VV_AGC_TH_SET(8,2)},
-    {0x5c, 0x00},
-    {0x63, 0x00},
-    {HISTO_LOW, 0x70},
-    {HISTO_HIGH, 0x80},
-    {0x7c, 0x05},
-    {0x20, 0x80},
-    {0x28, 0x30},
-    {0x6c, 0x00},
-    {0x6d, 0x80},
-    {0x6e, 0x00},
-    {0x70, 0x02},
-    {0x71, 0x94},
-    {0x73, 0xc1},
-    {0x3d, 0x34},
-    {0x5a, 0x57},
-    {BD50, 0xbb},
-    {BD60, 0x9c},
-    {COM7, COM7_RES_CIF},
-    {HSTART, 0x11},
-    {HSTOP, 0x43},
-    {VSTART, 0x00},
-    {VSTOP, 0x25},
-    {REG32, 0x89},
-    {0x37, 0xc0},
-    {BD50, 0xca},
-    {BD60, 0xa8},
-    {0x6d, 0x00},
-    {0x3d, 0x38},
-    {BANK_SEL, BANK_DSP},
-    {0xe5, 0x7f},
-    {MC_BIST, MC_BIST_RESET | MC_BIST_BOOT_ROM_SEL},
-    {0x41, 0x24},
-    {RESET, RESET_JPEG | RESET_DVP},
-    {0x76, 0xff},
-    {0x33, 0xa0},
-    {0x42, 0x20},
-    {0x43, 0x18},
-    {0x4c, 0x00},
-    {CTRL3, CTRL3_WPC_EN | 0x10 },
-    {0x88, 0x3f},
-    {0xd7, 0x03},
-    {0xd9, 0x10},
-    {R_DVP_SP, R_DVP_SP_AUTO_MODE | 0x02},
-    {0xc8, 0x08},
-    {0xc9, 0x80},
-    {BPADDR, 0x00},
-    {BPDATA, 0x00},
-    {BPADDR, 0x03},
-    {BPDATA, 0x48},
-    {BPDATA, 0x48},
-    {BPADDR, 0x08},
-    {BPDATA, 0x20},
-    {BPDATA, 0x10},
-    {BPDATA, 0x0e},
-    {0x90, 0x00},
-    {0x91, 0x0e},
-    {0x91, 0x1a},
-    {0x91, 0x31},
-    {0x91, 0x5a},
-    {0x91, 0x69},
-    {0x91, 0x75},
-    {0x91, 0x7e},
-    {0x91, 0x88},
-    {0x91, 0x8f},
-    {0x91, 0x96},
-    {0x91, 0xa3},
-    {0x91, 0xaf},
-    {0x91, 0xc4},
-    {0x91, 0xd7},
-    {0x91, 0xe8},
-    {0x91, 0x20},
-    {0x92, 0x00},
-    {0x93, 0x06},
-    {0x93, 0xe3},
-    {0x93, 0x05},
-    {0x93, 0x05},
-    {0x93, 0x00},
-    {0x93, 0x04},
-    {0x93, 0x00},
-    {0x93, 0x00},
-    {0x93, 0x00},
-    {0x93, 0x00},
-    {0x93, 0x00},
-    {0x93, 0x00},
-    {0x93, 0x00},
-    {0x96, 0x00},
-    {0x97, 0x08},
-    {0x97, 0x19},
-    {0x97, 0x02},
-    {0x97, 0x0c},
-    {0x97, 0x24},
-    {0x97, 0x30},
-    {0x97, 0x28},
-    {0x97, 0x26},
-    {0x97, 0x02},
-    {0x97, 0x98},
-    {0x97, 0x80},
-    {0x97, 0x00},
-    {0x97, 0x00},
-    {0xa4, 0x00},
-    {0xa8, 0x00},
-    {0xc5, 0x11},
-    {0xc6, 0x51},
-    {0xbf, 0x80},
-    {0xc7, 0x10},
-    {0xb6, 0x66},
-    {0xb8, 0xA5},
-    {0xb7, 0x64},
-    {0xb9, 0x7C},
-    {0xb3, 0xaf},
-    {0xb4, 0x97},
-    {0xb5, 0xFF},
-    {0xb0, 0xC5},
-    {0xb1, 0x94},
-    {0xb2, 0x0f},
-    {0xc4, 0x5c},
-    {CTRL1, 0xfd},
-    {0x7f, 0x00},
-    {0xe5, 0x1f},
-    {0xe1, 0x67},
-    {0xdd, 0x7f},
-    {IMAGE_MODE, 0x00},
-    {RESET, 0x00},
-    {R_BYPASS, R_BYPASS_DSP_EN},
-    {0, 0}
-};
-
-const DRAM_ATTR uint8_t ov2640_settings_to_cif[][2] = {
-    {BANK_SEL, BANK_SENSOR},
-    {COM7, COM7_RES_CIF},
-
-    //Set the sensor output window
-    {COM1, 0x0A},
-    {REG32, REG32_CIF},
-    {HSTART, 0x11},
-    {HSTOP, 0x43},
-    {VSTART, 0x00},
-    {VSTOP, 0x25},
-
-    //{CLKRC, 0x00},
-    {BD50, 0xca},
-    {BD60, 0xa8},
-    {0x5a, 0x23},
-    {0x6d, 0x00},
-    {0x3d, 0x38},
-    {0x39, 0x92},
-    {0x35, 0xda},
-    {0x22, 0x1a},
-    {0x37, 0xc3},
-    {0x23, 0x00},
-    {ARCOM2, 0xc0},
-    {0x06, 0x88},
-    {0x07, 0xc0},
-    {COM4, 0x87},
-    {0x0e, 0x41},
-    {0x4c, 0x00},
-    {BANK_SEL, BANK_DSP},
-    {RESET, RESET_DVP},
-
-    //Set the sensor resolution (UXGA, SVGA, CIF)
-    {HSIZE8, 0x32},
-    {VSIZE8, 0x25},
-    {SIZEL, 0x00},
-
-    //Set the image window size >= output size
-    {HSIZE, 0x64},
-    {VSIZE, 0x4a},
-    {XOFFL, 0x00},
-    {YOFFL, 0x00},
-    {VHYX, 0x00},
-    {TEST, 0x00},
-
-    {CTRL2, CTRL2_DCW_EN | 0x1D},
-    {CTRLI, CTRLI_LP_DP | 0x00},
-    //{R_DVP_SP, 0x08},
-    {0, 0}
-};
-
-const DRAM_ATTR uint8_t ov2640_settings_to_svga[][2] = {
-    {BANK_SEL, BANK_SENSOR},
-    {COM7, COM7_RES_SVGA},
-
-    //Set the sensor output window
-    {COM1, 0x0A},
-    {REG32, REG32_SVGA},
-    {HSTART, 0x11},
-    {HSTOP, 0x43},
-    {VSTART, 0x00},
-    {VSTOP, 0x4b},
-
-    //{CLKRC, 0x00},
-    {0x37, 0xc0},
-    {BD50, 0xca},
-    {BD60, 0xa8},
-    {0x5a, 0x23},
-    {0x6d, 0x00},
-    {0x3d, 0x38},
-    {0x39, 0x92},
-    {0x35, 0xda},
-    {0x22, 0x1a},
-    {0x37, 0xc3},
-    {0x23, 0x00},
-    {ARCOM2, 0xc0},
-    {0x06, 0x88},
-    {0x07, 0xc0},
-    {COM4, 0x87},
-    {0x0e, 0x41},
-    {0x42, 0x03},
-    {0x4c, 0x00},
-    {BANK_SEL, BANK_DSP},
-    {RESET, RESET_DVP},
-
-    //Set the sensor resolution (UXGA, SVGA, CIF)
-    {HSIZE8, 0x64},
-    {VSIZE8, 0x4B},
-    {SIZEL, 0x00},
-
-    //Set the image window size >= output size
-    {HSIZE, 0xC8},
-    {VSIZE, 0x96},
-    {XOFFL, 0x00},
-    {YOFFL, 0x00},
-    {VHYX, 0x00},
-    {TEST, 0x00},
-
-    {CTRL2, CTRL2_DCW_EN | 0x1D},
-    {CTRLI, CTRLI_LP_DP | 0x00},
-    //{R_DVP_SP, 0x08},
-    {0, 0}
-};
-
-const DRAM_ATTR uint8_t ov2640_settings_to_uxga[][2] = {
-    {BANK_SEL, BANK_SENSOR},
-    {COM7, COM7_RES_UXGA},
-
-    //Set the sensor output window
-    {COM1, 0x0F},
-    {REG32, REG32_UXGA},
-    {HSTART, 0x11},
-    {HSTOP, 0x75},
-    {VSTART, 0x01},
-    {VSTOP, 0x97},
-
-    //{CLKRC, 0x00},
-    {0x3d, 0x34},
-    {BD50, 0xbb},
-    {BD60, 0x9c},
-    {0x5a, 0x57},
-    {0x6d, 0x80},
-    {0x39, 0x82},
-    {0x23, 0x00},
-    {0x07, 0xc0},
-    {0x4c, 0x00},
-    {0x35, 0x88},
-    {0x22, 0x0a},
-    {0x37, 0x40},
-    {ARCOM2, 0xa0},
-    {0x06, 0x02},
-    {COM4, 0xb7},
-    {0x0e, 0x01},
-    {0x42, 0x83},
-    {BANK_SEL, BANK_DSP},
-    {RESET, RESET_DVP},
-
-    //Set the sensor resolution (UXGA, SVGA, CIF)
-    {HSIZE8, 0xc8},
-    {VSIZE8, 0x96},
-    {SIZEL, 0x00},
-
-    //Set the image window size >= output size
-    {HSIZE, 0x90},
-    {VSIZE, 0x2c},
-    {XOFFL, 0x00},
-    {YOFFL, 0x00},
-    {VHYX, 0x88},
-    {TEST, 0x00},
-
-    {CTRL2, CTRL2_DCW_EN | 0x1d},
-    {CTRLI, 0x00},
-    //{R_DVP_SP, 0x06},
-    {0, 0}
-};
-
-const DRAM_ATTR uint8_t ov2640_settings_jpeg3[][2] = {
-    {BANK_SEL, BANK_DSP},
-    {RESET, RESET_JPEG | RESET_DVP},
-    {IMAGE_MODE, IMAGE_MODE_JPEG_EN | IMAGE_MODE_HREF_VSYNC},
-    {0xD7, 0x03},
-    {0xE1, 0x77},
-    {0xE5, 0x1F},
-    {0xD9, 0x10},
-    {0xDF, 0x80},
-    {0x33, 0x80},
-    {0x3C, 0x10},
-    {0xEB, 0x30},
-    {0xDD, 0x7F},
-    {RESET, 0x00},
-    {0, 0}
-};
-
-static const uint8_t ov2640_settings_yuv422[][2] = {
-    {BANK_SEL, BANK_DSP},
-    {RESET, RESET_DVP},
-    {IMAGE_MODE, IMAGE_MODE_YUV422},
-    {0xD7, 0x01},
-    {0xE1, 0x67},
-    {RESET, 0x00},
-    {0, 0},
-};
-
-static const uint8_t ov2640_settings_rgb565[][2] = {
-    {BANK_SEL, BANK_DSP},
-    {RESET, RESET_DVP},
-    {IMAGE_MODE, IMAGE_MODE_RGB565},
-    {0xD7, 0x03},
-    {0xE1, 0x77},
-    {RESET, 0x00},
-    {0, 0},
-};
-
-#define NUM_BRIGHTNESS_LEVELS (5)
-static const uint8_t brightness_regs[NUM_BRIGHTNESS_LEVELS + 1][5] = {
-    {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
-    {0x00, 0x04, 0x09, 0x00, 0x00 }, /* -2 */
-    {0x00, 0x04, 0x09, 0x10, 0x00 }, /* -1 */
-    {0x00, 0x04, 0x09, 0x20, 0x00 }, /*  0 */
-    {0x00, 0x04, 0x09, 0x30, 0x00 }, /* +1 */
-    {0x00, 0x04, 0x09, 0x40, 0x00 }, /* +2 */
-};
-
-#define NUM_CONTRAST_LEVELS (5)
-static const uint8_t contrast_regs[NUM_CONTRAST_LEVELS + 1][7] = {
-    {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA, BPDATA, BPDATA },
-    {0x00, 0x04, 0x07, 0x20, 0x18, 0x34, 0x06 }, /* -2 */
-    {0x00, 0x04, 0x07, 0x20, 0x1c, 0x2a, 0x06 }, /* -1 */
-    {0x00, 0x04, 0x07, 0x20, 0x20, 0x20, 0x06 }, /*  0 */
-    {0x00, 0x04, 0x07, 0x20, 0x24, 0x16, 0x06 }, /* +1 */
-    {0x00, 0x04, 0x07, 0x20, 0x28, 0x0c, 0x06 }, /* +2 */
-};
-
-#define NUM_SATURATION_LEVELS (5)
-static const uint8_t saturation_regs[NUM_SATURATION_LEVELS + 1][5] = {
-    {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
-    {0x00, 0x02, 0x03, 0x28, 0x28 }, /* -2 */
-    {0x00, 0x02, 0x03, 0x38, 0x38 }, /* -1 */
-    {0x00, 0x02, 0x03, 0x48, 0x48 }, /*  0 */
-    {0x00, 0x02, 0x03, 0x58, 0x58 }, /* +1 */
-    {0x00, 0x02, 0x03, 0x68, 0x68 }, /* +2 */
-};
-
-#define NUM_SPECIAL_EFFECTS (7)
-static const uint8_t special_effects_regs[NUM_SPECIAL_EFFECTS + 1][5] = {
-    {BPADDR, BPDATA, BPADDR, BPDATA, BPDATA },
-    {0x00, 0X00, 0x05, 0X80, 0X80 }, /* no effect */
-    {0x00, 0X40, 0x05, 0X80, 0X80 }, /* negative */
-    {0x00, 0X18, 0x05, 0X80, 0X80 }, /* black and white */
-    {0x00, 0X18, 0x05, 0X40, 0XC0 }, /* reddish */
-    {0x00, 0X18, 0x05, 0X40, 0X40 }, /* greenish */
-    {0x00, 0X18, 0x05, 0XA0, 0X40 }, /* blue */
-    {0x00, 0X18, 0x05, 0X40, 0XA6 }, /* retro */
-};
-
-#define NUM_WB_MODES (4)
-static const uint8_t wb_modes_regs[NUM_WB_MODES + 1][3] = {
-    {0XCC, 0XCD, 0XCE },
-    {0x5E, 0X41, 0x54 }, /* sunny */
-    {0x65, 0X41, 0x4F }, /* cloudy */
-    {0x52, 0X41, 0x66 }, /* office */
-    {0x42, 0X3F, 0x71 }, /* home */
-};
-
-#define NUM_AE_LEVELS (5)
-static const uint8_t ae_levels_regs[NUM_AE_LEVELS + 1][3] = {
-    { AEW,  AEB,  VV  },
-    {0x20, 0X18, 0x60 },
-    {0x34, 0X1C, 0x00 },
-    {0x3E, 0X38, 0x81 },
-    {0x48, 0X40, 0x81 },
-    {0x58, 0X50, 0x92 },
-};
-
-const uint8_t agc_gain_tbl[31] = {
-    0x00, 0x10, 0x18, 0x30, 0x34, 0x38, 0x3C, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7A, 0x7C, 0x7E, 0xF0,
-    0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
-};
-
-#endif /* _OV2640_SETTINGS_H_ */

+ 0 - 34
code/components/esp32-camera-master/sensors/private_include/ov3660.h

@@ -1,34 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV3660 driver.
- *
- */
-#ifndef __OV3660_H__
-#define __OV3660_H__
-
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int ov3660_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int ov3660_init(sensor_t *sensor);
-
-#endif // __OV3660_H__

+ 0 - 211
code/components/esp32-camera-master/sensors/private_include/ov3660_regs.h

@@ -1,211 +0,0 @@
-/*
- * OV3660 register definitions.
- */
-#ifndef __OV3660_REG_REGS_H__
-#define __OV3660_REG_REGS_H__
-
-/* system control registers */
-#define SYSTEM_CTROL0   0x3008  // Bit[7]: Software reset 
-                                // Bit[6]: Software power down 
-                                // Bit[5]: Reserved 
-                                // Bit[4]: SRB clock SYNC enable 
-                                // Bit[3]: Isolation suspend select 
-                                // Bit[2:0]: Not used
-
-/* output format control registers */
-#define FORMAT_CTRL     0x501F // Format select
-                                // Bit[2:0]:
-                                //  000: YUV422
-                                //  001: RGB
-                                //  010: Dither
-                                //  011: RAW after DPC
-                                //  101: RAW after CIP
-
-/* format control registers */
-#define FORMAT_CTRL00   0x4300
-
-/* frame control registers */
-#define FRAME_CTRL01    0x4201  // Control Passed Frame Number When both ON and OFF number set to 0x00,frame control is in bypass mode
-                                // Bit[7:4]: Not used
-                                // Bit[3:0]: Frame ON number
-#define FRAME_CTRL02    0x4202  // Control Masked Frame Number When both ON and OFF number set to 0x00,frame control is in bypass mode
-                                // Bit[7:4]: Not used
-                                // BIT[3:0]: Frame OFF number
-
-/* ISP top control registers */
-#define PRE_ISP_TEST_SETTING_1  0x503D  // Bit[7]: Test enable
-                                        //         0: Test disable
-                                        //         1: Color bar enable
-                                        // Bit[6]: Rolling
-                                        // Bit[5]: Transparent
-                                        // Bit[4]: Square black and white
-                                        // Bit[3:2]: Color bar style
-                                        //         00: Standard 8 color bar
-                                        //         01: Gradual change at vertical mode 1
-                                        //         10: Gradual change at horizontal
-                                        //         11: Gradual change at vertical mode 2
-                                        // Bit[1:0]: Test select
-                                        //         00: Color bar
-                                        //         01: Random data
-                                        //         10: Square data
-                                        //         11: Black image
-
-//exposure = {0x3500[3:0], 0x3501[7:0], 0x3502[7:0]} / 16 × tROW
-
-/* AEC/AGC control functions */
-#define AEC_PK_MANUAL   0x3503  // AEC Manual Mode Control
-                                // Bit[7:6]: Reserved
-                                // Bit[5]: Gain delay option
-                                //         Valid when 0x3503[4]=1’b0
-                                //         0: Delay one frame latch
-                                //         1: One frame latch
-                                // Bit[4:2]: Reserved
-                                // Bit[1]: AGC manual
-                                //         0: Auto enable
-                                //         1: Manual enable
-                                // Bit[0]: AEC manual
-                                //         0: Auto enable
-                                //         1: Manual enable
-
-//gain = {0x350A[1:0], 0x350B[7:0]} / 16
-
-/* mirror and flip registers */
-#define TIMING_TC_REG20 0x3820  // Timing Control Register
-                                // Bit[2:1]: Vertical flip enable
-                                //         00: Normal
-                                //         11: Vertical flip
-                                // Bit[0]: Vertical binning enable
-#define TIMING_TC_REG21 0x3821  // Timing Control Register
-                                // Bit[5]: Compression Enable
-                                // Bit[2:1]: Horizontal mirror enable
-                                //         00: Normal
-                                //         11: Horizontal mirror
-                                // Bit[0]: Horizontal binning enable
-
-#define CLOCK_POL_CONTROL 0x4740// Bit[5]: PCLK polarity 0: active low
-                                //          1: active high
-                                // Bit[3]: Gate PCLK under VSYNC
-                                // Bit[2]: Gate PCLK under HREF
-                                // Bit[1]: HREF polarity
-                                //          0: active low
-                                //          1: active high
-                                // Bit[0] VSYNC polarity
-                                //          0: active low
-                                //          1: active high
-#define DRIVE_CAPABILITY 0x302c // Bit[7:6]:
-                                //          00: 1x
-                                //          01: 2x
-                                //          10: 3x
-                                //          11: 4x
-
-
-#define X_ADDR_ST_H     0x3800 //Bit[3:0]: X address start[11:8]
-#define X_ADDR_ST_L     0x3801 //Bit[7:0]: X address start[7:0]
-#define Y_ADDR_ST_H     0x3802 //Bit[2:0]: Y address start[10:8]
-#define Y_ADDR_ST_L     0x3803 //Bit[7:0]: Y address start[7:0]
-#define X_ADDR_END_H    0x3804 //Bit[3:0]: X address end[11:8]
-#define X_ADDR_END_L    0x3805 //Bit[7:0]:
-#define Y_ADDR_END_H    0x3806 //Bit[2:0]: Y address end[10:8]
-#define Y_ADDR_END_L    0x3807 //Bit[7:0]:
-// Size after scaling
-#define X_OUTPUT_SIZE_H 0x3808 //Bit[3:0]: DVP output horizontal width[11:8]
-#define X_OUTPUT_SIZE_L 0x3809 //Bit[7:0]:
-#define Y_OUTPUT_SIZE_H 0x380a //Bit[2:0]: DVP output vertical height[10:8]
-#define Y_OUTPUT_SIZE_L 0x380b //Bit[7:0]:
-#define X_TOTAL_SIZE_H  0x380c //Bit[3:0]: Total horizontal size[11:8]
-#define X_TOTAL_SIZE_L  0x380d //Bit[7:0]:
-#define Y_TOTAL_SIZE_H  0x380e //Bit[7:0]: Total vertical size[15:8]
-#define Y_TOTAL_SIZE_L  0x380f //Bit[7:0]:
-#define X_OFFSET_H      0x3810 //Bit[3:0]: ISP horizontal offset[11:8]
-#define X_OFFSET_L      0x3811 //Bit[7:0]:
-#define Y_OFFSET_H      0x3812 //Bit[2:0]: ISP vertical offset[10:8]
-#define Y_OFFSET_L      0x3813 //Bit[7:0]:
-#define X_INCREMENT     0x3814 //Bit[7:4]: Horizontal odd subsample increment
-                               //Bit[3:0]: Horizontal even subsample increment
-#define Y_INCREMENT     0x3815 //Bit[7:4]: Vertical odd subsample increment
-                               //Bit[3:0]: Vertical even subsample increment
-// Size before scaling
-//#define X_INPUT_SIZE    (X_ADDR_END - X_ADDR_ST + 1 - (2 * X_OFFSET))
-//#define Y_INPUT_SIZE    (Y_ADDR_END - Y_ADDR_ST + 1 - (2 * Y_OFFSET))
-
-#define ISP_CONTROL_01   0x5001 // Bit[5]: Scale enable
-                                //          0: Disable
-                                //          1: Enable
-
-#define SCALE_CTRL_1     0x5601 // Bit[6:4]: HDIV RW
-                                //          DCW scale times
-                                //          000: DCW 1 time
-                                //          001: DCW 2 times
-                                //          010: DCW 4 times
-                                //          100: DCW 8 times
-                                //          101: DCW 16 times
-                                //          Others: DCW 16 times
-                                // Bit[2:0]: VDIV RW
-                                //          DCW scale times
-                                //          000: DCW 1 time
-                                //          001: DCW 2 times
-                                //          010: DCW 4 times
-                                //          100: DCW 8 times
-                                //          101: DCW 16 times
-                                //          Others: DCW 16 times
-
-#define SCALE_CTRL_2     0x5602 // X_SCALE High Bits
-#define SCALE_CTRL_3     0x5603 // X_SCALE Low Bits
-#define SCALE_CTRL_4     0x5604 // Y_SCALE High Bits
-#define SCALE_CTRL_5     0x5605 // Y_SCALE Low Bits
-#define SCALE_CTRL_6     0x5606 // Bit[3:0]: V Offset
-
-#define PCLK_RATIO       0x3824 // Bit[4:0]: PCLK ratio manual
-#define VFIFO_CTRL0C     0x460C // Bit[1]: PCLK manual enable
-                                //          0: Auto
-                                //          1: Manual by PCLK_RATIO
-
-#define VFIFO_X_SIZE_H   0x4602
-#define VFIFO_X_SIZE_L   0x4603
-#define VFIFO_Y_SIZE_H   0x4604
-#define VFIFO_Y_SIZE_L   0x4605
-
-#define SC_PLLS_CTRL0    0x303a // Bit[7]: PLLS bypass
-#define SC_PLLS_CTRL1    0x303b // Bit[4:0]: PLLS multiplier
-#define SC_PLLS_CTRL2    0x303c // Bit[6:4]: PLLS charge pump control
-                                // Bit[3:0]: PLLS system divider
-#define SC_PLLS_CTRL3    0x303d // Bit[5:4]: PLLS pre-divider
-                                //          00: 1
-                                //          01: 1.5
-                                //          10: 2
-                                //          11: 3
-                                // Bit[2]: PLLS root-divider - 1
-                                // Bit[1:0]: PLLS seld5
-                                //          00: 1
-                                //          01: 1
-                                //          10: 2
-                                //          11: 2.5
-
-#define COMPRESSION_CTRL00 0x4400 //
-#define COMPRESSION_CTRL01 0x4401 //
-#define COMPRESSION_CTRL02 0x4402 //
-#define COMPRESSION_CTRL03 0x4403 //
-#define COMPRESSION_CTRL04 0x4404 //
-#define COMPRESSION_CTRL05 0x4405 //
-#define COMPRESSION_CTRL06 0x4406 //
-#define COMPRESSION_CTRL07 0x4407 // Bit[5:0]: QS
-#define COMPRESSION_ISI_CTRL 0x4408 //
-#define COMPRESSION_CTRL09 0x4409 //
-#define COMPRESSION_CTRL0a 0x440a //
-#define COMPRESSION_CTRL0b 0x440b //
-#define COMPRESSION_CTRL0c 0x440c //
-#define COMPRESSION_CTRL0d 0x440d //
-#define COMPRESSION_CTRL0E 0x440e //
-
-/**
- * @brief register value
- */
-#define TEST_COLOR_BAR  0xC0    /* Enable Color Bar roling Test */
-
-#define AEC_PK_MANUAL_AGC_MANUALEN  0x02    /* Enable AGC Manual enable */
-#define AEC_PK_MANUAL_AEC_MANUALEN  0x01    /* Enable AEC Manual enable */
-
-#define TIMING_TC_REG20_VFLIP   0x06 /* Vertical flip enable */
-#define TIMING_TC_REG21_HMIRROR 0x06 /* Horizontal mirror enable */
-
-#endif // __OV3660_REG_REGS_H__

+ 0 - 318
code/components/esp32-camera-master/sensors/private_include/ov3660_settings.h

@@ -1,318 +0,0 @@
-#ifndef _OV3660_SETTINGS_H_
-#define _OV3660_SETTINGS_H_
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "esp_attr.h"
-#include "ov3660_regs.h"
-
-static const ratio_settings_t ratio_table[] = {
-    //  mw,   mh,  sx,  sy,   ex,   ey, ox, oy,   tx,   ty
-    { 2048, 1536,   0,   0, 2079, 1547, 16, 6, 2300, 1564 }, //4x3
-    { 1920, 1280,  64, 128, 2015, 1419, 16, 6, 2172, 1436 }, //3x2
-    { 2048, 1280,   0, 128, 2079, 1419, 16, 6, 2300, 1436 }, //16x10
-    { 1920, 1152,  64, 192, 2015, 1355, 16, 6, 2172, 1372 }, //5x3
-    { 1920, 1080,  64, 242, 2015, 1333, 16, 6, 2172, 1322 }, //16x9
-    { 2048,  880,   0, 328, 2079, 1219, 16, 6, 2300, 1236 }, //21x9
-    { 1920, 1536,  64,   0, 2015, 1547, 16, 6, 2172, 1564 }, //5x4
-    { 1536, 1536, 256,   0, 1823, 1547, 16, 6, 2044, 1564 }, //1x1
-    {  864, 1536, 592,   0, 1487, 1547, 16, 6, 2044, 1564 }  //9x16
-};
-
-#define REG_DLY 0xffff
-#define REGLIST_TAIL 0x0000
-
-static const DRAM_ATTR uint16_t sensor_default_regs[][2] = {
-    {SYSTEM_CTROL0, 0x82},  // software reset
-    {REG_DLY, 10}, // delay 10ms
-
-    {0x3103, 0x13},
-    {SYSTEM_CTROL0, 0x42},
-    {0x3017, 0xff},
-    {0x3018, 0xff},
-    {DRIVE_CAPABILITY, 0xc3},
-    {CLOCK_POL_CONTROL, 0x21},
-
-    {0x3611, 0x01},
-    {0x3612, 0x2d},
-
-    {0x3032, 0x00},
-    {0x3614, 0x80},
-    {0x3618, 0x00},
-    {0x3619, 0x75},
-    {0x3622, 0x80},
-    {0x3623, 0x00},
-    {0x3624, 0x03},
-    {0x3630, 0x52},
-    {0x3632, 0x07},
-    {0x3633, 0xd2},
-    {0x3704, 0x80},
-    {0x3708, 0x66},
-    {0x3709, 0x12},
-    {0x370b, 0x12},
-    {0x3717, 0x00},
-    {0x371b, 0x60},
-    {0x371c, 0x00},
-    {0x3901, 0x13},
-
-    {0x3600, 0x08},
-    {0x3620, 0x43},
-    {0x3702, 0x20},
-    {0x3739, 0x48},
-    {0x3730, 0x20},
-    {0x370c, 0x0c},
-
-    {0x3a18, 0x00},
-    {0x3a19, 0xf8},
-
-    {0x3000, 0x10},
-    {0x3004, 0xef},
-
-    {0x6700, 0x05},
-    {0x6701, 0x19},
-    {0x6702, 0xfd},
-    {0x6703, 0xd1},
-    {0x6704, 0xff},
-    {0x6705, 0xff},
-
-    {0x3c01, 0x80},
-    {0x3c00, 0x04},
-    {0x3a08, 0x00}, {0x3a09, 0x62}, //50Hz Band Width Step (10bit)
-    {0x3a0e, 0x08}, //50Hz Max Bands in One Frame (6 bit)
-    {0x3a0a, 0x00}, {0x3a0b, 0x52}, //60Hz Band Width Step (10bit)
-    {0x3a0d, 0x09}, //60Hz Max Bands in One Frame (6 bit)
-
-    {0x3a00, 0x3a},//night mode off
-    {0x3a14, 0x09},
-    {0x3a15, 0x30},
-    {0x3a02, 0x09},
-    {0x3a03, 0x30},
-
-    {COMPRESSION_CTRL0E, 0x08},
-    {0x4520, 0x0b},
-    {0x460b, 0x37},
-    {0x4713, 0x02},
-    {0x471c, 0xd0},
-    {0x5086, 0x00},
-
-    {0x5002, 0x00},
-    {0x501f, 0x00},
-
-    {SYSTEM_CTROL0, 0x02},
-
-    {0x5180, 0xff},
-    {0x5181, 0xf2},
-    {0x5182, 0x00},
-    {0x5183, 0x14},
-    {0x5184, 0x25},
-    {0x5185, 0x24},
-    {0x5186, 0x16},
-    {0x5187, 0x16},
-    {0x5188, 0x16},
-    {0x5189, 0x68},
-    {0x518a, 0x60},
-    {0x518b, 0xe0},
-    {0x518c, 0xb2},
-    {0x518d, 0x42},
-    {0x518e, 0x35},
-    {0x518f, 0x56},
-    {0x5190, 0x56},
-    {0x5191, 0xf8},
-    {0x5192, 0x04},
-    {0x5193, 0x70},
-    {0x5194, 0xf0},
-    {0x5195, 0xf0},
-    {0x5196, 0x03},
-    {0x5197, 0x01},
-    {0x5198, 0x04},
-    {0x5199, 0x12},
-    {0x519a, 0x04},
-    {0x519b, 0x00},
-    {0x519c, 0x06},
-    {0x519d, 0x82},
-    {0x519e, 0x38},
-
-    {0x5381, 0x1d},
-    {0x5382, 0x60},
-    {0x5383, 0x03},
-    {0x5384, 0x0c},
-    {0x5385, 0x78},
-    {0x5386, 0x84},
-    {0x5387, 0x7d},
-    {0x5388, 0x6b},
-    {0x5389, 0x12},
-    {0x538a, 0x01},
-    {0x538b, 0x98},
-
-    {0x5480, 0x01},
-//    {0x5481, 0x05},
-//    {0x5482, 0x09},
-//    {0x5483, 0x10},
-//    {0x5484, 0x3a},
-//    {0x5485, 0x4c},
-//    {0x5486, 0x5a},
-//    {0x5487, 0x68},
-//    {0x5488, 0x74},
-//    {0x5489, 0x80},
-//    {0x548a, 0x8e},
-//    {0x548b, 0xa4},
-//    {0x548c, 0xb4},
-//    {0x548d, 0xc8},
-//    {0x548e, 0xde},
-//    {0x548f, 0xf0},
-//    {0x5490, 0x15},
-
-    {0x5000, 0xa7},
-    {0x5800, 0x0C},
-    {0x5801, 0x09},
-    {0x5802, 0x0C},
-    {0x5803, 0x0C},
-    {0x5804, 0x0D},
-    {0x5805, 0x17},
-    {0x5806, 0x06},
-    {0x5807, 0x05},
-    {0x5808, 0x04},
-    {0x5809, 0x06},
-    {0x580a, 0x09},
-    {0x580b, 0x0E},
-    {0x580c, 0x05},
-    {0x580d, 0x01},
-    {0x580e, 0x01},
-    {0x580f, 0x01},
-    {0x5810, 0x05},
-    {0x5811, 0x0D},
-    {0x5812, 0x05},
-    {0x5813, 0x01},
-    {0x5814, 0x01},
-    {0x5815, 0x01},
-    {0x5816, 0x05},
-    {0x5817, 0x0D},
-    {0x5818, 0x08},
-    {0x5819, 0x06},
-    {0x581a, 0x05},
-    {0x581b, 0x07},
-    {0x581c, 0x0B},
-    {0x581d, 0x0D},
-    {0x581e, 0x12},
-    {0x581f, 0x0D},
-    {0x5820, 0x0E},
-    {0x5821, 0x10},
-    {0x5822, 0x10},
-    {0x5823, 0x1E},
-    {0x5824, 0x53},
-    {0x5825, 0x15},
-    {0x5826, 0x05},
-    {0x5827, 0x14},
-    {0x5828, 0x54},
-    {0x5829, 0x25},
-    {0x582a, 0x33},
-    {0x582b, 0x33},
-    {0x582c, 0x34},
-    {0x582d, 0x16},
-    {0x582e, 0x24},
-    {0x582f, 0x41},
-    {0x5830, 0x50},
-    {0x5831, 0x42},
-    {0x5832, 0x15},
-    {0x5833, 0x25},
-    {0x5834, 0x34},
-    {0x5835, 0x33},
-    {0x5836, 0x24},
-    {0x5837, 0x26},
-    {0x5838, 0x54},
-    {0x5839, 0x25},
-    {0x583a, 0x15},
-    {0x583b, 0x25},
-    {0x583c, 0x53},
-    {0x583d, 0xCF},
-
-    {0x3a0f, 0x30},
-    {0x3a10, 0x28},
-    {0x3a1b, 0x30},
-    {0x3a1e, 0x28},
-    {0x3a11, 0x60},
-    {0x3a1f, 0x14},
-
-    {0x5302, 0x28},
-    {0x5303, 0x20},
-
-    {0x5306, 0x1c}, //de-noise offset 1
-    {0x5307, 0x28}, //de-noise offset 2
-
-    {0x4002, 0xc5},
-    {0x4003, 0x81},
-    {0x4005, 0x12},
-
-    {0x5688, 0x11},
-    {0x5689, 0x11},
-    {0x568a, 0x11},
-    {0x568b, 0x11},
-    {0x568c, 0x11},
-    {0x568d, 0x11},
-    {0x568e, 0x11},
-    {0x568f, 0x11},
-
-    {0x5580, 0x06},
-    {0x5588, 0x00},
-    {0x5583, 0x40},
-    {0x5584, 0x2c},
-
-    {ISP_CONTROL_01, 0x83}, // turn color matrix, awb and SDE
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_jpeg[][2] = {
-    {FORMAT_CTRL, 0x00}, // YUV422
-    {FORMAT_CTRL00, 0x30}, // YUYV
-    {0x3002, 0x00},//0x1c to 0x00 !!!
-    {0x3006, 0xff},//0xc3 to 0xff !!!
-    {0x471c, 0x50},//0xd0 to 0x50 !!!
-    {REGLIST_TAIL, 0x00}, // tail
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_raw[][2] = {
-    {FORMAT_CTRL00, 0x00}, // RAW
-    {REGLIST_TAIL, 0x00}
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_grayscale[][2] = {
-    {FORMAT_CTRL, 0x00}, // YUV422
-    {FORMAT_CTRL00, 0x10}, // Y8
-    {REGLIST_TAIL, 0x00}
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_yuv422[][2] = {
-    {FORMAT_CTRL, 0x00}, // YUV422
-    {FORMAT_CTRL00, 0x30}, // YUYV
-    {REGLIST_TAIL, 0x00}
-};
-
-static const DRAM_ATTR uint16_t sensor_fmt_rgb565[][2] = {
-    {FORMAT_CTRL, 0x01}, // RGB
-    {FORMAT_CTRL00, 0x61}, // RGB565 (BGR)
-    {REGLIST_TAIL, 0x00}
-};
-
-static const DRAM_ATTR uint8_t sensor_saturation_levels[9][11] = {
-    {0x1d, 0x60, 0x03, 0x07, 0x48, 0x4f, 0x4b, 0x40, 0x0b, 0x01, 0x98},//-4
-    {0x1d, 0x60, 0x03, 0x08, 0x54, 0x5c, 0x58, 0x4b, 0x0d, 0x01, 0x98},//-3
-    {0x1d, 0x60, 0x03, 0x0a, 0x60, 0x6a, 0x64, 0x56, 0x0e, 0x01, 0x98},//-2
-    {0x1d, 0x60, 0x03, 0x0b, 0x6c, 0x77, 0x70, 0x60, 0x10, 0x01, 0x98},//-1
-    {0x1d, 0x60, 0x03, 0x0c, 0x78, 0x84, 0x7d, 0x6b, 0x12, 0x01, 0x98},//0
-    {0x1d, 0x60, 0x03, 0x0d, 0x84, 0x91, 0x8a, 0x76, 0x14, 0x01, 0x98},//+1
-    {0x1d, 0x60, 0x03, 0x0e, 0x90, 0x9e, 0x96, 0x80, 0x16, 0x01, 0x98},//+2
-    {0x1d, 0x60, 0x03, 0x10, 0x9c, 0xac, 0xa2, 0x8b, 0x17, 0x01, 0x98},//+3
-    {0x1d, 0x60, 0x03, 0x11, 0xa8, 0xb9, 0xaf, 0x96, 0x19, 0x01, 0x98},//+4
-};
-
-static const DRAM_ATTR uint8_t sensor_special_effects[7][4] = {
-    {0x06, 0x40, 0x2c, 0x08},//Normal
-    {0x46, 0x40, 0x28, 0x08},//Negative
-    {0x1e, 0x80, 0x80, 0x08},//Grayscale
-    {0x1e, 0x80, 0xc0, 0x08},//Red Tint
-    {0x1e, 0x60, 0x60, 0x08},//Green Tint
-    {0x1e, 0xa0, 0x40, 0x08},//Blue Tint
-    {0x1e, 0x40, 0xa0, 0x08},//Sepia
-};
-
-#endif

+ 0 - 27
code/components/esp32-camera-master/sensors/private_include/ov5640.h

@@ -1,27 +0,0 @@
-
-#ifndef __OV5640_H__
-#define __OV5640_H__
-
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int ov5640_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int ov5640_init(sensor_t *sensor);
-
-#endif // __OV5640_H__

+ 0 - 213
code/components/esp32-camera-master/sensors/private_include/ov5640_regs.h

@@ -1,213 +0,0 @@
-/*
- * OV5640 register definitions.
- */
-#ifndef __OV5640_REG_REGS_H__
-#define __OV5640_REG_REGS_H__
-
-/* system control registers */
-#define SYSTEM_CTROL0   0x3008  // Bit[7]: Software reset 
-                                // Bit[6]: Software power down 
-                                // Bit[5]: Reserved 
-                                // Bit[4]: SRB clock SYNC enable 
-                                // Bit[3]: Isolation suspend select 
-                                // Bit[2:0]: Not used
-
-#define DRIVE_CAPABILITY 0x302c // Bit[7:6]:
-                                //          00: 1x
-                                //          01: 2x
-                                //          10: 3x
-                                //          11: 4x
-
-#define SC_PLLS_CTRL0    0x303a // Bit[7]: PLLS bypass
-#define SC_PLLS_CTRL1    0x303b // Bit[4:0]: PLLS multiplier
-#define SC_PLLS_CTRL2    0x303c // Bit[6:4]: PLLS charge pump control
-                                // Bit[3:0]: PLLS system divider
-#define SC_PLLS_CTRL3    0x303d // Bit[5:4]: PLLS pre-divider
-                                //          00: 1
-                                //          01: 1.5
-                                //          10: 2
-                                //          11: 3
-                                // Bit[2]: PLLS root-divider - 1
-                                // Bit[1:0]: PLLS seld5
-                                //          00: 1
-                                //          01: 1
-                                //          10: 2
-                                //          11: 2.5
-
-/* AEC/AGC control functions */
-#define AEC_PK_MANUAL   0x3503  // AEC Manual Mode Control
-                                // Bit[7:6]: Reserved
-                                // Bit[5]: Gain delay option
-                                //         Valid when 0x3503[4]=1’b0
-                                //         0: Delay one frame latch
-                                //         1: One frame latch
-                                // Bit[4:2]: Reserved
-                                // Bit[1]: AGC manual
-                                //         0: Auto enable
-                                //         1: Manual enable
-                                // Bit[0]: AEC manual
-                                //         0: Auto enable
-                                //         1: Manual enable
-
-//gain = {0x350A[1:0], 0x350B[7:0]} / 16
-
-
-#define X_ADDR_ST_H     0x3800 //Bit[3:0]: X address start[11:8]
-#define X_ADDR_ST_L     0x3801 //Bit[7:0]: X address start[7:0]
-#define Y_ADDR_ST_H     0x3802 //Bit[2:0]: Y address start[10:8]
-#define Y_ADDR_ST_L     0x3803 //Bit[7:0]: Y address start[7:0]
-#define X_ADDR_END_H    0x3804 //Bit[3:0]: X address end[11:8]
-#define X_ADDR_END_L    0x3805 //Bit[7:0]:
-#define Y_ADDR_END_H    0x3806 //Bit[2:0]: Y address end[10:8]
-#define Y_ADDR_END_L    0x3807 //Bit[7:0]:
-// Size after scaling
-#define X_OUTPUT_SIZE_H 0x3808 //Bit[3:0]: DVP output horizontal width[11:8]
-#define X_OUTPUT_SIZE_L 0x3809 //Bit[7:0]:
-#define Y_OUTPUT_SIZE_H 0x380a //Bit[2:0]: DVP output vertical height[10:8]
-#define Y_OUTPUT_SIZE_L 0x380b //Bit[7:0]:
-#define X_TOTAL_SIZE_H  0x380c //Bit[3:0]: Total horizontal size[11:8]
-#define X_TOTAL_SIZE_L  0x380d //Bit[7:0]:
-#define Y_TOTAL_SIZE_H  0x380e //Bit[7:0]: Total vertical size[15:8]
-#define Y_TOTAL_SIZE_L  0x380f //Bit[7:0]:
-#define X_OFFSET_H      0x3810 //Bit[3:0]: ISP horizontal offset[11:8]
-#define X_OFFSET_L      0x3811 //Bit[7:0]:
-#define Y_OFFSET_H      0x3812 //Bit[2:0]: ISP vertical offset[10:8]
-#define Y_OFFSET_L      0x3813 //Bit[7:0]:
-#define X_INCREMENT     0x3814 //Bit[7:4]: Horizontal odd subsample increment
-                               //Bit[3:0]: Horizontal even subsample increment
-#define Y_INCREMENT     0x3815 //Bit[7:4]: Vertical odd subsample increment
-                               //Bit[3:0]: Vertical even subsample increment
-// Size before scaling
-//#define X_INPUT_SIZE    (X_ADDR_END - X_ADDR_ST + 1 - (2 * X_OFFSET))
-//#define Y_INPUT_SIZE    (Y_ADDR_END - Y_ADDR_ST + 1 - (2 * Y_OFFSET))
-
-/* mirror and flip registers */
-#define TIMING_TC_REG20 0x3820  // Timing Control Register
-                                // Bit[2:1]: Vertical flip enable
-                                //         00: Normal
-                                //         11: Vertical flip
-                                // Bit[0]: Vertical binning enable
-#define TIMING_TC_REG21 0x3821  // Timing Control Register
-                                // Bit[5]: Compression Enable
-                                // Bit[2:1]: Horizontal mirror enable
-                                //         00: Normal
-                                //         11: Horizontal mirror
-                                // Bit[0]: Horizontal binning enable
-
-#define PCLK_RATIO       0x3824 // Bit[4:0]: PCLK ratio manual
-
-/* frame control registers */
-#define FRAME_CTRL01    0x4201  // Control Passed Frame Number When both ON and OFF number set to 0x00,frame control is in bypass mode
-                                // Bit[7:4]: Not used
-                                // Bit[3:0]: Frame ON number
-#define FRAME_CTRL02    0x4202  // Control Masked Frame Number When both ON and OFF number set to 0x00,frame control is in bypass mode
-                                // Bit[7:4]: Not used
-                                // BIT[3:0]: Frame OFF number
-
-/* format control registers */
-#define FORMAT_CTRL00   0x4300
-
-#define CLOCK_POL_CONTROL 0x4740// Bit[5]: PCLK polarity 0: active low
-                                //          1: active high
-                                // Bit[3]: Gate PCLK under VSYNC
-                                // Bit[2]: Gate PCLK under HREF
-                                // Bit[1]: HREF polarity
-                                //          0: active low
-                                //          1: active high
-                                // Bit[0] VSYNC polarity
-                                //          0: active low
-                                //          1: active high
-
-#define ISP_CONTROL_01   0x5001 // Bit[5]: Scale enable
-                                //          0: Disable
-                                //          1: Enable
-
-/* output format control registers */
-#define FORMAT_CTRL     0x501F // Format select
-                                // Bit[2:0]:
-                                //  000: YUV422
-                                //  001: RGB
-                                //  010: Dither
-                                //  011: RAW after DPC
-                                //  101: RAW after CIP
-
-/* ISP top control registers */
-#define PRE_ISP_TEST_SETTING_1  0x503D  // Bit[7]: Test enable
-                                        //         0: Test disable
-                                        //         1: Color bar enable
-                                        // Bit[6]: Rolling
-                                        // Bit[5]: Transparent
-                                        // Bit[4]: Square black and white
-                                        // Bit[3:2]: Color bar style
-                                        //         00: Standard 8 color bar
-                                        //         01: Gradual change at vertical mode 1
-                                        //         10: Gradual change at horizontal
-                                        //         11: Gradual change at vertical mode 2
-                                        // Bit[1:0]: Test select
-                                        //         00: Color bar
-                                        //         01: Random data
-                                        //         10: Square data
-                                        //         11: Black image
-
-//exposure = {0x3500[3:0], 0x3501[7:0], 0x3502[7:0]} / 16 × tROW
-
-#define SCALE_CTRL_1     0x5601 // Bit[6:4]: HDIV RW
-                                //          DCW scale times
-                                //          000: DCW 1 time
-                                //          001: DCW 2 times
-                                //          010: DCW 4 times
-                                //          100: DCW 8 times
-                                //          101: DCW 16 times
-                                //          Others: DCW 16 times
-                                // Bit[2:0]: VDIV RW
-                                //          DCW scale times
-                                //          000: DCW 1 time
-                                //          001: DCW 2 times
-                                //          010: DCW 4 times
-                                //          100: DCW 8 times
-                                //          101: DCW 16 times
-                                //          Others: DCW 16 times
-
-#define SCALE_CTRL_2     0x5602 // X_SCALE High Bits
-#define SCALE_CTRL_3     0x5603 // X_SCALE Low Bits
-#define SCALE_CTRL_4     0x5604 // Y_SCALE High Bits
-#define SCALE_CTRL_5     0x5605 // Y_SCALE Low Bits
-#define SCALE_CTRL_6     0x5606 // Bit[3:0]: V Offset
-
-#define VFIFO_CTRL0C     0x460C // Bit[1]: PCLK manual enable
-                                //          0: Auto
-                                //          1: Manual by PCLK_RATIO
-
-#define VFIFO_X_SIZE_H   0x4602
-#define VFIFO_X_SIZE_L   0x4603
-#define VFIFO_Y_SIZE_H   0x4604
-#define VFIFO_Y_SIZE_L   0x4605
-
-#define COMPRESSION_CTRL00 0x4400 //
-#define COMPRESSION_CTRL01 0x4401 //
-#define COMPRESSION_CTRL02 0x4402 //
-#define COMPRESSION_CTRL03 0x4403 //
-#define COMPRESSION_CTRL04 0x4404 //
-#define COMPRESSION_CTRL05 0x4405 //
-#define COMPRESSION_CTRL06 0x4406 //
-#define COMPRESSION_CTRL07 0x4407 // Bit[5:0]: QS
-#define COMPRESSION_ISI_CTRL 0x4408 //
-#define COMPRESSION_CTRL09 0x4409 //
-#define COMPRESSION_CTRL0a 0x440a //
-#define COMPRESSION_CTRL0b 0x440b //
-#define COMPRESSION_CTRL0c 0x440c //
-#define COMPRESSION_CTRL0d 0x440d //
-#define COMPRESSION_CTRL0E 0x440e //
-
-/**
- * @brief register value
- */
-#define TEST_COLOR_BAR  0xC0    /* Enable Color Bar roling Test */
-
-#define AEC_PK_MANUAL_AGC_MANUALEN  0x02    /* Enable AGC Manual enable */
-#define AEC_PK_MANUAL_AEC_MANUALEN  0x01    /* Enable AEC Manual enable */
-
-#define TIMING_TC_REG20_VFLIP   0x06 /* Vertical flip enable */
-#define TIMING_TC_REG21_HMIRROR 0x06 /* Horizontal mirror enable */
-
-#endif // __OV3660_REG_REGS_H__

+ 0 - 33
code/components/esp32-camera-master/sensors/private_include/ov7670.h

@@ -1,33 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * author: Juan Schiavoni <juanjoseschiavoni@hotmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV7670 driver.
- *
- */
-#ifndef __OV7670_H__
-#define __OV7670_H__
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int ov7670_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int ov7670_init(sensor_t *sensor);
-
-#endif // __OV7670_H__

+ 0 - 354
code/components/esp32-camera-master/sensors/private_include/ov7670_regs.h

@@ -1,354 +0,0 @@
-/*
- * This file is for the OpenMV project so the OV7670 can be used
- * author: Juan Schiavoni <juanjoseschiavoni@hotmail.com>
- *
- * OV7670 register definitions.
- */
-#ifndef __OV7670_REG_REGS_H__
-#define __OV7670_REG_REGS_H__
-#define GAIN                    0x00 /* AGC – Gain control gain setting  */
-#define BLUE                    0x01 /* AWB – Blue channel gain setting  */
-#define RED                     0x02 /* AWB – Red channel gain setting   */
-#define VREF                    0x03 /* AWB – Green channel gain setting */
-#define COM1			        0x04 /* Common Control 1 */
-#define BAVG                    0x05 /* U/B Average Level   */
-#define GAVG                    0x06 /* Y/Gb Average Level  */
-#define AECH                    0x07 /* Exposure VAlue - AEC MSB 5 bits  */
-#define RAVG                    0x08 /* V/R Average Level */
-
-#define COM2                    0x09 /* Common Control 2 */
-#define COM2_SOFT_SLEEP         0x10 /* Soft sleep mode  */
-#define COM2_OUT_DRIVE_1x       0x00 /* Output drive capability 1x */
-#define COM2_OUT_DRIVE_2x       0x01 /* Output drive capability 2x */
-#define COM2_OUT_DRIVE_3x       0x02 /* Output drive capability 3x */
-#define COM2_OUT_DRIVE_4x       0x03 /* Output drive capability 4x */
-
-#define REG_PID                 0x0A /* Product ID Number MSB */
-#define REG_VER                 0x0B /* Product ID Number LSB */
-
-#define COM3                    0x0C /* Common Control 3 		 */
-#define COM3_SWAP_OUT           0x40 /* Output data MSB/LSB swap */
-#define COM3_TRI_CLK            0x20 /* Tri-state output clock   */
-#define COM3_TRI_DATA           0x10 /* Tri-state option output  */
-#define COM3_SCALE_EN           0x08 /* Scale enable             */
-#define COM3_DCW                0x04 /* DCW enable               */
-
-#define COM4                    0x0D /* Common Control 4         */
-#define COM4_PLL_BYPASS         0x00 /* Bypass PLL               */
-#define COM4_PLL_4x             0x40 /* PLL frequency 4x         */
-#define COM4_PLL_6x             0x80 /* PLL frequency 6x         */
-#define COM4_PLL_8x             0xc0 /* PLL frequency 8x         */
-#define COM4_AEC_FULL           0x00 /* AEC evaluate full window */
-#define COM4_AEC_1_2            0x10 /* AEC evaluate 1/2 window  */
-#define COM4_AEC_1_4            0x20 /* AEC evaluate 1/4 window  */
-#define COM4_AEC_2_3            0x30 /* AEC evaluate 2/3 window  */
-
-#define COM5                    0x0E /* Common Control 5 */
-#define COM5_AFR                0x80 /* Auto frame rate control ON/OFF selection (night mode) */
-#define COM5_AFR_SPEED          0x40 /* Auto frame rate control speed selection */
-#define COM5_AFR_0              0x00 /* No reduction of frame rate          */
-#define COM5_AFR_1_2            0x10 /* Max reduction to 1/2 frame rate     */
-#define COM5_AFR_1_4            0x20 /* Max reduction to 1/4 frame rate     */
-#define COM5_AFR_1_8            0x30 /* Max reduction to 1/8 frame rate     */
-#define COM5_AFR_4x             0x04 /* Add frame when AGC reaches 4x gain  */
-#define COM5_AFR_8x             0x08 /* Add frame when AGC reaches 8x gain  */
-#define COM5_AFR_16x            0x0c /* Add frame when AGC reaches 16x gain */
-#define COM5_AEC_NO_LIMIT       0x01 /* No limit to AEC increase step       */
-
-#define COM6                    0x0F /* Common Control 6 */
-#define COM6_AUTO_WINDOW        0x01 /* Auto window setting ON/OFF selection when format changes */
-
-#define AEC                     0x10 /* AEC[7:0] (see register AECH for AEC[15:8]) */
-#define CLKRC                   0x11 /* Internal Clock */
-
-#define COM7                    0x12 /* Common Control 7         */
-#define COM7_RESET              0x80 /* SCCB Register Reset      */
-#define COM7_RES_VGA            0x00 /* Resolution VGA           */
-#define COM7_RES_QVGA           0x40 /* Resolution QVGA          */
-#define COM7_BT656              0x20 /* BT.656 protocol ON/OFF   */
-#define COM7_SENSOR_RAW         0x10 /* Sensor RAW               */
-#define COM7_FMT_GBR422         0x00 /* RGB output format GBR422 */
-#define COM7_FMT_RGB565         0x04 /* RGB output format RGB565 */
-#define COM7_FMT_RGB555         0x08 /* RGB output format RGB555 */
-#define COM7_FMT_RGB444         0x0C /* RGB output format RGB444 */
-#define COM7_FMT_YUV            0x00 /* Output format YUV        */
-#define COM7_FMT_P_BAYER        0x01 /* Output format Processed Bayer RAW */
-#define COM7_FMT_RGB            0x04 /* Output format RGB        */
-#define COM7_FMT_R_BAYER        0x03 /* Output format Bayer RAW  */
-#define COM7_SET_FMT(r, x)      ((r&0xFC)|((x&0x5)<<0))
-
-#define COM8                    0x13 /* Common Control 8                */
-#define COM8_FAST_AUTO          0x80 /* Enable fast AGC/AEC algorithm   */
-#define COM8_STEP_VSYNC         0x00 /* AEC - Step size limited to vertical blank */
-#define COM8_STEP_UNLIMIT       0x40 /* AEC - Step size unlimited step size       */
-#define COM8_BANDF_EN           0x20 /* Banding filter ON/OFF */
-#define COM8_AEC_BANDF          0x10 /* Enable AEC below banding value */
-#define COM8_AEC_FINE_EN        0x08 /* Fine AEC ON/OFF control */
-#define COM8_AGC_EN             0x04 /* AGC Enable */
-#define COM8_AWB_EN             0x02 /* AWB Enable */
-#define COM8_AEC_EN             0x01 /* AEC Enable */
-#define COM8_SET_AGC(r, x)      ((r&0xFB)|((x&0x1)<<2))
-#define COM8_SET_AWB(r, x)      ((r&0xFD)|((x&0x1)<<1))
-#define COM8_SET_AEC(r, x)      ((r&0xFE)|((x&0x1)<<0))
-
-#define COM9                    0x14 /* Common Control 9 */
-#define COM9_HISTO_AVG          0x80 /* Histogram or average based AEC/AGC selection */
-#define COM9_AGC_GAIN_2x        0x00 /* Automatic Gain Ceiling 2x  */
-#define COM9_AGC_GAIN_4x        0x10 /* Automatic Gain Ceiling 4x  */
-#define COM9_AGC_GAIN_8x        0x20 /* Automatic Gain Ceiling 8x  */
-#define COM9_AGC_GAIN_16x       0x30 /* Automatic Gain Ceiling 16x */
-#define COM9_AGC_GAIN_32x       0x40 /* Automatic Gain Ceiling 32x */
-#define COM9_DROP_VSYNC         0x04 /* Drop VSYNC output of corrupt frame */
-#define COM9_DROP_HREF          0x02 /* Drop HREF output of corrupt frame  */
-#define COM9_SET_AGC(r, x)      ((r&0x8F)|((x&0x07)<<4))
-
-#define COM10                   0x15 /* Common Control 10 */
-#define COM10_NEGATIVE          0x80 /* Output negative data */
-#define COM10_HSYNC_EN          0x40 /* HREF changes to HSYNC */
-#define COM10_PCLK_FREE         0x00 /* PCLK output option: free running PCLK */
-#define COM10_PCLK_MASK         0x20 /* PCLK output option: masked during horizontal blank  */
-#define COM10_PCLK_REV          0x10 /* PCLK reverse */
-#define COM10_HREF_REV          0x08 /* HREF reverse */
-#define COM10_VSYNC_FALLING     0x00 /* VSYNC changes on falling edge of PCLK */
-#define COM10_VSYNC_RISING      0x04 /* VSYNC changes on rising edge of PCLK */
-#define COM10_VSYNC_NEG         0x02 /* VSYNC negative */
-#define COM10_OUT_RANGE_8       0x01 /* Output data range: Full range */
-#define COM10_OUT_RANGE_10      0x00 /* Output data range: Data from [10] to [F0] (8 MSBs) */
-
-#define RSVD_16                 0x16 /* Reserved register */
-
-#define HSTART                  0x17  /* Horizontal Frame (HREF column) Start high 8-bit(low 3 bits are at HREF[2:0]) */
-#define HSTOP                   0x18  /* Horizontal Frame (HREF column) end high 8-bit (low 3 bits are at HREF[5:3])  */
-#define VSTART                  0x19  /* Vertical Frame (row) Start high 8-bit (low 2 bits are at VREF[1:0]) */
-#define VSTOP                   0x1A  /* Vertical Frame (row) End high 8-bit (low 2 bits are at VREF[3:2]) */
-#define PSHFT                   0x1B  /* Data Format - Pixel Delay Select */
-#define REG_MIDH                0x1C  /* Manufacturer ID Byte – High */
-#define REG_MIDL                0x1D  /* Manufacturer ID Byte – Low */
-
-#define MVFP			        0x1E  /* Mirror/Vflip Enable */
-#define   MVFP_MIRROR	        0x20  /* Mirror image */
-#define   MVFP_FLIP	            0x10  /* Vertical flip */
-#define   MVFP_SUN	            0x02  /* Black sun enable */
-#define MVFP_SET_MIRROR(r,x)	((r&0xDF)|((x&1)<<5)) /* change only bit5 according to x */
-#define MVFP_SET_FLIP(r,x)	    ((r&0xEF)|((x&1)<<4)) /* change only bit4 according to x */
-
-#define LAEC                    0x1F /* Fine AEC Value - defines exposure value less than one row period (Reserved?) */
-#define ADCCTR0                 0x20 /* ADC control */
-#define ADCCTR1			        0x21 /* reserved */
-#define ADCCTR2                 0x22 /* reserved */
-#define ADCCTR3                 0x23 /* reserved */
-#define AEW                     0x24 /* AGC/AEC - Stable Operating Region (Upper Limit) */
-#define AEB                     0x25 /* AGC/AEC - Stable Operating Region (Lower Limit) */
-#define VPT                     0x26 /* AGC/AEC Fast Mode Operating Region */
-#define BBIAS 			        0x27 /* B channel signal output bias (effective only when COM6[3]=1) */
-#define GbBIAS                  0x28 /* Gb channel signal output bias (effective only when COM6[3]=1) */
-#define RSVD_29                 0x29 /* reserved */
-#define EXHCH                   0x2A /* Dummy Pixel Insert MSB */
-#define EXHCL                   0x2B /* Dummy Pixel Insert LSB */
-#define RBIAS                   0x2C /* R channel signal output bias (effective only when COM6[3]=1) */
-#define ADVFL                   0x2D /* LSB of Insert Dummy Rows in Vertical Sync (1 bit equals 1 row)  */
-#define ADVFH                   0x2E /* MSB of Insert Dummy Rows in Vertical Sync */
-#define YAVE                    0x2F /* Y/G Channel Average Value */
-#define HSYST                   0x30 /* HSync rising edge delay */
-#define HSYEN                   0x31 /* HSync falling edge delay  */
-#define HREF                    0x32 /* Image Start and Size Control DIFFERENT CONTROL SEQUENCE	 */
-#define CHLF                    0x33 /* Array Current control  */
-#define ARBLM                   0x34 /* Array reference control */
-#define RSVD_35                 0x35 /* Reserved */
-#define RSVD_36                 0x36 /* Reserved */
-#define ADC                     0x37 /* ADC control */
-#define ACOM                    0x38 /* ADC and analog common mode control */
-#define OFON                    0x39 /* ADC offset control */
-#define TSLB                    0x3A /* Line buffer test option  */
-
-#define COM11                   0x3B /* Common control 11 */
-#define   COM11_EXP		        0x02
-#define   COM11_HZAUTO		    0x10 /* Auto detect 50/60 Hz */
-
-#define COM12                   0x3C /* Common control 12 */
-
-#define COM13                   0x3D /* Common control 13 */
-#define   COM13_GAMMA	        0x80 /* Gamma enable */
-#define	  COM13_UVSAT	        0x40 /* UV saturation auto adjustment */
-
-#define COM14                   0x3E /* Common Control 14 */
-
-#define EDGE                    0x3F /* edge enhancement adjustment */
-#define COM15                   0x40 /* Common Control 15 DIFFERENT CONTROLS */
-#define COM15_SET_RGB565(r,x)	((r&0xEF)|((x&1)<<4)) /* set rgb565 mode */
-#define   COM15_RGB565	        0x10 /* RGB565 output */
-#define   COM15_R00FF           0xC0 /* Output range: [00] to [FF] */
-
-#define COM16                   0x41 /* Common Control 16 DIFFERENT CONTROLS */
-#define COM16_AWBGAIN		    0x08 /* AWB gain enable */
-#define COM17                   0x42 /* Common Control 17   */
-
-#define AWBC1                   0x43 /* Reserved */
-#define AWBC2                  	0x44 /* Reserved */
-#define AWBC3                  	0x45 /* Reserved */
-#define AWBC4                   0x46 /* Reserved */
-#define AWBC5                  	0x47 /* Reserved */
-#define AWBC6                  	0x48 /* Reserved */
-
-#define RSVD_49			        0x49 /* Reserved */
-#define RSVD_4A			        0x4A /* Reserved */
-
-#define REG4B                   0x4B /* Register 4B */
-#define DNSTH                   0x4C /* Denoise strength */
-
-#define RSVD_4D			        0x4D /* Reserved */
-#define RSVD_4E			        0x4E /* Reserved */
-
-#define MTX1                    0x4F /* Matrix coefficient 1 */
-#define MTX2                    0x50 /* Matrix coefficient 2 */
-#define MTX3                    0x51 /* Matrix coefficient 3 */
-#define MTX4                    0x52 /* Matrix coefficient 4 */
-#define MTX5                    0x53 /* Matrix coefficient 5 */
-#define MTX6                    0x54 /* Matrix coefficient 6 */
-#define BRIGHTNESS              0x55 /* Brightness control */
-#define CONTRAST		        0x56 /* Contrast control */
-#define CONTRASCENTER           0x57 /* Contrast center */
-#define MTXS			        0x58 /* Matrix coefficient sign for coefficient 5 to 0*/
-
-#define RSVD_59			        0x59 /* Reserved */
-#define RSVD_5A			        0x5A /* Reserved */
-#define RSVD_5B			        0x5B /* Reserved */
-#define RSVD_5C			        0x5C /* Reserved */
-#define RSVD_5D			        0x5D /* Reserved */
-#define RSVD_5E			        0x5E /* Reserved */
-#define RSVD_5F			        0x5F /* Reserved */
-#define RSVD_60			        0x60 /* Reserved */
-#define RSVD_61			        0x61 /* Reserved */
-
-#define LCC1                    0x62 /* Lens correction option 1  */
-
-#define LCC2                    0x63 /* Lens correction option 2 */
-#define LCC3 			        0x64 /* Lens correction option 3 */
-#define LCC4			        0x65 /* Lens correction option 4 */
-#define LCC5			        0x66 /* Lens correction option 5 */
-
-#define MANU       		        0x67 /* Manual U Value      */
-#define MANV      		        0x68 /* Manual V Value */
-#define GFIX                    0x69 /* Fix gain control */
-#define GGAIN                   0x6A /* G channel AWB gain */
-
-#define DBLV               	    0x6B /* PLL and clock ? */
-
-#define AWBCTR3               	0x6C /* AWB Control 3  */
-#define AWBCTR2	                0x6D /* AWB Control 2  */
-#define AWBCTR1                 0x6E /* AWB Control 1  */
-#define AWBCTR0                 0x6F /* AWB Control 0  */
-#define SCALING_XSC             0x70 /* test pattern and horizontal scaling factor */
-#define SCALING_XSC_CBAR(r)	(r&0x7F) /* make sure bit7 is 0 for color bar */
-#define SCALING_YSC             0x71 /* test pattern and vertical scaling factor */
-#define SCALING_YSC_CBAR(r,x)	((r&0x7F)|((x&1)<<7)) /* change bit7 for color bar on/off */
-#define SCALING_DCWCTR          0x72 /* DCW control */
-#define SCALING_PCLK_DIV        0x73 /*  */
-#define REG74                   0x74 /*  */
-#define REG75                   0x75 /*  */
-#define REG76                   0x76 /*  */
-#define REG77	             	0x77 /*  */
-
-#define RSVD_78      		    0x78 /* Reserved */
-#define RSVD_79              	0x79 /* Reserved */
-
-#define SLOP	                0x7A /* Gamma curve highest segment slope */
-#define GAM1	                0x7B /* Gamma Curve 1st Segment Input End Point 0x04 Output Value */
-#define GAM2	                0x7C /* Gamma Curve 2nd Segment Input End Point 0x08 Output Value */
-#define GAM3                    0x7D /* Gamma Curve 3rd Segment Input End Point 0x10 Output Value */
-#define GAM4                    0x7E /* Gamma Curve 4th Segment Input End Point 0x20 Output Value */
-#define GAM5                    0x7F /* Gamma Curve 5th Segment Input End Point 0x28 Output Value */
-#define GAM6                    0x80 /* Gamma Curve 6rd Segment Input End Point 0x30 Output Value */
-#define GAM7                    0x81 /* Gamma Curve 7th Segment Input End Point 0x38 Output Value */
-#define GAM8                    0x82 /* Gamma Curve 8th Segment Input End Point 0x40 Output Value */
-#define GAM9                    0x83 /* Gamma Curve 9th Segment Input End Point 0x48 Output Value */
-#define GAM10                   0x84 /* Gamma Curve 10th Segment Input End Point 0x50 Output Value */
-#define GAM11                   0x85 /* Gamma Curve 11th Segment Input End Point 0x60 Output Value */
-#define GAM12                   0x86 /* Gamma Curve 12th Segment Input End Point 0x70 Output Value */
-#define GAM13                   0x87 /* Gamma Curve 13th Segment Input End Point 0x90 Output Value */
-#define GAM14                   0x88 /* Gamma Curve 14th Segment Input End Point 0xB0 Output Value */
-#define GAM15                   0x89 /* Gamma Curve 15th Segment Input End Point 0xD0 Output Value */
-
-#define RSVD_8A      		    0x8A /* Reserved */
-#define RSVD_8B              	0x8B /* Reserved */
-
-#define RGB444                  0x8C /*  */
-
-#define RSVD_8D      		    0x8D /* Reserved */
-#define RSVD_8E              	0x8E /* Reserved */
-#define RSVD_8F      		    0x8F /* Reserved */
-#define RSVD_90              	0x90 /* Reserved */
-#define RSVD_91      		    0x91 /* Reserved */
-
-#define DM_LNL                  0x92 /* Dummy line low 8 bit */
-#define DM_LNH                  0x93 /* Dummy line high 8 bit */
-#define LCC6                    0x94 /* Lens correction option 6 */
-#define LCC7                    0x95 /* Lens correction option 7 */
-
-#define RSVD_96      		    0x96 /* Reserved */
-#define RSVD_97              	0x97 /* Reserved */
-#define RSVD_98      		    0x98 /* Reserved */
-#define RSVD_99              	0x99 /* Reserved */
-#define RSVD_9A      		    0x9A /* Reserved */
-#define RSVD_9B              	0x9B /* Reserved */
-#define RSVD_9C      		    0x9C /* Reserved */
-
-#define BD50ST			        0x9D /* 50 Hz banding filter value */
-#define BD60ST                  0x9E /* 60 Hz banding filter value */
-#define HAECC1                  0x9F /* Histogram-based AEC/AGC control 1 */
-#define HAECC2                  0xA0 /* Histogram-based AEC/AGC control 2 */
-
-#define RSVD_A1      		    0xA1 /* Reserved */
-
-#define SCALING_PCLK_DELAY      0xA2 /* Pixel clock delay */
-
-#define RSVD_A3      		    0xA3 /* Reserved */
-
-#define NT_CNTRL                0xA4 /*  */
-#define BD50MAX			        0xA5 /* 50 Hz banding step limit */
-#define HAECC3                  0xA6 /* Histogram-based AEC/AGC control 3  */
-#define HAECC4 	   	            0xA7 /* Histogram-based AEC/AGC control 4           */
-#define HAECC5		            0xA8 /* Histogram-based AEC/AGC control 5         */
-#define HAECC6		            0xA9 /* Histogram-based AEC/AGC control 6           */
-
-#define HAECC7		            0xAA /* Histogram-based AEC/AGC control 7           */
-#define 	HAECC_EN      	    0x80 /* Histogram-based AEC algorithm enable      */
-
-#define BD60MAX                 0xAB /* 60 Hz banding step limit */
-
-#define STR_OPT                 0xAC /* Register AC */
-#define STR_R			        0xAD /* R gain for led output frame */
-#define STR_G			        0xAE /* G gain for led output frame */
-#define STR_B			        0xAF /* B gain for led output frame */
-#define RSVD_B0      		    0xB0 /* Reserved */
-#define ABLC1			        0xB1 /* */
-#define RSVD_B2      		    0xB2 /* Reserved */
-#define THL_ST			        0xB3 /* ABLC target */
-#define THL_DLT			        0xB5 /* ABLC stable range */
-
-#define RSVD_B6      		    0xB6 /* Reserved */
-#define RSVD_B7      		    0xB7 /* Reserved */
-#define RSVD_B8      		    0xB8 /* Reserved */
-#define RSVD_B9      		    0xB9 /* Reserved */
-#define RSVD_BA      		    0xBA /* Reserved */
-#define RSVD_BB      		    0xBB /* Reserved */
-#define RSVD_BC      		    0xBC /* Reserved */
-#define RSVD_BD      	    	0xBD /* Reserved */
-
-#define AD_CHB			        0xBE /* blue channel black level compensation */
-#define AD_CHR			        0xBF /* Red channel black level compensation */
-#define AD_CHGb			        0xC0 /* Gb channel black level compensation */
-#define AD_CHGr			        0xC1 /* Gr channel black level compensation */
-
-#define RSVD_C2      		    0xC2 /* Reserved */
-#define RSVD_C3      		    0xC3 /* Reserved */
-#define RSVD_C4      		    0xC4 /* Reserved */
-#define RSVD_C5      		    0xC5 /* Reserved */
-#define RSVD_C6      		    0xC6 /* Reserved */
-#define RSVD_C7      		    0xC7 /* Reserved */
-#define RSVD_C8      		    0xC8 /* Reserved */
-
-#define SATCTR			        0xC9 /* Saturation control */
-#define SET_REG(reg, x)         (##reg_DEFAULT|x)
-
-#endif //__OV7670_REG_REGS_H__

+ 0 - 33
code/components/esp32-camera-master/sensors/private_include/ov7725.h

@@ -1,33 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV7725 driver.
- *
- */
-#ifndef __OV7725_H__
-#define __OV7725_H__
-#include "sensor.h"
-
-/**
- * @brief Detect sensor pid
- *
- * @param slv_addr SCCB address
- * @param id Detection result
- * @return
- *     0:       Can't detect this sensor
- *     Nonzero: This sensor has been detected
- */
-int ov7725_detect(int slv_addr, sensor_id_t *id);
-
-/**
- * @brief initialize sensor function pointers
- *
- * @param sensor pointer of sensor
- * @return
- *      Always 0
- */
-int ov7725_init(sensor_t *sensor);
-
-#endif // __OV7725_H__

+ 0 - 335
code/components/esp32-camera-master/sensors/private_include/ov7725_regs.h

@@ -1,335 +0,0 @@
-/*
- * This file is part of the OpenMV project.
- * Copyright (c) 2013/2014 Ibrahim Abdelkader <i.abdalkader@gmail.com>
- * This work is licensed under the MIT license, see the file LICENSE for details.
- *
- * OV2640 register definitions.
- */
-#ifndef __REG_REGS_H__
-#define __REG_REGS_H__
-#define GAIN                    0x00 /* AGC – Gain control gain setting  */
-#define BLUE                    0x01 /* AWB – Blue channel gain setting  */
-#define RED                     0x02 /* AWB – Red channel gain setting   */
-#define GREEN                   0x03 /* AWB – Green channel gain setting */
-#define BAVG                    0x05 /* U/B Average Level   */
-#define GAVG                    0x06 /* Y/Gb Average Level  */
-#define RAVG                    0x07 /* V/R Average Level   */
-#define AECH                    0x08 /* Exposure Value – AEC MSBs */
-
-#define COM2                    0x09 /* Common Control 2 */
-#define COM2_SOFT_SLEEP         0x10 /* Soft sleep mode  */
-#define COM2_OUT_DRIVE_1x       0x00 /* Output drive capability 1x */
-#define COM2_OUT_DRIVE_2x       0x01 /* Output drive capability 2x */
-#define COM2_OUT_DRIVE_3x       0x02 /* Output drive capability 3x */
-#define COM2_OUT_DRIVE_4x       0x03 /* Output drive capability 4x */
-
-#define REG_PID                     0x0A /* Product ID Number MSB */
-#define REG_VER                     0x0B /* Product ID Number LSB */
-
-#define COM3                    0x0C /* Common Control 3                                        */
-#define COM3_VFLIP              0x80 /* Vertical flip image ON/OFF selection                    */
-#define COM3_MIRROR             0x40 /* Horizontal mirror image ON/OFF selection                */
-#define COM3_SWAP_BR            0x20 /* Swap B/R output sequence in RGB output mode             */
-#define COM3_SWAP_YUV           0x10 /* Swap Y/UV output sequence in YUV output mode            */
-#define COM3_SWAP_MSB           0x08 /* Swap output MSB/LSB                                     */
-#define COM3_TRI_CLOCK          0x04 /* Tri-state option for output clock at power-down period  */
-#define COM3_TRI_DATA           0x02 /* Tri-state option for output data at power-down period   */
-#define COM3_COLOR_BAR          0x01 /* Sensor color bar test pattern output enable             */
-#define COM3_SET_CBAR(r, x)     ((r&0xFE)|((x&1)<<0))
-#define COM3_SET_MIRROR(r, x)   ((r&0xBF)|((x&1)<<6))
-#define COM3_SET_FLIP(r, x)     ((r&0x7F)|((x&1)<<7))
-
-#define COM4                    0x0D /* Common Control 4         */
-#define COM4_PLL_BYPASS         0x00 /* Bypass PLL               */
-#define COM4_PLL_4x             0x40 /* PLL frequency 4x         */
-#define COM4_PLL_6x             0x80 /* PLL frequency 6x         */
-#define COM4_PLL_8x             0xc0 /* PLL frequency 8x         */
-#define COM4_AEC_FULL           0x00 /* AEC evaluate full window */
-#define COM4_AEC_1_2            0x10 /* AEC evaluate 1/2 window  */
-#define COM4_AEC_1_4            0x20 /* AEC evaluate 1/4 window  */
-#define COM4_AEC_2_3            0x30 /* AEC evaluate 2/3 window  */
-
-#define COM5                    0x0E /* Common Control 5 */
-#define COM5_AFR                0x80 /* Auto frame rate control ON/OFF selection (night mode) */
-#define COM5_AFR_SPEED          0x40 /* Auto frame rate control speed selection */
-#define COM5_AFR_0              0x00 /* No reduction of frame rate          */
-#define COM5_AFR_1_2            0x10 /* Max reduction to 1/2 frame rate     */
-#define COM5_AFR_1_4            0x20 /* Max reduction to 1/4 frame rate     */
-#define COM5_AFR_1_8            0x30 /* Max reduction to 1/8 frame rate     */
-#define COM5_AFR_4x             0x04 /* Add frame when AGC reaches 4x gain  */
-#define COM5_AFR_8x             0x08 /* Add frame when AGC reaches 8x gain  */
-#define COM5_AFR_16x            0x0c /* Add frame when AGC reaches 16x gain */
-#define COM5_AEC_NO_LIMIT       0x01 /* No limit to AEC increase step       */
-
-#define COM6                    0x0F /* Common Control 6 */
-#define COM6_AUTO_WINDOW        0x01 /* Auto window setting ON/OFF selection when format changes */
-
-#define AEC                     0x10 /* AEC[7:0] (see register AECH for AEC[15:8]) */
-#define CLKRC                   0x11 /* Internal Clock */
-
-#define COM7                    0x12 /* Common Control 7         */
-#define COM7_RESET              0x80 /* SCCB Register Reset      */
-#define COM7_RES_VGA            0x00 /* Resolution VGA           */
-#define COM7_RES_QVGA           0x40 /* Resolution QVGA          */
-#define COM7_BT656              0x20 /* BT.656 protocol ON/OFF   */
-#define COM7_SENSOR_RAW         0x10 /* Sensor RAW               */
-#define COM7_FMT_GBR422         0x00 /* RGB output format GBR422 */
-#define COM7_FMT_RGB565         0x04 /* RGB output format RGB565 */
-#define COM7_FMT_RGB555         0x08 /* RGB output format RGB555 */
-#define COM7_FMT_RGB444         0x0C /* RGB output format RGB444 */
-#define COM7_FMT_YUV            0x00 /* Output format YUV        */
-#define COM7_FMT_P_BAYER        0x01 /* Output format Processed Bayer RAW */
-#define COM7_FMT_RGB            0x02 /* Output format RGB        */
-#define COM7_FMT_R_BAYER        0x03 /* Output format Bayer RAW  */
-#define COM7_SET_FMT(r, x)      ((r&0xFC)|((x&0x3)<<0))
-#define COM7_SET_RGB(r, x)      ((r&0xF0)|(x&0x0C)|COM7_FMT_RGB)
-
-#define COM8                    0x13 /* Common Control 8                */
-#define COM8_FAST_AUTO          0x80 /* Enable fast AGC/AEC algorithm   */
-#define COM8_STEP_VSYNC         0x00 /* AEC - Step size limited to vertical blank */
-#define COM8_STEP_UNLIMIT       0x40 /* AEC - Step size unlimited step size       */
-#define COM8_BANDF_EN           0x20 /* Banding filter ON/OFF */
-#define COM8_AEC_BANDF          0x10 /* Enable AEC below banding value */
-#define COM8_AEC_FINE_EN        0x08 /* Fine AEC ON/OFF control */
-#define COM8_AGC_EN             0x04 /* AGC Enable */
-#define COM8_AWB_EN             0x02 /* AWB Enable */
-#define COM8_AEC_EN             0x01 /* AEC Enable */
-#define COM8_SET_AGC(r, x)      ((r&0xFB)|((x&0x1)<<2))
-#define COM8_SET_AWB(r, x)      ((r&0xFD)|((x&0x1)<<1))
-#define COM8_SET_AEC(r, x)      ((r&0xFE)|((x&0x1)<<0))
-
-#define COM9                    0x14 /* Common Control 9 */
-#define COM9_HISTO_AVG          0x80 /* Histogram or average based AEC/AGC selection */
-#define COM9_AGC_GAIN_2x        0x00 /* Automatic Gain Ceiling 2x  */
-#define COM9_AGC_GAIN_4x        0x10 /* Automatic Gain Ceiling 4x  */
-#define COM9_AGC_GAIN_8x        0x20 /* Automatic Gain Ceiling 8x  */
-#define COM9_AGC_GAIN_16x       0x30 /* Automatic Gain Ceiling 16x */
-#define COM9_AGC_GAIN_32x       0x40 /* Automatic Gain Ceiling 32x */
-#define COM9_DROP_VSYNC         0x04 /* Drop VSYNC output of corrupt frame */
-#define COM9_DROP_HREF          0x02 /* Drop HREF output of corrupt frame  */
-#define COM9_SET_AGC(r, x)      ((r&0x8F)|((x&0x07)<<4))
-
-#define COM10                   0x15 /* Common Control 10 */
-#define COM10_NEGATIVE          0x80 /* Output negative data */
-#define COM10_HSYNC_EN          0x40 /* HREF changes to HSYNC */
-#define COM10_PCLK_FREE         0x00 /* PCLK output option: free running PCLK */
-#define COM10_PCLK_MASK         0x20 /* PCLK output option: masked during horizontal blank  */
-#define COM10_PCLK_REV          0x10 /* PCLK reverse */
-#define COM10_HREF_REV          0x08 /* HREF reverse */
-#define COM10_VSYNC_FALLING     0x00 /* VSYNC changes on falling edge of PCLK */
-#define COM10_VSYNC_RISING      0x04 /* VSYNC changes on rising edge of PCLK */
-#define COM10_VSYNC_NEG         0x02 /* VSYNC negative */
-#define COM10_OUT_RANGE_8       0x01 /* Output data range: Full range */
-#define COM10_OUT_RANGE_10      0x00 /* Output data range: Data from [10] to [F0] (8 MSBs) */
-
-#define REG16                   0x16 /* Register 16 */
-#define REG16_BIT_SHIFT         0x80 /* Bit shift test pattern options */
-#define HSTART                  0x17 /* Horizontal Frame (HREF column) Start 8 MSBs (2 LSBs are at HREF[5:4]) */
-#define HSIZE                   0x18 /* Horizontal Sensor Size (2 LSBs are at HREF[1:0]) */
-#define VSTART                  0x19 /* Vertical Frame (row) Start 8 MSBs (1 LSB is at HREF[6]) */
-#define VSIZE                   0x1A /* Vertical Sensor Size (1 LSB is at HREF[2]) */
-#define PSHFT                   0x1B /* Data Format - Pixel Delay Select */
-#define REG_MIDH                    0x1C /* Manufacturer ID Byte – High */
-#define REG_MIDL                    0x1D /* Manufacturer ID Byte – Low */
-#define LAEC                    0x1F /* Fine AEC Value - defines exposure value less than one row period */
-
-#define COM11                   0x20 /* Common Control 11 */
-#define COM11_SNGL_FRAME_EN     0x02 /* Single frame ON/OFF selection */
-#define COM11_SNGL_XFR_TRIG     0x01 /* Single frame transfer trigger */
-
-#define BDBASE                  0x22 /* Banding Filter Minimum AEC Value */
-#define DBSTEP                  0x23 /* Banding Filter Maximum Step */
-#define AEW                     0x24 /* AGC/AEC - Stable Operating Region (Upper Limit) */
-#define AEB                     0x25 /* AGC/AEC - Stable Operating Region (Lower Limit) */
-#define VPT                     0x26 /* AGC/AEC Fast Mode Operating Region */
-#define REG28                   0x28 /* Selection on the number of dummy rows, N */
-#define HOUTSIZE                0x29 /* Horizontal Data Output Size MSBs (2 LSBs at register EXHCH[1:0]) */
-#define EXHCH                   0x2A /* Dummy Pixel Insert MSB */
-#define EXHCL                   0x2B /* Dummy Pixel Insert LSB */
-#define VOUTSIZE                0x2C /* Vertical Data Output Size MSBs (LSB at register EXHCH[2])       */
-#define ADVFL                   0x2D /* LSB of Insert Dummy Rows in Vertical Sync (1 bit equals 1 row)  */
-#define ADVFH                   0x2E /* MSB of Insert Dummy Rows in Vertical Sync */
-#define YAVE                    0x2F /* Y/G Channel Average Value */
-#define LUMHTH                  0x30 /* Histogram AEC/AGC Luminance High Level Threshold */
-#define LUMLTH                  0x31 /* Histogram AEC/AGC Luminance Low Level Threshold  */
-#define HREF                    0x32 /* Image Start and Size Control */
-#define DM_LNL                  0x33 /* Dummy Row Low 8 Bits  */
-#define DM_LNH                  0x34 /* Dummy Row High 8 Bits */
-#define ADOFF_B                 0x35 /* AD Offset Compensation Value for B Channel  */
-#define ADOFF_R                 0x36 /* AD Offset Compensation Value for R Channel  */
-#define ADOFF_GB                0x37 /* AD Offset Compensation Value for GB Channel */
-#define ADOFF_GR                0x38 /* AD Offset Compensation Value for GR Channel */
-#define OFF_B                   0x39 /* AD Offset Compensation Value for B Channel  */
-#define OFF_R                   0x3A /* AD Offset Compensation Value for R Channel  */
-#define OFF_GB                  0x3B /* AD Offset Compensation Value for GB Channel */
-#define OFF_GR                  0x3C /* AD Offset Compensation Value for GR Channel */
-#define COM12                   0x3D /* DC offset compensation for analog process */
-
-#define COM13                   0x3E /* Common Control 13 */
-#define COM13_BLC_EN            0x80 /* BLC enable */
-#define COM13_ADC_EN            0x40 /* ADC channel BLC ON/OFF control */
-#define COM13_ANALOG_BLC        0x20 /* Analog processing channel BLC ON/OFF control */
-#define COM13_ABLC_GAIN_EN      0x04 /* ABLC gain trigger enable */
-
-#define COM14                   0x3F /* Common Control 14 */
-#define COM15                   0x40 /* Common Control 15 */
-#define COM16                   0x41 /* Common Control 16 */
-#define TGT_B                   0x42 /* BLC Blue Channel Target Value   */
-#define TGT_R                   0x43 /* BLC Red Channel Target Value    */
-#define TGT_GB                  0x44 /* BLC Gb Channel Target Value     */
-#define TGT_GR                  0x45 /* BLC Gr Channel Target Value     */
-
-#define LC_CTR                  0x46 /* Lens Correction Control */
-#define LC_CTR_RGB_COMP_1       0x00 /* R, G, and B channel compensation coefficient is set by LC_COEF (0x49) */
-#define LC_CTR_RGB_COMP_3       0x04 /* R, G, and B channel compensation coefficient is set by registers
-                                        LC_COEFB (0x4B), LC_COEF (0x49), and LC_COEFR (0x4C), respectively */
-#define LC_CTR_EN               0x01 /* Lens correction enable */
-#define LC_XC                   0x47 /* X Coordinate of Lens Correction Center Relative to Array Center */
-#define LC_YC                   0x48 /* Y Coordinate of Lens Correction Center Relative to Array Center */
-#define LC_COEF                 0x49 /* Lens Correction Coefficient */
-#define LC_RADI                 0x4A /* Lens Correction Radius */
-#define LC_COEFB                0x4B /* Lens Correction B Channel Compensation Coefficient */
-#define LC_COEFR                0x4C /* Lens Correction R Channel Compensation Coefficient */
-
-#define FIXGAIN                 0x4D /* Analog Fix Gain Amplifier */
-#define AREF0                   0x4E /* Sensor Reference Control */
-#define AREF1                   0x4F /* Sensor Reference Current Control */
-#define AREF2                   0x50 /* Analog Reference Control */
-#define AREF3                   0x51 /* ADC Reference Control */
-#define AREF4                   0x52 /* ADC Reference Control */
-#define AREF5                   0x53 /* ADC Reference Control */
-#define AREF6                   0x54 /* Analog Reference Control */
-#define AREF7                   0x55 /* Analog Reference Control */
-#define UFIX                    0x60 /* U Channel Fixed Value Output */
-#define VFIX                    0x61 /* V Channel Fixed Value Output */
-#define AWBB_BLK                0x62 /* AWB Option for Advanced AWB  */
-
-#define AWB_CTRL0               0x63 /* AWB Control Byte 0   */
-#define AWB_CTRL0_GAIN_EN       0x80 /* AWB gain enable      */
-#define AWB_CTRL0_CALC_EN       0x40 /* AWB calculate enable */
-#define AWB_CTRL0_WBC_MASK      0x0F /* WBC threshold 2      */
-
-#define DSP_CTRL1               0x64 /* DSP Control Byte 1                  */
-#define DSP_CTRL1_FIFO_EN       0x80 /* FIFO enable/disable selection       */
-#define DSP_CTRL1_UV_EN         0x40 /* UV adjust function ON/OFF selection */
-#define DSP_CTRL1_SDE_EN        0x20 /* SDE enable                          */
-#define DSP_CTRL1_MTRX_EN       0x10 /* Color matrix ON/OFF selection       */
-#define DSP_CTRL1_INTRP_EN      0x08 /* Interpolation ON/OFF selection      */
-#define DSP_CTRL1_GAMMA_EN      0x04 /* Gamma function ON/OFF selection     */
-#define DSP_CTRL1_BLACK_EN      0x02 /* Black defect auto correction ON/OFF */
-#define DSP_CTRL1_WHITE_EN      0x01 /* White defect auto correction ON/OFF */
-
-#define DSP_CTRL2               0x65 /* DSP Control Byte 2          */
-#define DSP_CTRL2_VDCW_EN       0x08 /* Vertical DCW enable         */
-#define DSP_CTRL2_HDCW_EN       0x04 /* Horizontal DCW enable       */
-#define DSP_CTRL2_VZOOM_EN      0x02 /* Vertical zoom out enable    */
-#define DSP_CTRL2_HZOOM_EN      0x01 /* Horizontal zoom out enable  */
-
-#define DSP_CTRL3               0x66 /* DSP Control Byte 3                      */
-#define DSP_CTRL3_UV_EN         0x80 /* UV output sequence option               */
-#define DSP_CTRL3_CBAR_EN       0x20 /* DSP color bar ON/OFF selection          */
-#define DSP_CTRL3_FIFO_EN       0x08 /* FIFO power down ON/OFF selection        */
-#define DSP_CTRL3_SCAL1_PWDN    0x04 /* Scaling module power down control 1     */
-#define DSP_CTRL3_SCAL2_PWDN    0x02 /* Scaling module power down control 2     */
-#define DSP_CTRL3_INTRP_PWDN    0x01 /* Interpolation module power down control */
-#define DSP_CTRL3_SET_CBAR(r, x)    ((r&0xDF)|((x&1)<<5))
-
-
-#define DSP_CTRL4               0x67 /* DSP Control Byte 4          */
-#define DSP_CTRL4_YUV_RGB       0x00 /* Output selection YUV or RGB */
-#define DSP_CTRL4_RAW8          0x02 /* Output selection RAW8       */
-#define DSP_CTRL4_RAW10         0x03 /* Output selection RAW10      */
-
-
-#define AWB_BIAS                0x68 /* AWB BLC Level Clip */
-#define AWB_CTRL1               0x69 /* AWB Control 1 */
-#define AWB_CTRL2               0x6A /* AWB Control 2 */
-
-#define AWB_CTRL3               0x6B /* AWB Control 3 */
-#define AWB_CTRL3_ADVANCED      0x80 /* AWB mode select - Advanced AWB */
-#define AWB_CTRL3_SIMPLE        0x00 /* AWB mode select - Simple AWB */
-
-#define AWB_CTRL4               0x6C /* AWB Control 4  */
-#define AWB_CTRL5               0x6D /* AWB Control 5  */
-#define AWB_CTRL6               0x6E /* AWB Control 6  */
-#define AWB_CTRL7               0x6F /* AWB Control 7  */
-#define AWB_CTRL8               0x70 /* AWB Control 8  */
-#define AWB_CTRL9               0x71 /* AWB Control 9  */
-#define AWB_CTRL10              0x72 /* AWB Control 10 */
-#define AWB_CTRL11              0x73 /* AWB Control 11 */
-#define AWB_CTRL12              0x74 /* AWB Control 12 */
-#define AWB_CTRL13              0x75 /* AWB Control 13 */
-#define AWB_CTRL14              0x76 /* AWB Control 14 */
-#define AWB_CTRL15              0x77 /* AWB Control 15 */
-#define AWB_CTRL16              0x78 /* AWB Control 16 */
-#define AWB_CTRL17              0x79 /* AWB Control 17 */
-#define AWB_CTRL18              0x7A /* AWB Control 18 */
-#define AWB_CTRL19              0x7B /* AWB Control 19 */
-#define AWB_CTRL20              0x7C /* AWB Control 20 */
-#define AWB_CTRL21              0x7D /* AWB Control 21 */
-#define GAM1                    0x7E /* Gamma Curve 1st Segment Input End Point 0x04 Output Value */
-#define GAM2                    0x7F /* Gamma Curve 2nd Segment Input End Point 0x08 Output Value */
-#define GAM3                    0x80 /* Gamma Curve 3rd Segment Input End Point 0x10 Output Value */
-#define GAM4                    0x81 /* Gamma Curve 4th Segment Input End Point 0x20 Output Value */
-#define GAM5                    0x82 /* Gamma Curve 5th Segment Input End Point 0x28 Output Value */
-#define GAM6                    0x83 /* Gamma Curve 6th Segment Input End Point 0x30 Output Value */
-#define GAM7                    0x84 /* Gamma Curve 7th Segment Input End Point 0x38 Output Value */
-#define GAM8                    0x85 /* Gamma Curve 8th Segment Input End Point 0x40 Output Value */
-#define GAM9                    0x86 /* Gamma Curve 9th Segment Input End Point 0x48 Output Value */
-#define GAM10                   0x87 /* Gamma Curve 10th Segment Input End Point 0x50 Output Value */
-#define GAM11                   0x88 /* Gamma Curve 11th Segment Input End Point 0x60 Output Value */
-#define GAM12                   0x89 /* Gamma Curve 12th Segment Input End Point 0x70 Output Value */
-#define GAM13                   0x8A /* Gamma Curve 13th Segment Input End Point 0x90 Output Value */
-#define GAM14                   0x8B /* Gamma Curve 14th Segment Input End Point 0xB0 Output Value */
-#define GAM15                   0x8C /* Gamma Curve 15th Segment Input End Point 0xD0 Output Value */
-#define SLOP                    0x8D /* Gamma Curve Highest Segment Slope */
-#define DNSTH                   0x8E /* De-noise Threshold */
-#define EDGE0                   0x8F /* Edge Enhancement Strength Control */
-#define EDGE1                   0x90 /* Edge Enhancement Threshold Control */
-#define DNSOFF                  0x91 /* Auto De-noise Threshold Control */
-#define EDGE2                   0x92 /* Edge Enhancement Strength Upper Limit */
-#define EDGE3                   0x93 /* Edge Enhancement Strength Upper Limit */
-#define MTX1                    0x94 /* Matrix Coefficient 1 */
-#define MTX2                    0x95 /* Matrix Coefficient 2 */
-#define MTX3                    0x96 /* Matrix Coefficient 3 */
-#define MTX4                    0x97 /* Matrix Coefficient 4 */
-#define MTX5                    0x98 /* Matrix Coefficient 5 */
-#define MTX6                    0x99 /* Matrix Coefficient 6 */
-
-#define MTX_CTRL                0x9A /* Matrix Control */
-#define MTX_CTRL_DBL_EN         0x80 /* Matrix double ON/OFF selection */
-
-#define BRIGHTNESS              0x9B /* Brightness Control */
-#define CONTRAST                0x9C /* Contrast Gain */
-#define UVADJ0                  0x9E /* Auto UV Adjust Control 0 */
-#define UVADJ1                  0x9F /* Auto UV Adjust Control 1 */
-#define SCAL0                   0xA0 /* DCW Ratio Control */
-#define SCAL1                   0xA1 /* Horizontal Zoom Out Control */
-#define SCAL2                   0xA2 /* Vertical Zoom Out Control */
-#define FIFODLYM                0xA3 /* FIFO Manual Mode Delay Control */
-#define FIFODLYA                0xA4 /* FIFO Auto Mode Delay Control */
-
-#define SDE                     0xA6 /* Special Digital Effect Control  */
-#define SDE_NEGATIVE_EN         0x40 /* Negative image enable           */
-#define SDE_GRAYSCALE_EN        0x20 /* Gray scale image enable         */
-#define SDE_V_FIXED_EN          0x10 /* V fixed value enable            */
-#define SDE_U_FIXED_EN          0x08 /* U fixed value enable            */
-#define SDE_CONT_BRIGHT_EN      0x04 /* Contrast/Brightness enable      */
-#define SDE_SATURATION_EN       0x02 /* Saturation enable               */
-#define SDE_HUE_EN              0x01 /* Hue enable                      */
-
-#define USAT                    0xA7 /* U Component Saturation Gain     */
-#define VSAT                    0xA8 /* V Component Saturation Gain     */
-#define HUECOS                  0xA9 /* Cosine value × 0x80             */
-#define HUESIN                  0xAA /* Sine value × 0x80               */
-#define SIGN_BIT                0xAB /* Sign Bit for Hue and Brightness */
-
-#define DSPAUTO                 0xAC /* DSP Auto Function ON/OFF Control */
-#define DSPAUTO_AWB_EN          0x80 /* AWB auto threshold control */
-#define DSPAUTO_DENOISE_EN      0x40 /* De-noise auto threshold control */
-#define DSPAUTO_EDGE_EN         0x20 /* Sharpness (edge enhancement) auto strength control */
-#define DSPAUTO_UV_EN           0x10 /* UV adjust auto slope control */
-#define DSPAUTO_SCAL0_EN        0x08 /* Auto scaling factor control (register SCAL0 (0xA0)) */
-#define DSPAUTO_SCAL1_EN        0x04 /* Auto scaling factor control (registers SCAL1 (0xA1 and SCAL2 (0xA2))*/
-#define SET_REG(reg, x)         (##reg_DEFAULT|x)
-#endif //__REG_REGS_H__

+ 0 - 99
code/components/esp32-camera-master/target/esp32s2/private_include/tjpgd.h

@@ -1,99 +0,0 @@
-/*----------------------------------------------------------------------------/
-/ TJpgDec - Tiny JPEG Decompressor include file               (C)ChaN, 2012
-/----------------------------------------------------------------------------*/
-#ifndef _TJPGDEC
-#define _TJPGDEC
-/*---------------------------------------------------------------------------*/
-/* System Configurations */
-
-#define	JD_SZBUF		512	/* Size of stream input buffer */
-#define JD_FORMAT		0	/* Output pixel format 0:RGB888 (3 BYTE/pix), 1:RGB565 (1 WORD/pix) */
-#define	JD_USE_SCALE	1	/* Use descaling feature for output */
-#define JD_TBLCLIP		1	/* Use table for saturation (might be a bit faster but increases 1K bytes of code size) */
-
-/*---------------------------------------------------------------------------*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* These types must be 16-bit, 32-bit or larger integer */
-typedef int				INT;
-typedef unsigned int	UINT;
-
-/* These types must be 8-bit integer */
-typedef char			CHAR;
-typedef unsigned char	UCHAR;
-typedef unsigned char	BYTE;
-
-/* These types must be 16-bit integer */
-typedef short			SHORT;
-typedef unsigned short	USHORT;
-typedef unsigned short	WORD;
-typedef unsigned short	WCHAR;
-
-/* These types must be 32-bit integer */
-typedef long			LONG;
-typedef unsigned long	ULONG;
-typedef unsigned long	DWORD;
-
-
-/* Error code */
-typedef enum {
-	JDR_OK = 0,	/* 0: Succeeded */
-	JDR_INTR,	/* 1: Interrupted by output function */	
-	JDR_INP,	/* 2: Device error or wrong termination of input stream */
-	JDR_MEM1,	/* 3: Insufficient memory pool for the image */
-	JDR_MEM2,	/* 4: Insufficient stream input buffer */
-	JDR_PAR,	/* 5: Parameter error */
-	JDR_FMT1,	/* 6: Data format error (may be damaged data) */
-	JDR_FMT2,	/* 7: Right format but not supported */
-	JDR_FMT3	/* 8: Not supported JPEG standard */
-} JRESULT;
-
-
-
-/* Rectangular structure */
-typedef struct {
-	WORD left, right, top, bottom;
-} JRECT;
-
-
-
-/* Decompressor object structure */
-typedef struct JDEC JDEC;
-struct JDEC {
-	UINT dctr;				/* Number of bytes available in the input buffer */
-	BYTE* dptr;				/* Current data read ptr */
-	BYTE* inbuf;			/* Bit stream input buffer */
-	BYTE dmsk;				/* Current bit in the current read byte */
-	BYTE scale;				/* Output scaling ratio */
-	BYTE msx, msy;			/* MCU size in unit of block (width, height) */
-	BYTE qtid[3];			/* Quantization table ID of each component */
-	SHORT dcv[3];			/* Previous DC element of each component */
-	WORD nrst;				/* Restart inverval */
-	UINT width, height;		/* Size of the input image (pixel) */
-	BYTE* huffbits[2][2];	/* Huffman bit distribution tables [id][dcac] */
-	WORD* huffcode[2][2];	/* Huffman code word tables [id][dcac] */
-	BYTE* huffdata[2][2];	/* Huffman decoded data tables [id][dcac] */
-	LONG* qttbl[4];			/* Dequaitizer tables [id] */
-	void* workbuf;			/* Working buffer for IDCT and RGB output */
-	BYTE* mcubuf;			/* Working buffer for the MCU */
-	void* pool;				/* Pointer to available memory pool */
-	UINT sz_pool;			/* Size of momory pool (bytes available) */
-	UINT (*infunc)(JDEC*, BYTE*, UINT);/* Pointer to jpeg stream input function */
-	void* device;			/* Pointer to I/O device identifiler for the session */
-};
-
-
-
-/* TJpgDec API functions */
-JRESULT jd_prepare (JDEC*, UINT(*)(JDEC*,BYTE*,UINT), void*, UINT, void*);
-JRESULT jd_decomp (JDEC*, UINT(*)(JDEC*,void*,JRECT*), BYTE);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _TJPGDEC */

+ 0 - 970
code/components/esp32-camera-master/target/esp32s2/tjpgd.c

@@ -1,970 +0,0 @@
-/*----------------------------------------------------------------------------/
-/ TJpgDec - Tiny JPEG Decompressor R0.01b                     (C)ChaN, 2012
-/-----------------------------------------------------------------------------/
-/ The TJpgDec is a generic JPEG decompressor module for tiny embedded systems.
-/ This is a free software that opened for education, research and commercial
-/  developments under license policy of following terms.
-/
-/  Copyright (C) 2012, ChaN, all right reserved.
-/
-/ * The TJpgDec module is a free software and there is NO WARRANTY.
-/ * No restriction on use. You can use, modify and redistribute it for
-/   personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
-/ * Redistributions of source code must retain the above copyright notice.
-/
-/-----------------------------------------------------------------------------/
-/ Oct 04,'11 R0.01  First release.
-/ Feb 19,'12 R0.01a Fixed decompression fails when scan starts with an escape seq.
-/ Sep 03,'12 R0.01b Added JD_TBLCLIP option.
-/----------------------------------------------------------------------------*/
-
-#include "tjpgd.h"
-
-#define SUPPORT_JPEG 1
-
-#ifdef SUPPORT_JPEG
-/*-----------------------------------------------*/
-/* Zigzag-order to raster-order conversion table */
-/*-----------------------------------------------*/
-
-#define ZIG(n)	Zig[n]
-
-static
-const BYTE Zig[64] = {	/* Zigzag-order to raster-order conversion table */
-	 0,  1,  8, 16,  9,  2,  3, 10, 17, 24, 32, 25, 18, 11,  4,  5,
-	12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13,  6,  7, 14, 21, 28,
-	35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
-	58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63
-};
-
-
-
-/*-------------------------------------------------*/
-/* Input scale factor of Arai algorithm            */
-/* (scaled up 16 bits for fixed point operations)  */
-/*-------------------------------------------------*/
-
-#define IPSF(n)	Ipsf[n]
-
-static
-const WORD Ipsf[64] = {	/* See also aa_idct.png */
-	(WORD)(1.00000*8192), (WORD)(1.38704*8192), (WORD)(1.30656*8192), (WORD)(1.17588*8192), (WORD)(1.00000*8192), (WORD)(0.78570*8192), (WORD)(0.54120*8192), (WORD)(0.27590*8192),
-	(WORD)(1.38704*8192), (WORD)(1.92388*8192), (WORD)(1.81226*8192), (WORD)(1.63099*8192), (WORD)(1.38704*8192), (WORD)(1.08979*8192), (WORD)(0.75066*8192), (WORD)(0.38268*8192),
-	(WORD)(1.30656*8192), (WORD)(1.81226*8192), (WORD)(1.70711*8192), (WORD)(1.53636*8192), (WORD)(1.30656*8192), (WORD)(1.02656*8192), (WORD)(0.70711*8192), (WORD)(0.36048*8192),
-	(WORD)(1.17588*8192), (WORD)(1.63099*8192), (WORD)(1.53636*8192), (WORD)(1.38268*8192), (WORD)(1.17588*8192), (WORD)(0.92388*8192), (WORD)(0.63638*8192), (WORD)(0.32442*8192),
-	(WORD)(1.00000*8192), (WORD)(1.38704*8192), (WORD)(1.30656*8192), (WORD)(1.17588*8192), (WORD)(1.00000*8192), (WORD)(0.78570*8192), (WORD)(0.54120*8192), (WORD)(0.27590*8192),
-	(WORD)(0.78570*8192), (WORD)(1.08979*8192), (WORD)(1.02656*8192), (WORD)(0.92388*8192), (WORD)(0.78570*8192), (WORD)(0.61732*8192), (WORD)(0.42522*8192), (WORD)(0.21677*8192),
-	(WORD)(0.54120*8192), (WORD)(0.75066*8192), (WORD)(0.70711*8192), (WORD)(0.63638*8192), (WORD)(0.54120*8192), (WORD)(0.42522*8192), (WORD)(0.29290*8192), (WORD)(0.14932*8192),
-	(WORD)(0.27590*8192), (WORD)(0.38268*8192), (WORD)(0.36048*8192), (WORD)(0.32442*8192), (WORD)(0.27590*8192), (WORD)(0.21678*8192), (WORD)(0.14932*8192), (WORD)(0.07612*8192)
-};
-
-
-
-/*---------------------------------------------*/
-/* Conversion table for fast clipping process  */
-/*---------------------------------------------*/
-
-#if JD_TBLCLIP
-
-#define BYTECLIP(v) Clip8[(UINT)(v) & 0x3FF]
-
-static
-const BYTE Clip8[1024] = {
-	/* 0..255 */
-	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-	32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-	64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-	96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
-	128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
-	160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
-	192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
-	224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
-	/* 256..511 */
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-	/* -512..-257 */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	/* -256..-1 */
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-#else	/* JD_TBLCLIP */
-
-inline
-BYTE BYTECLIP (
-	INT val
-)
-{
-	if (val < 0) val = 0;
-	if (val > 255) val = 255;
-
-	return (BYTE)val;
-}
-
-#endif
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Allocate a memory block from memory pool                              */
-/*-----------------------------------------------------------------------*/
-
-static
-void* alloc_pool (	/* Pointer to allocated memory block (NULL:no memory available) */
-	JDEC* jd,		/* Pointer to the decompressor object */
-	UINT nd			/* Number of bytes to allocate */
-)
-{
-	char *rp = 0;
-
-
-	nd = (nd + 3) & ~3;			/* Align block size to the word boundary */
-
-	if (jd->sz_pool >= nd) {
-		jd->sz_pool -= nd;
-		rp = (char*)jd->pool;			/* Get start of available memory pool */
-		jd->pool = (void*)(rp + nd);	/* Allocate requierd bytes */
-	}
-
-	return (void*)rp;	/* Return allocated memory block (NULL:no memory to allocate) */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Create de-quantization and prescaling tables with a DQT segment       */
-/*-----------------------------------------------------------------------*/
-
-static
-UINT create_qt_tbl (	/* 0:OK, !0:Failed */
-	JDEC* jd,			/* Pointer to the decompressor object */
-	const BYTE* data,	/* Pointer to the quantizer tables */
-	UINT ndata			/* Size of input data */
-)
-{
-	UINT i;
-	BYTE d, z;
-	LONG *pb;
-
-
-	while (ndata) {	/* Process all tables in the segment */
-		if (ndata < 65) return JDR_FMT1;	/* Err: table size is unaligned */
-		ndata -= 65;
-		d = *data++;							/* Get table property */
-		if (d & 0xF0) return JDR_FMT1;			/* Err: not 8-bit resolution */
-		i = d & 3;								/* Get table ID */
-		pb = alloc_pool(jd, 64 * sizeof (LONG));/* Allocate a memory block for the table */
-		if (!pb) return JDR_MEM1;				/* Err: not enough memory */
-		jd->qttbl[i] = pb;						/* Register the table */
-		for (i = 0; i < 64; i++) {				/* Load the table */
-			z = ZIG(i);							/* Zigzag-order to raster-order conversion */
-			pb[z] = (LONG)((DWORD)*data++ * IPSF(z));	/* Apply scale factor of Arai algorithm to the de-quantizers */
-		}
-	}
-
-	return JDR_OK;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Create huffman code tables with a DHT segment                         */
-/*-----------------------------------------------------------------------*/
-
-static
-UINT create_huffman_tbl (	/* 0:OK, !0:Failed */
-	JDEC* jd,				/* Pointer to the decompressor object */
-	const BYTE* data,		/* Pointer to the packed huffman tables */
-	UINT ndata				/* Size of input data */
-)
-{
-	UINT i, j, b, np, cls, num;
-	BYTE d, *pb, *pd;
-	WORD hc, *ph;
-
-
-	while (ndata) {	/* Process all tables in the segment */
-		if (ndata < 17) return JDR_FMT1;	/* Err: wrong data size */
-		ndata -= 17;
-		d = *data++;						/* Get table number and class */
-		cls = (d >> 4); num = d & 0x0F;		/* class = dc(0)/ac(1), table number = 0/1 */
-		if (d & 0xEE) return JDR_FMT1;		/* Err: invalid class/number */
-		pb = alloc_pool(jd, 16);			/* Allocate a memory block for the bit distribution table */
-		if (!pb) return JDR_MEM1;			/* Err: not enough memory */
-		jd->huffbits[num][cls] = pb;
-		for (np = i = 0; i < 16; i++) {		/* Load number of patterns for 1 to 16-bit code */
-			pb[i] = b = *data++;
-			np += b;	/* Get sum of code words for each code */
-		}
-
-		ph = alloc_pool(jd, np * sizeof (WORD));/* Allocate a memory block for the code word table */
-		if (!ph) return JDR_MEM1;			/* Err: not enough memory */
-		jd->huffcode[num][cls] = ph;
-		hc = 0;
-		for (j = i = 0; i < 16; i++) {		/* Re-build huffman code word table */
-			b = pb[i];
-			while (b--) ph[j++] = hc++;
-			hc <<= 1;
-		}
-
-		if (ndata < np) return JDR_FMT1;	/* Err: wrong data size */
-		ndata -= np;
-		pd = alloc_pool(jd, np);			/* Allocate a memory block for the decoded data */
-		if (!pd) return JDR_MEM1;			/* Err: not enough memory */
-		jd->huffdata[num][cls] = pd;
-		for (i = 0; i < np; i++) {			/* Load decoded data corresponds to each code ward */
-			d = *data++;
-			if (!cls && d > 11) return JDR_FMT1;
-			*pd++ = d;
-		}
-	}
-
-	return JDR_OK;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Extract N bits from input stream                                      */
-/*-----------------------------------------------------------------------*/
-
-static
-INT bitext (	/* >=0: extracted data, <0: error code */
-	JDEC* jd,	/* Pointer to the decompressor object */
-	UINT nbit	/* Number of bits to extract (1 to 11) */
-)
-{
-	BYTE msk, s, *dp;
-	UINT dc, v, f;
-
-
-	msk = jd->dmsk; dc = jd->dctr; dp = jd->dptr;	/* Bit mask, number of data available, read ptr */
-	s = *dp; v = f = 0;
-	do {
-		if (!msk) {				/* Next byte? */
-			if (!dc) {			/* No input data is available, re-fill input buffer */
-				dp = jd->inbuf;	/* Top of input buffer */
-				dc = jd->infunc(jd, dp, JD_SZBUF);
-				if (!dc) return 0 - (INT)JDR_INP;	/* Err: read error or wrong stream termination */
-			} else {
-				dp++;			/* Next data ptr */
-			}
-			dc--;				/* Decrement number of available bytes */
-			if (f) {			/* In flag sequence? */
-				f = 0;			/* Exit flag sequence */
-				if (*dp != 0) return 0 - (INT)JDR_FMT1;	/* Err: unexpected flag is detected (may be collapted data) */
-				*dp = s = 0xFF;			/* The flag is a data 0xFF */
-			} else {
-				s = *dp;				/* Get next data byte */
-				if (s == 0xFF) {		/* Is start of flag sequence? */
-					f = 1; continue;	/* Enter flag sequence */
-				}
-			}
-			msk = 0x80;		/* Read from MSB */
-		}
-		v <<= 1;	/* Get a bit */
-		if (s & msk) v++;
-		msk >>= 1;
-		nbit--;
-	} while (nbit);
-	jd->dmsk = msk; jd->dctr = dc; jd->dptr = dp;
-
-	return (INT)v;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Extract a huffman decoded data from input stream                      */
-/*-----------------------------------------------------------------------*/
-
-static
-INT huffext (			/* >=0: decoded data, <0: error code */
-	JDEC* jd,			/* Pointer to the decompressor object */
-	const BYTE* hbits,	/* Pointer to the bit distribution table */
-	const WORD* hcode,	/* Pointer to the code word table */
-	const BYTE* hdata	/* Pointer to the data table */
-)
-{
-	BYTE msk, s, *dp;
-	UINT dc, v, f, bl, nd;
-
-
-	msk = jd->dmsk; dc = jd->dctr; dp = jd->dptr;	/* Bit mask, number of data available, read ptr */
-	s = *dp; v = f = 0;
-	bl = 16;	/* Max code length */
-	do {
-		if (!msk) {		/* Next byte? */
-			if (!dc) {	/* No input data is available, re-fill input buffer */
-				dp = jd->inbuf;	/* Top of input buffer */
-				dc = jd->infunc(jd, dp, JD_SZBUF);
-				if (!dc) return 0 - (INT)JDR_INP;	/* Err: read error or wrong stream termination */
-			} else {
-				dp++;	/* Next data ptr */
-			}
-			dc--;		/* Decrement number of available bytes */
-			if (f) {		/* In flag sequence? */
-				f = 0;		/* Exit flag sequence */
-				if (*dp != 0)
-					return 0 - (INT)JDR_FMT1;	/* Err: unexpected flag is detected (may be collapted data) */
-				*dp = s = 0xFF;			/* The flag is a data 0xFF */
-			} else {
-				s = *dp;				/* Get next data byte */
-				if (s == 0xFF) {		/* Is start of flag sequence? */
-					f = 1; continue;	/* Enter flag sequence, get trailing byte */
-				}
-			}
-			msk = 0x80;		/* Read from MSB */
-		}
-		v <<= 1;	/* Get a bit */
-		if (s & msk) v++;
-		msk >>= 1;
-
-		for (nd = *hbits++; nd; nd--) {	/* Search the code word in this bit length */
-			if (v == *hcode++) {		/* Matched? */
-				jd->dmsk = msk; jd->dctr = dc; jd->dptr = dp;
-				return *hdata;			/* Return the decoded data */
-			}
-			hdata++;
-		}
-		bl--;
-	} while (bl);
-
-	return 0 - (INT)JDR_FMT1;	/* Err: code not found (may be collapted data) */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Apply Inverse-DCT in Arai Algorithm (see also aa_idct.png)            */
-/*-----------------------------------------------------------------------*/
-
-static
-void block_idct (
-	LONG* src,	/* Input block data (de-quantized and pre-scaled for Arai Algorithm) */
-	BYTE* dst	/* Pointer to the destination to store the block as byte array */
-)
-{
-	const LONG M13 = (LONG)(1.41421*4096), M2 = (LONG)(1.08239*4096), M4 = (LONG)(2.61313*4096), M5 = (LONG)(1.84776*4096);
-	LONG v0, v1, v2, v3, v4, v5, v6, v7;
-	LONG t10, t11, t12, t13;
-	UINT i;
-
-	/* Process columns */
-	for (i = 0; i < 8; i++) {
-		v0 = src[8 * 0];	/* Get even elements */
-		v1 = src[8 * 2];
-		v2 = src[8 * 4];
-		v3 = src[8 * 6];
-
-		t10 = v0 + v2;		/* Process the even elements */
-		t12 = v0 - v2;
-		t11 = (v1 - v3) * M13 >> 12;
-		v3 += v1;
-		t11 -= v3;
-		v0 = t10 + v3;
-		v3 = t10 - v3;
-		v1 = t11 + t12;
-		v2 = t12 - t11;
-
-		v4 = src[8 * 7];	/* Get odd elements */
-		v5 = src[8 * 1];
-		v6 = src[8 * 5];
-		v7 = src[8 * 3];
-
-		t10 = v5 - v4;		/* Process the odd elements */
-		t11 = v5 + v4;
-		t12 = v6 - v7;
-		v7 += v6;
-		v5 = (t11 - v7) * M13 >> 12;
-		v7 += t11;
-		t13 = (t10 + t12) * M5 >> 12;
-		v4 = t13 - (t10 * M2 >> 12);
-		v6 = t13 - (t12 * M4 >> 12) - v7;
-		v5 -= v6;
-		v4 -= v5;
-
-		src[8 * 0] = v0 + v7;	/* Write-back transformed values */
-		src[8 * 7] = v0 - v7;
-		src[8 * 1] = v1 + v6;
-		src[8 * 6] = v1 - v6;
-		src[8 * 2] = v2 + v5;
-		src[8 * 5] = v2 - v5;
-		src[8 * 3] = v3 + v4;
-		src[8 * 4] = v3 - v4;
-
-		src++;	/* Next column */
-	}
-
-	/* Process rows */
-	src -= 8;
-	for (i = 0; i < 8; i++) {
-		v0 = src[0] + (128L << 8);	/* Get even elements (remove DC offset (-128) here) */
-		v1 = src[2];
-		v2 = src[4];
-		v3 = src[6];
-
-		t10 = v0 + v2;				/* Process the even elements */
-		t12 = v0 - v2;
-		t11 = (v1 - v3) * M13 >> 12;
-		v3 += v1;
-		t11 -= v3;
-		v0 = t10 + v3;
-		v3 = t10 - v3;
-		v1 = t11 + t12;
-		v2 = t12 - t11;
-
-		v4 = src[7];				/* Get odd elements */
-		v5 = src[1];
-		v6 = src[5];
-		v7 = src[3];
-
-		t10 = v5 - v4;				/* Process the odd elements */
-		t11 = v5 + v4;
-		t12 = v6 - v7;
-		v7 += v6;
-		v5 = (t11 - v7) * M13 >> 12;
-		v7 += t11;
-		t13 = (t10 + t12) * M5 >> 12;
-		v4 = t13 - (t10 * M2 >> 12);
-		v6 = t13 - (t12 * M4 >> 12) - v7;
-		v5 -= v6;
-		v4 -= v5;
-
-		dst[0] = BYTECLIP((v0 + v7) >> 8);	/* Descale the transformed values 8 bits and output */
-		dst[7] = BYTECLIP((v0 - v7) >> 8);
-		dst[1] = BYTECLIP((v1 + v6) >> 8);
-		dst[6] = BYTECLIP((v1 - v6) >> 8);
-		dst[2] = BYTECLIP((v2 + v5) >> 8);
-		dst[5] = BYTECLIP((v2 - v5) >> 8);
-		dst[3] = BYTECLIP((v3 + v4) >> 8);
-		dst[4] = BYTECLIP((v3 - v4) >> 8);
-		dst += 8;
-
-		src += 8;	/* Next row */
-	}
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Load all blocks in the MCU into working buffer                        */
-/*-----------------------------------------------------------------------*/
-
-static
-JRESULT mcu_load (
-	JDEC* jd		/* Pointer to the decompressor object */
-)
-{
-	LONG *tmp = (LONG*)jd->workbuf;	/* Block working buffer for de-quantize and IDCT */
-	UINT blk, nby, nbc, i, z, id, cmp;
-	INT b, d, e;
-	BYTE *bp;
-	const BYTE *hb, *hd;
-	const WORD *hc;
-	const LONG *dqf;
-
-
-	nby = jd->msx * jd->msy;	/* Number of Y blocks (1, 2 or 4) */
-	nbc = 2;					/* Number of C blocks (2) */
-	bp = jd->mcubuf;			/* Pointer to the first block */
-
-	for (blk = 0; blk < nby + nbc; blk++) {
-		cmp = (blk < nby) ? 0 : blk - nby + 1;	/* Component number 0:Y, 1:Cb, 2:Cr */
-		id = cmp ? 1 : 0;						/* Huffman table ID of the component */
-
-		/* Extract a DC element from input stream */
-		hb = jd->huffbits[id][0];				/* Huffman table for the DC element */
-		hc = jd->huffcode[id][0];
-		hd = jd->huffdata[id][0];
-		b = huffext(jd, hb, hc, hd);			/* Extract a huffman coded data (bit length) */
-		if (b < 0) return 0 - b;				/* Err: invalid code or input */
-		d = jd->dcv[cmp];						/* DC value of previous block */
-		if (b) {								/* If there is any difference from previous block */
-			e = bitext(jd, b);					/* Extract data bits */
-			if (e < 0) return 0 - e;			/* Err: input */
-			b = 1 << (b - 1);					/* MSB position */
-			if (!(e & b)) e -= (b << 1) - 1;	/* Restore sign if needed */
-			d += e;								/* Get current value */
-			jd->dcv[cmp] = (SHORT)d;			/* Save current DC value for next block */
-		}
-		dqf = jd->qttbl[jd->qtid[cmp]];			/* De-quantizer table ID for this component */
-		tmp[0] = d * dqf[0] >> 8;				/* De-quantize, apply scale factor of Arai algorithm and descale 8 bits */
-
-		/* Extract following 63 AC elements from input stream */
-		for (i = 1; i < 64; i++) tmp[i] = 0;	/* Clear rest of elements */
-		hb = jd->huffbits[id][1];				/* Huffman table for the AC elements */
-		hc = jd->huffcode[id][1];
-		hd = jd->huffdata[id][1];
-		i = 1;					/* Top of the AC elements */
-		do {
-			b = huffext(jd, hb, hc, hd);		/* Extract a huffman coded value (zero runs and bit length) */
-			if (b == 0) break;					/* EOB? */
-			if (b < 0) return 0 - b;			/* Err: invalid code or input error */
-			z = (UINT)b >> 4;					/* Number of leading zero elements */
-			if (z) {
-				i += z;							/* Skip zero elements */
-				if (i >= 64) return JDR_FMT1;	/* Too long zero run */
-			}
-			if (b &= 0x0F) {					/* Bit length */
-				d = bitext(jd, b);				/* Extract data bits */
-				if (d < 0) return 0 - d;		/* Err: input device */
-				b = 1 << (b - 1);				/* MSB position */
-				if (!(d & b)) d -= (b << 1) - 1;/* Restore negative value if needed */
-				z = ZIG(i);						/* Zigzag-order to raster-order converted index */
-				tmp[z] = d * dqf[z] >> 8;		/* De-quantize, apply scale factor of Arai algorithm and descale 8 bits */
-			}
-		} while (++i < 64);		/* Next AC element */
-
-		if (JD_USE_SCALE && jd->scale == 3)
-			*bp = (*tmp / 256) + 128;	/* If scale ratio is 1/8, IDCT can be ommited and only DC element is used */
-		else
-			block_idct(tmp, bp);		/* Apply IDCT and store the block to the MCU buffer */
-
-		bp += 64;				/* Next block */
-	}
-
-	return JDR_OK;	/* All blocks have been loaded successfully */
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Output an MCU: Convert YCrCb to RGB and output it in RGB form         */
-/*-----------------------------------------------------------------------*/
-
-static
-JRESULT mcu_output (
-	JDEC* jd,	/* Pointer to the decompressor object */
-	UINT (*outfunc)(JDEC*, void*, JRECT*),	/* RGB output function */
-	UINT x,		/* MCU position in the image (left of the MCU) */
-	UINT y		/* MCU position in the image (top of the MCU) */
-)
-{
-	const INT CVACC = (sizeof (INT) > 2) ? 1024 : 128;
-	UINT ix, iy, mx, my, rx, ry;
-	INT yy, cb, cr;
-	BYTE *py, *pc, *rgb24;
-	JRECT rect;
-
-
-	mx = jd->msx * 8; my = jd->msy * 8;					/* MCU size (pixel) */
-	rx = (x + mx <= jd->width) ? mx : jd->width - x;	/* Output rectangular size (it may be clipped at right/bottom end) */
-	ry = (y + my <= jd->height) ? my : jd->height - y;
-	if (JD_USE_SCALE) {
-		rx >>= jd->scale; ry >>= jd->scale;
-		if (!rx || !ry) return JDR_OK;					/* Skip this MCU if all pixel is to be rounded off */
-		x >>= jd->scale; y >>= jd->scale;
-	}
-	rect.left = x; rect.right = x + rx - 1;				/* Rectangular area in the frame buffer */
-	rect.top = y; rect.bottom = y + ry - 1;
-
-
-	if (!JD_USE_SCALE || jd->scale != 3) {	/* Not for 1/8 scaling */
-
-		/* Build an RGB MCU from discrete comopnents */
-		rgb24 = (BYTE*)jd->workbuf;
-		for (iy = 0; iy < my; iy++) {
-			pc = jd->mcubuf;
-			py = pc + iy * 8;
-			if (my == 16) {		/* Double block height? */
-				pc += 64 * 4 + (iy >> 1) * 8;
-				if (iy >= 8) py += 64;
-			} else {			/* Single block height */
-				pc += mx * 8 + iy * 8;
-			}
-			for (ix = 0; ix < mx; ix++) {
-				cb = pc[0] - 128; 	/* Get Cb/Cr component and restore right level */
-				cr = pc[64] - 128;
-				if (mx == 16) {					/* Double block width? */
-					if (ix == 8) py += 64 - 8;	/* Jump to next block if double block heigt */
-					pc += ix & 1;				/* Increase chroma pointer every two pixels */
-				} else {						/* Single block width */
-					pc++;						/* Increase chroma pointer every pixel */
-				}
-				yy = *py++;			/* Get Y component */
-
-				/* Convert YCbCr to RGB */
-				*rgb24++ = /* R */ BYTECLIP(yy + ((INT)(1.402 * CVACC) * cr) / CVACC);
-				*rgb24++ = /* G */ BYTECLIP(yy - ((INT)(0.344 * CVACC) * cb + (INT)(0.714 * CVACC) * cr) / CVACC);
-				*rgb24++ = /* B */ BYTECLIP(yy + ((INT)(1.772 * CVACC) * cb) / CVACC);
-			}
-		}
-
-		/* Descale the MCU rectangular if needed */
-		if (JD_USE_SCALE && jd->scale) {
-			UINT x, y, r, g, b, s, w, a;
-			BYTE *op;
-
-			/* Get averaged RGB value of each square correcponds to a pixel */
-			s = jd->scale * 2;	/* Bumber of shifts for averaging */
-			w = 1 << jd->scale;	/* Width of square */
-			a = (mx - w) * 3;	/* Bytes to skip for next line in the square */
-			op = (BYTE*)jd->workbuf;
-			for (iy = 0; iy < my; iy += w) {
-				for (ix = 0; ix < mx; ix += w) {
-					rgb24 = (BYTE*)jd->workbuf + (iy * mx + ix) * 3;
-					r = g = b = 0;
-					for (y = 0; y < w; y++) {	/* Accumulate RGB value in the square */
-						for (x = 0; x < w; x++) {
-							r += *rgb24++;
-							g += *rgb24++;
-							b += *rgb24++;
-						}
-						rgb24 += a;
-					}							/* Put the averaged RGB value as a pixel */
-					*op++ = (BYTE)(r >> s);
-					*op++ = (BYTE)(g >> s);
-					*op++ = (BYTE)(b >> s);
-				}
-			}
-		}
-
-	} else {	/* For only 1/8 scaling (left-top pixel in each block are the DC value of the block) */
-
-		/* Build a 1/8 descaled RGB MCU from discrete comopnents */
-		rgb24 = (BYTE*)jd->workbuf;
-		pc = jd->mcubuf + mx * my;
-		cb = pc[0] - 128;		/* Get Cb/Cr component and restore right level */
-		cr = pc[64] - 128;
-		for (iy = 0; iy < my; iy += 8) {
-			py = jd->mcubuf;
-			if (iy == 8) py += 64 * 2;
-			for (ix = 0; ix < mx; ix += 8) {
-				yy = *py;	/* Get Y component */
-				py += 64;
-
-				/* Convert YCbCr to RGB */
-				*rgb24++ = /* R */ BYTECLIP(yy + ((INT)(1.402 * CVACC) * cr / CVACC));
-				*rgb24++ = /* G */ BYTECLIP(yy - ((INT)(0.344 * CVACC) * cb + (INT)(0.714 * CVACC) * cr) / CVACC);
-				*rgb24++ = /* B */ BYTECLIP(yy + ((INT)(1.772 * CVACC) * cb / CVACC));
-			}
-		}
-	}
-
-	/* Squeeze up pixel table if a part of MCU is to be truncated */
-	mx >>= jd->scale;
-	if (rx < mx) {
-		BYTE *s, *d;
-		UINT x, y;
-
-		s = d = (BYTE*)jd->workbuf;
-		for (y = 0; y < ry; y++) {
-			for (x = 0; x < rx; x++) {	/* Copy effective pixels */
-				*d++ = *s++;
-				*d++ = *s++;
-				*d++ = *s++;
-			}
-			s += (mx - rx) * 3;	/* Skip truncated pixels */
-		}
-	}
-
-	/* Convert RGB888 to RGB565 if needed */
-	if (JD_FORMAT == 1) {
-		BYTE *s = (BYTE*)jd->workbuf;
-		WORD w, *d = (WORD*)s;
-		UINT n = rx * ry;
-
-		do {
-			w = (*s++ & 0xF8) << 8;		/* RRRRR----------- */
-			w |= (*s++ & 0xFC) << 3;	/* -----GGGGGG----- */
-			w |= *s++ >> 3;				/* -----------BBBBB */
-			*d++ = w;
-		} while (--n);
-	}
-
-	/* Output the RGB rectangular */
-	return outfunc(jd, jd->workbuf, &rect) ? JDR_OK : JDR_INTR; 
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Process restart interval                                              */
-/*-----------------------------------------------------------------------*/
-
-static
-JRESULT restart (
-	JDEC* jd,	/* Pointer to the decompressor object */
-	WORD rstn	/* Expected restert sequense number */
-)
-{
-	UINT i, dc;
-	WORD d;
-	BYTE *dp;
-
-
-	/* Discard padding bits and get two bytes from the input stream */
-	dp = jd->dptr; dc = jd->dctr;
-	d = 0;
-	for (i = 0; i < 2; i++) {
-		if (!dc) {	/* No input data is available, re-fill input buffer */
-			dp = jd->inbuf;
-			dc = jd->infunc(jd, dp, JD_SZBUF);
-			if (!dc) return JDR_INP;
-		} else {
-			dp++;
-		}
-		dc--;
-		d = (d << 8) | *dp;	/* Get a byte */
-	}
-	jd->dptr = dp; jd->dctr = dc; jd->dmsk = 0;
-
-	/* Check the marker */
-	if ((d & 0xFFD8) != 0xFFD0 || (d & 7) != (rstn & 7))
-		return JDR_FMT1;	/* Err: expected RSTn marker is not detected (may be collapted data) */
-
-	/* Reset DC offset */
-	jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0;
-
-	return JDR_OK;
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Analyze the JPEG image and Initialize decompressor object             */
-/*-----------------------------------------------------------------------*/
-
-#define	LDB_WORD(ptr)		(WORD)(((WORD)*((BYTE*)(ptr))<<8)|(WORD)*(BYTE*)((ptr)+1))
-
-
-JRESULT jd_prepare (
-	JDEC* jd,			/* Blank decompressor object */
-	UINT (*infunc)(JDEC*, BYTE*, UINT),	/* JPEG strem input function */
-	void* pool,			/* Working buffer for the decompression session */
-	UINT sz_pool,		/* Size of working buffer */
-	void* dev			/* I/O device identifier for the session */
-)
-{
-	BYTE *seg, b;
-	WORD marker;
-	DWORD ofs;
-	UINT n, i, j, len;
-	JRESULT rc;
-
-
-	if (!pool) return JDR_PAR;
-
-	jd->pool = pool;		/* Work memroy */
-	jd->sz_pool = sz_pool;	/* Size of given work memory */
-	jd->infunc = infunc;	/* Stream input function */
-	jd->device = dev;		/* I/O device identifier */
-	jd->nrst = 0;			/* No restart interval (default) */
-
-	for (i = 0; i < 2; i++) {	/* Nulls pointers */
-		for (j = 0; j < 2; j++) {
-			jd->huffbits[i][j] = 0;
-			jd->huffcode[i][j] = 0;
-			jd->huffdata[i][j] = 0;
-		}
-	}
-	for (i = 0; i < 4; i++) jd->qttbl[i] = 0;
-
-	jd->inbuf = seg = alloc_pool(jd, JD_SZBUF);		/* Allocate stream input buffer */
-	if (!seg) return JDR_MEM1;
-
-	if (jd->infunc(jd, seg, 2) != 2) return JDR_INP;/* Check SOI marker */
-	if (LDB_WORD(seg) != 0xFFD8) return JDR_FMT1;	/* Err: SOI is not detected */
-	ofs = 2;
-
-	for (;;) {
-		/* Get a JPEG marker */
-		if (jd->infunc(jd, seg, 4) != 4) return JDR_INP;
-		marker = LDB_WORD(seg);		/* Marker */
-		len = LDB_WORD(seg + 2);	/* Length field */
-		if (len <= 2 || (marker >> 8) != 0xFF) return JDR_FMT1;
-		len -= 2;		/* Content size excluding length field */
-		ofs += 4 + len;	/* Number of bytes loaded */
-
-		switch (marker & 0xFF) {
-		case 0xC0:	/* SOF0 (baseline JPEG) */
-			/* Load segment data */
-			if (len > JD_SZBUF) return JDR_MEM2;
-			if (jd->infunc(jd, seg, len) != len) return JDR_INP;
-
-			jd->width = LDB_WORD(seg+3);		/* Image width in unit of pixel */
-			jd->height = LDB_WORD(seg+1);		/* Image height in unit of pixel */
-			if (seg[5] != 3) return JDR_FMT3;	/* Err: Supports only Y/Cb/Cr format */
-
-			/* Check three image components */
-			for (i = 0; i < 3; i++) {	
-				b = seg[7 + 3 * i];							/* Get sampling factor */
-				if (!i) {	/* Y component */
-					if (b != 0x11 && b != 0x22 && b != 0x21)/* Check sampling factor */
-						return JDR_FMT3;					/* Err: Supports only 4:4:4, 4:2:0 or 4:2:2 */
-					jd->msx = b >> 4; jd->msy = b & 15;		/* Size of MCU [blocks] */
-				} else {	/* Cb/Cr component */
-					if (b != 0x11) return JDR_FMT3;			/* Err: Sampling factor of Cr/Cb must be 1 */
-				}
-				b = seg[8 + 3 * i];							/* Get dequantizer table ID for this component */
-				if (b > 3) return JDR_FMT3;					/* Err: Invalid ID */
-				jd->qtid[i] = b;
-			}
-			break;
-
-		case 0xDD:	/* DRI */
-			/* Load segment data */
-			if (len > JD_SZBUF) return JDR_MEM2;
-			if (jd->infunc(jd, seg, len) != len) return JDR_INP;
-
-			/* Get restart interval (MCUs) */
-			jd->nrst = LDB_WORD(seg);
-			break;
-
-		case 0xC4:	/* DHT */
-			/* Load segment data */
-			if (len > JD_SZBUF) return JDR_MEM2;
-			if (jd->infunc(jd, seg, len) != len) return JDR_INP;
-
-			/* Create huffman tables */
-			rc = create_huffman_tbl(jd, seg, len);
-			if (rc) return rc;
-			break;
-
-		case 0xDB:	/* DQT */
-			/* Load segment data */
-			if (len > JD_SZBUF) return JDR_MEM2;
-			if (jd->infunc(jd, seg, len) != len) return JDR_INP;
-
-			/* Create de-quantizer tables */
-			rc = create_qt_tbl(jd, seg, len);
-			if (rc) return rc;
-			break;
-
-		case 0xDA:	/* SOS */
-			/* Load segment data */
-			if (len > JD_SZBUF) return JDR_MEM2;
-			if (jd->infunc(jd, seg, len) != len) return JDR_INP;
-
-			if (!jd->width || !jd->height) return JDR_FMT1;	/* Err: Invalid image size */
-
-			if (seg[0] != 3) return JDR_FMT3;				/* Err: Supports only three color components format */
-
-			/* Check if all tables corresponding to each components have been loaded */
-			for (i = 0; i < 3; i++) {
-				b = seg[2 + 2 * i];	/* Get huffman table ID */
-				if (b != 0x00 && b != 0x11)	return JDR_FMT3;	/* Err: Different table number for DC/AC element */
-				b = i ? 1 : 0;
-				if (!jd->huffbits[b][0] || !jd->huffbits[b][1])	/* Check huffman table for this component */
-					return JDR_FMT1;							/* Err: Huffman table not loaded */
-				if (!jd->qttbl[jd->qtid[i]]) return JDR_FMT1;	/* Err: Dequantizer table not loaded */
-			}
-
-			/* Allocate working buffer for MCU and RGB */
-			n = jd->msy * jd->msx;						/* Number of Y blocks in the MCU */
-			if (!n) return JDR_FMT1;					/* Err: SOF0 has not been loaded */
-			len = n * 64 * 2 + 64;						/* Allocate buffer for IDCT and RGB output */
-			if (len < 256) len = 256;					/* but at least 256 byte is required for IDCT */
-			jd->workbuf = alloc_pool(jd, len);			/* and it may occupy a part of following MCU working buffer for RGB output */
-			if (!jd->workbuf) return JDR_MEM1;			/* Err: not enough memory */
-			jd->mcubuf = alloc_pool(jd, (n + 2) * 64);	/* Allocate MCU working buffer */
-			if (!jd->mcubuf) return JDR_MEM1;			/* Err: not enough memory */
-
-			/* Pre-load the JPEG data to extract it from the bit stream */
-			jd->dptr = seg; jd->dctr = 0; jd->dmsk = 0;	/* Prepare to read bit stream */
-			if (ofs %= JD_SZBUF) {						/* Align read offset to JD_SZBUF */
-				jd->dctr = jd->infunc(jd, seg + ofs, JD_SZBUF - (UINT)ofs);
-				jd->dptr = seg + ofs - 1;
-			}
-
-			return JDR_OK;		/* Initialization succeeded. Ready to decompress the JPEG image. */
-
-		case 0xC1:	/* SOF1 */
-		case 0xC2:	/* SOF2 */
-		case 0xC3:	/* SOF3 */
-		case 0xC5:	/* SOF5 */
-		case 0xC6:	/* SOF6 */
-		case 0xC7:	/* SOF7 */
-		case 0xC9:	/* SOF9 */
-		case 0xCA:	/* SOF10 */
-		case 0xCB:	/* SOF11 */
-		case 0xCD:	/* SOF13 */
-		case 0xCE:	/* SOF14 */
-		case 0xCF:	/* SOF15 */
-		case 0xD9:	/* EOI */
-			return JDR_FMT3;	/* Unsuppoted JPEG standard (may be progressive JPEG) */
-
-		default:	/* Unknown segment (comment, exif or etc..) */
-			/* Skip segment data */
-			if (jd->infunc(jd, 0, len) != len)	/* Null pointer specifies to skip bytes of stream */
-				return JDR_INP;
-		}
-	}
-}
-
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Start to decompress the JPEG picture                                  */
-/*-----------------------------------------------------------------------*/
-
-JRESULT jd_decomp (
-	JDEC* jd,								/* Initialized decompression object */
-	UINT (*outfunc)(JDEC*, void*, JRECT*),	/* RGB output function */
-	BYTE scale								/* Output de-scaling factor (0 to 3) */
-)
-{
-	UINT x, y, mx, my;
-	WORD rst, rsc;
-	JRESULT rc;
-
-
-	if (scale > (JD_USE_SCALE ? 3 : 0)) return JDR_PAR;
-	jd->scale = scale;
-
-	mx = jd->msx * 8; my = jd->msy * 8;			/* Size of the MCU (pixel) */
-
-	jd->dcv[2] = jd->dcv[1] = jd->dcv[0] = 0;	/* Initialize DC values */
-	rst = rsc = 0;
-
-	rc = JDR_OK;
-	for (y = 0; y < jd->height; y += my) {		/* Vertical loop of MCUs */
-		for (x = 0; x < jd->width; x += mx) {	/* Horizontal loop of MCUs */
-			if (jd->nrst && rst++ == jd->nrst) {	/* Process restart interval if enabled */
-				rc = restart(jd, rsc++);
-				if (rc != JDR_OK) return rc;
-				rst = 1;
-			}
-			rc = mcu_load(jd);					/* Load an MCU (decompress huffman coded stream and apply IDCT) */
-			if (rc != JDR_OK) return rc;
-			rc = mcu_output(jd, outfunc, x, y);	/* Output the MCU (color space conversion, scaling and output) */
-			if (rc != JDR_OK) return rc;
-		}
-	}
-
-	return rc;
-}
-#endif//SUPPORT_JPEG
-
-

+ 0 - 64
code/components/esp32-camera-master/target/xclk.c

@@ -1,64 +0,0 @@
-#include "driver/gpio.h"
-#include "driver/ledc.h"
-#include "esp_err.h"
-#include "esp_log.h"
-#include "esp_system.h"
-#include "xclk.h"
-#include "esp_camera.h"
-
-#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
-#include "esp32-hal-log.h"
-#else
-#include "esp_log.h"
-static const char* TAG = "camera_xclk";
-#endif
-
-static ledc_channel_t g_ledc_channel = 0;
-
-esp_err_t xclk_timer_conf(int ledc_timer, int xclk_freq_hz)
-{
-    ledc_timer_config_t timer_conf;
-    timer_conf.duty_resolution = LEDC_TIMER_1_BIT;
-    timer_conf.freq_hz = xclk_freq_hz;
-    timer_conf.speed_mode = LEDC_LOW_SPEED_MODE;
-
-#if ESP_IDF_VERSION_MAJOR >= 4
-    timer_conf.clk_cfg = LEDC_AUTO_CLK;
-#endif
-    timer_conf.timer_num = (ledc_timer_t)ledc_timer;
-    esp_err_t err = ledc_timer_config(&timer_conf);
-    if (err != ESP_OK) {
-        ESP_LOGE(TAG, "ledc_timer_config failed for freq %d, rc=%x", xclk_freq_hz, err);
-    }
-    return err;
-}
-
-esp_err_t camera_enable_out_clock(camera_config_t* config)
-{
-    esp_err_t err = xclk_timer_conf(config->ledc_timer, config->xclk_freq_hz);
-    if (err != ESP_OK) {
-        ESP_LOGE(TAG, "ledc_timer_config failed, rc=%x", err);
-        return err;
-    }
-
-    g_ledc_channel = config->ledc_channel;
-    ledc_channel_config_t ch_conf;
-    ch_conf.gpio_num = config->pin_xclk;
-    ch_conf.speed_mode = LEDC_LOW_SPEED_MODE;
-    ch_conf.channel = config->ledc_channel;
-    ch_conf.intr_type = LEDC_INTR_DISABLE;
-    ch_conf.timer_sel = config->ledc_timer;
-    ch_conf.duty = 1;
-    ch_conf.hpoint = 0;
-    err = ledc_channel_config(&ch_conf);
-    if (err != ESP_OK) {
-        ESP_LOGE(TAG, "ledc_channel_config failed, rc=%x", err);
-        return err;
-    }
-    return ESP_OK;
-}
-
-void camera_disable_out_clock()
-{
-    ledc_stop(LEDC_LOW_SPEED_MODE, g_ledc_channel, 0);
-}

+ 0 - 4
code/components/esp32-camera-master/test/CMakeLists.txt

@@ -1,4 +0,0 @@
-idf_component_register(SRC_DIRS .
-                       PRIV_INCLUDE_DIRS .
-                       PRIV_REQUIRES test_utils esp32-camera nvs_flash 
-                       EMBED_TXTFILES pictures/testimg.jpeg pictures/test_outside.jpeg pictures/test_inside.jpeg)

+ 0 - 8
code/components/esp32-camera-master/test/component.mk

@@ -1,8 +0,0 @@
-#
-#Component Makefile
-#
-
-COMPONENT_SRCDIRS += ./
-COMPONENT_PRIV_INCLUDEDIRS += ./
-
-COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive

BIN
code/components/esp32-camera-master/test/pictures/test_inside.jpeg


BIN
code/components/esp32-camera-master/test/pictures/test_outside.jpeg


BIN
code/components/esp32-camera-master/test/pictures/testimg.jpeg