Lines Matching refs:sensor

80     rt_sensor_t sensor = (rt_sensor_t)args;  in _irq_callback()  local
83 if (sensor->module) in _irq_callback()
86 for (i = 0; i < sensor->module->sen_num; i++) in _irq_callback()
88 _sensor_cb(sensor->module->sen[i]); in _irq_callback()
93 _sensor_cb(sensor); in _irq_callback()
98 static rt_err_t _sensor_irq_init(rt_sensor_t sensor) in _sensor_irq_init() argument
100 if (sensor->config.irq_pin.pin == PIN_IRQ_PIN_NONE) in _sensor_irq_init()
105 rt_pin_mode(sensor->config.irq_pin.pin, sensor->config.irq_pin.mode); in _sensor_irq_init()
107 if (sensor->config.irq_pin.mode == PIN_MODE_INPUT_PULLDOWN) in _sensor_irq_init()
109 … rt_pin_attach_irq(sensor->config.irq_pin.pin, PIN_IRQ_MODE_RISING, _irq_callback, (void *)sensor); in _sensor_irq_init()
111 else if (sensor->config.irq_pin.mode == PIN_MODE_INPUT_PULLUP) in _sensor_irq_init()
113 …rt_pin_attach_irq(sensor->config.irq_pin.pin, PIN_IRQ_MODE_FALLING, _irq_callback, (void *)sensor); in _sensor_irq_init()
115 else if (sensor->config.irq_pin.mode == PIN_MODE_INPUT) in _sensor_irq_init()
117 …rt_pin_attach_irq(sensor->config.irq_pin.pin, PIN_IRQ_MODE_RISING_FALLING, _irq_callback, (void *) in _sensor_irq_init()
120 rt_pin_irq_enable(sensor->config.irq_pin.pin, RT_TRUE); in _sensor_irq_init()
128 static rt_ssize_t _local_fetch_data(rt_sensor_t sensor, rt_sensor_data_t buf, rt_size_t len) in _local_fetch_data() argument
133 static rt_err_t _local_control(rt_sensor_t sensor, int cmd, void *arg) in _local_control() argument
147 rt_sensor_t sensor = (rt_sensor_t)dev; in _sensor_open() local
150 rt_err_t (*local_ctrl)(rt_sensor_t sensor, int cmd, void *arg) = _local_control; in _sensor_open()
152 if (sensor->module) in _sensor_open()
155 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in _sensor_open()
158 if (sensor->module != RT_NULL && sensor->info.fifo_max > 0 && sensor->data_buf == RT_NULL) in _sensor_open()
161 sensor->data_buf = rt_malloc(sizeof(struct rt_sensor_data) * sensor->info.fifo_max); in _sensor_open()
162 if (sensor->data_buf == RT_NULL) in _sensor_open()
168 if (sensor->ops->control != RT_NULL) in _sensor_open()
170 local_ctrl = sensor->ops->control; in _sensor_open()
176 …if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_FETCH_MODE, (void *)RT_SENSOR_MODE_FETCH_POLLING) == RT_… in _sensor_open()
178 RT_SENSOR_MODE_SET_FETCH(sensor->info.mode, RT_SENSOR_MODE_FETCH_POLLING); in _sensor_open()
184 … if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_FETCH_MODE, (void *)RT_SENSOR_MODE_FETCH_INT) == RT_EOK) in _sensor_open()
187 _sensor_irq_init(sensor); in _sensor_open()
188 RT_SENSOR_MODE_SET_FETCH(sensor->info.mode, RT_SENSOR_MODE_FETCH_INT); in _sensor_open()
194 …if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_FETCH_MODE, (void *)RT_SENSOR_MODE_FETCH_FIFO) == RT_EOK) in _sensor_open()
197 _sensor_irq_init(sensor); in _sensor_open()
198 RT_SENSOR_MODE_SET_FETCH(sensor->info.mode, RT_SENSOR_MODE_FETCH_FIFO); in _sensor_open()
208 …if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER_MODE, (void *)RT_SENSOR_MODE_POWER_HIGHEST) == RT_… in _sensor_open()
210 RT_SENSOR_MODE_SET_POWER(sensor->info.mode, RT_SENSOR_MODE_POWER_HIGHEST); in _sensor_open()
214 …if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_ACCURACY_MODE, (void *)RT_SENSOR_MODE_ACCURACY_HIGHEST) … in _sensor_open()
216 RT_SENSOR_MODE_SET_ACCURACY(sensor->info.mode, RT_SENSOR_MODE_ACCURACY_HIGHEST); in _sensor_open()
220 if (sensor->module) in _sensor_open()
223 rt_mutex_release(sensor->module->lock); in _sensor_open()
231 rt_sensor_t sensor = (rt_sensor_t)dev; in _sensor_close() local
232 rt_err_t (*local_ctrl)(rt_sensor_t sensor, int cmd, void *arg) = _local_control; in _sensor_close()
237 if (sensor->module) in _sensor_close()
239 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in _sensor_close()
241 if (sensor->ops->control != RT_NULL) in _sensor_close()
243 local_ctrl = sensor->ops->control; in _sensor_close()
247 …if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER_MODE, (void *)RT_SENSOR_MODE_POWER_DOWN) == RT_EOK) in _sensor_close()
249 RT_SENSOR_MODE_SET_POWER(sensor->info.mode, RT_SENSOR_MODE_POWER_DOWN); in _sensor_close()
252 if (sensor->module != RT_NULL && sensor->info.fifo_max > 0 && sensor->data_buf != RT_NULL) in _sensor_close()
254 for (i = 0; i < sensor->module->sen_num; i ++) in _sensor_close()
256 if (sensor->module->sen[i]->parent.ref_count > 0) in _sensor_close()
261 for (i = 0; i < sensor->module->sen_num; i ++) in _sensor_close()
263 if (sensor->module->sen[i]->data_buf) in _sensor_close()
265 rt_free(sensor->module->sen[i]->data_buf); in _sensor_close()
266 sensor->module->sen[i]->data_buf = RT_NULL; in _sensor_close()
270 if (RT_SENSOR_MODE_GET_FETCH(sensor->info.mode) != RT_SENSOR_MODE_FETCH_POLLING) in _sensor_close()
273 if (sensor->config.irq_pin.pin != PIN_IRQ_PIN_NONE) in _sensor_close()
275 rt_pin_irq_enable(sensor->config.irq_pin.pin, RT_FALSE); in _sensor_close()
280 if (sensor->module) in _sensor_close()
282 rt_mutex_release(sensor->module->lock); in _sensor_close()
290 rt_sensor_t sensor = (rt_sensor_t)dev; in _sensor_read() local
299 if (sensor->module) in _sensor_read()
301 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in _sensor_read()
305 if (sensor->data_len > 0) in _sensor_read()
307 if (len > sensor->data_len / sizeof(struct rt_sensor_data)) in _sensor_read()
309 len = sensor->data_len / sizeof(struct rt_sensor_data); in _sensor_read()
312 rt_memcpy(buf, sensor->data_buf, len * sizeof(struct rt_sensor_data)); in _sensor_read()
315 sensor->data_len = 0; in _sensor_read()
321 if (sensor->ops->fetch_data) in _sensor_read()
323 result = sensor->ops->fetch_data(sensor, buf, len); in _sensor_read()
327 if (sensor->module) in _sensor_read()
329 rt_mutex_release(sensor->module->lock); in _sensor_read()
337 rt_sensor_t sensor = (rt_sensor_t)dev; in _sensor_control() local
340 rt_err_t (*local_ctrl)(rt_sensor_t sensor, int cmd, void *arg) = _local_control; in _sensor_control()
343 if (sensor->module) in _sensor_control()
345 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in _sensor_control()
347 if (sensor->ops->control != RT_NULL) in _sensor_control()
349 local_ctrl = sensor->ops->control; in _sensor_control()
357 result = local_ctrl(sensor, RT_SENSOR_CTRL_GET_ID, args); in _sensor_control()
370 result = local_ctrl(sensor, RT_SENSOR_CTRL_SET_ACCURACY_MODE, args); in _sensor_control()
373 RT_SENSOR_MODE_SET_ACCURACY(sensor->info.mode, mode); in _sensor_control()
374 LOG_D("set accuracy mode code: %d", RT_SENSOR_MODE_GET_ACCURACY(sensor->info.mode)); in _sensor_control()
387 result = local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER_MODE, args); in _sensor_control()
390 RT_SENSOR_MODE_SET_POWER(sensor->info.mode, mode); in _sensor_control()
391 LOG_D("set power mode code: %d", RT_SENSOR_MODE_GET_POWER(sensor->info.mode)); in _sensor_control()
403 result = local_ctrl(sensor, RT_SENSOR_CTRL_SET_FETCH_MODE, args); in _sensor_control()
406 RT_SENSOR_MODE_SET_FETCH(sensor->info.mode, mode); in _sensor_control()
407 LOG_D("set fetch mode code: %d", RT_SENSOR_MODE_GET_FETCH(sensor->info.mode)); in _sensor_control()
412 result = local_ctrl(sensor, RT_SENSOR_CTRL_SELF_TEST, args); in _sensor_control()
416 result = local_ctrl(sensor, RT_SENSOR_CTRL_SOFT_RESET, args); in _sensor_control()
422 result = local_ctrl(sensor, cmd, args); in _sensor_control()
431 if (sensor->module) in _sensor_control()
433 rt_mutex_release(sensor->module->lock); in _sensor_control()
454 int rt_hw_sensor_register(rt_sensor_t sensor, in rt_hw_sensor_register() argument
461 RT_ASSERT(sensor != RT_NULL); in rt_hw_sensor_register()
465 if (sensor->ops == RT_NULL) in rt_hw_sensor_register()
467 sensor->ops = &local_ops; in rt_hw_sensor_register()
471 sensor_name = sensor_name_str[sensor->info.type]; in rt_hw_sensor_register()
482 if (sensor->module != RT_NULL && sensor->module->lock == RT_NULL) in rt_hw_sensor_register()
485 sensor->module->lock = rt_mutex_create(name, RT_IPC_FLAG_PRIO); in rt_hw_sensor_register()
486 if (sensor->module->lock == RT_NULL) in rt_hw_sensor_register()
493 device = &sensor->parent; in rt_hw_sensor_register()