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(10) << "Failed to load config[" << error->message << "]."
85 JsonNode *node = json_parser_get_root(parser);
86 if (node == nullptr) {
87 cerr << "Unable to get JSON root object." << endl;
88 DebugOut(10) << "Unable to get JSON root object." << endl;
92 JsonReader *reader = json_reader_new(node);
93 if (reader == nullptr) {
94 cerr << "Unable to create JSON reader." << endl;
95 DebugOut(10) << "Unable to create JSON reader." << endl;
99 json_reader_read_member(reader, "Config");
100 const GError *configReadError = json_reader_get_error(reader);
101 if (configReadError != nullptr) {
102 cerr << "Error getting sources member[" << configReadError->message
104 DebugOut(10) << "Error getting sources member["
105 << configReadError->message << "]." << endl;
108 g_assert(json_reader_is_array(reader));
110 int sectionNum = json_reader_count_elements(reader);
112 for (int i = 0; i < sectionNum; i++) {
113 json_reader_read_element(reader, i);
114 json_reader_read_member(reader, "Section");
115 section = std::string(json_reader_get_string_value(reader));
116 json_reader_end_member(reader);
118 if (section == "Common") {
119 json_reader_read_member(reader, "VehicleInfoDefine");
120 int elementNum = json_reader_count_elements(reader);
122 bool fcontinue = true;
124 for (int i = 0; i < elementNum; i++) {
126 VehicleInfoDefine vid;
127 json_reader_read_element(reader, i);
128 json_reader_read_member(reader, "KeyEventType");
129 strcpy(vid.KeyEventType, json_reader_get_string_value(reader));
130 json_reader_end_member(reader);
132 for (auto itr = vehicleinfoList.begin();
133 itr != vehicleinfoList.end(); itr++) {
134 if (strcmp(vid.KeyEventType, (*itr).KeyEventType) == 0) {
135 json_reader_end_element(reader);
144 json_reader_read_member(reader, "Priority");
145 vid.priority = json_reader_get_int_value(reader);
146 json_reader_end_member(reader);
148 json_reader_read_member(reader, "DBusInterface");
149 vid.dbusInterface = json_reader_get_string_value(reader);
150 json_reader_end_member(reader);
152 json_reader_read_member(reader, "DBusObject");
153 vid.dbusObject = json_reader_get_string_value(reader);
154 json_reader_end_member(reader);
156 json_reader_read_member(reader, "Status");
157 statusNum = json_reader_count_elements(reader);
159 for (int j = 0; j < statusNum; j++) {
160 VehicleInfoDefine::Status status;
161 json_reader_read_element(reader, j);
162 json_reader_read_member(reader, "AMBPropertyName");
163 status.ambPropertyName = json_reader_get_string_value(
165 json_reader_end_member(reader);
167 json_reader_read_member(reader, "Type");
168 status.type = getType(
169 const_cast<char*>(json_reader_get_string_value(
172 json_reader_end_member(reader);
174 json_reader_read_member(reader, "Default");
175 status.defaultvalue = std::string(
176 json_reader_get_string_value(reader));
177 json_reader_end_member(reader);
179 json_reader_read_member(reader, "AccessControl");
180 status.accessControl = std::string(
181 json_reader_get_string_value(reader));
182 json_reader_end_member(reader);
184 json_reader_read_member(reader, "DBusProperty");
185 status.dbusPropertyName = std::string(
186 json_reader_get_string_value(reader));
187 json_reader_end_member(reader);
189 json_reader_end_member(reader);
190 json_reader_end_element(reader);
192 json_reader_read_member(reader, "Status");
193 vid.status.push_back(status);
195 vehicleinfoList.push_back(vid);
197 json_reader_end_member(reader);
198 json_reader_end_element(reader);
201 json_reader_end_member(reader);
203 json_reader_read_member(reader, "DefaultInfoPort");
204 json_reader_read_member(reader, "DataPort");
205 portinfo.standard.dataPort = json_reader_get_int_value(reader);
206 json_reader_end_member(reader);
207 json_reader_read_member(reader, "CtrlPort");
208 portinfo.standard.controlPort = json_reader_get_int_value(reader);
209 json_reader_end_member(reader);
210 json_reader_end_member(reader);
211 json_reader_read_member(reader, "CustomizeInfoPort");
212 json_reader_read_member(reader, "DataPort");
213 portinfo.custom.dataPort = json_reader_get_int_value(reader);
214 json_reader_end_member(reader);
215 json_reader_read_member(reader, "CtrlPort");
216 portinfo.custom.controlPort = json_reader_get_int_value(reader);
217 json_reader_end_member(reader);
218 json_reader_end_member(reader);
221 json_reader_end_element(reader);
224 json_reader_end_member(reader);
225 g_object_unref(reader);
226 g_object_unref(parser);
230 VehicleInfoDefine::Status::DataType
231 Config::getType(char *type, int *size)
233 if (strcmp(type, "int") == 0) {
235 return VehicleInfoDefine::Status::INT;
237 else if (strcmp(type, "double") == 0) {
238 *size = sizeof(double);
239 return VehicleInfoDefine::Status::DOUBLE;
241 else if (strcmp(type, "char") == 0) {
242 *size = sizeof(char);
243 return VehicleInfoDefine::Status::CHAR;
245 else if (strcmp(type, "int16_t") == 0 || strcmp(type, "int16") == 0) {
246 *size = sizeof(int16_t);
247 return VehicleInfoDefine::Status::INT16;
249 else if (strcmp(type, "uint16_t") == 0 || strcmp(type, "uint16") == 0) {
250 *size = sizeof(uint16_t);
251 return VehicleInfoDefine::Status::UINT16;
253 else if (strcmp(type, "uint32_t") == 0 || strcmp(type, "uint32") == 0) {
254 *size = sizeof(uint32_t);
255 return VehicleInfoDefine::Status::UINT32;
257 else if (strcmp(type, "int64_t") == 0 || strcmp(type, "int64") == 0) {
258 *size = sizeof(int64_t);
259 return VehicleInfoDefine::Status::INT64;
261 else if (strcmp(type, "uint64_t") == 0 || strcmp(type, "uint64") == 0) {
262 *size = sizeof(uint64_t);
263 return VehicleInfoDefine::Status::UINT64;
265 else if (strcmp(type, "bool") == 0 || strcmp(type, "boolean") == 0) {
266 *size = sizeof(bool);
267 return VehicleInfoDefine::Status::BOOL;
269 return VehicleInfoDefine::Status::NONE;