Home | History | Annotate | Download | only in src

Lines Matching defs:poll_cb

75  *   @poll_cb      : ptr to poll thread object
82 static int32_t mm_camera_poll_sig_async(mm_camera_poll_thread_t *poll_cb,
92 pthread_mutex_lock(&poll_cb->mutex);
94 poll_cb->status = FALSE;
97 ssize_t len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
102 pthread_mutex_unlock(&poll_cb->mutex);
107 pthread_mutex_unlock(&poll_cb->mutex);
121 * @poll_cb : ptr to poll thread object
128 static int32_t mm_camera_poll_sig(mm_camera_poll_thread_t *poll_cb,
138 pthread_mutex_lock(&poll_cb->mutex);
140 poll_cb->status = FALSE;
143 ssize_t len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
148 pthread_mutex_unlock(&poll_cb->mutex);
154 if (FALSE == poll_cb->status) {
156 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
159 pthread_mutex_unlock(&poll_cb->mutex);
170 * @poll_cb : ptr to poll thread object
174 static void mm_camera_poll_sig_done(mm_camera_poll_thread_t *poll_cb)
176 pthread_mutex_lock(&poll_cb->mutex);
177 poll_cb->status = TRUE;
178 pthread_cond_signal(&poll_cb->cond_v);
180 pthread_mutex_unlock(&poll_cb->mutex);
189 * @poll_cb : ptr to poll thread object
194 static void mm_camera_poll_set_state(mm_camera_poll_thread_t *poll_cb,
197 poll_cb->state = state;
206 * @poll_cb : ptr to poll thread object
210 static void mm_camera_poll_proc_pipe(mm_camera_poll_thread_t *poll_cb)
215 read_len = read(poll_cb->pfds[0], &cmd_evt, sizeof(cmd_evt));
217 __func__, poll_cb->pfds[0], (int)read_len, (int)sizeof(cmd_evt), cmd_evt.cmd);
222 poll_cb->num_fds = 0;
223 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->pfds[0];
224 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
225 poll_cb->num_fds++;
227 if (MM_CAMERA_POLL_TYPE_EVT == poll_cb->poll_type &&
228 poll_cb->num_fds < MAX_STREAM_NUM_IN_BUNDLE) {
229 if (poll_cb->poll_entries[0].fd >= 0) {
231 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[0].fd;
232 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
233 poll_cb->num_fds++;
235 } else if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type &&
236 poll_cb->num_fds <= MAX_STREAM_NUM_IN_BUNDLE) {
238 if(poll_cb->poll_entries[i].fd >= 0) {
240 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[i].fd;
241 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
242 poll_cb->num_fds++;
251 poll_cb->poll_fds[poll_cb->num_fds].fd = -1;
252 poll_cb->poll_fds[poll_cb->num_fds].events = 0;
253 poll_cb->num_fds++;
258 mm_camera_poll_sig_done(poll_cb);
262 mm_camera_poll_sig_done(poll_cb);
266 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_STOPPED);
267 mm_camera_poll_sig_done(poll_cb);
278 * @poll_cb : ptr to poll thread object
282 static void *mm_camera_poll_fn(mm_camera_poll_thread_t *poll_cb)
286 if (NULL == poll_cb) {
287 CDBG_ERROR("%s: poll_cb is NULL!\n", __func__);
290 CDBG("%s: poll type = %d, num_fd = %d poll_cb = %p\n",
291 __func__, poll_cb->poll_type, poll_cb->num_fds,poll_cb);
293 for(i = 0; i < poll_cb->num_fds; i++) {
294 poll_cb->poll_fds[i].events = POLLIN|POLLRDNORM|POLLPRI;
297 rc = poll(poll_cb->poll_fds, poll_cb->num_fds, poll_cb->timeoutms);
299 if ((poll_cb->poll_fds[0].revents & POLLIN) &&
300 (poll_cb->poll_fds[0].revents & POLLRDNORM)) {
303 mm_camera_poll_proc_pipe(poll_cb);
305 for(i=1; i<poll_cb->num_fds; i++) {
307 if ((poll_cb->poll_type == MM_CAMERA_POLL_TYPE_EVT) &&
308 (poll_cb->poll_fds[i].revents & POLLPRI)) {
310 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
311 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
315 if ((MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) &&
316 (poll_cb->poll_fds[i].revents & POLLIN) &&
317 (poll_cb->poll_fds[i].revents & POLLRDNORM)) {
319 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
320 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
330 } while ((poll_cb != NULL) && (poll_cb->state == MM_CAMERA_POLL_TASK_STATE_POLL));
347 mm_camera_poll_thread_t *poll_cb = (mm_camera_poll_thread_t *)data;
350 poll_cb->poll_fds[poll_cb->num_fds++].fd = poll_cb->pfds[0];
352 mm_camera_poll_sig_done(poll_cb);
353 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_POLL);
354 return mm_camera_poll_fn(poll_cb);
364 * @poll_cb : ptr to poll thread object
368 int32_t mm_camera_poll_thread_notify_entries_updated(mm_camera_poll_thread_t * poll_cb)
371 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
380 * @poll_cb : ptr to poll thread object
386 int32_t mm_camera_poll_thread_commit_updates(mm_camera_poll_thread_t * poll_cb)
388 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_COMMIT);
397 * @poll_cb : ptr to poll thread object
407 int32_t mm_camera_poll_thread_add_poll_fd(mm_camera_poll_thread_t * poll_cb,
417 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
426 poll_cb->poll_entries[idx].fd = fd;
427 poll_cb->poll_entries[idx].handler = handler;
428 poll_cb->poll_entries[idx].notify_cb = notify_cb;
429 poll_cb->poll_entries[idx].user_data = userdata;
432 poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
434 rc = mm_camera_poll_sig_async(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED_ASYNC );
449 * @poll_cb : ptr to poll thread object
457 int32_t mm_camera_poll_thread_del_poll_fd(mm_camera_poll_thread_t * poll_cb,
464 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
473 (handler == poll_cb->poll_entries[idx].handler)) {
475 poll_cb->poll_entries[idx].fd = -1; /* set fd to invalid */
476 poll_cb->poll_entries[idx].handler = 0;
477 poll_cb->poll_entries[idx].notify_cb = NULL;
481 rc = mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
483 rc = mm_camera_poll_sig_async(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED_ASYNC );
494 int32_t mm_camera_poll_thread_launch(mm_camera_poll_thread_t * poll_cb,
499 poll_cb->poll_type = poll_type;
502 cnt = sizeof(poll_cb->poll_fds) / sizeof(poll_cb->poll_fds[0]);
504 poll_cb->poll_fds[i].fd = -1;
507 cnt = sizeof(poll_cb->poll_entries) / sizeof(poll_cb->poll_entries[0]);
509 poll_cb->poll_entries[i].fd = -1;
512 poll_cb->pfds[0] = -1;
513 poll_cb->pfds[1] = -1;
514 rc = pipe(poll_cb->pfds);
520 poll_cb->timeoutms = -1; /* Infinite seconds */
523 __func__, poll_cb->poll_type,
524 poll_cb->pfds[0], poll_cb->pfds[1],poll_cb->timeoutms);
526 pthread_mutex_init(&poll_cb->mutex, NULL);
527 pthread_cond_init(&poll_cb->cond_v, NULL);
530 pthread_mutex_lock(&poll_cb->mutex);
531 poll_cb->status = 0;
532 pthread_create(&poll_cb->pid, NULL, mm_camera_poll_thread, (void *)poll_cb);
533 if(!poll_cb->status) {
534 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
536 if (!poll_cb->threadName) {
537 pthread_setname_np(poll_cb->pid, "CAM_poll");
539 pthread_setname_np(poll_cb->pid, poll_cb->threadName);
541 pthread_mutex_unlock(&poll_cb->mutex);
546 int32_t mm_camera_poll_thread_release(mm_camera_poll_thread_t *poll_cb)
549 if(MM_CAMERA_POLL_TASK_STATE_STOPPED == poll_cb->state) {
555 mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_EXIT);
557 if (pthread_join(poll_cb->pid, NULL) != 0) {
562 if(poll_cb->pfds[0] >= 0) {
563 close(poll_cb->pfds[0]);
565 if(poll_cb->pfds[1] >= 0) {
566 close(poll_cb->pfds[1]);
569 pthread_mutex_destroy(&poll_cb->mutex);
570 pthread_cond_destroy(&poll_cb->cond_v);
571 memset(poll_cb, 0, sizeof(mm_camera_poll_thread_t));
572 poll_cb->pfds[0] = -1;
573 poll_cb->pfds[1] = -1;