Lines Matching full:uipc_main
66 #define UIPC_LOCK() /*BTIF_TRACE_EVENT1(" %s lock", __FUNCTION__);*/ pthread_mutex_lock(&uipc_main.mutex);
67 #define UIPC_UNLOCK() /*BTIF_TRACE_EVENT1("%s unlock", __FUNCTION__);*/ pthread_mutex_unlock(&uipc_main.mutex);
106 static tUIPC_MAIN uipc_main;
152 tUIPC_CHAN *p = &uipc_main.ch[ch_id];
165 tUIPC_CHAN *p = &uipc_main.ch[ch_id];
251 pthread_mutex_init(&uipc_main.mutex, &attr);
256 if (socketpair(AF_UNIX, SOCK_STREAM, 0, uipc_main.signal_fds) < 0)
261 FD_SET(uipc_main.signal_fds[0], &uipc_main.active_set);
262 uipc_main.max_fd = MAX(uipc_main.max_fd, uipc_main.signal_fds[0]);
266 tUIPC_CHAN *p = &uipc_main.ch[i];
284 close(uipc_main.signal_fds[0]);
285 close(uipc_main.signal_fds[1]);
301 //BTIF_TRACE_EVENT2("CHECK TASK FLAGS %x %x", uipc_main.ch[i].task_evt_flags, UIPC_TASK_FLAG_DISCONNECT_CHAN);
302 if (uipc_main.ch[i].task_evt_flags & UIPC_TASK_FLAG_DISCONNECT_CHAN)
304 uipc_main.ch[i].task_evt_flags &= ~UIPC_TASK_FLAG_DISCONNECT_CHAN;
319 //BTIF_TRACE_EVENT2("CHECK SRVFD %d (ch %d)", uipc_main.ch[ch_id].srvfd, ch_id);
321 if (FD_ISSET(uipc_main.ch[ch_id].srvfd, &uipc_main.read_set))
325 uipc_main.ch[ch_id].fd = accept_server_socket(uipc_main.ch[ch_id].srvfd);
327 BTIF_TRACE_EVENT1("NEW FD %d", uipc_main.ch[ch_id].fd);
329 if ((uipc_main.ch[ch_id].fd > 0) && uipc_main.ch[ch_id].cback)
333 BTIF_TRACE_EVENT1("ADD FD %d TO ACTIVE SET", uipc_main.ch[ch_id].fd);
334 FD_SET(uipc_main.ch[ch_id].fd, &uipc_main.active_set);
335 uipc_main.max_fd = MAX(uipc_main.max_fd, uipc_main.ch[ch_id].fd);
338 if (uipc_main.ch[ch_id].fd < 0)
344 if (uipc_main.ch[ch_id].cback)
345 uipc_main.ch[ch_id].cback(ch_id, UIPC_OPEN_EVT);
348 //BTIF_TRACE_EVENT2("CHECK FD %d (ch %d)", uipc_main.ch[ch_id].fd, ch_id);
350 if (FD_ISSET(uipc_main.ch[ch_id].fd, &uipc_main.read_set))
354 if (uipc_main.ch[ch_id].cback)
355 uipc_main.ch[ch_id].cback(ch_id, UIPC_RX_DATA_READY_EVT);
362 if (FD_ISSET(uipc_main.signal_fds[0], &uipc_main.read_set))
366 recv(uipc_main.signal_fds[0], &sig_recv, sizeof(sig_recv), MSG_WAITALL);
374 send(uipc_main.signal_fds[1], &sig_on, sizeof(sig_on), 0);
398 FD_SET(fd, &uipc_main.active_set);
399 uipc_main.max_fd = MAX(uipc_main.max_fd, fd);
401 uipc_main.ch[ch_id].srvfd = fd;
402 uipc_main.ch[ch_id].cback = cback;
403 uipc_main.ch[ch_id].read_poll_tmo_ms = DEFAULT_READ_POLL_TMO_MS;
420 pfd.fd = uipc_main.ch[ch_id].fd;
422 if (uipc_main.ch[ch_id].fd == UIPC_DISCONNECTED)
470 if (uipc_main.ch[ch_id].srvfd != UIPC_DISCONNECTED)
472 BTIF_TRACE_EVENT1("CLOSE SERVER (FD %d)", uipc_main.ch[ch_id].srvfd);
473 close(uipc_main.ch[ch_id].srvfd);
474 FD_CLR(uipc_main.ch[ch_id].srvfd, &uipc_main.active_set);
475 uipc_main.ch[ch_id].srvfd = UIPC_DISCONNECTED;
479 if (uipc_main.ch[ch_id].fd != UIPC_DISCONNECTED)
481 BTIF_TRACE_EVENT1("CLOSE CONNECTION (FD %d)", uipc_main.ch[ch_id].fd);
482 close(uipc_main.ch[ch_id].fd);
483 FD_CLR(uipc_main.ch[ch_id].fd, &uipc_main.active_set);
484 uipc_main.ch[ch_id].fd = UIPC_DISCONNECTED;
489 if (uipc_main.ch[ch_id].cback)
490 uipc_main.ch[ch_id].cback(ch_id, UIPC_CLOSE_EVT);
502 if (uipc_main.ch[ch_id].srvfd == UIPC_DISCONNECTED)
509 uipc_main.ch[ch_id].task_evt_flags |= UIPC_TASK_FLAG_DISCONNECT_CHAN;
521 while (uipc_main.running)
523 uipc_main.read_set = uipc_main.active_set;
525 result = select(uipc_main.max_fd+1, &uipc_main.read_set, NULL, NULL, NULL);
563 uipc_main.tid = 0;
571 uipc_main.running = 1;
573 if (pthread_create(&uipc_main.tid, (const pthread_attr_t *) NULL, (void*)uipc_read_task, NULL) < 0)
587 uipc_main.running = 0;
592 if (uipc_main.tid > 0)
593 pthread_join(uipc_main.tid, NULL);
610 memset(&uipc_main, 0, sizeof(tUIPC_MAIN));
638 if (uipc_main.ch[ch_id].srvfd != UIPC_DISCONNECTED)
731 if (write(uipc_main.ch[ch_id].fd, p_buf, msglen) < 0)
772 int fd = uipc_main.ch[ch_id].fd;
788 // fd, uipc_main.ch[ch_id].read_poll_tmo_ms);
797 if (poll(&pfd, 1, uipc_main.ch[ch_id].read_poll_tmo_ms) == 0)
799 BTIF_TRACE_EVENT1("poll timeout (%d ms)", uipc_main.ch[ch_id].read_poll_tmo_ms);
863 //BTIF_TRACE_EVENT3("register callback ch %d srvfd %d, fd %d", ch_id, uipc_main.ch[ch_id].srvfd, uipc_main.ch[ch_id].fd);
864 uipc_main.ch[ch_id].cback = (tUIPC_RCV_CBACK*)param;
870 if (uipc_main.ch[ch_id].fd != UIPC_DISCONNECTED)
873 FD_CLR(uipc_main.ch[ch_id].fd, &uipc_main.active_set);
881 uipc_main.ch[ch_id].read_poll_tmo_ms = (int)param;
882 BTIF_TRACE_EVENT2("UIPC_SET_READ_POLL_TMO : CH %d, TMO %d ms", ch_id, uipc_main.ch[ch_id].read_poll_tmo_ms );