Lines Matching refs:sensor
84 rt_sensor_t sensor = (rt_sensor_t)args; in irq_callback() local
87 if (sensor->module) in irq_callback()
90 for (i = 0; i < sensor->module->sen_num; i++) in irq_callback()
92 rt_sensor_cb(sensor->module->sen[i]); in irq_callback()
97 rt_sensor_cb(sensor); in irq_callback()
102 static rt_err_t rt_sensor_irq_init(rt_sensor_t sensor) in rt_sensor_irq_init() argument
104 if (sensor->config.irq_pin.pin == RT_PIN_NONE) in rt_sensor_irq_init()
109 rt_pin_mode(sensor->config.irq_pin.pin, sensor->config.irq_pin.mode); in rt_sensor_irq_init()
111 if (sensor->config.irq_pin.mode == PIN_MODE_INPUT_PULLDOWN) in rt_sensor_irq_init()
113 … rt_pin_attach_irq(sensor->config.irq_pin.pin, PIN_IRQ_MODE_RISING, irq_callback, (void *)sensor); in rt_sensor_irq_init()
115 else if (sensor->config.irq_pin.mode == PIN_MODE_INPUT_PULLUP) in rt_sensor_irq_init()
117 … rt_pin_attach_irq(sensor->config.irq_pin.pin, PIN_IRQ_MODE_FALLING, irq_callback, (void *)sensor); in rt_sensor_irq_init()
119 else if (sensor->config.irq_pin.mode == PIN_MODE_INPUT) in rt_sensor_irq_init()
121 …rt_pin_attach_irq(sensor->config.irq_pin.pin, PIN_IRQ_MODE_RISING_FALLING, irq_callback, (void *)s… in rt_sensor_irq_init()
124 rt_pin_irq_enable(sensor->config.irq_pin.pin, RT_TRUE); in rt_sensor_irq_init()
133 static rt_ssize_t local_fetch_data(struct rt_sensor_device *sensor, void *buf, rt_size_t len) in local_fetch_data() argument
138 static rt_err_t local_control(struct rt_sensor_device *sensor, int cmd, void *arg) in local_control() argument
152 rt_sensor_t sensor = (rt_sensor_t)dev; in rt_sensor_open() local
155 rt_err_t (*local_ctrl)(struct rt_sensor_device * sensor, int cmd, void *arg) = local_control; in rt_sensor_open()
157 if (sensor->module) in rt_sensor_open()
160 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in rt_sensor_open()
163 if (sensor->module != RT_NULL && sensor->info.fifo_max > 0 && sensor->data_buf == RT_NULL) in rt_sensor_open()
166 sensor->data_buf = rt_malloc(sizeof(struct rt_sensor_data) * sensor->info.fifo_max); in rt_sensor_open()
167 if (sensor->data_buf == RT_NULL) in rt_sensor_open()
173 if (sensor->ops->control != RT_NULL) in rt_sensor_open()
175 local_ctrl = sensor->ops->control; in rt_sensor_open()
178 sensor->config.mode = RT_SENSOR_MODE_POLLING; in rt_sensor_open()
182 local_ctrl(sensor, RT_SENSOR_CTRL_SET_MODE, (void *)RT_SENSOR_MODE_POLLING); in rt_sensor_open()
187 if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_MODE, (void *)RT_SENSOR_MODE_INT) == RT_EOK) in rt_sensor_open()
190 rt_sensor_irq_init(sensor); in rt_sensor_open()
191 sensor->config.mode = RT_SENSOR_MODE_INT; in rt_sensor_open()
197 if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_MODE, (void *)RT_SENSOR_MODE_FIFO) == RT_EOK) in rt_sensor_open()
200 rt_sensor_irq_init(sensor); in rt_sensor_open()
201 sensor->config.mode = RT_SENSOR_MODE_FIFO; in rt_sensor_open()
211 if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER, (void *)RT_SENSOR_POWER_NORMAL) == RT_EOK) in rt_sensor_open()
213 sensor->config.power = RT_SENSOR_POWER_NORMAL; in rt_sensor_open()
217 if (sensor->module) in rt_sensor_open()
220 rt_mutex_release(sensor->module->lock); in rt_sensor_open()
228 rt_sensor_t sensor = (rt_sensor_t)dev; in rt_sensor_close() local
230 rt_err_t (*local_ctrl)(struct rt_sensor_device * sensor, int cmd, void *arg) = local_control; in rt_sensor_close()
234 if (sensor->module) in rt_sensor_close()
236 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in rt_sensor_close()
238 if (sensor->ops->control != RT_NULL) in rt_sensor_close()
240 local_ctrl = sensor->ops->control; in rt_sensor_close()
244 if (local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER, (void *)RT_SENSOR_POWER_DOWN) == RT_EOK) in rt_sensor_close()
246 sensor->config.power = RT_SENSOR_POWER_DOWN; in rt_sensor_close()
249 if (sensor->module != RT_NULL && sensor->info.fifo_max > 0 && sensor->data_buf != RT_NULL) in rt_sensor_close()
251 for (i = 0; i < sensor->module->sen_num; i ++) in rt_sensor_close()
253 if (sensor->module->sen[i]->parent.ref_count > 0) in rt_sensor_close()
258 for (i = 0; i < sensor->module->sen_num; i ++) in rt_sensor_close()
260 if (sensor->module->sen[i]->data_buf != RT_NULL) in rt_sensor_close()
262 rt_free(sensor->module->sen[i]->data_buf); in rt_sensor_close()
263 sensor->module->sen[i]->data_buf = RT_NULL; in rt_sensor_close()
267 if (sensor->config.mode != RT_SENSOR_MODE_POLLING) in rt_sensor_close()
270 if (sensor->config.irq_pin.pin != RT_PIN_NONE) in rt_sensor_close()
272 rt_pin_irq_enable(sensor->config.irq_pin.pin, RT_FALSE); in rt_sensor_close()
277 if (sensor->module) in rt_sensor_close()
279 rt_mutex_release(sensor->module->lock); in rt_sensor_close()
287 rt_sensor_t sensor = (rt_sensor_t)dev; in rt_sensor_read() local
296 if (sensor->module) in rt_sensor_read()
298 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in rt_sensor_read()
302 if (sensor->data_len > 0) in rt_sensor_read()
304 if (len > sensor->data_len / sizeof(struct rt_sensor_data)) in rt_sensor_read()
306 len = sensor->data_len / sizeof(struct rt_sensor_data); in rt_sensor_read()
309 rt_memcpy(buf, sensor->data_buf, len * sizeof(struct rt_sensor_data)); in rt_sensor_read()
312 sensor->data_len = 0; in rt_sensor_read()
318 if (sensor->ops->fetch_data != RT_NULL) in rt_sensor_read()
320 result = sensor->ops->fetch_data(sensor, buf, len); in rt_sensor_read()
324 if (sensor->module) in rt_sensor_read()
326 rt_mutex_release(sensor->module->lock); in rt_sensor_read()
334 rt_sensor_t sensor = (rt_sensor_t)dev; in rt_sensor_control() local
337 rt_err_t (*local_ctrl)(struct rt_sensor_device * sensor, int cmd, void *arg) = local_control; in rt_sensor_control()
339 if (sensor->module) in rt_sensor_control()
341 rt_mutex_take(sensor->module->lock, RT_WAITING_FOREVER); in rt_sensor_control()
343 if (sensor->ops->control != RT_NULL) in rt_sensor_control()
345 local_ctrl = sensor->ops->control; in rt_sensor_control()
353 result = local_ctrl(sensor, RT_SENSOR_CTRL_GET_ID, args); in rt_sensor_control()
359 rt_memcpy(args, &sensor->info, sizeof(struct rt_sensor_info)); in rt_sensor_control()
364 result = local_ctrl(sensor, RT_SENSOR_CTRL_SET_RANGE, args); in rt_sensor_control()
367 sensor->config.range = (rt_int32_t)args; in rt_sensor_control()
368 LOG_D("set range %d", sensor->config.range); in rt_sensor_control()
373 result = local_ctrl(sensor, RT_SENSOR_CTRL_SET_ODR, args); in rt_sensor_control()
376 sensor->config.odr = (rt_uint32_t)args & 0xFFFF; in rt_sensor_control()
377 LOG_D("set odr %d", sensor->config.odr); in rt_sensor_control()
382 result = local_ctrl(sensor, RT_SENSOR_CTRL_SET_POWER, args); in rt_sensor_control()
385 sensor->config.power = (rt_uint32_t)args & 0xFF; in rt_sensor_control()
386 LOG_D("set power mode code:", sensor->config.power); in rt_sensor_control()
391 result = local_ctrl(sensor, RT_SENSOR_CTRL_SELF_TEST, args); in rt_sensor_control()
398 result = local_ctrl(sensor, cmd, args); in rt_sensor_control()
407 if (sensor->module) in rt_sensor_control()
409 rt_mutex_release(sensor->module->lock); in rt_sensor_control()
431 int rt_hw_sensor_register(rt_sensor_t sensor, in rt_hw_sensor_register() argument
438 RT_ASSERT(sensor != RT_NULL); in rt_hw_sensor_register()
442 if (sensor->ops == RT_NULL) in rt_hw_sensor_register()
444 sensor->ops = &local_ops; in rt_hw_sensor_register()
448 sensor_name = sensor_name_str[sensor->info.type]; in rt_hw_sensor_register()
459 if (sensor->module != RT_NULL && sensor->module->lock == RT_NULL) in rt_hw_sensor_register()
462 sensor->module->lock = rt_mutex_create(name, RT_IPC_FLAG_PRIO); in rt_hw_sensor_register()
463 if (sensor->module->lock == RT_NULL) in rt_hw_sensor_register()
470 device = &sensor->parent; in rt_hw_sensor_register()