f25c14c48fd60a033e169e9cf79bf459cfacbf41
[profile/ivi/node-startup-controller.git] / luc-handler / luc-handler-application.c
1 /* vi:set et ai sw=2 sts=2 ts=2: */
2 /* -
3  * Copyright (c) 2012 GENIVI.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9
10 #ifdef HAVE_CONFIG_H
11 #include <config.h>
12 #endif
13
14 #include <glib-object.h>
15 #include <gio/gio.h>
16
17 #include <common/watchdog-client.h>
18
19 #include <luc-handler/luc-handler-dbus.h>
20 #include <luc-handler/luc-handler-application.h>
21 #include <luc-handler/luc-handler-service.h>
22
23
24
25 /* property identifiers */
26 enum
27 {
28   PROP_0,
29   PROP_LUC_HANDLER_SERVICE,
30 };
31
32
33
34 static void luc_handler_application_finalize     (GObject      *object);
35 static void luc_handler_application_get_property (GObject      *object,
36                                                   guint         prop_id,
37                                                   GValue       *value,
38                                                   GParamSpec   *pspec);
39 static void luc_handler_application_set_property (GObject      *object,
40                                                   guint         prop_id,
41                                                   const GValue *value,
42                                                   GParamSpec   *pspec);
43 static void luc_handler_application_startup      (GApplication *application);
44
45
46
47 struct _LUCHandlerApplicationClass
48 {
49   GApplicationClass __parent__;
50 };
51
52 struct _LUCHandlerApplication
53 {
54   GApplication       __parent__;
55
56   /* systemd watchdog client that repeatedly asks systemd to update
57    * the watchdog timestamp */
58   WatchdogClient    *watchdog_client;
59
60   /* service object that implements the LUC Handler D-Bus interface */
61   LUCHandlerService *service;
62 };
63
64
65
66 G_DEFINE_TYPE (LUCHandlerApplication, luc_handler_application, G_TYPE_APPLICATION);
67
68
69
70 static void
71 luc_handler_application_class_init (LUCHandlerApplicationClass *klass)
72 {
73   GApplicationClass *gapplication_class;
74   GObjectClass *gobject_class;
75
76   gobject_class = G_OBJECT_CLASS (klass);
77   gobject_class->finalize = luc_handler_application_finalize;
78   gobject_class->get_property = luc_handler_application_get_property;
79   gobject_class->set_property = luc_handler_application_set_property;
80
81   gapplication_class = G_APPLICATION_CLASS (klass);
82   gapplication_class->startup = luc_handler_application_startup;
83
84   g_object_class_install_property (gobject_class,
85                                    PROP_LUC_HANDLER_SERVICE,
86                                    g_param_spec_object ("luc-handler-service",
87                                                         "luc-handler-service",
88                                                         "luc-handler-service",
89                                                         LUC_HANDLER_TYPE_SERVICE,
90                                                         G_PARAM_READWRITE |
91                                                         G_PARAM_CONSTRUCT_ONLY));
92 }
93
94
95
96 static void
97 luc_handler_application_init (LUCHandlerApplication *application)
98 {
99 }
100
101
102
103 static void
104 luc_handler_application_finalize (GObject *object)
105 {
106   LUCHandlerApplication *application = LUC_HANDLER_APPLICATION (object);
107
108   /* release the watchdog client */
109   g_object_unref (application->watchdog_client);
110
111   /* release the LUC Handler service implementation */
112   if (application->service != NULL)
113     g_object_unref (application->service);
114
115   (*G_OBJECT_CLASS (luc_handler_application_parent_class)->finalize) (object);
116 }
117
118
119
120 static void
121 luc_handler_application_get_property (GObject    *object,
122                                       guint       prop_id,
123                                       GValue     *value,
124                                       GParamSpec *pspec)
125 {
126   LUCHandlerApplication *application = LUC_HANDLER_APPLICATION (object);
127
128   switch (prop_id)
129     {
130     case PROP_LUC_HANDLER_SERVICE:
131       g_value_set_object (value, application->service);
132       break;
133     default:
134       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
135       break;
136     }
137 }
138
139
140
141 static void
142 luc_handler_application_set_property (GObject      *object,
143                                       guint         prop_id,
144                                       const GValue *value,
145                                       GParamSpec   *pspec)
146 {
147   LUCHandlerApplication *application = LUC_HANDLER_APPLICATION (object);
148
149   switch (prop_id)
150     {
151     case PROP_LUC_HANDLER_SERVICE:
152       application->service = g_value_dup_object (value);
153       break;
154     default:
155       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
156       break;
157     }
158 }
159
160
161
162 static void
163 luc_handler_application_startup (GApplication *app)
164 {
165   LUCHandlerApplication *application = LUC_HANDLER_APPLICATION (app);
166
167   /* update systemd's watchdog timestamp every 120 seconds */
168   application->watchdog_client = watchdog_client_new (120);
169 }
170
171
172
173 LUCHandlerApplication *
174 luc_handler_application_new (LUCHandlerService *service)
175 {
176   return g_object_new (LUC_HANDLER_TYPE_APPLICATION,
177                        "application-id", "org.genivi.LUCHandler1",
178                        "flags", G_APPLICATION_IS_SERVICE,
179                        "luc-handler-service", service,
180                        NULL);
181 }