typedef struct _FocusSource {
GSource source;
- GPollFD pollfd;
+ GPollFD poll_fd;
} FocusSource;
#define GET_CB_DATA(_cb_data, _func, _userdata, _extradata) \
int focus_tid;
int handle;
int focus_fd;
- GSourceFuncs *g_src_funcs;
- GPollFD *g_poll_fd;
- GSource *g_src;
+ FocusSource *fsrc;
bool is_used;
bool auto_reacquire;
GMutex focus_lock;
void* user_data;
} focus_session_interrupt_info_t;
-typedef gboolean (*focus_gLoopPollHandler_t)(gpointer d);
+typedef gboolean (*focus_callback_handler_t)(gpointer user_data);
focus_sound_info_t g_focus_sound_handle[FOCUS_HANDLE_MAX];
focus_session_interrupt_info_t g_focus_session_interrupt_info = {NULL, NULL};
#ifdef __DEBUG__
debug_warning("CHECK : %p, 0x%x ]", source, fsource->pollfd.revents);
#endif
- if (fsource->pollfd.revents & (POLLIN | POLLPRI))
+ if (fsource->poll_fd.revents & (POLLIN | POLLPRI))
return TRUE;
else
return FALSE;
return -1;
}
-static gboolean _focus_callback_handler(gpointer d)
+static gboolean _focus_callback_handler(gpointer user_data)
{
- GPollFD *data = (GPollFD*)d;
+ focus_sound_info_t *focus_handle = (focus_sound_info_t *)user_data;
+ GPollFD *poll_fd;
int count;
int tid = 0;
- int focus_index = 0;
focus_cb_data_lib cb_data;
- debug_log(">>> focus_callback_handler()..this thread id(%u)\n", (unsigned int)pthread_self());
- memset(&cb_data, 0, sizeof(focus_cb_data_lib));
+ debug_log(">>> _focus_callback_handler(), this thread id(%u)\n", (unsigned int)pthread_self());
- if (!data) {
- debug_error("GPollFd is null");
+ memset(&cb_data, 0, sizeof(focus_cb_data_lib));
+ if (!focus_handle) {
+ debug_error("focus_handle is null");
return G_SOURCE_CONTINUE;
}
- if (data->revents & (POLLIN | POLLPRI)) {
+ if (!(poll_fd = &focus_handle->fsrc->poll_fd)) {
+ debug_error("poll_fd is null");
+ return G_SOURCE_CONTINUE;
+ }
+ debug_log("focus_handle(%p), poll_fd(%p)", focus_handle, poll_fd);
+
+ if (poll_fd->revents & (POLLIN | POLLPRI)) {
int changed_state = -1;
- count = read(data->fd, &cb_data, sizeof(cb_data));
+ count = read(poll_fd->fd, &cb_data, sizeof(cb_data));
if (count < 0){
char str_error[256];
strerror_r(errno, str_error, sizeof(str_error));
return G_SOURCE_CONTINUE;
}
changed_state = cb_data.state;
- focus_index = _focus_find_index_by_handle(cb_data.handle);
- if (focus_index == -1) {
- debug_error("Could not find index");
- return G_SOURCE_CONTINUE;
- }
- g_mutex_lock(&g_focus_sound_handle[focus_index].focus_lock);
+ g_mutex_lock(&focus_handle->focus_lock);
- tid = g_focus_sound_handle[focus_index].focus_tid;
+ tid = focus_handle->focus_tid;
if (changed_state != -1) {
debug_msg("Got and start CB : TID(%d), handle(%d), type(%d), state(%d,(DEACTIVATED(0)/ACTIVATED(1)), trigger(%s)",
tid, cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type);
- if (g_focus_sound_handle[focus_index].focus_callback == NULL) {
- debug_error("callback is null..");
- g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+ if (focus_handle->focus_callback == NULL) {
+ debug_error("focus callback is null..");
+ g_mutex_unlock(&focus_handle->focus_lock);
return G_SOURCE_CONTINUE;
}
- debug_msg("[CALLBACK(%p) START]",g_focus_sound_handle[focus_index].focus_callback);
- g_focus_sound_handle[focus_index].focus_callback(cb_data.handle, cb_data.type, cb_data.state,
- cb_data.stream_type, cb_data.option, cb_data.ext_info,
- g_focus_sound_handle[focus_index].user_data);
+ debug_msg("[CALLBACK(%p) START]", focus_handle->focus_callback);
+ (focus_handle->focus_callback)(cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type,
+ cb_data.option, cb_data.ext_info, focus_handle->user_data);
debug_msg("[CALLBACK END]");
if (g_focus_session_interrupt_info.user_cb) {
debug_msg("sending session interrupt callback(%p)", g_focus_session_interrupt_info.user_cb);
int rett = 0;
int tmpfd = -1;
unsigned int buf = 0;
- char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%dr",
- g_focus_sound_handle[focus_index].focus_tid,
- cb_data.handle);
+ char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%dr", focus_handle->focus_tid, cb_data.handle);
tmpfd = open(filename2, O_WRONLY | O_NONBLOCK);
if (tmpfd < 0) {
char str_error[256];
debug_warning("[RETCB][Failed(May Server Close First)]tid(%d) fd(%d) %s errno=%d(%s)\n",
tid, tmpfd, filename2, errno, str_error);
g_free(filename2);
- g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+ g_mutex_unlock(&focus_handle->focus_lock);
return G_SOURCE_CONTINUE;
}
/* buf contains data as below,
* |<--12bits--><--4bits (reacquisition)--><--16bits (handle)-->| */
- buf = (unsigned int)((0x0000ffff & cb_data.handle) | (g_focus_sound_handle[focus_index].auto_reacquire << 16));
+ buf = (unsigned int)((0x0000ffff & cb_data.handle) | (focus_handle->auto_reacquire << 16));
rett = write(tmpfd, &buf, sizeof(buf));
close(tmpfd);
g_free(filename2);
#endif
}
- g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+ g_mutex_unlock(&focus_handle->focus_lock);
+
+ debug_fleave();
return G_SOURCE_CONTINUE;
}
-static gboolean _focus_watch_callback_handler(gpointer d)
+static gboolean _focus_watch_callback_handler(gpointer user_data)
{
- GPollFD *data = (GPollFD*)d;
+ focus_sound_info_t *focus_handle = (focus_sound_info_t *)user_data;
+ GPollFD *poll_fd;
int count;
int tid = 0;
- int focus_index = 0;
focus_cb_data_lib cb_data;
- debug_fenter();
+ debug_log(">>> _focus_watch_callback_handler(), this thread id(%u)\n", (unsigned int)pthread_self());
memset(&cb_data, 0, sizeof(focus_cb_data_lib));
-
- if (!data) {
- debug_error("GPollFd is null");
- return G_SOURCE_CONTINUE;
+ if (!focus_handle) {
+ debug_error("focus_handle is null");
+ return FALSE;
+ }
+ if (!(poll_fd = &focus_handle->fsrc->poll_fd)) {
+ debug_error("g_poll_fd is null");
+ return FALSE;
}
- if (data->revents & (POLLIN | POLLPRI)) {
- count = read(data->fd, &cb_data, sizeof(cb_data));
+ debug_log("focus_handle(%p), poll_fd(%p)", focus_handle, poll_fd);
+
+ if (poll_fd->revents & (POLLIN | POLLPRI)) {
+ count = read(poll_fd->fd, &cb_data, sizeof(cb_data));
if (count < 0){
char str_error[256];
strerror_r(errno, str_error, sizeof(str_error));
return G_SOURCE_CONTINUE;
}
- focus_index = _focus_watch_find_index_by_handle(cb_data.handle);
- if (focus_index == -1) {
- debug_error("Could not find index");
- return G_SOURCE_CONTINUE;
- }
-
- if (!g_focus_sound_handle[focus_index].is_used) {
- debug_warning("unsetting watch callback has been already requested");
+ if (!focus_handle->is_used) {
+ debug_warning("unsetting watch calllback has been already requested");
goto SKIP_CB_AND_RET;
}
- debug_msg("lock focus_lock = %p", &g_focus_sound_handle[focus_index].focus_lock);
- g_mutex_lock(&g_focus_sound_handle[focus_index].focus_lock);
+ g_mutex_lock(&focus_handle->focus_lock);
- tid = g_focus_sound_handle[focus_index].focus_tid;
+ tid = focus_handle->focus_tid;
debug_msg("Got and start CB : TID(%d), handle(%d), type(%d), state(%d,(DEACTIVATED(0)/ACTIVATED(1)), trigger(%s)",
tid, cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type);
- if (g_focus_sound_handle[focus_index].watch_callback == NULL) {
- debug_msg("callback is null..");
+ if (focus_handle->watch_callback == NULL) {
+ debug_msg("watch callback is null..");
} else {
- debug_msg("[CALLBACK(%p) START]",g_focus_sound_handle[focus_index].watch_callback);
- (g_focus_sound_handle[focus_index].watch_callback)(cb_data.handle, cb_data.type, cb_data.state,
- cb_data.stream_type, cb_data.ext_info,
- g_focus_sound_handle[focus_index].user_data);
+ debug_msg("[CALLBACK(%p) START]", focus_handle->watch_callback);
+ (focus_handle->watch_callback)(cb_data.handle, cb_data.type, cb_data.state, cb_data.stream_type,
+ cb_data.ext_info, focus_handle->user_data);
debug_msg("[CALLBACK END]");
if (g_focus_session_interrupt_info.user_cb) {
debug_msg("sending session interrupt callback(%p)", g_focus_session_interrupt_info.user_cb);
int rett = 0;
int tmpfd = -1;
int buf = -1;
- char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%d.wchr",
- g_focus_sound_handle[focus_index].focus_tid,
- cb_data.handle);
+ char *filename2 = g_strdup_printf("/tmp/FOCUS.%d.%d.wchr", focus_handle->focus_tid, cb_data.handle);
tmpfd = open(filename2, O_WRONLY | O_NONBLOCK);
if (tmpfd < 0) {
char str_error[256];
debug_warning("[RETCB][Failed(May Server Close First)]tid(%d) fd(%d) %s errno=%d(%s)\n",
tid, tmpfd, filename2, errno, str_error);
g_free(filename2);
- g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+ g_mutex_unlock(&focus_handle->focus_lock);
return G_SOURCE_CONTINUE;
}
buf = cb_data.handle;
#endif
}
- if (g_focus_sound_handle[focus_index].is_used) {
- debug_msg("unlock focus_lock = %p", &g_focus_sound_handle[focus_index].focus_lock);
- g_mutex_unlock(&g_focus_sound_handle[focus_index].focus_lock);
+ if (focus_handle->is_used) {
+ debug_msg("unlock focus_lock = %p", &focus_handle->focus_lock);
+ g_mutex_unlock(&focus_handle->focus_lock);
}
debug_fleave();
.finalize = _focus_fd_finalize,
};
-static bool _focus_add_sound_callback(int index, focus_gLoopPollHandler_t p_gloop_poll_handler)
+static bool _focus_add_sound_callback(int index, focus_callback_handler_t focus_cb_handler)
{
FocusSource *fsrc = NULL;
GSource *src = NULL;
fsrc = (FocusSource*) src;
- fsrc->pollfd.fd = g_focus_sound_handle[index].focus_fd;
- fsrc->pollfd.events = (gushort)(POLLIN | POLLPRI);
- g_source_add_poll(src, &fsrc->pollfd);
+ fsrc->poll_fd.fd = g_focus_sound_handle[index].focus_fd;
+ fsrc->poll_fd.events = (gushort)(POLLIN | POLLPRI);
+ g_source_add_poll(src, &fsrc->poll_fd);
- g_source_set_callback(src, p_gloop_poll_handler, (gpointer)&fsrc->pollfd, NULL);
+ g_source_set_callback(src, focus_cb_handler, (gpointer)&g_focus_sound_handle[index], NULL);
debug_warning("fsrc(%p), src_funcs(%p), pollfd(%p), fd(%d)",
- fsrc, &event_funcs, &fsrc->pollfd, fsrc->pollfd.fd);
+ fsrc, &event_funcs, &fsrc->poll_fd, fsrc->poll_fd.fd);
fsrc_id = g_source_attach(src, g_main_loop_get_context(g_focus_sound_handle[index].focus_loop));
if (!fsrc_id) {
}
g_source_unref(src);
- g_focus_sound_handle[index].g_src = src;
+ g_focus_sound_handle[index].fsrc = fsrc;
debug_fleave();
return true;
}
h = &g_focus_sound_handle[index];
- if (h->g_src) {
- g_source_destroy(h->g_src);
- h->g_src = NULL;
+ if (h->fsrc) {
+ g_source_destroy((GSource *)h->fsrc);
+ h->fsrc = NULL;
}
h->focus_callback = NULL;