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,
93 pthread_mutex_lock(&poll_cb->mutex);
95 poll_cb->status = FALSE;
98 len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
102 pthread_mutex_unlock(&poll_cb->mutex);
106 pthread_mutex_unlock(&poll_cb->mutex);
120 * @poll_cb : ptr to poll thread object
127 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 len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
147 pthread_mutex_unlock(&poll_cb->mutex);
152 if (FALSE == poll_cb->status) {
154 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
157 pthread_mutex_unlock(&poll_cb->mutex);
168 * @poll_cb : ptr to poll thread object
172 static void mm_camera_poll_sig_done(mm_camera_poll_thread_t *poll_cb)
174 pthread_mutex_lock(&poll_cb->mutex);
175 poll_cb->status = TRUE;
176 pthread_cond_signal(&poll_cb->cond_v);
178 pthread_mutex_unlock(&poll_cb->mutex);
187 * @poll_cb : ptr to poll thread object
192 static void mm_camera_poll_set_state(mm_camera_poll_thread_t *poll_cb,
195 poll_cb->state = state;
204 * @poll_cb : ptr to poll thread object
208 static void mm_camera_poll_proc_pipe(mm_camera_poll_thread_t *poll_cb)
213 read_len = read(poll_cb->pfds[0], &cmd_evt, sizeof(cmd_evt));
215 __func__, poll_cb->pfds[0], (int)read_len, (int)sizeof(cmd_evt), cmd_evt.cmd);
220 poll_cb->num_fds = 0;
221 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->pfds[0];
222 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
223 poll_cb->num_fds++;
225 if (MM_CAMERA_POLL_TYPE_EVT == poll_cb->poll_type &&
226 poll_cb->num_fds < MAX_STREAM_NUM_IN_BUNDLE) {
227 if (poll_cb->poll_entries[0].fd > 0) {
229 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[0].fd;
230 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
231 poll_cb->num_fds++;
233 } else if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type &&
234 poll_cb->num_fds <= MAX_STREAM_NUM_IN_BUNDLE) {
236 if(poll_cb->poll_entries[i].fd > 0) {
238 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[i].fd;
239 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
240 poll_cb->num_fds++;
249 poll_cb->poll_fds[poll_cb->num_fds].fd = -1;
250 poll_cb->poll_fds[poll_cb->num_fds].events = 0;
251 poll_cb->num_fds++;
256 mm_camera_poll_sig_done(poll_cb);
260 mm_camera_poll_sig_done(poll_cb);
264 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_STOPPED);
265 mm_camera_poll_sig_done(poll_cb);
276 * @poll_cb : ptr to poll thread object
280 static void *mm_camera_poll_fn(mm_camera_poll_thread_t *poll_cb)
284 if (NULL == poll_cb) {
285 CDBG_ERROR("%s: poll_cb is NULL!\n", __func__);
288 CDBG("%s: poll type = %d, num_fd = %d poll_cb = %p\n",
289 __func__, poll_cb->poll_type, poll_cb->num_fds,poll_cb);
291 for(i = 0; i < poll_cb->num_fds; i++) {
292 poll_cb->poll_fds[i].events = POLLIN|POLLRDNORM|POLLPRI;
295 rc = poll(poll_cb->poll_fds, poll_cb->num_fds, poll_cb->timeoutms);
297 if ((poll_cb->poll_fds[0].revents & POLLIN) &&
298 (poll_cb->poll_fds[0].revents & POLLRDNORM)) {
301 mm_camera_poll_proc_pipe(poll_cb);
303 for(i=1; i<poll_cb->num_fds; i++) {
305 if ((poll_cb->poll_type == MM_CAMERA_POLL_TYPE_EVT) &&
306 (poll_cb->poll_fds[i].revents & POLLPRI)) {
308 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
309 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
313 if ((MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) &&
314 (poll_cb->poll_fds[i].revents & POLLIN) &&
315 (poll_cb->poll_fds[i].revents & POLLRDNORM)) {
317 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
318 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
328 } while ((poll_cb != NULL) && (poll_cb->state == MM_CAMERA_POLL_TASK_STATE_POLL));
345 mm_camera_poll_thread_t *poll_cb = (mm_camera_poll_thread_t *)data;
348 poll_cb->poll_fds[poll_cb->num_fds++].fd = poll_cb->pfds[0];
350 mm_camera_poll_sig_done(poll_cb);
351 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_POLL);
352 return mm_camera_poll_fn(poll_cb);
362 * @poll_cb : ptr to poll thread object
366 int32_t mm_camera_poll_thread_notify_entries_updated(mm_camera_poll_thread_t * poll_cb)
369 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
378 * @poll_cb : ptr to poll thread object
384 int32_t mm_camera_poll_thread_commit_updates(mm_camera_poll_thread_t * poll_cb)
386 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_COMMIT);
395 * @poll_cb : ptr to poll thread object
405 int32_t mm_camera_poll_thread_add_poll_fd(mm_camera_poll_thread_t * poll_cb,
415 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
424 poll_cb->poll_entries[idx].fd = fd;
425 poll_cb->poll_entries[idx].handler = handler;
426 poll_cb->poll_entries[idx].notify_cb = notify_cb;
427 poll_cb->poll_entries[idx].user_data = userdata;
430 rc = mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
432 rc = mm_camera_poll_sig_async(poll_cb
447 * @poll_cb : ptr to poll thread object
455 int32_t mm_camera_poll_thread_del_poll_fd(mm_camera_poll_thread_t * poll_cb,
462 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
471 (handler == poll_cb->poll_entries[idx].handler)) {
473 poll_cb->poll_entries[idx].fd = -1; /* set fd to invalid */
474 poll_cb->poll_entries[idx].handler = 0;
475 poll_cb->poll_entries[idx].notify_cb = NULL;
479 rc = mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
481 rc = mm_camera_poll_sig_async(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED_ASYNC );
492 int32_t mm_camera_poll_thread_launch(mm_camera_poll_thread_t * poll_cb,
496 poll_cb->poll_type = poll_type;
498 poll_cb->pfds[0] = -1;
499 poll_cb->pfds[1] = -1;
500 rc = pipe(poll_cb->pfds);
506 poll_cb->timeoutms = -1; /* Infinite seconds */
509 __func__, poll_cb->poll_type,
510 poll_cb->pfds[0], poll_cb->pfds[1],poll_cb->timeoutms);
512 pthread_mutex_init(&poll_cb->mutex, NULL);
513 pthread_cond_init(&poll_cb->cond_v, NULL);
516 pthread_mutex_lock(&poll_cb->mutex);
517 poll_cb->status = 0;
518 pthread_create(&poll_cb->pid, NULL, mm_camera_poll_thread, (void *)poll_cb);
519 if(!poll_cb->status) {
520 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
522 pthread_mutex_unlock(&poll_cb->mutex);
527 int32_t mm_camera_poll_thread_release(mm_camera_poll_thread_t *poll_cb)
530 if(MM_CAMERA_POLL_TASK_STATE_STOPPED == poll_cb->state) {
536 mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_EXIT);
538 if (pthread_join(poll_cb->pid, NULL) != 0) {
543 if(poll_cb->pfds[0] >= 0) {
544 close(poll_cb->pfds[0]);
546 if(poll_cb->pfds[1] >= 0) {
547 close(poll_cb->pfds[1]);
550 pthread_mutex_destroy(&poll_cb->mutex);
551 pthread_cond_destroy(&poll_cb->cond_v);
552 memset(poll_cb, 0, sizeof(mm_camera_poll_thread_t));
553 poll_cb->pfds[0] = -1;
554 poll_cb->pfds[1] = -1;