1 // Copyright 2017 AW SOFTWARE CO.,LTD
2 // Copyright 2017 AISIN AW CO.,LTD
6 #include "BinderClient.h"
7 #include "JsonRequestGenerator.h"
8 #include "JsonResponseAnalyzer.h"
15 BinderClient::BinderClient() : navicoreListener(nullptr)
17 requestMng = new RequestManage();
23 BinderClient::~BinderClient()
29 * @brief Connect with the Binder server
31 bool BinderClient::ConnectServer(std::string url, naviapi::NavicoreListener* listener)
33 this->navicoreListener = listener;
35 if( !requestMng->Connect(url.c_str(), this))
37 TRACE_ERROR("cannot connect to binding service.\n");
45 * @brief Call Genivi's GetPosition via Binder and get the result
47 void BinderClient::NavicoreGetPosition(const std::vector< int32_t >& valuesToReturn)
49 // Check if it is connected
50 if( requestMng->IsConnect() )
52 // JSON request generation
53 std::string req_json = JsonRequestGenerator::CreateRequestGetPosition(valuesToReturn);
56 if( requestMng->CallBinderAPI(API_NAME, VERB_GETPOSITION, req_json.c_str()) )
58 TRACE_DEBUG("navicore_getposition success.\n");
62 TRACE_ERROR("navicore_getposition failed.\n");
68 * @brief Get route handle
70 void BinderClient::NavicoreGetAllRoutes()
72 // Check if it is connected
73 if( requestMng->IsConnect() )
75 // JSON request generation
76 std::string req_json = JsonRequestGenerator::CreateRequestGetAllRoutes();
79 if( requestMng->CallBinderAPI(API_NAME, VERB_GETALLROUTES, req_json.c_str()) )
81 TRACE_DEBUG("navicore_getallroutes success.\n");
85 TRACE_ERROR("navicore_getallroutes failed.\n");
91 * @brief Generate route handle
93 void BinderClient::NavicoreCreateRoute(const uint32_t& sessionHandle)
95 // Check if it is connected
96 if( requestMng->IsConnect() )
98 // JSON request generation
99 uint32_t session = requestMng->GetSessionHandle();
100 std::string req_json = JsonRequestGenerator::CreateRequestCreateRoute(&session);
103 if( requestMng->CallBinderAPI(API_NAME, VERB_CREATEROUTE, req_json.c_str()) )
105 TRACE_DEBUG("navicore_createroute success.\n");
109 TRACE_ERROR("navicore_createroute failed.\n");
117 void BinderClient::NavicorePauseSimulation(const uint32_t& sessionHandle)
119 // Check if it is connected
120 if( requestMng->IsConnect() )
122 // JSON request generation
123 uint32_t session = requestMng->GetSessionHandle();
124 std::string req_json = JsonRequestGenerator::CreateRequestPauseSimulation(&session);
127 if( requestMng->CallBinderAPI(API_NAME, VERB_PAUSESIMULATION, req_json.c_str()) )
129 TRACE_DEBUG("navicore_pausesimulationmode success.\n");
133 TRACE_ERROR("navicore_pausesimulationmode failed.\n");
139 * @brief Simulation mode setting
141 void BinderClient::NavicoreSetSimulationMode(const uint32_t& sessionHandle, const bool& activate)
143 // Check if it is connected
144 if( requestMng->IsConnect() )
146 // JSON request generation
147 uint32_t session = requestMng->GetSessionHandle();
148 std::string req_json = JsonRequestGenerator::CreateRequestSetSimulationMode(&session, &activate);
151 if( requestMng->CallBinderAPI(API_NAME, VERB_SETSIMULATIONMODE, req_json.c_str()) )
153 TRACE_DEBUG("navicore_setsimulationmode success.\n");
157 TRACE_ERROR("navicore_setsimulationmode failed.\n");
163 * @brief Delete route information
165 void BinderClient::NavicoreCancelRouteCalculation(const uint32_t& sessionHandle, const uint32_t& routeHandle)
167 // Check if it is connected
168 if( requestMng->IsConnect() )
170 // JSON request generation
171 uint32_t session = requestMng->GetSessionHandle();
172 std::string req_json = JsonRequestGenerator::CreateRequestCancelRouteCalculation(&session, &routeHandle);
175 if( requestMng->CallBinderAPI(API_NAME, VERB_CANCELROUTECALCULATION, req_json.c_str()) )
177 TRACE_DEBUG("navicore_cancelroutecalculation success.\n");
181 TRACE_ERROR("navicore_cancelroutecalculation failed.\n");
187 * @brief Destination setting
189 void BinderClient::NavicoreSetWaypoints(const uint32_t& sessionHandle, const uint32_t& routeHandle, const bool& startFromCurrentPosition, const std::vector<naviapi::Waypoint>& waypointsList)
191 // Check if it is connected
192 if( requestMng->IsConnect() )
194 // JSON request generation
195 uint32_t session = requestMng->GetSessionHandle();
196 uint32_t route = requestMng->GetRouteHandle();
197 std::string req_json = JsonRequestGenerator::CreateRequestSetWaypoints(&session, &route,
198 &startFromCurrentPosition, &waypointsList);
201 if( requestMng->CallBinderAPI(API_NAME, VERB_SETWAYPOINTS, req_json.c_str()) )
203 TRACE_DEBUG("navicore_setwaypoints success.\n");
207 TRACE_ERROR("navicore_setwaypoints failed.\n");
213 * @brief Route calculation processing
215 void BinderClient::NavicoreCalculateRoute(const uint32_t& sessionHandle, const uint32_t& routeHandle)
217 // Check if it is connected
218 if( requestMng->IsConnect() )
220 // JSON request generation
221 uint32_t session = requestMng->GetSessionHandle();
222 uint32_t route = requestMng->GetRouteHandle();
223 std::string req_json = JsonRequestGenerator::CreateRequestCalculateroute(&session, &route);
226 if( requestMng->CallBinderAPI(API_NAME, VERB_CALCULATEROUTE, req_json.c_str()) )
228 TRACE_DEBUG("navicore_calculateroute success.\n");
232 TRACE_ERROR("navicore_calculateroute failed.\n");
238 * @brief Retrieve session information
239 * @return Map of session information
241 void BinderClient::NavicoreGetAllSessions()
243 // Check if it is connected
244 if( requestMng->IsConnect() )
246 // JSON request generation
247 std::string req_json = JsonRequestGenerator::CreateRequestGetAllSessions();
250 if( requestMng->CallBinderAPI(API_NAME, VERB_GETALLSESSIONS, req_json.c_str()) )
252 TRACE_DEBUG("navicore_getallsessions success.\n");
256 TRACE_ERROR("navicore_getallsessions failed.\n");
261 void BinderClient::OnReply(struct json_object* reply)
263 struct json_object* requestObject = nullptr;
264 json_object_object_get_ex(reply, "request", &requestObject);
266 struct json_object* infoObject = nullptr;
267 json_object_object_get_ex(requestObject, "info", &infoObject);
269 const char* info = json_object_get_string(infoObject);
272 strcpy(tmpVerb, info);
274 // Create a new JSON response
275 const char* json_str = json_object_to_json_string_ext(reply, JSON_C_TO_STRING_PRETTY);
276 std::string response_json = std::string( json_str );
278 if (strcmp(VERB_GETALLSESSIONS, tmpVerb) == 0)
280 std::map<uint32_t, std::string> ret = JsonResponseAnalyzer::AnalyzeResponseGetAllSessions(response_json);
282 // keep session handle
283 requestMng->SetSessionHandle( ret.begin()->first );
285 this->navicoreListener->getAllSessions_reply(ret);
287 else if (strcmp(VERB_GETPOSITION, tmpVerb) == 0)
289 std::map< int32_t, naviapi::variant > ret = JsonResponseAnalyzer::AnalyzeResponseGetPosition(response_json);
291 this->navicoreListener->getPosition_reply(ret);
293 else if (strcmp(VERB_GETALLROUTES, tmpVerb) == 0)
295 std::vector< uint32_t > ret = JsonResponseAnalyzer::AnalyzeResponseGetAllRoutes(response_json);
300 requestMng->SetRouteHandle(ret[0]);
303 this->navicoreListener->getAllRoutes_reply(ret);
305 else if (strcmp(VERB_CREATEROUTE, tmpVerb) == 0)
307 uint32_t ret = JsonResponseAnalyzer::AnalyzeResponseCreateRoute(response_json);
310 requestMng->SetRouteHandle(ret);
312 this->navicoreListener->createRoute_reply(ret);