78 lines
2.2 KiB
C
78 lines
2.2 KiB
C
/* Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef __CROS_EC_MOTION_SENSE_FIFO_H
|
|
#define __CROS_EC_MOTION_SENSE_FIFO_H
|
|
|
|
#include "motion_sense.h"
|
|
#include "task.h"
|
|
|
|
extern struct queue motion_sense_fifo;
|
|
extern int wake_up_needed;
|
|
extern int fifo_int_enabled;
|
|
extern int fifo_queue_count;
|
|
extern int motion_sense_fifo_lost;
|
|
|
|
enum motion_sense_async_event {
|
|
ASYNC_EVENT_FLUSH = MOTIONSENSE_SENSOR_FLAG_FLUSH |
|
|
MOTIONSENSE_SENSOR_FLAG_TIMESTAMP,
|
|
ASYNC_EVENT_ODR = MOTIONSENSE_SENSOR_FLAG_ODR |
|
|
MOTIONSENSE_SENSOR_FLAG_TIMESTAMP,
|
|
};
|
|
|
|
/**
|
|
* Stage data to the fifo, including a timestamp. This data will not be
|
|
* available to the AP until motion_sense_fifo_commit_data is called.
|
|
*
|
|
* @param data data to insert in the FIFO
|
|
* @param sensor sensor the data comes from
|
|
* @param valid_data data should be copied into the public sensor vector
|
|
* @param time accurate time (ideally measured in an interrupt) the sample
|
|
* was taken at
|
|
*/
|
|
void motion_sense_fifo_stage_data(struct ec_response_motion_sensor_data *data,
|
|
struct motion_sensor_t *sensor,
|
|
int valid_data,
|
|
uint32_t time);
|
|
|
|
/**
|
|
* Commits all staged data to the fifo. If multiple readings were placed using
|
|
* the same timestamps, they will be spread out.
|
|
*/
|
|
void motion_sense_fifo_commit_data(void);
|
|
|
|
/**
|
|
* Insert an async event into the fifo.
|
|
*
|
|
* @param sensor Pointer to the sensor generating the event.
|
|
* @param evt The event to insert.
|
|
*/
|
|
void motion_sense_insert_async_event(struct motion_sensor_t *sensor,
|
|
enum motion_sense_async_event evt);
|
|
|
|
/**
|
|
* Stage a timestamp into the fifo.
|
|
*
|
|
* @param timestamp The timestamp to stage.
|
|
*/
|
|
void motion_sense_fifo_stage_timestamp(uint32_t timestamp);
|
|
|
|
/**
|
|
* Get information about the fifo.
|
|
*
|
|
* @param fifo_info The struct to store the info.
|
|
*/
|
|
void motion_sense_get_fifo_info(
|
|
struct ec_response_motion_sense_fifo_info *fifo_info);
|
|
|
|
/**
|
|
* Checks if either the AP should be woken up due to the fifo.
|
|
*
|
|
* @return 1 if the AP should be woken up, 0 otherwise.
|
|
*/
|
|
int motion_sense_fifo_is_wake_up_needed(void);
|
|
|
|
#endif /* __CROS_EC_MOTION_SENSE_FIFO_H */
|