blob: 23ed177e4ea0b0adf6a3ab95e94a99c49846c4c7 [file]
/*
* Copyright (c) 2025 Croxel Inc.
* Copyright (c) 2025 CogniPilot Foundation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_DRIVERS_SENSOR_PAA3905_H_
#define ZEPHYR_DRIVERS_SENSOR_PAA3905_H_
#include <stdint.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/rtio/rtio.h>
struct paa3905_encoded_data {
struct {
uint64_t timestamp;
uint8_t channels : 3;
struct {
bool drdy : 1;
bool motion : 1;
} events;
} header;
union {
uint8_t buf[14];
struct {
uint8_t motion;
uint8_t observation;
struct {
int16_t x;
int16_t y;
} delta;
uint8_t challenging_conditions;
uint8_t squal;
uint8_t raw_sum;
uint8_t raw_max;
uint8_t raw_min;
uint32_t shutter : 24;
} __attribute__((__packed__));
};
};
struct paa3905_stream {
struct gpio_callback cb;
const struct device *dev;
struct rtio_iodev_sqe *iodev_sqe;
struct k_timer timer;
struct {
struct {
bool drdy : 1;
bool motion : 1;
} enabled;
struct {
enum sensor_stream_data_opt drdy;
enum sensor_stream_data_opt motion;
} opt;
} settings;
};
struct paa3905_data {
struct {
struct rtio_iodev *iodev;
struct rtio *ctx;
} rtio;
#if defined(CONFIG_PAA3905_STREAM)
struct paa3905_stream stream;
#endif /* CONFIG_PAA3905_STREAM */
};
struct paa3905_config {
struct gpio_dt_spec int_gpio;
int resolution;
bool led_control;
uint32_t backup_timer_period;
};
/** Made public in order to perform chip recovery if erratic behavior
* is detected.
*/
int paa3905_recover(const struct device *dev);
#endif /* ZEPHYR_DRIVERS_SENSOR_PAA3905_H_ */