1 /* 2 * Copyright (c) 2025 Croxel, Inc. 3 * Copyright (c) 2025 CogniPilot Foundation 4 * 5 * SPDX-License-Identifier: Apache-2.0 6 */ 7 8 #ifndef ZEPHYR_DRIVERS_SENSOR_BMP581_DECODER_H_ 9 #define ZEPHYR_DRIVERS_SENSOR_BMP581_DECODER_H_ 10 11 #include <stdint.h> 12 #include <zephyr/drivers/sensor.h> 13 #include "bmp581.h" 14 15 struct bmp581_encoded_header { 16 uint8_t channels; 17 uint8_t events; 18 uint64_t timestamp; 19 uint8_t press_en; 20 uint8_t fifo_count; 21 }; 22 23 struct bmp581_frame { 24 uint8_t payload[6]; 25 }; 26 27 struct bmp581_encoded_data { 28 struct bmp581_encoded_header header; 29 union { 30 uint8_t payload[6]; /* 3 bytes temp + 3 bytes press */ 31 struct bmp581_frame frame[0]; /* Used for FIFO frames */ 32 }; 33 }; 34 bmp581_encode_events_bitmask(const struct sensor_stream_trigger * const triggers,size_t count)35static inline enum bmp581_event bmp581_encode_events_bitmask( 36 const struct sensor_stream_trigger *const triggers, 37 size_t count) 38 { 39 enum bmp581_event result = 0; 40 41 for (size_t i = 0 ; i < count ; i++) { 42 switch (triggers[i].trigger) { 43 case SENSOR_TRIG_DATA_READY: 44 result |= ((triggers[i].opt == SENSOR_STREAM_DATA_INCLUDE) ? 45 BMP581_EVENT_DRDY : 0); 46 break; 47 case SENSOR_TRIG_FIFO_WATERMARK: 48 result |= ((triggers[i].opt == SENSOR_STREAM_DATA_INCLUDE) ? 49 BMP581_EVENT_FIFO_WM : 0); 50 break; 51 default: 52 break; 53 } 54 } 55 56 return result; 57 } 58 59 int bmp581_encode(const struct device *dev, 60 const struct sensor_read_config *read_config, 61 uint8_t trigger_status, 62 uint8_t *buf); 63 64 int bmp581_get_decoder(const struct device *dev, 65 const struct sensor_decoder_api **decoder); 66 67 #endif /* ZEPHYR_DRIVERS_SENSOR_BMP581_DECODER_H_ */ 68