summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorasanoaozora <fifitaneki@hotmail.com>2017-08-31 17:25:00 +0200
committerasanoaozora <fifitaneki@hotmail.com>2017-08-31 17:25:00 +0200
commite31de24c6f882a41ed13086712e97539cbf7b1a2 (patch)
tree546e13a8158ece70f956834a50ec4fb76a32e13d
parent58be072f387b9430944d7fd8d75900295ab53971 (diff)
downloadpoi-service-e31de24c6f882a41ed13086712e97539cbf7b1a2.tar.gz
fix bug on successive guidance launches with create/delete route
The bug has been fixed by a navit patch :-( it still needs to be investigated with navit team
-rw-r--r--src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx10
-rw-r--r--src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx131
-rw-r--r--src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx4
-rw-r--r--src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx4
-rw-r--r--src/navigation/patches/avoid-crash-on-guidance-when-delete-and-recreate-route.diff13
-rw-r--r--src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx26
-rwxr-xr-xsrc/navigation/update_navit.sh1
-rwxr-xr-xsrc/navigation/update_third_party.sh2
-rw-r--r--test/navigation/resource/location-poi.xml10
-rw-r--r--test/navigation/script/lbs-api-test.e4p3
-rwxr-xr-xtest/navigation/script/test-all12
-rwxr-xr-xtest/navigation/script/test-guidance.py2
-rwxr-xr-xtest/navigation/script/test-poi-guidance.py450
-rwxr-xr-xtest/navigation/script/test-poi.py2
14 files changed, 576 insertions, 94 deletions
diff --git a/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx b/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx
index a26583a..6082063 100644
--- a/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx
+++ b/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx
@@ -1048,7 +1048,7 @@ MapViewerControlObj::SetMapViewPerspective(uint32_t SessionHandle, uint16_t MapV
transform_set_pitch(trans, 40);
break;
}
- navit_draw_async(m_navit.u.navit, 1);
+ navit_draw(m_navit.u.navit);
}
}
@@ -1266,7 +1266,7 @@ MapViewerControlObj::SetCameraHeadingAngle(uint32_t sessionHandle, int32_t angle
struct attr orientation={attr_orientation};
orientation.u.num=angle;
navit_set_attr(m_navit.u.navit, &orientation);
- navit_draw_async(m_navit.u.navit, 1);
+ navit_draw(m_navit.u.navit);
}
void
@@ -1356,7 +1356,7 @@ MapViewerControlObj::SetCameraHeadingTrackUp(uint32_t sessionHandle)
struct attr orientation={attr_orientation};
orientation.u.num=-1;
navit_set_attr(m_navit.u.navit, &orientation);
- navit_draw_async(m_navit.u.navit, 1);
+ navit_draw(m_navit.u.navit);
}
void
@@ -1368,7 +1368,7 @@ MapViewerControlObj::SetTargetPoint(uint32_t SessionHandle, ::DBus::Struct< doub
g.lat=target._1;
g.lng=target._2;
navit_set_attr(m_navit.u.navit, &center);
- navit_draw_async(m_navit.u.navit, 1);
+ navit_draw(m_navit.u.navit);
}
void
@@ -1877,7 +1877,7 @@ DisplayedRoute::WriteSegment(FILE *out)
{
if (m_coordinates.size()) {
int i;
- uint32_t header[3]={2+2*m_coordinates.size(),type_street_route,2*m_coordinates.size()};
+ uint32_t header[3]={2+2*(uint32_t)m_coordinates.size(),type_street_route,2*(uint32_t)m_coordinates.size()};
fwrite(header, sizeof(header), 1, out);
for (i = 0 ; i < m_coordinates.size() ; i++)
fwrite(&m_coordinates[i], sizeof(struct coord), 1, out);
diff --git a/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx b/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx
index 42a649a..cc64b72 100644
--- a/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx
+++ b/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx
@@ -106,7 +106,8 @@ class GuidanceObj
public:
struct callback *m_guidance_callback;
struct attr m_route, m_vehicleprofile, m_tracking_callback;
- uint32_t m_session,m_route_handle;
+ struct attr m_vehicle_speed;
+ uint32_t m_session,m_route_handle;
Guidance *m_guidance;
#if (SPEECH_ENABLED)
SpeechOutput *m_speechoutput;
@@ -133,8 +134,6 @@ class GuidanceObj
};
void GuidanceObj_Callback(GuidanceObj *obj);
-static class GuidanceObj *s_guidance;
-static struct attr vehicle_speed={attr_speed,(char *)40};
static struct navit *
get_navit(void)
@@ -218,12 +217,11 @@ class Guidance
void
StartGuidance(const uint32_t& SessionHandle, const uint32_t& RouteHandle)
{
- dbg(lvl_debug,"enter\n");
if (m_guidance_active) {
- dbg(lvl_debug,"guidance already active\n");
- throw DBus::ErrorFailed("guidance already active");
+ LOG_ERROR_MSG(gCtx,"guidance already active");
+ throw DBus::ErrorFailed("guidance already active");
} else {
- s_guidance=new GuidanceObj(this, SessionHandle, RouteHandle);
+ mp_guidance=new GuidanceObj(this, SessionHandle, RouteHandle);
m_guidance_active=true;
LOG_INFO_MSG(gCtx,"Guidance started");
}
@@ -232,12 +230,11 @@ class Guidance
void
StopGuidance(const uint32_t& SessionHandle)
{
- dbg(lvl_debug,"enter\n");
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
- throw DBus::ErrorFailed("no guidance active");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
+ throw DBus::ErrorFailed("no guidance active");
} else {
- delete(s_guidance);
+ delete(mp_guidance);
m_guidance_active=false;
LOG_INFO_MSG(gCtx,"Guidance stopped");
}
@@ -246,12 +243,11 @@ class Guidance
void
GetDestinationInformation(uint32_t& offset, uint32_t& travelTime, int32_t& direction, int32_t& side, int16_t& timeZone, int16_t& daylightSavingTime)
{
- dbg(lvl_debug,"enter\n");
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
- throw DBus::ErrorFailed("no guidance active");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
+ throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->GetDestinationInformation(offset, travelTime, direction, timeZone);
+ mp_guidance->GetDestinationInformation(offset, travelTime, direction, timeZone);
}
}
@@ -270,10 +266,10 @@ class Guidance
PauseGuidance(const uint32_t& sessionHandle)
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->PauseGuidance(sessionHandle);
+ mp_guidance->PauseGuidance(sessionHandle);
}
}
@@ -281,10 +277,10 @@ class Guidance
ResumeGuidance(const uint32_t& sessionHandle)
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
- throw DBus::ErrorFailed("no guidance active");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
+ throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->ResumeGuidance(sessionHandle);
+ mp_guidance->ResumeGuidance(sessionHandle);
}
}
@@ -292,10 +288,10 @@ class Guidance
SetVoiceGuidance(const bool& activate, const std::string& voice)
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->SetVoiceGuidance(activate,voice);
+ mp_guidance->SetVoiceGuidance(activate,voice);
}
return(0); //not implemented yet
}
@@ -304,10 +300,10 @@ class Guidance
GetGuidanceDetails(bool& voiceGuidance, bool& vehicleOnTheRoad, bool& isDestinationReached, int32_t& maneuver)
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
- throw DBus::ErrorFailed("no guidance active");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
+ throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->GetGuidanceDetails(voiceGuidance, vehicleOnTheRoad, isDestinationReached, maneuver);
+ mp_guidance->GetGuidanceDetails(voiceGuidance, vehicleOnTheRoad, isDestinationReached, maneuver);
}
}
@@ -315,10 +311,10 @@ class Guidance
PlayVoiceManeuver()
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->PlayVoiceManeuver();
+ mp_guidance->PlayVoiceManeuver();
}
return(0); //not implemented yet
}
@@ -333,10 +329,10 @@ class Guidance
GetManeuversList(const uint16_t& requestedNumberOfManeuvers, const uint32_t& maneuverOffset, int32_t& error, uint16_t& numberOfManeuvers, std::vector< ::DBus::Struct< std::vector< ::DBus::Struct< std::string, std::vector< ::DBus::Struct< int32_t, std::string > >, std::string > >, std::string, std::string, std::string, std::string, uint16_t, int32_t, uint32_t, std::vector< ::DBus::Struct< uint32_t, uint32_t, int32_t, int32_t, std::map< int32_t, ::DBus::Struct< uint8_t, ::DBus::Variant > > > > > >& maneuversList)
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
- throw DBus::ErrorFailed("no guidance active");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
+ throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->GetManeuversList(requestedNumberOfManeuvers, maneuverOffset, numberOfManeuvers, maneuversList);
+ mp_guidance->GetManeuversList(requestedNumberOfManeuvers, maneuverOffset, numberOfManeuvers, maneuversList);
}
error=0; //not used
}
@@ -358,7 +354,7 @@ class Guidance
GetGuidanceStatus(int32_t& guidanceStatus, uint32_t& routeHandle)
{
if (m_guidance_active==true) {
- s_guidance->GetGuidanceStatus(guidanceStatus, routeHandle);
+ mp_guidance->GetGuidanceStatus(guidanceStatus, routeHandle);
} else {
guidanceStatus=GENIVI_NAVIGATIONCORE_INACTIVE;
routeHandle=0;
@@ -369,10 +365,10 @@ class Guidance
SetVoiceGuidanceSettings(const int32_t& promptMode)
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
throw DBus::ErrorFailed("no guidance active");
} else {
- s_guidance->SetVoiceGuidanceSettings(promptMode);
+ mp_guidance->SetVoiceGuidanceSettings(promptMode);
}
return(0); //not implemented yet
}
@@ -381,10 +377,10 @@ class Guidance
GetVoiceGuidanceSettings()
{
if (m_guidance_active==false) {
- dbg(lvl_debug,"no guidance active\n");
+ LOG_ERROR_MSG(gCtx,"no guidance active");
throw DBus::ErrorFailed("no guidance active");
} else {
- return s_guidance->GetVoiceGuidanceSettings();
+ return mp_guidance->GetVoiceGuidanceSettings();
}
}
@@ -400,6 +396,8 @@ class Guidance
throw DBus::ErrorNotSupported("Not yet supported");
}
+ GuidanceObj *mp_guidance;
+
bool m_simulationMode;
bool m_guidance_active;
};
@@ -428,7 +426,7 @@ GuidanceObj::GetDestinationInformation(uint32_t& Distance, uint32_t& TravelTime,
if (!idx)
throw DBus::ErrorFailed("internal error:navigation has only one coordinate");
if (destination_time.u.num == -1 || destination_length.u.num == -1) {
- dbg(lvl_debug,"time %d length %d\n",(int) destination_time.u.num, (int) destination_length.u.num);
+ LOG_ERROR(gCtx,"time %d length %d",(int) destination_time.u.num, (int) destination_length.u.num);
throw DBus::ErrorFailed("internal error:failed to get time or length");
}
Distance=destination_length.u.num;
@@ -588,7 +586,7 @@ GuidanceObj::GetManeuver(struct item *item, uint32_t& DistanceToManeuver, int32_
data._2=variant_enumeration(GENIVI_NAVIGATIONCORE_RIGHT);
break;
default:
- dbg(lvl_error,"Unable to convert type %s\n",item_to_name(item->type));
+ LOG_ERROR(gCtx,"Unable to convert type %s",item_to_name(item->type));
Maneuver=GENIVI_NAVIGATIONCORE_INVALID;
index = GENIVI_NAVIGATIONCORE_INVALID;
data._2=variant_enumeration(GENIVI_NAVIGATIONCORE_INVALID);
@@ -668,7 +666,7 @@ GuidanceObj::ResumeGuidance(uint32_t sessionHandle)
GuidanceObj_Callback(this);
if (vehicle)
{
- vehicle_set_attr(vehicle, &vehicle_speed);
+ vehicle_set_attr(vehicle, &m_vehicle_speed);
}
m_paused=false;
}
@@ -717,19 +715,17 @@ GuidanceObj_Callback(GuidanceObj *obj)
struct attr level;
struct map_rect *mr;
struct item *item;
- dbg(lvl_debug,"enter\n");
if (obj->m_paused)
return;
- mr=obj->get_map_rect();
+ mr=obj->get_map_rect();
if (!mr) {
LOG_ERROR_MSG(gCtx,"Failed to get map rect");
- dbg(lvl_debug,"failed to get map rect\n");
return;
}
item=obj->get_item(mr);
if (item && item_attr_get(item, attr_level, &level)) {
int maneuver;
- dbg(lvl_debug,"level=%d\n",(int) level.u.num);
+ LOG_INFO(gCtx,"Level: %d",(int) level.u.num);
switch(level.u.num) {
case 3:
maneuver=GENIVI_NAVIGATIONCORE_PASSED;
@@ -750,7 +746,6 @@ GuidanceObj_Callback(GuidanceObj *obj)
LOG_INFO(gCtx,"Maneuver: %d",maneuver);
} else {
LOG_ERROR(gCtx,"Maneuver item not found: %p",item);
- dbg(lvl_debug,"failed to get level item=%p\n",item);
}
}
@@ -766,9 +761,8 @@ variant_double(double d)
void
GuidanceObj_TrackingCallback(GuidanceObj *obj)
{
- dbg(lvl_debug,"enter\n");
struct attr attr;
- route_set_position_from_tracking(obj->m_route.u.route, get_tracking(), projection_mg);
+ route_set_position_from_tracking(obj->m_route.u.route, get_tracking(), projection_mg);
if (!obj->m_paused)
obj->m_guidance->PositionOnRouteChanged(0); //to do return the current offset on the route in meters from the beginning of the route
@@ -806,14 +800,15 @@ GuidanceObj::GuidanceObj(Guidance *guidance, uint32_t SessionHandle, uint32_t Ro
m_guidance=guidance;
m_session=SessionHandle;
m_route_handle=RouteHandle;
- m_guidance_callback=callback_new_1(reinterpret_cast<void (*)(void)>(GuidanceObj_Callback), this);
- m_paused=false;
+ m_guidance_callback=callback_new_1(reinterpret_cast<void (*)(void)>(GuidanceObj_Callback), this);
+ m_paused=false;
m_voice_guidance=false;
m_kind_of_voice="DEFAULT";
m_prompt_mode=GENIVI_NAVIGATIONCORE_MANUAL_PROMPT;
m_tracking_callback.type=attr_callback;
m_tracking_callback.u.callback=NULL;
struct attr id={attr_id};
+ m_vehicle_speed={attr_speed,(char *)40};
id.u.num=RouteHandle;
struct attr *in[]={&id, NULL};
struct attr **ret=NULL;
@@ -825,22 +820,21 @@ GuidanceObj::GuidanceObj(Guidance *guidance, uint32_t SessionHandle, uint32_t Ro
#endif
if (navit_get_attr(navit, attr_callback_list, &callback_list, NULL)) {
callback_list_call_attr_4(callback_list.u.callback_list, attr_command, "navit_genivi_get_route", in, &ret, NULL);
- if (ret && ret[0] && ret[1] && ret[0]->type == attr_route && ret[1]->type == attr_vehicleprofile) {
+ if (ret && ret[0] && ret[1] && ret[0]->type == attr_route && ret[1]->type == attr_vehicleprofile) {
struct tracking *tracking=get_tracking();
- m_route=*ret[0];
- m_vehicleprofile=*ret[1];
+ m_route=*ret[0];
+ m_vehicleprofile=*ret[1];
m_tracking_callback.u.callback=callback_new_attr_1(reinterpret_cast<void (*)(void)>(GuidanceObj_TrackingCallback), attr_position_coord_geo, this);
- tracking_add_attr(tracking, &m_tracking_callback);
- struct vehicle *demo=get_vehicle("demo:");
- if (demo) {
- vehicle_set_attr(demo, &m_route);
- vehicle_set_attr(demo, &vehicle_speed);
+ tracking_add_attr(tracking, &m_tracking_callback);
+ struct vehicle *vehicle=get_vehicle("demo:");
+ if (vehicle) {
+ vehicle_set_attr(vehicle, &m_route);
+ vehicle_set_attr(vehicle, &m_vehicle_speed);
}
- navigation_set_route(get_navigation(), m_route.u.route);
- tracking_set_route(get_tracking(), m_route.u.route);
- navigation_register_callback(get_navigation(), attr_navigation_speech, m_guidance_callback);
- GuidanceObj_Callback(this);
- }
+ tracking_set_route(get_tracking(), m_route.u.route);
+ navigation_set_route(get_navigation(), m_route.u.route);
+ navigation_register_callback(get_navigation(), attr_navigation_speech, m_guidance_callback);
+ }
g_free(ret);
}
m_guidance->GuidanceStatusChanged(GENIVI_NAVIGATIONCORE_ACTIVE, RouteHandle);
@@ -849,16 +843,23 @@ GuidanceObj::GuidanceObj(Guidance *guidance, uint32_t SessionHandle, uint32_t Ro
GuidanceObj::~GuidanceObj()
{
- if (m_tracking_callback.u.callback) {
+ navigation_unregister_callback(get_navigation(), attr_navigation_speech, m_guidance_callback);
+
+ struct vehicle *vehicle=get_vehicle("demo:");
+ if (vehicle) {
+ vehicle_remove_attr(vehicle,&m_route);
+ vehicle_remove_attr(vehicle,&m_vehicle_speed);
+ }
+
+ if (m_tracking_callback.u.callback) {
struct tracking *tracking=get_tracking();
if (tracking)
tracking_remove_attr(tracking, &m_tracking_callback);
callback_destroy(m_tracking_callback.u.callback);
}
- if (m_guidance_callback) {
- navigation_unregister_callback(get_navigation(), attr_navigation_speech, m_guidance_callback);
- callback_destroy(m_guidance_callback);
- }
+
+ callback_destroy(m_guidance_callback);
+
m_guidance->GuidanceStatusChanged(GENIVI_NAVIGATIONCORE_INACTIVE, m_route_handle);
#if (SPEECH_ENABLED)
delete(m_speechoutput);
diff --git a/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx b/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx
index 7cdfa95..ea1458b 100644
--- a/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx
+++ b/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx
@@ -294,7 +294,7 @@ LocationInputObj::Spell(uint32_t SessionHandle, const std::string& InputCharacte
char *newstr;
const char *input=InputCharacter.c_str();
int len=strlen(input)+1;
- LOG_DEBUG(gCtx,"Input '%s' (%d)",input,strlen(input));
+ LOG_DEBUG(gCtx,"Input '%s' (%lu)",input,strlen(input));
if (m_search.u.str && strlen(m_search.u.str)) {
const char *i=input;
char c;
@@ -318,7 +318,7 @@ LocationInputObj::Spell(uint32_t SessionHandle, const std::string& InputCharacte
newstr=NULL;
}
g_free(m_search.u.str);
- LOG_DEBUG(gCtx,"Search string '%s' (%d)",newstr,strlen(newstr));
+ LOG_DEBUG(gCtx,"Search string '%s' (%lu)",newstr,strlen(newstr));
m_search.u.str=newstr;
m_windowsize=MaxWindowSize;
diff --git a/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx b/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx
index d2cc16f..99156d6 100644
--- a/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx
+++ b/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx
@@ -914,7 +914,7 @@ RoutingObj::RoutingObj(Routing *routing, uint32_t session, uint32_t handle)
struct attr callback;
m_routing=routing;
- m_session=session;
+ m_session=session;
m_handle=handle;
m_route.type=attr_route;
m_route.u.route=route_new(NULL, NULL);
@@ -935,7 +935,7 @@ RoutingObj::~RoutingObj()
callback.type=attr_callback;
callback.u.callback=m_callback;
- route_remove_attr(m_route.u.route, &callback);
+ route_remove_attr(m_route.u.route, &callback);
callback_destroy(m_callback);
route_destroy(m_route.u.route);
}
diff --git a/src/navigation/patches/avoid-crash-on-guidance-when-delete-and-recreate-route.diff b/src/navigation/patches/avoid-crash-on-guidance-when-delete-and-recreate-route.diff
new file mode 100644
index 0000000..90fae7d
--- /dev/null
+++ b/src/navigation/patches/avoid-crash-on-guidance-when-delete-and-recreate-route.diff
@@ -0,0 +1,13 @@
+Index: navit/navit/route.c
+===================================================================
+--- navit/route.c (revision 5827)
++++ navit/route.c (working copy)
+@@ -4103,7 +4103,7 @@ route_remove_attr(struct route *this_, struct attr *attr)
+ dbg(lvl_debug,"enter\n");
+ switch (attr->type) {
+ case attr_callback:
+- callback_list_remove(this_->cbl2, attr->u.callback);
++// callback_list_remove(this_->cbl2, attr->u.callback);
+ return 1;
+ case attr_vehicle:
+ this_->v=NULL;
diff --git a/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx b/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
index 65c38f9..9680be7 100644
--- a/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
+++ b/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
@@ -174,7 +174,7 @@ class ContentAccessModule
class PoiContentAccess *pca;
pca=new PoiContentAccess(*conns[POI_CONTENTACCESS_CONNECTION]);
int camid=pca->RegisterContentAccessModule(cam_name);
- dbg(lvl_debug,"camid=%d\n",camid);
+ LOG_INFO(gCtx,"camid=%d",camid);
std::vector< ::DBus::Struct< ::DBus::Struct< std::vector< uint32_t >, DBusCommonAPIVariant, std::string, std::string, DBusCommonAPIVariant >, std::vector< ::DBus::Struct< uint32_t, std::string, int32_t, std::vector< ::DBus::Struct< int32_t, std::string, DBusCommonAPIVariant > > > >, std::vector< ::DBus::Struct< uint32_t, std::string > > > > poiCategories1;
::DBus::Struct< ::DBus::Struct< std::vector< uint32_t >, DBusCommonAPIVariant, std::string, std::string, DBusCommonAPIVariant >, std::vector< ::DBus::Struct< uint32_t, std::string, int32_t, std::vector< ::DBus::Struct< int32_t, std::string, DBusCommonAPIVariant > > > >, std::vector< ::DBus::Struct< uint32_t, std::string > > > poiCategory;
size_t i;
@@ -239,7 +239,7 @@ class ContentAccessModule
{
struct attr label;
struct coord c;
- dbg(lvl_debug,"adding poi\n");
+ LOG_DEBUG_MSG(gCtx,"adding poi");
::DBus::Struct< uint32_t, std::string, uint32_t, ::DBus::Struct< double, double, double >, uint16_t, std::vector< ::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > > > result;
::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > attribute;
bool stringMatched=false;
@@ -372,7 +372,7 @@ class ContentAccessModule
{
struct attr navit;
struct coord_geo g;
- dbg(lvl_debug,"enter handle=%d size=%d location=%f,%f,%d string='%s' sortOption=%d\n",poiSearchHandle, maxSize, location._1,location._2,location._3, inputString.c_str(), sortOption);
+ LOG_DEBUG(gCtx,"enter handle=%d size=%d location=%f,%f,%f string='%s' sortOption=%d",poiSearchHandle, maxSize, location._1,location._2,location._3, inputString.c_str(), sortOption);
m_max_requested_size=maxSize;
m_resultList.resize(0);
m_max_radius=0;
@@ -380,7 +380,7 @@ class ContentAccessModule
poiCategoryIdRadius categoryIdRadius;
m_poiCategoriesIdRadius.clear();
for (int i = 0 ; i < poiCategories.size(); i++) {
- dbg(lvl_debug,"category %d %d\n",poiCategories[i]._1,poiCategories[i]._2);
+ LOG_DEBUG(gCtx,"category %d %d",poiCategories[i]._1,poiCategories[i]._2);
categoryIdRadius.givenId=poiCategories[i]._1;
categoryIdRadius.radius=poiCategories[i]._2;
m_poiCategoriesIdRadius.push_back(categoryIdRadius);
@@ -388,21 +388,21 @@ class ContentAccessModule
m_max_radius=poiCategories[i]._2;
}
for (int i = 0 ; i < poiAttributes.size(); i++) {
- dbg(lvl_debug,"attribute %d %d %d %d %d\n",poiAttributes[i]._1, poiAttributes[i]._2, poiAttributes[i]._3, poiAttributes[i]._5, poiAttributes[i]._6);
+ LOG_DEBUG(gCtx,"attribute %d %d %d %d %d",poiAttributes[i]._1, poiAttributes[i]._2, poiAttributes[i]._3, poiAttributes[i]._5, poiAttributes[i]._6);
}
- dbg(lvl_debug,"max radius %d\n",m_max_radius);
+ LOG_DEBUG(gCtx,"max radius %d",m_max_radius);
if (!m_mapset) {
if (!config_get_attr(config, attr_navit, &navit, NULL)) {
- dbg(lvl_debug,"failed to get navit\n");
+ LOG_ERROR_MSG(gCtx,"failed to get navit");
return;
}
m_mapset=navit_get_mapset(navit.u.navit);
}
- dbg(lvl_debug,"mapset %p\n",m_mapset);
+ LOG_DEBUG(gCtx,"mapset %p",m_mapset);
g.lat=location._1;
g.lng=location._2;
transform_from_geo(projection_mg, &g, &m_center);
- dbg(lvl_debug,"c 0x%x,0x%x\n",m_center.x,m_center.y);
+ LOG_DEBUG(gCtx,"c 0x%x,0x%x",m_center.x,m_center.y);
m_scale=transform_scale(m_center.y);
int d=m_max_radius*10/m_scale;
m_selection.next=NULL;
@@ -464,8 +464,8 @@ class ContentAccessModule
void
PoiSearchCanceled(const uint32_t& poiSearchHandle)
{
- dbg(lvl_debug,"enter\n");
- }
+ //to do something
+ }
void
ResultListRequested(const uint8_t& camId, const uint32_t& poiSearchHandle, const std::vector< uint32_t >& attributeList, int32_t& statusValue, uint16_t& resultListSize, std::vector< ::DBus::Struct< uint32_t, std::string, uint32_t, ::DBus::Struct< double, double, double >, uint16_t, std::vector< ::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > > > >& resultList)
@@ -507,7 +507,6 @@ class ContentAccessModule
std::vector< ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, ::DBus::Struct< double, double, double > >, std::vector< uint32_t >, std::vector< ::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > > > >
PoiDetailsRequested(const std::vector< uint32_t >& source_id)
{
- dbg(lvl_debug,"enter\n");
std::vector< ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, ::DBus::Struct< double, double, double > >, std::vector< uint32_t >, std::vector< ::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > > > > ret;
for (int i = 0 ; i < source_id.size() ; i++) {
int sid=source_id[i];
@@ -533,7 +532,6 @@ plugin_init(void)
DLT_REGISTER_APP("POIC","POI CONTENT ACCESS MODULE SERVER");
DLT_REGISTER_CONTEXT(gCtx,"POIC","Global Context");
- dbg(lvl_debug,"enter\n");
event_request_system("glib","genivi_poiservice");
int i;
for (i = 0 ; i < CONNECTION_AMOUNT ; i++) {
@@ -549,6 +547,6 @@ plugin_init(void)
try {
server->register_cam();
} catch(...) {
- dbg(lvl_debug,"Exception during register_cam\n");
+ LOG_ERROR_MSG(gCtx,"Exception during register_cam");
}
}
diff --git a/src/navigation/update_navit.sh b/src/navigation/update_navit.sh
index 615fb40..671aaa7 100755
--- a/src/navigation/update_navit.sh
+++ b/src/navigation/update_navit.sh
@@ -17,6 +17,7 @@ cd navit
git checkout $navit_version
patch -p0 -i ../patches/search_list_get_unique.diff
patch -p0 -i ../patches/fsa_issue_padding.diff
+patch -p0 -i ../patches/avoid-crash-on-guidance-when-delete-and-recreate-route.diff
cd ../
diff --git a/src/navigation/update_third_party.sh b/src/navigation/update_third_party.sh
index 784f8b6..712ebb4 100755
--- a/src/navigation/update_third_party.sh
+++ b/src/navigation/update_third_party.sh
@@ -1,7 +1,7 @@
#!/bin/bash
positioning_version='9725fe1f553197042d6445997690d452a73490c0'
-navit_version='28478e7f26c1a0eedc06fb4765e2f736079c6f0c'
+navit_version='f5abdd317e10d56226300d001469595658a605e4'
echo "version of positioning is: $positioning_version"
echo "version of navit is: $navit_version"
diff --git a/test/navigation/resource/location-poi.xml b/test/navigation/resource/location-poi.xml
new file mode 100644
index 0000000..3bc4fda
--- /dev/null
+++ b/test/navigation/resource/location-poi.xml
@@ -0,0 +1,10 @@
+<location-set area="Switzerland extract">
+<location>
+<latitude>46.206659</latitude>
+<longitude>6.1410842</longitude>
+<country>Switzerland</country>
+<city>Genève</city>
+<street>Rue Vallin</street>
+<number>11</number>
+</location>
+</location-set>
diff --git a/test/navigation/script/lbs-api-test.e4p b/test/navigation/script/lbs-api-test.e4p
index 45e2b76..b0f184b 100644
--- a/test/navigation/script/lbs-api-test.e4p
+++ b/test/navigation/script/lbs-api-test.e4p
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project lbs-api-test -->
-<!-- Saved: 2017-08-18, 10:56:55 -->
+<!-- Saved: 2017-08-29, 11:17:14 -->
<!-- Copyright (C) 2017 asanoaozora, -->
<Project version="5.1">
<Language>en_US</Language>
@@ -23,6 +23,7 @@
<Source>test-location-input.py</Source>
<Source>test-route-calculation.py</Source>
<Source>genivi.py</Source>
+ <Source>test-poi-guidance.py</Source>
</Sources>
<Forms/>
<Translations/>
diff --git a/test/navigation/script/test-all b/test/navigation/script/test-all
index ac90fda..f762500 100755
--- a/test/navigation/script/test-all
+++ b/test/navigation/script/test-all
@@ -2,13 +2,13 @@
export PYTHONIOENCODING=utf-8
-result="$(./test-poi.py -l ../resource/location.xml -s "sChü" 2>&1 >/dev/null)"
+result="$(./test-location-input.py -l ../resource/locations.xml 2>&1 >/dev/null)"
echo $result
if [[ $result != *"PASSED"* ]]; then
exit 1
fi
-result="$(./test-location-input.py -l ../resource/locations.xml 2>&1 >/dev/null)"
+result="$(./test-address-input.py -l ../resource/location.xml 2>&1 >/dev/null)"
echo $result
if [[ $result != *"PASSED"* ]]; then
exit 1
@@ -20,7 +20,13 @@ if [[ $result != *"PASSED"* ]]; then
exit 1
fi
-result="$(./test-address-input.py -l ../resource/location.xml 2>&1 >/dev/null)"
+result="$(./test-poi.py -l ../resource/location.xml -s "sChü" 2>&1 >/dev/null)"
+echo $result
+if [[ $result != *"PASSED"* ]]; then
+ exit 1
+fi
+
+result="$(./test-poi-guidance.py -l ../resource/location-poi.xml -s "cOnT" 2>&1 >/dev/null)"
echo $result
if [[ $result != *"PASSED"* ]]; then
exit 1
diff --git a/test/navigation/script/test-guidance.py b/test/navigation/script/test-guidance.py
index 983b668..6ebfbaf 100755
--- a/test/navigation/script/test-guidance.py
+++ b/test/navigation/script/test-guidance.py
@@ -45,7 +45,7 @@ except dltTriggerNotBuilt:
#import pdb;pdb.set_trace()
#name of the test
-test_name = "guidance"
+test_name = "guidance/map viewer"
#constants used into the script
TIME_OUT = 240000
diff --git a/test/navigation/script/test-poi-guidance.py b/test/navigation/script/test-poi-guidance.py
new file mode 100755
index 0000000..b62adf7
--- /dev/null
+++ b/test/navigation/script/test-poi-guidance.py
@@ -0,0 +1,450 @@
+#!/usr/bin/python
+
+"""
+**************************************************************************
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2017, PSA GROUP
+*
+* \file test-poi-guidance.py
+*
+* \brief This simple test shows how the poi search
+* could be easily tested using a python script
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+# this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+* List of changes:
+*
+* @licence end@
+**************************************************************************
+"""
+
+import dbus
+import gobject
+import dbus.mainloop.glib
+import xml.dom.minidom
+import argparse
+import sys
+import os.path
+import genivi
+try:
+ from dltTrigger import *
+ dltTrigger=True
+ print('DLT signal sent')
+except dltTriggerNotBuilt:
+ dltTrigger=False
+#import pdb; pdb.set_trace()
+
+#name of the test
+test_name = "poi search/route/guidance"
+
+#constants used into the script
+TIME_OUT = 120000
+ID_FUEL = 256
+ID_HOTEL = 257
+ID_CAR_PARKING = 258
+ID_BAR = 259
+ID_RESTAURANT = 260
+ATTRIBUTE_SOURCE = 0
+ATTRIBUTE_PHONE = 2
+RADIUS_HOTEL = 100 #in tenth of meter !
+RADIUS_RESTAURANT = 500
+MAX_WINDOW_SIZE = 100
+OFFSET = 0
+NUMBER_OF_SEGMENTS = 500
+SPEED_FACTOR = 16
+
+# List of coordinates
+LATITUDE = list()
+LONGITUDE = list()
+ALTITUDE = list()
+COUNTRY_STRING = list()
+CITY_STRING = list()
+STREET_STRING = list()
+HOUSE_NUMBER_STRING = list()
+
+#add signal receivers
+def routing_routeCalculationProgressUpdate_handler(routeHandle, status, percentage):
+ print ('Route Calculation: ' + str(int(percentage)) + ' %')
+
+def routing_routeCalculationSuccessful_handler(routeHandle,unfullfilledPreferences):
+ global g_guidance_active
+ print ('Route Calculation Successfull: ' + str(routeHandle))
+ #get route overview
+ overview = g_routing_interface.GetRouteOverview(dbus.UInt32(g_route_handle),dbus.Array([dbus.Int32(genivi.TOTAL_DISTANCE),dbus.Int32(genivi.TOTAL_TIME)]))
+ #retrieve distance
+ totalDistance = dbus.Struct(overview[dbus.Int32(genivi.TOTAL_DISTANCE)])
+ print ('Total Distance: ' + str(totalDistance[1]/1000) + ' km')
+ totalTime = dbus.Struct(overview[dbus.Int32(genivi.TOTAL_TIME)])
+ m, s = divmod(totalTime[1], 60)
+ h, m = divmod(m, 60)
+ print ("Total Time: %d:%02d:%02d" % (h, m, s))
+ #get route segments GetRouteSegments(const uint32_t& routeHandle, const int16_t& detailLevel, const std::vector< DBusCommonAPIEnumeration >& valuesToReturn, const uint32_t& numberOfSegments, const uint32_t& offset, uint32_t& totalNumberOfSegments, std::vector< std::map< DBusCommonAPIEnumeration, DBusCommonAPIVariant > >& routeSegments)
+ valuesToReturn = [dbus.Int32(genivi.ROAD_NAME),
+ dbus.Int32(genivi.START_LATITUDE),
+ dbus.Int32(genivi.END_LATITUDE),
+ dbus.Int32(genivi.START_LONGITUDE),
+ dbus.Int32(genivi.END_LONGITUDE),
+ dbus.Int32(genivi.DISTANCE),
+ dbus.Int32(genivi.TIME),
+ dbus.Int32(genivi.SPEED)]
+ numberOfSegments = NUMBER_OF_SEGMENTS
+ detailLevel = 0
+ offset = 0
+ ret = g_routing_interface.GetRouteSegments(dbus.UInt32(g_route_handle),dbus.Int16(detailLevel),dbus.Array(valuesToReturn),dbus.UInt32(numberOfSegments),dbus.UInt32(offset))
+ print ("Total number of segments: " + str(ret[0]) )
+ #len(ret[1]) is size
+ #ret[1][0][genivi.START_LATITUDE] is the start latitude
+ g_guidance_active = True
+# pdb.set_trace()
+ launch_guidance(routeHandle)
+
+def session_sessionDeleted_handler(sessionHandle):
+ print('Session handle deleted: '+str(sessionHandle))
+ if sessionHandle == g_navigationcore_session_handle:
+ exit(0)
+ else:
+ exit(1)
+
+def routing_routeDeleted_handler(routeHandle):
+ print('Route handle deleted: '+str(routeHandle))
+
+def guidance_guidanceStatusChanged_handler(guidanceStatus,routeHandle):
+ global g_guidance_active
+ global g_total_amount_of_maneuvers
+ print('Guidance status changed: '+str(guidanceStatus))
+ if guidanceStatus != genivi.ACTIVE and g_guidance_active == True:
+ g_guidance_active = False
+ g_routing_interface.DeleteRoute(dbus.UInt32(g_navigationcore_session_handle),dbus.UInt32(g_route_handle))
+ g_navigationcore_session_interface.DeleteSession(dbus.UInt32(g_navigationcore_session_handle))
+ else:
+ ret = g_guidance_interface.GetDestinationInformation()
+ m, s = divmod(ret[1], 60)
+ h, m = divmod(m, 60)
+ print ("Travel Time: %d:%02d:%02d" % (h, m, s))
+ ret = g_guidance_interface.GetManeuversList(dbus.UInt16(10),dbus.UInt32(0))
+ print ("Number of maneuvers: " +str(ret[1]))
+ print ("Next road to turn: " +ret[2][0][4])
+
+def guidance_positionOnRouteChanged_handler(offsetOnRoute):
+ print ("Offset on route: " +str(offsetOnRoute))
+
+def guidance_maneuverChanged_handler(maneuver):
+ if maneuver == genivi.PASSED:
+ print ("Maneuver passed ")
+ else:
+ print ("Maneuver: " +str(maneuver))
+ ret = g_guidance_interface.GetDestinationInformation()
+ m, s = divmod(ret[1], 60)
+ h, m = divmod(m, 60)
+ print ("Travel Time: %d:%02d:%02d" % (h, m, s))
+ ret = g_guidance_interface.GetManeuversList(dbus.UInt16(10),dbus.UInt32(0))
+ print ("Number of maneuvers: " +str(ret[1]))
+ print ("Next road to turn: " +ret[2][0][4])
+ #shortcut to end the guidance before reaching the destination
+ g_mapmatchedposition_interface.PauseSimulation(dbus.UInt32(g_navigationcore_session_handle))
+ g_mapmatchedposition_interface.SetSimulationMode(dbus.UInt32(g_navigationcore_session_handle),dbus.Boolean(False))
+ g_guidance_interface.StopGuidance(dbus.UInt32(g_navigationcore_session_handle))
+
+def guidance_waypointReached_handler(isDestination):
+ print("Waypoint reached: " +str(isDestination))
+ if isDestination == 1:
+ g_mapmatchedposition_interface.PauseSimulation(dbus.UInt32(g_navigationcore_session_handle))
+ g_mapmatchedposition_interface.SetSimulationMode(dbus.UInt32(g_navigationcore_session_handle),dbus.Boolean(False))
+ g_guidance_interface.StopGuidance(dbus.UInt32(g_navigationcore_session_handle))
+
+def mapmatchedposition_simulationStatusChanged_handler(simulationStatus):
+ print ("Simulation status: " +str(simulationStatus))
+
+
+def poi_configurationChanged_signal_handler(changedSettings):
+ for changedSetting in changedSettings:
+ if changedSetting == genivi.LOCALE:
+ ret=g_poiConfiguration_interface.GetLocale()
+ print("language: " + ret[0])
+ print("country: " + ret[1])
+ print("script: " + ret[2])
+
+def poi_poiStatus_signal_handler(poiSearchHandle,statusValue):
+ if poiSearchHandle == g_searchHandle:
+ if statusValue == genivi.SEARCH_FINISHED:
+ print("Search finished")
+ elif statusValue == genivi.SEARCH_NOT_STARTED:
+ g_poiSearch_interface.DeletePoiSearchHandle(poiSearchHandle)
+ launch_route_calculation(0)
+
+def poi_resultListChanged_signal_handler(poiSearchHandle,resultListSize):
+ global g_locations
+ global start
+ global destination
+ poiList=[]
+ if poiSearchHandle == g_searchHandle:
+ if resultListSize != 0:
+ ret=g_poiSearch_interface.RequestResultList(dbus.UInt32(poiSearchHandle),dbus.UInt16(OFFSET),dbus.UInt16(MAX_WINDOW_SIZE),[ATTRIBUTE_SOURCE,ATTRIBUTE_PHONE])
+ if ret[0] == genivi.SEARCH_FINISHED and ret[1] >= 0:
+ print("Results: "+str(int(ret[1])))
+ for result in ret[2]:
+ poiList.append(result[0])
+ ret=g_poiSearch_interface.GetPoiDetails(poiList)
+ for resultDetail in ret:
+ if resultDetail[1][0] == ID_HOTEL:
+ print("Hotel: " +resultDetail[0][1])
+ start=resultDetail[0][1]
+ g_locations["start"]=[resultDetail[0][2][0],resultDetail[0][2][1]]
+ elif resultDetail[1][0] == ID_RESTAURANT:
+ print("Restaurant: " +resultDetail[0][1])
+ destination=resultDetail[0][1]
+ g_locations["destination"]=[resultDetail[0][2][0],resultDetail[0][2][1]]
+ g_poiSearch_interface.CancelPoiSearch(dbus.UInt32(poiSearchHandle))
+ else:
+ print('No poi found')
+ g_poiSearch_interface.CancelPoiSearch(dbus.UInt32(poiSearchHandle))
+
+def timeout():
+ print ('Timeout Expired\n')
+ exit(1)
+
+def exit(value):
+ global g_exit
+ g_exit=value
+ if dltTrigger==True:
+ stopTrigger(test_name)
+ loop.quit()
+
+def launch_guidance(route):
+ g_guidance_interface.StartGuidance(dbus.UInt32(g_navigationcore_session_handle),dbus.UInt32(route))
+ g_mapmatchedposition_interface.SetSimulationMode(dbus.UInt32(g_navigationcore_session_handle),dbus.Boolean(True))
+ g_mapmatchedposition_interface.SetSimulationSpeed(dbus.UInt32(g_navigationcore_session_handle), dbus.Byte(SPEED_FACTOR))
+ g_mapmatchedposition_interface.StartSimulation(dbus.UInt32(g_navigationcore_session_handle))
+
+def launch_route_calculation(route):
+ global g_current_route
+ global g_route_handle
+ global g_routing_interface
+ global g_navigationcore_session_handle
+ global g_locations
+ global start
+ global destination
+ g_current_route = route
+ #get route handle
+ ret = g_routing_interface.CreateRoute(dbus.UInt32(g_navigationcore_session_handle))
+ g_route_handle=ret[1]
+ print ('Route handle: ' + str(g_route_handle))
+ print ('Calculating route from \
+ '+start+'(' + str(g_locations["start"][0]) + ',' + str(g_locations["start"][1]) + ') to \
+ '+destination+'(' + str(g_locations["destination"][0]) + ',' + str(g_locations["destination"][1]) + ')' )
+ #set waypoints
+ waypointDoubleCapiType = 0x03
+ g_routing_interface.SetWaypoints(dbus.UInt32(g_navigationcore_session_handle), \
+ dbus.UInt32(g_route_handle), \
+ dbus.Boolean(0), \
+ dbus.Array([ \
+ dbus.Dictionary({dbus.Int32(genivi.LATITUDE):dbus.Struct([dbus.Byte(waypointDoubleCapiType),dbus.Double(g_locations["start"][0])]),dbus.Int32(genivi.LONGITUDE):dbus.Struct([dbus.Byte(waypointDoubleCapiType),dbus.Double(g_locations["start"][1])])}), \
+ dbus.Dictionary({dbus.Int32(genivi.LATITUDE):dbus.Struct([dbus.Byte(waypointDoubleCapiType),dbus.Double(g_locations["destination"][0])]),dbus.Int32(genivi.LONGITUDE):dbus.Struct([dbus.Byte(waypointDoubleCapiType),dbus.Double(g_locations["destination"][1])])}) \
+ ]) \
+ )
+
+ #calculate route
+ g_routing_interface.CalculateRoute(dbus.UInt32(g_navigationcore_session_handle),dbus.UInt32(g_route_handle))
+
+print('\n--------------------------')
+print('Poi Test')
+print('--------------------------\n')
+
+#this script loads a file that could contains several locations but only uses the first one (to avoid creating specific resource)
+g_exit=0
+
+parser = argparse.ArgumentParser(description='Poi Test for navigation PoC and FSA.')
+parser.add_argument('-l','--loc',action='store', dest='locations', help='List of locations in xml format')
+parser.add_argument("-v", "--verbose", action='store_true',help='print the whole log messages')
+parser.add_argument('-s','--string',action='store', dest='string', help='String to search')
+args = parser.parse_args()
+
+if args.string == None:
+ print('string to search is missing, by default no string, get all')
+ stringToSearch=''
+else:
+ stringToSearch=args.string
+
+if args.locations == None:
+ print('location file is missing')
+ print >>sys.stderr,'Test '+test_name+' FAILED'
+ sys.exit(1)
+else:
+ if not os.path.isfile(args.locations):
+ print('file not exists')
+ print >>sys.stderr,'Test '+test_name+' FAILED'
+ sys.exit(1)
+ try:
+ DOMTree = xml.dom.minidom.parse(args.locations)
+ except OSError as e:
+ print >>sys.stderr,'Test '+test_name+' FAILED'
+ sys.exit(1)
+ location_set = DOMTree.documentElement
+
+print("Area : %s" % location_set.getAttribute("area"))
+
+locations = location_set.getElementsByTagName("location")
+
+for location in location_set.getElementsByTagName("location"):
+ LATITUDE.append(location.getElementsByTagName("latitude")[0].childNodes[0].data)
+ LONGITUDE.append(location.getElementsByTagName("longitude")[0].childNodes[0].data)
+ ALTITUDE.append(0)
+ COUNTRY_STRING.append(location.getElementsByTagName("country")[0].childNodes[0].data)
+ CITY_STRING.append(location.getElementsByTagName("city")[0].childNodes[0].data)
+ STREET_STRING.append(location.getElementsByTagName("street")[0].childNodes[0].data)
+ HOUSE_NUMBER_STRING.append(location.getElementsByTagName("number")[0].childNodes[0].data)
+
+if __name__ == '__main__':
+ dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+print("Search for hotel and restaurant with keyword: "+ stringToSearch)
+
+#connect to session bus
+bus = dbus.SessionBus()
+
+bus.add_signal_receiver(routing_routeCalculationProgressUpdate_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Routing", \
+ signal_name = "RouteCalculationProgressUpdate")
+
+bus.add_signal_receiver(routing_routeCalculationSuccessful_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Routing", \
+ signal_name = "RouteCalculationSuccessful")
+
+bus.add_signal_receiver(routing_routeDeleted_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Routing", \
+ signal_name = "RouteDeleted")
+
+bus.add_signal_receiver(session_sessionDeleted_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Session", \
+ signal_name = "SessionDeleted")
+
+bus.add_signal_receiver(guidance_guidanceStatusChanged_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Guidance", \
+ signal_name = "GuidanceStatusChanged")
+
+bus.add_signal_receiver(guidance_positionOnRouteChanged_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Guidance", \
+ signal_name = "PositionOnRouteChanged")
+
+bus.add_signal_receiver(guidance_maneuverChanged_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Guidance", \
+ signal_name = "ManeuverChanged")
+
+bus.add_signal_receiver(guidance_waypointReached_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.Guidance", \
+ signal_name = "WaypointReached")
+
+bus.add_signal_receiver(mapmatchedposition_simulationStatusChanged_handler, \
+ dbus_interface = "org.genivi.navigation.navigationcore.MapMatchedPosition", \
+ signal_name = "SimulationStatusChanged")
+
+bus.add_signal_receiver(poi_configurationChanged_signal_handler, \
+ dbus_interface = "org.genivi.navigation.poiservice.POIConfiguration", \
+ signal_name = "ConfigurationChanged")
+
+bus.add_signal_receiver(poi_poiStatus_signal_handler, \
+ dbus_interface = "org.genivi.navigation.poiservice.POISearch", \
+ signal_name = "PoiStatus")
+
+bus.add_signal_receiver(poi_resultListChanged_signal_handler, \
+ dbus_interface = "org.genivi.navigation.poiservice.POISearch", \
+ signal_name = "ResultListChanged")
+
+if dltTrigger==True:
+ startTrigger(test_name)
+
+navigationcore_session_obj = bus.get_object('org.genivi.navigation.navigationcore.Session','/org/genivi/navigationcore')
+g_navigationcore_session_interface = dbus.Interface(navigationcore_session_obj, dbus_interface='org.genivi.navigation.navigationcore.Session')
+
+routing_obj = bus.get_object('org.genivi.navigation.navigationcore.Routing','/org/genivi/navigationcore')
+g_routing_interface = dbus.Interface(routing_obj, dbus_interface='org.genivi.navigation.navigationcore.Routing')
+
+guidance_obj = bus.get_object('org.genivi.navigation.navigationcore.Guidance','/org/genivi/navigationcore')
+g_guidance_interface = dbus.Interface(guidance_obj, dbus_interface='org.genivi.navigation.navigationcore.Guidance')
+
+mapviewer_session_obj = bus.get_object('org.genivi.navigation.mapviewer.Session','/org/genivi/mapviewer')
+g_mapviewer_session_interface = dbus.Interface(mapviewer_session_obj, dbus_interface='org.genivi.navigation.mapviewer.Session')
+
+mapmatchedposition_obj = bus.get_object('org.genivi.navigation.navigationcore.MapMatchedPosition','/org/genivi/navigationcore')
+g_mapmatchedposition_interface = dbus.Interface(mapmatchedposition_obj, dbus_interface='org.genivi.navigation.navigationcore.MapMatchedPosition')
+
+poiConfiguration = bus.get_object('org.genivi.navigation.poiservice.POIConfiguration','/org/genivi/poiservice/POIConfiguration')
+g_poiConfiguration_interface = dbus.Interface(poiConfiguration, dbus_interface='org.genivi.navigation.poiservice.POIConfiguration')
+
+poiContentAccess = bus.get_object('org.genivi.navigation.poiservice.POIContentAccess','/org/genivi/poiservice/POIContentAccess')
+g_poiContentAccess_interface = dbus.Interface(poiContentAccess, dbus_interface='org.genivi.navigation.poiservice.POIContentAccess')
+
+poiSearch = bus.get_object('org.genivi.navigation.poiservice.POISearch','/org/genivi/poiservice/POISearch')
+g_poiSearch_interface = dbus.Interface(poiSearch, dbus_interface='org.genivi.navigation.poiservice.POISearch')
+
+g_poiConfiguration_interface.SetLocale(dbus.String("fra"),dbus.String("FRA"),dbus.String("Latn"))
+
+#get navigationcore session handle
+ret = g_navigationcore_session_handle = g_navigationcore_session_interface.CreateSession(dbus.String("test guidance"))
+g_navigationcore_session_handle=ret[1]
+print ('Navigation core session handle: ' + str(g_navigationcore_session_handle))
+
+g_current_route = 0
+g_guidance_active = False
+g_locations = {}
+start=""
+dest=""
+categories=[]
+ret=g_poiSearch_interface.GetAvailableCategories()
+for categoryAndName in ret:
+ if categoryAndName[0] == ID_HOTEL or categoryAndName[0] == ID_RESTAURANT:
+ print("Category ID: " + str(int(categoryAndName[0])))
+ categories.append(categoryAndName[0])
+ print("Name: " + categoryAndName[1])
+
+attributes_hotel=[]
+attributes_restaurant=[]
+attributesDetails=[]
+ret=g_poiSearch_interface.GetCategoriesDetails(categories)
+for results in ret:
+ if results[0][0] == ID_HOTEL:
+ for attribute in results[1]:
+ attributes_hotel.append(attribute[0])
+ attributesDetails.append(dbus.Struct([dbus.UInt32(attribute[0]),dbus.UInt32(ID_HOTEL),dbus.Int32(1280),dbus.Struct([dbus.Byte(2),dbus.String("")]),dbus.Int32(1314),dbus.Boolean(False)]))
+ elif results[0][0] == ID_RESTAURANT:
+ for attribute in results[1]:
+ attributes_restaurant.append(attribute[0])
+ attributesDetails.append(dbus.Struct([dbus.UInt32(attribute[0]),dbus.UInt32(ID_RESTAURANT),dbus.Int32(1280),dbus.Struct([dbus.Byte(2),dbus.String("")]),dbus.Int32(1314),dbus.Boolean(False)]))
+
+ret=g_poiSearch_interface.GetRootCategory()
+
+g_searchHandle=g_poiSearch_interface.CreatePoiSearchHandle()
+print("Search handle: " + str(int(g_searchHandle)))
+
+#init the target (it's the first location in the input file by default) and test
+index=0
+lat = LATITUDE[index]
+lon = LONGITUDE[index]
+alt = ALTITUDE[index]
+
+g_poiSearch_interface.SetCenter(g_searchHandle,dbus.Struct([dbus.Double(lat),dbus.Double(lon),dbus.Double(alt)]))
+
+g_poiSearch_interface.SetCategories(g_searchHandle,[dbus.Struct([dbus.UInt32(ID_HOTEL),dbus.UInt32(RADIUS_HOTEL)]),dbus.Struct([dbus.UInt32(ID_RESTAURANT),dbus.UInt32(RADIUS_RESTAURANT)])])
+
+g_poiSearch_interface.SetAttributes(g_searchHandle,attributesDetails)
+
+g_poiSearch_interface.StartPoiSearch(g_searchHandle,stringToSearch,dbus.Int32(genivi.SORT_BY_DISTANCE))
+
+
+#main loop
+gobject.timeout_add(TIME_OUT, timeout)
+loop = gobject.MainLoop()
+loop.run()
+if g_exit == 1:
+ print >>sys.stderr,'Test '+test_name+' FAILED'
+else:
+ print >>sys.stderr,'Test '+test_name+' PASSED'
+sys.exit(g_exit)
+
diff --git a/test/navigation/script/test-poi.py b/test/navigation/script/test-poi.py
index 690bea5..5c127a0 100755
--- a/test/navigation/script/test-poi.py
+++ b/test/navigation/script/test-poi.py
@@ -96,8 +96,10 @@ def catch_poi_resultListChanged_signal_handler(poiSearchHandle,resultListSize):
for resultDetail in ret:
if resultDetail[1][0] == ID_HOTEL:
print("Hotel: " +resultDetail[0][1])
+ print("Latitude: "+str(resultDetail[0][2][0])+" Longitude: "+str(resultDetail[0][2][1]))
elif resultDetail[1][0] == ID_RESTAURANT:
print("Restaurant: " +resultDetail[0][1])
+ print("Latitude: "+str(resultDetail[0][2][0])+" Longitude: "+str(resultDetail[0][2][1]))
g_poiSearch_interface.CancelPoiSearch(dbus.UInt32(poiSearchHandle))
else:
print('No poi found')