2 * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 ///////////////////////////////////////////////////////////////////////////////
18 /// \ingroup tag_SystemManager
19 /// \brief This file provides support for System Manager business logic.
21 ///////////////////////////////////////////////////////////////////////////////
23 #ifndef __SS_SYSTEM_MANAGER_H__ // NOLINT
24 #define __SS_SYSTEM_MANAGER_H__
26 #include <system_service/ss_heartbeat_service_protocol.h>
27 #include <system_service/ss_system_manager_if.h>
28 #include <system_service/ss_error_event_common_local.h>
29 #include <system_service/ss_system_timer.h>
30 #include <crashdetector/ss_crashdetector.h>
31 #include <system_service/ss_system_manager_protocol.h>
32 #include <system_service/ss_power_service_protocol.h>
33 #include <heartbeat/ss_hb_if.h>
34 #include <other_service/PosixBasedOS001ClockCycleApi.h>
35 #include <system_service/ss_string_maps.h>
36 #include <system_service/ss_templates.h>
37 #include <system_service/ss_system_manager_conf.h>
38 #include <system_service/ss_system_manager_protocol_local.h>
39 #include <system_service/ss_logger_store_logs.h>
40 #include <native_service/ns_logger_if.h>
41 #include <native_service/frameworkunified_types.h>
42 #include <power_hal.h>
56 #include "ss_sm_config.h"
57 #include "ss_sm_systemmanagerlog.h"
58 #include "ss_system_thread_info.h"
59 #include "ss_system_memory_monitor.h"
60 #include "ss_sm_dynamic_launcher.h"
62 static_assert((SS_SM_PROG_UPDATE_STATE_NONE == PWR_PROGUPDATE_STATE_NONE),
63 "SS_SM_PROG_UPDATE_STATE_NONE should be equal to "
64 "PWR_PROGUPDATE_STATE_NONE");
65 static_assert((SS_SM_PROG_UPDATE_STATE_UPDATED == PWR_PROGUPDATE_STATE_UPDATED),
66 "SS_SM_PROG_UPDATE_STATE_UPDATED should be equal to "
67 "PWR_PROGUPDATE_STATE_UPDATED");
68 static_assert((SS_SM_PROG_UPDATE_STATE_MAP_UPDATED ==
69 PWR_PROGUPDATE_STATE_MAP_UPDATED),
70 "SS_SM_PROG_UPDATE_STATE_MAP_UPDATED should be equal to "
71 "PWR_PROGUPDATE_STATE_MAP_UPDATED");
72 static_assert((SS_SM_PROG_UPDATE_STATE_MAPDIFF_UPDATED ==
73 PWR_PROGUPDATE_STATE_MAPDIFF_UPDATED),
74 "SS_SM_PROG_UPDATE_STATE_MAPDIFF_UPDATED should be equal to "
75 "PWR_PROGUPDATE_STATE_MAPDIFF_UPDATED");
77 #define SM_SHUTDOWN_COMPLETE_MONITOR_TIMEOUT 60
80 eSM_TIMER_GROUP_MONITOR = 0x00
81 , eSM_TIMER_PROCESS_LAUNCH_MONITOR
82 , eSM_TIMER_HEARTBEAT_MONITOR
83 , eSM_TIMER_PROCESSLAUNCHER_MONITOR
84 , eSM_TIMER_CLIENT_START_MONITOR
85 , eSM_TIMER_NPP_STATUS_CHECK_MONITOR
86 , eSM_TIMER__CWORD56__HEARTBEAT_RESPONSE
87 , eSM_TIMER_LAUNCH_GROUP_TRIGGER_PROC_RESP_TIMER
88 , eSM_TIMER_GROUP_LAUNCH_WAIT_TIMER
89 , eSM_TIMER_MODULE_CONNECT_WAIT_TIMER
90 , eSM_TIMER_START_RESP_MONITOR_WAIT_TIMER
91 , eSM_TIMER_SHUTDOWN_COMPLETE_MONITOR
92 , eSM_TIMER_CLIENT_STOP_MONITOR
97 eSM_ERROR_EVENT_TIMER_LOGGER_START_REQ
98 , eSM_ERROR_EVENT_TIMER_DEBUG_DUMP_RSPN
99 , eSM_ERROR_EVENT_TIMER_BOOT_MICRO_LOG_RSPN
100 , eSM_ERROR_EVENT_TIMER_CORE_FILE_POLL
101 , eSM_ERROR_EVENT_TIMER_END
102 } ESMErrorEventTimers;
105 eErrorEventResetTypeNone = 0,
106 eErrorEventResetTypeHard
107 } EErrorEventResetType;
109 typedef enum _ESMInternalProtocol {
110 SS_SM_SendTriggerToSelf = SS_SM_PROTOCOL_INTERFACE_END ///< System Manager to System Manager
111 } ESMInternalProtocol;
113 typedef enum _SS_SMGroupHirarchy {
114 SS_SM_INVALID_GROUP = 0
115 , SS_SM_INITIAL_GROUP
118 } SS_SMGroupHirarchy;
120 typedef enum _SS_SMModuleState {
121 SS_SM_READY_TO_LAUNCH_APP = 0x00
122 , SS_SM_APPS_LAUNCH_IN_PROGRESS
123 , SS_SM_APPS_LAUNCHED_READY_TO_START
124 , SS_SM_APPS_START_IN_PROGRESS
125 , SS_SM_APPS_START_COMPLETE
126 , SS_SM_APPS_STOPPING_AT__CWORD56__REQ
127 , SS_SM_APPS_STOPPING_AT_INTERNAL_REQ
128 , SS_SM_WAITING_FOR_CRITICAL_APPS_AT__CWORD56__REQ
129 , SS_SM_WAITING_FOR_CRITICAL_APPS_AT_INTERNAL_REQ
130 , SS_SM_APPS_PRE_START_IN_PROGRESS
131 , SS_SM_APPS_PRE_STOP_IN_PROGRESS
132 , SS_SM_APPS_PRE_RUN_COMPLETE
133 , SS_SM_APPS_BACKGROUND_START_IN_PROGRESS
134 , SS_SM_APPS_BACKGROUND_STOP_IN_PROGRESS
135 , SS_SM_APPS_BACKGROUND_RUN_COMPLETE
138 typedef struct _SMProcessExitInfo {
139 _SMProcessExitInfo() {
142 this->signalNumber = 0;
143 this->binaryFileName[0] = '\0';
149 CHAR binaryFileName[MAX_PATH_LENGTH];
152 typedef struct _SMLoggingInfo { // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
156 this->signalNumber = 0;
157 this->binaryFileName[0] = '\0';
158 this->messageStr = "";
159 this->suffixStr = "";
161 this->resetReason = e_SS_SM_CPU_RESET_REASON_INVALID;
167 CHAR binaryFileName[MAX_PATH_LENGTH];
168 std::string messageStr;
169 std::string suffixStr;
171 ESMCpuResetReason resetReason;
174 struct ERROR_EVENT_INFO { // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
176 m_eventEnqueueTimeStamp(""),
177 m_moduleQueueName(""),
178 m_eventType(eErrorEventTypeMaxValue),
179 m_prio(eErrorEventPrioDefault),
180 m_uniqueCycles(ClockCycle()), // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
181 m_errorEventResetType(eErrorEventResetTypeNone) { // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
184 std::string m_eventEnqueueTimeStamp;
185 std::string m_moduleQueueName;
186 EErrorEventType m_eventType;
187 SMLoggingInfo m_loggingInfo;
188 EErrorEventPrio m_prio;
189 UI_64 m_uniqueCycles;
190 EErrorEventResetType m_errorEventResetType;
193 struct ERROR_EVENT_COMPARE {
194 bool operator() (const ERROR_EVENT_INFO& lhs,
195 const ERROR_EVENT_INFO& rhs) const {
196 if ((eErrorEventPrioDefault == lhs.m_prio) &&
197 (eErrorEventPrioDefault == rhs.m_prio)) {
198 return (lhs.m_uniqueCycles < rhs.m_uniqueCycles);
200 return (lhs.m_prio > rhs.m_prio);
205 typedef std::set<ERROR_EVENT_INFO, ERROR_EVENT_COMPARE> ERROR_EVENT_QUEUE;
206 typedef ERROR_EVENT_QUEUE::iterator ERROR_EVENT_QUEUE_ITER;
207 typedef std::pair<ERROR_EVENT_QUEUE_ITER, BOOL> ERROR_EVENT_QUEUE_RET;
209 typedef EFrameworkunifiedStatus (*HndlrCb)(HANDLE hApp);
210 typedef EFrameworkunifiedStatus (*FncCbType2)(HANDLE hApp, UI_32 f_UI_32);
211 typedef BOOL (*FncCbType3)(UI_32 f_UI_32);
213 typedef std::pair<SS_SystemManagerProtocol, Pwr_ServiceSetInterface> SM_POWER_EVENT_INFO;
214 typedef std::queue<SM_POWER_EVENT_INFO> SM_POWER_EVENT_QUEUE;
219 std::string m_sender;
222 typedef std::list<std::string> ErrorGroupList;
223 typedef ErrorGroupList::iterator ErrorGroupListIter;
225 typedef std::vector<Ts_cmdHist> cmdHist;
226 typedef cmdHist::iterator cmdHistIter;
228 typedef std::vector<std::string> HBList;
229 typedef HBList::iterator HBListIter;
231 class CVersionNumInfo {
233 CVersionNumInfo() : m_VersionNumber(0), m_eSystemmanagerStatus(eFrameworkunifiedStatusErrOther) {}
234 CVersionNumInfo(SS_VersionNumberType f_vn, EFrameworkunifiedStatus f_eStatus)
235 : m_VersionNumber(f_vn), m_eSystemmanagerStatus(f_eStatus) {}
237 // System Manager's local data store; write once on initialization,
238 // read as needed at clients' request
239 SS_VersionNumberType m_VersionNumber;
240 EFrameworkunifiedStatus m_eSystemmanagerStatus; // Validity / status of version number
243 #define SS_SM_RELAUNCH_NO_LIMIT -1
244 typedef struct _PreLaunchModuleParams {
245 _PreLaunchModuleParams() {
246 this->LaunchFunc = NULL;
248 this->binaryFileName = "";
249 this->critical = FALSE;
250 this->relaunchLimit = 0;
252 this->relaunchCount = 0;
255 int (*LaunchFunc)(); // Launching function
256 std::string name; // Process name
257 std::string binaryFileName; // Binary file name
258 BOOL critical; // Reboot attribute
259 int relaunchLimit; // Maximum number of Relaunch
261 int relaunchCount; // Count of Relaunching
262 } PreLaunchModuleParams;
264 typedef std::list<PreLaunchModuleParams> PreLaunchModuleList;
265 typedef PreLaunchModuleList::iterator PreLaunchModuleListIter;
267 typedef struct _GroupRelaunchModuleParams {
268 _GroupRelaunchModuleParams() {
270 this->bIsKilled = FALSE;
273 std::string name; // Process name
274 BOOL bIsKilled; // Flag indicates while forced quit process
275 } GroupRelaunchModuleParams;
277 typedef std::list<GroupRelaunchModuleParams> GroupRelaunchModuleList;
278 typedef GroupRelaunchModuleList::iterator GroupRelaunchModuleListIter;
281 class CSystemManager {
283 static std::string m_bootOpt; // BOOT OPTION
286 virtual ~CSystemManager();
288 static CSystemManager & GetInstance();
289 EFrameworkunifiedStatus Initialize(HANDLE hApp);
290 void Initialize_memory(HANDLE hApp, bool* l_isInitFail, EFrameworkunifiedStatus* l_eStatus, BOOL isIllReset);
291 void Initialize_callbacks(HANDLE hApp, bool *l_isInitFail, EFrameworkunifiedStatus *l_eStatus);
292 /// < Process Launcher Thread Callbacks
293 EFrameworkunifiedStatus OnModuleLaunchResponse(HANDLE hApp);
294 EFrameworkunifiedStatus OnTerminateModuleResponse(HANDLE hApp);
295 EFrameworkunifiedStatus OnReLaunchModuleResponse(HANDLE hApp);
296 EFrameworkunifiedStatus PerformModuleLaunchRespProcessing(HANDLE hApp,
297 GroupLaunchMapIter & f_GroupIter, // NOLINT
298 ModuleLaunchListIter & f_ModuleIter, // NOLINT
300 EFrameworkunifiedStatus OnModuleStatusResponse(HANDLE hApp);
301 EFrameworkunifiedStatus OnGroupLaunchTimerExpiry(HANDLE hApp);
302 EFrameworkunifiedStatus OnLaunchGroup(HANDLE hApp);
303 EFrameworkunifiedStatus OnLaunchGroupSelfTrigger(HANDLE hApp);
304 EFrameworkunifiedStatus OnProcessLaunchTimerExpiry(HANDLE hApp);
305 EFrameworkunifiedStatus OnHeartBeatMonitorTimerExpiry(HANDLE hApp);
306 EFrameworkunifiedStatus OnProcessLaunchMonitorTimerExpiry(HANDLE hApp);
307 EFrameworkunifiedStatus OnHeartBeatThreadHeartbeatResponse(HANDLE hApp);
308 EFrameworkunifiedStatus OnCheckAvailResponse(HANDLE f_hApp);
310 EFrameworkunifiedStatus OnProcessLauncherThreadHeartbeatResponse(HANDLE hApp);
311 EFrameworkunifiedStatus OnClientStartMonitorTimerExpiry(HANDLE hApp);
312 EFrameworkunifiedStatus OnClientStopMonitorTimerExpiry(HANDLE hApp);
313 EFrameworkunifiedStatus OnNPPStatusCheckMonitorTimerExpiry(HANDLE hApp);
314 EFrameworkunifiedStatus OnPowerServiceAvailableNotify(HANDLE hApp);
315 EFrameworkunifiedStatus OnLVI1Notify(HANDLE hApp);
316 EFrameworkunifiedStatus OnLVI2Notify(HANDLE hApp);
318 EFrameworkunifiedStatus OnModuleStartCompleteResponse(HANDLE hApp); /// Process start complete from client
319 EFrameworkunifiedStatus OnModuleStopCompleteResponse(HANDLE hApp); /// Process stop Complete from client
320 EFrameworkunifiedStatus OnGetStartExtInfo(HANDLE hApp);
321 EFrameworkunifiedStatus OnGetStopExtInfo(HANDLE hApp);
322 EFrameworkunifiedStatus OnModuleStopCompleteNotification(HANDLE hApp);
323 EFrameworkunifiedStatus ProcessModuleStopCompleteResponse(HANDLE hApp,
325 EFrameworkunifiedStatus ModuleCompleteResponse(HANDLE hApp,
326 ModuleLaunchListIter f_ModuleListIter,
327 SMModuleState f_moduleState,
328 FncCbType3 f_isGroupDoneFnc,
329 FncCbType2 f_groupDoneFnc,
330 PCSTR f_sCompleteTypeText);
332 EFrameworkunifiedStatus ProcessGroupOnModuleStopResponse(HANDLE hApp, UI_32 f_groupID);
336 EFrameworkunifiedStatus OnLaunchGroupTriggerProcessResponseTimerExpiry(HANDLE hApp);
338 EFrameworkunifiedStatus OnNppStopComplete(HANDLE hApp); /// Process stop Complete from NPPService
339 EFrameworkunifiedStatus OnOpenSession(HANDLE hApp); /// Process open session request
340 EFrameworkunifiedStatus OnCloseSession(HANDLE hApp); /// Process close session acknowledgment
342 EFrameworkunifiedStatus CloseApplication(HANDLE hApp);
343 EFrameworkunifiedStatus OnGetAppInfo(HANDLE hApp);
345 /// < Heartbeat Thread Callbacks
346 EFrameworkunifiedStatus OnHeartBeatErrorReport(HANDLE hApp);
348 EFrameworkunifiedStatus OnCurrentSMStateQuery(HANDLE hApp);
350 EFrameworkunifiedStatus OnNPPReadyStatusCallback(HANDLE hApp);
351 EFrameworkunifiedStatus OnNPPReadyEventCallback(HANDLE hApp);
352 EFrameworkunifiedStatus OnWakeupCallback(HANDLE hApp);
353 EFrameworkunifiedStatus OnPowerRequestCallback(HANDLE hApp);
354 EFrameworkunifiedStatus OnBackupMgrAvailCallback(HANDLE hApp);
355 EFrameworkunifiedStatus OnShutdownModulesRequest(HANDLE hApp);
356 EFrameworkunifiedStatus OnSystemModeInfoRequest(HANDLE hApp);
357 EFrameworkunifiedStatus ClearDramBackupInfo(HANDLE hApp);
358 EFrameworkunifiedStatus OnInitCompReportCallback(HANDLE hApp);
359 EFrameworkunifiedStatus SetEnvVariableForVupMode(BOOL bIsVupMode);
360 static int CreateRtUsb();
361 EFrameworkunifiedStatus SecureChipOff();
362 EFrameworkunifiedStatus CallStopCompleteHandler(HANDLE hApp, BOOL bISDetectTimeout = FALSE);
364 EFrameworkunifiedStatus On_CWORD56_HeartBeatRequest(HANDLE hApp);
365 EFrameworkunifiedStatus On_CWORD56_HeartBeatResponseIntervalTimerExpiry(HANDLE hApp);
366 EFrameworkunifiedStatus OnGroupLaunchWaitTimeout(HANDLE hApp);
367 EFrameworkunifiedStatus OnModuleConnectWaitTimeout(HANDLE hApp);
368 EFrameworkunifiedStatus OnStartRespMonitorTimeout(HANDLE hApp);
369 EFrameworkunifiedStatus OnShutdownCompleteMonitorTimeout(HANDLE hApp);
370 EFrameworkunifiedStatus PerformCpuReset(HANDLE hApp, ESMCpuResetReason f_eSmCpuResetReason, std::string f_messageStr = ""); // NOLINT
371 EFrameworkunifiedStatus OnCpuResetRequest(HANDLE hApp);
372 EFrameworkunifiedStatus OnSetDataResetModeRequest(HANDLE hApp);
373 EFrameworkunifiedStatus OnSetProgUpdateStateRequest(HANDLE hApp);
374 EFrameworkunifiedStatus OnLaunchGroupTriggerProcessResponse(HANDLE hApp);
375 EFrameworkunifiedStatus OnSetNextWakeupTypeRequest(HANDLE hApp);
377 bool GetDramPowerStatusInfo(const HANDLE h_app);
378 bool GetDramStoreStatusInfo(const HANDLE h_app);
379 bool GetSyscomPowerStatusInfo(const HANDLE h_app);
381 // Start Confirmation, Get _CWORD56_ Version callback functions
382 EFrameworkunifiedStatus OnSetStartupConfirmationDataRequest(HANDLE hApp);
384 void SystemManagerDebugDump(HANDLE hApp);
388 CThreadInfo m_hHeartbeatThread; // Handle to Heartbeat Thread
389 CThreadInfo m_hProcLauncherThread; // Handle to Process Launcher Thread
390 UI_32 m_SystemLaunchProgress; // Launch Progress of system
391 TimerCtrl * m_GroupLaunchTimer; // Launch Monitor Timer
392 UI_32 m_aTimerIDs[eSM_TIMERS_END]; // TimerIDs returned by create timer
393 PreLaunchModuleList m_PreLaunchModuleList; // List of modules that shuuld be launched preliminarily.
394 GroupRelaunchModuleList m_GroupRelaunchModuleList; // List of modules that need to relaunch
395 UI_32 m_GroupRelaunchCount; // Count for group relaunch
396 UI_32 m_GroupRelaunchLimit; // Limit for group relaunch
397 GroupLaunchMap m_MapProclaunchGrps; // Map of modules that should be launched.
398 ProcessNameMap m_MapProcNames; // Map of module binary names to queue names.
399 HANDLE m_hPowerServiceSession;
400 UI_32 m_ActiveGroupId; // Modules of Group to whom START/STOP has been sent
401 wakeInfo m_Wake; // WakeUp data from power
402 EPWR_WAKEUP_FACTOR_TYPE m_StartUpReason; // System Manager preserve start up reason
403 ESMDataResetModeInfo m_DataResetMode; // Data Reset Mode
404 SMProgUpdateState m_ProgUpdateState; // ProgUpdate State
405 ESMNextWakeupType m_NextWakeupType; // Next Progupdate State
406 ESMDramBackupStatus m_DramBackupStatus; // Dram Backup Status
407 BOOL m_isIlgReset; // Error Detected by SYS-ucon
408 ESMResetStatus m_ResetStatus; // Reset Status
409 UI_32 m_ResetCount; // Reset Count
410 T_SS_SM_INIT_HOOK_OUT_PARAM m_productCustomPrm; // Product customized parameters
412 SS_SMModuleState m_SMCurrentState; // Current state of System Manager
413 UI_32 m_MaxShutdownTime; // Calculate Max shutdown time based on info from xml
414 UI_32 m_NbrDebugDumpRspnRecv; // Total number of debug dump responses received.
415 BOOL m_isRcvModeInfo;
416 SystemModeInfo m_SystemModeInfo; // System Mode Info, SM to read data from persistent file at start
417 SS_String m_BinaryFilesPath; // Store binary files path
418 SS_String m_ConfigFilesPath; // Store config files path
419 ConfigurationData m_SMConfig; // Configuration Data of System Manager and its threads
420 HndlrCb m_pfStopCompleteHandler;
421 CVersionNumInfo m_VersionNumberStruct;
422 SS_String m_BuildInfoStr;
425 TSystemManagerCpuResetInfo m_rstPendingInfo;
427 SM_POWER_EVENT_QUEUE m_dqDeferMsg;
428 BOOL m_UsingVMPlayer; // Running on a VMPlayer ?
429 UI_32 NVM_VALID_SIGNATURE;
430 StartupConfirmationMsgStrut m_startUpConfirmationMsg;
431 EPWR_USER_MODE_TYPE m_lastUserMode;
432 EPWR_SHUTDOWN_TRIGGER_TYPE m_shutdownTrigger; // Set from Shutdown_Request
433 // msg from _CWORD56_, sent to
434 // all modules as part of
436 BOOL m_isImmediateReset;
437 BOOL m_isImmResetReq;
438 BOOL m_needReNotifyStartPrm;
440 GroupLaunchMapIter m_SSLGroupLaunchMapIterator;
441 ModuleLaunchListIter m_ModuleLaunchListIter;
442 BOOL m_bIsNPP_ServicesStarted;
443 BOOL m_bIsBackupAvail;
445 DynamicLauncher m_oSystemLauncher;
446 DynamicModuleStart m_SystemStarter;
449 ePwrServiceUserModeChangeReasonType m_userModeChangeReason;
453 cmdHist m__CWORD56_CmdHist;
454 cmdHistIter m__CWORD56_HistIter;
456 cmdHistIter m_SMHistIter;
457 cmdHist m_TimerCmdHist;
458 cmdHistIter m_TimerHistIter;
459 cmdHist m_PubCmdHist;
460 cmdHistIter m_PubHistIter;
462 cmdHistIter m_ErrHistIter;
464 pthread_mutex_t sm_hist_mutex;
468 PsmFactorT m_ResetFactor; // reset(start-up) factor.
470 void SetCmdHist(std::string cmd, cmdHist &hist, cmdHistIter &it, std::string sender); // NOLINT
472 // ILGRST or ACCOFFON Logging
473 bool StoreDebugLogs(const HANDLE h_app, SS_STORELOGS_OPE_TYPE);
475 UI_32 InProgressStateToSendMsg() const;
476 SMModuleState InProgressStateToState() const;
478 //************************************************************************
479 // Error Event Logging *
481 int m_ClProcessSigFd;
482 CSysMemoryMonitor m_SysMemMonitor;
484 UI_32 m_FreeMemAvailable;
485 off_t m_coreFileSizeBytes;
486 THbReportData m_HBReport;
487 eSMBootMicroResetReason m_BootMicroResetReason;
488 BOOL m_errorEventQueueLocked;
489 ERROR_EVENT_QUEUE m_errorEventQueue;
490 Timer m_errorEventTimers[eSM_ERROR_EVENT_TIMER_END];
491 BOOL m_isPrevErrEventCompleted;
492 EFrameworkunifiedStatus m_errorEventResult;
493 EArtifactId m_requestedArtifactId;
494 ERROR_EVENT_QUEUE_ITER m_errorEventCurrentIter;
496 // End of Error Event Logging *
497 //************************************************************************
500 ////******************************************************************////
501 //// enum<=>enum maps ////
504 // EPWR_POWER_STATE_TYPE <=> BOOL
505 std::map<EPWR_POWER_STATE_TYPE, BOOL> m_PowerType_to_SSBoolEnumMap;
506 std::map<EPWR_POWER_STATE_TYPE, EPWR_USER_MODE_TYPE>
507 m_PowerType_to_SSUserModeEnumMap;
508 std::map<BOOL, EPWR_POWER_STATE_TYPE> m_SSBool_to_PowerTypeEnumMap;
511 std::map<EPWR_USER_MODE_TYPE, BOOL> m_SSUserMode_to_SSBoolEnumMap;
512 std::map<BOOL, EPWR_USER_MODE_TYPE> m_SSBool_to_SSUserModeEnumMap;
515 //// End of enum<=>enum maps ////
516 ////******************************************************************////
518 EFrameworkunifiedStatus init_process_launcher(HANDLE hApp);
519 EFrameworkunifiedStatus start_process_launching(HANDLE hApp);
520 EFrameworkunifiedStatus init_Heartbeat(HANDLE hApp);
521 EFrameworkunifiedStatus init_crash_detector(HANDLE hApp);
522 EFrameworkunifiedStatus init_sysmem_monitor(HANDLE hApp);
523 EFrameworkunifiedStatus SendRequestToHeartBeat(HANDLE hAPP, EHBProtocolMessages, VOID *, UI_32);
524 EFrameworkunifiedStatus send_launch_status(HANDLE hApp, UI_32 u32LaunchState);
526 EFrameworkunifiedStatus register_all_notification_callbacks(HANDLE hApp);
527 VOID SMStateStartCompleteEntry(HANDLE hApp);
528 VOID SMStateEntry(HANDLE hApp, SS_SMModuleState l_SMState);
529 VOID SMStateExit(HANDLE hApp, SS_SMModuleState l_SMState);
530 VOID SMSetState(HANDLE hApp, SS_SMModuleState l_SMState);
533 EFrameworkunifiedStatus BeginStartup(HANDLE hApp);
534 EFrameworkunifiedStatus start_all_modules_of_group(HANDLE hApp, UI_32 f_ui32GroupNumber);
535 EFrameworkunifiedStatus send_power_request_complete_response(HANDLE hApp,
537 BOOL have_all_services_start_completed(const SMModuleState f_moduleState);
539 // Power Off from Power
540 EFrameworkunifiedStatus PublishPowerOnOffNotification(HANDLE hApp);
542 // Shutdown from Power
543 EFrameworkunifiedStatus stop_all_modules_of_group(HANDLE hApp);
544 UI_32 calculate_max_shutdown_time();
545 BOOL is_service_shutdown_ready(ModuleLaunchListIter &modIte); // NOLINT
546 BOOL have_critical_services_stopped();
547 VOID check_all_groups_have_stopped(HANDLE hApp);
548 EFrameworkunifiedStatus perform_force_reset(HANDLE hApp);
549 EFrameworkunifiedStatus send_shutdown_complete_response(HANDLE hApp);
550 EFrameworkunifiedStatus SendShutdownResponseMessage(HANDLE hApp);
552 PsmFactorT GetResetFactor(PCSTR f_module_name, BOOL f_user_reset);
553 PsmFactorT GetResetFactor(const ModuleLaunchListIter f_module_iter, BOOL f_user_reset);
555 EFrameworkunifiedStatus ValidateUserModeMessage(HANDLE hApp, EPWR_USER_MODE_TYPE &l_eUserModeState); // NOLINT
557 VOID SetStartGroup();
559 VOID ReadPathFromEnvironmentVariables();
560 SS_String ReadConfigDataFileNameFromEnvironmentVariable();
561 SS_String ReadLaunchConfigFileNameFromEnvironmentVariable();
564 VOID ReadUsingVMPlayerEnvironmentVariable();
566 VOID InitiateAllGroupsShutdown(HANDLE hApp);
567 VOID SendDeferMsg(HANDLE hApp);
568 EFrameworkunifiedStatus GetVersionNumber(SS_VersionNumberType &f_VersionNumber); // NOLINT
569 EFrameworkunifiedStatus GetBuildInfo(std::string &f_BuildInfoStr); // NOLINT
570 EFrameworkunifiedStatus RegisterCallbacksForRequester(HANDLE hApp, PCSTR pRequester);
571 EFrameworkunifiedStatus SetSystemModeInfoStruct();
573 EFrameworkunifiedStatus PerformLaunchProcedure(HANDLE hApp
574 , ModuleLaunchListIter f_ModuleIterator
575 , SS_String & f_stopCompName); // NOLINT
577 EFrameworkunifiedStatus PerformTerminateProcedure(HANDLE hApp
578 , ModuleLaunchListIter f_ModuleIterator
579 , SS_String & f_availabilityName
580 , SS_String & f_stopCompName); // NOLINT
582 EFrameworkunifiedStatus SendRequestToLauncher(HANDLE hApp
583 , ModuleLaunchListIter f_ModuleIterator
584 , ESMPLThreadCommandIds f_CommandId
585 , SS_String f_CommandIdStr);
587 EFrameworkunifiedStatus FindNameOfTerminatedProcess(SI_32 pid, SS_String &f_ModuleName); // NOLINT
589 EFrameworkunifiedStatus GetBinaryNameOfProcess(SS_String f_ModuleQueueName,
590 SS_String &f_ModuleBinaryName); // NOLINT
592 EFrameworkunifiedStatus RemoveModuleEntryFromHB(HANDLE hApp, const CHAR *f_ModuleName);
594 EFrameworkunifiedStatus PublishUserModeNotification(HANDLE hApp);
595 EFrameworkunifiedStatus PerformPowerOnOffUserModePublication(
597 const char * p_NotificationStr);
598 EFrameworkunifiedStatus SendSystemModeInfoResponse(
600 EPWR_STARTUP_STAGE_TYPE f_startupStage);
602 VOID SYSTEMMANAGERLOG_StartupConfirmationMsg(EPWR_SC_MSG_STRUCT & f_scMsg); // NOLINT
603 VOID LogGroupModulesState(UI_32 f_groupId, std::string pStr);
604 VOID LogAllGroupModulesState(std::string pStr);
606 EFrameworkunifiedStatus ProcessGroupAsStarted(HANDLE hApp
607 , GroupLaunchMapIter f_GroupIterator);
608 EFrameworkunifiedStatus ProcessGroupAsStarted(HANDLE hApp
610 EFrameworkunifiedStatus GetModuleIterator(PCSTR f_moduleName, ModuleLaunchListIter & f_moduleIter); // NOLINT
611 BOOL IsGroupStarted(UI_32 f_groupId);
612 BOOL IsGroupStopped(UI_32 f_groupId);
613 EFrameworkunifiedStatus ResetModulesStateToConnected(HANDLE hApp);
615 EFrameworkunifiedStatus GetTimeStamp(std::string& TimeStamp); // NOLINT
616 std::string GetErrorEventInString(UI_32 &ErrorEventType); // NOLINT
617 EFrameworkunifiedStatus GetLastSourceInfo(SS_SOURCE &source_type); // NOLINT
619 // Return True when Module is in correct / appropriate state wrt SM state
620 // return false otherwise
621 BOOL GetModuleCondition(ModuleLaunchListIter & f_ModuleIter); // NOLINT
623 VOID LogESystemmanagerStatusEnums();
624 VOID LogProtocolIDs();
626 VOID SystemmanagerLogString(TFrameworkunifiedZone f_zone,
628 std::string &f_text); // NOLINT
630 inline BOOL is_current_state(SS_SMModuleState SMState) {
631 return (m_SMCurrentState == SMState);
634 //**************************************************************************
635 // Get results from TestClient *
637 EFrameworkunifiedStatus add_state_information_to_response(CHAR *f_MessageResponse) const;
638 EFrameworkunifiedStatus construct_get_result_response(CHAR *f_MessageResponse); // *
639 EFrameworkunifiedStatus open_session_with_sm_test_client(HANDLE hApp, // *
640 PCSTR pRequester); // *
642 // End of 'Get results from TestClient' *
643 //**************************************************************************
645 //************************************************************************
646 // Error Event Logging *
648 EFrameworkunifiedStatus ErrorEventInit(HANDLE f_hApp);
650 EFrameworkunifiedStatus OnHeartBeatErrorDetected(HANDLE f_hApp);
651 EFrameworkunifiedStatus OnProcessTermDetected(HANDLE f_hApp);
652 BOOL isPreLaunchedProcess(int f_pid);
653 EFrameworkunifiedStatus OnPreLaunchedProcessTermDetected(HANDLE f_hApp,
654 SMProcessExitInfo &f_procExitInfo, // NOLINT
656 EFrameworkunifiedStatus OnProcessCrashDetected(HANDLE f_hApp,
657 SMProcessExitInfo &f_procExitInfo); // NOLINT
658 EFrameworkunifiedStatus OnProcessExitDetected(HANDLE f_hApp,
659 SMProcessExitInfo &f_procExitInfo); // NOLINT
661 EFrameworkunifiedStatus OnUserInvokedLoggingRequest(HANDLE f_hApp);
663 EFrameworkunifiedStatus OnEelExportRequest(HANDLE f_hApp);
665 EFrameworkunifiedStatus OnSystemmanagerEmmcLogsRequest(HANDLE f_hApp);
666 EFrameworkunifiedStatus OnSystemmanagerClearLogsRequest(HANDLE f_hApp);
668 EFrameworkunifiedStatus OnDiagLoggingRequest(HANDLE f_hApp);
669 EFrameworkunifiedStatus OnCANLoggingRequest(HANDLE f_hApp);
671 EFrameworkunifiedStatus OnPropagateSystemError(HANDLE f_hApp);
673 EFrameworkunifiedStatus OnCaptureAllLogsRequest(HANDLE f_hApp);
674 EFrameworkunifiedStatus OnCaptureScreenShotRequest(HANDLE f_hApp);
675 EFrameworkunifiedStatus OnCaptureSystemmanagerLogsRequest(HANDLE f_hApp);
678 EFrameworkunifiedStatus OnBootMicroResetNotification(HANDLE f_hApp);
680 EFrameworkunifiedStatus OnObtainBootMicroLog(HANDLE f_hApp);
681 EFrameworkunifiedStatus RequestBootMicroLog(HANDLE f_hApp);
683 EFrameworkunifiedStatus OnBootMicroLogResponse(HANDLE f_hApp);
685 EFrameworkunifiedStatus OnErrorEventBootMicroLogResponseTimeout(HANDLE f_hApp);
687 EFrameworkunifiedStatus OnLowSystemMemory(HANDLE f_hApp);
688 EFrameworkunifiedStatus OnObtainSystemmanagerSystemDataCsv(HANDLE f_hApp);
689 EFrameworkunifiedStatus OnObtainShowMemTxt(HANDLE f_hApp);
691 EFrameworkunifiedStatus OnErrorEventCoreFilePollTimeout(HANDLE f_hApp);
693 EFrameworkunifiedStatus OnObtainDebugDumpLog(HANDLE f_hApp);
694 EFrameworkunifiedStatus SendDebugDumpRequestToAllModules(HANDLE f_hApp);
696 EFrameworkunifiedStatus OnDebugDumpResponseReceived(HANDLE f_hApp);
698 EFrameworkunifiedStatus OnDebugDumpCompleteTimeout(HANDLE f_hApp);
700 EFrameworkunifiedStatus ErrorEventEnqueue(HANDLE f_hApp,
701 EErrorEventType f_eventType,
702 std::string &f_moduleQueueName, // NOLINT
703 EErrorEventResetType f_resetType = eErrorEventResetTypeNone,
704 const SMLoggingInfo &f_loggingInfo = SMLoggingInfo());
706 EFrameworkunifiedStatus PerformResetAfterLogging(HANDLE f_hApp,
707 ESMCpuResetReason f_eCpuResetReason,
708 std::string f_messageStr = "");
710 EFrameworkunifiedStatus ErrorEventProcessNext(HANDLE f_hApp);
712 EFrameworkunifiedStatus OnLoggingStartRequest(HANDLE f_hApp);
713 EFrameworkunifiedStatus OnErrorEventLoggerStartRequestTimeout(HANDLE f_hApp);
715 EFrameworkunifiedStatus OnErrorEventArtifactRequest(HANDLE f_hApp);
717 EFrameworkunifiedStatus SendLogArtifactResponseToLogger(HANDLE f_hApp,
718 EArtifactId f_artifactId,
719 std::string f_artifactFilePathAndName);
721 EFrameworkunifiedStatus OnErrorEventLoggingComplete(HANDLE f_hApp);
723 EFrameworkunifiedStatus ActOnModuleFailure(HANDLE f_hApp,
724 SS_String f_moduleName,
725 BOOL &f_refResetRequired); // NOLINT
726 std::string ErrorEventCreateHmiDisplayString(void);
729 // End of Error Event Logging *
730 //************************************************************************
732 UI_32 m_SystemManagerPriority;
734 #define REC_HIST(pStrCmd, hist, it, pStrSender) \
735 SetCmdHist(pStrCmd, hist, it, pStrSender);
737 #define REC_HIST_IF_SUCCESSFUL(pStr, hist, it, sender, l_eStatus) \
738 if (eFrameworkunifiedStatusOK == l_eStatus) { \
739 REC_HIST(pStr, hist, it, sender) \
742 #define LOG_ERROR_REC_HIST(l_eStatus, pStr) { \
744 REC_HIST(pStr, m_ErrHist, m_ErrHistIter, GetStr(l_eStatus).c_str()); \
746 #define LOG_STATUS_REC_HIST_IF_ERRORED(l_eStatus, pStr) \
747 if (eFrameworkunifiedStatusOK != l_eStatus) { \
749 REC_HIST(pStr, m_ErrHist, m_ErrHistIter, GetStr(l_eStatus).c_str()); \
752 } // End of #define LOG_STATUS(l_eStatus,pStr)
754 #define LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus, pStr) \
755 if (eFrameworkunifiedStatusOK != l_eStatus) { \
757 REC_HIST(pStr, m_ErrHist, m_ErrHistIter, GetStr(l_eStatus).c_str()); \
758 } // End of #define LOG_STATUS_IF_ERRORED(l_eStatus,pStr)
760 #endif // __SS_SYSTEM_MANAGER_H__ // NOLINT