mirror of
https://github.com/apache/nuttx.git
synced 2025-01-13 12:08:36 +08:00
driver/sensor: move readlast for each user
Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
parent
6f3873dfa2
commit
74b2be20d0
1 changed files with 6 additions and 4 deletions
|
@ -84,6 +84,7 @@ struct sensor_user_s
|
|||
unsigned long generation; /* Last generation subscriber has seen */
|
||||
unsigned long interval; /* The interval for subscriber */
|
||||
unsigned long latency; /* The bactch latency for subscriber */
|
||||
bool readlast; /* The flag of readlast */
|
||||
};
|
||||
|
||||
/* This structure describes the state of the upper half driver */
|
||||
|
@ -95,7 +96,6 @@ struct sensor_upperhalf_s
|
|||
struct circbuf_s buffer; /* The circular buffer of sensor device */
|
||||
sem_t exclsem; /* Manages exclusive access to file operations */
|
||||
struct list_node userlist; /* List of users */
|
||||
bool readlast; /* The flag of readlast */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -402,6 +402,7 @@ static int sensor_open(FAR struct file *filep)
|
|||
user->interval = ULONG_MAX;
|
||||
user->latency = ULONG_MAX;
|
||||
user->generation = upper->state.generation;
|
||||
user->readlast = true;
|
||||
nxsem_init(&user->buffersem, 0, 0);
|
||||
nxsem_set_protocol(&user->buffersem, SEM_PRIO_NONE);
|
||||
list_add_tail(&upper->userlist, &user->node);
|
||||
|
@ -532,7 +533,7 @@ static ssize_t sensor_read(FAR struct file *filep, FAR char *buffer,
|
|||
* it will return 0 when there isn't new data.
|
||||
*/
|
||||
|
||||
if (upper->readlast)
|
||||
if (user->readlast)
|
||||
{
|
||||
if (circbuf_is_empty(&upper->buffer))
|
||||
{
|
||||
|
@ -716,7 +717,9 @@ static int sensor_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
|
|||
|
||||
case SNIOC_READLAST:
|
||||
{
|
||||
upper->readlast = !!arg;
|
||||
sensor_semtake(upper);
|
||||
user->readlast = !!arg;
|
||||
sensor_semgive(upper);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -985,7 +988,6 @@ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower,
|
|||
/* Initialize the upper-half data structure */
|
||||
|
||||
list_initialize(&upper->userlist);
|
||||
upper->readlast = true;
|
||||
upper->state.esize = esize;
|
||||
upper->state.min_interval = ULONG_MAX;
|
||||
upper->state.min_latency = ULONG_MAX;
|
||||
|
|
Loading…
Reference in a new issue