Home | History | Annotate | Download | only in src

Lines Matching defs:poll_cb

72  *   @poll_cb      : ptr to poll thread object
79 static int32_t mm_camera_poll_sig_async(mm_camera_poll_thread_t *poll_cb,
90 pthread_mutex_lock(&poll_cb->mutex);
92 poll_cb->status = FALSE;
95 len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
99 pthread_mutex_unlock(&poll_cb->mutex);
103 pthread_mutex_unlock(&poll_cb->mutex);
117 * @poll_cb : ptr to poll thread object
124 static int32_t mm_camera_poll_sig(mm_camera_poll_thread_t *poll_cb,
135 pthread_mutex_lock(&poll_cb->mutex);
137 poll_cb->status = FALSE;
140 len = write(poll_cb->pfds[1], &cmd_evt, sizeof(cmd_evt));
144 pthread_mutex_unlock(&poll_cb->mutex);
149 if (FALSE == poll_cb->status) {
151 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
154 pthread_mutex_unlock(&poll_cb->mutex);
165 * @poll_cb : ptr to poll thread object
169 static void mm_camera_poll_sig_done(mm_camera_poll_thread_t *poll_cb)
171 pthread_mutex_lock(&poll_cb->mutex);
172 poll_cb->status = TRUE;
173 pthread_cond_signal(&poll_cb->cond_v);
175 pthread_mutex_unlock(&poll_cb->mutex);
184 * @poll_cb : ptr to poll thread object
189 static void mm_camera_poll_set_state(mm_camera_poll_thread_t *poll_cb,
192 poll_cb->state = state;
201 * @poll_cb : ptr to poll thread object
205 static void mm_camera_poll_proc_pipe(mm_camera_poll_thread_t *poll_cb)
210 read_len = read(poll_cb->pfds[0], &cmd_evt, sizeof(cmd_evt));
212 __func__, poll_cb->pfds[0], (int)read_len, (int)sizeof(cmd_evt), cmd_evt.cmd);
217 poll_cb->num_fds = 0;
218 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->pfds[0];
219 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
220 poll_cb->num_fds++;
222 if (MM_CAMERA_POLL_TYPE_EVT == poll_cb->poll_type) {
223 if (poll_cb->poll_entries[0].fd > 0) {
225 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[0].fd;
226 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
227 poll_cb->num_fds++;
229 } else if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
231 if(poll_cb->poll_entries[i].fd > 0) {
233 poll_cb->poll_fds[poll_cb->num_fds].fd = poll_cb->poll_entries[i].fd;
234 poll_cb->poll_fds[poll_cb->num_fds].events = POLLIN|POLLRDNORM|POLLPRI;
235 poll_cb->num_fds++;
244 poll_cb->poll_fds[poll_cb->num_fds].fd = -1;
245 poll_cb->poll_fds[poll_cb->num_fds].events = 0;
246 poll_cb->num_fds++;
251 mm_camera_poll_sig_done(poll_cb);
256 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_STOPPED);
257 mm_camera_poll_sig_done(poll_cb);
268 * @poll_cb : ptr to poll thread object
272 static void *mm_camera_poll_fn(mm_camera_poll_thread_t *poll_cb)
276 CDBG("%s: poll type = %d, num_fd = %d poll_cb = %p\n",
277 __func__, poll_cb->poll_type, poll_cb->num_fds,poll_cb);
279 for(i = 0; i < poll_cb->num_fds; i++) {
280 poll_cb->poll_fds[i].events = POLLIN|POLLRDNORM|POLLPRI;
283 rc = poll(poll_cb->poll_fds, poll_cb->num_fds, poll_cb->timeoutms);
285 if ((poll_cb->poll_fds[0].revents & POLLIN) &&
286 (poll_cb->poll_fds[0].revents & POLLRDNORM)) {
289 mm_camera_poll_proc_pipe(poll_cb);
291 for(i=1; i<poll_cb->num_fds; i++) {
293 if ((poll_cb->poll_type == MM_CAMERA_POLL_TYPE_EVT) &&
294 (poll_cb->poll_fds[i].revents & POLLPRI)) {
296 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
297 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
301 if ((MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) &&
302 (poll_cb->poll_fds[i].revents & POLLIN) &&
303 (poll_cb->poll_fds[i].revents & POLLRDNORM)) {
305 if (NULL != poll_cb->poll_entries[i-1].notify_cb) {
306 poll_cb->poll_entries[i-1].notify_cb(poll_cb->poll_entries[i-1].user_data);
316 } while (poll_cb->state == MM_CAMERA_POLL_TASK_STATE_POLL);
332 mm_camera_poll_thread_t *poll_cb = (mm_camera_poll_thread_t *)data;
335 poll_cb->poll_fds[poll_cb->num_fds++].fd = poll_cb->pfds[0];
337 mm_camera_poll_sig_done(poll_cb);
338 mm_camera_poll_set_state(poll_cb, MM_CAMERA_POLL_TASK_STATE_POLL);
339 return mm_camera_poll_fn(poll_cb);
349 * @poll_cb : ptr to poll thread object
353 int32_t mm_camera_poll_thread_notify_entries_updated(mm_camera_poll_thread_t * poll_cb)
356 return mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
365 * @poll_cb : ptr to poll thread object
375 int32_t mm_camera_poll_thread_add_poll_fd(mm_camera_poll_thread_t * poll_cb,
385 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
394 poll_cb->poll_entries[idx].fd = fd;
395 poll_cb->poll_entries[idx].handler = handler;
396 poll_cb->poll_entries[idx].notify_cb = notify_cb;
397 poll_cb->poll_entries[idx].user_data = userdata;
400 rc = mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
402 rc = mm_camera_poll_sig_async(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED_ASYNC );
417 * @poll_cb : ptr to poll thread object
423 int32_t mm_camera_poll_thread_del_poll_fd(mm_camera_poll_thread_t * poll_cb,
430 if (MM_CAMERA_POLL_TYPE_DATA == poll_cb->poll_type) {
439 (handler == poll_cb->poll_entries[idx].handler)) {
441 poll_cb->poll_entries[idx].fd = -1; /* set fd to invalid */
442 poll_cb->poll_entries[idx].handler = 0;
443 poll_cb->poll_entries[idx].notify_cb = NULL;
447 rc = mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED);
449 rc = mm_camera_poll_sig_async(poll_cb, MM_CAMERA_PIPE_CMD_POLL_ENTRIES_UPDATED_ASYNC );
461 int32_t mm_camera_poll_thread_launch(mm_camera_poll_thread_t * poll_cb,
468 poll_cb->poll_type = poll_type;
470 poll_cb->pfds[0] = 0;
471 poll_cb->pfds[1] = 0;
472 rc = pipe(poll_cb->pfds);
479 poll_cb->timeoutms = -1; /* Infinite seconds */
482 __func__, poll_cb->poll_type,
483 poll_cb->pfds[0], poll_cb->pfds[1],poll_cb->timeoutms);
485 pthread_mutex_init(&poll_cb->mutex, NULL);
486 pthread_cond_init(&poll_cb->cond_v, NULL);
489 pthread_mutex_lock(&poll_cb->mutex);
490 poll_cb->status = 0;
491 pthread_create(&poll_cb->pid, NULL, mm_camera_poll_thread, (void *)poll_cb);
492 if(!poll_cb->status) {
493 pthread_cond_wait(&poll_cb->cond_v, &poll_cb->mutex);
495 pthread_mutex_unlock(&poll_cb->mutex);
501 int32_t mm_camera_poll_thread_release(mm_camera_poll_thread_t *poll_cb)
507 if(MM_CAMERA_POLL_TASK_STATE_STOPPED == poll_cb->state) {
513 mm_camera_poll_sig(poll_cb, MM_CAMERA_PIPE_CMD_EXIT);
515 if (pthread_join(poll_cb->pid, NULL) != 0) {
520 if(poll_cb->pfds[0]) {
521 close(poll_cb->pfds[0]);
523 if(poll_cb->pfds[1]) {
524 close(poll_cb->pfds[1]);
527 pthread_mutex_destroy(&poll_cb->mutex);
528 pthread_cond_destroy(&poll_cb->cond_v);
529 memset(poll_cb, 0, sizeof(mm_camera_poll_thread_t));