common.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #ifndef COMMON_H
  2. #define COMMON_H
  3. /**
  4. * @file common.h
  5. * @brief 公共定义与常量声明
  6. *
  7. * 本文件定义了整个ISUP平台客户端项目的公共常量、宏定义、
  8. * 通用数据结构和对齐指令。
  9. */
  10. #include <stdio.h>
  11. #include <stdint.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <unistd.h>
  15. #include <pthread.h>
  16. #include <signal.h>
  17. #include <sys/types.h>
  18. #include <sys/socket.h>
  19. #include <netinet/in.h>
  20. #include <arpa/inet.h>
  21. #include <errno.h>
  22. #include <time.h>
  23. #include <stdarg.h>
  24. /* 版本信息 */
  25. #define PROJECT_NAME "Hikvision ISUP Client"
  26. #define PROJECT_VERSION "1.1.0"
  27. #define PROJECT_BUILD_DATE __DATE__ " " __TIME__
  28. /* 日志级别 */
  29. typedef enum {
  30. LOG_LEVEL_DEBUG = 0,
  31. LOG_LEVEL_INFO,
  32. LOG_LEVEL_WARN,
  33. LOG_LEVEL_ERROR,
  34. LOG_LEVEL_FATAL
  35. } LogLevel;
  36. /* 日志宏定义 */
  37. #define LOG_TAG "ISUP"
  38. #define LOG_PRINT(level, fmt, ...) \
  39. do { \
  40. fprintf(stderr, "[%s] [%s] [%s:%d:%s()] " fmt "\n", \
  41. LOG_TAG, \
  42. (level == LOG_LEVEL_DEBUG ? "DEBUG" : \
  43. level == LOG_LEVEL_INFO ? "INFO" : \
  44. level == LOG_LEVEL_WARN ? "WARN" : \
  45. level == LOG_LEVEL_ERROR ? "ERROR" : "FATAL"), \
  46. __FILE__, __LINE__, __func__, ##__VA_ARGS__); \
  47. } while(0)
  48. #define LOG_DEBUG(fmt, ...) LOG_PRINT(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
  49. #define LOG_INFO(fmt, ...) LOG_PRINT(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
  50. #define LOG_WARN(fmt, ...) LOG_PRINT(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
  51. #define LOG_ERROR(fmt, ...) LOG_PRINT(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
  52. #define LOG_FATAL(fmt, ...) LOG_PRINT(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__)
  53. /* 缓冲区大小 */
  54. #define MAX_BUF_SIZE 65536
  55. #define MAX_IP_SIZE 64
  56. #define MAX_PATH_SIZE 256
  57. #define MAX_DEVICE_ID 64
  58. #define MAX_CHANNEL_NUM 32
  59. #define MAX_ALARM_NUM 128
  60. #define MAX_PLAYBACK_NUM 16
  61. #define MAX_STREAM_NUM 32
  62. /* 默认端口配置 */
  63. #define DEFAULT_CMS_PORT 7031 /* CMS注册服务器端口 */
  64. #define DEFAULT_SMS_PORT 7660 /* SMS流媒体服务器端口 */
  65. #define DEFAULT_ALARM_PORT 9000 /* 报警服务器端口 */
  66. #define DEFAULT_RTMP_PORT 1935 /* RTMP推流端口 */
  67. #define DEFAULT_HTTP_PORT 8080 /* HTTP管理接口端口 */
  68. /* ISUP协议相关 */
  69. #define ISUP_PROTO_VERSION "ISUP5.0"
  70. #define REG_RETRY_INTERVAL 5 /* 注册重试间隔(秒) */
  71. #define HEARTBEAT_INTERVAL 30 /* 心跳间隔(秒) */
  72. #define STREAM_TIMEOUT 30 /* 流超时(秒) */
  73. /* 模拟图片配置 */
  74. #define SIM_IMAGE_DIR "./sim_images"
  75. #define SIM_IMAGE_WIDTH 1920
  76. #define SIM_IMAGE_HEIGHT 1080
  77. #define SIM_FPS 25
  78. #define SIM_BITRATE 4096000 /* 4Mbps */
  79. /* 状态码 */
  80. #define SUCCESS 0
  81. #define FAILURE -1
  82. #define NOT_FOUND -2
  83. #define INVALID_PARAM -3
  84. #define TIMEOUT -4
  85. #define UNAUTHORIZED -5
  86. /* 设备状态 */
  87. typedef enum {
  88. DEVICE_STATUS_OFFLINE = 0,
  89. DEVICE_STATUS_ONLINE,
  90. DEVICE_STATUS_REGISTERS,
  91. DEVICE_STATUS_STREAMING,
  92. DEVICE_STATUS_PLAYBACK
  93. } DeviceStatus;
  94. /* 日志函数指针类型 */
  95. typedef void (*LogCallback)(LogLevel level, const char* tag, const char* fmt, va_list args);
  96. /* 全局日志回调 */
  97. extern LogCallback g_log_callback;
  98. /**
  99. * @brief 设置日志回调函数
  100. * @param cb 日志回调函数指针
  101. */
  102. void set_log_callback(LogCallback cb);
  103. /**
  104. * @brief 格式化时间戳字符串
  105. * @param buf 输出缓冲区
  106. * @param bufsize 缓冲区大小
  107. * @param fmt 时间格式字符串(strftime格式)
  108. * @return 格式化后的字符串指针
  109. */
  110. char* get_timestamp(char* buf, size_t bufsize, const char* fmt);
  111. /**
  112. * @brief 字符串转小写
  113. * @param str 输入字符串
  114. * @return 转换后的字符串指针
  115. */
  116. char* str_tolower(char* str);
  117. /**
  118. * @brief 安全字符串复制
  119. * @param dest 目标缓冲区
  120. * @param src 源字符串
  121. * @param size 目标缓冲区大小
  122. * @return 复制的字符数
  123. */
  124. size_t safe_strcpy(char* dest, const char* src, size_t size);
  125. /* ============================================================
  126. * 工具函数声明(utils.c 实现)
  127. * ============================================================ */
  128. /** @brief 睡眠指定毫秒(可被信号中断) */
  129. int sleep_milliseconds(int ms);
  130. /** @brief 写入文本文件, 成功返回SUCCESS */
  131. int write_file(const char* path, const char* content);
  132. /** @brief 从简单 key=value 配置文件读取值(返回内部静态缓冲, 需自行拷贝) */
  133. char* read_config_value(const char* file, const char* key);
  134. /** @brief 确保目录存在(递归创建), 成功返回SUCCESS */
  135. int ensure_directory(const char* path);
  136. /** @brief 生成自增唯一ID */
  137. int generate_id(void);
  138. /** @brief 当前毫秒时间戳 */
  139. long long get_current_ms(void);
  140. /** @brief 当前秒时间戳 */
  141. long long get_current_s(void);
  142. #endif /* COMMON_H */