Add high level client APIs for Samsung CAN DB
[profile/ivi/automotive-message-broker.git] / lib / client / test / test.c
1 #include <stdio.h>
2
3 #include <libamb-client.h>
4 #include <libamb-objects.h>
5
6 static void test_get_object_list()
7 {
8         GList *objlist;
9         GList *item;
10         int ret;
11
12         fprintf(stdout, "\n== %s ==\n", __func__);
13
14         ret = amb_get_object_list(&objlist);
15         if (ret < 0) {
16                 printf("Fail to amb_get_object_list()\n");
17                 return ;
18         }
19
20         fprintf(stdout, "  - count: %u\n", g_list_length(objlist));
21         for (item = objlist; item != NULL; item = item->next) {
22                 gchar *obj = item->data;
23                 fprintf(stdout, "%s ", obj);
24         }
25         printf("\n");
26
27         amb_release_object_list(objlist);
28 }
29
30 static void test_get_property_all(const char *obj_name)
31 {
32         GList *retlist;
33         GList *item;
34         int ret;
35
36         fprintf(stdout, "\n== %s ==\n", __func__);
37         ret = amb_get_property_all(&retlist, obj_name);
38         if (ret < 0) {
39                 printf("Fail to get_property_all()\n");
40                 return ;
41         }
42
43         fprintf(stdout, "  - count: %u\n", g_list_length(retlist));
44         for (item = retlist; item != NULL; item = item->next) {
45                 GVariant *i = item->data;
46                 gchar *s = g_variant_print(i, TRUE);
47                 printf("%s\n", s);
48                 g_free(s);
49         }
50
51         amb_release_property_all(retlist);
52 }
53
54 static void test_get_property_all_with_zone(const char *obj_name, int zone)
55 {
56         GVariant *ret;
57         int r;
58         gchar *s;
59
60         fprintf(stdout, "\n== %s ==\n", __func__);
61         r = amb_get_property_all_with_zone(&ret, obj_name, zone);
62         if (r < 0) {
63                 fprintf(stderr, "Fail to get_property_all_with_zone(): %s, %d\n", obj_name, zone);
64                 return ;
65         }
66
67         s = g_variant_print(ret, TRUE);
68         printf("%s\n", s);
69
70         g_free(s);
71
72         amb_release_property_all_with_zone(ret);
73 }
74
75 static void test_set_property(const char *obj_name, const char *prop_name, int zone, GVariant *value)
76 {
77         GVariant *ret;
78         gchar *s;
79         int r;
80
81         fprintf(stdout, "== %s ==\n", __func__);
82
83         if (amb_set_property(obj_name, prop_name, zone, value) != 0) {
84                 fprintf(stderr, "Fail to set_property()\nn");
85                 return ;
86         }
87
88         r = amb_get_property_all_with_zone(&ret, obj_name, zone);
89         if (r < 0) {
90                 fprintf(stderr, "Fail to get_property_all_with_zone(): %s, %d\n", obj_name, zone);
91                 return ;
92         }
93
94         s = g_variant_print(ret, TRUE);
95         printf("%s\n", s);
96
97         g_free(s);
98         amb_release_property_all_with_zone(ret);
99 }
100
101 static void signal_handler(const gchar *objname, gpointer data)
102 {
103         gchar *s;
104         GVariant *gdata = (GVariant *)data;
105
106         if (!data)
107                 return ;
108
109         s = g_variant_print(gdata, TRUE);
110         g_print("== signal_handler: %s\n", objname);
111         g_print("%s\n", s);
112
113         g_free(s);
114 }
115
116 static gboolean timer_callback(gpointer d)
117 {
118         int rc;
119         gchar *objname = (gchar *)d;
120
121         fprintf(stderr, "Enter %s(): %s\n", __func__, objname);
122
123         rc = amb_unregister_property_changed_handler(objname, 0);
124         if (rc != 0) {
125                 fprintf(stderr, "Fail to amb_unregister_property_changed_handler(): %s\n", objname);
126         }
127
128         return FALSE;
129 }
130
131 void test_signal_listen(gchar *objname, ZoneType zone)
132 {
133         GMainLoop *loop;
134         int rc;
135
136         rc = amb_register_property_changed_handler(objname, zone, (AMB_PROPERTY_CHANGED_CALLBACK)signal_handler);
137         if (rc != 0) {
138                 fprintf(stderr, "Fail to amb_register_property_changed_handler(): %s\n", objname);
139                 return ;
140         }
141
142         g_timeout_add_seconds(10, timer_callback, objname);
143
144         loop = g_main_loop_new(NULL, FALSE);
145         g_main_loop_run(loop);
146
147         g_main_loop_unref(loop);
148 }
149
150 static void VehicleOdometer_handler(const gchar *objname, gpointer data)
151 {
152         struct VehicleOdometerType retdata;
153
154         if (!data)
155                 return ;
156
157         amb_convert_VehicleOdometerType(data, &retdata);
158
159         fprintf(stderr, " == VehicleOdometer ==\n");
160         fprintf(stderr, "    Zone: %d\n", retdata.Zone);
161         fprintf(stderr, "    Value: %d\n", retdata.Value);
162         fprintf(stderr, "    ValueSequence: %d\n", retdata.ValueSequence);
163         fprintf(stderr, "    Time: %f\n", retdata.Time);
164 }
165
166 static void test_VehicleOdometer_listen()
167 {
168         GMainLoop *loop;
169         int rc;
170
171         rc = amb_register_property_changed_handler("VehicleOdometer", 0,
172                         (AMB_PROPERTY_CHANGED_CALLBACK)VehicleOdometer_handler);
173         if (rc != 0) {
174                 fprintf(stderr, "Fail to amb_register_property_changed_handler(): %s\n", "VehicleOdometer");
175                 return ;
176         }
177
178         g_timeout_add_seconds(10, timer_callback, "VehicleOdometer");
179
180         loop = g_main_loop_new(NULL, FALSE);
181         g_main_loop_run(loop);
182
183         g_main_loop_unref(loop);
184 }
185
186 static void test_samsungcan_GearboxPosition()
187 {
188         struct GearboxPositionDisplayType *p;
189         int ret = amb_get_GearboxPositionDisplay_with_zone(&p, None);
190         if (ret != 0) {
191                 fprintf(stderr, "Fail to %s\n", __func__);
192                 return ;
193         }
194
195         fprintf(stderr, " == GearboxPosition ==\n");
196         fprintf(stderr, "    Time: %f\n", p->Time);
197         fprintf(stderr, "    Zone: %d\n", p->Zone);
198         fprintf(stderr, "    ValueSequence: %d\n", p->ValueSequence);
199         fprintf(stderr, "    Value: ");
200         switch(p->Value) {
201         case PARKING:
202                 fprintf(stderr, "PARKING\n");
203                 break;
204         case DRIVE:
205                 fprintf(stderr, "DRIVE\n");
206                 break;
207         case NEUTRAL:
208                 fprintf(stderr, "NEUTRAL\n");
209                 break;
210         case REVERSE:
211                 fprintf(stderr, "REVERSE\n");
212                 break;
213         default:
214                 fprintf(stderr, "%u (Error)\n", p->Value);
215                 break;
216         }
217
218         amb_release_data(p);
219         return ;
220 }
221
222 static void test_samsungcan_VehicleSpeed()
223 {
224         struct VehicleSpeedType *p;
225         int ret = amb_get_VehicleSpeed_with_zone(&p, None);
226         if (ret != 0) {
227                 fprintf(stderr, "Fail to %s\n", __func__);
228                 return ;
229         }
230         fprintf(stderr, " == VehicleSpeed ==\n");
231         fprintf(stderr, "    Zone: %d\n", p->Zone);
232         fprintf(stderr, "    Value: %d\n", p->Value);
233         fprintf(stderr, "    ValueSequence: %d\n", p->ValueSequence);
234         fprintf(stderr, "    Time: %f\n", p->Time);
235
236         amb_release_data(p);
237         return ;
238 }
239
240 static void test_samsungcan_VehicleOdometer()
241 {
242         struct VehicleOdometerType *p;
243         int ret = amb_get_VehicleOdometer_with_zone(&p, None);
244         if (ret != 0) {
245                 fprintf(stderr, "Fail to %s\n", __func__);
246                 return ;
247         }
248         fprintf(stderr, " == VehicleOdometer ==\n");
249         fprintf(stderr, "    Zone: %d\n", p->Zone);
250         fprintf(stderr, "    Value: %d\n", p->Value);
251         fprintf(stderr, "    ValueSequence: %d\n", p->ValueSequence);
252         fprintf(stderr, "    Time: %f\n", p->Time);
253
254         amb_release_data(p);
255         return ;
256 }
257
258 int main()
259 {
260         test_get_object_list();
261
262         test_samsungcan_VehicleOdometer();
263         test_samsungcan_VehicleSpeed();
264         test_samsungcan_GearboxPosition();
265
266         test_VehicleOdometer_listen();
267
268 #ifdef EXAMPLE_PLUGIN
269         test_get_property_all("ClimateControl");
270         test_get_property_all("VehicleSpeed");
271
272         test_get_property_all_with_zone("ClimateControl", 5);
273
274         test_set_property("ClimateControl", "AirConditioning", 5, g_variant_new("b", TRUE));
275
276         test_signal_listen("VehicleSpeed", 0);
277
278         test_samsungcan_GearboxPosition();
279 #endif
280
281         return 0;
282 }