33typedef enum : uint16_t {
88typedef enum : uint8_t {
143typedef enum : uint32_t {
150typedef enum : uint32_t {
540 uint8_t current = 0U;
545 const uint8_t updated = (uint8_t)((current & (uint8_t)~mask) | (value & mask));
569 for (uint32_t i = 0U; i < count; i += 1U) {
575 if ((actual & expected[i].mask) != expected[i].value) {
622 for (uint32_t i = 0U; i < (uint32_t)
sizeof(addrs); i++) {
654 for (uint32_t i = 0U; i < count; i += 1U) {
691 for (uint32_t i = 0U; i < count; i += 1U) {
956 .compression_height =
973 if (dev ==
nullptr) {
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_not_supported
Requested feature not compiled in, not wired, or not supported by this MCU variant.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_not_initialized
Module not initialized – _init() not yet called successfully.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
@ k_ra8_err_not_found
Requested item not found (lookup / search missed).
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
ra8_err_t ra8_ov5640_read_reg(ra8_ov5640_t *dev, uint16_t reg, uint8_t *out_value)
Read one sensor register through the bound transport.
static ra8_err_t internal_ov5640_update_bits(ra8_ov5640_t *dev, uint16_t reg, uint8_t mask, uint8_t value)
Update selected bits in one sensor register.
static const ra8_ov5640_reg_write_t s_ov5640_vga_uyvy[]
OV5640 DVP init: PLL from 24 MHz XVCLK, VGA YUV422 live output.
ra8_ov5640_register_t
OV5640 SCCB register addresses + the expected chip-ID value.
@ k_ov5640_reg_vfifo_ctrl0b
VFIFO output control.
@ k_ov5640_reg_jpeg_ctrl04
JPEG header-output control.
@ k_ov5640_reg_jpeg_ctrl01
JPEG FIFO pacing control.
@ k_ov5640_reg_timing_y_end_lo
Sensor crop Y end low byte.
@ k_ov5640_reg_href_minimum
JPEG HREF minimum blanking.
@ k_ov5640_reg_pll_bypass
PLL bypass control.
@ k_ov5640_reg_jpeg_mode
DVP JPEG mode select.
@ k_ov5640_reg_isp_ctrl01
ISP feature-enable register.
@ k_ov5640_reg_timing_tc_reg20
Vertical timing and binning.
@ k_ov5640_reg_clock_select
System clock source.
@ k_ov5640_reg_jpeg_length_lo
JPEG length bits 7:0.
@ k_ov5640_reg_system_reset00
MCU reset controls.
@ k_ov5640_reg_clock_enable02
JPEG clock controls.
@ k_ov5640_reg_timing_y_start_hi
Sensor crop Y start high byte.
@ k_ov5640_reg_jpeg_quality
JPEG quantization scale.
@ k_ov5640_reg_clock_root
PCLK/SCLK root dividers.
@ k_ov5640_reg_compression_w_lo
Compressed-output width low.
@ k_ov5640_reg_chip_id_lo
Chip-ID low byte register.
@ k_ov5640_reg_format
DVP output pixel format register.
@ k_ov5640_reg_timing_y_offset_hi
Output Y offset high byte.
@ k_ov5640_reg_system_reset02
JPEG reset controls.
@ k_ov5640_reg_pll_multiplier
PLL multiplier.
@ k_ov5640_reg_pll_pre_div
PLL pre-divider.
@ k_ov5640_reg_vfifo_ctrl0c
VFIFO output control.
@ k_ov5640_reg_chip_id_hi
Chip-ID high byte register.
@ k_ov5640_reg_vfifo_ctrl00
VFIFO output control.
@ k_ov5640_reg_jpeg_ctrl1c
JPEG DVP control.
@ k_ov5640_reg_timing_vts_lo
Vertical total low byte.
@ k_ov5640_reg_jpeg_timing14
JPEG binning/orientation timing.
@ k_ov5640_reg_timing_tc_reg21
Timing/mirror and JPEG enable.
@ k_ov5640_reg_timing_y_start_lo
Sensor crop Y start low byte.
@ k_ov5640_reg_test
Pre-output test-pattern register.
@ k_ov5640_reg_pll_sys_div
PLL system-clock divider.
@ k_ov5640_reg_compression_w_hi
Compressed-output width high.
@ k_ov5640_reg_timing_hts_lo
Horizontal total low byte.
@ k_ov5640_reg_isp_mux
ISP output format-mux register.
@ k_ov5640_reg_timing_y_end_hi
Sensor crop Y end high byte.
@ k_ov5640_reg_jpeg_length_hi
JPEG length bits 23:16.
@ k_ov5640_reg_jpeg_ctrl00
JPEG input-format control.
@ k_ov5640_reg_jfifo_overflow
JPEG FIFO overflow status.
@ k_ov5640_reg_polarity_ctrl00
DVP clock and sync polarity.
@ k_ov5640_reg_timing_hts_hi
Horizontal total high byte.
@ k_ov5640_reg_jpeg_timing20
JPEG sampling timing.
@ k_ov5640_reg_sw_reset
System control register.
@ k_ov5640_reg_pll_bit_mode
PLL bit-mode control.
@ k_ov5640_reg_compression_h_lo
Compressed-output height low.
@ k_ov5640_reg_pclk_divider
DVP pixel-clock divider.
@ k_ov5640_reg_timing_vts_hi
Vertical total high byte.
@ k_ov5640_reg_jpeg_length_mid
JPEG length bits 15:8.
@ k_ov5640_reg_timing_y_offset_lo
Output Y offset low byte.
@ k_ov5640_reg_compression_h_hi
Compressed-output height high.
static ra8_err_t internal_ov5640_write_vga_base(ra8_ov5640_t *dev)
Program the board-qualified VGA base table.
static ra8_err_t internal_ov5640_configure_jpeg(ra8_ov5640_t *dev)
Apply the JPEG-specific overlay to the VGA base scene.
ra8_ov5640_delay_t
OV5640 settle delays around reset and register programming (ms).
@ k_ov5640_cfg_settle_ms
Settle after the register sequence.
@ k_ov5640_stream_settle_ms
Settle after standby/wake change.
@ k_ov5640_mcu_reset_ms
Settle after holding the MCU reset.
@ k_ov5640_reset_guard_ms
Guard before and after reset.
ra8_err_t ra8_ov5640_write_reg(ra8_ov5640_t *dev, uint16_t reg, uint8_t value)
Write one sensor register through the bound transport.
ra8_ov5640_value_t
OV5640 SCCB addressing, reset values, and byte-wrangling constants.
@ k_ov5640_timing_tc_reg20_jpeg
VGA JPEG vertical binning.
@ k_ov5640_jpeg_mode_mask
JPEG mode-select field.
@ k_ov5640_jpeg_sync_polarity_mask
JPEG VSYNC/HREF polarity bits.
@ k_ov5640_vfifo_ctrl0b_jpeg
JPEG VFIFO setting.
@ k_ov5640_mcu_reset_hold
Hold the internal MCU reset.
@ k_ov5640_jfifo_overflow_mask
JPEG FIFO overflow bit.
@ k_ov5640_pll_sys_div_raw
Qualified system divider.
@ k_ov5640_jpeg_y_end_hi
VGA crop Y end bits 15:8.
@ k_ov5640_pll_bypass_disabled
Use the programmed PLL.
@ k_ov5640_jpeg_sync_polarity
Align HREF pulses with high VD.
@ k_ov5640_byte_mask
Full-register readback mask.
@ k_ov5640_jpeg_quant_scale_mask
JPEG CTRL07 QS field.
@ k_ov5640_jpeg_reset_mask
JFIFO/SFIFO/JPEG reset bits.
@ k_ov5640_jpeg_hts_lo
VGA horizontal total bits 7:0.
@ k_ov5640_jpeg_timing14_vga
VGA binning/orientation timing.
@ k_ov5640_jpeg_input_yuv422_mask
JPEG CTRL00 input-format bit.
@ k_ov5640_jpeg_y_start_lo
VGA crop Y start bits 7:0.
@ k_ov5640_sw_reset_wake
Normal operation.
@ k_ov5640_jpeg_y_offset_lo
VGA Y offset bits 7:0.
@ k_ov5640_pll_pre_div_raw
Qualified PLL pre-divider.
@ k_ov5640_jpeg_clock_mask
JPEG and JPEG2x clock bits.
@ k_ov5640_jpeg_timing20_vga
VGA sampling timing.
@ k_ov5640_pclk_divider_raw
Qualified DVP PCLK divider.
@ k_ov5640_jpeg_enable_mask
0x3821 JPEG-enable bit.
@ k_ov5640_jpeg_mode_dvp_2
DVP compressed-frame mode 2.
@ k_ov5640_jpeg_vga_height_lo
VGA height bits 7:0.
@ k_ov5640_jpeg_vts_hi
VGA vertical total bits 15:8.
@ k_ov5640_jpeg_y_start_hi
VGA crop Y start bits 15:8.
@ k_ov5640_pll_bit_mode_raw
Qualified DVP PLL 8-bit mode.
@ k_ov5640_hi_byte_shift
Chip-ID high-byte shift.
@ k_ov5640_jpeg_ctrl00
YUV422 input and FIFO enable.
@ k_ov5640_pll_multiplier_raw
Qualified PLL multiplier.
@ k_ov5640_jpeg_vga_width_lo
VGA width bits 7:0.
@ k_ov5640_jpeg_ctrl1c
JPEG DVP control value.
@ k_ov5640_jpeg_ctrl04
Header and output control.
@ k_ov5640_isp_mux_yuv
Route YUV through ISP.
@ k_ov5640_clock_select_raw
Qualified PLL clock selection.
@ k_ov5640_jpeg_ctrl01
JPEG FIFO pacing control.
@ k_ov5640_vfifo_ctrl0c_jpeg
JPEG VFIFO setting.
@ k_ov5640_jpeg_hts_hi
VGA horizontal total bits 15:8.
@ k_ov5640_jpeg_header_mask
JPEG CTRL04 header-output bit.
@ k_ov5640_sw_reset_hold
Software reset (0x3008 bit 7).
@ k_ov5640_jpeg_vga_height_hi
VGA height bits 15:8.
@ k_ov5640_jpeg_vga_width_hi
VGA width bits 15:8.
@ k_ov5640_jpeg_y_offset_hi
VGA Y offset bits 15:8.
@ k_ov5640_isp_scale_enable_mask
ISP scaling-enable bit.
@ k_ov5640_jpeg_vts_lo
VGA vertical total bits 7:0.
@ k_ov5640_sw_standby
Software standby.
@ k_ov5640_clock_root_raw
Qualified clock-root dividers.
@ k_ov5640_jpeg_y_end_lo
VGA crop Y end bits 7:0.
@ k_ov5640_format_yuyv
YUYV/JPEG ISP input format.
ra8_ov5640_jpeg_length_shift_t
Bit positions used to combine the three JPEG length registers.
@ k_ov5640_jpeg_length_mid_shift
JPEG length middle-byte shift.
@ k_ov5640_jpeg_length_hi_shift
JPEG length high-byte shift.
@ k_ov5640_dimension_hi_shift
Compression dimension shift.
static ra8_err_t internal_ov5640_verify_jpeg(ra8_ov5640_t *dev)
Verify the JPEG-specific register scene.
ra8_err_t ra8_ov5640_stream_set(ra8_ov5640_t *dev, bool enabled)
Enter software standby or resume sensor streaming.
ra8_err_t ra8_ov5640_configure(ra8_ov5640_t *dev, ra8_ov5640_mode_t mode)
Software-reset and program one validated output mode.
ra8_err_t ra8_ov5640_jpeg_status_get(ra8_ov5640_t *dev, ra8_ov5640_jpeg_status_t *out_status)
Snapshot sensor JPEG length, overflow, and routing controls.
ra8_err_t ra8_ov5640_probe(ra8_ov5640_t *dev, uint16_t *out_id)
Probe both legal SCCB addresses and verify chip ID 0x5640.
static ra8_err_t internal_ov5640_read_chip_id(ra8_ov5640_t *dev, uint16_t *out_id)
Read and combine the OV5640 high and low chip-ID bytes.
ra8_err_t ra8_ov5640_init(ra8_ov5640_t *dev, const ra8_ov5640_bus_t *bus)
Bind a caller-supplied SCCB transport without touching the sensor.
static ra8_err_t internal_ov5640_verify(ra8_ov5640_t *dev, const ra8_ov5640_reg_expect_t *expected, uint32_t count)
Verify a bounded set of masked sensor register expectations.
ra8_err_t ra8_ov5640_set_jpeg_quantization_scale(ra8_ov5640_t *dev, uint8_t quant_scale)
Set the sensor JPEG encoder's raw quantization scale.
static ra8_err_t internal_ov5640_read_jpeg_status(ra8_ov5640_t *dev, ra8_ov5640_jpeg_status_raw_t *raw)
Read the register bytes comprising one JPEG status snapshot.
static ra8_err_t internal_ov5640_read_jpeg_status_format(ra8_ov5640_t *dev, ra8_ov5640_jpeg_status_raw_t *raw)
Read the JPEG length, FIFO, and format status registers.
static ra8_err_t internal_ov5640_verify_uyvy(ra8_ov5640_t *dev)
Verify the common UYVY register scene.
Transport-independent OmniVision OV5640 sensor driver.
@ k_ra8_ov5640_chip_id
Expected combined chip identifier.
ra8_ov5640_mode_t
Sensor output modes with validated register tables.
@ k_ra8_ov5640_mode_vga_jpeg
Sensor-encoded VGA JPEG stream.
@ k_ra8_ov5640_mode_vga_uyvy
Packed VGA UYVY DVP stream.
@ k_ra8_ov5640_jpeg_quant_scale_max
Lowest-quality raw scale.
@ k_ra8_ov5640_jpeg_quant_scale_default
Vendor reset-scale value.
@ k_ra8_ov5640_addr_primary
Default seven-bit SCCB address.
@ k_ra8_ov5640_addr_secondary
Alternate seven-bit SCCB address.
Injected SCCB and time services.
ra8_ov5640_write_fn_t write_reg
Injected single-register write.
ra8_ov5640_delay_fn_t delay_ms
Injected millisecond delay.
void * ctx
Caller-owned transport context.
ra8_ov5640_read_fn_t read_reg
Injected single-register read.
Raw register bytes used to assemble one JPEG status snapshot.
uint8_t overflow
JPEG FIFO status.
uint8_t height_hi
Compression height high.
uint8_t width_lo
Compression width low.
uint8_t href_minimum
Minimum HREF blanking.
uint8_t length_mid
Encoded length bits 15:8.
uint8_t height_lo
Compression height low.
uint8_t length_hi
Encoded length bits 23:16.
uint8_t jpeg_ctrl01
JPEG FIFO pacing.
uint8_t jpeg_input
JPEG input format.
uint8_t length_lo
Encoded length bits 7:0.
uint8_t jpeg_header
JPEG header control.
uint8_t timing_ctrl21
JPEG enable state.
uint8_t vfifo_ctrl00
VFIFO operating mode.
uint8_t width_hi
Compression width high.
Snapshot of the OV5640 JPEG pipeline and its most recent frame.
One masked OV5640 register readback expectation.
uint16_t reg
OV5640 register address.
uint8_t mask
Bits relevant to this mode.
uint8_t value
Expected masked value.
One OV5640 SCCB register write (16-bit address, 8-bit value).
uint16_t reg
OV5640 register address.
uint8_t val
Value to program.
Caller-owned sensor instance; supports multiple independent parts.
uint8_t address
Selected seven-bit SCCB address.
bool initialized
Successful binding marker.
ra8_ov5640_bus_t bus
Copied transport callbacks.