]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
timer: user_instance: emit signal with ALSATimerEvent
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 10 Jun 2020 01:24:14 +0000 (10:24 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Fri, 12 Jun 2020 00:00:43 +0000 (09:00 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/timer/privates.h
src/timer/user-instance.c
src/timer/user-instance.h

index 3e174affdd1e13d1edc07c3f61019a80e4c1f6d0..90c770f0cbf8404dceefaa60294ced7e3532c2b6 100644 (file)
@@ -8,7 +8,6 @@
 #include "instance-info.h"
 #include "instance-params.h"
 #include "instance-status.h"
-#include "event-data.h"
 #include "event-data-tick.h"
 #include "event-data-timestamp.h"
 
index c436a21086e3e8ddcc64cb4b8fcd8bc6f194ab22..78152ad4bb04b5bc2c907ab338256a48ad6fd5c0 100644 (file)
@@ -35,7 +35,6 @@ typedef struct {
     gpointer tag;
     void *buf;
     unsigned int buf_len;
-    ALSATimerEventData *event_data;
 } TimerUserInstanceSource;
 
 enum timer_user_instance_sig_type {
@@ -66,7 +65,7 @@ static void alsatimer_user_instance_class_init(ALSATimerUserInstanceClass *klass
     /**
      * ALSATimerUserInstance::handle-event:
      * @self: A #ALSATimerUserInstance.
-     * @event_data: (transfer none): An object derived from #ALSATimerEventData.
+     * @event: (transfer none): The instance of #ALSATimerEvent.
      *
      * When event occurs for any element, this signal is emit.
      */
@@ -77,7 +76,7 @@ static void alsatimer_user_instance_class_init(ALSATimerUserInstanceClass *klass
                      G_STRUCT_OFFSET(ALSATimerUserInstanceClass, handle_event),
                      NULL, NULL,
                      g_cclosure_marshal_VOID__OBJECT,
-                     G_TYPE_NONE, 1, ALSATIMER_TYPE_EVENT_DATA);
+                     G_TYPE_NONE, 1, ALSATIMER_TYPE_EVENT);
 
     /**
      * ALSATimerUserInstance::handle-disconnection:
@@ -295,40 +294,6 @@ void alsatimer_user_instance_get_status(ALSATimerUserInstance *self,
     }
 }
 
-static void handle_tick_events(TimerUserInstanceSource *src, int len)
-{
-    struct snd_timer_read *ev = src->buf;
-
-    while (len >= sizeof(*ev)) {
-        ALSATimerEventDataTick *data = ALSATIMER_EVENT_DATA_TICK(src->event_data);
-
-        timer_event_data_tick_set_data(data, ev);
-        g_signal_emit(src->self,
-                timer_user_instance_sigs[TIMER_USER_INSTANCE_SIG_HANDLE_EVENT],
-                0, src->event_data);
-
-        len -= sizeof(*ev);
-        ++ev;
-    }
-}
-
-static void handle_timestamp_events(TimerUserInstanceSource *src, int len)
-{
-    struct snd_timer_tread *ev = src->buf;
-
-    while (len >= sizeof(*ev)) {
-        ALSATimerEventDataTimestamp *data = ALSATIMER_EVENT_DATA_TIMESTAMP(src->event_data);
-
-        timer_event_data_timestamp_set_data(data, ev);
-        g_signal_emit(src->self,
-                timer_user_instance_sigs[TIMER_USER_INSTANCE_SIG_HANDLE_EVENT],
-                0, src->event_data);
-
-        len -= sizeof(*ev);
-        ++ev;
-    }
-}
-
 static gboolean timer_user_instance_check_src(GSource *gsrc)
 {
     TimerUserInstanceSource *src = (TimerUserInstanceSource *)gsrc;
@@ -347,7 +312,9 @@ static gboolean timer_user_instance_dispatch_src(GSource *gsrc, GSourceFunc cb,
     ALSATimerUserInstance *self = src->self;
     ALSATimerUserInstancePrivate *priv;
     GIOCondition condition;
+    size_t event_size;
     int len;
+    guint8 *buf;
 
     priv = alsatimer_user_instance_get_instance_private(self);
     if (priv->fd < 0)
@@ -369,10 +336,28 @@ static gboolean timer_user_instance_dispatch_src(GSource *gsrc, GSourceFunc cb,
         return G_SOURCE_REMOVE;
     }
 
-    if (priv->event_data_type == ALSATIMER_EVENT_DATA_TYPE_TICK)
-        handle_tick_events(src, len);
-    else
-        handle_timestamp_events(src, len);
+    switch (priv->event_data_type) {
+    case ALSATIMER_EVENT_DATA_TYPE_TICK:
+        event_size = sizeof(struct snd_timer_read);
+        break;
+    case ALSATIMER_EVENT_DATA_TYPE_TIMESTAMP:
+        event_size = sizeof(struct snd_timer_tread);
+        break;
+    default:
+        return G_SOURCE_CONTINUE;
+    }
+
+    buf = src->buf;
+    while (len > 0) {
+        ALSATimerEvent *ev = (ALSATimerEvent *)buf;
+
+        g_signal_emit(src->self,
+                      timer_user_instance_sigs[TIMER_USER_INSTANCE_SIG_HANDLE_EVENT],
+                      0, ev);
+
+        buf += event_size;
+        len -= event_size;
+    }
 
     // Just be sure to continue to process this source.
     return G_SOURCE_CONTINUE;
@@ -383,7 +368,6 @@ static void timer_user_instance_finalize_src(GSource *gsrc)
     TimerUserInstanceSource *src = (TimerUserInstanceSource *)gsrc;
 
     g_free(src->buf);
-    g_object_unref(src->event_data);
     g_object_unref(src->self);
 }
 
@@ -405,7 +389,6 @@ void alsatimer_user_instance_create_source(ALSATimerUserInstance *self,
             .finalize       = timer_user_instance_finalize_src,
     };
     ALSATimerUserInstancePrivate *priv;
-    GType event_data_class;
     TimerUserInstanceSource *src;
     long page_size = sysconf(_SC_PAGESIZE);
     void *buf;
@@ -418,18 +401,6 @@ void alsatimer_user_instance_create_source(ALSATimerUserInstance *self,
         return;
     }
 
-    switch (priv->event_data_type) {
-    case ALSATIMER_EVENT_DATA_TYPE_TICK:
-        event_data_class = ALSATIMER_TYPE_EVENT_DATA_TICK;
-        break;
-    case ALSATIMER_EVENT_DATA_TYPE_TIMESTAMP:
-        event_data_class = ALSATIMER_TYPE_EVENT_DATA_TIMESTAMP;
-        break;
-    default:
-        generate_error(error, EINVAL);
-        return;
-    }
-
     buf = g_try_malloc0(page_size);
     if (buf == NULL) {
         generate_error(error, ENOMEM);
@@ -447,9 +418,6 @@ void alsatimer_user_instance_create_source(ALSATimerUserInstance *self,
     src->tag = g_source_add_unix_fd(*gsrc, priv->fd, G_IO_IN);
     src->buf = buf;
     src->buf_len = page_size;
-
-    src->event_data = g_object_new(event_data_class,
-                                  "type", priv->event_data_type, NULL);
 }
 
 /**
index 76329eddb26baae83b88cf0e9d31ce557652fb82..dfdce98326e84da0cbcd4431278347366c6b36fe 100644 (file)
@@ -9,7 +9,7 @@
 #include <timer/instance-info.h>
 #include <timer/instance-params.h>
 #include <timer/instance-status.h>
-#include <timer/event-data.h>
+#include <timer/event.h>
 
 G_BEGIN_DECLS
 
@@ -51,12 +51,12 @@ struct _ALSATimerUserInstanceClass {
     /**
      * ALSATimerUserInstanceClass::handle_event:
      * @self: A #ALSATimerUserInstance.
-     * @event_data: (transfer none): An object derived from #ALSATimerEventData.
+     * @event: (transfer none): An object derived from #ALSATimerEvent.
      *
      * When event occurs, this signal is emit.
      */
     void (*handle_event)(ALSATimerUserInstance *self,
-                         const ALSATimerEventData *event_data);
+                         const ALSATimerEvent *event);
 
     /**
      * ALSATimerUserInstanceClass::handle_disconnection: