Lines Matching refs:stdev

94 static void stdev_dsp_set_power(struct dragon_sound_trigger_device *stdev,  in stdev_dsp_set_power()  argument
97 stdev->is_streaming = 0; in stdev_dsp_set_power()
98 mixer_ctl_set_value(stdev->int_mic_sw, 0, val); in stdev_dsp_set_power()
101 static int stdev_init_mixer(struct dragon_sound_trigger_device *stdev) in stdev_init_mixer() argument
106 stdev->mixer = mixer_open(DRAGON_MIXER_VAD); in stdev_init_mixer()
107 if (!stdev->mixer) in stdev_init_mixer()
110 stdev->int_mic_sw = mixer_get_ctl_by_name(stdev->mixer, DRAGON_MIC_CTRL); in stdev_init_mixer()
111 if (!stdev->int_mic_sw) in stdev_init_mixer()
114 stdev->hotword_model = mixer_get_ctl_by_name(stdev->mixer, in stdev_init_mixer()
116 if (!stdev->hotword_model) in stdev_init_mixer()
119 stdev_dsp_set_power(stdev, 0); // Disable DSP at the beginning in stdev_init_mixer()
124 if (stdev->mixer) in stdev_init_mixer()
125 mixer_close(stdev->mixer); in stdev_init_mixer()
129 static void stdev_close_term_sock(struct dragon_sound_trigger_device *stdev) in stdev_close_term_sock() argument
131 if (stdev->send_sock >=0) { in stdev_close_term_sock()
132 close(stdev->send_sock); in stdev_close_term_sock()
133 stdev->send_sock = -1; in stdev_close_term_sock()
135 if (stdev->term_sock >=0) { in stdev_close_term_sock()
136 close(stdev->term_sock); in stdev_close_term_sock()
137 stdev->term_sock = -1; in stdev_close_term_sock()
141 static void stdev_close_mixer(struct dragon_sound_trigger_device *stdev) in stdev_close_mixer() argument
143 if (stdev) { in stdev_close_mixer()
144 stdev_dsp_set_power(stdev, 0); in stdev_close_mixer()
145 mixer_close(stdev->mixer); in stdev_close_mixer()
146 stdev_close_term_sock(stdev); in stdev_close_mixer()
150 static int vad_load_sound_model(struct dragon_sound_trigger_device *stdev, in vad_load_sound_model() argument
154 ret = mixer_ctl_set_array(stdev->hotword_model, buf, len); in vad_load_sound_model()
161 stdev) in sound_trigger_event_alloc() argument
174 event->common.model = stdev->model_handle; in sound_trigger_event_alloc()
176 if (stdev->config) { in sound_trigger_event_alloc()
179 event->num_phrases = stdev->config->num_phrases; in sound_trigger_event_alloc()
183 memcpy(&event->phrase_extras[i], &stdev->config->phrases[i], in sound_trigger_event_alloc()
207 struct dragon_sound_trigger_device *stdev = in callback_thread_loop() local
218 pthread_mutex_lock(&stdev->lock); in callback_thread_loop()
219 if (stdev->recognition_callback == NULL) in callback_thread_loop()
225 stdev_close_term_sock(stdev); in callback_thread_loop()
226 stdev->send_sock = exit_sockets[0]; in callback_thread_loop()
227 stdev->term_sock = exit_sockets[1]; in callback_thread_loop()
229 stdev_dsp_set_power(stdev, 1); in callback_thread_loop()
240 stdev->pcm = pcm_open(DRAGON_ST_CARD_NUM, DRAGON_ST_DEV_NUM, in callback_thread_loop()
242 if (!stdev->pcm || !pcm_is_ready(stdev->pcm)) { in callback_thread_loop()
243 ALOGE("Unable to open PCM device (%s)\n", pcm_get_error(stdev->pcm)); in callback_thread_loop()
247 err = pcm_start(stdev->pcm); in callback_thread_loop()
249 ALOGE("Unable to start PCM device (%s)\n", pcm_get_error(stdev->pcm)); in callback_thread_loop()
255 fds[0].fd = pcm_get_poll_fd(stdev->pcm);; in callback_thread_loop()
261 fds[1].fd = stdev->term_sock; in callback_thread_loop()
263 pthread_mutex_unlock(&stdev->lock); in callback_thread_loop()
267 pthread_mutex_lock(&stdev->lock); in callback_thread_loop()
268 if ((err < 0) || (stdev->recognition_callback == NULL)) { in callback_thread_loop()
275 recognition_callback_t callback = stdev->recognition_callback; in callback_thread_loop()
276 void *cookie = stdev->recognition_cookie; in callback_thread_loop()
279 sound_trigger_event_alloc(stdev); in callback_thread_loop()
281 pcm_close(stdev->pcm); in callback_thread_loop()
282 stdev->pcm = NULL; in callback_thread_loop()
285 stdev->is_streaming = 1; in callback_thread_loop()
287 stdev->model_handle); in callback_thread_loop()
288 pthread_mutex_unlock(&stdev->lock); in callback_thread_loop()
292 pthread_mutex_lock(&stdev->lock); in callback_thread_loop()
303 pthread_mutex_unlock(&stdev->lock); in callback_thread_loop()
306 if (stdev->pcm) { in callback_thread_loop()
307 pcm_close(stdev->pcm); in callback_thread_loop()
308 stdev->pcm = NULL; in callback_thread_loop()
312 stdev->recognition_callback = NULL; in callback_thread_loop()
313 stdev_close_term_sock(stdev); in callback_thread_loop()
315 if (stdev->config && !stdev->config->capture_requested) in callback_thread_loop()
316 stdev_dsp_set_power(stdev, 0); in callback_thread_loop()
318 pthread_mutex_unlock(&stdev->lock); in callback_thread_loop()
326 struct dragon_sound_trigger_device *stdev = in stdev_get_properties() local
342 struct dragon_sound_trigger_device *stdev = in stdev_load_sound_model() local
347 pthread_mutex_lock(&stdev->lock); in stdev_load_sound_model()
353 if (stdev->model_handle == 1) { in stdev_load_sound_model()
358 ret = vad_load_sound_model(stdev, in stdev_load_sound_model()
364 stdev->model_handle = 1; in stdev_load_sound_model()
365 stdev->sound_model_callback = callback; in stdev_load_sound_model()
366 stdev->sound_model_cookie = cookie; in stdev_load_sound_model()
367 *handle = stdev->model_handle; in stdev_load_sound_model()
370 pthread_mutex_unlock(&stdev->lock); in stdev_load_sound_model()
377 struct dragon_sound_trigger_device *stdev = in stdev_unload_sound_model() local
382 pthread_mutex_lock(&stdev->lock); in stdev_unload_sound_model()
387 if (stdev->model_handle == 0) { in stdev_unload_sound_model()
391 stdev->model_handle = 0; in stdev_unload_sound_model()
392 free(stdev->config); in stdev_unload_sound_model()
393 stdev->config = NULL; in stdev_unload_sound_model()
394 if (stdev->recognition_callback != NULL) { in stdev_unload_sound_model()
395 stdev->recognition_callback = NULL; in stdev_unload_sound_model()
396 if (stdev->send_sock >=0) in stdev_unload_sound_model()
397 write(stdev->send_sock, "T", 1); in stdev_unload_sound_model()
398 pthread_mutex_unlock(&stdev->lock); in stdev_unload_sound_model()
400 pthread_join(stdev->callback_thread, (void **)NULL); in stdev_unload_sound_model()
402 pthread_mutex_lock(&stdev->lock); in stdev_unload_sound_model()
406 stdev_dsp_set_power(stdev, 0); in stdev_unload_sound_model()
408 pthread_mutex_unlock(&stdev->lock); in stdev_unload_sound_model()
418 struct dragon_sound_trigger_device *stdev = in stdev_start_recognition() local
423 pthread_mutex_lock(&stdev->lock); in stdev_start_recognition()
424 if (stdev->model_handle != sound_model_handle) { in stdev_start_recognition()
428 if (stdev->recognition_callback != NULL) { in stdev_start_recognition()
433 free(stdev->config); in stdev_start_recognition()
434 stdev->config = NULL; in stdev_start_recognition()
436 stdev->config = malloc(sizeof(*config)); in stdev_start_recognition()
437 if (!stdev->config) { in stdev_start_recognition()
441 memcpy(stdev->config, config, sizeof(*config)); in stdev_start_recognition()
444 if (stdev->pcm) { in stdev_start_recognition()
445 pcm_close(stdev->pcm); in stdev_start_recognition()
446 stdev->pcm = NULL; in stdev_start_recognition()
449 stdev_dsp_set_power(stdev, 0); in stdev_start_recognition()
451 stdev->recognition_callback = callback; in stdev_start_recognition()
452 stdev->recognition_cookie = cookie; in stdev_start_recognition()
453 pthread_create(&stdev->callback_thread, (const pthread_attr_t *) NULL, in stdev_start_recognition()
454 callback_thread_loop, stdev); in stdev_start_recognition()
456 pthread_mutex_unlock(&stdev->lock); in stdev_start_recognition()
463 struct dragon_sound_trigger_device *stdev = in stdev_stop_recognition() local
468 pthread_mutex_lock(&stdev->lock); in stdev_stop_recognition()
469 if (stdev->model_handle != sound_model_handle) { in stdev_stop_recognition()
473 if (stdev->recognition_callback == NULL) { in stdev_stop_recognition()
477 free(stdev->config); in stdev_stop_recognition()
478 stdev->config = NULL; in stdev_stop_recognition()
479 stdev->recognition_callback = NULL; in stdev_stop_recognition()
480 if (stdev->send_sock >=0) in stdev_stop_recognition()
481 write(stdev->send_sock, "T", 1); in stdev_stop_recognition()
482 pthread_mutex_unlock(&stdev->lock); in stdev_stop_recognition()
484 pthread_join(stdev->callback_thread, (void **)NULL); in stdev_stop_recognition()
486 if (stdev->pcm) { in stdev_stop_recognition()
487 pcm_close(stdev->pcm); in stdev_stop_recognition()
488 stdev->pcm = NULL; in stdev_stop_recognition()
491 pthread_mutex_lock(&stdev->lock); in stdev_stop_recognition()
494 stdev_dsp_set_power(stdev, 0); in stdev_stop_recognition()
496 pthread_mutex_unlock(&stdev->lock); in stdev_stop_recognition()
503 struct dragon_sound_trigger_device *stdev = &g_stdev; in sound_trigger_open_for_streaming() local
506 pthread_mutex_lock(&stdev->lock); in sound_trigger_open_for_streaming()
508 if (!stdev->opened) { in sound_trigger_open_for_streaming()
513 if (!stdev->is_streaming) { in sound_trigger_open_for_streaming()
518 if (!stdev->pcm) { in sound_trigger_open_for_streaming()
528 pthread_mutex_unlock(&stdev->lock); in sound_trigger_open_for_streaming()
535 struct dragon_sound_trigger_device *stdev = &g_stdev; in sound_trigger_read_samples() local
550 pthread_mutex_lock(&stdev->lock); in sound_trigger_read_samples()
552 if (!stdev->opened) { in sound_trigger_read_samples()
557 if (!stdev->is_streaming) { in sound_trigger_read_samples()
562 if (!stdev->pcm) { in sound_trigger_read_samples()
570 frames = pcm_mmap_avail(stdev->pcm); in sound_trigger_read_samples()
590 ret = pcm_mmap_begin(stdev->pcm, (void**)&snd_buffer, &offset, &frames); in sound_trigger_read_samples()
596 pcm_mmap_commit(stdev->pcm, offset, frames); in sound_trigger_read_samples()
601 pthread_mutex_unlock(&stdev->lock); in sound_trigger_read_samples()
608 struct dragon_sound_trigger_device *stdev = &g_stdev; in sound_trigger_close_for_streaming() local
615 if (stdev->pcm) { in sound_trigger_close_for_streaming()
616 pcm_close(stdev->pcm); in sound_trigger_close_for_streaming()
617 stdev->pcm = NULL; in sound_trigger_close_for_streaming()
625 struct dragon_sound_trigger_device *stdev = in stdev_close() local
629 pthread_mutex_lock(&stdev->lock); in stdev_close()
630 if (!stdev->opened) { in stdev_close()
635 stdev_close_mixer(stdev); in stdev_close()
636 stdev->model_handle = 0; in stdev_close()
637 stdev->send_sock = 0; in stdev_close()
638 stdev->term_sock = 0; in stdev_close()
639 stdev->opened = false; in stdev_close()
642 pthread_mutex_unlock(&stdev->lock); in stdev_close()
649 struct dragon_sound_trigger_device *stdev; in stdev_open() local
655 stdev = &g_stdev; in stdev_open()
656 pthread_mutex_lock(&stdev->lock); in stdev_open()
658 if (stdev->opened) { in stdev_open()
664 ret = stdev_init_mixer(stdev); in stdev_open()
670 stdev->device.common.tag = HARDWARE_DEVICE_TAG; in stdev_open()
671 stdev->device.common.version = SOUND_TRIGGER_DEVICE_API_VERSION_1_0; in stdev_open()
672 stdev->device.common.module = (struct hw_module_t *)module; in stdev_open()
673 stdev->device.common.close = stdev_close; in stdev_open()
674 stdev->device.get_properties = stdev_get_properties; in stdev_open()
675 stdev->device.load_sound_model = stdev_load_sound_model; in stdev_open()
676 stdev->device.unload_sound_model = stdev_unload_sound_model; in stdev_open()
677 stdev->device.start_recognition = stdev_start_recognition; in stdev_open()
678 stdev->device.stop_recognition = stdev_stop_recognition; in stdev_open()
679 stdev->send_sock = stdev->term_sock = -1; in stdev_open()
680 stdev->opened = true; in stdev_open()
682 *device = &stdev->device.common; /* same address as stdev */ in stdev_open()
684 pthread_mutex_unlock(&stdev->lock); in stdev_open()