作者 ookk303

更新

正在显示 37 个修改的文件 包含 4270 行增加0 行删除

要显示太多修改。

为保证性能只显示 37 of 37+ 个文件。

  1 +# Compiled class file
  2 +project_build
  3 +ThirdParty
  4 +ModuleLib
  5 +备份
  1 +# 编译链的配置
  2 +
  3 +#1、编译链与设备类型的选择
  4 +set(DEVICE_NAME JZ_H1T)
  5 +#上一行为禁止修改行
  6 +
  7 +if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
  8 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  9 + set(DEVICE_TYPE MEGAPHONE)
  10 +elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
  11 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  12 + set(DEVICE_TYPE MEGAPHONE)
  13 +elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S")
  14 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  15 + set(DEVICE_TYPE MEGAPHONE)
  16 +elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T")
  17 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  18 + set(DEVICE_TYPE MEGAPHONE)
  19 +elseif("${DEVICE_NAME}" STREQUAL "JZ_H10")
  20 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  21 + set(DEVICE_TYPE MEGAPHONE)
  22 +elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T")
  23 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  24 + set(DEVICE_TYPE MEGAPHONE)
  25 +elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
  26 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  27 + set(DEVICE_TYPE MEGAPHONE)
  28 +elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
  29 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  30 + set(DEVICE_TYPE MEGAPHONE)
  31 +elseif("${DEVICE_NAME}" STREQUAL "TF_A1")
  32 + set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
  33 + set(DEVICE_TYPE MEGAPHONE)
  34 +elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
  35 + set(MAKE_COMPILER ARM_X86_64_ARRCH64)
  36 +endif()
  37 +
  38 +if(${MAKE_COMPILER} STREQUAL "ARM_CORTEXA9_LINUX")
  39 + set(TOOLCHAIN_NAME arm-linux-gnueabihf-gcc)
  40 + set(CMAKE_C_COMPILER "/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc")
  41 + set(CMAKE_CXX_COMPILER "/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++")
  42 + message("使用ARM_CORTEXA9_LINUX编译链")
  43 +
  44 +elseif(${MAKE_COMPILER} STREQUAL "ARM_CORTEX_LINUX")
  45 + set(TOOLCHAIN_NAME arm-linux-gnueabihf-gcc)
  46 + set(CMAKE_C_COMPILER "/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc")
  47 + set(CMAKE_CXX_COMPILER "/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++")
  48 + message("使用ARM_CORTEX_LINUX编译链")
  49 +
  50 +elseif(${MAKE_COMPILER} STREQUAL "ARM_X86_64_ARRCH64")
  51 + # 交叉编译链3
  52 + set(TOOLCHAIN_NAME aarch64-linux-gnu-gcc)
  53 + set(CMAKE_C_COMPILER "/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc")
  54 + set(CMAKE_CXX_COMPILER "/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++")
  55 + message("使用ARM_X86_64_ARRCH64编译链")
  56 +
  57 +elseif(${MAKE_COMPILER} STREQUAL "LOCAL")
  58 + # 本地测试编译链
  59 + set(CMAKE_C_COMPILER "/usr/bin/gcc")
  60 + set(CMAKE_CXX_COMPILER "/usr/bin/g++")
  61 + message("使用LOCAL编译链")
  62 +
  63 +else()
  64 + message(FATAL_ERROR "不支持的编译链")
  65 +endif()
  66 +
  67 +message("编译链配置完毕\n")
  1 +# ModuleConfig.cmake 模组模块的配置文件
  2 +
  3 +###################### 自己的库 ##############################
  4 +# AudioDeal 音频处理模块
  5 +set(AUDIODEAL_MODULE VERSION_SWITCH_OFF)
  6 +
  7 +# 信息模块
  8 +set(DEVICE_INFO_MODULE VERSION_SWITCH_OFF)
  9 +
  10 +# Gimbal 云台处理模块
  11 +set(GIMBAL_MODULE VERSION_SWITCH_OFF)
  12 +
  13 +# IRCUT 引脚处理模块
  14 +set(IRCUT_MODULE VERSION_SWITCH_OFF)
  15 +
  16 +# LIGHTING 光源处理模块
  17 +set(LIGHTING_MODULE VERSION_SWITCH_OFF)
  18 +
  19 +# MediaProc 媒体管理模块
  20 +set(MEDIA_PROC_MODULE VERSION_SWITCH_OFF)
  21 +
  22 +# 喊话器模块
  23 +set(MEGAPHONE_MODULE VERSION_SWITCH_OFF)
  24 +
  25 +# 电源管理模块
  26 +set(POWER_MANAGER_MODULE VERSION_SWITCH_OFF)
  27 +
  28 +# UI管理模块
  29 +set(UI_CONTROL_MODULE VERSION_SWITCH_OFF)
  30 +
  31 +# 红外相机模块
  32 +set(IRC_MODULE VERSION_SWITCH_OFF)
  33 +
  34 +# 侧面激光模块
  35 +set(SIDE_LASER_MODULE VERSION_SWITCH_OFF)
  36 +
  37 +###################### 第三方库 ##############################
  38 +
  39 +# FFMPEG及其附属模块
  40 +set(FFMPEG_MODULE VERSION_SWITCH_OFF)
  41 +
  42 +# cedarxLib
  43 +set(CedarxLib VERSION_SWITCH_OFF)
  44 +
  45 +########################## 通用库 ###########################################
  46 +
  47 +# 添加信息模块
  48 +set(DEVICE_INFO_MODULE VERSION_SWITCH_ON)
  49 +
  50 +# 添加UI管理模块
  51 +set(UI_CONTROL_MODULE VERSION_SWITCH_ON)
  52 +
  53 +#####################################################################
  54 +
  55 +if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
  56 +
  57 +elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
  58 +
  59 + # 添加AudioDeal 音频处理模块
  60 + set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
  61 +
  62 + # 添加Gimbal 云台处理模块
  63 + set(GIMBAL_MODULE VERSION_SWITCH_ON)
  64 +
  65 + # 添加IRCUT 引脚处理模块
  66 + set(IRCUT_MODULE VERSION_SWITCH_ON)
  67 +
  68 + # 添加LIGHTING 光源处理模块
  69 + set(LIGHTING_MODULE VERSION_SWITCH_ON)
  70 +
  71 + # 添加喊话器模块
  72 + set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
  73 +
  74 + # 添加电源管理模块
  75 + set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
  76 +
  77 + # 添加FFMPEG及其附属模块
  78 + set(FFMPEG_MODULE VERSION_SWITCH_ON)
  79 +
  80 +elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
  81 +
  82 + # 添加AudioDeal 音频处理模块
  83 + set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
  84 +
  85 + # 添加Gimbal 云台处理模块
  86 + set(GIMBAL_MODULE VERSION_SWITCH_ON)
  87 +
  88 + # 添加IRCUT 引脚处理模块
  89 + set(IRCUT_MODULE VERSION_SWITCH_ON)
  90 +
  91 + # 添加LIGHTING 光源处理模块
  92 + set(LIGHTING_MODULE VERSION_SWITCH_ON)
  93 +
  94 + # 添加喊话器模块
  95 + set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
  96 +
  97 + # 添加电源管理模块
  98 + set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
  99 +
  100 + # 添加FFMPEG及其附属模块
  101 + set(FFMPEG_MODULE VERSION_SWITCH_ON)
  102 +
  103 + # 添加激光模块
  104 + set(SIDE_LASER_MODULE VERSION_SWITCH_ON)
  105 +
  106 +elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
  107 +
  108 + # 添加Gimbal 云台处理模块
  109 + set(GIMBAL_MODULE VERSION_SWITCH_ON)
  110 +
  111 + # 添加IRCUT 引脚处理模块
  112 + set(IRCUT_MODULE VERSION_SWITCH_ON)
  113 +
  114 + # 添加LIGHTING 光源处理模块
  115 + set(LIGHTING_MODULE VERSION_SWITCH_ON)
  116 +
  117 + # 添加MediaProc 媒体管理模块
  118 + set(MEDIA_PROC_MODULE VERSION_SWITCH_ON)
  119 +
  120 + # 添加电源管理模块
  121 + set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
  122 +
  123 + # 添加红外相机模块
  124 + set(IRC_MODULE VERSION_SWITCH_ON)
  125 +endif()
  126 +
  127 +message("模组模块已加载\n")
  1 +
  2 +# ModuleLoading.cmake 模块加载文件
  3 +
  4 +
  5 +if(${IFLAY_TTS_MODULE} STREQUAL "VERSION_SWITCH_ON")
  6 + set(iFLYTEK_TTS_DIRS "${ROOT_DIRS}ThirdParty/iFLYTEK_TTS/lib/arm-cortexa9-linux-gnueabihf")
  7 + include_directories(${ROOT_DIRS}ThirdParty/iFLYTEK_TTS/include)
  8 + target_link_libraries(
  9 + ${PROJECT_NAME}
  10 + ${iFLYTEK_TTS_DIRS}/libmsc.so
  11 + )
  12 + message("讯飞TTS模块已加载\n")
  13 +endif()
  14 +
  15 +if(${ESPEAK_TTS_MODULE} STREQUAL "VERSION_SWITCH_ON")
  16 + set(ESPEAK_TTS_DIRS "${ROOT_DIRS}ThirdParty/Espeak/lib/arm-cortexa9-linux-gnueabihf")
  17 + include_directories(${ROOT_DIRS}ThirdParty/Espeak/include)
  18 + target_link_libraries(
  19 + ${PROJECT_NAME}
  20 + ${ESPEAK_TTS_DIRS}/libportaudio.so.2
  21 + ${ESPEAK_TTS_DIRS}/libTTS_Player.so
  22 + )
  23 + message("Espeak模块已加载\n")
  24 +endif()
  25 +
  26 +if(${ALSALIB_MODULE} STREQUAL "VERSION_SWITCH_ON")
  27 + set(ALSALIB_DIRS "${ROOT_DIRS}ThirdParty/AlsaLib/lib/arm-cortexa9-linux-gnueabihf")
  28 + include_directories(${ROOT_DIRS}ThirdParty/AlsaLib/include)
  29 + target_link_libraries(
  30 + ${PROJECT_NAME}
  31 + ${ALSALIB_DIRS}/libasound.so.2.0.0
  32 + )
  33 + message("alsalib已加载\n")
  34 +endif()
  35 +
  36 +if(${OPUS_MODULE} STREQUAL "VERSION_SWITCH_ON")
  37 + set(OPUS_DIRS "${ROOT_DIRS}ThirdParty/opus/lib/arm-cortexa9-linux-gnueabihf")
  38 + include_directories(${ROOT_DIRS}ThirdParty/opus/include)
  39 + target_link_libraries(
  40 + ${PROJECT_NAME}
  41 + ${OPUS_DIRS}/libopus.so
  42 + )
  43 + message("OPUS模块已加载\n")
  44 +endif()
  45 +
  46 +if(${CedarxLib} STREQUAL "VERSION_SWITCH_ON")
  47 + message("\nCedarX已加载\n")
  48 + target_link_libraries(${PROJECT_NAME}
  49 + ${ROOT_DIRS}ModuleLib/Camera/CedarX/libawh264.so
  50 + ${ROOT_DIRS}ModuleLib/Camera/CedarX/libMemAdapter.so
  51 + ${ROOT_DIRS}ModuleLib/Camera/CedarX/libVE.so
  52 + ${ROOT_DIRS}ModuleLib/Camera/CedarX/libvencoder.so
  53 + ${ROOT_DIRS}ModuleLib/Camera/CedarX/libvideoengine.so
  54 + ${ROOT_DIRS}ModuleLib/Camera/CedarX/libvdecoder.so
  55 + )
  56 +
  57 + message("\n OpenCV已加载\n")
  58 + target_link_libraries(${PROJECT_NAME}
  59 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_calib3d.so
  60 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_core.so
  61 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_dnn.so
  62 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_features2d.so
  63 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_flann.so
  64 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_highgui.so
  65 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_imgcodecs.so
  66 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_imgproc.so
  67 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_ml.so
  68 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_objdetect.so
  69 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_photo.so
  70 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_shape.so
  71 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_stitching.so
  72 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_superres.so
  73 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_videoio.so
  74 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_video.so
  75 + ${ROOT_DIRS}ModuleLib/OpenCV/libopencv_videostab.so
  76 + )
  77 +
  78 + message("\n ffmpeg已加载\n")
  79 + target_link_libraries(${PROJECT_NAME}
  80 + ${ROOT_DIRS}ModuleLib/ffmpeg/libavcodec.so
  81 + ${ROOT_DIRS}ModuleLib/ffmpeg/libavdevice.so
  82 + ${ROOT_DIRS}ModuleLib/ffmpeg/libavfilter.so
  83 + ${ROOT_DIRS}ModuleLib/ffmpeg/libavformat.so
  84 + ${ROOT_DIRS}ModuleLib/ffmpeg/libavutil.so
  85 + ${ROOT_DIRS}ModuleLib/ffmpeg/libswresample.so
  86 + ${ROOT_DIRS}ModuleLib/ffmpeg/libswscale.so
  87 + )
  88 +
  89 + message("\n SearchLightCenter已加载\n")
  90 + target_link_libraries(${PROJECT_NAME}
  91 + ${ROOT_DIRS}ModuleLib/SearchLightCenter/libcenter.so
  92 + )
  93 +
  94 +endif()
  95 +
  96 +
  97 +if(${FFMPEG_MODULE} STREQUAL "VERSION_SWITCH_ON")
  98 + message("\nffmpeg模块加载\n")
  99 + set(FFMPEG_6_0_DIRS "${ROOT_DIRS}ThirdParty/ffmpeg_6_0/lib/arm-cortexa9-linux-gnueabihf")
  100 + include_directories(${ROOT_DIRS}ThirdParty/ffmpeg_6_0/include)
  101 + target_link_libraries(
  102 + ${PROJECT_NAME}
  103 + ${FFMPEG_6_0_DIRS}/libavcodec.so.60
  104 + ${FFMPEG_6_0_DIRS}/libavdevice.so.60
  105 + ${FFMPEG_6_0_DIRS}/libavfilter.so.9
  106 + ${FFMPEG_6_0_DIRS}/libavformat.so.60
  107 + ${FFMPEG_6_0_DIRS}/libavutil.so.58
  108 + ${FFMPEG_6_0_DIRS}/libpostproc.so.57
  109 + ${FFMPEG_6_0_DIRS}/libswresample.so.4
  110 + ${FFMPEG_6_0_DIRS}/libswscale.so.7
  111 + )
  112 +
  113 + message("x264模块已加载\n")
  114 + set(X264_DIRS "${ROOT_DIRS}ThirdParty/x264_2245/lib/arm-cortexa9-linux-gnueabihf")
  115 + include_directories(${ROOT_DIRS}ThirdParty/x264_2245/include)
  116 + target_link_libraries(
  117 + ${PROJECT_NAME}
  118 + ${X264_DIRS}/libx264.so.157
  119 + )
  120 +
  121 + message("FDK_AAC模块已加载\n")
  122 + set(FDK_AAC_DIRS "${ROOT_DIRS}ThirdParty/fdk_aac_2_0_3/lib/arm-cortexa9-linux-gnueabihf")
  123 + include_directories(${ROOT_DIRS}ThirdParty/fdk_aac_2_0_3/include)
  124 + target_link_libraries(
  125 + ${PROJECT_NAME}
  126 + ${FDK_AAC_DIRS}/libfdk-aac.so.2
  127 + )
  128 +
  129 +endif()
  130 +
  131 +
  132 +#rtk_mmp库
  133 +if(${LIB_RTK_MMP} STREQUAL "VERSION_SWITCH_ON")
  134 + message("RTK_MMP库已加载\n")
  135 + add_definitions(-DMACRO_RTK_MPP_MODULE) #加载usb模块
  136 +
  137 + include_directories(${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/include)
  138 + target_link_libraries(
  139 + ${PROJECT_NAME}
  140 + ${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/lib/librockchip_mpp.so.0
  141 + ${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/lib/librockchip_vpu.so.0
  142 + )
  143 +endif()
  144 +
  145 +#usb库
  146 +if(${LIB_USB} STREQUAL "VERSION_SWITCH_ON")
  147 + add_definitions(-DMACRO_USB_MODULE) #加载usb模块
  148 +
  149 + message("USB库已加载\n")
  150 + include_directories(${ROOT_DIRS}/ThirdParty/libusb/aarch64-none-linux-gnu/include)
  151 + target_link_libraries(
  152 + ${PROJECT_NAME}
  153 + ${ROOT_DIRS}/ThirdParty/libusb/aarch64-none-linux-gnu/lib/libusb-1.0.so.0.4.0
  154 + )
  155 +
  156 + message("udev库已加载\n")
  157 +
  158 + include_directories(${ROOT_DIRS}/ThirdParty/udev/aarch64-none-linux-gnu/include)
  159 + target_link_libraries(
  160 + ${PROJECT_NAME}
  161 + ${ROOT_DIRS}/ThirdParty/udev/aarch64-none-linux-gnu/lib/libudev.so.1.6.3
  162 + )
  163 +endif()
  1 +# SubsidiaryThirdPartyConfig.cmake 附属第三方库配置文件
  2 +
  3 +set(IFLAY_TTS_MODULE VERSION_SWITCH_OFF)
  4 +set(ESPEAK_TTS_MODULE VERSION_SWITCH_OFF)
  5 +set(ALSALIB_MODULE VERSION_SWITCH_OFF)
  6 +set(OPUS_MODULE VERSION_SWITCH_OFF)
  7 +set(LIB_RTK_MMP VERSION_SWITCH_OFF)
  8 +set(LIB_USB VERSION_SWITCH_OFF)
  9 +
  10 +add_definitions(-D COMPILE_MODE_MODULE) #设置代码为编译模式
  11 +
  12 +if(${MEGAPHONE_MODULE} STREQUAL "VERSION_SWITCH_ON")
  13 + message("\n喊话器模块已加载")
  14 + add_definitions(-DMACRO_MEGAPHONE_MODULE) #加载喊话器模块
  15 +
  16 + message("加载讯飞TTS模块")
  17 + set(IFLAY_TTS_MODULE VERSION_SWITCH_ON)
  18 +
  19 + message("加载espeak模块")
  20 + set(ESPEAK_TTS_MODULE VERSION_SWITCH_ON)
  21 +
  22 + message("加载alsalib模块")
  23 + set(ALSALIB_MODULE VERSION_SWITCH_ON)
  24 +
  25 + message("加载OPUS模块")
  26 + set(OPUS_MODULE VERSION_SWITCH_ON)
  27 +endif()
  28 +
  29 +if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON")
  30 + message("\n红外相机模块已加载")
  31 + add_definitions(-DMACRO_IRC_MODULE)
  32 +
  33 + message("加载RTK模块")
  34 + set(LIB_RTK_MMP VERSION_SWITCH_ON)
  35 +
  36 + message("加载USB模块")
  37 + set(LIB_USB VERSION_SWITCH_ON)
  38 +
  39 + message("\n媒体管理模块已加载")
  40 + add_definitions(-DMACRO_MEDIA_PROC_MODULE)
  41 +
  42 +endif()
  43 +
  44 +if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON")
  45 + message("加载侧面激光模块")
  46 + add_definitions(-DMACRO_SIDE_LASER_MODULE)
  47 +endif()
  48 +
  49 +
  50 +message("附属库已加载\n")
  1 +#include <stdio.h>
  2 +#include "JZsdkLib.h"
  3 +#include "./JZsdk_TaskManagement/TaskManagement.h"
  4 +
  5 +//初始化sdk
  6 +T_JZsdkReturnCode JZsdk_LibInit()
  7 +{
  8 + //1、初始化log
  9 + JZsdk_LoggerInit();
  10 +
  11 + //2、任务管理系统初始化
  12 + TaskManagement_Init();
  13 +
  14 + JZSDK_LOG_INFO("Lib加载已完成");
  15 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdkLib.h
  4 + * JZsdk的头文件
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDKLIB_H
  11 +#define JZSDKLIB_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +#include "JZsdk_Base/JZsdkBase.h"
  22 +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
  23 +
  24 +#include "JZsdk_CommonFuntion/JZsdkCommonFuntion.h"
  25 +/* Exported types ------------------------------------------------------------*/
  26 +
  27 +/* Exported functions --------------------------------------------------------*/
  28 +T_JZsdkReturnCode JZsdk_LibInit();
  29 +
  30 +
  31 +#ifdef __cplusplus
  32 +}
  33 +#endif
  34 +
  35 +#endif
  36 +/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdkBase.h
  4 + * JZsdk基础部件的头文件
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDKBASE_H
  11 +#define JZSDKBASE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +#include "JZsdk_Logger/JZsdk_Logger.h"
  22 +#include "JZsdk_Osal/JZsdk_FileSystm.h"
  23 +#include "JZsdk_Delay/JZsdk_Delay.h"
  24 +#include "JZsdk_Code/JZsdk_FLagCode.h"
  25 +#include "JZsdk_Osal/JZsdk_MemoryAdapter.h"
  26 +
  27 +/* Exported types ------------------------------------------------------------*/
  28 +
  29 +
  30 +/* Exported functions --------------------------------------------------------*/
  31 +
  32 +
  33 +#ifdef __cplusplus
  34 +}
  35 +#endif
  36 +
  37 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_Code.h
  4 + * 用于记录各类码的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_CODE_H
  11 +#define JZSDK_CODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +#include "./JZsdk_InsCode.h"
  23 +#include "./JZsdk_FLagCode.h"
  24 +#include "./JZsdk_ReturnCode.h"
  25 +#include "./JZsdk_FileType.h"
  26 +
  27 +/* Exported types ------------------------------------------------------------*/
  28 +
  29 +
  30 +/* Exported functions --------------------------------------------------------*/
  31 +
  32 +#ifdef __cplusplus
  33 +}
  34 +#endif
  35 +
  36 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_ErrorCode.h
  4 + * 用于错误码的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_ERRORCODE_H
  11 +#define JZSDK_ERRORCODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +
  23 +/* Exported types ------------------------------------------------------------*/
  24 +typedef enum {
  25 + JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS = 0x0000,
  26 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE = 0x0001,
  27 + JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER = 0x0002, //文件指针错误
  28 +} JZ_SYSTEM_Code;
  29 +
  30 +typedef enum {
  31 + JZ_ERROR_SYSTEM_FRAME_ERROR = 0x0100,
  32 +
  33 +} JZ_Syetem_frame_ErrorCode;
  34 +
  35 +typedef enum {
  36 + JZ_ERRORCODE_MUSIC_NOT_FOUND_IN_LIST = 0x1000
  37 +
  38 +} JZ_Megaphone_music_ErrorCode;
  39 +
  40 +typedef enum {
  41 + JZ_ERRORCODE_REALTIMEVOICE_HAS_BEEN_ON = 0x1201
  42 +
  43 +} JZ_Megaphone_opus_ErrorCode;
  44 +
  45 +typedef enum {
  46 + JZ_ERRORCODE_TTS_INVALID_TONE = 0x1300,
  47 + JZ_ERRORCODE_TTS_INVALID_SPEED = 0x1301,
  48 + JZ_ERRORCODE_TTS_INVALID_ADDTONE = 0x1302,
  49 +
  50 +} JZ_Megaphone_TTS_ErrorCode;
  51 +
  52 +typedef enum {
  53 + JZ_ERRORCODE_GIMBAL_INVALID_PITCH = 0x4000,
  54 + JZ_ERRORCODE_GIMBAL_INVALID_YAW = 0x4001,
  55 + JZ_ERRORCODE_GIMBAL_INVALID_ROLL = 0x4002,
  56 +
  57 +} JZ_Gimbal_ErrorCode;
  58 +/* Exported functions --------------------------------------------------------*/
  59 +
  60 +#ifdef __cplusplus
  61 +}
  62 +#endif
  63 +
  64 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_FLagCode.h
  4 + * 用于标识码的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FLAGCODE_H
  11 +#define JZSDK_FLAGCODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +typedef enum JZ_Flag_Code{
  23 + JZ_FLAGCODE_OFF = 0x0000,
  24 + JZ_FLAGCODE_ON = 0x0001,
  25 + JZ_FLAGCODE_GET = 0x0010, //获取指令
  26 + JZ_FLAGCODE_SET = 0x0011, //设置指令
  27 +
  28 + JZ_FLAGCODE_NORMAL = 0x00FF, //默认模式
  29 +} JZ_Flag_Code;
  30 +
  31 +/* Exported types ------------------------------------------------------------*/
  32 +
  33 +
  34 +/* Exported functions --------------------------------------------------------*/
  35 +
  36 +#ifdef __cplusplus
  37 +}
  38 +#endif
  39 +
  40 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_FileType.h
  4 + * 用于记录文件类型的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FILE_TYPE_H
  11 +#define JZSDK_FILE_TYPE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +
  23 +/* Exported types ------------------------------------------------------------*/
  24 +typedef enum {
  25 + AUDIO_TYPE_WAV = 0x00000001,
  26 + AUDIO_TYPE_MP3 = 0x00000002,
  27 + AUDIO_TYPE_OPUS = 0x00000003,
  28 + AUDIO_TYPE_PCM = 0x00000004,
  29 +} JZ_AUDIO_FILE_TYPE;
  30 +
  31 +/* Exported functions --------------------------------------------------------*/
  32 +
  33 +#ifdef __cplusplus
  34 +}
  35 +#endif
  36 +
  37 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_InsCode.h
  4 + * 用于错误码的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_INSCODE_H
  11 +#define JZSDK_INSCODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +typedef enum {
  23 +
  24 +//5A类帧
  25 + JZ_INSCODE_5AFRAME_FRAME = 0x10000000, //接收类帧
  26 +
  27 + JZ_INSCODE_5AFRAME_ASKFORCONNECT = 0x10000100, //申请连接
  28 + JZ_INSCODE_5AFRAME_HEARTBEAT = 0x10000101, //心跳帧
  29 + JZ_INSCODE_5AFRAME_TIMESTAMP = 0x10000102, //时间戳帧
  30 + JZ_INSCODE_5AFRAME_ALL_VERSION = 0x10000103, //全版本查询
  31 + JZ_INSCODE_5AFRAME_ALL_SERIAL_NUMBER = 0x10000104, //全序列号查询
  32 + JZ_INSCODE_5AFRAME_LOG_MESSAGE_PRINTF = 0x10000105, //log信息打印
  33 + JZ_INSCODE_5AFRAME_DEVICE_MESSAGE = 0x10000106, //设备信息
  34 +
  35 + JZ_INSCODE_5AFRAME_FRAME_POWER_STATUS = 0x10000110, //电源状态设置
  36 +
  37 + JZ_INSCODE_5AFRAME_REALTIMEMP2_START = 0x10000200, //开启实时MP2
  38 + JZ_INSCODE_5AFRAME_REALTIMEMP2_UNLIMIT_TRANSMISSION = 0x10000201, //无限制传输实时MP2
  39 + JZ_INSCODE_5AFRAME_REALTIMEMP2_STOP = 0x10000202, //结束实时MP2
  40 + JZ_INSCODE_5AFRAME_REALTIMEMP2_LIMIT_TRANSMISSION = 0x10000203, //有限制传输MP2
  41 +
  42 + JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_START = 0x10000300, //打开音频文件上传
  43 + JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_UNLIMIT_TRANSMISSION = 0x10000301, //无限制传输音频文件
  44 + JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP = 0x10000302, //关闭音频文件上传
  45 + JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_LIMIT_TRANSMISSION = 0x10000303, //定长传输音频文件
  46 +
  47 + JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE = 0x10000400, //播放指定音频
  48 + JZ_INSCODE_5AFRAME_AUDIO_CONTINUE = 0x10000401, //音频继续播放
  49 + JZ_INSCODE_5AFRAME_AUDIO_PAUSE = 0x10000402, //音频暂停播放
  50 + JZ_INSCODE_5AFRAME_AUDIO_STOP = 0x10000403, //音频停止播放
  51 +
  52 + JZ_INSCODE_5AFRAME_AUDIO_LASTSONG = 0x10000410, //音频上一曲
  53 + JZ_INSCODE_5AFRAME_AUDIO_NEXTSONG = 0x10000411, //音频下一曲
  54 +
  55 + JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST = 0x10000420, //获取音频列表
  56 +
  57 +
  58 + JZ_INSCODE_5AFRAME_AMPLIFIER_STOP = 0x10000500, //强制关闭功放
  59 + JZ_INSCODE_5AFRAME_AMPLIFIER_OPEN = 0x10000501, //强制开启功放
  60 + JZ_INSCODE_5AFRAME_AMPLIFIER_AUTO = 0x10000502, //恢复自动功放
  61 +
  62 + JZ_INSCODE_5AFRAME_VOLUME = 0x10000600, //调节音量
  63 +
  64 + JZ_INSCODE_5AFRAME_CHECKSTATUS_VOLUME = 0x10000620, //查询音量
  65 + JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAY = 0x10000621, //查询播放状态
  66 + JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL = 0x10000622, //查询云台角度
  67 + JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING = 0x10000623, //查询云台微调角度
  68 +
  69 + JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAYFILENAME = 0x10000624, //查询播放文件名
  70 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SOFTWAREVERSION = 0x10000625, //查询软件版本号
  71 + JZ_INSCODE_5AFRAME_CHECKSTATUS_LOOPPLAY = 0x10000626, //查询是否打开循环
  72 + JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSTONE = 0x10000627, //查询音色
  73 + JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSSPEED = 0x10000628, //查询语速
  74 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE = 0x10000629, //查询探照灯 灯3个属性
  75 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN = 0x10000630, //查询探照灯流明
  76 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY = 0x10000631, //查询探照灯频率
  77 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_MODE = 0x10000632, //查询探照灯模式
  78 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE = 0x10000633, //查询探照灯温度
  79 +
  80 + JZ_INSCODE_5AFRAME_CHECKSTATUS_LASER_STATUS = 0x10000634, //查询激光状态
  81 + JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS = 0x10000635, //查询警灯状态
  82 + JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR = 0x10000636, //查询警灯颜色
  83 + JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER = 0x10000637, //查询序列号
  84 +
  85 +
  86 + JZ_INSCODE_5AFRAME_PLAY_LOOP = 0x10000690, //开启关闭循环
  87 +
  88 + JZ_INSCODE_5AFRAME_DELETE_AUDIO = 0x10000700, //删除音频
  89 + JZ_INSCODE_5AFRAME_DELETE_VOICE_RECORD = 0x10000710, //删除录音
  90 + JZ_INSCODE_5AFRAME_DELETE_VIDEO_RECORD = 0x10000720, //删除视频
  91 +
  92 +
  93 + JZ_INSCODE_5AFRAME_TTS_SET_TONE = 0x10000801, //TTS设置音色
  94 + JZ_INSCODE_5AFRAME_TTS_SET_SPEED = 0x10000802, //TTS设置语速
  95 + JZ_INSCODE_5AFRAME_TTS_TRANS_START = 0x10000803, //TTS开始发送
  96 + JZ_INSCODE_5AFRAME_TTS_TRANS_UNLIMIT_TRANSMISSION = 0x10000804, //TTS正在无限制接收
  97 + JZ_INSCODE_5AFRAME_TTS_TRANS_STOP = 0x10000805, //TTS发送完毕
  98 + JZ_INSCODE_5AFRAME_TTS_TRANS_LIMIT_TRANSMISSION = 0x10000806, //TTS正在定长接收
  99 +
  100 + JZ_INSCODE_5AFRAME_OPUS_TRANS_START = 0x10000900, //opus传输开始
  101 + JZ_INSCODE_5AFRAME_OPUS_TRAN_UNLIMIT_TRANSMISSION = 0x10000901, //opus 无限制传输中
  102 + JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION = 0x10000903, //opus传输中
  103 +
  104 + JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP = 0x10000902, //opus传输结束
  105 +
  106 + JZ_INSCODE_5AFRAME_OPUS_PLAY = 0x10000910, //opus播放
  107 +
  108 + JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START = 0x10000A00, //开启opus实时语音
  109 + JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_UNLIMIT_TRANSMISSION = 0x10000A01, //无限制传输opus实时语音
  110 + JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_STOP = 0x10000A02, //结束opus实时语音
  111 + JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_LIMIT_TRANSMISSION = 0x10000A03, //定长传输opus实时语音
  112 +
  113 + JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL = 0x10000B00, //云台俯仰控制
  114 + JZ_INSCODE_5AFRAME_GIMBAL_YAW_CONTROL = 0x10000B01, //云台朝向控制
  115 + JZ_INSCODE_5AFRAME_GIMBAL_ROLL_CONTROL = 0x10000B02, //云台旋转控制
  116 + JZ_INSCODE_5AFRAME_GIMBAL_PITCH_FINETUNING_CONTROL = 0x10000B04, //云台俯仰微调
  117 + JZ_INSCODE_5AFRAME_GIMBAL_YAW_FINETUNING_CONTROL = 0x10000B05, //云台朝向微调
  118 + JZ_INSCODE_5AFRAME_GIMBAL_ROLL_FINETUNING_CONTROL = 0x10000B06, //云台旋转微调
  119 +
  120 +
  121 + JZ_INSCODE_5AFRAME_LASER_CONTROL = 0x10000C00, //激光控制
  122 +
  123 + JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL = 0x10000E00, //探照灯开光
  124 + JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN = 0x10000E10, //设置探照灯亮度
  125 + JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY = 0x10000E20, //设置把爆闪频率
  126 + JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL = 0x10000E21,//探照灯消息订阅控制
  127 +
  128 + JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL = 0x10000F00, //警示灯模式控制
  129 + JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR = 0x10000F10, //警示灯颜色控制
  130 +
  131 + JZ_INSCODE_5AFRAME_OUTPUTPOWER_CONTROL = 0x10001000, //对外供电开关
  132 + JZ_INSCODE_5AFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10001001, //对外供电查询
  133 +
  134 +//5B类帧
  135 + JZ_INSCODE_5BFRAME_FRAME = 0x10004000, //发送帧
  136 +
  137 + JZ_INSCODE_5BFRAME_INITIATECONNECT = 0x10004101, //主动连接
  138 + JZ_INSCODE_5BFRAME_HEARTBEAT = 0x10004102, //心跳帧回复
  139 + JZ_INSCODE_5BFRAME_TIMESTAMP = 0x10004103, //时间戳帧
  140 + JZ_INSCODE_5BFRAME_ALL_VERSION = 0x10004104, //全版本查询
  141 + JZ_INSCODE_5BFRAME_ALL_SERIAL_NUMBER = 0x10004105, //全序列号查询
  142 + JZ_INSCODE_5BFRAME_DEVICE_MESSAGE = 0x10004107, //设备信息
  143 +
  144 + JZ_INSCODE_5BFRAME_SUCESS = 0x10004200, //操作成功
  145 + JZ_INSCODE_5BFRAME_DEFEAT = 0x10004201, //操作失败
  146 +
  147 + JZ_INSCODE_5BFRAME_MUSICLIST_START = 0x10004300, //开启发送音乐列表帧
  148 + JZ_INSCODE_5BFRAME_MUSICLIST_TRANS = 0x10004301, //发送音乐列表帧
  149 + JZ_INSCODE_5BFRAME_MUSICLIST_STOP = 0x10004302, //结束发送音乐列表帧
  150 +
  151 + JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS = 0x10004310, //音频播放状态返回帧
  152 + JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END = 0x10004311, //音频播放状态结束帧
  153 +
  154 + JZ_INSCODE_5BFRAME_VOLUME = 0x10004400, //音量返回帧
  155 + JZ_INSCODE_5BFRAME_AUDIO_PLAYLOOPSTATUS = 0x10004401, //发送音频循环播放状态
  156 + JZ_INSCODE_5BFRAME_TTS_TONE = 0x10004402, //发送tts音色
  157 + JZ_INSCODE_5BFRAME_TTS_SPEED = 0x10004403, //发送tts语速
  158 + JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME = 0x10004404, //当前播放的音频名字
  159 +
  160 +
  161 + JZ_INSCODE_5BFRAME_GIMBAL_PITCH = 0x10004500, //云台俯仰角度
  162 + JZ_INSCODE_5BFRAME_GIMBAL_YAW = 0x10004501, //云台航向角度
  163 + JZ_INSCODE_5BFRAME_GIMBAL_ROLL = 0x10004502, //
  164 +
  165 + JZ_INSCODE_5BFRAME_GIMBAL_PITCH_FINETUNING = 0x10004510, //云台俯仰微调值
  166 +
  167 +
  168 + JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE = 0x10004600, //查询探照灯温度
  169 + JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS = 0x10004601, //查询激光状态
  170 + JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY = 0x10004602, //查询探照灯频率
  171 + JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_MODE = 0x10004603, //查询探照灯模式
  172 + JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN = 0x10004604, //查询探照灯流明
  173 +
  174 + JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS = 0x10004700, //警示灯模式控制
  175 + JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR = 0x10004701, //警示灯颜色控制
  176 +
  177 +
  178 + JZ_INSCODE_5BFRAME_SORTWAREVERSION = 0x10004800, //发送软件版本号
  179 + JZ_INSCODE_5BFRAME_HARDWAREVERSION = 0x10004801, //发送硬件版本号
  180 + JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER = 0x10004802, //回复序列号
  181 +
  182 + JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10004900, //对外供电查询
  183 +
  184 + JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS = 0x10005000, //opus解码状态
  185 +
  186 +
  187 +//6A类
  188 + JZ_INSCODE_6AFRAME_FRAME = 0x10008000, //发送帧
  189 +
  190 + JZ_INSCODE_6AFRAME_SET_GIMBAL_ORIGIN = 0x10008101, //设置坐标0值
  191 + JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE = 0x10008102, //设置云台范围最大最小值
  192 + JZ_INSCODE_6AFRAME_SET_LUMEN_MAXMIN_RANGE = 0x10008103, //设置灯光范围最大最小值
  193 + JZ_INSCODE_6AFRAME_SET_SERIALNUMBER = 0x10008104, //设置序列号
  194 + JZ_INSCODE_6AFRAME_SERVO_SELFCHECK = 0x10008105, //舵机自检
  195 + JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL = 0x10008106, //开关云台联动
  196 +
  197 + JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME = 0x10008400, //查询从设备设备名
  198 + JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE = 0x10008401, //查询云台联动
  199 +
  200 + JZ_INSCODE_6AFRAME_UART_BITRATE_CHANGE = 0x10008500, //串口比特率修改
  201 +
  202 + JZ_INSCODE_6AFRAME_SPECIAL_PARAMETERS = 0x10008510, //设置特殊参数
  203 + JZ_INSCODE_6AFRAME_CHECK_SPECIAL_PARAMETERS = 0x10008511, //查询特殊参数
  204 +
  205 +//6B类
  206 + JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME = 0x1000C400, //回复从设备名
  207 + JZ_INSCODE_6BFRAME_CHECKSTATUS_GIMBAL_LINKAGE = 0x1000C401, //回复云台联动
  208 + JZ_INSCODE_6BFRAME_CHECK_SPECIAL_PARAMETERS = 0x1000C511, //回复特殊参数
  209 +
  210 +} JZ_InsCode;
  211 +
  212 +
  213 +/* Exported types ------------------------------------------------------------*/
  214 +
  215 +
  216 +/* Exported functions --------------------------------------------------------*/
  217 +
  218 +#ifdef __cplusplus
  219 +}
  220 +#endif
  221 +
  222 +#endif
  1 +#include <stdint.h>
  2 +#include <stdbool.h>
  3 +#include <stddef.h>
  4 +#include <string.h>
  5 +#include <stdlib.h>
  6 +#include <stdio.h>
  7 +#include <string.h>
  8 +
  9 +#include "./JZsdk_Code.h"
  10 +
  11 +
  12 +
  13 +//获取返回码的信息
  14 +const char* JZsdk_GetReturnCodeMessage(T_JZsdkReturnCode ReturnCode)
  15 +{
  16 + switch (ReturnCode) {
  17 + case JZ_ERRORCODE_REALTIMEVOICE_HAS_BEEN_ON:
  18 + return "实时语音被开启,该操作失败";
  19 +
  20 + default:
  21 + return "未知错误:Unknown error.";
  22 + }
  23 +}
  1 +
  2 +
  3 +/**
  4 + ********************************************************************
  5 + * @file JZsdk_ReturnCode.h
  6 + * 用于记录各类码的表
  7 + *
  8 + *********************************************************************
  9 + */
  10 +
  11 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  12 +#ifndef JZSDK_RETURNCODE_H
  13 +#define JZSDK_RETURNCODE_H
  14 +
  15 +/* Includes ------------------------------------------------------------------*/
  16 +#include <stdint.h>
  17 +#include "JZsdk_ErrorCode.h"
  18 +
  19 +#ifdef __cplusplus
  20 +extern "C" {
  21 +#endif
  22 +
  23 +/* Exported constants --------------------------------------------------------*/
  24 +/* 常亮定义*/
  25 +
  26 +
  27 +
  28 +
  29 +
  30 +
  31 +
  32 +/* Exported types ------------------------------------------------------------*/
  33 +//重定义一个返回码
  34 +typedef uint64_t T_JZsdkReturnCode;
  35 +typedef uint8_t U8_t;
  36 +typedef uint16_t U16_t;
  37 +typedef uint32_t U32_t;
  38 +typedef uint64_t U64_t;
  39 +
  40 +// typedef unsigned long T_JZsdkReturnCode;
  41 +// typedef unsigned char U8_t;
  42 +// typedef unsigned short U16_t;
  43 +// typedef unsigned int U32_t;
  44 +// typedef unsigned long U64_t;
  45 +
  46 +typedef double F64_t;
  47 +typedef float F32_t;
  48 +
  49 +/* Exported functions --------------------------------------------------------*/
  50 +const char* JZsdk_GetReturnCodeMessage(T_JZsdkReturnCode ReturnCode);
  51 +
  52 +#ifdef __cplusplus
  53 +}
  54 +#endif
  55 +
  56 +#endif
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_SMT_Code.h
  4 + * 用于序列号管理的表
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_SMT_CODE_H
  11 +#define JZSDK_SMT_CODE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +typedef enum
  23 +{
  24 + // 设备序列号类型
  25 + UNDEFINED_SNM = 0x0000, //未定义类型序列号
  26 + STANDARD_DJI_SNM = 0x0001, // 大疆转接环序列号类型
  27 + STANDARD_JZ_1_SNM = 0x0002, // JZ-1型序列号
  28 + STANDARD_JZ_2_SNM = 0x0003, // JZ-2型序列号 2023.12.14 制定
  29 +} JZSDK_SNM_TPYE;
  30 +
  31 +typedef enum
  32 +{
  33 + // 设备激活码状态 0 未存在序列号 1 旧版序列号 2新版序列号未激活 3新版序列号已激活
  34 + SNM_NOT_EXISTS = 0x0000, // (未存在序列号)
  35 + SNM_HAVE_ACTIVATED = 0x0001, // 已激活
  36 + SNM_NOT_ACTIVATED = 0x0002, // 未激活
  37 + SNM_ERROR_ACTIVATED = 0x0003, //激活错误状态
  38 +} JZSDK_SNM_STATUS;
  39 +
  40 +typedef enum
  41 +{
  42 + STANDARD_DJI_SNM_LENGTH = 14, //dji序列号默认长度14
  43 + STANDARD_JZ_1_SUM_LENGTH = 14, //极至标准1长度太多种拉 喊话器最长是14
  44 + STANDARD_JZ_2_SUM_LENGTH = 16, //极至标准2 16长度
  45 +}JZSDK_SNM_STANDARD_LENGTH;
  46 +
  47 +typedef enum
  48 +{
  49 + STANDARD_JZ_2_CN = 0x0001, //极至标准2通用码
  50 + STANDARD_JZ_2_EN = 0x0002, //极至标准2海外码
  51 +}JZSDK_FIREWARM_CODE;
  52 +
  53 +typedef enum
  54 +{
  55 + STANDARD_JZ_2_F1 = 0x0001, //通用版本固件
  56 +
  57 +}JZSKD_SPECIAL_VERSION;
  58 +
  59 +
  60 +#ifdef __cplusplus
  61 +}
  62 +#endif
  63 +
  64 +#endif
  1 +#include <stdio.h>
  2 +#include "JZsdk_Delay.h"
  3 +#include <unistd.h>
  4 +
  5 +/*
  6 +* 用于延时(粗略)
  7 +* 需要优化
  8 +*/
  9 +int delayUs(unsigned long msec)
  10 +{
  11 + usleep(msec);
  12 +}
  13 +
  14 +/*
  15 +* 用于延时(粗略)
  16 +* 需要优化
  17 +*/
  18 +int delayMs(unsigned long msec)
  19 +{
  20 + usleep(msec * 1000);
  21 +}
  22 +
  23 +/*
  24 +* 用于延时(粗略)
  25 +* 需要优化
  26 +*/
  27 +int delayS(unsigned long sec)
  28 +{
  29 + delayMs(sec * 1000);
  30 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_FileSystem.h
  4 + * 用于文件系统操作
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_DELAY_H
  11 +#define JZSDK_DELAY_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +
  23 +/* Exported types ------------------------------------------------------------*/
  24 +
  25 +
  26 +/* Exported functions --------------------------------------------------------*/
  27 +int delayMs(unsigned long msec);
  28 +int delayS(unsigned long sec);
  29 +int delayUs(unsigned long msec);
  30 +
  31 +#ifdef __cplusplus
  32 +}
  33 +#endif
  34 +
  35 +#endif
  36 +/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
  1 +#include <stdio.h>
  2 +#include "./JZsdk_FrameComparsion.h"
  3 +#include "../JZsdk_Code/JZsdk_Code.h"
  4 +
  5 +/*************************
  6 + *
  7 + * 获取帧的序列号
  8 + *
  9 + * ***************************/
  10 +int JZsdk_Get_FrameSequence(char *DealBuf)
  11 +{
  12 + return DealBuf[6];
  13 +}
  14 +
  15 +/***************************
  16 + * 、
  17 + *
  18 + * 帧校对 获取功能
  19 + *
  20 + *
  21 + * ***********************/
  22 +int JZsdk_FrameComparsion(char *getdata, int len)
  23 +{
  24 + //1、判断是否是5A帧
  25 + if (getdata[0] == 0x5A && getdata[1] == 0x5A && getdata[2] == 0x77)
  26 + {
  27 + printf("JZsdk_FrameComparsion:5A帧\n");
  28 + return JZsdk_5AFrameComparsion(getdata, len);
  29 + }
  30 +
  31 + //2、判断是否是5B帧
  32 + if (getdata[0] == 0x5b && getdata[1] == 0x5b && getdata[2] == 0x77)
  33 + {
  34 + printf("JZsdk_FrameComparsion:5B帧\n");
  35 + return JZsdk_5BFrameComparsion(getdata, len);
  36 + }
  37 +
  38 + //3、判断是否是6A帧
  39 + if (getdata[0] == 0x6A && getdata[1] == 0x6A && getdata[2] == 0x77)
  40 + {
  41 + printf("JZsdk_FrameComparsion:6A帧\n");
  42 + return JZsdk_6AFrameComparsion(getdata, len);
  43 + }
  44 +
  45 + //4、判断是否是6B帧
  46 + if (getdata[0] == 0x6b && getdata[1] == 0x6b && getdata[2] == 0x77)
  47 + {
  48 + printf("JZsdk_FrameComparsion:6B帧\n");
  49 + return JZsdk_6BFrameComparsion(getdata, len);
  50 + }
  51 +
  52 + printf("接受到的帧,没有帧头或者帧尾,退出recv帧判断函数\n");
  53 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  54 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_FrameComparsion.h
  4 + * 用于帧对比的头文件
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FRAMECOMPARSION_H
  11 +#define JZSDK_FRAMECOMPARSION_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +#include "JZsdk_FrameComparsion_5Aframe.h"
  22 +#include "JZsdk_FrameComparsion_5Bframe.h"
  23 +#include "JZsdk_FrameComparsion_6Aframe.h"
  24 +#include "JZsdk_FrameComparsion_6Bframe.h"
  25 +#include "JZsdk_GetFrameTemplate.h"
  26 +
  27 +/* Exported types ------------------------------------------------------------*/
  28 +
  29 +
  30 +/* Exported functions --------------------------------------------------------*/
  31 +int JZsdk_Get_FrameSequence(char *DealBuf);
  32 +int JZsdk_FrameComparsion(char *getdata, int len);
  33 +
  34 +#ifdef __cplusplus
  35 +}
  36 +#endif
  37 +
  38 +#endif
  1 +#include <stdio.h>
  2 +#include "../JZsdk_Code/JZsdk_Code.h"
  3 +
  4 +/******************************************************
  5 +
  6 + 接收一级功能码区
  7 +
  8 +/******************************************************/
  9 +//一级功能码是连接功能
  10 +static int Comparison_5AFRAME_FirstLevelCode_0x50(char *getdata)
  11 +{
  12 + //二级功能位
  13 + switch (getdata[8])
  14 + {
  15 + //开启连接
  16 + case 0x51:
  17 + return JZ_INSCODE_5AFRAME_ASKFORCONNECT;
  18 + break;
  19 +
  20 + //设备电源状态
  21 + case 0x52:
  22 + return JZ_INSCODE_5AFRAME_FRAME_POWER_STATUS;
  23 + break;
  24 +
  25 + //心跳帧
  26 + case 0x53:
  27 + return JZ_INSCODE_5AFRAME_HEARTBEAT;
  28 + break;
  29 +
  30 + //时间戳帧
  31 + case 0x54:
  32 + return JZ_INSCODE_5AFRAME_TIMESTAMP;
  33 + break;
  34 +
  35 + //所有版本号帧
  36 + case 0x55:
  37 + return JZ_INSCODE_5AFRAME_ALL_VERSION;
  38 + break;
  39 +
  40 + //所有序列号帧
  41 + case 0x56:
  42 + return JZ_INSCODE_5AFRAME_ALL_SERIAL_NUMBER;
  43 + break;
  44 +
  45 + //log信息打印
  46 + case 0x57:
  47 + return JZ_INSCODE_5AFRAME_LOG_MESSAGE_PRINTF;
  48 + break;
  49 +
  50 + //获取设备信息帧
  51 + case 0x58:
  52 + return JZ_INSCODE_5AFRAME_DEVICE_MESSAGE;
  53 + break;
  54 +
  55 + default:
  56 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  57 + break;
  58 + }
  59 +}
  60 +//一级功能码是语音 或是 文件功能
  61 +static int Comparison_5AFRAME_FirstLevelCode_0x51(char *getdata)
  62 +{
  63 + //二级功能位
  64 + switch (getdata[8])
  65 + {
  66 + //开启语音
  67 + case 0xb1:
  68 + return JZ_INSCODE_5AFRAME_REALTIMEMP2_START;
  69 + break;
  70 +
  71 + //结束语音
  72 + case 0xb2:
  73 + return JZ_INSCODE_5AFRAME_REALTIMEMP2_STOP;
  74 + break;
  75 +
  76 + //有限制传输mp2语言
  77 + case 0xb3:
  78 + return JZ_INSCODE_5AFRAME_REALTIMEMP2_LIMIT_TRANSMISSION;
  79 + break;
  80 +
  81 + //打开音频文件上传
  82 + case 0x01:
  83 + return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_START;
  84 + break;
  85 +
  86 + //有限制传输音频文件
  87 + case 0x02:
  88 + return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_LIMIT_TRANSMISSION;
  89 + break;
  90 +
  91 + //关闭音频文件上传
  92 + case 0x03:
  93 + return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP;
  94 + break;
  95 +
  96 + default:
  97 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  98 + break;
  99 + }
  100 +}
  101 +//一级功能码是音频/功放/音量调节
  102 +static int Comparison_5AFRAME_FirstLevelCode_0x52(char *getdata)
  103 +{
  104 + //二级功能位
  105 + switch (getdata[8])
  106 + {
  107 + //播放指定音频
  108 + case 0x02:
  109 + return JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE;
  110 + break;
  111 +
  112 + //音频继续播放
  113 + case 0x04:
  114 + return JZ_INSCODE_5AFRAME_AUDIO_CONTINUE;
  115 + break;
  116 +
  117 + //音频暂停播放
  118 + case 0x05:
  119 + return JZ_INSCODE_5AFRAME_AUDIO_PAUSE;
  120 + break;
  121 +
  122 + //音频停止播放
  123 + case 0x06:
  124 + return JZ_INSCODE_5AFRAME_AUDIO_STOP;
  125 + break;
  126 +
  127 + //音频上一曲
  128 + case 0x07:
  129 + return JZ_INSCODE_5AFRAME_AUDIO_LASTSONG;
  130 + break;
  131 +
  132 + //音频下一曲
  133 + case 0x08:
  134 + return JZ_INSCODE_5AFRAME_AUDIO_NEXTSONG;
  135 + break;
  136 +
  137 + //强制关闭功放
  138 + case 0x20:
  139 + return JZ_INSCODE_5AFRAME_AMPLIFIER_STOP;
  140 + break;
  141 +
  142 + //强制开启功放
  143 + case 0x21:
  144 + return JZ_INSCODE_5AFRAME_AMPLIFIER_OPEN;
  145 + break;
  146 +
  147 + //恢复自动功放
  148 + case 0x22:
  149 + return JZ_INSCODE_5AFRAME_AMPLIFIER_AUTO;
  150 + break;
  151 +
  152 + //调节音量
  153 + case 0x10:
  154 + return JZ_INSCODE_5AFRAME_VOLUME;
  155 + break;
  156 +
  157 + default:
  158 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  159 + break;
  160 + }
  161 +}
  162 +//一级功能码是查询状态
  163 +static int Comparison_5AFRAME_FirstLevelCode_0x53(char *getdata)
  164 +{
  165 + //二级功能位
  166 + switch (getdata[8])
  167 + {
  168 + //查询音量
  169 + case 0x01:
  170 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_VOLUME;
  171 + break;
  172 +
  173 + //查询播放状态
  174 + case 0x02:
  175 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAY;
  176 + break;
  177 +
  178 + //查询云台角度(已舍弃)
  179 + case 0x03:
  180 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL;
  181 + break;
  182 +
  183 + //查询播放文件名
  184 + case 0x04:
  185 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAYFILENAME;
  186 + break;
  187 +
  188 + //查询是否打开循环
  189 + case 0x05:
  190 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_LOOPPLAY;
  191 + break;
  192 +
  193 + //查询音色
  194 + case 0x06:
  195 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSTONE;
  196 + break;
  197 +
  198 + //查询语速
  199 + case 0x07:
  200 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSSPEED;
  201 + break;
  202 +
  203 + //查询软件版本号
  204 + case 0xf1:
  205 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_SOFTWAREVERSION;
  206 + break;
  207 +
  208 + default:
  209 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  210 + break;
  211 + }
  212 +
  213 +}
  214 +//一级功能码是删除
  215 +static int Comparison_5AFRAME_FirstLevelCode_0x54(char *getdata)
  216 +{
  217 + //二级功能位
  218 + switch (getdata[8])
  219 + {
  220 + //删除音频
  221 + case 0x02:
  222 + return JZ_INSCODE_5AFRAME_DELETE_AUDIO;
  223 + break;
  224 +
  225 + //删除录音
  226 + case 0x03:
  227 + return JZ_INSCODE_5AFRAME_DELETE_VOICE_RECORD;
  228 + break;
  229 +
  230 + // //删除视频
  231 + // case 0x02:
  232 + // return JZ_INSCODE_DELETE_VIDEO_RECORD;
  233 + // break;
  234 +
  235 + default:
  236 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  237 + break;
  238 + }
  239 +}
  240 +//一级功能码开启关闭循环
  241 +static int Comparison_5AFRAME_FirstLevelCode_0x55(char *getdata)
  242 +{
  243 + //二级功能位
  244 + switch (getdata[8])
  245 + {
  246 + //开启关闭循环
  247 + case 0x00:
  248 + return JZ_INSCODE_5AFRAME_PLAY_LOOP;
  249 + break;
  250 +
  251 + default:
  252 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  253 + break;
  254 + }
  255 +}
  256 +//一级功能码
  257 +static int Comparison_5AFRAME_FirstLevelCode_0x56(char *getdata)
  258 +{
  259 + //二级功能位
  260 + switch (getdata[8])
  261 + {
  262 + default:
  263 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  264 + break;
  265 + }
  266 +}
  267 +//一级功能码是 文本播放
  268 +static int Comparison_5AFRAME_FirstLevelCode_0x57(char *getdata)
  269 +{
  270 + //二级功能位
  271 + switch (getdata[8])
  272 + {
  273 + //设置音色
  274 + case 0x01:
  275 + return JZ_INSCODE_5AFRAME_TTS_SET_TONE;
  276 + break;
  277 +
  278 + //设置语速
  279 + case 0x02:
  280 + return JZ_INSCODE_5AFRAME_TTS_SET_SPEED;
  281 + break;
  282 +
  283 + //开始发送TTS
  284 + case 0x03:
  285 + return JZ_INSCODE_5AFRAME_TTS_TRANS_START;
  286 + break;
  287 +
  288 + case 0x04:
  289 + return JZ_INSCODE_5AFRAME_TTS_TRANS_STOP;
  290 + break;
  291 +
  292 + //定长传输文本
  293 + case 0x05:
  294 + return JZ_INSCODE_5AFRAME_TTS_TRANS_LIMIT_TRANSMISSION;
  295 + break;
  296 +
  297 + default:
  298 + break;
  299 + }
  300 +}
  301 +//一级功能 查询列表
  302 +static int Comparison_5AFRAME_FirstLevelCode_0x58(char *getdata)
  303 +{
  304 + //二级功能位
  305 + switch (getdata[8])
  306 + {
  307 + //设置音色
  308 + case 0x01:
  309 + return JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST;
  310 + break;
  311 +
  312 + default:
  313 + break;
  314 + }
  315 +}
  316 +//一级功能码opus功能
  317 +static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata)
  318 +{
  319 + //二级功能位
  320 + switch (getdata[8])
  321 + {
  322 + //opus录音传输
  323 + //opus传输开始
  324 + case 0xF1:
  325 + return JZ_INSCODE_5AFRAME_OPUS_TRANS_START;
  326 + break;
  327 +
  328 + //opus传输结束
  329 + case 0xF2:
  330 + return JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP;
  331 + break;
  332 +
  333 + //opus定长传输
  334 + case 0xF3:
  335 + return JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION;
  336 + break;
  337 +
  338 + //opus播放
  339 + case 0x01:
  340 + return JZ_INSCODE_5AFRAME_OPUS_PLAY;
  341 + break;
  342 +
  343 + //opus实时语音开始
  344 + case 0xE1:
  345 + return JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START;
  346 + break;
  347 +
  348 + case 0xE2:
  349 + return JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_STOP;
  350 + break;
  351 +
  352 + //opus定长传输文件
  353 + case 0xE3:
  354 + return JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_LIMIT_TRANSMISSION;
  355 + break;
  356 +
  357 + default:
  358 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  359 + break;
  360 + }
  361 +}
  362 +
  363 +//一级功能码,硬件引脚控制
  364 +static int Comparison_5AFRAME_FirstLevelCode_0x5A(char *getdata)
  365 +{
  366 + //二级功能位
  367 + switch (getdata[8])
  368 + {
  369 + //对外供电开关
  370 + case 0x01:
  371 + return JZ_INSCODE_5AFRAME_OUTPUTPOWER_CONTROL;
  372 + break;
  373 +
  374 + //对外供电查询
  375 + case 0x02:
  376 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_OUTPUTPOWER;
  377 + break;
  378 +
  379 + default:
  380 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  381 + break;
  382 + }
  383 +}
  384 +
  385 +//一级功能码 激光控制
  386 +static int Comparison_5AFRAME_FirstLevelCode_0x60(char *getdata)
  387 +{
  388 + //二级功能位
  389 + switch (getdata[8])
  390 + {
  391 + //激光控制
  392 + case 0x51:
  393 + return JZ_INSCODE_5AFRAME_LASER_CONTROL;
  394 + break;
  395 +
  396 + default:
  397 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  398 + break;
  399 + }
  400 +}
  401 +
  402 +//一级功能码 爆闪频率
  403 +static int Comparison_5AFRAME_FirstLevelCode_0x61(char *getdata)
  404 +{
  405 + //二级功能位
  406 + switch (getdata[8])
  407 + {
  408 + //爆闪频率
  409 + case 0x51:
  410 + return JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY;
  411 + break;
  412 +
  413 + default:
  414 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  415 + break;
  416 + }
  417 +}
  418 +
  419 +//一级功能码 灯光控制
  420 +static int Comparison_5AFRAME_FirstLevelCode_0x62(char *getdata)
  421 +{
  422 + //二级功能位
  423 + switch (getdata[8])
  424 + {
  425 + //灯光模式
  426 + case 0x51:
  427 + return JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL;
  428 + break;
  429 +
  430 + default:
  431 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  432 + break;
  433 + }
  434 +}
  435 +
  436 +//一级功能码 灯光亮度
  437 +static int Comparison_5AFRAME_FirstLevelCode_0x63(char *getdata)
  438 +{
  439 + //二级功能位
  440 + switch (getdata[8])
  441 + {
  442 + //灯光亮度
  443 + case 0x51:
  444 + return JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN;
  445 + break;
  446 +
  447 + default:
  448 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  449 + break;
  450 + }
  451 +}
  452 +
  453 +//一级功能码云台功能
  454 +static int Comparison_5AFRAME_FirstLevelCode_0x64(char *getdata)
  455 +{
  456 + //二级功能位
  457 + switch (getdata[8])
  458 + {
  459 + //云台俯仰控制
  460 + case 0x51:
  461 + return JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL;
  462 + break;
  463 +
  464 + //云台俯仰微调控制
  465 + case 0x52:
  466 + return JZ_INSCODE_5AFRAME_GIMBAL_PITCH_FINETUNING_CONTROL;
  467 + break;
  468 +
  469 + default:
  470 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  471 + break;
  472 + }
  473 +}
  474 +
  475 +//一级功能码 云台航向
  476 +static int Comparison_5AFRAME_FirstLevelCode_0x65(char *getdata)
  477 +{
  478 +
  479 +}
  480 +
  481 +//一级功能码 警灯模式控制
  482 +static int Comparison_5AFRAME_FirstLevelCode_0x66(char *getdata)
  483 +{
  484 + switch (getdata[8])
  485 + {
  486 + //警灯模式控制
  487 + case 0x51:
  488 + return JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL;
  489 + break;
  490 +
  491 + default:
  492 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  493 + break;
  494 + }
  495 +}
  496 +
  497 +//一级功能码 警灯眼色选择
  498 +static int Comparison_5AFRAME_FirstLevelCode_0x67(char *getdata)
  499 +{
  500 + switch (getdata[8])
  501 + {
  502 + //警灯颜色选择
  503 + case 0x51:
  504 + return JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR;
  505 + break;
  506 +
  507 + default:
  508 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  509 + break;
  510 + }
  511 +}
  512 +
  513 +//一级功能码 探照灯消息订阅
  514 +static int Comparison_5AFRAME_FirstLevelCode_0x68(char *getdata)
  515 +{
  516 + switch (getdata[8])
  517 + {
  518 + //探照灯消息订阅
  519 + case 0x51:
  520 + return JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL;
  521 + break;
  522 +
  523 + default:
  524 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  525 + break;
  526 + }
  527 +
  528 +}
  529 +
  530 +//一级功能码 私有协议
  531 +static int Comparison_5AFRAME_FirstLevelCode_0x69(char *getdata)
  532 +{
  533 +
  534 +}
  535 +
  536 +//一级功能码 6F查询帧
  537 +static int Comparison_5AFRAME_FirstLevelCode_0x6F(char *getdata)
  538 +{
  539 + //二级功能位
  540 + switch (getdata[8])
  541 + {
  542 + //灯光查询
  543 + case 0x51:
  544 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE;
  545 + break;
  546 +
  547 + //温度查询
  548 + case 0x52:
  549 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE;
  550 + break;
  551 +
  552 + //激光查询
  553 + case 0x53:
  554 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  555 + break;
  556 +
  557 + //云台角度查询
  558 + case 0x54:
  559 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL;
  560 + break;
  561 +
  562 + //警灯状态查询
  563 + case 0x55:
  564 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS;
  565 + break;
  566 +
  567 + //警灯颜色查询
  568 + case 0x56:
  569 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR;
  570 + break;
  571 +
  572 + //产品序列号查询
  573 + case 0x57:
  574 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER;
  575 + break;
  576 +
  577 + //云台微调值查询
  578 + case 0x58:
  579 + return JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING;
  580 + break;
  581 +
  582 + default:
  583 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  584 + break;
  585 + }
  586 +}
  587 +
  588 +/******************************************************************
  589 +
  590 + 回复帧对比
  591 + 成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
  592 +
  593 +******************************************************************/
  594 +int JZsdk_5AFrameComparsion(char *getdata, int len)
  595 +{
  596 + //1、判断帧头帧尾
  597 + if (
  598 + ( (getdata[0]!= 0x5a) && (getdata[1] != 0x5a) && (getdata[2]!=0x77) )
  599 + || ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
  600 + )
  601 + {
  602 + printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_5AFrameComparsion函数\n");
  603 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  604 + }
  605 +
  606 + //一级功能码
  607 + switch (getdata[7])
  608 + {
  609 +/*********************************************************************************************************************************************************
  610 + *
  611 + * 连接请求码
  612 + *
  613 +*********************************************************************************************************************************************************/
  614 + //一级功能码是连接请求
  615 + case 0x50:
  616 + return Comparison_5AFRAME_FirstLevelCode_0x50(getdata);
  617 + break;
  618 +
  619 +/*********************************************************************************************************************************************************
  620 + *
  621 + * 喊话器功能码
  622 + *
  623 +*********************************************************************************************************************************************************/
  624 + //一级功能码 语音 / 音频文件功能
  625 + case 0x51:
  626 + return Comparison_5AFRAME_FirstLevelCode_0x51(getdata);
  627 + break;
  628 +
  629 + //一级功能码 音频/ 功放/ 音量调节
  630 + case 0x52:
  631 + return Comparison_5AFRAME_FirstLevelCode_0x52(getdata);
  632 + break;
  633 +
  634 + //一级功能码 查询状态
  635 + case 0x53:
  636 + return Comparison_5AFRAME_FirstLevelCode_0x53(getdata);
  637 + break;
  638 +
  639 + //一级功能码 删除
  640 + case 0x54:
  641 + return Comparison_5AFRAME_FirstLevelCode_0x54(getdata);
  642 + break;
  643 +
  644 + //一级功能码 开启关闭循环
  645 + case 0x55:
  646 + return Comparison_5AFRAME_FirstLevelCode_0x55(getdata);
  647 + break;
  648 +
  649 + //一级功能码
  650 + case 0x56:
  651 + return Comparison_5AFRAME_FirstLevelCode_0x56(getdata);
  652 + break;
  653 +
  654 + //一级功能码 TTS
  655 + case 0x57:
  656 + return Comparison_5AFRAME_FirstLevelCode_0x57(getdata);
  657 + break;
  658 +
  659 + //一级功能码 查询列表功能
  660 + case 0x58:
  661 + return Comparison_5AFRAME_FirstLevelCode_0x58(getdata);
  662 + break;
  663 +
  664 + //一级功能码 opus
  665 + case 0x59:
  666 + return Comparison_5AFRAME_FirstLevelCode_0x59(getdata);
  667 + break;
  668 +
  669 + //一级功能码,硬件引脚控制
  670 + case 0x5A:
  671 + return Comparison_5AFRAME_FirstLevelCode_0x5A(getdata);
  672 + break;
  673 +
  674 + //一级功能码 激光控制
  675 + case 0x60:
  676 + return Comparison_5AFRAME_FirstLevelCode_0x60(getdata);
  677 + break;
  678 +
  679 + //一级功能码 爆闪控制
  680 + case 0x61:
  681 + return Comparison_5AFRAME_FirstLevelCode_0x61(getdata);
  682 + break;
  683 +
  684 + //一级功能码 灯光控制
  685 + case 0x62:
  686 + return Comparison_5AFRAME_FirstLevelCode_0x62(getdata);
  687 + break;
  688 +
  689 + //一级功能码 灯光亮度
  690 + case 0x63:
  691 + return Comparison_5AFRAME_FirstLevelCode_0x63(getdata);
  692 + break;
  693 +
  694 + //一级功能码 云台俯仰
  695 + case 0x64:
  696 + return Comparison_5AFRAME_FirstLevelCode_0x64(getdata);
  697 + break;
  698 +
  699 + //一级功能码 云台航向
  700 + case 0x65:
  701 + return Comparison_5AFRAME_FirstLevelCode_0x65(getdata);
  702 + break;
  703 +
  704 + //一级功能码 警灯模式控制
  705 + case 0x66:
  706 + return Comparison_5AFRAME_FirstLevelCode_0x66(getdata);
  707 + break;
  708 +
  709 + //一级功能码 警灯眼色选择
  710 + case 0x67:
  711 + return Comparison_5AFRAME_FirstLevelCode_0x67(getdata);
  712 + break;
  713 +
  714 + //一级功能码 探照灯消息订阅
  715 + case 0x68:
  716 + return Comparison_5AFRAME_FirstLevelCode_0x68(getdata);
  717 + break;
  718 +
  719 + //一级功能码 私有协议
  720 + case 0x69:
  721 + return Comparison_5AFRAME_FirstLevelCode_0x69(getdata);
  722 + break;
  723 +
  724 + //一级功能码 6f查询帧
  725 + case 0x6F:
  726 + return Comparison_5AFRAME_FirstLevelCode_0x6F(getdata);
  727 + break;
  728 +
  729 +
  730 + break;
  731 +
  732 + //一级功能码
  733 +
  734 +/*********************************************************************************************************************************************************
  735 + *
  736 + *
  737 + *
  738 +*********************************************************************************************************************************************************/
  739 + default:
  740 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  741 + break;
  742 + }
  743 +}
  744 +
  1 +/**********************************************************************
  2 + * @file
  3 + *
  4 + *
  5 + *********************************************************************
  6 + */
  7 +
  8 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  9 +#ifndef JZSDK_FRAMECOMPARSION_5AFRAME_H
  10 +#define JZSDK_FRAMECOMPARSION_5AFRAME_H
  11 +
  12 +/* Includes ------------------------------------------------------------------*/
  13 +
  14 +#ifdef __cplusplus
  15 +extern "C" {
  16 +#endif
  17 +
  18 +/* Exported constants --------------------------------------------------------*/
  19 +/* 常亮定义*/
  20 +
  21 +/* Exported types ------------------------------------------------------------*/
  22 +
  23 +/* Exported functions --------------------------------------------------------*/
  24 +
  25 +int JZsdk_5AFrameComparsion(char *getdata, int len);
  26 +
  27 +#ifdef __cplusplus
  28 +}
  29 +#endif
  30 +
  31 +#endif
  1 +#include <stdio.h>
  2 +#include "../JZsdk_Code/JZsdk_Code.h"
  3 +
  4 +
  5 +/******************************************************
  6 +
  7 + 接收一级功能码区
  8 +
  9 +/******************************************************/
  10 +//一级功能码是连接功能
  11 +static int Comparison_5BFRAME_FirstLevelCode_0x50(char *getdata)
  12 +{
  13 + //二级功能位
  14 + switch (getdata[8])
  15 + {
  16 + //回复连接
  17 + case 0x51:
  18 + return JZ_INSCODE_5BFRAME_INITIATECONNECT;
  19 + break;
  20 +
  21 + //心跳帧回复
  22 + case 0x53:
  23 + return JZ_INSCODE_5BFRAME_HEARTBEAT;
  24 + break;
  25 +
  26 + //时间戳回复
  27 + case 0x54:
  28 + return JZ_INSCODE_5BFRAME_TIMESTAMP;
  29 + break;
  30 +
  31 + //版本号回复
  32 + case 0x55:
  33 + return JZ_INSCODE_5BFRAME_ALL_VERSION;
  34 + break;
  35 +
  36 + //序列号回复
  37 + case 0x56:
  38 + return JZ_INSCODE_5BFRAME_ALL_SERIAL_NUMBER;
  39 + break;
  40 +
  41 + //log信息打印
  42 + case 0x58:
  43 + return JZ_INSCODE_5BFRAME_DEVICE_MESSAGE;
  44 + break;
  45 +
  46 + default:
  47 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  48 + break;
  49 + }
  50 +}
  51 +
  52 +//一级功能码是操作功能
  53 +static int Comparison_5BFRAME_FirstLevelCode_0x51(char *getdata)
  54 +{
  55 + //二级功能位
  56 + switch (getdata[8])
  57 + {
  58 + //回复操作成功
  59 + case 0x01:
  60 + return JZ_INSCODE_5BFRAME_SUCESS;
  61 + break;
  62 +
  63 + //回复操作失败
  64 + case 0xff:
  65 + return JZ_INSCODE_5BFRAME_DEFEAT;
  66 + break;
  67 +
  68 + default:
  69 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  70 + break;
  71 + }
  72 +}
  73 +//一级功能码是音频列表功能
  74 +static int Comparison_5BFRAME_FirstLevelCode_0x53(char *getdata)
  75 +{
  76 + //二级功能位
  77 + switch (getdata[8])
  78 + {
  79 + //音量返回
  80 + case 0x01:
  81 + return JZ_INSCODE_5BFRAME_VOLUME;
  82 + break;
  83 +
  84 + //播放状态返回
  85 + case 0x02:
  86 + return JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS;
  87 + break;
  88 +
  89 + //当前播放文件名返回
  90 + case 0x04:
  91 + return JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME;
  92 + break;
  93 +
  94 + //查询是否开启循环
  95 + case 0x05:
  96 + return JZ_INSCODE_5BFRAME_AUDIO_PLAYLOOPSTATUS;
  97 + break;
  98 +
  99 + //查询音色
  100 + case 0x06:
  101 + return JZ_INSCODE_5BFRAME_TTS_TONE;
  102 + break;
  103 +
  104 + //查询语速
  105 + case 0x07:
  106 + return JZ_INSCODE_5BFRAME_TTS_SPEED;
  107 + break;
  108 +
  109 + //版本返回
  110 + case 0xf1:
  111 + return JZ_INSCODE_5BFRAME_SORTWAREVERSION;
  112 + break;
  113 +
  114 + //播放结束(主动返回)
  115 + case 0xff:
  116 + return JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END;
  117 + break;
  118 +
  119 + default:
  120 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  121 + break;
  122 + }
  123 +}
  124 +
  125 +//一级功能码是音频列表功能
  126 +static int Comparison_5BFRAME_FirstLevelCode_0x58(char *getdata)
  127 +{
  128 + //二级功能位
  129 + switch (getdata[8])
  130 + {
  131 + //查询列表开始
  132 + case 0x00:
  133 + return JZ_INSCODE_5BFRAME_MUSICLIST_START;
  134 + break;
  135 +
  136 + //文件列表帧
  137 + case 0x02:
  138 + return JZ_INSCODE_5BFRAME_MUSICLIST_TRANS;
  139 + break;
  140 +
  141 + //结束列表返回
  142 + case 0xff:
  143 + return JZ_INSCODE_5BFRAME_MUSICLIST_STOP;
  144 + break;
  145 +
  146 + default:
  147 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  148 + break;
  149 + }
  150 +}
  151 +
  152 +//一级功能码是opus功能
  153 +static int Comparison_5BFRAME_FirstLevelCode_0x59(char *getdata)
  154 +{
  155 + //二级功能位
  156 + switch (getdata[8])
  157 + {
  158 + //opus解码状态
  159 + case 0xF2:
  160 + return JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS;
  161 + break;
  162 +
  163 + default:
  164 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  165 + break;
  166 + }
  167 +}
  168 +
  169 +//一级功能码是硬件引脚控制
  170 +static int Comparison_5BFRAME_FirstLevelCode_0x5A(char *getdata)
  171 +{
  172 + //二级功能位
  173 + switch (getdata[8])
  174 + {
  175 + //回复对供电开关状态返回
  176 + case 0x02:
  177 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER;
  178 + break;
  179 +
  180 + default:
  181 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  182 + break;
  183 + }
  184 +}
  185 +
  186 +//一级功能码是激光
  187 +static int Comparison_5BFRAME_FirstLevelCode_0x60(char *getdata)
  188 +{
  189 + //二级功能位
  190 + switch (getdata[8])
  191 + {
  192 + //回复激光查询
  193 + case 0x51:
  194 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS;
  195 + break;
  196 +
  197 + default:
  198 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  199 + break;
  200 + }
  201 +}
  202 +
  203 +//一级功能码是回复灯光频率
  204 +static int Comparison_5BFRAME_FirstLevelCode_0x61(char *getdata)
  205 +{
  206 + //二级功能位
  207 + switch (getdata[8])
  208 + {
  209 + //回复灯光频率
  210 + case 0x51:
  211 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY;
  212 + break;
  213 +
  214 + default:
  215 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  216 + break;
  217 + }
  218 +}
  219 +
  220 +//一级功能码是回复灯光模式
  221 +static int Comparison_5BFRAME_FirstLevelCode_0x62(char *getdata)
  222 +{
  223 + //二级功能位
  224 + switch (getdata[8])
  225 + {
  226 + //回复灯光模式
  227 + case 0x51:
  228 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_MODE;
  229 + break;
  230 +
  231 + default:
  232 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  233 + break;
  234 + }
  235 +}
  236 +
  237 +//一级功能码是回复灯光亮度
  238 +static int Comparison_5BFRAME_FirstLevelCode_0x63(char *getdata)
  239 +{
  240 + //二级功能位
  241 + switch (getdata[8])
  242 + {
  243 + //回复灯光亮度
  244 + case 0x51:
  245 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN;
  246 + break;
  247 +
  248 + default:
  249 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  250 + break;
  251 + }
  252 +}
  253 +
  254 +//一级功能码是云台俯仰
  255 +static int Comparison_5BFRAME_FirstLevelCode_0x64(char *getdata)
  256 +{
  257 + //二级功能位
  258 + switch (getdata[8])
  259 + {
  260 + //回复云台俯仰
  261 + case 0x51:
  262 + return JZ_INSCODE_5BFRAME_GIMBAL_PITCH;
  263 + break;
  264 +
  265 + //回复云台俯仰微调值
  266 + case 0x52:
  267 + return JZ_INSCODE_5BFRAME_GIMBAL_PITCH_FINETUNING;
  268 + break;
  269 +
  270 + default:
  271 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  272 + break;
  273 + }
  274 +}
  275 +//一级功能码是云台航向
  276 +static int Comparison_5BFRAME_FirstLevelCode_0x65(char *getdata)
  277 +{
  278 + //二级功能位
  279 + switch (getdata[8])
  280 + {
  281 + //回复云台航向
  282 + case 0x51:
  283 + return JZ_INSCODE_5BFRAME_GIMBAL_YAW;
  284 + break;
  285 +
  286 +
  287 + default:
  288 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  289 + break;
  290 + }
  291 +}
  292 +//一级功能码是回复警灯状态
  293 +static int Comparison_5BFRAME_FirstLevelCode_0x66(char *getdata)
  294 +{
  295 + //二级功能位
  296 + switch (getdata[8])
  297 + {
  298 + //回复警灯状态
  299 + case 0x51:
  300 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS;
  301 + break;
  302 +
  303 +
  304 + default:
  305 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  306 + break;
  307 + }
  308 +}//一级功能码是回复警灯颜色
  309 +static int Comparison_5BFRAME_FirstLevelCode_0x67(char *getdata)
  310 +{
  311 + //二级功能位
  312 + switch (getdata[8])
  313 + {
  314 + //回复回复警灯颜色
  315 + case 0x51:
  316 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR;
  317 + break;
  318 +
  319 +
  320 + default:
  321 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  322 + break;
  323 + }
  324 +}//一级功能码是回复温度/序列号查询
  325 +static int Comparison_5BFRAME_FirstLevelCode_0x69(char *getdata)
  326 +{
  327 + //二级功能位
  328 + switch (getdata[8])
  329 + {
  330 + //回复温度查询
  331 + case 0x51:
  332 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE;
  333 + break;
  334 +
  335 + //回复产品序列号
  336 + case 0x54:
  337 + return JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER;
  338 + break;
  339 +
  340 + default:
  341 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  342 + break;
  343 + }
  344 +}
  345 +/******************************************************************
  346 +
  347 + 回复帧对比
  348 + 成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
  349 +
  350 +******************************************************************/
  351 +int JZsdk_5BFrameComparsion(char *getdata, int len)
  352 +{
  353 + //1、判断帧头帧尾
  354 + if (
  355 + ( (getdata[0]!= 0x5B) && (getdata[1] != 0x5B) && (getdata[2]!=0x77) )
  356 + || ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
  357 + )
  358 + {
  359 + printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_5BFrameComparsion函数\n");
  360 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  361 + }
  362 +
  363 + //一级功能码
  364 + switch (getdata[7])
  365 + {
  366 + case 0x50:
  367 + return Comparison_5BFRAME_FirstLevelCode_0x50(getdata);
  368 + break;
  369 +
  370 + case 0x51:
  371 + return Comparison_5BFRAME_FirstLevelCode_0x51(getdata);
  372 + break;
  373 +
  374 + case 0x53:
  375 + return Comparison_5BFRAME_FirstLevelCode_0x53(getdata);
  376 + break;
  377 +
  378 + case 0x58:
  379 + return Comparison_5BFRAME_FirstLevelCode_0x58(getdata);
  380 + break;
  381 +
  382 + case 0x59:
  383 + return Comparison_5BFRAME_FirstLevelCode_0x58(getdata);
  384 + break;
  385 +
  386 + case 0x5A:
  387 + return Comparison_5BFRAME_FirstLevelCode_0x5A(getdata);
  388 + break;
  389 +
  390 + case 0x60:
  391 + return Comparison_5BFRAME_FirstLevelCode_0x60(getdata);
  392 + break;
  393 +
  394 + case 0x61:
  395 + return Comparison_5BFRAME_FirstLevelCode_0x61(getdata);
  396 + break;
  397 +
  398 + case 0x62:
  399 + return Comparison_5BFRAME_FirstLevelCode_0x62(getdata);
  400 + break;
  401 +
  402 + case 0x63:
  403 + return Comparison_5BFRAME_FirstLevelCode_0x63(getdata);
  404 + break;
  405 +
  406 + case 0x64:
  407 + return Comparison_5BFRAME_FirstLevelCode_0x64(getdata);
  408 + break;
  409 +
  410 + case 0x65:
  411 + return Comparison_5BFRAME_FirstLevelCode_0x65(getdata);
  412 + break;
  413 +
  414 + case 0x66:
  415 + return Comparison_5BFRAME_FirstLevelCode_0x66(getdata);
  416 + break;
  417 +
  418 + case 0x67:
  419 + return Comparison_5BFRAME_FirstLevelCode_0x67(getdata);
  420 + break;
  421 +
  422 + case 0x69:
  423 + return Comparison_5BFRAME_FirstLevelCode_0x69(getdata);
  424 + break;
  425 +
  426 +
  427 + default:
  428 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  429 + break;
  430 + }
  431 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file
  4 + *
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FRAMECOMPARSION_5BFRAME_H
  11 +#define JZSDK_FRAMECOMPARSION_5BFRAME_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +/* Exported types ------------------------------------------------------------*/
  23 +
  24 +/* Exported functions --------------------------------------------------------*/
  25 +int JZsdk_5BFrameComparsion(char *getdata, int len);
  26 +
  27 +
  28 +#ifdef __cplusplus
  29 +}
  30 +#endif
  31 +
  32 +#endif
  1 +#include <stdio.h>
  2 +#include "../JZsdk_Code/JZsdk_Code.h"
  3 +
  4 +
  5 +//一级功能码是私有协议
  6 +static int Comparison_6AFRAME_FirstLevelCode_0x69(char *getdata)
  7 +{
  8 + //二级功能位
  9 + switch (getdata[8])
  10 + {
  11 + //设置当前为云台零值
  12 + case 0x51:
  13 + return JZ_INSCODE_6AFRAME_SET_GIMBAL_ORIGIN;
  14 + break;
  15 +
  16 + //设置云台当前为最大最小值
  17 + case 0x52:
  18 + return JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE;
  19 + break;
  20 +
  21 + //设置灯光当前亮度为最大最小值
  22 + case 0x53:
  23 + return JZ_INSCODE_6AFRAME_SET_LUMEN_MAXMIN_RANGE;
  24 + break;
  25 +
  26 + //设置产品序列号
  27 + case 0x54:
  28 + return JZ_INSCODE_6AFRAME_SET_SERIALNUMBER;
  29 + break;
  30 +
  31 + //舵机自检
  32 + case 0x55:
  33 + return JZ_INSCODE_6AFRAME_SERVO_SELFCHECK;
  34 + break;
  35 +
  36 + //开启关闭云台联动
  37 + case 0x56:
  38 + return JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL;
  39 + break;
  40 +
  41 + default:
  42 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  43 + break;
  44 + }
  45 +}
  46 +
  47 +
  48 +
  49 +//一级功能码是私有协议
  50 +static int Comparison_6AFRAME_FirstLevelCode_0x6F(char *getdata)
  51 +{
  52 + //二级功能位
  53 + switch (getdata[8])
  54 + {
  55 + //设置当前为云台零值
  56 + case 0x50:
  57 + return JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME;
  58 + break;
  59 +
  60 + //设置当前为云台零值
  61 + case 0x51:
  62 + return JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE;
  63 + break;
  64 +
  65 + //串口比特率修改
  66 + case 0x52:
  67 + return JZ_INSCODE_6AFRAME_UART_BITRATE_CHANGE;
  68 + break;
  69 +
  70 + //设置特殊变量
  71 + case 0x53:
  72 + return JZ_INSCODE_6AFRAME_SPECIAL_PARAMETERS;
  73 + break;
  74 +
  75 + //查询特殊变量
  76 + case 0x54:
  77 + return JZ_INSCODE_6AFRAME_CHECK_SPECIAL_PARAMETERS;
  78 + break;
  79 +
  80 + default:
  81 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  82 + break;
  83 + }
  84 +}
  85 +
  86 +/******************************************************************
  87 +
  88 + 回复帧对比
  89 + 成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
  90 +
  91 +******************************************************************/
  92 +int JZsdk_6AFrameComparsion(char *getdata, int len)
  93 +{
  94 + //1、判断帧头帧尾
  95 + if (
  96 + ( (getdata[0]!= 0x6A) && (getdata[1] != 0x6A) && (getdata[2]!=0x77) )
  97 + || ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
  98 + )
  99 + {
  100 + printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_6AFrameComparsion函数\n");
  101 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  102 + }
  103 +
  104 + //一级功能码
  105 + switch (getdata[7])
  106 + {
  107 + case 0x69:
  108 + return Comparison_6AFRAME_FirstLevelCode_0x69(getdata);
  109 + break;
  110 +
  111 + case 0x6F:
  112 + return Comparison_6AFRAME_FirstLevelCode_0x6F(getdata);
  113 + break;
  114 +
  115 +
  116 + default:
  117 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  118 + break;
  119 + }
  120 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file
  4 + *
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FRAMECOMPARSION_6AFRAME_H
  11 +#define JZSDK_FRAMECOMPARSION_6AFRAME_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +/* Exported types ------------------------------------------------------------*/
  23 +
  24 +/* Exported functions --------------------------------------------------------*/
  25 +int JZsdk_6AFrameComparsion(char *getdata, int len);
  26 +
  27 +
  28 +#ifdef __cplusplus
  29 +}
  30 +#endif
  31 +
  32 +#endif
  33 +
  1 +#include <stdio.h>
  2 +#include "../JZsdk_Code/JZsdk_Code.h"
  3 +
  4 +
  5 +//一级功能码是私有协议
  6 +static int Comparison_6BFRAME_FirstLevelCode_0x6F(char *getdata)
  7 +{
  8 + //二级功能位
  9 + switch (getdata[8])
  10 + {
  11 + //从设备名返回
  12 + case 0x50:
  13 + return JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME;
  14 + break;
  15 +
  16 + //查询云台联动返回
  17 + case 0x51:
  18 + return JZ_INSCODE_6BFRAME_CHECKSTATUS_GIMBAL_LINKAGE;
  19 + break;
  20 +
  21 + //查询特殊变量
  22 + case 0x54:
  23 + return JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME;
  24 + break;
  25 +
  26 + default:
  27 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  28 + break;
  29 + }
  30 +}
  31 +
  32 +/******************************************************************
  33 +
  34 + 回复帧对比
  35 + 成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
  36 +
  37 +******************************************************************/
  38 +int JZsdk_6BFrameComparsion(char *getdata, int len)
  39 +{
  40 + //1、判断帧头帧尾
  41 + if (
  42 + ( (getdata[0]!= 0x6B) && (getdata[1] != 0x6B) && (getdata[2]!=0x77) )
  43 + || ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
  44 + )
  45 + {
  46 + printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_6BFrameComparsion函数\n");
  47 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  48 + }
  49 +
  50 + //一级功能码
  51 + switch (getdata[7])
  52 + {
  53 + case 0x6F:
  54 + return Comparison_6BFRAME_FirstLevelCode_0x6F(getdata);
  55 + break;
  56 +
  57 +
  58 + default:
  59 + return JZ_ERROR_SYSTEM_FRAME_ERROR;
  60 + break;
  61 + }
  62 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file
  4 + *
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +
  11 +
  12 +#ifndef JZSDK_FRAMECOMPARSION_6BFRAME_H
  13 +#define JZSDK_FRAMECOMPARSION_6BFRAME_H
  14 +
  15 +/* Includes ------------------------------------------------------------------*/
  16 +
  17 +#ifdef __cplusplus
  18 +extern "C" {
  19 +#endif
  20 +
  21 +/* Exported constants --------------------------------------------------------*/
  22 +/* 常亮定义*/
  23 +
  24 +/* Exported types ------------------------------------------------------------*/
  25 +
  26 +/* Exported functions --------------------------------------------------------*/
  27 +int JZsdk_6BFrameComparsion(char *getdata, int len);
  28 +
  29 +
  30 +#ifdef __cplusplus
  31 +}
  32 +#endif
  33 +
  34 +#endif
  35 +
  1 +#include <stdio.h>
  2 +#include <string.h>
  3 +#include "../JZsdk_Code/JZsdk_Code.h"
  4 +
  5 +/******************************************************
  6 +
  7 + 用于获取帧模板
  8 +
  9 +/******************************************************/
  10 +int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
  11 +{
  12 + //printf("JZsdk_GetFrameTemplate:获取0x%x帧模板\n",InsCode); //该打印可能会对 要求快速控制的地方变慢,请不要随意开启
  13 + switch (InsCode)
  14 + {
  15 +/********************************************************************************************************************************************************
  16 + *
  17 + * 5A帧
  18 + *
  19 +********************************************************************************************************************************************************/
  20 + case JZ_INSCODE_5AFRAME_ASKFORCONNECT:
  21 + {
  22 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x51 ,0x00 ,0x00 ,0x23};
  23 + memcpy(str, sendbuf, 12);
  24 + *str_len = 12;
  25 + }
  26 + break;
  27 +
  28 + case JZ_INSCODE_5AFRAME_FRAME_POWER_STATUS:
  29 + {
  30 + unsigned char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x52 ,0x00 ,0x00 ,0x23};
  31 + memcpy(str, sendbuf, 12);
  32 + *str_len = 12;
  33 + }
  34 + break;
  35 +
  36 + case JZ_INSCODE_5AFRAME_HEARTBEAT:
  37 + {
  38 + unsigned char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x53 ,0x00 ,0x00 ,0x23};
  39 + memcpy(str, sendbuf, 12);
  40 + *str_len = 12;
  41 + }
  42 + break;
  43 +
  44 + case JZ_INSCODE_5AFRAME_TIMESTAMP:
  45 + {
  46 + unsigned char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x54 ,0x00 ,0x00 ,0x23};
  47 + memcpy(str, sendbuf, 12);
  48 + *str_len = 12;
  49 + }
  50 + break;
  51 + case JZ_INSCODE_5AFRAME_AUDIO_STOP:
  52 + {
  53 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x06 ,0x00 ,0x00 ,0x23};
  54 + memcpy(str, sendbuf, 12);
  55 + *str_len = 12;
  56 + }
  57 + break;
  58 +
  59 + case JZ_INSCODE_5AFRAME_AUDIO_LASTSONG:
  60 + {
  61 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x07 ,0x00 ,0x00 ,0x23};
  62 + memcpy(str, sendbuf, 12);
  63 + *str_len = 12;
  64 + }
  65 + break;
  66 +
  67 + case JZ_INSCODE_5AFRAME_AUDIO_NEXTSONG:
  68 + {
  69 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x08 ,0x00 ,0x00 ,0x23};
  70 + memcpy(str, sendbuf, 12);
  71 + *str_len = 12;
  72 + }
  73 + break;
  74 +
  75 + case JZ_INSCODE_5AFRAME_VOLUME:
  76 + {
  77 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x10 ,0x00 ,0x00 ,0x23};
  78 + memcpy(str, sendbuf, 12);
  79 + *str_len = 12;
  80 + }
  81 + break;
  82 +
  83 + case JZ_INSCODE_5AFRAME_PLAY_LOOP:
  84 + {
  85 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x55 ,0x00 ,0x00 ,0x00 ,0x23};
  86 + memcpy(str, sendbuf, 12);
  87 + *str_len = 12;
  88 + }
  89 + break;
  90 +
  91 + case JZ_INSCODE_5AFRAME_TTS_SET_TONE:
  92 + {
  93 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x57 ,0x01 ,0x00 ,0x00 ,0x23};
  94 + memcpy(str, sendbuf, 12);
  95 + *str_len = 12;
  96 + }
  97 + break;
  98 +
  99 + case JZ_INSCODE_5AFRAME_TTS_TRANS_START:
  100 + {
  101 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x57 ,0x03 ,0x00 ,0x00 ,0x23};
  102 + memcpy(str, sendbuf, 12);
  103 + *str_len = 12;
  104 + }
  105 + break;
  106 +
  107 + case JZ_INSCODE_5AFRAME_TTS_TRANS_STOP:
  108 + {
  109 + char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x57 ,0x04 ,0x00 ,0x00 ,0x23};
  110 + memcpy(str, sendbuf, 12);
  111 + *str_len = 12;
  112 + }
  113 + break;
  114 +
  115 + case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY:
  116 + {
  117 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x61 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  118 + memcpy(str, sendbuf, 13);
  119 + *str_len = 13;
  120 + }
  121 + break;
  122 +
  123 + case JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL:
  124 + {
  125 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x62 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  126 + memcpy(str, sendbuf, 13);
  127 + *str_len = 13;
  128 + }
  129 + break;
  130 +
  131 + case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN:
  132 + {
  133 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x63 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  134 + memcpy(str, sendbuf, 13);
  135 + *str_len = 13;
  136 + }
  137 + break;
  138 +
  139 + case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL:
  140 + {
  141 + char sendbuf[14] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0E ,0x00 ,0x00 ,0x64 ,0x51 ,0x00 ,0x00 ,0x00 ,0x00 ,0x23};
  142 + memcpy(str, sendbuf, 14);
  143 + *str_len = 14;
  144 + }
  145 + break;
  146 +
  147 + case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_FINETUNING_CONTROL:
  148 + {
  149 + char sendbuf[14] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0E ,0x00 ,0x00 ,0x64 ,0x52 ,0x00 ,0x00 ,0x00 ,0x00 ,0x23};
  150 + memcpy(str, sendbuf, 14);
  151 + *str_len = 14;
  152 + }
  153 + break;
  154 +
  155 + case JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL:
  156 + {
  157 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x66 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  158 + memcpy(str, sendbuf, 13);
  159 + *str_len = 13;
  160 + }
  161 + break;
  162 +
  163 + case JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR:
  164 + {
  165 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x67 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  166 + memcpy(str, sendbuf, 13);
  167 + *str_len = 13;
  168 + }
  169 + break;
  170 +
  171 + case JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL:
  172 + {
  173 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x68 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  174 + memcpy(str, sendbuf, 13);
  175 + *str_len = 13;
  176 + }
  177 + break;
  178 +
  179 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE:
  180 + {
  181 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  182 + memcpy(str, sendbuf, 13);
  183 + *str_len = 13;
  184 + }
  185 + break;
  186 +
  187 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE:
  188 + {
  189 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x52 ,0x00 ,0x00 ,0x00 ,0x23};
  190 + memcpy(str, sendbuf, 13);
  191 + *str_len = 13;
  192 + }
  193 + break;
  194 +
  195 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL:
  196 + {
  197 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x54 ,0x00 ,0x00 ,0x00 ,0x23};
  198 + memcpy(str, sendbuf, 13);
  199 + *str_len = 13;
  200 + }
  201 + break;
  202 +
  203 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS:
  204 + {
  205 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x55 ,0x00 ,0x00 ,0x00 ,0x23};
  206 + memcpy(str, sendbuf, 13);
  207 + *str_len = 13;
  208 + }
  209 + break;
  210 +
  211 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR:
  212 + {
  213 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x56 ,0x00 ,0x00 ,0x00 ,0x23};
  214 + memcpy(str, sendbuf, 13);
  215 + *str_len = 13;
  216 + }
  217 + break;
  218 +
  219 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER:
  220 + {
  221 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x57 ,0x00 ,0x00 ,0x00 ,0x23};
  222 + memcpy(str, sendbuf, 13);
  223 + *str_len = 13;
  224 + }
  225 + break;
  226 +
  227 + case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING:
  228 + {
  229 + char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x58 ,0x00 ,0x00 ,0x00 ,0x23};
  230 + memcpy(str, sendbuf, 13);
  231 + *str_len = 13;
  232 + }
  233 + break;
  234 +/********************************************************************************************************************************************************
  235 + *
  236 + * 5B帧
  237 + *
  238 +********************************************************************************************************************************************************/
  239 + case JZ_INSCODE_5BFRAME_INITIATECONNECT:
  240 + {
  241 + char sendbuf[12] = {0x5B ,0x5B ,0x77 ,0x00 ,0x0c ,0x00 ,0x00 ,0x50 ,0x51 ,0x00 ,0x00 ,0x23};
  242 + memcpy(str, sendbuf, 12);
  243 + *str_len = 12;
  244 + }
  245 + break;
  246 +
  247 + case JZ_INSCODE_5BFRAME_HEARTBEAT:
  248 + {
  249 + char sendbuf[12] = {0x5B ,0x5B ,0x77 ,0x00 ,0x0c ,0x00 ,0x00 ,0x50 ,0x53 ,0x00 ,0x00 ,0x23};
  250 + memcpy(str, sendbuf, 12);
  251 + *str_len = 12;
  252 + }
  253 + break;
  254 +
  255 + case JZ_INSCODE_5BFRAME_ALL_VERSION:
  256 + {
  257 + unsigned char sendbuf[16] = {0x5B ,0x5B ,0x77 ,0x00 ,0x10 ,0x00 ,0x00 ,0x50 ,0x55, 0x00, 0x00, 0x00, 0x00 ,0x00 ,0x00 ,0x23};
  258 + memcpy(str, sendbuf, 16);
  259 + *str_len = 16;
  260 + }
  261 + break;
  262 +
  263 + case JZ_INSCODE_5BFRAME_ALL_SERIAL_NUMBER:
  264 + {
  265 + unsigned char sendbuf[13] = {0x5B ,0x5B ,0x77 ,0x00 ,0x10 ,0x00 ,0x00 ,0x50 ,0x56, 0x00, 0x00 , 0x00 ,0x23};
  266 + memcpy(str, sendbuf, 13);
  267 + *str_len = 13;
  268 + }
  269 + break;
  270 +
  271 + case JZ_INSCODE_5BFRAME_DEVICE_MESSAGE:
  272 + {
  273 + unsigned char sendbuf[12] = {0x5B ,0x5B ,0x77 ,0x00 ,0x0c ,0x00 ,0x00 ,0x50 ,0x58, 0x00 , 0x00 ,0x23};
  274 + memcpy(str, sendbuf, 12);
  275 + *str_len = 12;
  276 + }
  277 + break;
  278 +
  279 + case JZ_INSCODE_5BFRAME_SUCESS:
  280 + {
  281 + char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x23};
  282 + memcpy(str, sendbuf, 12);
  283 + *str_len = 12;
  284 + }
  285 + break;
  286 +
  287 + case JZ_INSCODE_5BFRAME_DEFEAT:
  288 + {
  289 + char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0xff, 0x00, 0x00, 0x23};
  290 + memcpy(str, sendbuf, 12);
  291 + *str_len = 12;
  292 + }
  293 + break;
  294 +
  295 +
  296 + case JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END:
  297 + {
  298 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0xff, 0x00, 0x00, 0x23};
  299 + memcpy(str, sendbuf, 12);
  300 + *str_len = 12;
  301 + }
  302 + break;
  303 +
  304 + case JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS:
  305 + {
  306 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x02, 0x00, 0x00, 0x23};
  307 + memcpy(str, sendbuf, 12);
  308 + *str_len = 12;
  309 + }
  310 + break;
  311 +
  312 + case JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME:
  313 + {
  314 + char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00, 0x23};
  315 + memcpy(str, sendbuf, 12);
  316 + *str_len = 12;
  317 + }
  318 + break;
  319 +
  320 + case JZ_INSCODE_5BFRAME_VOLUME:
  321 + {
  322 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x23};
  323 + memcpy(str, sendbuf, 12);
  324 + *str_len = 12;
  325 + }
  326 + break;
  327 +
  328 +
  329 +
  330 + case JZ_INSCODE_5BFRAME_SORTWAREVERSION:
  331 + {
  332 + char sendbuf[15] = { 0x5b, 0x5b, 0x77, 0x00, 0x0f, 0x00, 0x00, 0x53, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23};
  333 + memcpy(str, sendbuf, 15);
  334 + *str_len = 15;
  335 + }
  336 + break;
  337 +
  338 + case JZ_INSCODE_5BFRAME_AUDIO_PLAYLOOPSTATUS:
  339 + {
  340 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x05, 0x00, 0x00, 0x23};
  341 + memcpy(str, sendbuf, 12);
  342 + *str_len = 12;
  343 + }
  344 + break;
  345 +
  346 + case JZ_INSCODE_5BFRAME_TTS_TONE:
  347 + {
  348 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x06, 0x00, 0x00, 0x23};
  349 + memcpy(str, sendbuf, 12);
  350 + *str_len = 12;
  351 + }
  352 + break;
  353 +
  354 + case JZ_INSCODE_5BFRAME_TTS_SPEED:
  355 + {
  356 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x23};
  357 + memcpy(str, sendbuf, 12);
  358 + *str_len = 12;
  359 + }
  360 + break;
  361 +
  362 + case JZ_INSCODE_5BFRAME_MUSICLIST_START:
  363 + {
  364 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x23};
  365 + memcpy(str, sendbuf, 12);
  366 + *str_len = 12;
  367 + }
  368 + break;
  369 +
  370 + case JZ_INSCODE_5BFRAME_MUSICLIST_TRANS:
  371 + {
  372 + char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x23};
  373 + memcpy(str, sendbuf, 12);
  374 + *str_len = 12;
  375 + }
  376 + break;
  377 +
  378 + case JZ_INSCODE_5BFRAME_MUSICLIST_STOP:
  379 + {
  380 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};
  381 + memcpy(str, sendbuf, 12);
  382 + *str_len = 12;
  383 + }
  384 + break;
  385 +
  386 + case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS:
  387 + {
  388 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x23};
  389 + memcpy(str, sendbuf, 12);
  390 + *str_len = 12;
  391 + }
  392 + break;
  393 +
  394 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER:
  395 + {
  396 + char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x00, 0x00, 0x23};
  397 + memcpy(str, sendbuf, 12);
  398 + *str_len = 12;
  399 + }
  400 + break;
  401 +
  402 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY:
  403 + {
  404 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x61, 0x51, 0x00, 0x00, 0x00, 0x23};
  405 + memcpy(str, sendbuf, 13);
  406 + *str_len = 13;
  407 + }
  408 + break;
  409 +
  410 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_MODE:
  411 + {
  412 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x62, 0x51, 0x00, 0x00, 0x00, 0x23};
  413 + memcpy(str, sendbuf, 13);
  414 + *str_len = 13;
  415 + }
  416 + break;
  417 +
  418 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN:
  419 + {
  420 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x63, 0x51, 0x00, 0x00, 0x00, 0x23};
  421 + memcpy(str, sendbuf, 13);
  422 + *str_len = 13;
  423 + }
  424 + break;
  425 +
  426 + case JZ_INSCODE_5BFRAME_GIMBAL_PITCH:
  427 + {
  428 + char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0e, 0x00, 0x00, 0x64, 0x51, 0x00, 0x00, 0x00, 0x00, 0x23};
  429 + memcpy(str, sendbuf, 14);
  430 + *str_len = 14;
  431 + }
  432 + break;
  433 +
  434 + case JZ_INSCODE_5BFRAME_GIMBAL_PITCH_FINETUNING:
  435 + {
  436 + char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0e, 0x00, 0x00, 0x64, 0x52, 0x00, 0x00, 0x00, 0x00, 0x23};
  437 + memcpy(str, sendbuf, 14);
  438 + *str_len = 14;
  439 + }
  440 + break;
  441 +
  442 + case JZ_INSCODE_5BFRAME_GIMBAL_YAW:
  443 + {
  444 + char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0e, 0x00, 0x00, 0x65, 0x51, 0x00, 0x00, 0x00, 0x00, 0x23};
  445 + memcpy(str, sendbuf, 14);
  446 + *str_len = 14;
  447 + }
  448 + break;
  449 +
  450 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS:
  451 + {
  452 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x66, 0x51, 0x00, 0x00, 0x00, 0x23};
  453 + memcpy(str, sendbuf, 13);
  454 + *str_len = 13;
  455 + }
  456 + break;
  457 +
  458 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR:
  459 + {
  460 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x67, 0x51, 0x00, 0x00, 0x00, 0x23};
  461 + memcpy(str, sendbuf, 13);
  462 + *str_len = 13;
  463 + }
  464 + break;
  465 +
  466 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE:
  467 + {
  468 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x69, 0x51, 0x00, 0x00, 0x00, 0x23};
  469 + memcpy(str, sendbuf, 13);
  470 + *str_len = 13;
  471 + }
  472 + break;
  473 +
  474 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER:
  475 + {
  476 + char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x6F, 0x57, 0x00, 0x00, 0x00, 0x23};
  477 + memcpy(str, sendbuf, 13);
  478 + *str_len = 13;
  479 + }
  480 + break;
  481 +
  482 +
  483 +
  484 +/********************************************************************************************************************************************************
  485 + *
  486 + * 6A帧
  487 + *
  488 +********************************************************************************************************************************************************/
  489 +
  490 + case JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE:
  491 + {
  492 + char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x69 ,0x52 ,0x00 ,0x00 ,0x00 ,0x23};
  493 + memcpy(str, sendbuf, 13);
  494 + *str_len = 13;
  495 + }
  496 + break;
  497 +
  498 + case JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL:
  499 + {
  500 + char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x69 ,0x56 ,0x00 ,0x00 ,0x00 ,0x23};
  501 + memcpy(str, sendbuf, 13);
  502 + *str_len = 13;
  503 + }
  504 + break;
  505 +
  506 + case JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME:
  507 + {
  508 + char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x50 ,0x00 ,0x00 ,0x00 ,0x23};
  509 + memcpy(str, sendbuf, 13);
  510 + *str_len = 13;
  511 + }
  512 + break;
  513 +
  514 + case JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE:
  515 + {
  516 + char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  517 + memcpy(str, sendbuf, 13);
  518 + *str_len = 13;
  519 + }
  520 + break;
  521 +
  522 +
  523 +/********************************************************************************************************************************************************
  524 + *
  525 + * 6B帧
  526 + *
  527 +********************************************************************************************************************************************************/
  528 + case JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME:
  529 + {
  530 + char sendbuf[13] = {0x6B ,0x6B ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x50 ,0x00 ,0x00 ,0x00 ,0x23};
  531 + memcpy(str, sendbuf, 13);
  532 + *str_len = 13;
  533 + }
  534 + break;
  535 +
  536 + case JZ_INSCODE_6BFRAME_CHECKSTATUS_GIMBAL_LINKAGE:
  537 + {
  538 + char sendbuf[13] = {0x6B ,0x6B ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
  539 + memcpy(str, sendbuf, 13);
  540 + *str_len = 13;
  541 + }
  542 + break;
  543 +
  544 + case JZ_INSCODE_6BFRAME_CHECK_SPECIAL_PARAMETERS:
  545 + {
  546 + char sendbuf[13] = {0x6B ,0x6B ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x54 ,0x00 ,0x00 ,0x00 ,0x23};
  547 + memcpy(str, sendbuf, 13);
  548 + *str_len = 13;
  549 + }
  550 + break;
  551 +
  552 + default:
  553 + printf("JZsdk_GetFrameTemplate:没有对应的帧模板\n");
  554 + break;
  555 + }
  556 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file
  4 + *
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_GET_FRAME_TEMPLATE_H
  11 +#define JZSDK_GET_FRAME_TEMPLATE_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +
  15 +#ifdef __cplusplus
  16 +extern "C" {
  17 +#endif
  18 +
  19 +/* Exported constants --------------------------------------------------------*/
  20 +/* 常亮定义*/
  21 +
  22 +/* Exported types ------------------------------------------------------------*/
  23 +
  24 +/* Exported functions --------------------------------------------------------*/
  25 +int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len);
  26 +
  27 +
  28 +#ifdef __cplusplus
  29 +}
  30 +#endif
  31 +
  32 +#endif
  1 +/* 头文件 ------------------------------------------------------------------*/
  2 +#include <stdio.h>
  3 +#include <stdlib.h>
  4 +#include <string.h>
  5 +#include <stdarg.h>
  6 +#include <stdio.h>
  7 +
  8 +#include "JZsdk_Logger.h"
  9 +#include <time.h>
  10 +#include "JZsdkLib.h"
  11 +#include <pthread.h>
  12 +#include <sys/time.h>
  13 +#include <sys/resource.h>
  14 +#include <unistd.h>
  15 +#include <sys/types.h>
  16 +
  17 +
  18 +#define LOG_GRADE JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO
  19 +
  20 +// 定义全局互斥锁
  21 +static pthread_mutex_t LogWriteMutex = PTHREAD_MUTEX_INITIALIZER;
  22 +
  23 +/* 全局变量 ------------------------------------------------------------------*/
  24 +static struct timeval g_start_time;
  25 +static FILE *logFile = NULL;
  26 +static char LogFileName[JZSDK_FILENAME_SIZE];
  27 +static int Logger_init_flag = JZ_FLAGCODE_OFF;
  28 +
  29 +/* 函数声明 ------------------------------------------------------------------*/
  30 +
  31 +long long get_total_ram() {
  32 + FILE *file;
  33 + char line[128];
  34 + long long total_ram = 0;
  35 +
  36 + file = fopen("/proc/meminfo", "r");
  37 + if (!file) {
  38 + perror("Error opening /proc/meminfo");
  39 + return 0;
  40 + }
  41 +
  42 + while (fgets(line, sizeof(line), file)) {
  43 + if (strncmp(line, "MemTotal:", 9) == 0) {
  44 + sscanf(line, "MemTotal: %lld kB", &total_ram);
  45 + break;
  46 + }
  47 + }
  48 +
  49 + fclose(file);
  50 + return total_ram;
  51 +}
  52 +
  53 +long long get_current_rss(pid_t pid) {
  54 + FILE *file;
  55 + char line[128];
  56 + long long vmrss = 0;
  57 +
  58 + char path[64];
  59 + snprintf(path, sizeof(path), "/proc/%d/status", pid);
  60 +
  61 + file = fopen(path, "r");
  62 + if (!file) {
  63 + perror("Error opening /proc/[pid]/status");
  64 + return 0;
  65 + }
  66 +
  67 + while (fgets(line, sizeof(line), file)) {
  68 + if (strncmp(line, "VmRSS:", 6) == 0) {
  69 + sscanf(line, "VmRSS: %lld kB", &vmrss);
  70 + break;
  71 + }
  72 + }
  73 +
  74 + fclose(file);
  75 + return vmrss;
  76 +}
  77 +
  78 +static void *MonitorTask(void *arg)
  79 +{
  80 + //获取程序的pid号
  81 + pid_t pid = getpid(); // 获取当前进程的 PID
  82 + long long total_ram; //最大ram内存
  83 + long long current_rss; //RSS内存
  84 + double memory_percentage; //内存百分比
  85 +
  86 + // 获取系统总 RAM
  87 + total_ram = get_total_ram();
  88 +
  89 + while (1)
  90 + {
  91 + printf("当前进程pid号%d\n",pid);
  92 +
  93 + // 获取当前进程的内存使用量
  94 + current_rss = get_current_rss(pid);
  95 +
  96 + // 计算内存百分比
  97 + if (total_ram > 0)
  98 + {
  99 + memory_percentage = (double)current_rss / total_ram * 100;
  100 + } else {
  101 + memory_percentage = 0;
  102 + }
  103 +
  104 + // 打印结果
  105 + printf("Program current memory usage: %lld KB\n", current_rss);
  106 + JZSDK_LOG_INFO("Monitor:(%.2f%% of total RAM)", memory_percentage);
  107 +
  108 + delayS(10);
  109 + }
  110 +}
  111 +
  112 +
  113 +
  114 +static int Log_Monitor()
  115 +{
  116 + pthread_t work_mode_task;
  117 + pthread_attr_t task_attribute; //线程属性
  118 + pthread_attr_init(&task_attribute); //初始化线程属性
  119 + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程属性
  120 + int timer = pthread_create(&work_mode_task,&task_attribute,MonitorTask,NULL); //线程
  121 + if(timer != 0)
  122 + {
  123 + printf("创建计时线程失败!\n");
  124 + }
  125 +}
  126 +
  127 +T_JZsdkReturnCode createJZLOGFolder()
  128 +{
  129 + const char *path = "/root/sdcard/JZLOG";
  130 +
  131 + // 使用系统命令检测路径是否存在
  132 + if(JZsdk_check_directory_exists_posix(path) == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
  133 + {
  134 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  135 + }
  136 + else
  137 + {
  138 + JZsdk_Osal_Mkdir(path);
  139 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  140 + }
  141 +}
  142 +
  143 +int ReadLogNumFromFile()
  144 +{
  145 + const char *path = "/root/sdcard/JZLOG/thelast";
  146 + int logNum = 0;
  147 +
  148 + FILE *file = fopen(path, "r");
  149 + if (file == NULL)
  150 + {
  151 + // 如果文件不存在,则创建并设置LogNum为0
  152 + file = fopen(path, "w");
  153 + fprintf(file, "%d", logNum);
  154 + }
  155 + else
  156 + {
  157 + // 从文件中读取LogNum,并自增1
  158 + fscanf(file, "%d", &logNum);
  159 + logNum++;
  160 + fclose(file);
  161 +
  162 + // 将新的LogNum写回文件中
  163 + file = fopen(path, "w");
  164 + fprintf(file, "%d", logNum);
  165 + }
  166 + fclose(file);
  167 +
  168 + return logNum;
  169 +}
  170 +
  171 +T_JZsdkReturnCode JZsdk_LoggerInit()
  172 +{
  173 + //1、记录启动时间
  174 + gettimeofday(&g_start_time, 0);
  175 +
  176 + //2、检查是否存在log文件,不在则创建
  177 + createJZLOGFolder();
  178 +
  179 + //3、获取本地log个数
  180 + int LogNum = ReadLogNumFromFile();
  181 +
  182 + //4、获取本地时间,拼接出log文件名
  183 + time_t current_time;
  184 + struct tm *info;
  185 + char timeString[80];
  186 + time(&current_time);
  187 + info = localtime(&current_time);
  188 + strftime(timeString, sizeof(timeString), "%Y%m%d_%H-%M-%S", info);
  189 + snprintf(LogFileName, sizeof(LogFileName), "/root/sdcard/JZLOG/%d_%s", LogNum, timeString);
  190 +
  191 + printf("LogFileName:%s\n",LogFileName);
  192 +
  193 + // 在主函数或初始化阶段初始化互斥锁
  194 + pthread_mutex_init(&LogWriteMutex, NULL);
  195 +
  196 + //5、打开记录文件
  197 + logFile = fopen(LogFileName, "w");
  198 + if (logFile == NULL) {
  199 + // 文件打开失败,输出错误消息
  200 + printf("Failed to open file: %s", LogFileName);
  201 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  202 + }
  203 +
  204 + //6、写入开始时间
  205 + char logMessage[256];
  206 + snprintf(logMessage,256,"LOG_FILE:%s\n",LogFileName);
  207 + fprintf(logFile, "%s", logMessage);
  208 +
  209 + //dfclose(logFile);
  210 +
  211 + //打开初始化完成的flag
  212 + Logger_init_flag = JZ_FLAGCODE_ON;
  213 +
  214 + //设立监控
  215 + Log_Monitor();
  216 +
  217 + JZSDK_LOG_INFO("log初始化完成");
  218 +}
  219 +
  220 +T_JZsdkReturnCode JZsdk_LoggerDeInit()
  221 +{
  222 + if (logFile != NULL)
  223 + {
  224 + fclose(logFile);
  225 + }
  226 +}
  227 +
  228 +T_JZsdkReturnCode writeToLogFile(const char *data)
  229 +{
  230 + // 加锁
  231 + pthread_mutex_lock(&LogWriteMutex);
  232 +
  233 + //logFile = fopen(LogFileName, "a"); // 使用"a"模式打开文件,以在末尾追加数据
  234 +
  235 + // if (logFile == NULL) {
  236 + // // 文件打开失败,输出错误消息
  237 + // printf("Failed to open file: %s", LogFileName);
  238 + // pthread_mutex_unlock(&LogWriteMutex);
  239 +
  240 + // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  241 + // }
  242 +
  243 + if (logFile == NULL)
  244 + {
  245 + printf("Failed to open file: %s", LogFileName);
  246 + pthread_mutex_unlock(&LogWriteMutex);
  247 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  248 + }
  249 +
  250 + fprintf(logFile, "%s", data); // 写入新的数据
  251 +
  252 + //fclose(logFile);
  253 +
  254 + // 解锁
  255 + pthread_mutex_unlock(&LogWriteMutex);
  256 +
  257 +}
  258 +
  259 +T_JZsdkReturnCode HexToLogFile(const char *data)
  260 +{
  261 + // 加锁
  262 + pthread_mutex_lock(&LogWriteMutex);
  263 +
  264 + // logFile = fopen(LogFileName, "a"); // 使用"a"模式打开文件,以在末尾追加数据
  265 +
  266 + // if (logFile == NULL) {
  267 + // // 文件打开失败,输出错误消息
  268 + // printf("Failed to open file: %s", LogFileName);
  269 + // pthread_mutex_unlock(&LogWriteMutex);
  270 +
  271 + // return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  272 + // }
  273 +
  274 + if (logFile == NULL)
  275 + {
  276 + printf("Failed to open file: %s", LogFileName);
  277 + pthread_mutex_unlock(&LogWriteMutex);
  278 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  279 + }
  280 +
  281 + fprintf(logFile, "%x ", data[0]); // 写入新的数据
  282 +
  283 + //fclose(logFile);
  284 +
  285 + // 解锁
  286 + pthread_mutex_unlock(&LogWriteMutex);
  287 +}
  288 +
  289 +
  290 +void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...)
  291 +{
  292 + // 将日志级别转换为相应的字符串
  293 + const char *JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "";
  294 + switch (level) {
  295 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG:
  296 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "DEBUG";
  297 + break;
  298 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO:
  299 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "INFO";
  300 + break;
  301 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN:
  302 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "WARNING";
  303 + break;
  304 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR:
  305 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "ERROR";
  306 + break;
  307 + default:
  308 + break;
  309 + }
  310 + // 使用可变参数处理传入的格式化字符串和可变参数
  311 + va_list args;
  312 + va_start(args, fmt);
  313 +
  314 + //格式化日志消息
  315 + char logMessage[512];
  316 + memset(logMessage, 0, sizeof(logMessage));
  317 + vsnprintf(logMessage, sizeof(logMessage), fmt, args);
  318 +
  319 + va_end(args);
  320 +
  321 + struct timeval current_time;
  322 + gettimeofday(&current_time, 0);
  323 +
  324 + long seconds = current_time.tv_sec - g_start_time.tv_sec;
  325 + long microseconds = current_time.tv_usec - g_start_time.tv_usec;
  326 + double elapsed = seconds + microseconds*1e-6;
  327 +
  328 + // 执行具体的日志输出操作
  329 + char finalLogMessage[612];
  330 + memset(finalLogMessage, 0, sizeof(finalLogMessage));
  331 + snprintf(finalLogMessage, 612, "[%s][%.4f]%s\n", JZSDK_LOGGER_CONSOLE_LOG_LEVEL, elapsed, logMessage);
  332 +
  333 + printf("%s",finalLogMessage);
  334 +
  335 + //写入日志
  336 + if (Logger_init_flag == JZ_FLAGCODE_ON && level <= LOG_GRADE)
  337 + {
  338 + writeToLogFile(finalLogMessage);
  339 + }
  340 +}
  341 +
  342 +
  343 +
  344 +void JZsdk_User_OutputHex(E_JZsdkConsoleLogLevel level, const char *fmt, ...)
  345 +{
  346 + // 将日志级别转换为相应的字符串
  347 + const char *JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "";
  348 + switch (level) {
  349 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG:
  350 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "DEBUG";
  351 + break;
  352 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO:
  353 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "INFO";
  354 + break;
  355 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN:
  356 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "WARNING";
  357 + break;
  358 + case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR:
  359 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "ERROR";
  360 + break;
  361 + default:
  362 + break;
  363 + }
  364 + // 使用可变参数处理传入的格式化字符串和可变参数
  365 + va_list args;
  366 + va_start(args, fmt);
  367 +
  368 + //格式化日志消息
  369 + char logMessage[10];
  370 + memset(logMessage, 0, sizeof(logMessage));
  371 + vsnprintf(logMessage, sizeof(logMessage), fmt, args);
  372 +
  373 + va_end(args);
  374 +
  375 + // 执行具体的日志输出操作
  376 + char finalLogMessage[512];
  377 + memset(finalLogMessage, 0, sizeof(finalLogMessage));
  378 + snprintf(finalLogMessage, 612, "%s", logMessage);
  379 +
  380 +
  381 + printf("%x ",finalLogMessage[0]);
  382 +
  383 + //写入日志
  384 + HexToLogFile(finalLogMessage);
  385 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_Logger.h
  4 + * 用于给h150s logger显示文件
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_LOGGER_H
  11 +#define JZSDK_LOGGER_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
  15 +
  16 +#ifdef __cplusplus
  17 +extern "C" {
  18 +#endif
  19 +
  20 +/* Exported constants --------------------------------------------------------*/
  21 +/* 常亮定义*/
  22 +
  23 +
  24 +typedef enum {
  25 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR = 0, /*!< Logger console error level. The method and level of the console are
  26 + associated with each other. If the level of the registered console
  27 + method is lower than this level, the level interface will not be
  28 + printed successfully. */
  29 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN = 1, /*!< Logger console warning level.The method and level of the console are
  30 + associated with each other. If the level of the registered console
  31 + method is lower than this level, the level interface will not be
  32 + printed successfully. */
  33 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO = 2, /*!< Logger console info level. The method and level of the console are
  34 + associated with each other. If the level of the registered console
  35 + method is lower than this level, the level interface will not be
  36 + printed successfully. */
  37 + JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG = 3, /*!< Logger console debug level. The method and level of the console are
  38 + associated with each other. If the level of the registered console
  39 + method is lower than this level, the level interface will not be
  40 + printed successfully. */
  41 +} E_JZsdkConsoleLogLevel;
  42 +/* Exported types ------------------------------------------------------------*/
  43 +
  44 +
  45 +/* Exported functions --------------------------------------------------------*/
  46 +void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...);
  47 +T_JZsdkReturnCode JZsdk_LoggerInit();
  48 +void JZsdk_User_OutputHex(E_JZsdkConsoleLogLevel level, const char *fmt, ...);
  49 +
  50 +/* Exported constants --------------------------------------------------------*/
  51 +#define JZSDK_LOG_DEBUG(fmt, ...) \
  52 + JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
  53 +#define JZSDK_LOG_INFO(fmt, ...) \
  54 + JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
  55 +#define JZSDK_LOG_WARN(fmt, ...) \
  56 + JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
  57 +#define JZSDK_LOG_ERROR(fmt, ...) \
  58 + JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
  59 +#define JZSDK_LOG_OUTPUTHEX(fmt, ...) \
  60 + JZsdk_User_OutputHex(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO, "" fmt , ##__VA_ARGS__)
  61 +
  62 +
  63 +#ifdef __cplusplus
  64 +}
  65 +#endif
  66 +
  67 +#endif
  68 +/************************ (C) COPYRIGHT JZSDK Innovations *******END OF FILE******/
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_FS_Standards.h
  4 + * 用于规范文件名及长度
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FS_STANDARDS_H
  11 +#define JZSDK_FS_STANDARDS_H
  12 +
  13 +#define JZSDK_FILENAME_SIZE (128) //文件名最大长度128
  14 +#define JZSDK_CMD_SIZE (256) //cmd指令最大长度
  15 +
  16 +
  17 +#endif
  1 +#include <stdio.h>
  2 +#include "JZsdk_FileSystm.h"
  3 +#include <stdlib.h>
  4 +#include <stdbool.h>
  5 +#include <string.h>
  6 +#include <unistd.h>
  7 +#include <sys/types.h>
  8 +#include <sys/stat.h>
  9 +#include "JZsdkLib.h"
  10 +#include <dirent.h>
  11 +#include <errno.h>
  12 +
  13 +/*
  14 +* 用于运行指令
  15 +*
  16 +*/
  17 +T_JZsdkReturnCode JZsdk_RunSystemCmd(char *systemCmd)
  18 +{
  19 + //FILE *fp;
  20 +
  21 + //printf("JZsdk_RunSystemCmd:%s\n",systemCmd);
  22 +
  23 + // fp = popen(systemCmd, "r");
  24 + // if (fp == NULL) {
  25 + // return -1;
  26 + // }
  27 +
  28 + int status = system(systemCmd);
  29 + if (status == -1 || WIFEXITED(status) == false) {
  30 + printf("Call %s error, status = %d\n", systemCmd, status);
  31 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  32 + }
  33 +
  34 + if (WEXITSTATUS(status) == 0) {
  35 + JZSDK_LOG_DEBUG("指令执行成功%s\n",systemCmd);
  36 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  37 + }
  38 + else {
  39 + JZSDK_LOG_ERROR("指令执行失败Exit status is = %d", WEXITSTATUS(status));
  40 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  41 + }
  42 + //pclose(fp);
  43 +
  44 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  45 +}
  46 +
  47 +/*
  48 +
  49 + 运行命令 并读取返回值
  50 +
  51 +*/
  52 +// FILE* JZsdk_RunSystemCmd_ReturnFilePointer(char *systemCmd)
  53 +// {
  54 +// FILE *fp;
  55 +
  56 +// fp = popen(systemCmd, "r");
  57 +
  58 +// pclose(fp);
  59 +
  60 +// return fp;
  61 +// }
  62 +
  63 +
  64 +/**********************************
  65 + *
  66 + * 创建一个文件夹
  67 + 函数名:JZsdk_check_file_exists
  68 + 参数:文件路径
  69 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
  70 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
  71 + * *******************************/
  72 +T_JZsdkReturnCode JZsdk_Osal_Mkdir(const char *filePath)
  73 +{
  74 + int32_t ret;
  75 +
  76 + if (filePath == NULL) {
  77 + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
  78 + }
  79 +
  80 + ret = mkdir(filePath, S_IRWXU);
  81 + if (ret < 0) {
  82 + switch (errno) {
  83 + case EACCES:
  84 + JZSDK_LOG_ERROR("Permission denied\n");
  85 + break;
  86 + case EEXIST:
  87 + JZSDK_LOG_ERROR("Directory already exists\n");
  88 + break;
  89 + case ENOENT:
  90 + JZSDK_LOG_ERROR("A component of the path does not exist or is a dangling symbolic link\n");
  91 + break;
  92 + case ENOMEM:
  93 + JZSDK_LOG_ERROR("Not enough memory\n");
  94 + break;
  95 + case ENOTDIR:
  96 + JZSDK_LOG_ERROR("A component of the path prefix is not a directory\n");
  97 + break;
  98 + case EROFS:
  99 + JZSDK_LOG_ERROR("The named file resides on a read-only file system\n");
  100 + break;
  101 + default:
  102 + JZSDK_LOG_ERROR("Unknown error %d\n", errno);
  103 + }
  104 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  105 + }
  106 +
  107 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  108 +}
  109 +
  110 +
  111 +/**********************************
  112 + *
  113 + * 文件是否存在判断函数
  114 +* 判断文件是否存在
  115 + 函数名:JZsdk_check_file_exists
  116 + 参数:文件路径
  117 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
  118 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
  119 + * *******************************/
  120 +T_JZsdkReturnCode JZsdk_check_file_exists(const char* file_path)
  121 +{
  122 + if (access(file_path, F_OK) == 0)
  123 + {
  124 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  125 + }
  126 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  127 +}
  128 +
  129 +/**********************************
  130 + *
  131 + * 文件夹是否存在判断函数
  132 +* 判断文件是否存在
  133 + 函数名:JZsdk_check_file_exists
  134 + 参数:文件路径
  135 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
  136 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
  137 + * *******************************/
  138 +T_JZsdkReturnCode JZsdk_check_directory_exists_posix(const char* directory_path)
  139 +{
  140 + struct stat st;
  141 + if (stat(directory_path, &st) == 0 && S_ISDIR(st.st_mode))
  142 + {
  143 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  144 + }
  145 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  146 +}
  147 +
  148 +/**********************************
  149 + *
  150 + * 创建新的文件
  151 + 函数名:JZsdk_check_file_exists
  152 + 参数:文件路径
  153 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
  154 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
  155 + * *******************************/
  156 +T_JZsdkReturnCode JZsdk_create_file(const char* file_path)
  157 +{
  158 + FILE* file = fopen(file_path, "w");
  159 + if (file != NULL)
  160 + {
  161 + fclose(file);
  162 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  163 + }
  164 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  165 +}
  166 +
  167 +/**********************************
  168 + *
  169 + * 删除文件
  170 + 函数名:JZsdk_delete_file
  171 + 参数:文件路径
  172 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件已经不存在
  173 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件仍然存在
  174 + * *******************************/
  175 +T_JZsdkReturnCode JZsdk_delete_file(const char* file_path)
  176 +{
  177 + int remove_result = remove(file_path);
  178 + if (remove_result != 0) {
  179 + // 删除失败,返回错误
  180 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  181 + }
  182 +
  183 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 删除成功
  184 +}
  185 +
  186 +/**********************************
  187 + *
  188 + * 复制文件
  189 + 函数名:JZsdk_copy_file
  190 + 参数:文件路径
  191 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件已经不存在
  192 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件仍然存在
  193 + * *******************************/
  194 +T_JZsdkReturnCode JZsdk_copy_file_byC(const char* source_path, const char* dest_path)
  195 +{
  196 + FILE *source_file = fopen(source_path, "rb"); // 以二进制读模式打开源文件
  197 + if (source_file == NULL) {
  198 + // 无法打开源文件
  199 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  200 + }
  201 +
  202 + FILE *dest_file = fopen(dest_path, "wb"); // 以二进制写模式打开目标文件
  203 + if (dest_file == NULL) {
  204 + // 无法创建或打开目标文件
  205 + fclose(source_file); // 关闭已打开的源文件
  206 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  207 + }
  208 +
  209 + // 分配缓冲区用于读取和写入文件
  210 + char buffer[4096]; // 缓冲区大小可以根据需要调整
  211 + size_t bytes_read;
  212 +
  213 + // 复制文件内容
  214 + while ((bytes_read = fread(buffer, 1, sizeof(buffer), source_file)) > 0) {
  215 + if (fwrite(buffer, 1, bytes_read, dest_file) != bytes_read) {
  216 + // 写入目标文件失败
  217 + fclose(source_file); // 关闭已打开的源文件
  218 + fclose(dest_file); // 关闭已打开的目标文件
  219 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  220 + }
  221 + }
  222 +
  223 + // 关闭文件
  224 + fclose(source_file);
  225 + fclose(dest_file);
  226 +
  227 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 复制成功
  228 +}
  229 +
  230 +
  231 +// 删除指定路径下的所有文件(不包括子文件夹)
  232 +// 注意:这个函数不会删除子文件夹,如果您需要删除子文件夹,请添加递归逻辑。
  233 +T_JZsdkReturnCode JZsdk_delete_files_in_directory(const char* directory_path)
  234 +{
  235 + DIR* dir;
  236 + struct dirent* ent;
  237 + char file_path[1024]; // 假设文件路径不会超过这个长度
  238 + T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  239 +
  240 + if ((dir = opendir(directory_path)) != NULL) {
  241 + while ((ent = readdir(dir)) != NULL) {
  242 + // 跳过目录条目 '.' 和 '..'
  243 + if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
  244 + continue;
  245 + }
  246 +
  247 + // 构建文件的完整路径
  248 + snprintf(file_path, sizeof(file_path), "%s/%s", directory_path, ent->d_name);
  249 +
  250 + // 如果是文件,则删除它
  251 + if (remove(file_path) != 0) {
  252 + perror("remove"); // 打印错误信息
  253 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  254 + break; // 或者您可以继续并尝试删除其他文件
  255 + }
  256 + }
  257 + closedir(dir);
  258 + } else {
  259 + perror("opendir"); // 打印错误信息
  260 + ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  261 + }
  262 +
  263 + return ret;
  264 +}
  265 +
  266 +/**********************************
  267 + *
  268 + * 创建硬链接的函数
  269 + 函数名:JZsdk_create_hardlink
  270 + 参数:文件路径 链接路径
  271 + 返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示成功
  272 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示失败
  273 + * *******************************/
  274 +T_JZsdkReturnCode JZsdk_create_hardlink(const char* target_path, const char* link_path)
  275 +{
  276 + int result = link(target_path, link_path);
  277 + if (result == -1) {
  278 + JZSDK_LOG_ERROR("hardlink"); // 打印错误信息
  279 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 返回错误代码
  280 + }
  281 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 返回成功代码
  282 +}
  283 +
  284 +
  285 +/**********************************
  286 + *
  287 + * 字符串后缀对比
  288 + 函数名:JZsdk_strings_suffix_comparison
  289 + 参数:字符串,后缀名
  290 + 返回值:
  291 + JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示后缀正确
  292 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示后缀错误,或是长度不对
  293 + * *******************************/
  294 +T_JZsdkReturnCode JZsdk_strings_suffix_comparison_onlyStr(const unsigned char* Strings, const unsigned char *suffix)
  295 +{
  296 + if (Strings == NULL || suffix == NULL)
  297 + {
  298 + JZSDK_LOG_ERROR("字符串后缀对比输入错误");
  299 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果指针为NULL,返回失败
  300 + }
  301 +
  302 + int suffix_len = (int)strlen((const char*)suffix); // 强制转换为const char*以确保兼容性
  303 + int Strings_len = (int)strlen((const char*)Strings); // 强制转换为const char*以确保兼容性
  304 +
  305 + if (Strings_len <= suffix_len)
  306 + {
  307 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果字符串长度小于后缀长度,返回失败
  308 + }
  309 +
  310 + // 确保不会越界,并且字符串是以空字符结尾的
  311 + if (memcmp(Strings + Strings_len - suffix_len, suffix, suffix_len) == 0)
  312 + {
  313 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  314 + }
  315 + else
  316 + {
  317 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  318 + }
  319 +}
  320 +
  321 +
  322 +/**********************************
  323 + *
  324 + * 字符串后缀对比
  325 + 函数名:JZsdk_strings_suffix_comparison
  326 + 参数:字符串, 字符串长度,后缀名
  327 + 返回值:
  328 + JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示后缀正确
  329 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示后缀错误,或是长度不对
  330 + * *******************************/
  331 +T_JZsdkReturnCode JZsdk_strings_suffix_comparison_withLen(const unsigned char* Strings, int Strings_len, const unsigned char *suffix)
  332 +{
  333 + if (Strings == NULL || suffix == NULL)
  334 + {
  335 + JZSDK_LOG_ERROR("字符串后缀对比输入错误");
  336 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果指针为NULL,返回失败
  337 + }
  338 +
  339 + int suffix_len = (int)strlen((const char*)suffix); // 强制转换为const char*以确保兼容性
  340 +
  341 + if (Strings_len <= suffix_len)
  342 + {
  343 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果字符串长度小于后缀长度,返回失败
  344 + }
  345 +
  346 + // 确保不会越界,并且字符串是以空字符结尾的
  347 + if (memcmp(Strings + Strings_len - suffix_len, suffix, suffix_len) == 0)
  348 + {
  349 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  350 + }
  351 + else
  352 + {
  353 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  354 + }
  355 +}
  356 +
  357 +
  358 +
  359 +/**********************************
  360 + *
  361 + * 读取文件大小
  362 + 函数名:JZsdk_Fs_ReadFileSize
  363 + 参数:字符串, 字符串长度,后缀名
  364 + 返回值:
  365 + JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS读取正确
  366 + JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE读取错误
  367 + * *******************************/
  368 +T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *FileSize)
  369 +{
  370 + struct stat statbuf;
  371 + int result = stat(FilePath, &statbuf);
  372 +
  373 + if (result == -1) {
  374 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  375 + }
  376 +
  377 + *FileSize = statbuf.st_size;
  378 +
  379 + if (*FileSize == 0)
  380 + {
  381 + // 文件大小为0,可能是空文件
  382 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  383 + }
  384 +
  385 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  386 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_FileSystem.h
  4 + * 用于文件系统操作
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_FILESYSTEM_H
  11 +#define JZSDK_FILESYSTEM_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +#include "../JZsdk_Code/JZsdk_Code.h"
  15 +#include "./JZsdk_FS_Standards.h"
  16 +
  17 +#ifdef __cplusplus
  18 +extern "C" {
  19 +#endif
  20 +
  21 +/* Exported constants --------------------------------------------------------*/
  22 +/* 常亮定义*/
  23 +
  24 +/* Exported types ------------------------------------------------------------*/
  25 +
  26 +
  27 +/* Exported functions --------------------------------------------------------*/
  28 +T_JZsdkReturnCode JZsdk_RunSystemCmd(char *systemCmd);
  29 +T_JZsdkReturnCode JZsdk_check_file_exists(const char* file_path) ;
  30 +T_JZsdkReturnCode JZsdk_create_file(const char* file_path) ;
  31 +T_JZsdkReturnCode JZsdk_delete_file(const char* file_path) ;
  32 +T_JZsdkReturnCode JZsdk_strings_suffix_comparison_onlyStr(const unsigned char* Strings, const unsigned char *suffix) ;
  33 +T_JZsdkReturnCode JZsdk_strings_suffix_comparison_withLen(const unsigned char* Strings, int Strings_len, const unsigned char *suffix) ;
  34 +T_JZsdkReturnCode JZsdk_Osal_Mkdir(const char *filePath);
  35 +T_JZsdkReturnCode JZsdk_delete_files_in_directory(const char* directory_path);
  36 +T_JZsdkReturnCode JZsdk_create_hardlink(const char* target_path, const char* link_path);
  37 +T_JZsdkReturnCode JZsdk_check_directory_exists_posix(const char* directory_path);
  38 +T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *FileSize);
  39 +T_JZsdkReturnCode JZsdk_copy_file_byC(const char* source_path, const char* dest_path);
  40 +
  41 +#ifdef __cplusplus
  42 +}
  43 +#endif
  44 +
  45 +#endif
  46 +/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <stdbool.h>
  4 +#include <string.h>
  5 +
  6 +#include "JZsdkLib.h"
  7 +
  8 +
  9 +
  10 +/**********************************
  11 + *
  12 + * 注册内存
  13 + 函数名:JZsdk_Malloc
  14 + 参数:指针,注册大小
  15 + 返回值:
  16 + JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS正确
  17 + JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER 错误
  18 + * *******************************/
  19 +T_JZsdkReturnCode JZsdk_Malloc(void **ptr, unsigned int size)
  20 +{
  21 + if (size == 0)
  22 + {
  23 + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
  24 + }
  25 +
  26 + *ptr = malloc(size);
  27 +
  28 + if (*ptr == NULL)
  29 + {
  30 + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
  31 + }
  32 +
  33 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  34 +}
  35 +
  36 +
  37 +/**********************************
  38 + *
  39 + * 释放内存
  40 + 函数名:JZsdk_Free
  41 + 参数:指针,注册大小
  42 + 返回值:
  43 + JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS正确
  44 + JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER 错误
  45 + * *******************************/
  46 +T_JZsdkReturnCode JZsdk_Free(void *ptr)
  47 +{
  48 + if (ptr == NULL)
  49 + {
  50 + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
  51 + }
  52 +
  53 + free(ptr);
  54 + ptr = NULL;
  55 +
  56 + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  57 +}
  1 +/**
  2 + ********************************************************************
  3 + * @file JZsdk_MemoryAdapter.h
  4 + * 用于内存管理
  5 + *
  6 + *********************************************************************
  7 + */
  8 +
  9 +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
  10 +#ifndef JZSDK_MEMORY_ADAPTER_H
  11 +#define JZSDK_MEMORY_ADAPTER_H
  12 +
  13 +/* Includes ------------------------------------------------------------------*/
  14 +#include "../JZsdk_Code/JZsdk_Code.h"
  15 +
  16 +#ifdef __cplusplus
  17 +extern "C" {
  18 +#endif
  19 +
  20 +/* Exported constants --------------------------------------------------------*/
  21 +/* 常亮定义*/
  22 +
  23 +/* Exported types ------------------------------------------------------------*/
  24 +
  25 +
  26 +/* Exported functions --------------------------------------------------------*/
  27 +T_JZsdkReturnCode JZsdk_Malloc(void **ptr, unsigned int size);
  28 +T_JZsdkReturnCode JZsdk_Free(void *ptr);
  29 +
  30 +#ifdef __cplusplus
  31 +}
  32 +#endif
  33 +
  34 +#endif
  35 +/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/