Sensor Service
The sensor service is responsible for managing various sensors on the device, supporting two data acquisition modes: Pull (synchronous polling) and Push (asynchronous subscription).
Core Concepts
Pull Mode (Synchronous Polling)
The upper layer actively reads data from the sensor, with the data source being the sensor data cache (FIFO).
Push Mode (Asynchronous Subscription)
The upper layer registers a sensor data callback function, and the service actively notifies when new data is available.
Both modes share the same data source (sensor data cache/FIFO), uniformly scheduled by the sensor service.
FIFO Capacity
#define EOS_SENSOR_FIFO_CAPACITY 64
Sensor Data Structures
Sensor Instance
typedef struct {
eos_sensor_type_t type; // Sensor type
eos_dev_sensor_t *device; // Sensor device pointer
eos_fifo_t *fifo; // Data FIFO
eos_sensor_raw_data_t latest_data;// Latest data
uint8_t subscriber_count; // Subscriber count
uint32_t sample_period_ms; // Sample period
uint32_t last_sample_time; // Last sample time
bool is_active; // Whether active
} eos_sensor_service_instance_t;
Service Initialization
eos_result_t eos_service_sensor_init(void);
Pull Mode API
Read Sensor Data from FIFO
eos_result_t eos_sensor_read(eos_sensor_type_t type, eos_sensor_raw_data_t *data);
Read Latest Sensor Data
eos_result_t eos_sensor_read_latest(eos_sensor_type_t type, eos_sensor_raw_data_t *data);
Push Mode API
Subscribe to Sensor Data
Register a sensor data callback function:
eos_result_t eos_sensor_subscribe(
eos_sensor_type_t type,
eos_sensor_data_cb_t cb,
void *user_data,
uint32_t min_interval_ms
);
Parameters:
type: Sensor typecb: Callback functionuser_data: User data passed to callbackmin_interval_ms: Minimum callback interval in milliseconds
Unsubscribe
eos_result_t eos_sensor_unsubscribe(
eos_sensor_type_t type,
eos_sensor_data_cb_t cb,
void *user_data
);
Sample Period Management
Set Sample Period
eos_result_t eos_sensor_set_sample_period(eos_sensor_type_t type, uint32_t period_ms);
Get Sample Period
uint32_t eos_sensor_get_sample_period(eos_sensor_type_t type);
Sensor Data Notification
Called by the driver to notify that new data is available:
void eos_sensor_notify(eos_sensor_type_t type, const eos_sensor_data_t *data, uint32_t timestamp);
Sensor Data Callback
typedef eos_event_cb_t eos_sensor_data_cb_t;