2 * Copyright (C) 2012 TOYOTA MOTOR CORPORATION.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 #include <json-glib/json-glib.h>
41 vehicleinfoList.clear();
45 Config::readConfig(std::string confpath)
47 std::ifstream in(confpath, std::ios::in);
54 return parseJson(output);
57 vector<VehicleInfoDefine>
58 Config::getVehicleInfoConfig()
60 return vehicleinfoList;
70 Config::parseJson(string config)
73 /* json_reader_read_member's error check. */
75 JsonParser *parser = json_parser_new();
76 GError *error = nullptr;
77 if (!json_parser_load_from_data(parser, config.c_str(), config.length(),
79 cerr << "Failed to load config[" << error->message << "]." << endl;
80 DebugOut() << "Failed to load config[" << error->message << "]." << endl;
84 JsonNode *node = json_parser_get_root(parser);
85 if (node == nullptr) {
86 cerr << "Unable to get JSON root object." << endl;
87 DebugOut() << "Unable to get JSON root object." << endl;
91 JsonReader *reader = json_reader_new(node);
92 if (reader == nullptr) {
93 cerr << "Unable to create JSON reader." << endl;
94 DebugOut() << "Unable to create JSON reader." << endl;
98 json_reader_read_member(reader, "Config");
99 const GError *configReadError = json_reader_get_error(reader);
100 if (configReadError != nullptr) {
101 cerr << "Error getting sources member["
102 << configReadError->message << "]." << endl;
103 DebugOut() << "Error getting sources member["
104 << configReadError->message << "]." << endl;
107 g_assert(json_reader_is_array(reader));
109 int sectionNum = json_reader_count_elements(reader);
111 for (int i = 0; i < sectionNum; i++) {
112 json_reader_read_element(reader, i);
113 json_reader_read_member(reader, "Section");
114 section = std::string(json_reader_get_string_value(reader));
115 json_reader_end_member(reader);
117 if (section == "Common") {
118 json_reader_read_member(reader, "VehicleInfoDefine");
119 int elementNum = json_reader_count_elements(reader);
121 bool fcontinue = true;
123 for (int i = 0; i < elementNum; i++) {
125 VehicleInfoDefine vid;
126 json_reader_read_element(reader, i);
127 json_reader_read_member(reader, "KeyEventType");
128 strcpy(vid.KeyEventType, json_reader_get_string_value(reader));
129 json_reader_end_member(reader);
131 for (auto itr = vehicleinfoList.begin();
132 itr != vehicleinfoList.end(); itr++) {
133 if (strcmp(vid.KeyEventType, (*itr).KeyEventType) == 0) {
134 json_reader_end_element(reader);
143 json_reader_read_member(reader, "Priority");
144 vid.priority = json_reader_get_int_value(reader);
145 json_reader_end_member(reader);
147 json_reader_read_member(reader, "DBusInterface");
148 vid.dbusInterface = json_reader_get_string_value(reader);
149 json_reader_end_member(reader);
151 json_reader_read_member(reader, "DBusObject");
152 vid.dbusObject = json_reader_get_string_value(reader);
153 json_reader_end_member(reader);
155 json_reader_read_member(reader, "Status");
156 statusNum = json_reader_count_elements(reader);
158 for (int j = 0; j < statusNum; j++) {
159 VehicleInfoDefine::Status status;
160 json_reader_read_element(reader, j);
161 json_reader_read_member(reader, "AMBPropertyName");
162 status.ambPropertyName = json_reader_get_string_value(
164 json_reader_end_member(reader);
166 json_reader_read_member(reader, "Type");
167 status.type = getType(
168 const_cast<char*>(json_reader_get_string_value(
171 json_reader_end_member(reader);
173 json_reader_read_member(reader, "Default");
174 status.defaultvalue = std::string(
175 json_reader_get_string_value(reader));
176 json_reader_end_member(reader);
178 json_reader_read_member(reader, "AccessControl");
179 status.accessControl = std::string(
180 json_reader_get_string_value(reader));
181 json_reader_end_member(reader);
183 json_reader_read_member(reader, "DBusProperty");
184 status.dbusPropertyName = std::string(
185 json_reader_get_string_value(reader));
186 json_reader_end_member(reader);
188 json_reader_end_member(reader);
189 json_reader_end_element(reader);
191 json_reader_read_member(reader, "Status");
192 vid.status.push_back(status);
194 vehicleinfoList.push_back(vid);
196 json_reader_end_member(reader);
197 json_reader_end_element(reader);
200 json_reader_end_member(reader);
202 json_reader_read_member(reader, "DefaultInfoPort");
203 json_reader_read_member(reader, "DataPort");
204 portinfo.standard.dataPort = json_reader_get_int_value(reader);
205 json_reader_end_member(reader);
206 json_reader_read_member(reader, "CtrlPort");
207 portinfo.standard.controlPort = json_reader_get_int_value(reader);
208 json_reader_end_member(reader);
209 json_reader_end_member(reader);
210 json_reader_read_member(reader, "CustomizeInfoPort");
211 json_reader_read_member(reader, "DataPort");
212 portinfo.custom.dataPort = json_reader_get_int_value(reader);
213 json_reader_end_member(reader);
214 json_reader_read_member(reader, "CtrlPort");
215 portinfo.custom.controlPort = json_reader_get_int_value(reader);
216 json_reader_end_member(reader);
217 json_reader_end_member(reader);
220 json_reader_end_element(reader);
223 json_reader_end_member(reader);
224 g_object_unref(reader);
225 g_object_unref(parser);
229 VehicleInfoDefine::Status::DataType
230 Config::getType(char *type, int *size)
232 if (strcmp(type, "int") == 0) {
234 return VehicleInfoDefine::Status::INT;
236 else if (strcmp(type, "double") == 0) {
237 *size = sizeof(double);
238 return VehicleInfoDefine::Status::DOUBLE;
240 else if (strcmp(type, "char") == 0) {
241 *size = sizeof(char);
242 return VehicleInfoDefine::Status::CHAR;
244 else if (strcmp(type, "int16_t") == 0 || strcmp(type, "int16") == 0) {
245 *size = sizeof(int16_t);
246 return VehicleInfoDefine::Status::INT16;
248 else if (strcmp(type, "uint16_t") == 0 || strcmp(type, "uint16") == 0) {
249 *size = sizeof(uint16_t);
250 return VehicleInfoDefine::Status::UINT16;
252 else if (strcmp(type, "uint32_t") == 0 || strcmp(type, "uint32") == 0) {
253 *size = sizeof(uint32_t);
254 return VehicleInfoDefine::Status::UINT32;
256 else if (strcmp(type, "int64_t") == 0 || strcmp(type, "int64") == 0) {
257 *size = sizeof(int64_t);
258 return VehicleInfoDefine::Status::INT64;
260 else if (strcmp(type, "uint64_t") == 0 || strcmp(type, "uint64") == 0) {
261 *size = sizeof(uint64_t);
262 return VehicleInfoDefine::Status::UINT64;
264 else if (strcmp(type, "bool") == 0 || strcmp(type, "boolean") == 0) {
265 *size = sizeof(bool);
266 return VehicleInfoDefine::Status::BOOL;
268 return VehicleInfoDefine::Status::NONE;