common_library: gettid is multiple declaration in cl_error
[staging/basesystem.git] / video_in_hal / systemservice / task_manager / server / src / tskm_api.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 #include "tskm_debug.h"
18 #include "tskm_main.h"
19 #include "tskm_state.h"
20 #include "tskm_util.h"
21
22 #include "tskm_srvr.h"
23 #include "tskm_port_pf.h"
24 #include "tskm_port_subsys.h"
25
26 /**
27  *  _TSKM_SvcCtl Sub-func Task-startup-process
28  *  @param  svcId     service id
29  *  @param  p_main    TSKM_MAIN_CTX_t*
30  *  @param  p_svc     TSKM_SVC_CTX_t*
31  *  @return TSKM_E_OK Succeeded
32  *  @return other     Failed
33  */
34
35 TSKM_ERR_t tskm_svcExecRequest(TSKM_SVCID_t svcId, TSKM_MAIN_CTX_t* p_main, TSKM_SVC_CTX_t* p_svc) {
36   TSKM_ERR_t tskmRet = TSKM_E_OK;
37
38   // Startup tasks
39   TSKM_GSTEP_REQ_INFO_t req = { 0 };
40
41   if (p_main->isOnStartDone == TSKM_FALSE) {
42     TSKM_PRINTF(TSKM_LOG_WARN, "Transient SVC cannot exec before get BootInfo");
43     return TSKM_E_STATE;
44   } else if (p_main->isOnStopDone == TSKM_TRUE) {
45     TSKM_PRINTF(TSKM_LOG_WARN, "Transient SVC cannot exec after FrameworkunifiedOnStop");
46     return TSKM_E_STATE;
47   }
48
49   tskmRet = tskm_svcExec(p_svc);
50   TSKM_ERR_CHK_DFT;
51   if (p_svc->state == TSKM_SVC_WAITCONNECT) {
52     // In the state of waiting to execute
53     req.svcId = svcId;
54     req.localStep = TSKM_LSTEP_ALL;
55     tskmRet = tskm_svcWakeupRequest(p_svc, &req);
56     TSKM_ERR_CHK_DFT;  // LCOV_EXCL_BR_LINE 6: Because TSKM_ERR_CHK_DFT does not specify a condition for goto to ERROR
57   }
58   ERROR: return tskmRet;
59 }
60
61 /**
62  *  _TSKM_SvcCtl Sub-func Task-startup-process
63  *  @param  p_main    TSKM_MAIN_CTX_t*
64  *  @param  svcId     TSKM_SVCID_t
65  *  @return TSKM_E_OK Succeeded
66  *  @return other     Failed
67  */
68
69 TSKM_ERR_t tskm_svcReserveRequest(TSKM_MAIN_CTX_t* p_main, TSKM_SVCID_t svcId) {
70   uint8_t rsvSvcNum = p_main->nvInfo.body.rsvSvcNum;
71   TSKM_SVCID_t* p_rsvSvcs = p_main->nvInfo.body.rsvSvcs;
72   TSKM_ERR_t tskmRet = TSKM_E_OK;
73
74   if (rsvSvcNum >= TSKM_SVC_RESERVE_MAX) {
75     tskmRet = TSKM_E_STATE;
76   } else {
77     int ii;
78     int ret;
79
80     for (ii = 0; ii < rsvSvcNum; ii++) {
81       if (p_rsvSvcs[ii] == svcId) {
82         TSKM_ASSERT_PRINT(0, "Rsv Req already registered(%d)", svcId);
83         // Return OK as continuable
84         return tskmRet;
85       }
86     }
87
88     p_rsvSvcs[rsvSvcNum] = svcId;
89     p_main->nvInfo.body.rsvSvcNum++;
90
91     TSKM_PRINTF(TSKM_LOG_STATE, "Rsv Svc registered(%#x)", svcId);
92
93     ret = tskm_pf_nvFileWrite(&p_main->nvInfo);  // LCOV_EXCL_BR_LINE 6: Return value of 0 only
94     if (ret == -1) {
95       TSKM_ASSERT(0);
96       tskmRet = TSKM_E_NG;
97       return tskmRet;
98     }
99   }
100   return tskmRet;
101 }
102
103 /**
104  *  Service control
105  *  @param  svcId     service id
106  *  @param  ctl       control command
107  *  @return TSKM_E_OK Succeeded
108  *  @return other     Failed
109  */
110 TSKM_ERR_t _TSKM_SvcCtl(TSKM_SVCID_t svcId, const TSKM_SVC_CTL_t* ctl) {
111   TSKM_ERR_t tskmRet = TSKM_E_OK;
112   TSKM_MAIN_CTX_t* p_main = tskm_getMainCtx();
113
114   TSKM_SVC_CTX_t* p_svc;
115
116   if (ctl == NULL) {
117     TSKM_ASSERT(0);
118     return TSKM_E_PAR;
119   }
120
121   p_svc = tskm_svcsGetSvcBySvcId(&p_main->svcs, svcId);
122   if (p_svc == NULL) {
123     TSKM_ASSERT(0);
124     TSKM_PRINTF(TSKM_LOG_ERROR, "unknown svcId:%#x", svcId);
125     return TSKM_E_PAR;
126   }
127
128   TSKM_PRINTF(TSKM_LOG_API, "%s(%#x,%d)", __FUNCTION__, svcId, ctl->cmd);
129
130   if (ctl->cmd == TSKM_SVC_CMD_EXEC) {
131     tskmRet = tskm_svcExecRequest(svcId, p_main, p_svc);
132   } else if (ctl->cmd == TSKM_SVC_CMD_ENABLE) {
133     tskmRet = tskm_svcEnableRequest(p_svc);
134     TSKM_ERR_CHK_DFT;  // LCOV_EXCL_BR_LINE 8: Because TSKM_ERR_CHK_DFT does not specify a condition for goto to ERROR
135
136   } else if (ctl->cmd == TSKM_SVC_CMD_DISABLE) {
137     tskmRet = tskm_svcDisableRequest(p_svc);
138     TSKM_ERR_CHK_DFT;
139
140   } else if (ctl->cmd == TSKM_SVC_CMD_RESERVE) {
141     tskmRet = tskm_svcReserveRequest(p_main, svcId);
142
143   } else {
144     return TSKM_E_PAR;
145   }
146
147   ERROR: return tskmRet;
148 }
149
150 /**
151  *  Get service info
152  *  @param  svcId         service id
153  *  @param  svcInfo[O]    service info
154  *  @return TSKM_E_OK Succeeded
155  *  @return other     Failed
156  */
157 TSKM_ERR_t TSKM_SvcGetInfo(TSKM_SVCID_t svcId, TSKM_SVC_INFO_t* svcInfo) {
158 // Do not LOG acquisition APIs  TSKM_PRINTF(TSKM_LOG_API,"%s()",__FUNCTION__)
159
160   TSKM_MAIN_CTX_t* p_main = tskm_getMainCtx();
161   TSKM_SVC_CTX_t* p_svc = tskm_svcsGetSvcBySvcId(&p_main->svcs, svcId);
162
163   if (p_svc == NULL || svcInfo == NULL) {
164     return TSKM_E_PAR;
165   }
166
167   svcInfo->svcId = p_svc->attr->svcId;
168   svcInfo->isExecDisable =
169       (p_svc->state == TSKM_SVC_DISABLE) ? TSKM_TRUE : TSKM_FALSE;
170
171   return TSKM_E_OK;
172 }
173
174 RPC_Result _TSKM_ErrorReboot(const TSKM_ERROR_REBOOT_t* p_info) {
175   RPC_Result rpcRet = RPC_OK;
176   TSKM_ERROR_REBOOT_t rebootInfo;
177
178   if (!p_info || (p_info->type != TSKM_ERROR_REBOOT_NORMAL)) {
179     TSKM_ASSERT(0);
180     return RPC_ERR_Fatal;
181   }
182
183   memset(&rebootInfo, 0, sizeof(TSKM_ERROR_REBOOT_t));
184   rebootInfo.type = p_info->type;
185   snprintf(rebootInfo.log.messageStr, TSKM_LOGGING_MSG_STR_SIZE, "%s",
186            p_info->log.messageStr);
187
188   TSKM_PRINTF(TSKM_LOG_API, "%s(%d)", __FUNCTION__, p_info->type);
189
190   tskm_sub_reboot(&rebootInfo);
191
192   return rpcRet;
193 }
194
195 /**
196  *  Reboot service
197  *  @param  p_rsv     Reserved 
198  *  @return TSKM_E_OK Succeeded
199  *  @return other     Failed
200  */
201 TSKM_ERR_t TSKM_Reboot(const TSKM_RSV_t * p_rsv) {
202   TSKM_ERR_t tskmRet = TSKM_E_OK;
203
204   TSKM_PRINTF(TSKM_LOG_API, "%s()", __FUNCTION__)
205   if (p_rsv != NULL) {
206     TSKM_ASSERT(0);
207     return TSKM_E_PAR;
208   }
209
210   tskm_sub_reboot_normal();
211
212   return tskmRet;
213 }
214
215 /**
216  *  Save LOGs
217  *  @param  p_info    LOG storage info
218  *  @return TSKM_E_OK Succeeded
219  *  @return other     Failed
220  */
221 TSKM_ERR_t TSKM_Logging(const TSKM_LOGGING_INFO_t* p_info) {
222   TSKM_LOGGING_INFO_t logInfo;
223   TSKM_PRINTF(TSKM_LOG_API, "%s()", __FUNCTION__)
224
225   if (!p_info) {
226     TSKM_ASSERT(0);
227     return TSKM_E_PAR;
228   } else {
229     switch (p_info->type) {
230       case TSKM_LOGGING_TYPE_MODULE_LOGS:
231       case TSKM_LOGGING_TYPE_GRP_RELAUNCH:
232         break;
233       default:
234         TSKM_ASSERT(0);
235         return TSKM_E_PAR;
236     }
237   }
238
239   logInfo.type = p_info->type;
240   snprintf(logInfo.messageStr, TSKM_LOGGING_MSG_STR_SIZE, "%s",
241            p_info->messageStr);
242
243   tskm_sub_logging(&logInfo);
244
245   return TSKM_E_OK;
246 }
247
248 TSKM_ERR_t TSKM_SetWakeupOrder(const TSKM_WAKEUP_ORDER_t* p_order) {
249   TSKM_ERR_t tskmRet = TSKM_E_OK;
250
251   TSKM_PRINTF(TSKM_LOG_API, "%s()", __FUNCTION__)
252
253   if (p_order == NULL) {
254     return TSKM_E_PAR;
255   }
256
257   if (strnlen(p_order->orderName, TSKM_ORDER_NAME_MAX) >= TSKM_ORDER_NAME_MAX) {
258     return TSKM_E_PAR;
259   }
260
261   if (tskm_sub_setWakeupOrder(p_order->orderName) != 0) {
262     TSKM_ASSERT(0);
263     tskmRet = TSKM_E_NG;
264   }
265
266   return tskmRet;
267 }  // LCOV_EXCL_BR_LINE 10: Final line
268