• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef OHOS_MODULES_MANAGER_H__
17 #define OHOS_MODULES_MANAGER_H__
18 
19 #ifdef __cplusplus
20 #if __cplusplus
21 extern "C" {
22 #endif
23 #endif
24 
25 /**
26  * @brief Module constructor function
27  *
28  * For static modules, this code is executed before main().
29  * For dynamic modules, this code is executed when ModuleMgrInstall().
30  *
31  * Usage example:
32  *   MODULE_CONSTRUCTOR(void)
33  *   {
34  *       ...
35  *   }
36  */
37 #define MODULE_CONSTRUCTOR(void) static void _init(void) __attribute__((constructor)); static void _init(void)
38 
39 /**
40  * @brief Module destructor function
41  *
42  * For static modules, this code will not be executed.
43  * For dynamic modules, this code is executed when ModuleMgrUninstall().
44  *
45  * Usage example:
46  *   MODULE_DESTRUCTOR(void)
47  *   {
48  *       ...
49  *   }
50  */
51 #define MODULE_DESTRUCTOR(void) static void _destroy(void) __attribute__((destructor)); static void _destroy(void)
52 
53 // Forward declaration
54 typedef struct tagMODULE_MGR MODULE_MGR;
55 
56 /**
57  * @brief Create dynamic module manager
58  *
59  * This dynamic module manager will manager modules
60  * in the directory: /system/lib/{name}/
61  * @param name module manager name
62  * @return return module manager handle if succeed; return NULL if failed.
63  */
64 MODULE_MGR *ModuleMgrCreate(const char *name);
65 
66 /**
67  * @brief Destroy dynamic module manager
68  *
69  * It will uninstall all modules managed by this moduleMgr
70  * @param moduleMgr module manager handle
71  * @return None
72  */
73 void ModuleMgrDestroy(MODULE_MGR *moduleMgr);
74 
75 /**
76  * @brief Install a module
77  *
78  * The final module path is: /system/lib/{moduleMgrPath}/{moduleName}.z.so
79  *
80  * @param moduleMgr module manager handle
81  * @param moduleName module name
82  * @param argc argument counts for installing
83  * @param argv arguments for installing, the last argument is NULL.
84  * @return module handle returned by dlopen
85  */
86 int ModuleMgrInstall(MODULE_MGR *moduleMgr, const char *moduleName,
87                      int argc, const char *argv[]);
88 
89 /**
90  * @brief Module install arguments
91  */
92 typedef struct {
93     int argc;
94     const char **argv;
95 } MODULE_INSTALL_ARGS;
96 
97 /**
98  * @brief Get module install arguments
99  *
100  * This function is available only in MODULE_CONSTRUCTOR.
101  *
102  * @return install args if succeed; return NULL if failed.
103  */
104 const MODULE_INSTALL_ARGS *ModuleMgrGetArgs(void);
105 
106 /**
107  * @brief Scan and install all modules in specified directory
108  *
109  * @param modulePath path for modules to be installed
110  * @return install args if succeed; return NULL if failed.
111  */
112 MODULE_MGR *ModuleMgrScan(const char *modulePath);
113 
114 /**
115  * @brief Uninstall module
116  *
117  * @param moduleMgr module manager handle
118  * @param name module name. If name is NULL, it will uninstall all modules.
119  * @return install args if succeed; return NULL if failed.
120  */
121 void ModuleMgrUninstall(MODULE_MGR *moduleMgr, const char *name);
122 
123 /**
124  * @brief Get number of modules in module manager
125  *
126  * @param hookMgr module manager handle
127  * @return number of modules, return 0 if none
128  */
129 int ModuleMgrGetCnt(const MODULE_MGR *moduleMgr);
130 
131 /**
132  * @brief Module information for traversing modules
133  */
134 typedef struct tagMODULE_INFO {
135     const char *name;     /* module name */
136     void *handle;         /* module handler */
137     void *cookie;         /* hook execution cookie */
138 } MODULE_INFO;
139 
140 /**
141  * @brief Module traversal function prototype
142  *
143  * @param moduleInfo MODULE_INFO for traversing each module.
144  * @return None
145  */
146 typedef void (*OhosModuleTraversal)(const MODULE_INFO *moduleInfo);
147 
148 /**
149  * @brief Traversing all modules in the ModuleManager
150  *
151  * @param moduleMgr module manager handle
152  * @param cookie traversal cookie.
153  * @param traversal traversal function.
154  * @return None.
155  */
156 void ModuleMgrTraversal(const MODULE_MGR *moduleMgr, void *cookie, OhosModuleTraversal traversal);
157 
158 #ifdef __cplusplus
159 #if __cplusplus
160 }
161 #endif
162 #endif
163 #endif
164