Sync inav to Gitea
Make sure docs are updated / settings_md (push) Canceled after 0s
Build firmware / test (push) Canceled after 0s
Build firmware / build-SITL-Windows (push) Canceled after 0s
Build firmware / build-SITL-Mac (push) Canceled after 0s
Build firmware / build-SITL-Linux (push) Canceled after 0s
Build firmware / build-SITL-Linux-arm64 (push) Canceled after 0s
Build firmware / upload-artifacts (push) Canceled after 0s
Build firmware / build-single-target (push) Canceled after 0s
Build firmware / build (9) (push) Canceled after 0s
Build firmware / build (8) (push) Canceled after 0s
Build firmware / build (7) (push) Canceled after 0s
Build firmware / build (6) (push) Canceled after 0s
Build firmware / build (5) (push) Canceled after 0s
Build firmware / build (4) (push) Canceled after 0s
Build firmware / build (3) (push) Canceled after 0s
Build firmware / build (2) (push) Canceled after 0s
Build firmware / build (14) (push) Canceled after 0s
Build firmware / build (13) (push) Canceled after 0s
Build firmware / build (12) (push) Canceled after 0s
Build firmware / build (11) (push) Canceled after 0s
Build firmware / build (10) (push) Canceled after 0s
Build firmware / build (1) (push) Canceled after 0s
Build firmware / build (0) (push) Canceled after 0s
Build firmware / detect (push) Canceled after 0s
Build pre-release / build (push) Canceled after 0s
Build pre-release / Release (push) Canceled after 0s

This commit is contained in:
2026-08-03 16:37:40 +08:00
commit dac37fd077
14095 changed files with 5603119 additions and 0 deletions
@@ -0,0 +1,37 @@
---
name: 'Bug report'
about: 'Create a report to help us improve the quality of our software'
title: ''
labels: ''
assignees: ''
---
**Caution**
The Issues are strictly limited for the reporting of problem encountered with the software provided in this project.
For any other problem related to the STM32 product, the performance, the hardware characteristics and boards, the tools the environment in general, please post your report to the **ST Community** in the STM32 MCUs dedicated [page](https://community.st.com/s/group/0F90X000000AXsASAW/stm32-mcus).
**Describe the set-up**
* The board (either ST RPN reference or your custom board)
* IDE or at least the compiler and its version
**Describe the bug (skip if none)**
A clear and concise description of what the bug is.
**How to reproduce the bug (skip if none)**
1. Indicate the global behavior of your application project
2. List the modules that you suspect to be the cause of the problem (Drivers, BSP, MW...)
3. Describe the use case that generates the problem
4. How we can reproduce the problem
**Additional context**
If you have a first analysis, an enhancement, a fix or a patch, thank you to share your proposal.
**Screenshots**
If applicable, add screenshots to help explain your problem.
@@ -0,0 +1,3 @@
## IMPORTANT INFORMATION
Pull-requests are **not** accepted on this repository. Please use issues to report any bug or request.
@@ -0,0 +1,73 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team via this [link](https://www.st.com/content/st_com/en/contact-us.html).
All complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 1.4,
available [here](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html).
For answers to common questions about this code of conduct, see the [FAQ section](https://www.contributor-covenant.org/faq).
@@ -0,0 +1,28 @@
## Contributing guide
This document serves as a checklist before contributing to this repository.
It includes links to read up on if topics are unclear to you.
This guide mainly focuses on steps to be followed to submit an issue or a pull-request.
### 1. Before opening an issue
To report a bug or a request please file an issue in the right repository
(example for [ov9655](https://github.com/STMicroelectronics/ov9655/issues/new/choose)).
Please check the following boxes before posting an issue:
- [ ] `Make sure you are using the latest commit (major releases are tagged, but corrections are available as new commits).`
- [ ] `Make sure your issue is a question/feedback/suggestions RELATED TO the software provided in this repository.` Otherwise, it should be submitted to the ST Community under the MCU topic [page](https://community.st.com/s/group/0F90X000000AXsASAW/stm32-mcus).
- [ ] `Make sure your issue is not already reported/fixed on GitHub or discussed on a previous issue.` Please refer to this [dashboard](https://github.com/orgs/STMicroelectronics/projects/2) for the list of issues and pull-requests. Do not forget to browse into the **closed** issues.
### 2. Posting the issue
When you have checked the previous boxes. You will find two templates (Bug Report or Other Issue) available in the **Issues** tab of the repository.
### 3. Pull Requests
Pull-requests are **not** accepted on this repository. Please use **issues** to report any bug or request.
### 4. How to proceed
* We recommend to engage first a communication thru an issue, in order to present your proposal. Just to confirm that it corresponds to STMicroelectronics domain or scope.
* Then fork the project to your GitHub account to further develop your contribution. Please use the latest commit version.
* Please, submit one Pull Request for one new feature or proposal. This will ease the analysis and the final merge if accepted.
@@ -0,0 +1,3 @@
# Copyright (c) 2015 STMicroelectronics
This software component is licensed by STMicroelectronics under the **BSD-3-Clause** license. You may not use this software except in compliance with this license. You may obtain a copy of the license [here](https://opensource.org/licenses/BSD-3-Clause).
@@ -0,0 +1,40 @@
# BSP OV9655 Component
## Overview
**STM32Cube** is an STMicroelectronics original initiative to ease the developers life by reducing efforts, time and cost.
**STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series.
* The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product.
* The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio.
* The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series.
* A consistent set of middleware components such as RTOS, USB, FatFS, graphics, touch sensing library...
* A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series.
Two models of publication are proposed for the STM32Cube embedded software:
* The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series).
* The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions.
## Description
This **ov9655** MCU component repository is one element **common to all** STM32Cube MCU embedded software packages, providing the **OV9655** BSP CAMERA component part.
## License
Copyright (c) 2015 STMicroelectronics
This software component is licensed by STMicroelectronics under the **BSD-3-Clause** license. You may not use this software except in compliance with this license. You may obtain a copy of the license [here](https://opensource.org/licenses/BSD-3-Clause).
## Release note
Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/ov9655/blob/main/Release_Notes.html).
## Compatibility information
Please refer to the repository of the BSP **board** driver you are using to know which version of this BSP component driver to use. It is **crucial** that you use a consistent set of versions. It is **crucial** that you use a consistent set of versions as indicated.
## Troubleshooting
If you have any issue with the **software content** of this repository, you can file an issue [here](https://github.com/STMicroelectronics/ov9655/issues/new/choose).
For any other question related to the product, the tools, the environment, you can submit a topic to the [ST Community](https://community.st.com/s/).
@@ -0,0 +1,130 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Release Notes for OV9655 Component Driver</title>
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
</style>
<link rel="stylesheet" href="_htmresc/mini-st.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<div class="row">
<div class="col-sm-12 col-lg-4">
<div class="card fluid">
<div class="sectione dark">
<center>
<h1 id="release-notes-for-ov9655-component-driver"><strong>Release Notes for OV9655 Component Driver</strong></h1>
<p>Copyright © 2019 STMicroelectronics<br />
</p>
<a href="https://www.st.com" class="logo"><img src="_htmresc/st_logo.png" alt="ST logo" /></a>
</center>
</div>
</div>
<h1 id="license">License</h1>
This software component is licensed by ST under BSD 3-Clause license, the “License”; You may not use this component except in compliance with the License. You may obtain a copy of the License at:
<center>
<a href="https://opensource.org/licenses/BSD-3-Clause">https://opensource.org/licenses/BSD-3-Clause</a>
</center>
<h1 id="purpose">Purpose</h1>
<p>This driver provides a set of camera functions offered by OV9655 component</p>
</div>
<div class="col-sm-12 col-lg-8">
<h1 id="update-history">Update History</h1>
<div class="collapse">
<input type="checkbox" id="collapse-section5" checked aria-hidden="true"> <label for="collapse-section5" aria-hidden="true"><strong>V2.2.0 / 15-December-2020</strong></label>
<div>
<h2 id="main-changes">Main Changes</h2>
<ul>
<li>Fix Mirror/Flip setting in OV9655_MirrorFlipConfig API:
<ul>
<li>Clear Bit[4:5] corresponding to mirror/flip selection before applaying the new configuration</li>
</ul></li>
</ul>
<h2 id="backward-compatibility">Backward Compatibility</h2>
<ul>
<li>None</li>
</ul>
<h2 id="dependencies">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>BSP Common v6.0.0 or above</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section4" aria-hidden="true"> <label for="collapse-section4" aria-hidden="true"><strong>V2.1.0 / 30-September-2020</strong></label>
<div>
<h2 id="main-changes-1">Main Changes</h2>
<ul>
<li>Fix pixel format setting in OV9655_SetPixelFormat API:
<ul>
<li>Clear Bit[0:1] corresponding to pixel format selection before applaying the new configuration</li>
<li>Update registers TSLB and COMMON15 required for setting YUV format</li>
</ul></li>
</ul>
<h2 id="backward-compatibility-1">Backward Compatibility</h2>
<ul>
<li>None</li>
</ul>
<h2 id="dependencies-1">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>BSP Common v6.0.0 or above</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section3" aria-hidden="true"> <label for="collapse-section3" aria-hidden="true"><strong>V2.0.0 / 30-October-2019</strong></label>
<div>
<h2 id="main-changes-2">Main Changes</h2>
<ul>
<li>First Official Release version of OV9655 Camera sensor Component in line with STM32Cube BSP drivers development guidelines (UM2298)</li>
<li>The component drivers are composed of
<ul>
<li>component core drivers files: ov9655.h/.c</li>
<li>component register drivers files: ov9655_regs.h/.c</li>
</ul></li>
</ul>
<h2 id="backward-compatibility-2">Backward Compatibility</h2>
<p>This version breaks the compatibility with previous versions</p>
<h2 id="dependencies-2">Dependencies</h2>
<p>This software release is compatible with:</p>
<ul>
<li>BSP Common v6.0.0 or above</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section2" aria-hidden="true"> <label for="collapse-section2" aria-hidden="true"><strong>V1.0.1 / 07-April-2017</strong></label>
<div>
<h2 id="main-changes-3">Main Changes</h2>
<ul>
<li>Update comments to be used for PDSC generation</li>
</ul>
</div>
</div>
<div class="collapse">
<input type="checkbox" id="collapse-section1" aria-hidden="true"> <label for="collapse-section1" aria-hidden="true"><strong>V1.0.0 / 25-June-2015</strong></label>
<div>
<h2 id="main-changes-4">Main Changes</h2>
<ul>
<li>First official release of <strong>OV9655</strong> Camera sensor driver</li>
</ul>
</div>
</div>
</div>
</div>
<footer class="sticky">
For complete documentation on <mark>STM32 Microcontrollers</mark> , visit: <span style="font-color: blue;"><a href="http://www.st.com/STM32">www.st.com</a></span>
</footer>
</body>
</html>
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because it is too large Load Diff
@@ -0,0 +1,215 @@
/**
******************************************************************************
* @file ov9655.h
* @author MCD Application Team
* @brief This file contains all the functions prototypes for the ov9655.c
* driver.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef OV9655_H
#define OV9655_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "ov9655_reg.h"
#include <stddef.h>
/** @addtogroup BSP
* @{
*/
/** @addtogroup Components
* @{
*/
/** @addtogroup ov9655
* @{
*/
/** @defgroup OV9655_Exported_Types Exported Types
* @{
*/
typedef int32_t (*OV9655_Init_Func) (void);
typedef int32_t (*OV9655_DeInit_Func) (void);
typedef int32_t (*OV9655_GetTick_Func) (void);
typedef int32_t (*OV9655_Delay_Func) (uint32_t);
typedef int32_t (*OV9655_WriteReg_Func)(uint16_t, uint16_t, uint8_t*, uint16_t);
typedef int32_t (*OV9655_ReadReg_Func) (uint16_t, uint16_t, uint8_t*, uint16_t);
typedef struct
{
OV9655_Init_Func Init;
OV9655_DeInit_Func DeInit;
uint16_t Address;
OV9655_WriteReg_Func WriteReg;
OV9655_ReadReg_Func ReadReg;
OV9655_GetTick_Func GetTick;
} OV9655_IO_t;
typedef struct
{
OV9655_IO_t IO;
ov9655_ctx_t Ctx;
uint8_t IsInitialized;
} OV9655_Object_t;
typedef struct
{
uint32_t Config_Resolution;
uint32_t Config_LightMode;
uint32_t Config_SpecialEffect;
uint32_t Config_Brightness;
uint32_t Config_Saturation;
uint32_t Config_Contrast;
uint32_t Config_HueDegree;
uint32_t Config_MirrorFlip;
uint32_t Config_Zoom;
uint32_t Config_NightMode;
} OV9655_Capabilities_t;
typedef struct
{
int32_t (*Init )(OV9655_Object_t*, uint32_t, uint32_t);
int32_t (*DeInit )(OV9655_Object_t*);
int32_t (*ReadID )(OV9655_Object_t*, uint32_t*);
int32_t (*GetCapabilities )(OV9655_Object_t*, OV9655_Capabilities_t*);
int32_t (*SetLightMode )(OV9655_Object_t*, uint32_t);
int32_t (*SetColorEffect )(OV9655_Object_t*, uint32_t);
int32_t (*SetBrightness )(OV9655_Object_t*, int32_t);
int32_t (*SetSaturation )(OV9655_Object_t*, int32_t);
int32_t (*SetContrast )(OV9655_Object_t*, int32_t);
int32_t (*SetHueDegree )(OV9655_Object_t*, int32_t);
int32_t (*MirrorFlipConfig )(OV9655_Object_t*, uint32_t);
int32_t (*ZoomConfig )(OV9655_Object_t*, uint32_t);
int32_t (*SetResolution )(OV9655_Object_t*, uint32_t);
int32_t (*GetResolution )(OV9655_Object_t*, uint32_t*);
int32_t (*SetPixelFormat )(OV9655_Object_t*, uint32_t);
int32_t (*GetPixelFormat )(OV9655_Object_t*, uint32_t*);
int32_t (*NightModeConfig )(OV9655_Object_t*, uint32_t);
}OV9655_CAMERA_Drv_t;
/**
* @}
*/
/** @defgroup OV9655_Exported_Constants Exported Constants
* @{
*/
#define OV9655_OK (0)
#define OV9655_ERROR (-1)
/**
* @brief OV9655 Features Parameters
*/
/* Camera resolutions */
#define OV9655_R160x120 0x00U /* QQVGA Resolution */
#define OV9655_R320x240 0x01U /* QVGA Resolution */
#define OV9655_R480x272 0x02U /* 480x272 Resolution: Not
supported */
#define OV9655_R640x480 0x03U /* VGA Resolution */
/* Camera Pixel Format */
#define OV9655_RGB565 0x00U /* Pixel Format RGB565 */
#define OV9655_RGB888 0x01U /* Pixel Format RGB888:
Not supported */
#define OV9655_YUV422 0x02U /* Pixel Format YUV422 */
/* Mirror/Flip */
#define OV9655_MIRROR_FLIP_NONE 0x00U /* Set camera normal mode */
#define OV9655_FLIP 0x01U /* Set camera flip config */
#define OV9655_MIRROR 0x02U /* Set camera mirror config */
#define OV9655_MIRROR_FLIP 0x03U /* Set camera mirror and flip */
/* Zoom */
#define OV9655_ZOOM_x8 0x00U /* Set zoom to x8 */
#define OV9655_ZOOM_x4 0x11U /* Set zoom to x4 */
#define OV9655_ZOOM_x2 0x22U /* Set zoom to x2 */
#define OV9655_ZOOM_x1 0x44U /* Set zoom to x1 */
/* Special Effect */
#define OV9655_COLOR_EFFECT_NONE 0x00U /* No effect */
#define OV9655_COLOR_EFFECT_BLUE 0x01U /* Blue effect */
#define OV9655_COLOR_EFFECT_RED 0x02U /* Red effect */
#define OV9655_COLOR_EFFECT_GREEN 0x04U /* Green effect */
#define OV9655_COLOR_EFFECT_BW 0x08U /* Black and White effect */
#define OV9655_COLOR_EFFECT_SEPIA 0x10U /* Sepia effect */
#define OV9655_COLOR_EFFECT_NEGATIVE 0x20U /* Negative effect */
/* Light Mode */
#define OV9655_LIGHT_AUTO 0x00U /* Light Mode Auto */
#define OV9655_LIGHT_SUNNY 0x01U /* Light Mode Sunny */
#define OV9655_LIGHT_OFFICE 0x02U /* Light Mode Office */
#define OV9655_LIGHT_HOME 0x04U /* Light Mode Home */
#define OV9655_LIGHT_CLOUDY 0x08U /* Light Mode Claudy */
/* Night Mode */
#define NIGHT_MODE_DISABLE 0x00U /* Disable night mode */
#define NIGHT_MODE_ENABLE 0x01U /* Enable night mode */
/**
* @}
*/
/** @defgroup OV9655_Exported_Functions OV9655 Exported Functions
* @{
*/
int32_t OV9655_RegisterBusIO (OV9655_Object_t *pObj, OV9655_IO_t *pIO);
int32_t OV9655_Init(OV9655_Object_t *pObj, uint32_t Resolution, uint32_t PixelFormat);
int32_t OV9655_DeInit(OV9655_Object_t *pObj);
int32_t OV9655_ReadID(OV9655_Object_t *pObj, uint32_t *Id);
int32_t OV9655_GetCapabilities(OV9655_Object_t *pObj, OV9655_Capabilities_t *Capabilities);
int32_t OV9655_SetLightMode(OV9655_Object_t *pObj, uint32_t LightMode);
int32_t OV9655_SetColorEffect(OV9655_Object_t *pObj, uint32_t Effect);
int32_t OV9655_SetBrightness(OV9655_Object_t *pObj, int32_t Level);
int32_t OV9655_SetSaturation(OV9655_Object_t *pObj, int32_t Level);
int32_t OV9655_SetContrast(OV9655_Object_t *pObj, int32_t Level);
int32_t OV9655_SetHueDegree(OV9655_Object_t *pObj, int32_t Degree);
int32_t OV9655_MirrorFlipConfig(OV9655_Object_t *pObj, uint32_t Config);
int32_t OV9655_ZoomConfig(OV9655_Object_t *pObj, uint32_t Zoom);
int32_t OV9655_SetResolution(OV9655_Object_t *pObj, uint32_t Resolution);
int32_t OV9655_GetResolution(OV9655_Object_t *pObj, uint32_t *Resolution);
int32_t OV9655_SetPixelFormat(OV9655_Object_t *pObj, uint32_t PixelFormat);
int32_t OV9655_GetPixelFormat(OV9655_Object_t *pObj, uint32_t *PixelFormat);
int32_t OV9655_NightModeConfig(OV9655_Object_t *pObj, uint32_t Cmd);
/* CAMERA driver structure */
extern OV9655_CAMERA_Drv_t OV9655_CAMERA_Driver;
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* OV9655_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
@@ -0,0 +1,75 @@
/**
******************************************************************************
* @file ov9655_reg.c
* @author MCD Application Team
* @brief This file provides unitary register function to control the OV9655
* Camera driver.
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "ov9655_reg.h"
/** @addtogroup BSP
* @{
*/
/** @addtogroup Components
* @{
*/
/** @addtogroup OV9655
* @brief This file provides a set of functions needed to drive the
* OV9655 Camera codec.
* @{
*/
/************** Generic Function *******************/
/*******************************************************************************
* Function Name : ov9655_read_reg
* Description : Generic Reading function. It must be fullfilled with either
* I2C or SPI reading functions
* Input : Register Address, length of buffer
* Output : Data Read
*******************************************************************************/
int32_t ov9655_read_reg(ov9655_ctx_t *ctx, uint16_t reg, uint8_t *pdata, uint16_t length)
{
return ctx->ReadReg(ctx->handle, reg, pdata, length);
}
/*******************************************************************************
* Function Name : OV9655_Write_Reg
* Description : Generic Writing function. It must be fullfilled with either
* I2C or SPI writing function
* Input : Register Address, Data to be written, length of buffer
* Output : None
*******************************************************************************/
int32_t ov9655_write_reg(ov9655_ctx_t *ctx, uint16_t reg, uint8_t *data, uint16_t length)
{
return ctx->WriteReg(ctx->handle, reg, data, length);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
@@ -0,0 +1,257 @@
/**
******************************************************************************
* @file ov9655_reg.h
* @author MCD Application Team
* @brief Header of ov9655_reg.c
*
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2015 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef OV9655_REG_H
#define OV9655_REG_H
#include <cmsis_compiler.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
/** @addtogroup BSP
* @{
*/
/** @addtogroup Components
* @{
*/
/** @addtogroup OV9655
* @{
*/
/** @defgroup OV9655_Exported_Types
* @{
*/
/**
* @}
*/
/** @defgroup OV9655_Exported_Constants OV9655 Exported Constants
* @{
*/
/**
* @brief OV9655 ID
*/
#define OV9655_ID 0x9656U
#define OV9655_ID_2 0x9657U
/**
* @brief OV9655 Registers
*/
#define OV9655_GAIN_CTRL 0x00U
#define OV9655_AWB_BLUE_GAIN_CTRL 0x01U
#define OV9655_AWB_RED_GAIN_CTRL 0x02U
#define OV9655_VERTIVCAL_FRAME_CTRL 0x03U
#define OV9655_COMMON_CTRL1 0x04U
#define OV9655_UB_AVERAGE_LEVEL 0x05U
#define OV9655_YGB_AVERAGE_LEVEL 0x06U
#define OV9655_GR_AVERAGE_LEVEL 0x07U
#define OV9655_VR_AVERAGE_LEVEL 0x08U
#define OV9655_COMMON_CTRL2 0x09U
#define OV9655_PID_NUMBER_HIGH 0x0AU
#define OV9655_PID_NUMBER_LOW 0x0BU
#define OV9655_COMMON_CTRL3 0x0CU
#define OV9655_COMMON_CTRL4 0x0DU
#define OV9655_COMMON_CTRL5 0x0EU
#define OV9655_COMMON_CTRL6 0x0FU
#define OV9655_EXPOSURE_VALUE 0x10U
#define OV9655_INTERNAL_CLOCK 0x11U
#define OV9655_COMMON_CTRL7 0x12U
#define OV9655_COMMON_CTRL8 0x13U
#define OV9655_COMMON_CTRL9 0x14U
#define OV9655_COMMON_CTRL10 0x15U
#define OV9655_REG16_CTRL 0x16U
#define OV9655_HORIZONTAL_FRAME_START 0x17U
#define OV9655_HORIZONTAL_FRAME_STOP 0x18U
#define OV9655_VERTICAL_FRAME_START 0x19U
#define OV9655_VERTICAL_FRAME_STOP 0x1AU
#define OV9655_PSHFT 0x1BU
#define OV9655_MANUFACTURER_ID_HIGH 0x1CU
#define OV9655_MANUFACTURER_ID_LOW 0x1DU
#define OV9655_MIRROR_VFLIP 0x1EU
#define OV9655_LAEC 0x1FU /* Reserved */
#define OV9655_BOS 0x20U /* B Channel ADBLC Result: Offset adjustment sign */
#define OV9655_GBOS 0x21U /* GB Channel ADBLC Result: Offset adjustment sign */
#define OV9655_GROS 0x22U /* GR Channel ADBLC Result: Offset adjustment sign */
#define OV9655_ROS 0x23U /* R Channel ADBLC Result: Offset adjustment sign */
#define OV9655_AEW 0x24U /* AGC/AEC - Stable Operating Region (Upper Limit) */
#define OV9655_AEB 0x25U /* AGC/AEC - Stable Operating Region (Lower Limit) */
#define OV9655_VPT 0x26U /* AGC/AEC Fast Mode Operating Region */
#define OV9655_BBIAS 0x27U /* B Channel Signal Output Bias */
#define OV9655_GBBIAS 0x28U /* GB Channel Signal Output Bias */
#define OV9655_PREGAIN 0x29U /* RGB Channel Pre-gain */
#define OV9655_EXHCH 0x2AU /* Dummy Pixel Insert MSB */
#define OV9655_EXHCL 0x2BU /* Dummy Pixel Insert LSB */
#define OV9655_RBIAS 0x2CU /* R Channel Signal Output Bias */
#define OV9655_ADVFL 0x2DU /* LSB of insert dummy lines in vertical direction */
#define OV9655_ADVFH 0x2EU /* MSB of insert dummy lines in vertical direction */
#define OV9655_YG_AVERAGE_VALUE 0x2FU /* Y/G Channel Average Value */
#define OV9655_HSYNC_RISING_EDGE_DELAY 0x30U
#define OV9655_HSYNC_FALLING_EDGE_DELAY 0x31U
#define OV9655_HORIZONTAL_FRAME_CTRL 0x32U
#define OV9655_CHLF_CTRL 0x33U /* ADC Reference Control Array Current Control */
#define OV9655_AREF1 0x34U /* Array Reference Control */
#define OV9655_AREF2 0x35U /* Array Reference Control */
#define OV9655_AREF3 0x36U /* Array Reference Control */
#define OV9655_ADC1 0x37U /* ADC Control 1 */
#define OV9655_ADC2 0x38U /* ADC Reference Control */
#define OV9655_AREF4 0x39U /* Analog Reference Control */
#define OV9655_TSLB 0x3AU /* Line Buffer Test Option */
#define OV9655_COMMON_CTRL11 0x3BU
#define OV9655_COMMON_CTRL12 0x3CU
#define OV9655_COMMON_CTRL13 0x3DU
#define OV9655_COMMON_CTRL14 0x3EU
#define OV9655_EDGE 0x3FU
#define OV9655_COMMON_CTRL15 0x40U
#define OV9655_COMMON_CTRL16 0x41U
#define OV9655_COMMON_CTRL17 0x42U
#define OV9655_MATRIX_COEFFICIENT_1 0x4FU
#define OV9655_MATRIX_COEFFICIENT_2 0x50U
#define OV9655_MATRIX_COEFFICIENT_3 0x51U
#define OV9655_MATRIX_COEFFICIENT_4 0x52U
#define OV9655_MATRIX_COEFFICIENT_5 0x53U
#define OV9655_MATRIX_COEFFICIENT_6 0x54U
#define OV9655_BRIGHTNESS_ADJUSTMENT 0x55U
#define OV9655_CONTRAST_COEFFICIENT_1 0x56U
#define OV9655_CONTRAST_COEFFICIENT_2 0x57U
#define OV9655_MATRIX_COEFFICIENT_SIGN 0x58U
#define OV9655_AWB_CTRL_OPTION_1 0x59U
#define OV9655_AWB_CTRL_OPTION_2 0x5AU
#define OV9655_AWB_CTRL_OPTION_3 0x5BU
#define OV9655_AWB_CTRL_OPTION_4 0x5CU
#define OV9655_AWB_CTRL_OPTION_5 0x5DU
#define OV9655_AWB_CTRL_OPTION_6 0x5EU
#define OV9655_AWB_BLUE_GAIN_LIMIT 0x5FU
#define OV9655_AWB_RED_GAIN_LIMIT 0x60U
#define OV9655_AWB_GREEN_GAIN_LIMIT 0x61U
#define OV9655_LENS_CORRECTION_OPTION_1 0x62U
#define OV9655_LENS_CORRECTION_OPTION_2 0x63U
#define OV9655_LENS_CORRECTION_OPTION_3 0x64U
#define OV9655_LENS_CORRECTION_OPTION_4 0x65U
#define OV9655_LENS_CORRECTION_CTRL 0x66U
#define OV9655_MANU 0x67U /* Manual U Value */
#define OV9655_MANV 0x68U /* Manual V Value */
#define OV9655_BD50MAX 0x6AU /* 50 Hz Banding Filter Maximum Step Setting */
#define OV9655_DBLV 0x6BU /* Band Gap Reference Adjustment */
#define OV9655_DNSTH 0x70U /* De-noise Function Threshold Adjustment */
#define OV9655_POIDX 0x72U /* Pixel Output Index */
#define OV9655_PCKDV 0x73U /* Pixel Clock Output Selection */
#define OV9655_XINDX 0x74U /* Horizontal Scaling Down Coefficients */
#define OV9655_YINDX 0x75U /* Vertical Scaling Down Coefficients */
#define OV9655_SLOP 0x7AU /* Gamma Curve Highest Segment Slope */
#define OV9655_GAMMA_1 0x7BU /* Gamma Curve 1st Segment Input End Point 0x010 Output Value */
#define OV9655_GAMMA_2 0x7CU /* Gamma Curve 2nd Segment Input End Point 0x020 Output Value */
#define OV9655_GAMMA_3 0x7DU /* Gamma Curve 3rd Segment Input End Point 0x040 Output Value */
#define OV9655_GAMMA_4 0x7EU /* Gamma Curve 4th Segment Input End Point 0x080 Output Value */
#define OV9655_GAMMA_5 0x7FU /* Gamma Curve 5th Segment Input End Point 0x0A0 Output Value */
#define OV9655_GAMMA_6 0x80U /* Gamma Curve 6th Segment Input End Point 0x0C0 Output Value */
#define OV9655_GAMMA_7 0x81U /* Gamma Curve 7th Segment Input End Point 0x0E0 Output Value */
#define OV9655_GAMMA_8 0x82U /* Gamma Curve 8th Segment Input End Point 0x100 Output Value */
#define OV9655_GAMMA_9 0x83U /* Gamma Curve 9th Segment Input End Point 0x120 Output Value */
#define OV9655_GAMMA_10 0x84U /* Gamma Curve 10th Segment Input End Point 0x140 Output Value */
#define OV9655_GAMMA_11 0x85U /* Gamma Curve 11th Segment Input End Point 0x180 Output Value */
#define OV9655_GAMMA_12 0x86U /* Gamma Curve 12th Segment Input End Point 0x1C0 Output Value */
#define OV9655_GAMMA_13 0x87U /* Gamma Curve 13th Segment Input End Point 0x240 Output Value */
#define OV9655_GAMMA_14 0x88U /* Gamma Curve 14th Segment Input End Point 0x2C0 Output Value */
#define OV9655_GAMMA_15 0x89U /* Gamma Curve 15th Segment Input End Point 0x340 Output Value */
#define OV9655_COMMON_CTRL18 0x8BU
#define OV9655_COMMON_CTRL19 0x8CU
#define OV9655_COMMON_CTRL20 0x8DU
#define OV9655_DMLNL 0x92U /* Frame Dummy Line LSBs */
#define OV9655_DMLNH 0x93U /* Frame Dummy Line MSBs */
#define OV9655_LENS_CORRECTION_OPTION_6 0x9DU
#define OV9655_LENS_CORRECTION_OPTION_7 0x9EU
#define OV9655_AECH 0xA1U /* Exposure Value - AEC MSB 5 bits */
#define OV9655_BD50 0xA2U /* 1/100s Exposure Setting for 50 Hz Banding Filter */
#define OV9655_BD60 0xA3U /* 1/120s Exposure Setting for 60 Hz Banding Filter */
#define OV9655_COMMON_CTRL21 0xA4U
#define OV9655_GREEN 0xA6U /* AWB Green Component Gain Setting */
#define OV9655_VZST 0xA7U /* VGA Zoom Mode Vertical Start Line */
#define OV9655_REFA8 0xA8U /* Analog Reference Control */
#define OV9655_REFA9 0xA9U /* Analog Reference Control */
#define OV9655_BLC_1 0xACU /* Black Level Control 1 */
#define OV9655_BLC_2 0xADU /* Black Level Control 2 */
#define OV9655_BLC_3 0xAEU /* Black Level Control 3 */
#define OV9655_BLC_4 0xAFU /* Black Level Control 4 */
#define OV9655_BLC_5 0xB0U /* Black Level Control 5 */
#define OV9655_BLC_6 0xB1U /* Black Level Control 6 */
#define OV9655_BLC_7 0xB2U /* Black Level Control 7 */
#define OV9655_BLC_8 0xB3U /* Black Level Control 8 */
#define OV9655_CTRLB4 0xB4U
#define OV9655_FRSTL 0xB7U /* One-Pin Frame Exposure Reset Time Control Low 8 Bits */
#define OV9655_FRSTH 0xB8U /* One-Pin Frame Exposure Reset Time Control High 8 Bits */
#define OV9655_ADBOFF 0xBCU /* ADC B channel offset setting */
#define OV9655_ADROFF 0xBDU /* ADC R channel offset setting */
#define OV9655_ADGbOFF 0xBEU /* ADC Gb channel offset setting */
#define OV9655_ADGrOFF 0xBFU /* ADC Gr channel offset setting */
#define OV9655_OV9655_COMMON_CTRL23 0xC4U
#define OV9655_BD60MAX 0xC5U /* 60 Hz Banding Filter Maximum Step Setting */
#define OV9655_OV9655_COMMON_CTRL24 0x07U
/**
* @}
*/
/************** Generic Function *******************/
typedef int32_t (*OV9655_Write_Func)(void *, uint16_t, uint8_t*, uint16_t);
typedef int32_t (*OV9655_Read_Func) (void *, uint16_t, uint8_t*, uint16_t);
typedef struct
{
OV9655_Write_Func WriteReg;
OV9655_Read_Func ReadReg;
void *handle;
} ov9655_ctx_t;
/*******************************************************************************
* Register : Generic - All
* Address : Generic - All
* Bit Group Name: None
* Permission : W
*******************************************************************************/
int32_t ov9655_write_reg(ov9655_ctx_t *ctx, uint16_t reg, uint8_t *pdata, uint16_t length);
int32_t ov9655_read_reg(ov9655_ctx_t *ctx, uint16_t reg, uint8_t *pdata, uint16_t length);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* OV9655_REG_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/