1 // Copyright 2017 AW SOFTWARE CO.,LTD
2 // Copyright 2017 AISIN AW CO.,LTD
6 #include "binder_reply.h"
7 #include "genivi_request.h"
8 #include "analyze_request.h"
9 #include "genivi/genivi-navicore-constants.h"
11 #define AFB_BINDING_VERSION 2
14 #include <afb/afb-binding.h>
18 * Variable declaration
20 GeniviRequest* geniviRequest; // Send request to Genivi
21 BinderReply* binderReply; // Convert Genivi response result to json format
22 AnalyzeRequest* analyzeRequest; // Analyze BinderClient's request and create arguments to pass to GeniviAPI
25 * @brief navicore_getposition request callback
26 * @param[in] req Request from client
28 void OnRequestNavicoreGetPosition(afb_req req)
30 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
31 AFB_REQ_DEBUG(req, "request navicore_getposition");
33 // Request of Json format request
34 json_object* req_json = afb_req_json(req);
35 const char* req_json_str = json_object_to_json_string(req_json);
36 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
38 // Request analysis and create arguments to pass to Genivi
39 std::vector< int32_t > Params;
40 if( !analyzeRequest->CreateParamsGetPosition( req_json_str, Params ))
42 afb_req_fail(req, "failed", "navicore_getposition Bad Request");
47 std::map< int32_t, double > posList = geniviRequest->NavicoreGetPosition( Params );
49 // Convert to json style response
50 APIResponse response = binderReply->ReplyNavicoreGetPosition( posList );
53 if(response.isSuccess)
55 AFB_REQ_NOTICE(req, "res_json_str = %s", json_object_to_json_string(response.json_data));
56 // Return success to BinderClient
57 afb_req_success(req, response.json_data, "navicore_getposition");
61 AFB_REQ_ERROR(req, "%s - %s:%d", response.errMessage.c_str(), __FILE__, __LINE__);
62 afb_req_fail(req, "failed", "navicore_getposition Bad Request");
65 // Json object release
66 json_object_put(response.json_data);
68 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
73 * @brief navicore_getallroutes request callback
74 * @param[in] req Request from client
76 void OnRequestNavicoreGetAllRoutes(afb_req req)
78 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
79 AFB_REQ_DEBUG(req, "request navicore_getallroutes");
81 // No request information in json format
82 AFB_REQ_NOTICE(req, "req_json_str = none");
85 std::vector< uint32_t > allRoutes = geniviRequest->NavicoreGetAllRoutes();
87 // Convert to json style response
88 APIResponse response = binderReply->ReplyNavicoreGetAllRoutes( allRoutes );
91 if(response.isSuccess)
93 AFB_REQ_NOTICE(req, "res_json_str = %s", json_object_to_json_string(response.json_data));
94 // Return success to BinderClient
95 afb_req_success(req, response.json_data, "navicore_getallroutes");
99 AFB_REQ_ERROR(req, "%s - %s:%d", response.errMessage.c_str(), __FILE__, __LINE__);
100 afb_req_fail(req, "failed", "navicore_getallroutes Bad Request");
103 // json object release
104 json_object_put(response.json_data);
106 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
111 * @brief navicore_createroute request callback
112 * @param[in] req Request from client
114 void OnRequestNavicoreCreateRoute(afb_req req)
116 AFB_REQ_NOTICE(req, "--> Start %s ", __func__);
117 AFB_REQ_DEBUG(req, "request navicore_createroute");
119 // Request of json format request
120 json_object* req_json = afb_req_json(req);
121 const char* req_json_str = json_object_to_json_string(req_json);
122 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
124 // Request analysis and create arguments to pass to Genivi
125 uint32_t sessionHdl = 0;
126 if( !analyzeRequest->CreateParamsCreateRoute( req_json_str, sessionHdl ))
128 afb_req_fail(req, "failed", "navicore_createroute Bad Request");
133 uint32_t routeHdl = geniviRequest->NavicoreCreateRoute( sessionHdl );
135 // Convert to json style response
136 APIResponse response = binderReply->ReplyNavicoreCreateRoute( routeHdl );
139 if(response.isSuccess)
141 AFB_REQ_NOTICE(req, "res_json_str = %s", json_object_to_json_string(response.json_data));
142 // Return success to BinderClient
143 afb_req_success(req, response.json_data, "navicore_createroute");
147 AFB_REQ_ERROR(req, "%s - %s:%d", response.errMessage.c_str(), __FILE__, __LINE__);
148 afb_req_fail(req, "failed", "navicore_createroute Bad Request");
151 // json object release
152 json_object_put(response.json_data);
154 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
159 * @brief navicore_pausesimulation request callback
160 * @param[in] req Request from client
162 void OnRequestNavicorePauseSimulation(afb_req req)
164 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
165 AFB_REQ_DEBUG(req, "request navicore_pausesimulation");
167 // Request of json format request
168 json_object* req_json = afb_req_json(req);
169 const char* req_json_str = json_object_to_json_string(req_json);
170 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
172 // Request analysis and create arguments to pass to Genivi
173 uint32_t sessionHdl = 0;
174 if( !analyzeRequest->CreateParamsPauseSimulation( req_json_str, sessionHdl ))
176 afb_req_fail(req, "failed", "navicore_pausesimulation Bad Request");
181 geniviRequest->NavicorePauseSimulation( sessionHdl );
183 // No reply unnecessary API for conversion to json format response is unnecessary
184 AFB_REQ_NOTICE(req, "res_json_str = none");
186 // Return success to BinderClient
187 afb_req_success(req, NULL, "navicore_pausesimulation");
189 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
194 * @brief navicore_setsimulationmode request callback
195 * @param[in] req Request from client
197 void OnRequestNavicoreSetSimulationMode(afb_req req)
199 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
200 AFB_REQ_DEBUG(req, "request navicore_setsimulationmode");
202 // Request of json format request
203 json_object* req_json = afb_req_json(req);
204 const char* req_json_str = json_object_to_json_string(req_json);
205 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
207 // Request analysis and create arguments to pass to Genivi
208 uint32_t sessionHdl = 0;
209 bool simuMode = false;
210 if( !analyzeRequest->CreateParamsSetSimulationMode( req_json_str, sessionHdl, simuMode ))
212 afb_req_fail(req, "failed", "navicore_setsimulationmode Bad Request");
217 geniviRequest->NavicoreSetSimulationMode( sessionHdl, simuMode );
219 // No reply unnecessary API for conversion to json format response is unnecessary
220 AFB_REQ_NOTICE(req, "res_json_str = none");
222 // Return success to BinderClient
223 afb_req_success(req, NULL, "navicore_setsimulationmode");
225 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
230 * @brief navicore_cancelroutecalculation request callback
231 * @param[in] req Request from client
233 void OnRequestNavicoreCancelRouteCalculation(afb_req req)
235 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
236 AFB_REQ_DEBUG(req, "request navicore_cancelroutecalculation");
238 // Request of Json format request
239 json_object* req_json = afb_req_json(req);
240 const char* req_json_str = json_object_to_json_string(req_json);
241 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
243 // Request analysis and create arguments to pass to Genivi
244 uint32_t sessionHdl = 0;
245 uint32_t routeHdl = 0;
246 if( !analyzeRequest->CreateParamsCancelRouteCalculation( req_json_str, sessionHdl, routeHdl ))
248 afb_req_fail(req, "failed", "navicore_cancelroutecalculation Bad Request");
253 geniviRequest->NavicoreCancelRouteCalculation( sessionHdl, routeHdl );
255 // No reply unnecessary API for conversion to json format response is unnecessary
256 AFB_REQ_NOTICE(req, "res_json_str = none");
258 // Return success to BinderClient
259 afb_req_success(req, NULL, "navicore_cancelroutecalculation");
261 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
266 * @brief navicore_setwaypoints request callback
267 * @param[in] req Request from client
269 void OnRequestNavicoreWaypoints(afb_req req)
271 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
272 AFB_REQ_DEBUG(req, "request navicore_setwaypoints");
274 // Request of Json format request
275 json_object* req_json = afb_req_json(req);
276 const char* req_json_str = json_object_to_json_string(req_json);
277 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
279 // Request analysis and create arguments to pass to Genivi
280 uint32_t sessionHdl = 0;
281 uint32_t routeHdl = 0;
282 bool currentPos = false;
283 std::vector<Waypoint> waypointsList;
284 if( !analyzeRequest->CreateParamsSetWaypoints( req_json_str, sessionHdl, routeHdl, currentPos, waypointsList ))
286 afb_req_fail(req, "failed", "navicore_setwaypoints Bad Request");
291 geniviRequest->NavicoreSetWaypoints( sessionHdl, routeHdl, currentPos, waypointsList );
293 // No reply unnecessary API for conversion to json format response is unnecessary
294 AFB_REQ_NOTICE(req, "res_json_str = none");
296 // Return success to BinderClient
297 afb_req_success(req, NULL, "navicore_setwaypoints");
299 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
304 * @brief navicore_calculateroute request callback
305 * @param[in] req Request from client
307 void OnRequestNavicoreCalculateRoute(afb_req req)
309 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
310 AFB_REQ_DEBUG(req, "request navicore_calculateroute");
312 // Request of Json format request
313 json_object* req_json = afb_req_json(req);
314 const char* req_json_str = json_object_to_json_string(req_json);
315 AFB_REQ_NOTICE(req, "req_json_str = %s", req_json_str);
317 // Request analysis and create arguments to pass to Genivi
318 uint32_t sessionHdl = 0;
319 uint32_t routeHdl = 0;
320 if( !analyzeRequest->CreateParamsCalculateRoute( req_json_str, sessionHdl, routeHdl ))
322 afb_req_fail(req, "failed", "navicore_calculateroute Bad Request");
327 geniviRequest->NavicoreCalculateRoute( sessionHdl, routeHdl );
329 // No reply unnecessary API for conversion to json format response is unnecessary
330 AFB_REQ_NOTICE(req, "res_json_str = none");
332 // Return success to BinderClient
333 afb_req_success(req, NULL, "navicore_calculateroute");
335 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
340 * @brief navicore_getallsessions request callback
341 * @param[in] req Request from client
343 void OnRequestNavicoreGetAllSessions(afb_req req)
345 AFB_REQ_NOTICE(req, "--> Start %s()", __func__);
346 AFB_REQ_DEBUG(req, "request navicore_getallsessions");
348 // No request information in Json format
349 AFB_REQ_NOTICE(req, "req_json_str = none");
352 std::map<uint32_t, std::string> allSessions = geniviRequest->NavicoreGetAllSessions();
354 // Convert to json style response
355 APIResponse response = binderReply->ReplyNavicoreGetAllSessions( allSessions );
358 if(response.isSuccess)
360 AFB_REQ_NOTICE(req, "res_json_str = %s", json_object_to_json_string(response.json_data));
361 // Return success to BinderClient
362 afb_req_success(req, response.json_data, "navicore_getallsessions");
366 AFB_REQ_ERROR(req, "%s - %s:%d", response.errMessage.c_str(), __FILE__, __LINE__);
367 afb_req_fail(req, "failed", "navicore_getallsessions Bad Request");
370 // json object release
371 json_object_put(response.json_data);
373 AFB_REQ_NOTICE(req, "<-- End %s()", __func__);
378 * @brief Callback called at service startup
383 geniviRequest = new GeniviRequest();
384 binderReply = new BinderReply();
385 analyzeRequest = new AnalyzeRequest();
391 * @brief API definition
393 const afb_verb_v2 verbs[] =
395 { verb : "navicore_getposition", callback : OnRequestNavicoreGetPosition },
396 { verb : "navicore_getallroutes", callback : OnRequestNavicoreGetAllRoutes },
397 { verb : "navicore_createroute", callback : OnRequestNavicoreCreateRoute },
398 { verb : "navicore_pausesimulation", callback : OnRequestNavicorePauseSimulation },
399 { verb : "navicore_setsimulationmode", callback : OnRequestNavicoreSetSimulationMode },
400 { verb : "navicore_cancelroutecalculation", callback : OnRequestNavicoreCancelRouteCalculation },
401 { verb : "navicore_setwaypoints", callback : OnRequestNavicoreWaypoints },
402 { verb : "navicore_calculateroute", callback : OnRequestNavicoreCalculateRoute },
403 { verb : "navicore_getallsessions", callback : OnRequestNavicoreGetAllSessions },
408 * @brief Service definition
410 const afb_binding_v2 afbBindingV2 =