1 /******************************************************************************
2 ###############################################################################
3 # Copyright (c) [2017-2020] [ICT/CAS] #
4 # Licensed under the ORAN Software License v1.0 (License) #
5 ###############################################################################
6 ******************************************************************************/
15 #include "vos_types.h"
16 #include "vos_module.h"
18 #include "plat_syslog.h"
23 #define FILE_PATH_MAX 4096
28 * @param[in] appPath APP文件路径
29 * @param[in] cfgPath vos config 文件路径
30 * @param[in] mods 定义已存在模块的数组
31 * @param[in] num mods数组大小
32 * @return 成功时返回申请内存的地址,失败则返回NULL。
34 LONG VOS_Init(const CHAR *appPath,const CHAR *cfgPath,vos_module_t * mods,INT num);
39 * @param[in] ulSize 申请内存的大小
40 * @param[in] ulModuleId 申请模块的模块ID
41 * @return 成功时返回申请内存的地址,失败则返回NULL。
43 #define VOS_Malloc(ulSize,ulModuleId) VOS_MallocWithDebug(ulSize,ulModuleId,(UCHAR *)__FILE__,__LINE__)
48 * @param[in] ptr 释放内存的指针
50 #define VOS_Free(ptr) VOS_Free_Debug(ptr,(UCHAR *)__FILE__,__LINE__)
55 * @param[in] exp 当bExp为假时打印调用栈
57 #define VOS_ASSERT(exp) VOS_ASSERT_X( (LONG)(exp), __FILE__, __LINE__ , 0)
62 * 注意 LONG 输出时,要用%ld,或%lx
63 * @param[in] format 格式字符串
64 * @param[in] ... 要输出的变量
67 ULONG VOS_Printf(const CHAR *format ,...);
73 * @param[in] fmt 格式字符串
74 * @param[in] ... 要输出的变量
77 ULONG VOS_Sprintf(CHAR *buf ,CHAR *fmt, ...);
83 * @param[in] size buf的大小
84 * @param[in] fmt 格式字符串
85 * @param[in] ... 要输出的变量
88 ULONG VOS_Snprintf(CHAR *buf, ULONG size, CHAR *fmt, ...);
93 * @param[in] buf 要读取的字符串
95 * @param[in] ... 存储数据的指针
98 ULONG VOS_Sscanf(const CHAR * buf, const CHAR * fmt,...);
102 VOID VOS_qsort(VOID *base, INT nmemb, INT size,
103 INT (*compar)(const VOID *, const VOID *));
106 ULONG VOS_Vsnprintf(CHAR * buf, ULONG size, const CHAR * fmt, va_list args);
109 ULONG VOS_Vsprintf(CHAR * buf, const CHAR * fmt, va_list args);
113 * @param[in] path 文件路径
114 * @return path存在返回TURE,不存在则返回FALSE
116 BOOL VOS_file_exist(const CHAR *path);
118 #define NUM_LIST_MAX 4096
121 * 将数值list字符串(1-6,8,13)转换为,数组
122 * @param[in ] list 数值字符串
123 * @param[out] numList 解析后的数值数组
126 LONG parseNumList(const CHAR * list,ULONG numList[NUM_LIST_MAX]);
130 * 将数值list字符串(1-6,8,13)转换为一个ULONG bitmap
131 * @param[in ] list 数值字符串
132 * @param[out] map 解析后的bitmap
133 * @return 成功返回VOS_OK,失败返回其他
135 LONG parseNumList2BitMap(const CHAR * list,ULONG *map);
139 * @param[in ] seconds 延时的秒数
141 VOID VOS_Sleep(LONG seconds);
143 typedef VOID( *VOS_SIGNAL_FUNC ) ( int signal);
148 * @param[in ] sig_handler 回调函数
149 * @return 成功返回VOS_OK,失败返回VOS_ERROR
151 LONG Vos_Signal(int sig, VOS_SIGNAL_FUNC sig_handler);
156 * @param[in ] status 是否退出
157 * @param[in ] sig_handler 回调函数
158 * @return 成功返回VOS_OK,失败返回VOS_ERROR
160 LONG Product_Signal(int sig, ULONG status, VOS_SIGNAL_FUNC sig_handler);
163 * product最后处理的信号回调函数注册
165 * @param[in ] status 是否退出
166 * @param[in ] sig_handler 回调函数
167 * @return 成功返回VOS_OK,失败返回VOS_ERROR
169 LONG Product_Signal_Last(int sig, ULONG status, VOS_SIGNAL_FUNC sig_handler);
173 * @param[in ] signal 信号
174 * @return 成功返回VOS_OK,失败返回VOS_ERROR
176 LONG Vos_SignalInit();
182 #define SIGNAL_MAX 65
185 typedef enum VOS_MOD_EVENT_TYPE_S
187 VOS_MOD_EVENT_TYPE_ASYN = 1, ///< 异步消息
188 VOS_MOD_EVENT_TYPE_SYN = 2, ///< 同步消息
189 VOS_MOD_EVENT_TYPE_TIMER = 3, ///< 定时器消息
190 VOS_MOD_EVENT_TYPE_MAX = 0x100, ///< VOS 占用最大消息类型ID
191 }VOS_MOD_EVENT_TYPE_T;
193 #define VOS_MOD_EVENT_TYPE_MAC_UL (VOS_MOD_EVENT_TYPE_MAX+1)
196 /*=========================================================================================================================*/
197 /* ###### 下面的函数不要直接调用,使用上面提供的宏 ###### */
199 * 分配内存,不要直接调用该API,通过宏 VOS_Malloc 调用
200 * @param[in] size 申请内存的大小
201 * @param[in] moduleId 申请内存的模块ID
202 * @param[in] file 申请内存处的文件名
203 * @param[in] line 申请内存处的行号
204 * @return 成功时返回申请内存的地址,失败则返回NULL。
206 void* VOS_MallocWithDebug(unsigned long size, unsigned long moduleId, unsigned char *file, unsigned long line);
209 * 释放内存,不要直接调用该API,通过宏 VOS_Free 调用
210 * @param[in] ptr 释放内存的地址
211 * @param[in] file 释放内存处的文件名
212 * @param[in] line 释放内存处的行号
215 void VOS_Free_Debug(const void *ptr, UCHAR *file, ULONG line);
218 * 打印断言,根据bExp判断是否打印调用栈,不要直接调用该API,通过宏 VOS_ASSERT 调用
219 * @param[in] bExp 当bExp为假时打印调用栈
220 * @param[in] szFileName 打印处的文件名
221 * @param[in] iLine 打印处的行号
222 * @param[in] bOutConsole 输出fd
224 VOID VOS_ASSERT_X( BOOL bExp, CHAR *szFileName, INT iLine , INT bOutConsole);
226 /******计算某个函数运行时间******/
227 extern ULONG gTimerTickPerNsec;
228 uint64_t timer_get_ticks_diff(uint64_t CurrTick, uint64_t LastTick);
229 uint64_t timer_get_ticks(void);
233 #define VOS_CALC_ELAPSED_TIME_NS(func) \
235 uint64_t start, end; \
237 start = timer_get_ticks(); \
239 end = timer_get_ticks(); \
240 diff = timer_get_ticks_diff(end,start);\
241 vos_info_print("func %s spend diff %ld,gTimerTickPerNsec %ld, time = %ld ns,\n",#func ,diff,gTimerTickPerNsec,diff/gTimerTickPerNsec);\
244 #define __vos_start_tick() uint64_t start_tick = timer_get_ticks(),cur_tick = 0;
245 #define __vos_diff_tick() cur_tick = timer_get_ticks();printf("%s.%d diff ticks %ld \r\n",__func__,__LINE__,timer_get_ticks_diff(cur_tick,start_tick));start_tick = timer_get_ticks();
247 typedef LONG (*vos_print_wrapper_func_t)(void *dst,const char * format,...);
248 LONG vos_vty_out_wrapper(void *vty,const char * format, ... );
249 LONG vos_printf_wrapper(void *vty,const char * format, ... );
251 //#####################################################################################
253 #ifndef PLAT_MODULE_DEVSM
254 #define SYS_LOCAL_MODULE_SLOTNO_GET (1)
255 #define SYS_MODULE_IS_RUNNING(slotno) (VOS_TRUE)
259 //#####################################################################################
261 _vos_print_lv_info = 0,
262 _vos_print_lv_warning,
269 #define VOS_COLOR_NONE "\033[m"
270 #define VOS_COLOR_RED "\033[1;31m"
271 #define VOS_COLOR_BLUE "\033[1;34m"
272 #define VOS_COLOR_PURPLE "\033[1;35m"
273 #define VOS_COLOR_GREEN "\033[1;32m"
276 extern BOOL vos_info_print_filter_is_filtered(LONG lv,const char *val);
277 #define __is_p_(lv,val) vos_info_print_filter_is_filtered(lv,val)
278 #define __print_check(lv,func,line) char tmp1[200];snprintf(tmp1,sizeof(tmp1),"%s.%d",func,line);if( !( __is_p_(lv,tmp1)||__is_p_(lv,func)))
279 extern int sprintf(char *str, const char *format, ...);
280 #define vos_raw_print(_format, ...) printf(_format, ##__VA_ARGS__)
281 #define vos_info_print(_format, ...) {__print_check(_vos_print_lv_info,__func__,__LINE__){vos_raw_print(VOS_COLOR_BLUE"%s.%d:" _format VOS_COLOR_NONE"",__func__,__LINE__,##__VA_ARGS__);}}
283 extern vos_module_t module_print_filter;
284 #define __log_mid module_print_filter.moduleID
285 #define vos_warning_print(_format, ...) {__print_check(_vos_print_lv_warning,__func__,__LINE__){vos_raw_print(VOS_COLOR_PURPLE"%s.%d:"_format VOS_COLOR_NONE"",__func__,__LINE__,##__VA_ARGS__);VOS_log(__log_mid,SYSLOG_WARNING,_format, ##__VA_ARGS__);}}
286 #define vos_err_print(_format, ...) {__print_check(_vos_print_lv_err,__func__,__LINE__){vos_raw_print(VOS_COLOR_RED"%s.%d:"_format VOS_COLOR_NONE"",__func__,__LINE__,##__VA_ARGS__);VOS_log(__log_mid,SYSLOG_ERR,_format, ##__VA_ARGS__);}}
287 #define vos_perror(_format, ...) {__print_check(_vos_print_lv_err,__func__,__LINE__){char tmp[200];vos_raw_print(VOS_COLOR_RED"%s.%d:",__func__,__LINE__);vos_raw_print(_format, ##__VA_ARGS__);sprintf(tmp,"%m");vos_raw_print(": %s",tmp);vos_raw_print(VOS_COLOR_NONE"");VOS_log(__log_mid,SYSLOG_ERR,_format, ##__VA_ARGS__);}}
289 #define vos_warning_print(_format, ...) {__print_check(_vos_print_lv_warning,__func__,__LINE__){vos_raw_print(VOS_COLOR_PURPLE"%s.%d:"_format VOS_COLOR_NONE"",__func__,__LINE__,##__VA_ARGS__);}}
290 #define vos_err_print(_format, ...) {__print_check(_vos_print_lv_err,__func__,__LINE__){vos_raw_print(VOS_COLOR_RED"%s.%d:"_format VOS_COLOR_NONE"",__func__,__LINE__,##__VA_ARGS__);}}
291 #define vos_perror(_format, ...) {__print_check(_vos_print_lv_err,__func__,__LINE__){char tmp[200];vos_raw_print(VOS_COLOR_RED"%s.%d:",__func__,__LINE__);vos_raw_print(_format, ##__VA_ARGS__);sprintf(tmp,"%m");vos_raw_print(": %s",tmp);vos_raw_print(VOS_COLOR_NONE"");}}
294 #define NULL_CHECK(p) if(NULL == p) {vos_err_print(#p" is null\r\n");return VOS_ERROR;}
296 #define NULL_CHECK_RP(p) if(NULL == p) {vos_err_print(#p" is null\r\n");return NULL;}
299 #define RET_CHECK(bool,p) if(bool) {vos_err_print(#p" error\r\n");return VOS_ERROR;}
301 LONG VOS_mini_Init(VOID);// 调试时使用
302 LONG VOS_mini_Init_task(VOID);
303 LONG VOS_mini_Init_cli(VOID);
304 LONG VOS_mini_Init_cli_db(const CHAR *appPath,const CHAR *cfgPath,vos_module_t * mods,INT num);
305 LONG VOS_mini_Init_cli_alarm(const CHAR *appPath,const CHAR *cfgPath,vos_module_t * mods,INT num);
312 #endif /*_VOS_LIB_H_*/