appMain 3.5 updates
authorJustin Dickow <jjdickow@gmail.com>
Thu, 17 Jul 2014 17:33:52 +0000 (13:33 -0400)
committerJustin Dickow <jjdickow@gmail.com>
Thu, 17 Jul 2014 17:33:52 +0000 (13:33 -0400)
Authors

Alex Kutsan
Alexander Kutsan
Andrey Oleynik
Dmitriy Klimenko
Dmitriy Trunov
Dmitry Chmerev
Igor Kozyrenko
Konstantin Kolodiy
Nikita Vaganov
Polina Vyshnevska
Victor Slobodyanik
Vlad Semenyuk
Vladislav Smenyuk

Signed-off-by: Justin Dickow <jjdickow@gmail.com>
src/appMain/CMakeLists.txt
src/appMain/init_policy.sh [new file with mode: 0755]
src/appMain/init_policy_pasa.sh [new file with mode: 0755]
src/appMain/life_cycle.cc
src/appMain/main.cc
src/appMain/smartDeviceLink.ini

index f32c200..f837c44 100644 (file)
@@ -112,6 +112,10 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/smartDeviceLink.ini DESTINATION ${CMAKE_CU
 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/policy_table.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/hmi_capabilities.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/sdl_preloaded_pt.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+  file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/init_policy.sh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+endif ()
+
 
 if (BUILD_TESTS)
   file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx.properties DESTINATION ${CMAKE_BINARY_DIR}/test/)
@@ -162,3 +166,8 @@ elseif (${QT_HMI})
     PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
       GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
 endif ()
+if (CMAKE_SYSTEM_NAME STREQUAL "QNX")
+  install(FILES init_policy.sh DESTINATION bin
+    PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
+      GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+endif ()
diff --git a/src/appMain/init_policy.sh b/src/appMain/init_policy.sh
new file mode 100755 (executable)
index 0000000..40ecbea
--- /dev/null
@@ -0,0 +1,6 @@
+# This script star QDB server for SDL
+# Need superuser to start qdb
+
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/qnx650/target/qnx6/x86/usr/lib
+export LD_LIBRARY_PATH
+/usr/sbin/qdb -c policy.ini
diff --git a/src/appMain/init_policy_pasa.sh b/src/appMain/init_policy_pasa.sh
new file mode 100755 (executable)
index 0000000..16c8244
--- /dev/null
@@ -0,0 +1,4 @@
+# This script prepare policy database on QNX for PASA
+
+cat /fs/mp/sql/policy.cfg > /pps/qnx/qdb/config/policy.db
+mkdir -p /fs/rwdata/storage/policy
index da87617..3218de5 100644 (file)
@@ -253,30 +253,23 @@ bool LifeCycle::InitMessageSystem() {
 #endif  // MQUEUE_HMIADAPTER
 
 void LifeCycle::StopComponents() {
-#ifdef TIME_TESTER
-  if (time_tester_) {
-    time_tester_->Stop();
-    delete time_tester_;
-    time_tester_ = NULL;
-  }
-#endif //TIME_TESTER
   hmi_handler_->set_message_observer(NULL);
   connection_handler_->set_connection_handler_observer(NULL);
   protocol_handler_->RemoveProtocolObserver(app_manager_);
+  app_manager_->Stop();
+
+  LOG4CXX_INFO(logger_, "Destroying Media Manager");
+  protocol_handler_->RemoveProtocolObserver(media_manager_);
+  media_manager_->SetProtocolHandler(NULL);
+  media_manager::MediaManagerImpl::destroy();
 
   LOG4CXX_INFO(logger_, "Destroying Application Manager.");
-  app_manager_->Stop();
   application_manager::ApplicationManagerImpl::destroy();
 
   LOG4CXX_INFO(logger_, "Destroying Transport Manager.");
   transport_manager_->Stop();
   transport_manager::TransportManagerDefault::destroy();
 
-  LOG4CXX_INFO(logger_, "Destroying Media Manager");
-  protocol_handler_->RemoveProtocolObserver(media_manager_);
-  media_manager_->SetProtocolHandler(NULL);
-  media_manager::MediaManagerImpl::destroy();
-
   LOG4CXX_INFO(logger_, "Destroying Connection Handler.");
   protocol_handler_->set_session_observer(NULL);
   connection_handler::ConnectionHandlerImpl::destroy();
index 514454f..6d98216 100644 (file)
@@ -33,8 +33,6 @@
  */
 
 #include <sys/stat.h>
-#include <signal.h>
-#include <fcntl.h>
 #include <unistd.h>
 #include <cstdio>
 #include <cstdlib>
@@ -48,6 +46,7 @@
 #include "./life_cycle.h"
 
 #include "utils/signals.h"
+#include "utils/system.h"
 #include "config_profile/profile.h"
 
 #if defined(EXTENDED_MEDIA_MODE)
 CREATE_LOGGERPTR_GLOBAL(logger, "appMain")
 namespace {
 
-const char kBrowser[] = "/usr/bin/chromium-browser";
-const char kBrowserName[] = "chromium-browser";
-const char kBrowserParams[] = "--auth-schemes=basic,digest,ntlm";
-const char kLocalHostAddress[] = "127.0.0.1";
-const char kApplicationVersion[] = "Develop";
-
-#ifdef __QNX__
-bool Execute(std::string command, const char * const *) {
-  if (system(command.c_str()) == -1) {
-    LOG4CXX_FATAL(logger, "Can't start HMI!");
-    return false;
-  }
-  return true;
-}
-#else
-bool Execute(std::string file, const char * const * argv) {
-  // Create a child process.
-  pid_t pid_hmi = fork();
-
-  switch (pid_hmi) {
-    case -1: {  // Error
-      LOG4CXX_FATAL(logger, "fork() failed!");
-      return false;
-    }
-    case 0: {  // Child process
-      int32_t fd_dev0 = open("/dev/null", O_RDWR, S_IWRITE);
-      if (0 > fd_dev0) {
-        LOG4CXX_FATAL(logger, "Open dev0 failed!");
-        return false;
-      }
-      // close input/output file descriptors.
-      close(STDIN_FILENO);
-      close(STDOUT_FILENO);
-      close(STDERR_FILENO);
-
-      // move input/output to /dev/null.
-      dup2(fd_dev0, STDIN_FILENO);
-      dup2(fd_dev0, STDOUT_FILENO);
-      dup2(fd_dev0, STDERR_FILENO);
-
-      // Execute the program.
-      if (execvp(file.c_str(), const_cast<char* const *>(argv)) == -1) {
-        LOG4CXX_ERROR_WITH_ERRNO(logger, "execvp() failed! Can't start HMI!");
-        _exit(EXIT_FAILURE);
-      }
-
-      return true;
-    }
-    default: { /* Parent process */
-      LOG4CXX_INFO(logger, "Process created with pid " << pid_hmi);
-      return true;
-    }
-  }
-}
-#endif
+const std::string kBrowser = "/usr/bin/chromium-browser";
+const std::string kBrowserName = "chromium-browser";
+const std::string kBrowserParams = "--auth-schemes=basic,digest,ntlm";
+const std::string kLocalHostAddress = "127.0.0.1";
+const std::string kApplicationVersion = "SDL_RB_B3.5";
 
 #ifdef WEB_HMI
 /**
@@ -157,12 +106,8 @@ if (stat(hmi_link.c_str(), &sb) == -1) {
   LOG4CXX_FATAL(logger, "HMI index.html doesn't exist!");
   return false;
 }
-
-  std::string kBin = kBrowser;
-  const char* const kParams[4] = {kBrowserName, kBrowserParams,
-      hmi_link.c_str(), NULL};
-
-  return Execute(kBin, kParams);
+  return utils::System(kBrowser, kBrowserName).Add(kBrowserParams).Add(hmi_link)
+      .Execute();
 }
 #endif  // WEB_HMI
 
@@ -179,7 +124,7 @@ bool InitHmi() {
     return false;
   }
 
-  return Execute(kStartHmi, NULL);
+  return utils::System(kStartHmi).Execute();
 }
 #endif  // QT_HMI
 
@@ -215,6 +160,16 @@ int32_t main(int32_t argc, char** argv) {
       profile::Profile::instance()->config_file_name("smartDeviceLink.ini");
   }
 
+#ifdef __QNX__
+  if (!profile::Profile::instance()->policy_turn_off()) {
+    if (!utils::System("./init_policy.sh").Execute(true)) {
+      LOG4CXX_ERROR(logger, "Failed initialization of policy database");
+      DEINIT_LOGGER();
+      exit(EXIT_FAILURE);
+    }
+  }
+#endif  // __QNX__
+
   main_namespace::LifeCycle::instance()->StartComponents();
 
   // --------------------------------------------------------------------------
@@ -228,8 +183,7 @@ int32_t main(int32_t argc, char** argv) {
   LOG4CXX_INFO(logger, "InitMessageBroker successful");
 
   if (profile::Profile::instance()->launch_hmi()) {
-    if (profile::Profile::instance()->server_address() ==
-        std::string(kLocalHostAddress)) {
+    if (profile::Profile::instance()->server_address() == kLocalHostAddress) {
       LOG4CXX_INFO(logger, "Start HMI on localhost");
 
 #ifndef NO_HMI
index 379e893..50f916a 100644 (file)
@@ -64,7 +64,10 @@ NamedVideoPipePath = /tmp/video_stream_pipe
 NamedAudioPipePath = /tmp/audio_stream_pipe
 VideoStreamFile = video_stream_file
 AudioStreamFile = audio_stream_file
-RecordingFile = audio.8bit.wav
+; Recording file source (used for audio pass thru emulation only)
+RecordingFileSource = audio.8bit.wav
+; Recording file for audio pass thru
+RecordingFileName = record.wav
 
 
 ; HelpPromt and TimeOutPrompt is a vector of strings separated by comma