Init basesystem source codes.
[staging/basesystem.git] / video_in_hal / systemservice / system_manager / server / src / ss_sm_dynamic_launcher.cpp
1 /*
2  * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 ///////////////////////////////////////////////////////////////////////////////
18 /// \ingroup  tag_SystemManager
19 /// \brief    This file provides support for System Manager process launching.
20 ///
21 ///////////////////////////////////////////////////////////////////////////////
22
23 #include <string>
24 #include <sstream>
25 #include <iomanip>
26
27 #include "ss_sm_dynamic_launch_table.h"
28 #include "ss_sm_systemmanagerlog.h"
29
30 DynamicLaunchBase::DynamicLaunchBase():
31 m_vOrderedGroup(),
32 m_iterOrderedGroup() {
33 }
34
35
36 DynamicLaunchBase::~DynamicLaunchBase() {
37 }
38
39 UI_32 DynamicLaunchBase::get_id() const {
40     // FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " DLB: Active Group ID is %d", *m_iterOrderedGroup);
41     return *m_iterOrderedGroup;
42 }
43
44 UI_32 DynamicLaunchBase::advance_id() {
45   if (!is_end()) {
46     m_iterOrderedGroup++;
47   }
48   // FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " DLB: Active Group ID is %d", *m_iterOrderedGroup);
49   return *m_iterOrderedGroup;
50 }
51
52 UI_32 DynamicLaunchBase::decrement_id() {
53   if (!is_begin()) {  // LCOV_EXCL_BR_LINE 5: stdlib error case.
54     m_iterOrderedGroup--;
55   }
56   // FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " DLB: Active Group ID is %d", *m_iterOrderedGroup);
57   return *m_iterOrderedGroup;
58 }
59
60 BOOL DynamicLaunchBase::is_begin() {
61   // FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " DLB: Active Group ID is %d", *m_iterOrderedGroup);
62   return (m_iterOrderedGroup == m_vOrderedGroup.begin());
63 }
64
65 BOOL DynamicLaunchBase::is_end() {
66   // FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, " DLB: Active Group ID is %d", *m_iterOrderedGroup);
67   DynamicOrderedIter l_it = m_iterOrderedGroup;
68   l_it++;
69   return (l_it == m_vOrderedGroup.end());
70 }
71
72 VOID DynamicLaunchBase::to_begin() {
73   m_iterOrderedGroup = m_vOrderedGroup.begin();
74   return;
75 }
76
77 VOID DynamicLaunchBase::to_end() {
78   m_iterOrderedGroup = m_vOrderedGroup.end();
79   m_iterOrderedGroup--;
80   return;
81 }
82
83 VOID DynamicLaunchBase::print_info() {
84   UI_32 idx = 1;
85   std::stringstream l_logMsg;
86   DynamicOrderedIter l_dyn_iter = m_vOrderedGroup.begin();
87   for (; l_dyn_iter != m_vOrderedGroup.end(); l_dyn_iter++) {
88     l_logMsg << std::endl << "Index: " << std::setw(2) << idx
89             << " Group Id: " << std::setw(2) << *l_dyn_iter;
90
91     idx++;
92   }
93
94   std::string l_logStr = l_logMsg.str();
95   FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__, "%s", l_logStr.c_str());
96 }
97
98 DynamicLauncher::DynamicLauncher() :DynamicLaunchBase(),
99 m_nLaunchGroupId(0),
100 m_nLaunchBeforeGroupId(0),
101 m_nLaunchAfterGroupId(0),
102 m_nAviageTriggerId(0),
103 m_bDynamicLaunchEnabled(FALSE),  // by default until set by some one will this be disabled.
104 m_eSourceType(SS_SOURCE_NA) {  // invalid
105 }
106
107 DynamicLauncher::~DynamicLauncher() {
108 }
109
110 BOOL DynamicLauncher::dynamic_launch_enabled() const {  // LCOV_EXCL_START 8: Dead code
111   AGL_ASSERT_NOT_TESTED();  // LCOV_EXCL_LINE 200: test assert
112   return m_bDynamicLaunchEnabled;
113 }
114 // LCOV_EXCL_STOP
115
116 VOID DynamicLauncher::configure_dynamic_launch(const SS_SOURCE& source_type,
117         GroupLaunchMap& group_info, LaunchOrderedVector& order_info) {
118   FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
119   m_eSourceType = source_type;
120   // "Dynamic Launch" is not used due to high dependency on a service table
121   create_normal_launch_vector(group_info, order_info);
122   FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
123 }
124
125 BOOL DynamicLauncher::is_inGroupLaunchMap(UI_32& id,
126       GroupLaunchMap& group_info) {  // LCOV_EXCL_START 8: Dead code
127   AGL_ASSERT_NOT_TESTED();  // LCOV_EXCL_LINE 200: test assert
128   FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
129   BOOL Ret = FALSE;
130   GroupLaunchMapIter l_grp_iter = group_info.find(id);
131   if (l_grp_iter != group_info.end()) {
132       Ret = TRUE;
133   }
134   FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
135   return Ret;
136 }
137 // LCOV_EXCL_STOP
138
139 // LCOV_EXCL_START 8: Dead code
140 DynamicLaunchInfo* DynamicLauncher::get_dynamic_source_info(
141         const SS_SOURCE& source_type, BOOL& source_trigger,
142         BOOL& is_aviage_required) {
143   AGL_ASSERT_NOT_TESTED();  // LCOV_EXCL_LINE 200: test assert
144   UI_32 num_of_items = static_cast<UI_32>(_countof(g_arrDynamicLaunchTableCfg));
145   DynamicLaunchInfo * point_to_this = NULL;
146   for (UI_32 arr_idx = 0; arr_idx < num_of_items; arr_idx++) {
147     if (g_arrDynamicLaunchTableCfg[arr_idx].source == source_type) {
148       source_trigger = g_arrDynamicLaunchTableCfg[arr_idx].group_trigger;
149       point_to_this = &g_arrDynamicLaunchTableCfg[arr_idx];
150       if ((SS_SOURCE_FM == source_type) || (SS_SOURCE_AM == source_type)
151             || (SS_SOURCE_FM_DAB == source_type)
152             || (SS_SOURCE_SDARS == source_type)) {
153         is_aviage_required = FALSE;
154       }
155       break;
156     }
157   }
158
159   return point_to_this;
160 }
161 // LCOV_EXCL_STOP
162
163 UI_32 DynamicLauncher::get_id_using_group_name(PCSTR group_name,
164         GroupLaunchMap& group_info) {  // LCOV_EXCL_START 8: Dead code
165   AGL_ASSERT_NOT_TESTED();  // LCOV_EXCL_LINE 200: test assert
166     GroupLaunchMapIter l_grp_iter = group_info.begin();
167     UI_32 rtn_grp_id = 0;
168     for (; l_grp_iter != group_info.end(); l_grp_iter++) {
169         if (0 == strcmp(group_name, l_grp_iter->second.name.c_str())) {
170             rtn_grp_id = l_grp_iter->second.id;
171             break;
172         }
173     }
174
175     return rtn_grp_id;
176 }
177 // LCOV_EXCL_STOP
178
179 VOID DynamicLauncher::create_normal_launch_vector(GroupLaunchMap& group_info,
180         LaunchOrderedVector& order_info) {
181   m_vOrderedGroup.clear();
182
183   if (order_info.size() != 0) {  // LCOV_EXCL_BR_LINE 6: To initialize conditions for launching SystemManager
184     // LCOV_EXCL_START 6: To initialize conditions for launching SystemManager
185     AGL_ASSERT_NOT_TESTED();  // LCOV_EXCL_LINE 200: test assert
186     LaunchOrderedIter l_ord_iter = order_info.begin();
187     while (l_ord_iter != order_info.end()) {
188       if (is_inGroupLaunchMap(*l_ord_iter, group_info) == TRUE) {
189         m_vOrderedGroup.push_back(*l_ord_iter);
190       }
191       l_ord_iter++;
192     }
193     // LCOV_EXCL_STOP
194   } else {
195     GroupLaunchMapIter l_grp_iter = group_info.begin();
196     while (l_grp_iter != group_info.end()) {
197       m_vOrderedGroup.push_back(l_grp_iter->second.id);
198       l_grp_iter++;
199     }
200   }
201   m_iterOrderedGroup = m_vOrderedGroup.begin();
202   m_bDynamicLaunchEnabled = TRUE;
203   print_info();
204 }
205
206 VOID DynamicLauncher::copyDynOrderedVector(DynamicModuleStart& Start) {
207   Start.setGroupVector(this->m_vOrderedGroup);
208 }
209
210 // DynamicModuleStart
211
212 DynamicModuleStart::DynamicModuleStart() :DynamicLaunchBase() {
213 }
214
215 DynamicModuleStart::~DynamicModuleStart() {
216 }
217
218 VOID DynamicModuleStart::setGroupVector(DynamicOrderedVector& Vector) {
219     m_vOrderedGroup.assign(Vector.begin(), Vector.end());
220     m_iterOrderedGroup = m_vOrderedGroup.begin();
221 }  // LCOV_EXCL_BR_LINE 10: Final line