1 /* 2 * Copyright (c) 2024 MASSDRIVER EI (massdriver.space) 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_DRIVERS_SENSOR_XBR818_XBR818_H_ 8 #define ZEPHYR_DRIVERS_SENSOR_XBR818_XBR818_H_ 9 10 #include <stdint.h> 11 #include <zephyr/drivers/gpio.h> 12 #include <zephyr/drivers/sensor.h> 13 #include <zephyr/kernel.h> 14 15 /* 32Khz clockrate, most time values are multiple of this */ 16 #define SENSOR_XBR818_CLOCKRATE 32000 17 18 struct xbr818_config { 19 struct i2c_dt_spec i2c; 20 struct gpio_dt_spec i2c_en; 21 struct gpio_dt_spec io_val; 22 }; 23 24 struct xbr818_data { 25 bool value; 26 uint32_t trigger_type; 27 sensor_trigger_handler_t handler; 28 struct gpio_callback gpio_cb; 29 const struct sensor_trigger *trigger; 30 const struct device *dev; 31 struct k_work work; 32 }; 33 34 /* reference rd-04 module manual for more information */ 35 /* [0-2]: power of PA 36 * [4-6]: mixer trim 37 */ 38 #define XBR818_RF_POWER 0x03 39 #define XBR818_RF_EN_SEL 0x04 40 /* minimum value of 2 */ 41 #define XBR818_SAMPLE_RATE_DIVIDER 0x10 42 /* [0]: enable detection 43 * [1-2]: readable data. 0: det_dc_sum 1: det_ac_sum 2: det_dc_used 3: det_noise 44 * [3]: enable read on 0x28-0x29 45 * [4]: signal detection threshold. 0: auto by pin 1: register 46 * [7]: enable read on 0x26-0x29 47 */ 48 #define XBR818_I2C_OUT 0x13 49 /* Threshold for detection 50 * [0-7] 51 */ 52 #define XBR818_THRESHOLD_1 0x18 53 /* [8-15] */ 54 #define XBR818_THRESHOLD_2 0x19 55 /* Threshold for noise 56 * [0-7] 57 */ 58 #define XBR818_THRESHOLD_NOISE_1 0x1A 59 /* [8-15] */ 60 #define XBR818_THRESHOLD_NOISE_2 0x1B 61 /* Delay Time (in 1/32000 seconds) 62 * [0-7] 63 */ 64 #define XBR818_DELAY_TIME_1 0x1D 65 /* [8-15] */ 66 #define XBR818_DELAY_TIME_2 0x1E 67 /* [16-23] */ 68 #define XBR818_DELAY_TIME_3 0x1F 69 /* [0]: enable 70 * [1-2]: light sensor timer. 0: disabled 1: 4 sec 2: 1 minute 3: 1 hour 71 * [3-4]: output timer. 0: 1 sec 1: 1 minute 2: 1 hour 3: 1 day 72 * [5]: delay time. 0: 'configure by pin' 1: configure by register 73 */ 74 #define XBR818_TIMER_CTRL 0x1C 75 /* Lock Time (in 1/32000 seconds) 76 * [0-7] 77 */ 78 #define XBR818_LOCK_TIME_1 0x20 79 /* [8-15] */ 80 #define XBR818_LOCK_TIME_2 0x21 81 /* [16-23] */ 82 #define XBR818_LOCK_TIME_3 0x22 83 /* Pin settings 84 * [0-3]: IO_VAL pin 85 * 0xc: io_value_out, 0xd: io_value_out inverted, 0xf: GPIO 86 * [4-7]: INT_IRQ pin 87 * 0x0: t3_int_irq, 0x9: io_value_out, 0xa: io_value_out inverted, 0xf: GPIO 88 */ 89 #define XBR818_PIN_SETTINGS 0x23 90 /* [0]: ADC1 is configured for VCO trimming. 0: enable, 1: disable 91 * [1]: Low power mode is pin or register. 0: pin 1: register 92 * [2]: If IO_VAL pin is GPIO, output. 0: no 1: yes 93 * [3]: if INT_IRQ pin is GPIO, output. 0:no 1:yes 94 */ 95 #define XBR818_IO_ACTIVE_VALUE_REG 0x24 96 97 #endif /* ZEPHYR_DRIVERS_SENSOR_XBR818_XBR818_H_ */ 98