Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Feature/low voltage #2418

Merged
merged 18 commits into from
Aug 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/appMain/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,19 @@ include_directories(
${default_media_inc}
${MESSAGE_BROKER_INCLUDE_DIRECTORY}
${BOOST_INCLUDE_DIR}
${CMAKE_SOURCE_DIR}/src
)

collect_sources(SOURCES "${CMAKE_CURRENT_SOURCE_DIR}")
# Create object library
add_library("LowVoltageHandlerObjLibrary" OBJECT ${CMAKE_CURRENT_SOURCE_DIR}/low_voltage_signals_handler.cc
)

set (SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/main.cc
${CMAKE_CURRENT_SOURCE_DIR}/life_cycle_impl.cc
${CMAKE_CURRENT_SOURCE_DIR}/signal_handlers.cc
$<TARGET_OBJECTS:LowVoltageHandlerObjLibrary>
)

cmake_policy(PUSH)
# make link_directories() treat paths relative to the source dir
Expand Down Expand Up @@ -243,3 +253,6 @@ else()
GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
endif()

if(BUILD_TESTS)
add_subdirectory(test)
endif()
105 changes: 44 additions & 61 deletions src/appMain/life_cycle.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, Ford Motor Company
* Copyright (c) 2018, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -32,77 +32,60 @@

#ifndef SRC_APPMAIN_LIFE_CYCLE_H_
#define SRC_APPMAIN_LIFE_CYCLE_H_
#include <thread>
#include <unistd.h>
#include "utils/macro.h"

#include "config_profile/profile.h"
#include "hmi_message_handler/hmi_message_handler_impl.h"
#if (defined(MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI))
#include "hmi_message_handler/messagebroker_adapter.h"
#endif // #if ( defined (MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI) )
#include "application_manager/application_manager_impl.h"
#include "connection_handler/connection_handler_impl.h"
#include "protocol_handler/protocol_handler_impl.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_default.h"
#include "media_manager/media_manager_impl.h"
#ifdef TELEMETRY_MONITOR
#include "telemetry_monitor/telemetry_monitor.h"
#endif

#ifdef ENABLE_SECURITY
namespace security_manager {
class CryptoManager;
class SecurityManagerImpl;
} // namespace security_manager
#endif // ENABLE_SECURITY
namespace main_namespace {

namespace utils {
class SystemTimeHandler;
} // namespace utils
/**
* Class responsible for all system components creation,
* start, stop, suspend and restore
*/

namespace main_namespace {
class LifeCycle {
public:
LifeCycle(const profile::Profile& profile);
bool StartComponents();
virtual ~LifeCycle() {}

/**
* Initialize MessageBroker component
* @return true if success otherwise false.
*/
bool InitMessageSystem();
* Creates and starts all system components
* @return true if all components started successfully
* otherwise false.
*/
virtual bool StartComponents() = 0;

/**
* \brief Main loop
*/
void Run();
void StopComponents();
* Initializes MessageBroker component
* @return true if success otherwise false.
*/
virtual bool InitMessageSystem() = 0;

private:
transport_manager::TransportManagerImpl* transport_manager_;
protocol_handler::ProtocolHandlerImpl* protocol_handler_;
connection_handler::ConnectionHandlerImpl* connection_handler_;
application_manager::ApplicationManagerImpl* app_manager_;
#ifdef ENABLE_SECURITY
security_manager::CryptoManager* crypto_manager_;
security_manager::SecurityManager* security_manager_;
#endif // ENABLE_SECURITY
hmi_message_handler::HMIMessageHandlerImpl* hmi_handler_;
hmi_message_handler::HMIMessageAdapter* hmi_message_adapter_;
media_manager::MediaManagerImpl* media_manager_;
resumption::LastState* last_state_;
#ifdef TELEMETRY_MONITOR
telemetry_monitor::TelemetryMonitor* telemetry_monitor_;
#endif // TELEMETRY_MONITOR
/**
* @brief Main loop
*/
virtual void Run() = 0;

#ifdef MESSAGEBROKER_HMIADAPTER
hmi_message_handler::MessageBrokerAdapter* mb_adapter_;
std::thread* mb_adapter_thread_;
#endif // MESSAGEBROKER_HMIADAPTER
/**
* Stops all system components
*/
virtual void StopComponents() = 0;

/**
* Makes appropriate actions when Low Voltage signal received:
* Stops all SDL activities except of waiting of UNIX signals
* from HMI
*/
virtual void LowVoltage() = 0;

const profile::Profile& profile_;
DISALLOW_COPY_AND_ASSIGN(LifeCycle);
/**
* Makes appropriate actions when Wake Up signal received:
* Restores all SDL activities stopped due to LOW VOLTAGE
* from HMI
*/
virtual void WakeUp() = 0;

/**
* Makes appropriate actions when Ignition Off signal received:
* Triggers all SDL components stop and deletion
*/
virtual void IgnitionOff() = 0;
};
} // namespace main_namespace

Expand Down
46 changes: 38 additions & 8 deletions src/appMain/life_cycle.cc → src/appMain/life_cycle_impl.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017, Ford Motor Company
* Copyright (c) 2018, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -30,7 +30,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/

#include "life_cycle.h"
#include "appMain/life_cycle_impl.h"
#include "utils/signals.h"
#include "config_profile/profile.h"
#include "application_manager/system_time/system_time_handler_impl.h"
Expand All @@ -47,13 +47,15 @@
#include "utils/log_message_loop_thread.h"
#endif // ENABLE_LOG

#include "appMain/low_voltage_signals_handler.h"

using threads::Thread;

namespace main_namespace {

CREATE_LOGGERPTR_GLOBAL(logger_, "SDLMain")

LifeCycle::LifeCycle(const profile::Profile& profile)
LifeCycleImpl::LifeCycleImpl(const profile::Profile& profile)
: transport_manager_(NULL)
, protocol_handler_(NULL)
, connection_handler_(NULL)
Expand All @@ -76,7 +78,7 @@ LifeCycle::LifeCycle(const profile::Profile& profile)
, profile_(profile) {
}

bool LifeCycle::StartComponents() {
bool LifeCycleImpl::StartComponents() {
LOG4CXX_AUTO_TRACE(logger_);
DCHECK(!last_state_);
last_state_ = new resumption::LastStateImpl(profile_.app_storage_folder(),
Expand Down Expand Up @@ -165,11 +167,36 @@ bool LifeCycle::StartComponents() {
// start transport manager
transport_manager_->Visibility(true);

LowVoltageSignalsOffset signals_offset{profile_.low_voltage_signal_offset(),
profile_.wake_up_signal_offset(),
profile_.ignition_off_signal_offset()};

low_voltage_signals_handler_.reset(
new LowVoltageSignalsHandler(*this, signals_offset));

return true;
}

void LifeCycleImpl::LowVoltage() {
LOG4CXX_AUTO_TRACE(logger_);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please keep this log, but identify and remove others logs that happens after sdl receives low voltage signal.
we can keep the logs after sdl receives wake up signal.

transport_manager_->Visibility(false);
app_manager_->OnLowVoltage();
}

void LifeCycleImpl::IgnitionOff() {
LOG4CXX_AUTO_TRACE(logger_);
kill(getpid(), SIGINT);
}

void LifeCycleImpl::WakeUp() {
LOG4CXX_AUTO_TRACE(logger_);
app_manager_->OnWakeUp();
transport_manager_->Reinit();
transport_manager_->Visibility(true);
}

#ifdef MESSAGEBROKER_HMIADAPTER
bool LifeCycle::InitMessageSystem() {
bool LifeCycleImpl::InitMessageSystem() {
mb_adapter_ = new hmi_message_handler::MessageBrokerAdapter(
hmi_handler_, profile_.server_address(), profile_.server_port());

Expand Down Expand Up @@ -206,16 +233,16 @@ void sig_handler(int sig) {
}
} // namespace

void LifeCycle::Run() {
void LifeCycleImpl::Run() {
LOG4CXX_AUTO_TRACE(logger_);
// Register signal handlers and wait sys signals
// from OS
if (!utils::WaitTerminationSignals(&sig_handler)) {
if (!utils::Signals::WaitTerminationSignals(&sig_handler)) {
LOG4CXX_FATAL(logger_, "Fail to catch system signal!");
}
}

void LifeCycle::StopComponents() {
void LifeCycleImpl::StopComponents() {
LOG4CXX_AUTO_TRACE(logger_);

DCHECK_OR_RETURN_VOID(hmi_handler_);
Expand Down Expand Up @@ -284,6 +311,9 @@ void LifeCycle::StopComponents() {
delete app_manager_;
app_manager_ = NULL;

LOG4CXX_INFO(logger_, "Destroying Low Voltage Signals Handler.");
low_voltage_signals_handler_.reset();

LOG4CXX_INFO(logger_, "Destroying HMI Message Handler and MB adapter.");

#ifdef MESSAGEBROKER_HMIADAPTER
Expand Down
113 changes: 113 additions & 0 deletions src/appMain/life_cycle_impl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/*
* Copyright (c) 2018, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following
* disclaimer in the documentation and/or other materials provided with the
* distribution.
*
* Neither the name of the Ford Motor Company nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef SRC_APPMAIN_LIFE_CYCLE_IMPL_H_
#define SRC_APPMAIN_LIFE_CYCLE_IMPL_H_

#include "appMain/life_cycle.h"

#include <unistd.h>
#include <thread>
#include <memory>
#include "utils/macro.h"

#include "config_profile/profile.h"
#include "hmi_message_handler/hmi_message_handler_impl.h"
#if (defined(MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI))
#include "hmi_message_handler/messagebroker_adapter.h"
#endif // #if ( defined (MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI) )
#include "application_manager/application_manager_impl.h"
#include "connection_handler/connection_handler_impl.h"
#include "protocol_handler/protocol_handler_impl.h"
#include "transport_manager/transport_manager.h"
#include "transport_manager/transport_manager_default.h"
#include "media_manager/media_manager_impl.h"
#ifdef TELEMETRY_MONITOR
#include "telemetry_monitor/telemetry_monitor.h"
#endif

#ifdef ENABLE_SECURITY
namespace security_manager {
class CryptoManager;
class SecurityManagerImpl;
} // namespace security_manager
#endif // ENABLE_SECURITY

namespace utils {
class SystemTimeHandler;
} // namespace utils

namespace main_namespace {

class LowVoltageSignalsHandler;

class LifeCycleImpl : public LifeCycle {
public:
explicit LifeCycleImpl(const profile::Profile& profile);

bool StartComponents() OVERRIDE;
bool InitMessageSystem() OVERRIDE;
void Run() OVERRIDE;
void StopComponents() OVERRIDE;
void LowVoltage() OVERRIDE;
void WakeUp() OVERRIDE;
void IgnitionOff() OVERRIDE;

private:
transport_manager::TransportManagerImpl* transport_manager_;
protocol_handler::ProtocolHandlerImpl* protocol_handler_;
connection_handler::ConnectionHandlerImpl* connection_handler_;
application_manager::ApplicationManagerImpl* app_manager_;
std::unique_ptr<LowVoltageSignalsHandler> low_voltage_signals_handler_;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why this one is unique_ptr, but others are normal pointers?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@yang1070 because std::unique_ptr<LowVoltageSignalsHandler> low_voltage_signals_handler_; is the new code and the other pointers are old code. Therefore I don't want to make changes unrelated to feature.

#ifdef ENABLE_SECURITY
security_manager::CryptoManager* crypto_manager_;
security_manager::SecurityManager* security_manager_;
#endif // ENABLE_SECURITY
hmi_message_handler::HMIMessageHandlerImpl* hmi_handler_;
hmi_message_handler::HMIMessageAdapter* hmi_message_adapter_;
media_manager::MediaManagerImpl* media_manager_;
resumption::LastState* last_state_;
#ifdef TELEMETRY_MONITOR
telemetry_monitor::TelemetryMonitor* telemetry_monitor_;
#endif // TELEMETRY_MONITOR

#ifdef MESSAGEBROKER_HMIADAPTER
hmi_message_handler::MessageBrokerAdapter* mb_adapter_;
std::thread* mb_adapter_thread_;
#endif // MESSAGEBROKER_HMIADAPTER

const profile::Profile& profile_;
DISALLOW_COPY_AND_ASSIGN(LifeCycleImpl);
};
} // namespace main_namespace

#endif // SRC_APPMAIN_LIFE_CYCLE_IMPL_H_
Loading