automotive-message-broker
0.14.803
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Groups
Pages
lib
client
libamb-util.h
1
/*
2
* Automotive Message Broker Client Library
3
*
4
* Copyright (C) 2016 Samsung Electronics Co., Ltd.
5
*
6
* Licensed under the Apache License, Version 2.0 (the License)
7
* you may not use this file except in compliance with the License.
8
* You may obtain a copy of the License at
9
*
10
* http://www.apache.org/licenses/LICENSE-2.0
11
*
12
* Unless required by applicable law or agreed to in writing, software
13
* distributed under the License is distributed on an "AS IS" BASIS,
14
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
* See the License for the specific language governing permissions and
16
* limitations under the License.
17
*/
18
19
#ifndef __LIBAMB_UTIL_H__
20
#define __LIBAMB_UTIL_H__
21
22
#ifdef __cplusplus
23
extern
"C"
{
24
#endif
25
26
#include <glib.h>
27
#include <gio/gio.h>
28
#include <stdio.h>
29
#include <errno.h>
30
31
#include "libamb-common.h"
32
#include "libamb-client.h"
33
34
#define g_variant_get_gboolean g_variant_get_boolean
35
#define g_variant_get_guchar g_variant_get_byte
36
#define g_variant_get_gint16 g_variant_get_int16
37
#define g_variant_get_guint16 g_variant_get_uint16
38
#define g_variant_get_gint32 g_variant_get_int32
39
#define g_variant_get_guint32 g_variant_get_uint32
40
#define g_variant_get_gint64 g_variant_get_int64
41
#define g_variant_get_guint64 g_variant_get_uint64
42
#define g_variant_get_gdouble g_variant_get_double
43
44
#define g_variant_new_gboolean g_variant_new_boolean
45
#define g_variant_new_guchar g_variant_new_byte
46
#define g_variant_new_gint16 g_variant_new_int16
47
#define g_variant_new_guint16 g_variant_new_uint16
48
#define g_variant_new_gint32 g_variant_new_int32
49
#define g_variant_new_guint32 g_variant_new_uint32
50
#define g_variant_new_gint64 g_variant_new_int64
51
#define g_variant_new_guint64 g_variant_new_uint64
52
#define g_variant_new_gdouble g_variant_new_double
53
64
#define CAN_OBJECT(obj_name, value_type, alias_name) \
65
struct obj_name ## Type { \
66
gint32 Zone; \
67
gint32 ValueSequence; \
68
gdouble Time; \
69
value_type Value; \
70
}; \
71
int amb_get_ ## obj_name ## _with_zone(struct obj_name ## Type **retobj, int zone) \
72
{ \
73
GVariant *variant; \
74
GVariantIter *iter; \
75
gchar *key; \
76
GVariant *value; \
77
GVariant *tmp; \
78
int ret; \
79
struct obj_name ## Type *retdata = NULL; \
80
\
81
retdata = g_malloc0(sizeof(*retdata)); \
82
if (!retdata) { \
83
return -ENOMEM; \
84
} \
85
ret = amb_get_property_all_with_zone(&variant, #obj_name, zone); \
86
if (ret < 0) { \
87
return ret; \
88
} \
89
\
90
g_variant_get(variant, "(a{sv})", &iter); \
91
while(g_variant_iter_loop(iter, "{sv}", &key, &value)) { \
92
if (!g_strcmp0(key, "Zone")) { \
93
g_variant_get(value, "v", &tmp); \
94
retdata->Zone = g_variant_get_int32(tmp); \
95
g_variant_unref(tmp); \
96
} else if (!g_strcmp0(key, "ValueSequence") || !g_strcmp0(key, #alias_name "Sequence")) { \
97
g_variant_get(value, "v", &tmp); \
98
retdata->ValueSequence = g_variant_get_int32(tmp); \
99
g_variant_unref(tmp); \
100
} else if (!g_strcmp0(key, "Time")) { \
101
g_variant_get(value, "v", &tmp); \
102
retdata->Time = g_variant_get_double(tmp); \
103
g_variant_unref(tmp); \
104
} else if (!g_strcmp0(key, "Value") || !g_strcmp0(key, #alias_name)) { \
105
g_variant_get(value, "v", &tmp); \
106
retdata->Value = g_variant_get_ ## value_type(tmp); \
107
g_variant_unref(tmp); \
108
} \
109
} \
110
\
111
g_variant_iter_free(iter); \
112
amb_release_property_all_with_zone(variant); \
113
*retobj = retdata; \
114
return 0; \
115
} \
116
\
117
int amb_convert_ ## obj_name ## Type (gpointer data, struct obj_name ## Type *retdata) \
118
{ \
119
GVariantIter *iter; \
120
gchar *key; \
121
GVariant *value; \
122
GVariant *gdata; \
123
\
124
gdata = (GVariant *)data; \
125
g_variant_get(gdata, "a{sv}", &iter); \
126
while(g_variant_iter_loop(iter, "{sv}", &key, &value)) { \
127
if (!g_strcmp0(key, "Zone")) { \
128
g_variant_get(value, "i", &retdata->Zone); \
129
} else if (!g_strcmp0(key, "ValueSequence") || !g_strcmp0(key, #alias_name "Sequence")) { \
130
g_variant_get(value, "i", &retdata->ValueSequence); \
131
} else if (!g_strcmp0(key, "Time")) { \
132
g_variant_get(value, "d", &retdata->Time); \
133
} else if (!g_strcmp0(key, "Value") || !g_strcmp0(key, #alias_name)) { \
134
retdata->Value = g_variant_get_ ## value_type(value); \
135
} \
136
} \
137
g_variant_iter_free(iter); \
138
return 0; \
139
}
140
151
#define CAN_OBJECT_WRITABLE(obj_name, value_type, alias_name) \
152
int amb_set_ ## obj_name ## _with_zone(value_type value, int zone) \
153
{ \
154
GVariant *variant; \
155
int ret; \
156
variant = g_variant_new_ ## value_type(value); \
157
ret = amb_set_property(#obj_name, \
158
g_strcmp0(#alias_name, "NULL") ? #alias_name : "Value", \
159
zone, variant);\
160
if (ret < 0) { \
161
fprintf(stderr, "Fail to amb_set_property: %d\n", ret); \
162
return ret; \
163
} \
164
\
165
return 0; \
166
}
167
168
#ifdef __cplusplus
169
}
170
#endif
171
172
#endif
/* __LIBAMB_UTIL_H__ */
Generated by
1.8.2