summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorasanoaozora <fifitaneki@hotmail.com>2017-06-27 15:31:15 +0200
committerasanoaozora <fifitaneki@hotmail.com>2017-06-27 15:31:15 +0200
commit4c3e24b04f8ff1e41a94f1c1dd181ae3412c3db9 (patch)
tree495d89426d738416d1fd38be71af037d43711a7c
parent56837f0237fadedd325940630601061bd7bbd30f (diff)
downloadpoi-service-4c3e24b04f8ff1e41a94f1c1dd181ae3412c3db9.tar.gz
fix a bug and add DLT support in poi-cam plugin
-rw-r--r--src/navigation/poi-cam/CMakeLists.txt2
-rw-r--r--src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx64
-rw-r--r--src/poi-service/poi-server/main.cpp4
3 files changed, 51 insertions, 19 deletions
diff --git a/src/navigation/poi-cam/CMakeLists.txt b/src/navigation/poi-cam/CMakeLists.txt
index 3b2b2e5..8f6297b 100644
--- a/src/navigation/poi-cam/CMakeLists.txt
+++ b/src/navigation/poi-cam/CMakeLists.txt
@@ -69,5 +69,7 @@ if(NOT DEFINED CMAKE_SUPPRESS_DEVELOPER_WARNINGS)
endif()
module_add_library(genivi_poiservice_cam_navit genivi_poiservice_cam_navit.cxx ${DBUS_GENERATED_INCLUDE_DIR}/poi-service/genivi-poiservice-poicontentaccess_proxy.h ${DBUS_GENERATED_INCLUDE_DIR}/poi-service/genivi-poiservice-contentaccessmodule_adaptor.h)
+target_link_libraries(genivi_poiservice_cam_navit ${LIBRARIES})
+add_dependencies(genivi_poiservice_cam_navit ${API_DIR}/poi-service)
diff --git a/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx b/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
index f5ab752..fa2d798 100644
--- a/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
+++ b/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
@@ -41,17 +41,15 @@
#include <navit/map.h>
#include <navit/mapset.h>
#include "navigation-common-dbus.h"
+#include "log.h"
+
+DLT_DECLARE_CONTEXT(gCtx);
#if (!DEBUG_ENABLED)
#undef dbg
#define dbg(level,...) ;
#endif
-enum {
- POI_CONTENTACCESSMODULE_CONNECTION=0,
- POI_CONTENTACCESS_CONNECTION,
- CONNECTION_AMOUNT
-};
#include "genivi-poiservice-constants.h"
#include "genivi-poiservice-poicontentaccess_proxy.h"
@@ -59,6 +57,14 @@ enum {
#include <algorithm>
+enum {
+ POI_CONTENTACCESSMODULE_CONNECTION=0,
+ POI_CONTENTACCESS_CONNECTION,
+ CONNECTION_AMOUNT
+};
+
+#define MAX_RESULT_LIST_SIZE 256
+
static DBus::Glib::BusDispatcher dispatchers[CONNECTION_AMOUNT];
static DBus::Connection *conns[CONNECTION_AMOUNT];
static const char *cam_name="org.genivi.navigation.poiservice.POIContentAccessModuleNavit";
@@ -88,6 +94,7 @@ class PoiContentAccess
PoiContentAccess(DBus::Connection &connection)
: DBus::ObjectProxy(connection, "/org/genivi/poiservice/POIContentAccess","org.genivi.navigation.poiservice.POIContentAccess")
{
+ LOG_INFO_MSG(gCtx,"POI content access client");
}
};
@@ -116,6 +123,7 @@ class ContentAccessModule
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 > > > > m_resultList;
std::string m_inputString;
int m_max_radius;
+ uint16_t m_max_requested_size;
bool (*m_sort_func)(::DBus::Struct< uint32_t, std::string, uint32_t, ::DBus::Struct< double, double, double >, uint16_t, std::vector< ::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > > > a, ::DBus::Struct< uint32_t, std::string, uint32_t, ::DBus::Struct< double, double, double >, uint16_t, std::vector< ::DBus::Struct< uint32_t, int32_t, DBusCommonAPIVariant > > > b);
struct coord m_center;
double m_scale;
@@ -131,6 +139,8 @@ class ContentAccessModule
ContentAccessModule(DBus::Connection &connection)
: DBus::ObjectAdaptor(connection, "/org/genivi/poiservice/POIContentAccessModule")
{
+ LOG_INFO_MSG(gCtx,"POI content access module server");
+
m_mapset=NULL;
m_msh=NULL;
m_map_rect=NULL;
@@ -187,16 +197,19 @@ class ContentAccessModule
delete(pca);
}
- void
+ bool
map_next(void)
{
m_map=mapset_next(m_msh, 1);
if (m_map_rect)
map_rect_destroy(m_map_rect);
- if (m_map)
+ if (m_map){
m_map_rect=map_rect_new(m_map, &m_selection);
+ return true;
+ }
else
m_map_rect=NULL;
+ return false;
}
bool
@@ -339,7 +352,8 @@ 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);
- m_resultList.resize(0);
+ m_max_requested_size=maxSize;
+ m_resultList.resize(0);
m_max_radius=0;
m_inputString=inputString;
poiCategoryIdRadius categoryIdRadius;
@@ -411,11 +425,16 @@ class ContentAccessModule
}while((isFound==false)&&(index<m_poiCategoriesIdRadius.size()));
}
- dbg(lvl_debug,"rect 0x%x,0x%x-0x%x,0x%x\n",m_selection.u.c_rect.lu.x,m_selection.u.c_rect.lu.y,m_selection.u.c_rect.rl.x,m_selection.u.c_rect.rl.y);
+ LOG_DEBUG(gCtx,"Range used for navit ID: %d %d",m_selection.range.min,m_selection.range.max);
+ LOG_DEBUG(gCtx,"Start search POI request in area: %x %x %x %x",m_selection.u.c_rect.lu.x,m_selection.u.c_rect.lu.y,m_selection.u.c_rect.rl.x,m_selection.u.c_rect.rl.y);
+ LOG_DEBUG(gCtx,"String to search: %s",m_inputString.c_str());
+
+ dbg(lvl_debug,"rect 0x%x,0x%x-0x%x,0x%x\n",m_selection.u.c_rect.lu.x,m_selection.u.c_rect.lu.y,m_selection.u.c_rect.rl.x,m_selection.u.c_rect.rl.y);
if (m_msh)
mapset_close(m_msh);
m_msh=mapset_open(m_mapset);
- map_next();
+ if (!map_next())
+ LOG_DEBUG_MSG(gCtx,"No map rectangle created");
if (sortOption == GENIVI_POISERVICE_SORT_BY_DISTANCE)
m_sort_func=do_sort_distance;
else
@@ -436,22 +455,26 @@ class ContentAccessModule
bool isFound;
size_t index;
dbg(lvl_debug,"enter camId=%d handle=%d\n", camId, poiSearchHandle);
- while (resultList.size() < 256 && m_map_rect) {
- while (resultList.size() < 256 && (item=map_rect_get_item(m_map_rect))) {
+ do {
+ while ((count < MAX_RESULT_LIST_SIZE) && (count < m_max_requested_size) && (item=map_rect_get_item(m_map_rect))) {
isFound=false;
index=0;
- do{
+ do{ //check if the category matches one of the requested ones
if (item->type == (m_poiCategoriesIdRadius.at(index)).formerId)
{
- isFound=add_poi(item,(m_poiCategoriesIdRadius.at(index)).givenId,m_inputString);
+ if(add_poi(item,(m_poiCategoriesIdRadius.at(index)).givenId,m_inputString)){
+ //poi are added into m_resultList
+ LOG_DEBUG(gCtx,"POI added: %s count: %d",(m_resultList.at(count))._2.c_str(), count);
+ count++;
+ isFound=true;
+ }
}
index++;
}while((isFound==false)&&(index<m_poiCategoriesIdRadius.size()));
- count++;
}
- map_next();
- }
- dbg(lvl_debug,"got %d items\n",count);
+ } while (map_next());
+
+ dbg(lvl_debug,"got %d items\n",count);
statusValue=GENIVI_POISERVICE_FINISHED;
if (m_sort_func)
std::sort(m_resultList.begin(), m_resultList.end(), m_sort_func);
@@ -485,7 +508,10 @@ static class ContentAccessModule *server;
void
plugin_init(void)
{
- dbg(lvl_debug,"enter\n");
+ 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++) {
diff --git a/src/poi-service/poi-server/main.cpp b/src/poi-service/poi-server/main.cpp
index 0af5db8..dc4812e 100644
--- a/src/poi-service/poi-server/main.cpp
+++ b/src/poi-service/poi-server/main.cpp
@@ -1731,6 +1731,8 @@ uint16_t poiSearchServer::searchPOIRequest(uint16_t categoryIndex, std::string s
name = m_availableCategoryTable[categoryIndex].name;
+ LOG_DEBUG(gCtx,"Start search POI request for category %s on area %.6f %.6f %.6f %.6f",name.c_str(), left_bottom_location.latitude,right_top_location.latitude,left_bottom_location.longitude,right_top_location.longitude );
+
sqlQuery = "SELECT name,segment,latitude,longitude,altitude";
for (attribute_index=0;attribute_index<m_availableCategoryTable[categoryIndex].attributeList.size();attribute_index++)
@@ -1822,7 +1824,9 @@ uint16_t poiSearchServer::searchPOIRequest(uint16_t categoryIndex, std::string s
//calculate distance from the center location
poi.distance = calculateDistance(m_centerLocation,poi.coordinate);
m_poiTable.push_back(poi);
+ LOG_DEBUG(gCtx,"POI name: %s found at distance: %d",poi.name.c_str(),poi.distance);
}
+ LOG_DEBUG(gCtx,"Amount of POI found: %d",sqlQueryResult.size());
return(sqlQueryResult.size());
}