This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit e3e59a03b148fbb1dab84e74761b915c19961b99 Author: Jiuzhu Dong <dongjiuz...@xiaomi.com> AuthorDate: Wed Mar 23 17:09:46 2022 +0800 driver/sensor: update sensor data structure and state structure Signed-off-by: Jiuzhu Dong <dongjiuz...@xiaomi.com> --- drivers/sensors/sensor.c | 136 +++++++++++++++++++++-------------------- drivers/sensors/usensor.c | 2 +- include/nuttx/sensors/ioctl.h | 18 ++---- include/nuttx/sensors/sensor.h | 85 +++++++++++++------------- 4 files changed, 118 insertions(+), 123 deletions(-) diff --git a/drivers/sensors/sensor.c b/drivers/sensors/sensor.c index 5576ec8fb1..c1587c7f3f 100644 --- a/drivers/sensors/sensor.c +++ b/drivers/sensors/sensor.c @@ -58,7 +58,7 @@ struct sensor_info_s { - uint8_t esize; + unsigned long esize; FAR char *name; }; @@ -82,7 +82,7 @@ struct sensor_user_s * appear in dual role */ - size_t generation; /* Last generation subscriber has seen */ + unsigned long generation; /* Last generation subscriber has seen */ unsigned long interval; /* The interval for subscriber */ unsigned long latency; /* The bactch latency for subscriber */ }; @@ -94,9 +94,7 @@ struct sensor_upperhalf_s FAR struct sensor_lowerhalf_s *lower; /* The handle of lower half driver */ struct sensor_state_s state; /* The state of sensor device */ struct circbuf_s buffer; /* The circular buffer of sensor device */ - uint8_t esize; /* The element size of circular buffer */ sem_t exclsem; /* Manages exclusive access to file operations */ - size_t generation; /* The current generation count */ struct list_node userlist; /* List of users */ }; @@ -125,39 +123,39 @@ static ssize_t sensor_push_event(FAR void *priv, FAR const void *data, static const struct sensor_info_s g_sensor_info[] = { - {0, NULL}, - {sizeof(struct sensor_event_accel), "accel"}, - {sizeof(struct sensor_event_mag), "mag"}, - {sizeof(struct sensor_event_gyro), "gyro"}, - {sizeof(struct sensor_event_light), "light"}, - {sizeof(struct sensor_event_baro), "baro"}, - {sizeof(struct sensor_event_prox), "prox"}, - {sizeof(struct sensor_event_humi), "humi"}, - {sizeof(struct sensor_event_temp), "temp"}, - {sizeof(struct sensor_event_rgb), "rgb"}, - {sizeof(struct sensor_event_hall), "hall"}, - {sizeof(struct sensor_event_ir), "ir"}, - {sizeof(struct sensor_event_gps), "gps"}, - {sizeof(struct sensor_event_uv), "uv"}, - {sizeof(struct sensor_event_noise), "noise"}, - {sizeof(struct sensor_event_pm25), "pm25"}, - {sizeof(struct sensor_event_pm1p0), "pm1p0"}, - {sizeof(struct sensor_event_pm10), "pm10"}, - {sizeof(struct sensor_event_co2), "co2"}, - {sizeof(struct sensor_event_hcho), "hcho"}, - {sizeof(struct sensor_event_tvoc), "tvoc"}, - {sizeof(struct sensor_event_ph), "ph"}, - {sizeof(struct sensor_event_dust), "dust"}, - {sizeof(struct sensor_event_hrate), "hrate"}, - {sizeof(struct sensor_event_hbeat), "hbeat"}, - {sizeof(struct sensor_event_ecg), "ecg"}, - {sizeof(struct sensor_event_ppgd), "ppgd"}, - {sizeof(struct sensor_event_ppgq), "ppgq"}, - {sizeof(struct sensor_event_impd), "impd"}, - {sizeof(struct sensor_event_ots), "ots"}, - {sizeof(struct sensor_event_gps_satellite), "gps_satellite"}, - {sizeof(struct sensor_event_wake_gesture), "wake_gesture"}, - {sizeof(struct sensor_event_cap), "cap"}, + {0, NULL}, + {sizeof(struct sensor_accel), "accel"}, + {sizeof(struct sensor_mag), "mag"}, + {sizeof(struct sensor_gyro), "gyro"}, + {sizeof(struct sensor_light), "light"}, + {sizeof(struct sensor_baro), "baro"}, + {sizeof(struct sensor_prox), "prox"}, + {sizeof(struct sensor_humi), "humi"}, + {sizeof(struct sensor_temp), "temp"}, + {sizeof(struct sensor_rgb), "rgb"}, + {sizeof(struct sensor_hall), "hall"}, + {sizeof(struct sensor_ir), "ir"}, + {sizeof(struct sensor_gps), "gps"}, + {sizeof(struct sensor_uv), "uv"}, + {sizeof(struct sensor_noise), "noise"}, + {sizeof(struct sensor_pm25), "pm25"}, + {sizeof(struct sensor_pm1p0), "pm1p0"}, + {sizeof(struct sensor_pm10), "pm10"}, + {sizeof(struct sensor_co2), "co2"}, + {sizeof(struct sensor_hcho), "hcho"}, + {sizeof(struct sensor_tvoc), "tvoc"}, + {sizeof(struct sensor_ph), "ph"}, + {sizeof(struct sensor_dust), "dust"}, + {sizeof(struct sensor_hrate), "hrate"}, + {sizeof(struct sensor_hbeat), "hbeat"}, + {sizeof(struct sensor_ecg), "ecg"}, + {sizeof(struct sensor_ppgd), "ppgd"}, + {sizeof(struct sensor_ppgq), "ppgq"}, + {sizeof(struct sensor_impd), "impd"}, + {sizeof(struct sensor_ots), "ots"}, + {sizeof(struct sensor_gps_satellite), "gps_satellite"}, + {sizeof(struct sensor_wake_gesture), "wake_gesture"}, + {sizeof(struct sensor_cap), "cap"}, }; static const struct file_operations g_sensor_fops = @@ -178,7 +176,8 @@ static const struct file_operations g_sensor_fops = * Private Functions ****************************************************************************/ -static bool sensor_in_range(size_t left, size_t value, size_t right) +static bool sensor_in_range(unsigned long left, unsigned long value, + unsigned long right) { if (left < right) { @@ -192,7 +191,8 @@ static bool sensor_in_range(size_t left, size_t value, size_t right) } } -static bool sensor_is_updated(size_t generation, size_t ugeneration) +static bool sensor_is_updated(unsigned long generation, + unsigned long ugeneration) { return generation > ugeneration; } @@ -390,7 +390,7 @@ static int sensor_open(FAR struct file *filep) user->interval = ULONG_MAX; user->latency = ULONG_MAX; - user->generation = upper->generation; + user->generation = upper->state.generation; nxsem_init(&user->buffersem, 0, 0); nxsem_set_protocol(&user->buffersem, SEM_PRIO_NONE); list_add_tail(&upper->userlist, &user->node); @@ -458,8 +458,8 @@ static ssize_t sensor_read(FAR struct file *filep, FAR char *buffer, FAR struct sensor_upperhalf_s *upper = inode->i_private; FAR struct sensor_lowerhalf_s *lower = upper->lower; FAR struct sensor_user_s *user = filep->f_priv; + unsigned long nums; ssize_t ret; - size_t nums; if (!buffer || !len) { @@ -534,7 +534,7 @@ static ssize_t sensor_read(FAR struct file *filep, FAR char *buffer, * new data. */ - if (user->generation == upper->generation) + if (user->generation == upper->state.generation) { user->generation--; } @@ -543,21 +543,22 @@ static ssize_t sensor_read(FAR struct file *filep, FAR char *buffer, * oldest data in circbuffer are returned to the users. */ - else if (!sensor_in_range(upper->generation - lower->buffer_number, - user->generation, upper->generation)) + else if (!sensor_in_range(upper->state.generation - lower->nbuffer, + user->generation, upper->state.generation)) { - user->generation = upper->generation - lower->buffer_number; + user->generation = upper->state.generation - lower->nbuffer; } - nums = upper->generation - user->generation; - if (len < nums * upper->esize) + nums = upper->state.generation - user->generation; + if (len < nums * upper->state.esize) { - nums = len / upper->esize; + nums = len / upper->state.esize; } - len = nums * upper->esize; - ret = circbuf_peekat(&upper->buffer, user->generation * upper->esize, + len = nums * upper->state.esize; + ret = circbuf_peekat(&upper->buffer, + user->generation * upper->state.esize, buffer, len); user->generation += nums; } @@ -650,9 +651,9 @@ static int sensor_ioctl(FAR struct file *filep, int cmd, unsigned long arg) } break; - case SNIOC_GET_NEVENTBUF: + case SNIOC_SET_USERPRIV: { - *(FAR uint32_t *)(uintptr_t)arg = lower->buffer_number; + upper->state.priv = (FAR void *)(uintptr_t)arg; } break; @@ -660,9 +661,9 @@ static int sensor_ioctl(FAR struct file *filep, int cmd, unsigned long arg) { if (!circbuf_is_init(&upper->buffer)) { - if (arg >= lower->buffer_number) + if (arg >= lower->nbuffer) { - lower->buffer_number = arg; + lower->nbuffer = arg; } else { @@ -742,7 +743,7 @@ static int sensor_poll(FAR struct file *filep, } } } - else if (sensor_is_updated(upper->generation, user->generation)) + else if (sensor_is_updated(upper->state.generation, user->generation)) { eventset |= (fds->events & POLLIN); } @@ -774,12 +775,12 @@ static ssize_t sensor_push_event(FAR void *priv, FAR const void *data, FAR struct sensor_upperhalf_s *upper = priv; FAR struct sensor_lowerhalf_s *lower = upper->lower; FAR struct sensor_user_s *user; - size_t envcount; + unsigned long envcount; int semcount; int ret; - envcount = bytes / upper->esize; - if (!envcount || bytes != envcount * upper->esize) + envcount = bytes / upper->state.esize; + if (!envcount || bytes != envcount * upper->state.esize) { return -EINVAL; } @@ -794,8 +795,8 @@ static ssize_t sensor_push_event(FAR void *priv, FAR const void *data, { /* Initialize sensor buffer when data is first generated */ - ret = circbuf_init(&upper->buffer, NULL, lower->buffer_number * - upper->esize); + ret = circbuf_init(&upper->buffer, NULL, lower->nbuffer * + upper->state.esize); if (ret < 0) { nxsem_post(&upper->exclsem); @@ -804,10 +805,10 @@ static ssize_t sensor_push_event(FAR void *priv, FAR const void *data, } circbuf_overwrite(&upper->buffer, data, bytes); - upper->generation += envcount; + upper->state.generation += envcount; list_for_every_entry(&upper->userlist, user, struct sensor_user_s, node) { - if (sensor_is_updated(upper->generation, user->generation)) + if (sensor_is_updated(upper->state.generation, user->generation)) { nxsem_get_value(&user->buffersem, &semcount); if (semcount < 1) @@ -916,7 +917,7 @@ int sensor_register(FAR struct sensor_lowerhalf_s *lower, int devno) ****************************************************************************/ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower, - FAR const char *path, uint8_t esize) + FAR const char *path, unsigned long esize) { FAR struct sensor_upperhalf_s *upper; int ret = -EINVAL; @@ -941,9 +942,9 @@ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower, /* Initialize the upper-half data structure */ upper->lower = lower; - upper->esize = esize; list_initialize(&upper->userlist); + upper->state.esize = esize; upper->state.min_interval = ULONG_MAX; upper->state.min_latency = ULONG_MAX; if (lower->ops->activate) @@ -959,9 +960,9 @@ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower, if (!lower->ops->fetch) { - if (!lower->buffer_number) + if (!lower->nbuffer) { - lower->buffer_number = 1; + lower->nbuffer = 1; } lower->push_event = sensor_push_event; @@ -969,9 +970,10 @@ int sensor_custom_register(FAR struct sensor_lowerhalf_s *lower, else { lower->notify_event = sensor_notify_event; - lower->buffer_number = 0; + lower->nbuffer = 0; } + upper->state.nbuffer = lower->nbuffer; sninfo("Registering %s\n", path); ret = register_driver(path, &g_sensor_fops, 0666, upper); if (ret) diff --git a/drivers/sensors/usensor.c b/drivers/sensors/usensor.c index a32a97e3f4..ef203b51f4 100644 --- a/drivers/sensors/usensor.c +++ b/drivers/sensors/usensor.c @@ -104,7 +104,7 @@ static int usensor_register(FAR struct usensor_context_s *usensor, return -ENOMEM; } - lower->driver.buffer_number = info->nqueue; + lower->driver.nbuffer = info->nbuffer; lower->driver.ops = &g_usensor_ops; strcpy(lower->path, info->path); ret = sensor_custom_register(&lower->driver, lower->path, info->esize); diff --git a/include/nuttx/sensors/ioctl.h b/include/nuttx/sensors/ioctl.h index d2cfff813e..7cee985204 100644 --- a/include/nuttx/sensors/ioctl.h +++ b/include/nuttx/sensors/ioctl.h @@ -256,22 +256,12 @@ #define SNIOC_BATCH _SNIOC(0x0082) -/* Command: SNIOC_GET_NEVENTBUF - * Description: the number of sensor events that sensor buffer of upper half - * holds. - * Argument: This is the number of events pointer, is output parameter. - * Note: Tell the application layer number of sensor events in sensor - * buffer. - * This buffer is used to solve the problem that the - * application layer can't read the sensor event in time. - * Recommend the number of sensor events in application layer's - * buffer is same as result by call this function. - * This is number of sensor events rather than the length of - * buffer. - * See sensor.h(struct sensor_lower_half_s buffer_bytes). +/* Command: SNIOC_SET_USERPRIV + * Description: Set the private data of userspace user. + * Argument: This is the pointer of private data. */ -#define SNIOC_GET_NEVENTBUF _SNIOC(0x0083) +#define SNIOC_SET_USERPRIV _SNIOC(0x0083) /* Command: SNIOC_SET_BUFFER_NUMBER * Description: Set the number of events intermediate circualr buffer can diff --git a/include/nuttx/sensors/sensor.h b/include/nuttx/sensors/sensor.h index 9336ad5028..9be32a3268 100644 --- a/include/nuttx/sensors/sensor.h +++ b/include/nuttx/sensors/sensor.h @@ -313,7 +313,7 @@ static inline uint64_t sensor_get_timestamp(void) * reported. */ -struct sensor_event_accel /* Type: Accerometer */ +struct sensor_accel /* Type: Accerometer */ { uint64_t timestamp; /* Units is microseconds */ float x; /* Axis X in m/s^2 */ @@ -322,7 +322,7 @@ struct sensor_event_accel /* Type: Accerometer */ float temperature; /* Temperature in degrees celsius */ }; -struct sensor_event_gyro /* Type: Gyroscope */ +struct sensor_gyro /* Type: Gyroscope */ { uint64_t timestamp; /* Units is microseconds */ float x; /* Axis X in rad/s */ @@ -331,7 +331,7 @@ struct sensor_event_gyro /* Type: Gyroscope */ float temperature; /* Temperature in degrees celsius */ }; -struct sensor_event_mag /* Type: Magnetic Field */ +struct sensor_mag /* Type: Magnetic Field */ { uint64_t timestamp; /* Units is microseconds */ float x; /* Axis X in Gauss or micro Tesla (uT) */ @@ -340,38 +340,38 @@ struct sensor_event_mag /* Type: Magnetic Field */ float temperature; /* Temperature in degrees celsius */ }; -struct sensor_event_baro /* Type: Barometer */ +struct sensor_baro /* Type: Barometer */ { uint64_t timestamp; /* Units is microseconds */ float pressure; /* pressure measurement in millibar or hpa */ float temperature; /* Temperature in degrees celsius */ }; -struct sensor_event_prox /* Type: proximity */ +struct sensor_prox /* Type: proximity */ { uint64_t timestamp; /* Units is microseconds */ float proximity; /* distance to the nearest object in centimeters */ }; -struct sensor_event_light /* Type: Light */ +struct sensor_light /* Type: Light */ { uint64_t timestamp; /* Units is microseconds */ float light; /* in SI lux units */ }; -struct sensor_event_humi /* Type: Relative Humidity */ +struct sensor_humi /* Type: Relative Humidity */ { uint64_t timestamp; /* Units is microseconds */ float humidity; /* in percent */ }; -struct sensor_event_temp /* Type: Ambient Temperature */ +struct sensor_temp /* Type: Ambient Temperature */ { uint64_t timestamp; /* Units is microseconds */ float temperature; /* Temperature in degrees celsius */ }; -struct sensor_event_rgb /* Type: RGB */ +struct sensor_rgb /* Type: RGB */ { uint64_t timestamp; /* Units is microseconds */ float r; /* Units is percent */ @@ -379,19 +379,19 @@ struct sensor_event_rgb /* Type: RGB */ float b; /* Units is percent */ }; -struct sensor_event_hall /* Type: HALL */ +struct sensor_hall /* Type: HALL */ { uint64_t timestamp; /* Units is microseconds */ bool hall; /* Boolean type */ }; -struct sensor_event_ir /* Type: Infrared Ray */ +struct sensor_ir /* Type: Infrared Ray */ { uint64_t timestamp; /* Units is microseconds */ float ir; /* in SI units lux */ }; -struct sensor_event_gps /* Type: Gps */ +struct sensor_gps /* Type: Gps */ { uint64_t timestamp; /* Time since system start, Units is microseconds */ @@ -424,85 +424,85 @@ struct sensor_event_gps /* Type: Gps */ uint32_t satellites_used; /* Number of satellites used */ }; -struct sensor_event_uv /* Type: Ultraviolet Light */ +struct sensor_uv /* Type: Ultraviolet Light */ { uint64_t timestamp; /* Units is microseconds */ float uvi; /* the value range is 0 - 15 */ }; -struct sensor_event_noise /* Type: Noise Loudness */ +struct sensor_noise /* Type: Noise Loudness */ { uint64_t timestamp; /* Units is microseconds */ float db; /* in SI units db */ }; -struct sensor_event_pm25 /* Type: PM25 */ +struct sensor_pm25 /* Type: PM25 */ { uint64_t timestamp; /* Units is microseconds */ float pm25; /* in SI units ug/m^3 */ }; -struct sensor_event_pm10 /* Type: PM10 */ +struct sensor_pm10 /* Type: PM10 */ { uint64_t timestamp; /* Units is microseconds */ float pm10; /* in SI units ug/m^3 */ }; -struct sensor_event_pm1p0 /* Type: PM1P0 */ +struct sensor_pm1p0 /* Type: PM1P0 */ { uint64_t timestamp; /* Units is microseconds */ float pm1p0; /* in SI units ug/m^3 */ }; -struct sensor_event_co2 /* Type: CO2 */ +struct sensor_co2 /* Type: CO2 */ { uint64_t timestamp; /* Units is microseconds */ float co2; /* in SI units ppm */ }; -struct sensor_event_hcho /* Type: HCHO */ +struct sensor_hcho /* Type: HCHO */ { uint64_t timestamp; /* Units is microseconds */ float hcho; /* in SI units ppm */ }; -struct sensor_event_tvoc /* Type: TVOC */ +struct sensor_tvoc /* Type: TVOC */ { uint64_t timestamp; /* Units is microseconds */ float tvoc; /* in SI units ppm */ }; -struct sensor_event_ph /* Type: PH */ +struct sensor_ph /* Type: PH */ { uint64_t timestamp; /* Units is microseconds */ float ph; /* PH = 7.0 neutral, PH < 7.0 acidic, PH > 7.0 alkaline */ }; -struct sensor_event_dust /* Type: DUST */ +struct sensor_dust /* Type: DUST */ { uint64_t timestamp; /* Units is microseconds */ float dust; /* is SI units ug/m^3 */ }; -struct sensor_event_hrate /* Type: Heart Rate */ +struct sensor_hrate /* Type: Heart Rate */ { uint64_t timestamp; /* Units is microseconds */ float bpm; /* is SI units BPM */ }; -struct sensor_event_hbeat /* Type: Heart Beat */ +struct sensor_hbeat /* Type: Heart Beat */ { uint64_t timestamp; /* Units is microseconds */ float beat; /* Units is times/minutes */ }; -struct sensor_event_ecg /* Type: ECG */ +struct sensor_ecg /* Type: ECG */ { uint64_t timestamp; /* Unit is microseconds */ float ecg; /* Unit is μV */ }; -struct sensor_event_ppgd /* Type: PPGD */ +struct sensor_ppgd /* Type: PPGD */ { uint64_t timestamp; /* Unit is microseconds */ uint32_t ppg[2]; /* PPG from 2 channels. Units are ADC counts. */ @@ -510,7 +510,7 @@ struct sensor_event_ppgd /* Type: PPGD */ uint16_t gain[2]; /* ADC gains of channels. Units are V/V or V/A. */ }; -struct sensor_event_ppgq /* Type: PPDQ */ +struct sensor_ppgq /* Type: PPDQ */ { uint64_t timestamp; /* Unit is microseconds */ uint32_t ppg[4]; /* PPG from 4 channels. Units are ADC counts. */ @@ -518,21 +518,21 @@ struct sensor_event_ppgq /* Type: PPDQ */ uint16_t gain[4]; /* ADC gains of channels. Units are V/V or V/A. */ }; -struct sensor_event_impd /* Type: Impedance */ +struct sensor_impd /* Type: Impedance */ { uint64_t timestamp; /* Unit is microseconds */ float real; /* Real part, unit is Ohm(Ω) */ float imag; /* Imaginary part, unit is Ohm(Ω) */ }; -struct sensor_event_ots /* Type: OTS */ +struct sensor_ots /* Type: OTS */ { uint64_t timestamp; /* Unit is microseconds */ int32_t x; /* Axis X in counts */ int32_t y; /* Axis Y in counts */ }; -struct sensor_event_gps_satellite +struct sensor_gps_satellite { uint64_t timestamp; /* Time since system start, Units is microseconds */ uint32_t count; /* Total number of messages of satellites visible */ @@ -561,7 +561,7 @@ struct sensor_event_gps_satellite info[4]; }; -struct sensor_event_wake_gesture /* Type: Wake gesture */ +struct sensor_wake_gesture /* Type: Wake gesture */ { uint64_t timestamp; /* Units is microseconds */ @@ -572,7 +572,7 @@ struct sensor_event_wake_gesture /* Type: Wake gesture */ uint32_t event; }; -struct sensor_event_cap /* Type: Capacitance */ +struct sensor_cap /* Type: Capacitance */ { uint64_t timestamp; /* Unit is microseconds */ int32_t status; /* Detection status */ @@ -814,10 +814,10 @@ struct sensor_lowerhalf_s * * If device support batch mode, the number of events that hardware fifo * hold maximum number of samples, must be aligned with size of - * struct sensor_event_xxx. + * struct sensor_xxx. */ - uint32_t buffer_number; + unsigned long nbuffer; /* The uncalibrated use to describe whether the sensor event is * uncalibrated. True is uncalibrated data, false is calibrated data, @@ -878,11 +878,14 @@ struct sensor_lowerhalf_s struct sensor_state_s { - unsigned long min_interval; /* The minimum subscription interval for sensor, in us */ + unsigned long esize; /* The element size of circular buffer */ + unsigned long nbuffer; /* The number of events that the circular buffer can hold */ unsigned long min_latency; /* The minimum batch latency for sensor, in us */ - unsigned long nsubscribers; /* The number of subcribers, if subsrciber exists, - * the sensor deivce is enabled */ + unsigned long min_interval; /* The minimum subscription interval for sensor, in us */ + unsigned long nsubscribers; /* The number of subcribers */ unsigned long nadvertisers; /* The number of advertisers */ + unsigned long generation; /* The recent generation of circular buffer */ + FAR void *priv; /* The pointer to private data of userspace user */ }; /* This structure describes the register info for the user sensor */ @@ -890,9 +893,9 @@ struct sensor_state_s #ifdef CONFIG_USENSOR struct sensor_reginfo_s { - FAR const char *path; /* The path of user sensor */ - uint16_t esize; /* The element size of user sensor */ - uint32_t nqueue; /* The number of queue buffered elements */ + FAR const char *path; /* The path of user sensor */ + unsigned long esize; /* The element size of user sensor */ + unsigned long nbuffer; /* The number of queue buffered elements */ }; #endif @@ -966,7 +969,7 @@ int sensor_register(FAR struct sensor_lowerhalf_s *dev, int devno); ****************************************************************************/ int sensor_custom_register(FAR struct sensor_lowerhalf_s *dev, - FAR const char *path, uint8_t esize); + FAR const char *path, unsigned long esize); /**************************************************************************** * Name: sensor_unregister