Home | History | Annotate | Download | only in src

Lines Matching defs:poll_cb

76  *   @poll_cb      : ptr to poll thread object
83 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 ssize_t len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
103 pthread_mutex_unlock(&poll_cb->mutex);
108 pthread_mutex_unlock(&poll_cb->mutex);
122 * @poll_cb : ptr to poll thread object
129 static int32_t mm_camera_poll_sig(mm_camera_poll_thread_t *poll_cb,
139 pthread_mutex_lock(&poll_cb->mutex);
141 poll_cb->status = FALSE;
144 ssize_t len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
149 pthread_mutex_unlock(&poll_cb->mutex);
155 if (FALSE == poll_cb->status) {
157 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
160 pthread_mutex_unlock(&poll_cb->mutex);
171 * @poll_cb : ptr to poll thread object
175 static void mm_camera_poll_sig_done(mm_camera_poll_thread_t *poll_cb)
177 pthread_mutex_lock(&poll_cb->mutex);
178 poll_cb->status = TRUE;
179 pthread_cond_signal(&poll_cb->cond_v);
181 pthread_mutex_unlock(&poll_cb->mutex);
190 * @poll_cb : ptr to poll thread object
195 static void mm_camera_poll_set_state(mm_camera_poll_thread_t *poll_cb,
198 poll_cb->state = state;
207 * @poll_cb : ptr to poll thread object
211 static void mm_camera_poll_proc_pipe(mm_camera_poll_thread_t *poll_cb)
216 read_len = read(poll_cb->pfds[0], &cmd_evt, sizeof(cmd_evt));
218 poll_cb->pfds[0], (int)read_len, (int)sizeof(cmd_evt), cmd_evt.cmd);
223 poll_cb->num_fds = 0;
224 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->pfds[0];
225 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
226 poll_cb->num_fds++;
228 if (MM_CAMERA_POLL_TYPE_EVT == poll_cb->poll_type &&
229 poll_cb->num_fds < MAX_STREAM_NUM_IN_BUNDLE) {
230 if (poll_cb->poll_entries[0].fd >= 0) {
232 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[0].fd;
233 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
234 poll_cb->num_fds++;
236 } else if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type &&
237 poll_cb->num_fds <= MAX_STREAM_NUM_IN_BUNDLE) {
239 if(poll_cb->poll_entries[i].fd >= 0) {
241 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[i].fd;
242 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
243 poll_cb->num_fds++;
252 poll_cb->poll_fds[poll_cb->num_fds].fd = -1;
253 poll_cb->poll_fds[poll_cb->num_fds].events = 0;
254 poll_cb->num_fds++;
259 mm_camera_poll_sig_done(poll_cb);
263 mm_camera_poll_sig_done(poll_cb);
267 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_STOPPED);
268 mm_camera_poll_sig_done(poll_cb);
279 * @poll_cb : ptr to poll thread object
283 static void *mm_camera_poll_fn(mm_camera_poll_thread_t *poll_cb)
287 if (NULL == poll_cb) {
288 LOGE("poll_cb is NULL!\n");
291 LOGD("poll type = %d, num_fd = %d poll_cb = %p\n",
292 poll_cb->poll_type, poll_cb->num_fds,poll_cb);
294 for(i = 0; i < poll_cb->num_fds; i++) {
295 poll_cb->poll_fds[i].events = POLLIN|POLLRDNORM|POLLPRI;
298 rc = poll(poll_cb->poll_fds, poll_cb->num_fds, poll_cb->timeoutms);
300 if ((poll_cb->poll_fds[0].revents & POLLIN) &&
301 (poll_cb->poll_fds[0].revents & POLLRDNORM)) {
304 mm_camera_poll_proc_pipe(poll_cb);
306 for(i=1; i<poll_cb->num_fds; i++) {
308 if ((poll_cb->poll_type == MM_CAMERA_POLL_TYPE_EVT) &&
309 (poll_cb->poll_fds[i].revents & POLLPRI)) {
311 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
312 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
316 if ((MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) &&
317 (poll_cb->poll_fds[i].revents & POLLIN) &&
318 (poll_cb->poll_fds[i].revents & POLLRDNORM)) {
320 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
321 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
331 } 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;
349 mm_camera_cmd_thread_name(poll_cb->threadName);
351 poll_cb->poll_fds[poll_cb->num_fds++].fd = poll_cb->pfds[0];
353 mm_camera_poll_sig_done(poll_cb);
354 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_POLL);
355 return mm_camera_poll_fn(poll_cb);
365 * @poll_cb : ptr to poll thread object
369 int32_t mm_camera_poll_thread_notify_entries_updated(mm_camera_poll_thread_t * poll_cb)
372 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
381 * @poll_cb : ptr to poll thread object
387 int32_t mm_camera_poll_thread_commit_updates(mm_camera_poll_thread_t * poll_cb)
389 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_COMMIT);
398 * @poll_cb : ptr to poll thread object
408 int32_t mm_camera_poll_thread_add_poll_fd(mm_camera_poll_thread_t * poll_cb,
418 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
427 poll_cb->poll_entries[idx].fd = fd;
428 poll_cb->poll_entries[idx].handler = handler;
429 poll_cb->poll_entries[idx].notify_cb = notify_cb;
430 poll_cb->poll_entries[idx].user_data = userdata;
433 rc = mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
435 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 );
487 (poll_cb->poll_entries[idx].handler != 0)) {
488 LOGE("invalid handler %d (%d)", poll_cb->poll_entries[idx].handler,
500 int32_t mm_camera_poll_thread_launch(mm_camera_poll_thread_t * poll_cb,
505 poll_cb->poll_type = poll_type;
508 cnt = sizeof(poll_cb->poll_fds) / sizeof(poll_cb->poll_fds[0]);
510 poll_cb->poll_fds[i].fd = -1;
513 cnt = sizeof(poll_cb->poll_entries) / sizeof(poll_cb->poll_entries[0]);
515 poll_cb->poll_entries[i].fd = -1;
518 poll_cb->pfds[0] = -1;
519 poll_cb->pfds[1] = -1;
520 rc = pipe(poll_cb->pfds);
526 poll_cb->timeoutms = -1; /* Infinite seconds */
529 poll_cb->poll_type,
530 poll_cb->pfds[0], poll_cb->pfds[1],poll_cb->timeoutms);
532 pthread_mutex_init(&poll_cb->mutex, NULL);
533 pthread_cond_init(&poll_cb->cond_v, NULL);
536 pthread_mutex_lock(&poll_cb->mutex);
537 poll_cb->status = 0;
538 pthread_create(&poll_cb->pid, NULL, mm_camera_poll_thread, (void *)poll_cb);
539 if(!poll_cb->status) {
540 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
543 pthread_mutex_unlock(&poll_cb->mutex);
548 int32_t mm_camera_poll_thread_release(mm_camera_poll_thread_t *poll_cb)
551 if(MM_CAMERA_POLL_TASK_STATE_STOPPED == poll_cb->state) {
557 mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_EXIT);
559 if (pthread_join(poll_cb->pid, NULL) != 0) {
564 if(poll_cb->pfds[0] >= 0) {
565 close(poll_cb->pfds[0]);
567 if(poll_cb->pfds[1] >= 0) {
568 close(poll_cb->pfds[1]);
571 pthread_mutex_destroy(&poll_cb->mutex);
572 pthread_cond_destroy(&poll_cb->cond_v);
573 memset(poll_cb, 0, sizeof(mm_camera_poll_thread_t));
574 poll_cb->pfds[0] = -1;
575 poll_cb->pfds[1] = -1;