Add gitlab issue/merge request templates
[staging/basesystem.git] / service / system / task_manager / server / include / system_service / tskm_svc.h
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  * @file tskm_svc.h
18  * @brief \~english define of tskm
19  */
20 /** @addtogroup BaseSystem
21  *  @{
22  */
23 /** @addtogroup system_service
24  *  @ingroup BaseSystem
25  *  @{
26  */
27 /** @addtogroup task_manager
28  *  @ingroup system_service
29  *  @{
30  */
31 #ifndef TASK_MANAGER_SERVER_INCLUDE_SYSTEM_SERVICE_TSKM_SVC_H_
32 #define TASK_MANAGER_SERVER_INCLUDE_SYSTEM_SERVICE_TSKM_SVC_H_
33
34
35 #include <unistd.h>
36 #include <sys/types.h>
37 #include "system_service/tskm_local_type.h"
38
39
40 #define TSKM_SVC_WAIT_REQ_MAX  (8)      // Number of queued requests
41
42 // Service type
43 typedef enum {
44   TSKM_SVC_TYPE_NATIVE,   //
45   TSKM_SVC_TYPE_UNKNONW,  //
46 } TSKM_SVC_TYPE_t;
47
48 // Scheduling policy
49 typedef enum {
50   TSKM_SVC_POLICY_TSS,   //
51   TSKM_SVC_POLICY_RR,    //
52   TSKM_SVC_POLICY_FIFO,  //
53 } TSKM_SVC_POLICY_t;
54
55 // Life cycle
56 typedef enum {
57   TSKM_SVC_LC_ALWAYS,               // Resident
58   TSKM_SVC_LC_ALWAYS_RECOVERABLE,   // Resident(Recoverable)
59   TSKM_SVC_LC_DYNAMIC               // Non-resident
60 } TSKM_SVC_LC_t;
61
62 // CPU allocation: This defined value should match the specification of the second argument of CL_ProcessCreateAttrSetCpuAssign
63
64 typedef enum {
65   TSKM_SVC_ASSIGN_CPU_AUTO = 0,  // Automatic allocation
66   TSKM_SVC_ASSIGN_CPU_0 = 1,     // Fixed to CPU0
67   TSKM_SVC_ASSIGN_CPU_1 = 2,     // Fixed to CPU1
68 } TSKM_SVC_ASSIGN_CPU_t;
69
70 // Service attributes (given by XML)
71 typedef struct {
72   TSKM_SVCID_t svcId;        //
73   const char* name;         //
74   const char* path;         //
75   char** args;         //
76   TSKM_SVC_TYPE_t type;         //
77   uint32_t prio;         //
78   TSKM_SVC_POLICY_t policy;       //
79   TSKM_SVC_LC_t lifeCycle;    //
80   uint32_t retryCnt;     //
81   TSKM_SVC_ASSIGN_CPU_t cpuAssign;    //
82   const char* user;         //
83   uint32_t runtimeLimit;  //
84   uint32_t cpuLimit;     //
85   uint32_t memLimit;     //
86   TSKM_BOOL_t shotdownWait;  //
87   uint32_t subgidNum;    //
88   gid_t *subgidList;  //
89 } TSKM_SVC_ATTR_t;
90
91 // Service status
92 typedef enum {
93   TSKM_SVC_DORMANT,      // During dormant (Not exec)
94   TSKM_SVC_WAITCONNECT,  // Wait for connection
95   TSKM_SVC_WAKEUP,       // Start in progress
96   TSKM_SVC_RUNNING,      // Running (Startup completed)
97   TSKM_SVC_DOWN,         // Termination in progress
98   TSKM_SVC_FINDOWN,      // Termination completed
99   TSKM_SVC_DISABLE,      // Prohibitting startup  (exec prohibited)
100 } TSKM_SVC_STATE_t;
101
102 // Service
103 typedef struct {                                                       // Life cycle
104   TSKM_SVC_ATTR_t *attr;      // Service Attributes            ALL
105   TSKM_SVC_STATE_t state;     // Service State                 ALL
106   int iFd;                    // inotifyFd for touch           ALL
107   pid_t pid;                  // PID of service                REQ_WAKEUP - FIN_DOWN
108   int connFd;                 // service communication socket  DO_WAKEUP  - FIN_DOWN
109   T_SS_SM_START_DataStructType bootInfo;        // Boot info                     REQ_WAKEUP - FIN_DOWN
110   T_SS_SM_START_ExtDataStructType extBootInfo;  // Extended boot info            REQ_WAKEUP - FIN_DOWN
111
112   TSKM_BOOL_t isShmDone;      // Shared memory initialization completed
113   TSKM_BOOL_t isStepDone;     // Gradual startup completed
114   TSKM_BOOL_t isAvailable;    // Availability reception completed
115
116   uint32_t watchCnt;          // Service monitoring counter
117   uint32_t waitResCnt;        // Wait for response to request       DO_WAKEUP  - WAIT_WAKEUP
118   uint32_t waitReqCnt;        // Wait for request issuance          REQ_WAKEUP - DO_WAKEUP
119   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];  //         REQ_WAKEUP - DO_WAKEUP
120
121   uint32_t errTermCnt;        // Number of abnormal terminations    ALL
122 } TSKM_SVC_CTX_t;
123
124 // Service list
125 typedef struct {
126   uint32_t svcNum;
127   TSKM_SVC_CTX_t *svcList;
128 } TSKM_SVCS_CTX_t;
129
130 // State of waiting for service termination
131 typedef enum {
132   TSKM_SVC_WAIT_NONE,       // No wait
133   TSKM_SVC_WAIT_TRANSIENT,  // Waiting for termination of nonresident service
134   TSKM_SVC_WAIT_BOTH,       // Waiting for termination of resident/nonresident service
135 } TSKM_SVC_WAIT_STATE_t;
136
137 // Service list
138   /////////////////////////////////////////////////////////////////////////////////////
139   /// \ingroup tskm_svcsEventHandle
140   /// \~english @par Summary
141   ///
142   /// \~english @param
143   /// \~english @param  [in] p_svcs
144   ///            p_svcs   - pointer of services
145   /// \~english @par
146   ///           p_svcs   TSKM_SVCS_CTX_t*
147   /// \~english @code
148   ///           typedef struct {
149   ///             uint32_t svcNum;           // service num
150   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
151   ///           } TSKM_SVCS_CTX_t;
152   ///           @endcode
153   /// \~english @param  [in] p_inEv
154   ///            p_inEv   - pointer of input event info
155   /// \~english @par
156   ///           p_inEv   TSKM_EVENT_INFO_t*
157   /// \~english @code
158   /// typedef struct _TSKM_EVENT_INFO_t {
159   ///   TSKM_EVENT_t event;
160   ///   TSKM_ERR_t errCode;
161   ///   pid_t fromPid;
162   ///   TSKM_BOOL_t hasExtend;
163   ///   uint32_t extendSize;
164   ///   void *extendPrm;
165   ///   union {
166   ///     // TSKM->PRI
167   ///     TSKM_EV_PRI_REQ_WAKEUP_PRM_t reqWakeup;
168   ///     TSKM_EV_PRI_REQ_DOWN_PRM_t reqDown;
169   ///     // PRI->TSKM
170   ///     TSKM_EV_PRI_REP_WAKEUP_COMP_PRM_t repWakeupComp;
171   ///     TSKM_EV_PRI_REP_DOWN_COMP_PRM_t repDownComp;
172   ///     TSKM_EV_PRI_REP_CONNECT_PRM_t repConnect;
173   ///     TSKM_EV_PRI_RES_WAKEUP_PRM_t resWakeup;
174   ///     TSKM_EV_PRI_RES_DOWN_PRM_t resDown;
175   ///     TSKM_EV_LCL_CHG_SVC_STATE_PRM_t chgSvc;
176   ///   } prm;
177   /// } TSKM_EVENT_INFO_t;
178   ///           @endcode
179   /// \~english @param  [out] p_outEv
180   ///           p_outEv   - pointer of output event info
181   /// \~english @par
182   ///           p_outEv   TSKM_EVENT_INFO_t*
183   /// \~english @retval
184   /// \~english @par Preconditions
185   ///       -
186   /// \~english @par Change of the internal state
187   ///       -  The internal state is not changed.
188   /// \~english @par Causes of failures
189   ///       -
190   /// \~english @par Classification
191   ///       - public
192   /// \~english @par Type
193   ///       - method
194   /// \~english @par Detail
195   ///
196   /// \~english @see  None
197   ////////////////////////////////////////////////////////////////////////////////////
198 TSKM_ERR_t tskm_svcsEventHandle(TSKM_SVCS_CTX_t* p_svcs,
199                                 const TSKM_EVENT_INFO_t* p_inEv,
200                                 TSKM_EVENT_INFO_t* p_outEv);
201
202   /////////////////////////////////////////////////////////////////////////////////////
203   /// \ingroup tskm_svcsGetSvcBySvcId
204   /// \~english @par Summary
205   ///           find service in inputed service list by service id.
206   /// \~english @param  [in] p_svcs
207   ///            p_svcs   - pointer of services object
208   /// \~english @par
209   ///           p_svcs   TSKM_SVCS_CTX_t*
210   /// \~english @code
211   ///           typedef struct {
212   ///             uint32_t svcNum;           // service num
213   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
214   ///           } TSKM_SVCS_CTX_t;
215   ///           @endcode
216   /// \~english @param  [in] svcId
217   ///            svcId  - service Id
218   /// \~english @par
219   ///            svcId   uint32_t
220   /// \~english @retval TSKM_SVC_CTX_t*  service pointer
221   /// \~english @retval TSKM_SVC_CTX_t*  NULL
222   /// \~english @par Preconditions
223   ///       -  none
224   /// \~english @par Change of the internal state
225   ///       -  The internal state is not changed.
226   /// \~english @par Causes of failures
227   ///       -  If not find svcId in services list. [NULL]
228   /// \~english @par Classification
229   ///       -  public
230   /// \~english @par Type
231   ///       -  method only
232   /// \~english @par Detail
233   ///           find service in inputed service list by service id.. If do not find then return NULL pointer.
234   /// \~english @see getSvcCtxBySvcId
235   ////////////////////////////////////////////////////////////////////////////////////
236 TSKM_SVC_CTX_t* tskm_svcsGetSvcBySvcId(TSKM_SVCS_CTX_t* p_svcs,
237                                        TSKM_SVCID_t svcId);
238
239   /////////////////////////////////////////////////////////////////////////////////////
240   /// \ingroup tskm_svcsGetSvcByPid
241   /// \~english @par Summary
242   ///            find service in inputed service list by process id.
243   /// \~english @param  [in] p_svcs
244   ///            p_svcs   - pointer of services
245   /// \~english @par
246   ///           p_svcs   TSKM_SVCS_CTX_t*
247   /// \~english @code
248   ///           typedef struct {
249   ///             uint32_t svcNum;           // service num
250   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
251   ///           } TSKM_SVCS_CTX_t;
252   ///           @endcode
253   /// \~english @param  [in] pid
254   ///            pid    - process id
255   /// \~english @par
256   ///            pid   pid_t
257   /// \~english @retval TSKM_SVC_CTX_t*  service pointer
258   /// \~english @retval TSKM_SVC_CTX_t*  NULL
259   /// \~english @par Preconditions
260   ///       -
261   /// \~english @par Change of the internal state
262   ///       -  The internal state is not changed.
263   /// \~english @par Causes of failures
264   ///       -  If not find process id in services list. [NULL]
265   /// \~english @par Classification
266   ///       - public
267   /// \~english @par Type
268   ///       - method only
269   /// \~english @par Detail
270   ///           find service in inputed service list by process id. If do not find then return NULL pointer.
271   /// \~english @see  getSvcCtxByPid
272   ////////////////////////////////////////////////////////////////////////////////////
273 TSKM_SVC_CTX_t* tskm_svcsGetSvcByPid(TSKM_SVCS_CTX_t* p_svcs, pid_t pid);
274
275
276   /////////////////////////////////////////////////////////////////////////////////////
277   /// \ingroup tskm_svcsIsWaiting
278   /// \~english @par Summary
279   ///           Is the service state waiting.
280   /// \~english @param  [in] p_svcs
281   ///            p_svcs   - pointer of services
282   /// \~english @par
283   ///           p_svcs   TSKM_SVCS_CTX_t*
284   /// \~english @code
285   ///           typedef struct {
286   ///             uint32_t svcNum;           // service num
287   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
288   ///           } TSKM_SVCS_CTX_t;
289   ///           @endcode
290   /// \~english @retval TSKM_BOOL_t
291   /// \~english @par Preconditions
292   ///       -
293   /// \~english @par Change of the internal state
294   ///       -  The internal state is not changed.
295   /// \~english @par Causes of failures
296   ///       -  If service state is TSKM_SVC_WAITCONNECT and wait response num is 0. [TSKM_FALSE]
297   /// \~english @par Classification
298   ///       -  public
299   /// \~english @par Type
300   ///       -  method only
301   /// \~english @par Detail
302   ///          Is the service state waiting. \n
303   ///          There are not service's state equal TSKM_SVC_WAITCONNECT or wait respose number > 0 return TSKM_TRUE.
304   /// \~english @see  None
305   ////////////////////////////////////////////////////////////////////////////////////
306 TSKM_BOOL_t tskm_svcsIsWaiting(TSKM_SVCS_CTX_t* p_svcs);
307
308   /////////////////////////////////////////////////////////////////////////////////////
309   /// \ingroup tskm_svcsGetSvcTermWaitState
310   /// \~english @par Summary
311   ///           Get the service which state equanl not equal terminal.
312   /// \~english @code
313   ///           typedef struct {
314   ///             uint32_t svcNum;           // service num
315   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
316   ///           } TSKM_SVCS_CTX_t;
317   ///           @endcode
318   /// \~english @retval TSKM_SVC_WAIT_STATE_t
319   /// \~english @par
320   ///            TSKM_SVC_WAIT_STATE_t  enum
321   /// \~english @code
322   /// typedef enum {
323   ///   TSKM_SVC_WAIT_NONE,       // not waiting state
324   ///   TSKM_SVC_WAIT_TRANSIENT,  // dynamic service terminal waiting state
325   ///   TSKM_SVC_WAIT_BOTH,       // no dynamic/ dyanmic service terminal  waiting state
326   /// } TSKM_SVC_WAIT_STATE_t;
327   ///            @endcode
328   /// \~english @par Preconditions
329   ///       -  none
330   /// \~english @par Change of the internal state
331   ///       -  The internal state is not changed.
332   /// \~english @par Causes of failures
333   ///           If all services state equal TSKM_SVC_DORMANT. [TSKM_SVC_WAIT_NONE]
334   ///           If dynamic service.  [TSKM_SVC_WAIT_TRANSIENT]
335   ///           If not dynamic service and state not TSKM_SVC_FINDOWN. [TSKM_SVC_WAIT_BOTH]
336   /// \~english @par Classification
337   ///       -  public
338   /// \~english @par Type
339   ///       -  method only
340   /// \~english @par Detail
341   ///           Get the service which state equanl not equal terminal. \n
342   /// \~english @see  None
343   ////////////////////////////////////////////////////////////////////////////////////
344 TSKM_SVC_WAIT_STATE_t tskm_svcsGetSvcTermWaitState(TSKM_SVCS_CTX_t* p_svcs);
345
346   /////////////////////////////////////////////////////////////////////////////////////
347   /// \ingroup tskm_svcsSetBootInfo
348   /// \~english @par Summary
349   ///             initialize all services boot info.
350   /// \~english @param  [in] p_svcs
351   ///            p_svcs   - pointer of services
352   /// \~english @par
353   ///           p_svcs   TSKM_SVCS_CTX_t*
354   /// \~english @code
355   ///           typedef struct {
356   ///             uint32_t svcNum;           // service num
357   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
358   ///           } TSKM_SVCS_CTX_t;
359   ///           @endcode
360   /// \~english @param  [in] p_info
361   ///           p_info   - SS_SM_START 'FrameworkunifiedOnStart'/'evStart' message pointer
362   /// \~english @par
363   ///           p_info   T_SS_SM_START_DataStructType*
364   /// \~english @code
365   /// Data passed as part of SS_SM_START 'FrameworkunifiedOnStart'/'evStart' message
366   /// typedef struct T_SS_SM_START_DataStruct {
367   ///     EPWR_WAKEUP_FACTOR_TYPE   startupReason;
368   ///     BOOL                      isUserModeOn;
369   ///     ESMDataResetModeInfo      dataResetMode;
370   ///     EPWR_SC_SECURITY_STATUS   securityStatus;
371   ///     EPWR_SC_WAKEUP_TYPE       wakeupType;
372   ///     ESMDramBackupStatus       dramBackupStatus;
373   ///     ESMResetStatus            resetStatus;
374   ///     UI_32                     errResetCount;
375   ///     T_SS_SM_START_DataStruct
376   /// } T_SS_SM_START_DataStructType;
377   ///           @endcode
378   /// \~english @param  [in] p_exInfo
379   ///           p_exInfo   - FrameworkunifiedOnStart extend info pointer
380   /// \~english @par
381   ///           p_exInfo   T_SS_SM_START_ExtDataStructType*
382   /// \~english @code
383   /// /// Extended Parameter for FrameworkunifiedOnStart
384   /// typedef struct {
385   ///         BOOL             isProgUpdated;
386   ///         EMRelaunchStatus relaunchStatus;
387   ///         BOOL             isMapUpdated;
388   ///         BOOL             isMapDiffUpdated;
389   ///         uint8_t          reserved[SS_SM_START_EXT_RSV_SIZE];
390   /// } T_SS_SM_START_ExtDataStructType;
391   ///          @endcode
392   /// \~english @retval TSKM_E_OK
393   /// \~english @par
394   ///            TSKM_SVC_WAIT_STATE_t  enum
395   /// \~english @par Preconditions
396   ///       -  call tskm_dataInitAll() to get boot info
397   /// \~english @par Change of the internal state
398   ///       -  The internal state is not changed.
399   /// \~english @par Causes of failures
400   ///       -  none
401   /// \~english @par Classification
402   ///       -  pulbic
403   /// \~english @par Type
404   ///       -  method only
405   /// \~english @par Detail
406   ///      - initialize all services boot info.
407   /// \~english @see  None
408   ////////////////////////////////////////////////////////////////////////////////////
409 TSKM_ERR_t tskm_svcsSetBootInfo(TSKM_SVCS_CTX_t* p_svcs,
410                                 T_SS_SM_START_DataStructType* p_info,
411                                 T_SS_SM_START_ExtDataStructType *p_exInfo);
412
413   /////////////////////////////////////////////////////////////////////////////////////
414   /// \ingroup tskm_svcsAvtiveSvcTerm
415   /// \~english @par Summary
416   ///           Terminal the dynamic services.
417   /// \~english @param  [in] p_svcs
418   ///            p_svcs   - pointer of services
419   /// \~english @par
420   ///           p_svcs   TSKM_SVCS_CTX_t*
421   /// \~english @code
422   ///           typedef struct {
423   ///             uint32_t svcNum;           // service num
424   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
425   ///           } TSKM_SVCS_CTX_t;
426   ///           @endcode
427   /// \~english @retval TSKM_ERR_t
428   /// \~english @par
429   ///            TSKM_E_OK
430   ///            TSKM_E_NG
431   /// \~english @par Preconditions
432   ///       -  none
433   /// \~english @par Change of the internal state
434   ///       -  The internal state is not changed.
435   /// \~english @par Causes of failures
436   ///       -  tskm_svcDownRequest return failed [TSKM_E_NG]
437   /// \~english @par Classification
438   ///       -  pulbic
439   /// \~english @par Type
440   ///       - method only
441   /// \~english @par Detail
442   ///       Terminal all the dynamic services which state equal TSKM_SVC_RUNNING and response num equal 0. \n
443   /// \~english @see  tskm_svcDownRequest
444   ////////////////////////////////////////////////////////////////////////////////////
445 TSKM_ERR_t tskm_svcsAvtiveSvcTerm(TSKM_SVCS_CTX_t* p_svcs);
446
447   /////////////////////////////////////////////////////////////////////////////////////
448   /// \ingroup tskm_svcsCallDebugDump
449   /// \~english @par Summary
450   ///           Send DebugDump message to services.
451   /// \~english @param  [in] p_svcs
452   ///            p_svcs   - pointer of services
453   /// \~english @par
454   ///           p_svcs   TSKM_SVCS_CTX_t*
455   /// \~english @code
456   ///           typedef struct {
457   ///             uint32_t svcNum;           // service num
458   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
459   ///           } TSKM_SVCS_CTX_t;
460   ///           @endcode
461   /// \~english @retval TSKM_ERR_t
462   /// \~english @par
463   ///            TSKM_E_OK
464   ///            TSKM_E_NG
465   /// \~english @par Preconditions
466   ///       -  none
467   /// \~english @par Change of the internal state
468   ///       -  The internal state is not changed.
469   /// \~english @par Causes of failures
470   ///       -  tskm_sockSend send DebugDump message failed [TSKM_E_NG]
471   /// \~english @par Classification
472   ///       - public
473   /// \~english @par Type
474   ///       - method only
475   /// \~english @par Detail
476   ///            Send DebugDump message to services which state equal TSKM_SVC_RUNNING. \n
477   /// \~english @see  tskm_sockSend
478   ////////////////////////////////////////////////////////////////////////////////////
479 TSKM_ERR_t tskm_svcsCallDebugDump(TSKM_SVCS_CTX_t* p_svcs);
480
481   /////////////////////////////////////////////////////////////////////////////////////
482   /// \ingroup tskm_svcsCallLowMem
483   /// \~english @par Summary
484   ///           Send checking low memory message to services.
485   /// \~english @param  [in] p_svcs
486   ///            p_svcs   - pointer of services
487   /// \~english @par
488   ///           p_svcs   TSKM_SVCS_CTX_t*
489   /// \~english @code
490   ///           typedef struct {
491   ///             uint32_t svcNum;           // service num
492   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
493   ///           } TSKM_SVCS_CTX_t;
494   ///           @endcode
495   /// \~english @retval TSKM_ERR_t
496   /// \~english @par
497   ///            TSKM_E_OK
498   ///            TSKM_E_NG
499   /// \~english @par Preconditions
500   ///       -  none
501   /// \~english @par Change of the internal state
502   ///       -  The internal state is not changed.
503   /// \~english @par Causes of failures
504   ///       - tskm_sockSend send LowMemory message failed [TSKM_E_NG]
505   /// \~english @par Classification
506   ///       - public
507   /// \~english @par Type
508   ///       - method only
509   /// \~english @par Detail
510   ///       Send checking LowMemory message to services which state equal TSKM_SVC_RUNNING. \n
511   /// \~english @see  tskm_sockSend
512   ////////////////////////////////////////////////////////////////////////////////////
513 TSKM_ERR_t tskm_svcsCallLowMem(TSKM_SVCS_CTX_t* p_svcs);
514
515 // Service
516   /////////////////////////////////////////////////////////////////////////////////////
517   /// \ingroup tskm_svcEventHandle
518   /// \~english @par Summary
519   ///           process event.
520   /// \~english @param  [in] p_svcs
521   ///            p_svcs   - pointer of services
522   /// \~english @par
523   ///           p_svcs   TSKM_SVCS_CTX_t*
524   /// \~english @code
525   ///           typedef struct {
526   ///             uint32_t svcNum;           // service num
527   ///             TSKM_SVC_CTX_t *svcList;   // services list pointer
528   ///           } TSKM_SVCS_CTX_t;
529   ///           @endcode
530   /// \~english @param  [in][out] p_ev
531   ///            p_ev   - event info pointer
532   /// \~english @par
533   ///           p_ev   TSKM_EVENT_INFO_t*
534   /// \~english @code
535   /// typedef struct _TSKM_EVENT_INFO_t {
536   ///   TSKM_EVENT_t event;
537   ///   TSKM_ERR_t errCode;
538   ///   pid_t fromPid;
539   ///   TSKM_BOOL_t hasExtend;
540   ///   uint32_t extendSize;
541   ///   void *extendPrm;
542   ///   union {
543   ///     // TSKM->PRI
544   ///     TSKM_EV_PRI_REQ_WAKEUP_PRM_t reqWakeup;
545   ///     TSKM_EV_PRI_REQ_DOWN_PRM_t reqDown;
546   ///
547   ///     // PRI->TSKM
548   ///     TSKM_EV_PRI_REP_WAKEUP_COMP_PRM_t repWakeupComp;
549   ///     TSKM_EV_PRI_REP_DOWN_COMP_PRM_t repDownComp;
550   ///     TSKM_EV_PRI_REP_CONNECT_PRM_t repConnect;
551   ///     TSKM_EV_PRI_RES_WAKEUP_PRM_t resWakeup;
552   ///     TSKM_EV_PRI_RES_DOWN_PRM_t resDown;
553   ///     TSKM_EV_LCL_CHG_SVC_STATE_PRM_t chgSvc;
554   ///   } prm;
555   /// } TSKM_EVENT_INFO_t;
556   ///           @endcode
557   /// \~english @retval TSKM_ERR_t
558   /// \~english @par
559   ///            TSKM_E_OK
560   /// \~english @par Preconditions
561   ///       -  none
562   /// \~english @par Change of the internal state
563   ///       -  The internal state is not changed.
564   /// \~english @par Causes of failures
565   ///       -  none
566   /// \~english @par Classification
567   ///       - public
568   /// \~english @par Type
569   ///       - method
570   /// \~english @par Detail
571   ///         process event.\n
572   ///         process connect response.\n
573   ///         process disconnect response. \n
574   ///         process service wakeup request. \n
575   ///         process service down request. \n
576   ///         process service debugdump request. \n
577   ///         process service exit request. \n
578   ///         process service terminal response. \n
579   /// \~english @see  isSvcEvent,connectHandle,disConnectHandle,resWakeupHandle, \n
580   ///                  resDownHandle,resDebugDumpHandle,reqExit,repTermHandle \n
581   ////////////////////////////////////////////////////////////////////////////////////
582 TSKM_ERR_t tskm_svcEventHandle(TSKM_SVC_CTX_t* p_svc, TSKM_EVENT_INFO_t* p_ev);  // p_ev: [IN/OUT]
583
584   /////////////////////////////////////////////////////////////////////////////////////
585   /// \ingroup tskm_svcExec
586   /// \~english @par Summary
587   ///           start service.
588   /// \~english @param  [in][out] p_svc
589   ///            p_svc   - pointer of services
590   /// \~english @par
591   ///           p_svc   TSKM_SVC_CTX_t*
592   /// \~english @code
593   /// typedef struct {
594   ///   TSKM_SVC_ATTR_t *attr;      // attribute of service
595   ///   TSKM_SVC_STATE_t state;     // state of service
596   ///   int iFd;                    // inotifyFd used by touch
597   ///   pid_t pid;                  // PID of service
598   ///   int connFd;                 // service communicate fd
599   ///   T_SS_SM_START_DataStructType bootInfo;        // BOOT info
600   ///   T_SS_SM_START_ExtDataStructType extBootInfo;  // extend BOOT info
601   ///   TSKM_BOOL_t isShmDone;      // shared memory init done
602   ///   TSKM_BOOL_t isStepDone;     // step done
603   ///   TSKM_BOOL_t isAvailable;    // Availability flag
604   ///   uint32_t watchCnt;          // service monitor count
605   ///   uint32_t waitResCnt;        // wait response num
606   ///   uint32_t waitReqCnt;        // wait request num
607   ///   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];
608   ///   uint32_t errTermCnt;        // exception terminal count
609   /// } TSKM_SVC_CTX_t;
610   ///           @endcode
611   /// \~english @retval TSKM_ERR_t
612   /// \~english @par
613   ///            TSKM_E_OK
614   ///            TSKM_E_NG
615   ///            TSKM_E_STATE
616   /// \~english @par Preconditions
617   ///       -
618   /// \~english @par Change of the internal state
619   ///       -  The internal state is not changed.
620   /// \~english @par Causes of failures
621   ///            - input parameter p_svc is NULL. [TSKM_E_NG]
622   ///            - service state is TSKM_SVC_DISABLE [TSKM_E_STATE]
623   ///            - reqTouch return failed [TSKM_E_NG]
624   ///            - tskm_pf_createProc return failed [TSKM_E_NG]
625   /// \~english @par Classification
626   ///       - public
627   /// \~english @par Type
628   ///       - method
629   /// \~english @par Detail
630   ///       start service which state is TSKM_SVC_DORMANT.\n
631   /// \~english @see  svcExec, reqTouch, tskm_pf_createProc
632   ////////////////////////////////////////////////////////////////////////////////////
633 TSKM_ERR_t tskm_svcExec(TSKM_SVC_CTX_t* p_svc);
634
635   /////////////////////////////////////////////////////////////////////////////////////
636   /// \ingroup tskm_svcWakeupRequest
637   /// \~english @par Summary
638   ///           Send started request to service.
639   /// \~english @param  [in][out] p_svc
640   ///            p_svc   - pointer of service
641   /// \~english @par
642   ///           p_svc   TSKM_SVC_CTX_t*
643   /// \~english @code
644   /// typedef struct {
645   ///   TSKM_SVC_ATTR_t *attr;      // attribute of service
646   ///   TSKM_SVC_STATE_t state;     // state of service
647   ///   int iFd;                    // inotifyFd used by touch
648   ///   pid_t pid;                  // PID of service
649   ///   int connFd;                 // service communicate fd
650   ///   T_SS_SM_START_DataStructType bootInfo;        // BOOT info
651   ///   T_SS_SM_START_ExtDataStructType extBootInfo;  // extend BOOT info
652   ///   TSKM_BOOL_t isShmDone;      // shared memory init done
653   ///   TSKM_BOOL_t isStepDone;     // step done
654   ///   TSKM_BOOL_t isAvailable;    // Availability flag
655   ///   uint32_t watchCnt;          // service monitor count
656   ///   uint32_t waitResCnt;        // wait response num
657   ///   uint32_t waitReqCnt;        // wait request num
658   ///   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];
659   ///   uint32_t errTermCnt;        // exception terminal count
660   /// } TSKM_SVC_CTX_t;
661   ///           @endcode
662   /// \~english @param  [in] p_req
663   ///            p_req   - pointer of request
664   /// \~english @par
665   ///           p_req   TSKM_GSTEP_REQ_INFO_t*
666   /// \~english @code
667   /// typedef struct {
668   ///   TSKM_SVCID_t svcId;           // service ID
669   ///   TSKM_LOCAL_STEP_t localStep;  // local step id
670   /// } TSKM_GSTEP_REQ_INFO_t;
671   ///            @endcode
672   /// \~english @retval TSKM_ERR_t
673   /// \~english @par
674   ///            TSKM_E_OK
675   ///            TSKM_E_NG
676   ///            TSKM_E_STATE
677   /// \~english @par Preconditions
678   ///       -  none
679   /// \~english @par Change of the internal state
680   ///       -  The internal state is not changed.
681   /// \~english @par Causes of failures
682   ///            - Input parameter p_svc is NULL. [TSKM_E_STATE]
683   ///            - Service state is TSKM_SVC_DISABLE [TSKM_E_STATE]
684   ///            - wakeupRequest return failed [TSKM_E_NG]
685   /// \~english @par Classification
686   ///       - public
687   /// \~english @par Type
688   ///       - method
689   /// \~english @par Detail
690   ///       Send started request to service. If service do not connect, save the request.\n
691   ///       Send request again when service connect. \n
692   /// \~english @see  svcWakeupRequest
693   ////////////////////////////////////////////////////////////////////////////////////
694 TSKM_ERR_t tskm_svcWakeupRequest(TSKM_SVC_CTX_t* p_svc,
695                                  TSKM_GSTEP_REQ_INFO_t* p_req);
696
697
698   /////////////////////////////////////////////////////////////////////////////////////
699   /// \ingroup tskm_svcDownRequest
700   /// \~english @par Summary
701   ///           Send service down request to service.
702   /// \~english @param  [in][out] p_svc
703   ///            p_svc   - pointer service
704   /// \~english @par
705   ///           p_svc   TSKM_SVC_CTX_t*
706   /// \~english @code
707   /// typedef struct {
708   ///   TSKM_SVC_ATTR_t *attr;      // attribute of service
709   ///   TSKM_SVC_STATE_t state;     // state of service
710   ///   int iFd;                    // inotifyFd used by touch
711   ///   pid_t pid;                  // PID of service
712   ///   int connFd;                 // service communicate fd
713   ///   T_SS_SM_START_DataStructType bootInfo;        // BOOT info
714   ///   T_SS_SM_START_ExtDataStructType extBootInfo;  // extend BOOT info
715   ///   TSKM_BOOL_t isShmDone;      // shared memory init done
716   ///   TSKM_BOOL_t isStepDone;     // step done
717   ///   TSKM_BOOL_t isAvailable;    // Availability flag
718   ///   uint32_t watchCnt;          // service monitor count
719   ///   uint32_t waitResCnt;        // wait response num
720   ///   uint32_t waitReqCnt;        // wait request num
721   ///   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];
722   ///   uint32_t errTermCnt;        // exception terminal count
723   /// } TSKM_SVC_CTX_t;
724   ///           @endcode
725   /// \~english @param  [in] p_req
726   ///            p_req   - request pointer
727   /// \~english @par
728   ///           p_req   TSKM_GSTEP_REQ_INFO_t*
729   /// \~english @code
730   /// typedef struct {
731   ///   TSKM_SVCID_t svcId;           // service ID
732   ///   TSKM_LOCAL_STEP_t localStep;  // local step id
733   /// } TSKM_GSTEP_REQ_INFO_t;
734   ///            @endcode
735   /// \~english @retval TSKM_ERR_t
736   /// \~english @par
737   ///            TSKM_E_OK
738   ///            TSKM_E_NG
739   /// \~english @par Preconditions
740   ///       -
741   /// \~english @par Change of the internal state
742   ///       -  The internal state is not changed.
743   /// \~english @par Causes of failures
744   ///       -  Send service down request failed [TSKM_E_NG]
745   /// \~english @par Classification
746   ///       - public
747   /// \~english @par Type
748   ///       - method
749   /// \~english @par Detail
750   ///       If service state is commounicated(TSKM_SVC_WAKEUP, TSKM_SVC_RUNNING), \n
751   ///            send service down request and set state as TSKM_SVC_DOWN.\n
752   /// \~english @see  tskm_svcIsCommunicatable,tskm_sockSend
753   ////////////////////////////////////////////////////////////////////////////////////
754 TSKM_ERR_t tskm_svcDownRequest(TSKM_SVC_CTX_t* p_svc,
755                                TSKM_GSTEP_REQ_INFO_t* p_req);
756
757   /////////////////////////////////////////////////////////////////////////////////////
758   /// \ingroup tskm_svcDisableRequest
759   /// \~english @par Summary
760   ///
761   /// \~english @param  [in][out] p_svc
762   ///            p_svc   - pointer of service
763   /// \~english @par
764   ///           p_svc   TSKM_SVC_CTX_t*
765   /// \~english @code
766   /// typedef struct {
767   ///   TSKM_SVC_ATTR_t *attr;      // attribute of service
768   ///   TSKM_SVC_STATE_t state;     // state of service
769   ///   int iFd;                    // inotifyFd used by touch
770   ///   pid_t pid;                  // PID of service
771   ///   int connFd;                 // service communicate fd
772   ///   T_SS_SM_START_DataStructType bootInfo;        // BOOT info
773   ///   T_SS_SM_START_ExtDataStructType extBootInfo;  // extend BOOT info
774   ///   TSKM_BOOL_t isShmDone;      // shared memory init done
775   ///   TSKM_BOOL_t isStepDone;     // step done
776   ///   TSKM_BOOL_t isAvailable;    // Availability flag
777   ///   uint32_t watchCnt;          // service monitor count
778   ///   uint32_t waitResCnt;        // wait response num
779   ///   uint32_t waitReqCnt;        // wait request num
780   ///   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];
781   ///   uint32_t errTermCnt;        // exception terminal count
782   /// } TSKM_SVC_CTX_t;
783   ///           @endcode
784   /// \~english @retval TSKM_ERR_t
785   /// \~english @par
786   ///            TSKM_E_OK
787   ///            TSKM_E_STATE
788   /// \~english @par Preconditions
789   ///       -
790   /// \~english @par Change of the internal state
791   ///       -  The internal state is not changed.
792   /// \~english @par Causes of failures
793   ///       -  If service state is not TSKM_SVC_DORMANT and TSKM_SVC_DISABLE. [TSKM_E_STATE]
794   /// \~english @par Classification
795   ///       -  public
796   /// \~english @par Type
797   ///       - method
798   /// \~english @par Detail
799   ///       Set service state as TSKM_SVC_DISABLE if state is TSKM_SVC_DORMANT.
800   /// \~english @see  None
801   ////////////////////////////////////////////////////////////////////////////////////
802 TSKM_ERR_t tskm_svcDisableRequest(TSKM_SVC_CTX_t* p_svc);
803
804   /////////////////////////////////////////////////////////////////////////////////////
805   /// \ingroup tskm_svcDisableRequest
806   /// \~english @par Summary
807   ///           Set service state as start available.
808   /// \~english @param  [in][out] p_svc
809   ///            p_svc   - Pointer to service
810   /// \~english @par
811   ///           p_svc   TSKM_SVC_CTX_t*
812   /// \~english @code
813   /// typedef struct {
814   ///   TSKM_SVC_ATTR_t *attr;      // attribute of service
815   ///   TSKM_SVC_STATE_t state;     // state of service
816   ///   int iFd;                    // inotifyFd used by touch
817   ///   pid_t pid;                  // PID of service
818   ///   int connFd;                 // service communicate fd
819   ///   T_SS_SM_START_DataStructType bootInfo;        // BOOT info
820   ///   T_SS_SM_START_ExtDataStructType extBootInfo;  // extend BOOT info
821   ///   TSKM_BOOL_t isShmDone;      // shared memory init done
822   ///   TSKM_BOOL_t isStepDone;     // step done
823   ///   TSKM_BOOL_t isAvailable;    // Availability flag
824   ///   uint32_t watchCnt;          // service monitor count
825   ///   uint32_t waitResCnt;        // wait response num
826   ///   uint32_t waitReqCnt;        // wait request num
827   ///   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];
828   ///   uint32_t errTermCnt;        // exception terminal count
829   /// } TSKM_SVC_CTX_t;
830   ///           @endcode
831   /// \~english @retval TSKM_ERR_t
832   /// \~english @par
833   ///            TSKM_E_OK
834   /// \~english @par Preconditions
835   ///       -
836   /// \~english @par Change of the internal state
837   ///       -  The internal state is not changed.
838   /// \~english @par Causes of failures
839   ///       -  none
840   /// \~english @par Classification
841   ///       - public
842   /// \~english @par Type
843   ///       - method
844   /// \~english @par Detail
845   ///           Set service state as start available which state is disable(TSKM_SVC_DISABLE).
846   /// \~english @see  None
847   ////////////////////////////////////////////////////////////////////////////////////
848 TSKM_ERR_t tskm_svcEnableRequest(TSKM_SVC_CTX_t* p_svc);
849
850   /////////////////////////////////////////////////////////////////////////////////////
851   /// \ingroup tskm_svcIsCommunicatable
852   /// \~english @par Summary
853   ///           Whether service is Communicatable.
854   /// \~english @param  [in] p_svc
855   ///            p_svc   - pointer of service
856   /// \~english @par
857   ///           p_svc   TSKM_SVC_CTX_t*
858   /// \~english @code
859   /// typedef struct {
860   ///   TSKM_SVC_ATTR_t *attr;      // attribute of service
861   ///   TSKM_SVC_STATE_t state;     // state of service
862   ///   int iFd;                    // inotifyFd used by touch
863   ///   pid_t pid;                  // PID of service
864   ///   int connFd;                 // service communicate fd
865   ///   T_SS_SM_START_DataStructType bootInfo;        // BOOT info
866   ///   T_SS_SM_START_ExtDataStructType extBootInfo;  // extend BOOT info
867   ///   TSKM_BOOL_t isShmDone;      // shared memory init done
868   ///   TSKM_BOOL_t isStepDone;     // step done
869   ///   TSKM_BOOL_t isAvailable;    // Availability flag
870   ///   uint32_t watchCnt;          // service monitor count
871   ///   uint32_t waitResCnt;        // wait response num
872   ///   uint32_t waitReqCnt;        // wait request num
873   ///   TSKM_GSTEP_REQ_INFO_t request[TSKM_SVC_WAIT_REQ_MAX];
874   ///   uint32_t errTermCnt;        // exception terminal count
875   /// } TSKM_SVC_CTX_t;
876   ///           @endcode
877   /// \~english @retval TSKM_BOOL_t
878   /// \~english @par
879   ///            TSKM_FALSE
880   ///            TSKM_TRUE
881   /// \~english @par Preconditions
882   ///       -
883   /// \~english @par Change of the internal state
884   ///       -  The internal state is not changed.
885   /// \~english @par Causes of failures
886   ///            - If input parameter p_svc is NULL.  [TSKM_FALSE]
887   ///            - If input parameter p_svc->attr->type is TSKM_SVC_TYPE_UNKNONW. [TSKM_FALSE]
888   ///            - If service state is TSKM_SVC_DORMANT or TSKM_SVC_WAITCONNECT or
889   ///              TSKM_SVC_FINDOWN orTSKM_SVC_DISABLE. [TSKM_FALSE]
890   /// \~english @par Classification
891   ///       - public
892   /// \~english @par Type
893   ///       - method
894   /// \~english @par Detail
895   ///       Whether service is Communicatable. \n
896   ///       If service state is TSKM_SVC_WAKEUP or TSKM_SVC_RUNNING or TSKM_SVC_DOWN, return TSKM_TRUE. \n
897   /// \~english @see  None
898   ////////////////////////////////////////////////////////////////////////////////////
899 TSKM_BOOL_t tskm_svcIsCommunicatable(TSKM_SVC_CTX_t* p_svc);
900
901 #endif  // TASK_MANAGER_SERVER_INCLUDE_SYSTEM_SERVICE_TSKM_SVC_H_
902 /** @}*/
903 /** @}*/
904 /** @}*/