作者 潘浩彬

合并分支 'dev_00.00.02.00' 到 'master'

Dev 00.00.02.00



查看合并请求 !1
正在显示 37 个修改的文件 包含 4270 行增加0 行删除

要显示太多修改。

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

# Compiled class file
project_build
ThirdParty
ModuleLib
备份
\ No newline at end of file
... ...
# 编译链的配置
#1、编译链与设备类型的选择
set(DEVICE_NAME JZ_H1T)
#上一行为禁止修改行
if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H10")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "TF_A1")
set(MAKE_COMPILER ARM_CORTEXA9_LINUX)
set(DEVICE_TYPE MEGAPHONE)
elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
set(MAKE_COMPILER ARM_X86_64_ARRCH64)
endif()
if(${MAKE_COMPILER} STREQUAL "ARM_CORTEXA9_LINUX")
set(TOOLCHAIN_NAME arm-linux-gnueabihf-gcc)
set(CMAKE_C_COMPILER "/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-gcc")
set(CMAKE_CXX_COMPILER "/usr/local/arm/4.9.3/bin/arm-cortexa9-linux-gnueabihf-g++")
message("使用ARM_CORTEXA9_LINUX编译链")
elseif(${MAKE_COMPILER} STREQUAL "ARM_CORTEX_LINUX")
set(TOOLCHAIN_NAME arm-linux-gnueabihf-gcc)
set(CMAKE_C_COMPILER "/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc")
set(CMAKE_CXX_COMPILER "/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++")
message("使用ARM_CORTEX_LINUX编译链")
elseif(${MAKE_COMPILER} STREQUAL "ARM_X86_64_ARRCH64")
# 交叉编译链3
set(TOOLCHAIN_NAME aarch64-linux-gnu-gcc)
set(CMAKE_C_COMPILER "/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++")
message("使用ARM_X86_64_ARRCH64编译链")
elseif(${MAKE_COMPILER} STREQUAL "LOCAL")
# 本地测试编译链
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/g++")
message("使用LOCAL编译链")
else()
message(FATAL_ERROR "不支持的编译链")
endif()
message("编译链配置完毕\n")
\ No newline at end of file
... ...
# ModuleConfig.cmake 模组模块的配置文件
###################### 自己的库 ##############################
# AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_OFF)
# 信息模块
set(DEVICE_INFO_MODULE VERSION_SWITCH_OFF)
# Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_OFF)
# IRCUT 引脚处理模块
set(IRCUT_MODULE VERSION_SWITCH_OFF)
# LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_OFF)
# MediaProc 媒体管理模块
set(MEDIA_PROC_MODULE VERSION_SWITCH_OFF)
# 喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_OFF)
# 电源管理模块
set(POWER_MANAGER_MODULE VERSION_SWITCH_OFF)
# UI管理模块
set(UI_CONTROL_MODULE VERSION_SWITCH_OFF)
# 红外相机模块
set(IRC_MODULE VERSION_SWITCH_OFF)
# 侧面激光模块
set(SIDE_LASER_MODULE VERSION_SWITCH_OFF)
###################### 第三方库 ##############################
# FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_OFF)
# cedarxLib
set(CedarxLib VERSION_SWITCH_OFF)
########################## 通用库 ###########################################
# 添加信息模块
set(DEVICE_INFO_MODULE VERSION_SWITCH_ON)
# 添加UI管理模块
set(UI_CONTROL_MODULE VERSION_SWITCH_ON)
#####################################################################
if("${DEVICE_NAME}" STREQUAL "JZ_H1E")
elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T")
# 添加AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加IRCUT 引脚处理模块
set(IRCUT_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
# 添加电源管理模块
set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S")
# 添加AudioDeal 音频处理模块
set(AUDIODEAL_MODULE VERSION_SWITCH_ON)
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加IRCUT 引脚处理模块
set(IRCUT_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加喊话器模块
set(MEGAPHONE_MODULE VERSION_SWITCH_ON)
# 添加电源管理模块
set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
# 添加FFMPEG及其附属模块
set(FFMPEG_MODULE VERSION_SWITCH_ON)
# 添加激光模块
set(SIDE_LASER_MODULE VERSION_SWITCH_ON)
elseif("${DEVICE_NAME}" STREQUAL "JZ_C1")
# 添加Gimbal 云台处理模块
set(GIMBAL_MODULE VERSION_SWITCH_ON)
# 添加IRCUT 引脚处理模块
set(IRCUT_MODULE VERSION_SWITCH_ON)
# 添加LIGHTING 光源处理模块
set(LIGHTING_MODULE VERSION_SWITCH_ON)
# 添加MediaProc 媒体管理模块
set(MEDIA_PROC_MODULE VERSION_SWITCH_ON)
# 添加电源管理模块
set(POWER_MANAGER_MODULE VERSION_SWITCH_ON)
# 添加红外相机模块
set(IRC_MODULE VERSION_SWITCH_ON)
endif()
message("模组模块已加载\n")
\ No newline at end of file
... ...
# ModuleLoading.cmake 模块加载文件
if(${IFLAY_TTS_MODULE} STREQUAL "VERSION_SWITCH_ON")
set(iFLYTEK_TTS_DIRS "${ROOT_DIRS}ThirdParty/iFLYTEK_TTS/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/iFLYTEK_TTS/include)
target_link_libraries(
${PROJECT_NAME}
${iFLYTEK_TTS_DIRS}/libmsc.so
)
message("讯飞TTS模块已加载\n")
endif()
if(${ESPEAK_TTS_MODULE} STREQUAL "VERSION_SWITCH_ON")
set(ESPEAK_TTS_DIRS "${ROOT_DIRS}ThirdParty/Espeak/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/Espeak/include)
target_link_libraries(
${PROJECT_NAME}
${ESPEAK_TTS_DIRS}/libportaudio.so.2
${ESPEAK_TTS_DIRS}/libTTS_Player.so
)
message("Espeak模块已加载\n")
endif()
if(${ALSALIB_MODULE} STREQUAL "VERSION_SWITCH_ON")
set(ALSALIB_DIRS "${ROOT_DIRS}ThirdParty/AlsaLib/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/AlsaLib/include)
target_link_libraries(
${PROJECT_NAME}
${ALSALIB_DIRS}/libasound.so.2.0.0
)
message("alsalib已加载\n")
endif()
if(${OPUS_MODULE} STREQUAL "VERSION_SWITCH_ON")
set(OPUS_DIRS "${ROOT_DIRS}ThirdParty/opus/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/opus/include)
target_link_libraries(
${PROJECT_NAME}
${OPUS_DIRS}/libopus.so
)
message("OPUS模块已加载\n")
endif()
if(${CedarxLib} STREQUAL "VERSION_SWITCH_ON")
message("\nCedarX已加载\n")
target_link_libraries(${PROJECT_NAME}
${ROOT_DIRS}ModuleLib/Camera/CedarX/libawh264.so
${ROOT_DIRS}ModuleLib/Camera/CedarX/libMemAdapter.so
${ROOT_DIRS}ModuleLib/Camera/CedarX/libVE.so
${ROOT_DIRS}ModuleLib/Camera/CedarX/libvencoder.so
${ROOT_DIRS}ModuleLib/Camera/CedarX/libvideoengine.so
${ROOT_DIRS}ModuleLib/Camera/CedarX/libvdecoder.so
)
message("\n OpenCV已加载\n")
target_link_libraries(${PROJECT_NAME}
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_calib3d.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_core.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_dnn.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_features2d.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_flann.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_highgui.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_imgcodecs.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_imgproc.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_ml.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_objdetect.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_photo.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_shape.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_stitching.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_superres.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_videoio.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_video.so
${ROOT_DIRS}ModuleLib/OpenCV/libopencv_videostab.so
)
message("\n ffmpeg已加载\n")
target_link_libraries(${PROJECT_NAME}
${ROOT_DIRS}ModuleLib/ffmpeg/libavcodec.so
${ROOT_DIRS}ModuleLib/ffmpeg/libavdevice.so
${ROOT_DIRS}ModuleLib/ffmpeg/libavfilter.so
${ROOT_DIRS}ModuleLib/ffmpeg/libavformat.so
${ROOT_DIRS}ModuleLib/ffmpeg/libavutil.so
${ROOT_DIRS}ModuleLib/ffmpeg/libswresample.so
${ROOT_DIRS}ModuleLib/ffmpeg/libswscale.so
)
message("\n SearchLightCenter已加载\n")
target_link_libraries(${PROJECT_NAME}
${ROOT_DIRS}ModuleLib/SearchLightCenter/libcenter.so
)
endif()
if(${FFMPEG_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\nffmpeg模块加载\n")
set(FFMPEG_6_0_DIRS "${ROOT_DIRS}ThirdParty/ffmpeg_6_0/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/ffmpeg_6_0/include)
target_link_libraries(
${PROJECT_NAME}
${FFMPEG_6_0_DIRS}/libavcodec.so.60
${FFMPEG_6_0_DIRS}/libavdevice.so.60
${FFMPEG_6_0_DIRS}/libavfilter.so.9
${FFMPEG_6_0_DIRS}/libavformat.so.60
${FFMPEG_6_0_DIRS}/libavutil.so.58
${FFMPEG_6_0_DIRS}/libpostproc.so.57
${FFMPEG_6_0_DIRS}/libswresample.so.4
${FFMPEG_6_0_DIRS}/libswscale.so.7
)
message("x264模块已加载\n")
set(X264_DIRS "${ROOT_DIRS}ThirdParty/x264_2245/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/x264_2245/include)
target_link_libraries(
${PROJECT_NAME}
${X264_DIRS}/libx264.so.157
)
message("FDK_AAC模块已加载\n")
set(FDK_AAC_DIRS "${ROOT_DIRS}ThirdParty/fdk_aac_2_0_3/lib/arm-cortexa9-linux-gnueabihf")
include_directories(${ROOT_DIRS}ThirdParty/fdk_aac_2_0_3/include)
target_link_libraries(
${PROJECT_NAME}
${FDK_AAC_DIRS}/libfdk-aac.so.2
)
endif()
#rtk_mmp库
if(${LIB_RTK_MMP} STREQUAL "VERSION_SWITCH_ON")
message("RTK_MMP库已加载\n")
add_definitions(-DMACRO_RTK_MPP_MODULE) #加载usb模块
include_directories(${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/include)
target_link_libraries(
${PROJECT_NAME}
${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/lib/librockchip_mpp.so.0
${ROOT_DIRS}/ThirdParty/RTK_mmp/aarch64-none-linux-gnu/lib/librockchip_vpu.so.0
)
endif()
#usb库
if(${LIB_USB} STREQUAL "VERSION_SWITCH_ON")
add_definitions(-DMACRO_USB_MODULE) #加载usb模块
message("USB库已加载\n")
include_directories(${ROOT_DIRS}/ThirdParty/libusb/aarch64-none-linux-gnu/include)
target_link_libraries(
${PROJECT_NAME}
${ROOT_DIRS}/ThirdParty/libusb/aarch64-none-linux-gnu/lib/libusb-1.0.so.0.4.0
)
message("udev库已加载\n")
include_directories(${ROOT_DIRS}/ThirdParty/udev/aarch64-none-linux-gnu/include)
target_link_libraries(
${PROJECT_NAME}
${ROOT_DIRS}/ThirdParty/udev/aarch64-none-linux-gnu/lib/libudev.so.1.6.3
)
endif()
\ No newline at end of file
... ...
# SubsidiaryThirdPartyConfig.cmake 附属第三方库配置文件
set(IFLAY_TTS_MODULE VERSION_SWITCH_OFF)
set(ESPEAK_TTS_MODULE VERSION_SWITCH_OFF)
set(ALSALIB_MODULE VERSION_SWITCH_OFF)
set(OPUS_MODULE VERSION_SWITCH_OFF)
set(LIB_RTK_MMP VERSION_SWITCH_OFF)
set(LIB_USB VERSION_SWITCH_OFF)
add_definitions(-D COMPILE_MODE_MODULE) #设置代码为编译模式
if(${MEGAPHONE_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n喊话器模块已加载")
add_definitions(-DMACRO_MEGAPHONE_MODULE) #加载喊话器模块
message("加载讯飞TTS模块")
set(IFLAY_TTS_MODULE VERSION_SWITCH_ON)
message("加载espeak模块")
set(ESPEAK_TTS_MODULE VERSION_SWITCH_ON)
message("加载alsalib模块")
set(ALSALIB_MODULE VERSION_SWITCH_ON)
message("加载OPUS模块")
set(OPUS_MODULE VERSION_SWITCH_ON)
endif()
if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("\n红外相机模块已加载")
add_definitions(-DMACRO_IRC_MODULE)
message("加载RTK模块")
set(LIB_RTK_MMP VERSION_SWITCH_ON)
message("加载USB模块")
set(LIB_USB VERSION_SWITCH_ON)
message("\n媒体管理模块已加载")
add_definitions(-DMACRO_MEDIA_PROC_MODULE)
endif()
if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON")
message("加载侧面激光模块")
add_definitions(-DMACRO_SIDE_LASER_MODULE)
endif()
message("附属库已加载\n")
\ No newline at end of file
... ...
#include <stdio.h>
#include "JZsdkLib.h"
#include "./JZsdk_TaskManagement/TaskManagement.h"
//初始化sdk
T_JZsdkReturnCode JZsdk_LibInit()
{
//1、初始化log
JZsdk_LoggerInit();
//2、任务管理系统初始化
TaskManagement_Init();
JZSDK_LOG_INFO("Lib加载已完成");
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdkLib.h
* JZsdk的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDKLIB_H
#define JZSDKLIB_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "JZsdk_Base/JZsdkBase.h"
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "JZsdk_CommonFuntion/JZsdkCommonFuntion.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_LibInit();
#ifdef __cplusplus
}
#endif
#endif
/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
... ...
/**
********************************************************************
* @file JZsdkBase.h
* JZsdk基础部件的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDKBASE_H
#define JZSDKBASE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "JZsdk_Logger/JZsdk_Logger.h"
#include "JZsdk_Osal/JZsdk_FileSystm.h"
#include "JZsdk_Delay/JZsdk_Delay.h"
#include "JZsdk_Code/JZsdk_FLagCode.h"
#include "JZsdk_Osal/JZsdk_MemoryAdapter.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file JZsdk_Code.h
* 用于记录各类码的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_CODE_H
#define JZSDK_CODE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "./JZsdk_InsCode.h"
#include "./JZsdk_FLagCode.h"
#include "./JZsdk_ReturnCode.h"
#include "./JZsdk_FileType.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file JZsdk_ErrorCode.h
* 用于错误码的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_ERRORCODE_H
#define JZSDK_ERRORCODE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
typedef enum {
JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS = 0x0000,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE = 0x0001,
JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER = 0x0002, //文件指针错误
} JZ_SYSTEM_Code;
typedef enum {
JZ_ERROR_SYSTEM_FRAME_ERROR = 0x0100,
} JZ_Syetem_frame_ErrorCode;
typedef enum {
JZ_ERRORCODE_MUSIC_NOT_FOUND_IN_LIST = 0x1000
} JZ_Megaphone_music_ErrorCode;
typedef enum {
JZ_ERRORCODE_REALTIMEVOICE_HAS_BEEN_ON = 0x1201
} JZ_Megaphone_opus_ErrorCode;
typedef enum {
JZ_ERRORCODE_TTS_INVALID_TONE = 0x1300,
JZ_ERRORCODE_TTS_INVALID_SPEED = 0x1301,
JZ_ERRORCODE_TTS_INVALID_ADDTONE = 0x1302,
} JZ_Megaphone_TTS_ErrorCode;
typedef enum {
JZ_ERRORCODE_GIMBAL_INVALID_PITCH = 0x4000,
JZ_ERRORCODE_GIMBAL_INVALID_YAW = 0x4001,
JZ_ERRORCODE_GIMBAL_INVALID_ROLL = 0x4002,
} JZ_Gimbal_ErrorCode;
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file JZsdk_FLagCode.h
* 用于标识码的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FLAGCODE_H
#define JZSDK_FLAGCODE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef enum JZ_Flag_Code{
JZ_FLAGCODE_OFF = 0x0000,
JZ_FLAGCODE_ON = 0x0001,
JZ_FLAGCODE_GET = 0x0010, //获取指令
JZ_FLAGCODE_SET = 0x0011, //设置指令
JZ_FLAGCODE_NORMAL = 0x00FF, //默认模式
} JZ_Flag_Code;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file JZsdk_FileType.h
* 用于记录文件类型的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FILE_TYPE_H
#define JZSDK_FILE_TYPE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
typedef enum {
AUDIO_TYPE_WAV = 0x00000001,
AUDIO_TYPE_MP3 = 0x00000002,
AUDIO_TYPE_OPUS = 0x00000003,
AUDIO_TYPE_PCM = 0x00000004,
} JZ_AUDIO_FILE_TYPE;
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file JZsdk_InsCode.h
* 用于错误码的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_INSCODE_H
#define JZSDK_INSCODE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef enum {
//5A类帧
JZ_INSCODE_5AFRAME_FRAME = 0x10000000, //接收类帧
JZ_INSCODE_5AFRAME_ASKFORCONNECT = 0x10000100, //申请连接
JZ_INSCODE_5AFRAME_HEARTBEAT = 0x10000101, //心跳帧
JZ_INSCODE_5AFRAME_TIMESTAMP = 0x10000102, //时间戳帧
JZ_INSCODE_5AFRAME_ALL_VERSION = 0x10000103, //全版本查询
JZ_INSCODE_5AFRAME_ALL_SERIAL_NUMBER = 0x10000104, //全序列号查询
JZ_INSCODE_5AFRAME_LOG_MESSAGE_PRINTF = 0x10000105, //log信息打印
JZ_INSCODE_5AFRAME_DEVICE_MESSAGE = 0x10000106, //设备信息
JZ_INSCODE_5AFRAME_FRAME_POWER_STATUS = 0x10000110, //电源状态设置
JZ_INSCODE_5AFRAME_REALTIMEMP2_START = 0x10000200, //开启实时MP2
JZ_INSCODE_5AFRAME_REALTIMEMP2_UNLIMIT_TRANSMISSION = 0x10000201, //无限制传输实时MP2
JZ_INSCODE_5AFRAME_REALTIMEMP2_STOP = 0x10000202, //结束实时MP2
JZ_INSCODE_5AFRAME_REALTIMEMP2_LIMIT_TRANSMISSION = 0x10000203, //有限制传输MP2
JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_START = 0x10000300, //打开音频文件上传
JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_UNLIMIT_TRANSMISSION = 0x10000301, //无限制传输音频文件
JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP = 0x10000302, //关闭音频文件上传
JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_LIMIT_TRANSMISSION = 0x10000303, //定长传输音频文件
JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE = 0x10000400, //播放指定音频
JZ_INSCODE_5AFRAME_AUDIO_CONTINUE = 0x10000401, //音频继续播放
JZ_INSCODE_5AFRAME_AUDIO_PAUSE = 0x10000402, //音频暂停播放
JZ_INSCODE_5AFRAME_AUDIO_STOP = 0x10000403, //音频停止播放
JZ_INSCODE_5AFRAME_AUDIO_LASTSONG = 0x10000410, //音频上一曲
JZ_INSCODE_5AFRAME_AUDIO_NEXTSONG = 0x10000411, //音频下一曲
JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST = 0x10000420, //获取音频列表
JZ_INSCODE_5AFRAME_AMPLIFIER_STOP = 0x10000500, //强制关闭功放
JZ_INSCODE_5AFRAME_AMPLIFIER_OPEN = 0x10000501, //强制开启功放
JZ_INSCODE_5AFRAME_AMPLIFIER_AUTO = 0x10000502, //恢复自动功放
JZ_INSCODE_5AFRAME_VOLUME = 0x10000600, //调节音量
JZ_INSCODE_5AFRAME_CHECKSTATUS_VOLUME = 0x10000620, //查询音量
JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAY = 0x10000621, //查询播放状态
JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL = 0x10000622, //查询云台角度
JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING = 0x10000623, //查询云台微调角度
JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAYFILENAME = 0x10000624, //查询播放文件名
JZ_INSCODE_5AFRAME_CHECKSTATUS_SOFTWAREVERSION = 0x10000625, //查询软件版本号
JZ_INSCODE_5AFRAME_CHECKSTATUS_LOOPPLAY = 0x10000626, //查询是否打开循环
JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSTONE = 0x10000627, //查询音色
JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSSPEED = 0x10000628, //查询语速
JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE = 0x10000629, //查询探照灯 灯3个属性
JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN = 0x10000630, //查询探照灯流明
JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY = 0x10000631, //查询探照灯频率
JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_MODE = 0x10000632, //查询探照灯模式
JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE = 0x10000633, //查询探照灯温度
JZ_INSCODE_5AFRAME_CHECKSTATUS_LASER_STATUS = 0x10000634, //查询激光状态
JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS = 0x10000635, //查询警灯状态
JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR = 0x10000636, //查询警灯颜色
JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER = 0x10000637, //查询序列号
JZ_INSCODE_5AFRAME_PLAY_LOOP = 0x10000690, //开启关闭循环
JZ_INSCODE_5AFRAME_DELETE_AUDIO = 0x10000700, //删除音频
JZ_INSCODE_5AFRAME_DELETE_VOICE_RECORD = 0x10000710, //删除录音
JZ_INSCODE_5AFRAME_DELETE_VIDEO_RECORD = 0x10000720, //删除视频
JZ_INSCODE_5AFRAME_TTS_SET_TONE = 0x10000801, //TTS设置音色
JZ_INSCODE_5AFRAME_TTS_SET_SPEED = 0x10000802, //TTS设置语速
JZ_INSCODE_5AFRAME_TTS_TRANS_START = 0x10000803, //TTS开始发送
JZ_INSCODE_5AFRAME_TTS_TRANS_UNLIMIT_TRANSMISSION = 0x10000804, //TTS正在无限制接收
JZ_INSCODE_5AFRAME_TTS_TRANS_STOP = 0x10000805, //TTS发送完毕
JZ_INSCODE_5AFRAME_TTS_TRANS_LIMIT_TRANSMISSION = 0x10000806, //TTS正在定长接收
JZ_INSCODE_5AFRAME_OPUS_TRANS_START = 0x10000900, //opus传输开始
JZ_INSCODE_5AFRAME_OPUS_TRAN_UNLIMIT_TRANSMISSION = 0x10000901, //opus 无限制传输中
JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION = 0x10000903, //opus传输中
JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP = 0x10000902, //opus传输结束
JZ_INSCODE_5AFRAME_OPUS_PLAY = 0x10000910, //opus播放
JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START = 0x10000A00, //开启opus实时语音
JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_UNLIMIT_TRANSMISSION = 0x10000A01, //无限制传输opus实时语音
JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_STOP = 0x10000A02, //结束opus实时语音
JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_LIMIT_TRANSMISSION = 0x10000A03, //定长传输opus实时语音
JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL = 0x10000B00, //云台俯仰控制
JZ_INSCODE_5AFRAME_GIMBAL_YAW_CONTROL = 0x10000B01, //云台朝向控制
JZ_INSCODE_5AFRAME_GIMBAL_ROLL_CONTROL = 0x10000B02, //云台旋转控制
JZ_INSCODE_5AFRAME_GIMBAL_PITCH_FINETUNING_CONTROL = 0x10000B04, //云台俯仰微调
JZ_INSCODE_5AFRAME_GIMBAL_YAW_FINETUNING_CONTROL = 0x10000B05, //云台朝向微调
JZ_INSCODE_5AFRAME_GIMBAL_ROLL_FINETUNING_CONTROL = 0x10000B06, //云台旋转微调
JZ_INSCODE_5AFRAME_LASER_CONTROL = 0x10000C00, //激光控制
JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL = 0x10000E00, //探照灯开光
JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN = 0x10000E10, //设置探照灯亮度
JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY = 0x10000E20, //设置把爆闪频率
JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL = 0x10000E21,//探照灯消息订阅控制
JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL = 0x10000F00, //警示灯模式控制
JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR = 0x10000F10, //警示灯颜色控制
JZ_INSCODE_5AFRAME_OUTPUTPOWER_CONTROL = 0x10001000, //对外供电开关
JZ_INSCODE_5AFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10001001, //对外供电查询
//5B类帧
JZ_INSCODE_5BFRAME_FRAME = 0x10004000, //发送帧
JZ_INSCODE_5BFRAME_INITIATECONNECT = 0x10004101, //主动连接
JZ_INSCODE_5BFRAME_HEARTBEAT = 0x10004102, //心跳帧回复
JZ_INSCODE_5BFRAME_TIMESTAMP = 0x10004103, //时间戳帧
JZ_INSCODE_5BFRAME_ALL_VERSION = 0x10004104, //全版本查询
JZ_INSCODE_5BFRAME_ALL_SERIAL_NUMBER = 0x10004105, //全序列号查询
JZ_INSCODE_5BFRAME_DEVICE_MESSAGE = 0x10004107, //设备信息
JZ_INSCODE_5BFRAME_SUCESS = 0x10004200, //操作成功
JZ_INSCODE_5BFRAME_DEFEAT = 0x10004201, //操作失败
JZ_INSCODE_5BFRAME_MUSICLIST_START = 0x10004300, //开启发送音乐列表帧
JZ_INSCODE_5BFRAME_MUSICLIST_TRANS = 0x10004301, //发送音乐列表帧
JZ_INSCODE_5BFRAME_MUSICLIST_STOP = 0x10004302, //结束发送音乐列表帧
JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS = 0x10004310, //音频播放状态返回帧
JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END = 0x10004311, //音频播放状态结束帧
JZ_INSCODE_5BFRAME_VOLUME = 0x10004400, //音量返回帧
JZ_INSCODE_5BFRAME_AUDIO_PLAYLOOPSTATUS = 0x10004401, //发送音频循环播放状态
JZ_INSCODE_5BFRAME_TTS_TONE = 0x10004402, //发送tts音色
JZ_INSCODE_5BFRAME_TTS_SPEED = 0x10004403, //发送tts语速
JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME = 0x10004404, //当前播放的音频名字
JZ_INSCODE_5BFRAME_GIMBAL_PITCH = 0x10004500, //云台俯仰角度
JZ_INSCODE_5BFRAME_GIMBAL_YAW = 0x10004501, //云台航向角度
JZ_INSCODE_5BFRAME_GIMBAL_ROLL = 0x10004502, //
JZ_INSCODE_5BFRAME_GIMBAL_PITCH_FINETUNING = 0x10004510, //云台俯仰微调值
JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE = 0x10004600, //查询探照灯温度
JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS = 0x10004601, //查询激光状态
JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY = 0x10004602, //查询探照灯频率
JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_MODE = 0x10004603, //查询探照灯模式
JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN = 0x10004604, //查询探照灯流明
JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS = 0x10004700, //警示灯模式控制
JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR = 0x10004701, //警示灯颜色控制
JZ_INSCODE_5BFRAME_SORTWAREVERSION = 0x10004800, //发送软件版本号
JZ_INSCODE_5BFRAME_HARDWAREVERSION = 0x10004801, //发送硬件版本号
JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER = 0x10004802, //回复序列号
JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER = 0x10004900, //对外供电查询
JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS = 0x10005000, //opus解码状态
//6A类
JZ_INSCODE_6AFRAME_FRAME = 0x10008000, //发送帧
JZ_INSCODE_6AFRAME_SET_GIMBAL_ORIGIN = 0x10008101, //设置坐标0值
JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE = 0x10008102, //设置云台范围最大最小值
JZ_INSCODE_6AFRAME_SET_LUMEN_MAXMIN_RANGE = 0x10008103, //设置灯光范围最大最小值
JZ_INSCODE_6AFRAME_SET_SERIALNUMBER = 0x10008104, //设置序列号
JZ_INSCODE_6AFRAME_SERVO_SELFCHECK = 0x10008105, //舵机自检
JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL = 0x10008106, //开关云台联动
JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME = 0x10008400, //查询从设备设备名
JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE = 0x10008401, //查询云台联动
JZ_INSCODE_6AFRAME_UART_BITRATE_CHANGE = 0x10008500, //串口比特率修改
JZ_INSCODE_6AFRAME_SPECIAL_PARAMETERS = 0x10008510, //设置特殊参数
JZ_INSCODE_6AFRAME_CHECK_SPECIAL_PARAMETERS = 0x10008511, //查询特殊参数
//6B类
JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME = 0x1000C400, //回复从设备名
JZ_INSCODE_6BFRAME_CHECKSTATUS_GIMBAL_LINKAGE = 0x1000C401, //回复云台联动
JZ_INSCODE_6BFRAME_CHECK_SPECIAL_PARAMETERS = 0x1000C511, //回复特殊参数
} JZ_InsCode;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "./JZsdk_Code.h"
//获取返回码的信息
const char* JZsdk_GetReturnCodeMessage(T_JZsdkReturnCode ReturnCode)
{
switch (ReturnCode) {
case JZ_ERRORCODE_REALTIMEVOICE_HAS_BEEN_ON:
return "实时语音被开启,该操作失败";
default:
return "未知错误:Unknown error.";
}
}
... ...
/**
********************************************************************
* @file JZsdk_ReturnCode.h
* 用于记录各类码的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_RETURNCODE_H
#define JZSDK_RETURNCODE_H
/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include "JZsdk_ErrorCode.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
//重定义一个返回码
typedef uint64_t T_JZsdkReturnCode;
typedef uint8_t U8_t;
typedef uint16_t U16_t;
typedef uint32_t U32_t;
typedef uint64_t U64_t;
// typedef unsigned long T_JZsdkReturnCode;
// typedef unsigned char U8_t;
// typedef unsigned short U16_t;
// typedef unsigned int U32_t;
// typedef unsigned long U64_t;
typedef double F64_t;
typedef float F32_t;
/* Exported functions --------------------------------------------------------*/
const char* JZsdk_GetReturnCodeMessage(T_JZsdkReturnCode ReturnCode);
#ifdef __cplusplus
}
#endif
#endif
... ...
/**
********************************************************************
* @file JZsdk_SMT_Code.h
* 用于序列号管理的表
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_SMT_CODE_H
#define JZSDK_SMT_CODE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef enum
{
// 设备序列号类型
UNDEFINED_SNM = 0x0000, //未定义类型序列号
STANDARD_DJI_SNM = 0x0001, // 大疆转接环序列号类型
STANDARD_JZ_1_SNM = 0x0002, // JZ-1型序列号
STANDARD_JZ_2_SNM = 0x0003, // JZ-2型序列号 2023.12.14 制定
} JZSDK_SNM_TPYE;
typedef enum
{
// 设备激活码状态 0 未存在序列号 1 旧版序列号 2新版序列号未激活 3新版序列号已激活
SNM_NOT_EXISTS = 0x0000, // (未存在序列号)
SNM_HAVE_ACTIVATED = 0x0001, // 已激活
SNM_NOT_ACTIVATED = 0x0002, // 未激活
SNM_ERROR_ACTIVATED = 0x0003, //激活错误状态
} JZSDK_SNM_STATUS;
typedef enum
{
STANDARD_DJI_SNM_LENGTH = 14, //dji序列号默认长度14
STANDARD_JZ_1_SUM_LENGTH = 14, //极至标准1长度太多种拉 喊话器最长是14
STANDARD_JZ_2_SUM_LENGTH = 16, //极至标准2 16长度
}JZSDK_SNM_STANDARD_LENGTH;
typedef enum
{
STANDARD_JZ_2_CN = 0x0001, //极至标准2通用码
STANDARD_JZ_2_EN = 0x0002, //极至标准2海外码
}JZSDK_FIREWARM_CODE;
typedef enum
{
STANDARD_JZ_2_F1 = 0x0001, //通用版本固件
}JZSKD_SPECIAL_VERSION;
#ifdef __cplusplus
}
#endif
#endif
\ No newline at end of file
... ...
#include <stdio.h>
#include "JZsdk_Delay.h"
#include <unistd.h>
/*
* 用于延时(粗略)
* 需要优化
*/
int delayUs(unsigned long msec)
{
usleep(msec);
}
/*
* 用于延时(粗略)
* 需要优化
*/
int delayMs(unsigned long msec)
{
usleep(msec * 1000);
}
/*
* 用于延时(粗略)
* 需要优化
*/
int delayS(unsigned long sec)
{
delayMs(sec * 1000);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdk_FileSystem.h
* 用于文件系统操作
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_DELAY_H
#define JZSDK_DELAY_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int delayMs(unsigned long msec);
int delayS(unsigned long sec);
int delayUs(unsigned long msec);
#ifdef __cplusplus
}
#endif
#endif
/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
... ...
#include <stdio.h>
#include "./JZsdk_FrameComparsion.h"
#include "../JZsdk_Code/JZsdk_Code.h"
/*************************
*
* 获取帧的序列号
*
* ***************************/
int JZsdk_Get_FrameSequence(char *DealBuf)
{
return DealBuf[6];
}
/***************************
* 、
*
* 帧校对 获取功能
*
*
* ***********************/
int JZsdk_FrameComparsion(char *getdata, int len)
{
//1、判断是否是5A帧
if (getdata[0] == 0x5A && getdata[1] == 0x5A && getdata[2] == 0x77)
{
printf("JZsdk_FrameComparsion:5A帧\n");
return JZsdk_5AFrameComparsion(getdata, len);
}
//2、判断是否是5B帧
if (getdata[0] == 0x5b && getdata[1] == 0x5b && getdata[2] == 0x77)
{
printf("JZsdk_FrameComparsion:5B帧\n");
return JZsdk_5BFrameComparsion(getdata, len);
}
//3、判断是否是6A帧
if (getdata[0] == 0x6A && getdata[1] == 0x6A && getdata[2] == 0x77)
{
printf("JZsdk_FrameComparsion:6A帧\n");
return JZsdk_6AFrameComparsion(getdata, len);
}
//4、判断是否是6B帧
if (getdata[0] == 0x6b && getdata[1] == 0x6b && getdata[2] == 0x77)
{
printf("JZsdk_FrameComparsion:6B帧\n");
return JZsdk_6BFrameComparsion(getdata, len);
}
printf("接受到的帧,没有帧头或者帧尾,退出recv帧判断函数\n");
return JZ_ERROR_SYSTEM_FRAME_ERROR;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdk_FrameComparsion.h
* 用于帧对比的头文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FRAMECOMPARSION_H
#define JZSDK_FRAMECOMPARSION_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#include "JZsdk_FrameComparsion_5Aframe.h"
#include "JZsdk_FrameComparsion_5Bframe.h"
#include "JZsdk_FrameComparsion_6Aframe.h"
#include "JZsdk_FrameComparsion_6Bframe.h"
#include "JZsdk_GetFrameTemplate.h"
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_Get_FrameSequence(char *DealBuf);
int JZsdk_FrameComparsion(char *getdata, int len);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdio.h>
#include "../JZsdk_Code/JZsdk_Code.h"
/******************************************************
接收一级功能码区
/******************************************************/
//一级功能码是连接功能
static int Comparison_5AFRAME_FirstLevelCode_0x50(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//开启连接
case 0x51:
return JZ_INSCODE_5AFRAME_ASKFORCONNECT;
break;
//设备电源状态
case 0x52:
return JZ_INSCODE_5AFRAME_FRAME_POWER_STATUS;
break;
//心跳帧
case 0x53:
return JZ_INSCODE_5AFRAME_HEARTBEAT;
break;
//时间戳帧
case 0x54:
return JZ_INSCODE_5AFRAME_TIMESTAMP;
break;
//所有版本号帧
case 0x55:
return JZ_INSCODE_5AFRAME_ALL_VERSION;
break;
//所有序列号帧
case 0x56:
return JZ_INSCODE_5AFRAME_ALL_SERIAL_NUMBER;
break;
//log信息打印
case 0x57:
return JZ_INSCODE_5AFRAME_LOG_MESSAGE_PRINTF;
break;
//获取设备信息帧
case 0x58:
return JZ_INSCODE_5AFRAME_DEVICE_MESSAGE;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是语音 或是 文件功能
static int Comparison_5AFRAME_FirstLevelCode_0x51(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//开启语音
case 0xb1:
return JZ_INSCODE_5AFRAME_REALTIMEMP2_START;
break;
//结束语音
case 0xb2:
return JZ_INSCODE_5AFRAME_REALTIMEMP2_STOP;
break;
//有限制传输mp2语言
case 0xb3:
return JZ_INSCODE_5AFRAME_REALTIMEMP2_LIMIT_TRANSMISSION;
break;
//打开音频文件上传
case 0x01:
return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_START;
break;
//有限制传输音频文件
case 0x02:
return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_LIMIT_TRANSMISSION;
break;
//关闭音频文件上传
case 0x03:
return JZ_INSCODE_5AFRAME_AUDIOFILE_TRANS_STOP;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是音频/功放/音量调节
static int Comparison_5AFRAME_FirstLevelCode_0x52(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//播放指定音频
case 0x02:
return JZ_INSCODE_5AFRAME_AUDIO_PLAYFILE;
break;
//音频继续播放
case 0x04:
return JZ_INSCODE_5AFRAME_AUDIO_CONTINUE;
break;
//音频暂停播放
case 0x05:
return JZ_INSCODE_5AFRAME_AUDIO_PAUSE;
break;
//音频停止播放
case 0x06:
return JZ_INSCODE_5AFRAME_AUDIO_STOP;
break;
//音频上一曲
case 0x07:
return JZ_INSCODE_5AFRAME_AUDIO_LASTSONG;
break;
//音频下一曲
case 0x08:
return JZ_INSCODE_5AFRAME_AUDIO_NEXTSONG;
break;
//强制关闭功放
case 0x20:
return JZ_INSCODE_5AFRAME_AMPLIFIER_STOP;
break;
//强制开启功放
case 0x21:
return JZ_INSCODE_5AFRAME_AMPLIFIER_OPEN;
break;
//恢复自动功放
case 0x22:
return JZ_INSCODE_5AFRAME_AMPLIFIER_AUTO;
break;
//调节音量
case 0x10:
return JZ_INSCODE_5AFRAME_VOLUME;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是查询状态
static int Comparison_5AFRAME_FirstLevelCode_0x53(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//查询音量
case 0x01:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_VOLUME;
break;
//查询播放状态
case 0x02:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAY;
break;
//查询云台角度(已舍弃)
case 0x03:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL;
break;
//查询播放文件名
case 0x04:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_PLAYFILENAME;
break;
//查询是否打开循环
case 0x05:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_LOOPPLAY;
break;
//查询音色
case 0x06:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSTONE;
break;
//查询语速
case 0x07:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_TTSSPEED;
break;
//查询软件版本号
case 0xf1:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_SOFTWAREVERSION;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是删除
static int Comparison_5AFRAME_FirstLevelCode_0x54(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//删除音频
case 0x02:
return JZ_INSCODE_5AFRAME_DELETE_AUDIO;
break;
//删除录音
case 0x03:
return JZ_INSCODE_5AFRAME_DELETE_VOICE_RECORD;
break;
// //删除视频
// case 0x02:
// return JZ_INSCODE_DELETE_VIDEO_RECORD;
// break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码开启关闭循环
static int Comparison_5AFRAME_FirstLevelCode_0x55(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//开启关闭循环
case 0x00:
return JZ_INSCODE_5AFRAME_PLAY_LOOP;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码
static int Comparison_5AFRAME_FirstLevelCode_0x56(char *getdata)
{
//二级功能位
switch (getdata[8])
{
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是 文本播放
static int Comparison_5AFRAME_FirstLevelCode_0x57(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//设置音色
case 0x01:
return JZ_INSCODE_5AFRAME_TTS_SET_TONE;
break;
//设置语速
case 0x02:
return JZ_INSCODE_5AFRAME_TTS_SET_SPEED;
break;
//开始发送TTS
case 0x03:
return JZ_INSCODE_5AFRAME_TTS_TRANS_START;
break;
case 0x04:
return JZ_INSCODE_5AFRAME_TTS_TRANS_STOP;
break;
//定长传输文本
case 0x05:
return JZ_INSCODE_5AFRAME_TTS_TRANS_LIMIT_TRANSMISSION;
break;
default:
break;
}
}
//一级功能 查询列表
static int Comparison_5AFRAME_FirstLevelCode_0x58(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//设置音色
case 0x01:
return JZ_INSCODE_5AFRAME_AUDIO_GETMUSICLIST;
break;
default:
break;
}
}
//一级功能码opus功能
static int Comparison_5AFRAME_FirstLevelCode_0x59(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//opus录音传输
//opus传输开始
case 0xF1:
return JZ_INSCODE_5AFRAME_OPUS_TRANS_START;
break;
//opus传输结束
case 0xF2:
return JZ_INSCODE_5AFRAME_OPUS_TRANS_STOP;
break;
//opus定长传输
case 0xF3:
return JZ_INSCODE_5AFRAME_OPUS_TRANS_LIMIT_TRANSMISSION;
break;
//opus播放
case 0x01:
return JZ_INSCODE_5AFRAME_OPUS_PLAY;
break;
//opus实时语音开始
case 0xE1:
return JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START;
break;
case 0xE2:
return JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_STOP;
break;
//opus定长传输文件
case 0xE3:
return JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_LIMIT_TRANSMISSION;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码,硬件引脚控制
static int Comparison_5AFRAME_FirstLevelCode_0x5A(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//对外供电开关
case 0x01:
return JZ_INSCODE_5AFRAME_OUTPUTPOWER_CONTROL;
break;
//对外供电查询
case 0x02:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_OUTPUTPOWER;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 激光控制
static int Comparison_5AFRAME_FirstLevelCode_0x60(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//激光控制
case 0x51:
return JZ_INSCODE_5AFRAME_LASER_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 爆闪频率
static int Comparison_5AFRAME_FirstLevelCode_0x61(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//爆闪频率
case 0x51:
return JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 灯光控制
static int Comparison_5AFRAME_FirstLevelCode_0x62(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//灯光模式
case 0x51:
return JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 灯光亮度
static int Comparison_5AFRAME_FirstLevelCode_0x63(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//灯光亮度
case 0x51:
return JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码云台功能
static int Comparison_5AFRAME_FirstLevelCode_0x64(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//云台俯仰控制
case 0x51:
return JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL;
break;
//云台俯仰微调控制
case 0x52:
return JZ_INSCODE_5AFRAME_GIMBAL_PITCH_FINETUNING_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 云台航向
static int Comparison_5AFRAME_FirstLevelCode_0x65(char *getdata)
{
}
//一级功能码 警灯模式控制
static int Comparison_5AFRAME_FirstLevelCode_0x66(char *getdata)
{
switch (getdata[8])
{
//警灯模式控制
case 0x51:
return JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 警灯眼色选择
static int Comparison_5AFRAME_FirstLevelCode_0x67(char *getdata)
{
switch (getdata[8])
{
//警灯颜色选择
case 0x51:
return JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 探照灯消息订阅
static int Comparison_5AFRAME_FirstLevelCode_0x68(char *getdata)
{
switch (getdata[8])
{
//探照灯消息订阅
case 0x51:
return JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码 私有协议
static int Comparison_5AFRAME_FirstLevelCode_0x69(char *getdata)
{
}
//一级功能码 6F查询帧
static int Comparison_5AFRAME_FirstLevelCode_0x6F(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//灯光查询
case 0x51:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE;
break;
//温度查询
case 0x52:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE;
break;
//激光查询
case 0x53:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
//云台角度查询
case 0x54:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL;
break;
//警灯状态查询
case 0x55:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS;
break;
//警灯颜色查询
case 0x56:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR;
break;
//产品序列号查询
case 0x57:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER;
break;
//云台微调值查询
case 0x58:
return JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
/******************************************************************
回复帧对比
成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
******************************************************************/
int JZsdk_5AFrameComparsion(char *getdata, int len)
{
//1、判断帧头帧尾
if (
( (getdata[0]!= 0x5a) && (getdata[1] != 0x5a) && (getdata[2]!=0x77) )
|| ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
)
{
printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_5AFrameComparsion函数\n");
return JZ_ERROR_SYSTEM_FRAME_ERROR;
}
//一级功能码
switch (getdata[7])
{
/*********************************************************************************************************************************************************
*
* 连接请求码
*
*********************************************************************************************************************************************************/
//一级功能码是连接请求
case 0x50:
return Comparison_5AFRAME_FirstLevelCode_0x50(getdata);
break;
/*********************************************************************************************************************************************************
*
* 喊话器功能码
*
*********************************************************************************************************************************************************/
//一级功能码 语音 / 音频文件功能
case 0x51:
return Comparison_5AFRAME_FirstLevelCode_0x51(getdata);
break;
//一级功能码 音频/ 功放/ 音量调节
case 0x52:
return Comparison_5AFRAME_FirstLevelCode_0x52(getdata);
break;
//一级功能码 查询状态
case 0x53:
return Comparison_5AFRAME_FirstLevelCode_0x53(getdata);
break;
//一级功能码 删除
case 0x54:
return Comparison_5AFRAME_FirstLevelCode_0x54(getdata);
break;
//一级功能码 开启关闭循环
case 0x55:
return Comparison_5AFRAME_FirstLevelCode_0x55(getdata);
break;
//一级功能码
case 0x56:
return Comparison_5AFRAME_FirstLevelCode_0x56(getdata);
break;
//一级功能码 TTS
case 0x57:
return Comparison_5AFRAME_FirstLevelCode_0x57(getdata);
break;
//一级功能码 查询列表功能
case 0x58:
return Comparison_5AFRAME_FirstLevelCode_0x58(getdata);
break;
//一级功能码 opus
case 0x59:
return Comparison_5AFRAME_FirstLevelCode_0x59(getdata);
break;
//一级功能码,硬件引脚控制
case 0x5A:
return Comparison_5AFRAME_FirstLevelCode_0x5A(getdata);
break;
//一级功能码 激光控制
case 0x60:
return Comparison_5AFRAME_FirstLevelCode_0x60(getdata);
break;
//一级功能码 爆闪控制
case 0x61:
return Comparison_5AFRAME_FirstLevelCode_0x61(getdata);
break;
//一级功能码 灯光控制
case 0x62:
return Comparison_5AFRAME_FirstLevelCode_0x62(getdata);
break;
//一级功能码 灯光亮度
case 0x63:
return Comparison_5AFRAME_FirstLevelCode_0x63(getdata);
break;
//一级功能码 云台俯仰
case 0x64:
return Comparison_5AFRAME_FirstLevelCode_0x64(getdata);
break;
//一级功能码 云台航向
case 0x65:
return Comparison_5AFRAME_FirstLevelCode_0x65(getdata);
break;
//一级功能码 警灯模式控制
case 0x66:
return Comparison_5AFRAME_FirstLevelCode_0x66(getdata);
break;
//一级功能码 警灯眼色选择
case 0x67:
return Comparison_5AFRAME_FirstLevelCode_0x67(getdata);
break;
//一级功能码 探照灯消息订阅
case 0x68:
return Comparison_5AFRAME_FirstLevelCode_0x68(getdata);
break;
//一级功能码 私有协议
case 0x69:
return Comparison_5AFRAME_FirstLevelCode_0x69(getdata);
break;
//一级功能码 6f查询帧
case 0x6F:
return Comparison_5AFRAME_FirstLevelCode_0x6F(getdata);
break;
break;
//一级功能码
/*********************************************************************************************************************************************************
*
*
*
*********************************************************************************************************************************************************/
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
... ...
/**********************************************************************
* @file
*
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FRAMECOMPARSION_5AFRAME_H
#define JZSDK_FRAMECOMPARSION_5AFRAME_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_5AFrameComparsion(char *getdata, int len);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdio.h>
#include "../JZsdk_Code/JZsdk_Code.h"
/******************************************************
接收一级功能码区
/******************************************************/
//一级功能码是连接功能
static int Comparison_5BFRAME_FirstLevelCode_0x50(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复连接
case 0x51:
return JZ_INSCODE_5BFRAME_INITIATECONNECT;
break;
//心跳帧回复
case 0x53:
return JZ_INSCODE_5BFRAME_HEARTBEAT;
break;
//时间戳回复
case 0x54:
return JZ_INSCODE_5BFRAME_TIMESTAMP;
break;
//版本号回复
case 0x55:
return JZ_INSCODE_5BFRAME_ALL_VERSION;
break;
//序列号回复
case 0x56:
return JZ_INSCODE_5BFRAME_ALL_SERIAL_NUMBER;
break;
//log信息打印
case 0x58:
return JZ_INSCODE_5BFRAME_DEVICE_MESSAGE;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是操作功能
static int Comparison_5BFRAME_FirstLevelCode_0x51(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复操作成功
case 0x01:
return JZ_INSCODE_5BFRAME_SUCESS;
break;
//回复操作失败
case 0xff:
return JZ_INSCODE_5BFRAME_DEFEAT;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是音频列表功能
static int Comparison_5BFRAME_FirstLevelCode_0x53(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//音量返回
case 0x01:
return JZ_INSCODE_5BFRAME_VOLUME;
break;
//播放状态返回
case 0x02:
return JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS;
break;
//当前播放文件名返回
case 0x04:
return JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME;
break;
//查询是否开启循环
case 0x05:
return JZ_INSCODE_5BFRAME_AUDIO_PLAYLOOPSTATUS;
break;
//查询音色
case 0x06:
return JZ_INSCODE_5BFRAME_TTS_TONE;
break;
//查询语速
case 0x07:
return JZ_INSCODE_5BFRAME_TTS_SPEED;
break;
//版本返回
case 0xf1:
return JZ_INSCODE_5BFRAME_SORTWAREVERSION;
break;
//播放结束(主动返回)
case 0xff:
return JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是音频列表功能
static int Comparison_5BFRAME_FirstLevelCode_0x58(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//查询列表开始
case 0x00:
return JZ_INSCODE_5BFRAME_MUSICLIST_START;
break;
//文件列表帧
case 0x02:
return JZ_INSCODE_5BFRAME_MUSICLIST_TRANS;
break;
//结束列表返回
case 0xff:
return JZ_INSCODE_5BFRAME_MUSICLIST_STOP;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是opus功能
static int Comparison_5BFRAME_FirstLevelCode_0x59(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//opus解码状态
case 0xF2:
return JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是硬件引脚控制
static int Comparison_5BFRAME_FirstLevelCode_0x5A(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复对供电开关状态返回
case 0x02:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是激光
static int Comparison_5BFRAME_FirstLevelCode_0x60(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复激光查询
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_LASER_STATUS;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是回复灯光频率
static int Comparison_5BFRAME_FirstLevelCode_0x61(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复灯光频率
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是回复灯光模式
static int Comparison_5BFRAME_FirstLevelCode_0x62(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复灯光模式
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_MODE;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是回复灯光亮度
static int Comparison_5BFRAME_FirstLevelCode_0x63(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复灯光亮度
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是云台俯仰
static int Comparison_5BFRAME_FirstLevelCode_0x64(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复云台俯仰
case 0x51:
return JZ_INSCODE_5BFRAME_GIMBAL_PITCH;
break;
//回复云台俯仰微调值
case 0x52:
return JZ_INSCODE_5BFRAME_GIMBAL_PITCH_FINETUNING;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是云台航向
static int Comparison_5BFRAME_FirstLevelCode_0x65(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复云台航向
case 0x51:
return JZ_INSCODE_5BFRAME_GIMBAL_YAW;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是回复警灯状态
static int Comparison_5BFRAME_FirstLevelCode_0x66(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复警灯状态
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}//一级功能码是回复警灯颜色
static int Comparison_5BFRAME_FirstLevelCode_0x67(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复回复警灯颜色
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}//一级功能码是回复温度/序列号查询
static int Comparison_5BFRAME_FirstLevelCode_0x69(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//回复温度查询
case 0x51:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE;
break;
//回复产品序列号
case 0x54:
return JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
/******************************************************************
回复帧对比
成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
******************************************************************/
int JZsdk_5BFrameComparsion(char *getdata, int len)
{
//1、判断帧头帧尾
if (
( (getdata[0]!= 0x5B) && (getdata[1] != 0x5B) && (getdata[2]!=0x77) )
|| ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
)
{
printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_5BFrameComparsion函数\n");
return JZ_ERROR_SYSTEM_FRAME_ERROR;
}
//一级功能码
switch (getdata[7])
{
case 0x50:
return Comparison_5BFRAME_FirstLevelCode_0x50(getdata);
break;
case 0x51:
return Comparison_5BFRAME_FirstLevelCode_0x51(getdata);
break;
case 0x53:
return Comparison_5BFRAME_FirstLevelCode_0x53(getdata);
break;
case 0x58:
return Comparison_5BFRAME_FirstLevelCode_0x58(getdata);
break;
case 0x59:
return Comparison_5BFRAME_FirstLevelCode_0x58(getdata);
break;
case 0x5A:
return Comparison_5BFRAME_FirstLevelCode_0x5A(getdata);
break;
case 0x60:
return Comparison_5BFRAME_FirstLevelCode_0x60(getdata);
break;
case 0x61:
return Comparison_5BFRAME_FirstLevelCode_0x61(getdata);
break;
case 0x62:
return Comparison_5BFRAME_FirstLevelCode_0x62(getdata);
break;
case 0x63:
return Comparison_5BFRAME_FirstLevelCode_0x63(getdata);
break;
case 0x64:
return Comparison_5BFRAME_FirstLevelCode_0x64(getdata);
break;
case 0x65:
return Comparison_5BFRAME_FirstLevelCode_0x65(getdata);
break;
case 0x66:
return Comparison_5BFRAME_FirstLevelCode_0x66(getdata);
break;
case 0x67:
return Comparison_5BFRAME_FirstLevelCode_0x67(getdata);
break;
case 0x69:
return Comparison_5BFRAME_FirstLevelCode_0x69(getdata);
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file
*
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FRAMECOMPARSION_5BFRAME_H
#define JZSDK_FRAMECOMPARSION_5BFRAME_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_5BFrameComparsion(char *getdata, int len);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdio.h>
#include "../JZsdk_Code/JZsdk_Code.h"
//一级功能码是私有协议
static int Comparison_6AFRAME_FirstLevelCode_0x69(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//设置当前为云台零值
case 0x51:
return JZ_INSCODE_6AFRAME_SET_GIMBAL_ORIGIN;
break;
//设置云台当前为最大最小值
case 0x52:
return JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE;
break;
//设置灯光当前亮度为最大最小值
case 0x53:
return JZ_INSCODE_6AFRAME_SET_LUMEN_MAXMIN_RANGE;
break;
//设置产品序列号
case 0x54:
return JZ_INSCODE_6AFRAME_SET_SERIALNUMBER;
break;
//舵机自检
case 0x55:
return JZ_INSCODE_6AFRAME_SERVO_SELFCHECK;
break;
//开启关闭云台联动
case 0x56:
return JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
//一级功能码是私有协议
static int Comparison_6AFRAME_FirstLevelCode_0x6F(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//设置当前为云台零值
case 0x50:
return JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME;
break;
//设置当前为云台零值
case 0x51:
return JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE;
break;
//串口比特率修改
case 0x52:
return JZ_INSCODE_6AFRAME_UART_BITRATE_CHANGE;
break;
//设置特殊变量
case 0x53:
return JZ_INSCODE_6AFRAME_SPECIAL_PARAMETERS;
break;
//查询特殊变量
case 0x54:
return JZ_INSCODE_6AFRAME_CHECK_SPECIAL_PARAMETERS;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
/******************************************************************
回复帧对比
成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
******************************************************************/
int JZsdk_6AFrameComparsion(char *getdata, int len)
{
//1、判断帧头帧尾
if (
( (getdata[0]!= 0x6A) && (getdata[1] != 0x6A) && (getdata[2]!=0x77) )
|| ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
)
{
printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_6AFrameComparsion函数\n");
return JZ_ERROR_SYSTEM_FRAME_ERROR;
}
//一级功能码
switch (getdata[7])
{
case 0x69:
return Comparison_6AFRAME_FirstLevelCode_0x69(getdata);
break;
case 0x6F:
return Comparison_6AFRAME_FirstLevelCode_0x6F(getdata);
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file
*
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FRAMECOMPARSION_6AFRAME_H
#define JZSDK_FRAMECOMPARSION_6AFRAME_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_6AFrameComparsion(char *getdata, int len);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdio.h>
#include "../JZsdk_Code/JZsdk_Code.h"
//一级功能码是私有协议
static int Comparison_6BFRAME_FirstLevelCode_0x6F(char *getdata)
{
//二级功能位
switch (getdata[8])
{
//从设备名返回
case 0x50:
return JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME;
break;
//查询云台联动返回
case 0x51:
return JZ_INSCODE_6BFRAME_CHECKSTATUS_GIMBAL_LINKAGE;
break;
//查询特殊变量
case 0x54:
return JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME;
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
/******************************************************************
回复帧对比
成功返回帧类型 无对比数据返回 JZ_ERROR_SYSTEM_FRAME_ERROR
******************************************************************/
int JZsdk_6BFrameComparsion(char *getdata, int len)
{
//1、判断帧头帧尾
if (
( (getdata[0]!= 0x6B) && (getdata[1] != 0x6B) && (getdata[2]!=0x77) )
|| ( (getdata[len -2]!= 0x00) && (getdata[ len -1] != 0x23) )
)
{
printf("接受到的帧,没有帧头或者帧尾,退出JZsdk_6BFrameComparsion函数\n");
return JZ_ERROR_SYSTEM_FRAME_ERROR;
}
//一级功能码
switch (getdata[7])
{
case 0x6F:
return Comparison_6BFRAME_FirstLevelCode_0x6F(getdata);
break;
default:
return JZ_ERROR_SYSTEM_FRAME_ERROR;
break;
}
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file
*
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FRAMECOMPARSION_6BFRAME_H
#define JZSDK_FRAMECOMPARSION_6BFRAME_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_6BFrameComparsion(char *getdata, int len);
#ifdef __cplusplus
}
#endif
#endif
... ...
#include <stdio.h>
#include <string.h>
#include "../JZsdk_Code/JZsdk_Code.h"
/******************************************************
用于获取帧模板
/******************************************************/
int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
{
//printf("JZsdk_GetFrameTemplate:获取0x%x帧模板\n",InsCode); //该打印可能会对 要求快速控制的地方变慢,请不要随意开启
switch (InsCode)
{
/********************************************************************************************************************************************************
*
* 5A帧
*
********************************************************************************************************************************************************/
case JZ_INSCODE_5AFRAME_ASKFORCONNECT:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x51 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_FRAME_POWER_STATUS:
{
unsigned char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x52 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_HEARTBEAT:
{
unsigned char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x53 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_TIMESTAMP:
{
unsigned char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x50 ,0x54 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_AUDIO_STOP:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x06 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_AUDIO_LASTSONG:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x07 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_AUDIO_NEXTSONG:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x08 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_VOLUME:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x52 ,0x10 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_PLAY_LOOP:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x55 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_TTS_SET_TONE:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x57 ,0x01 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_TTS_TRANS_START:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x57 ,0x03 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_TTS_TRANS_STOP:
{
char sendbuf[12] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0C ,0x00 ,0x00 ,0x57 ,0x04 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_FREQUENCY:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x61 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_SEARCHLIGHT_CONTROL:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x62 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_SEARCHLIGHT_SET_LUMEN:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x63 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL:
{
char sendbuf[14] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0E ,0x00 ,0x00 ,0x64 ,0x51 ,0x00 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 14);
*str_len = 14;
}
break;
case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_FINETUNING_CONTROL:
{
char sendbuf[14] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0E ,0x00 ,0x00 ,0x64 ,0x52 ,0x00 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 14);
*str_len = 14;
}
break;
case JZ_INSCODE_5AFRAME_WARNINGLIGHT_CONTROL:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x66 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_WARNINGLIGHT_COLOUR:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x67 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_SEARCHLIGHT_MESSAGE_SUBSCRIPTION_CONTROL:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x68 ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_LIGHTATTRIBUTE:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x52 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x54 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x55 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x56 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_SERIALNUMBER:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x57 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5AFRAME_CHECKSTATUS_GIMBAL_FINETUNING:
{
char sendbuf[13] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x58 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
/********************************************************************************************************************************************************
*
* 5B帧
*
********************************************************************************************************************************************************/
case JZ_INSCODE_5BFRAME_INITIATECONNECT:
{
char sendbuf[12] = {0x5B ,0x5B ,0x77 ,0x00 ,0x0c ,0x00 ,0x00 ,0x50 ,0x51 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_HEARTBEAT:
{
char sendbuf[12] = {0x5B ,0x5B ,0x77 ,0x00 ,0x0c ,0x00 ,0x00 ,0x50 ,0x53 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_ALL_VERSION:
{
unsigned char sendbuf[16] = {0x5B ,0x5B ,0x77 ,0x00 ,0x10 ,0x00 ,0x00 ,0x50 ,0x55, 0x00, 0x00, 0x00, 0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 16);
*str_len = 16;
}
break;
case JZ_INSCODE_5BFRAME_ALL_SERIAL_NUMBER:
{
unsigned char sendbuf[13] = {0x5B ,0x5B ,0x77 ,0x00 ,0x10 ,0x00 ,0x00 ,0x50 ,0x56, 0x00, 0x00 , 0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_DEVICE_MESSAGE:
{
unsigned char sendbuf[12] = {0x5B ,0x5B ,0x77 ,0x00 ,0x0c ,0x00 ,0x00 ,0x50 ,0x58, 0x00 , 0x00 ,0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_SUCESS:
{
char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_DEFEAT:
{
char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x51, 0xff, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0xff, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x02, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_AUDIO_PLAYFILENAME:
{
char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x04, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_VOLUME:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_SORTWAREVERSION:
{
char sendbuf[15] = { 0x5b, 0x5b, 0x77, 0x00, 0x0f, 0x00, 0x00, 0x53, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 15);
*str_len = 15;
}
break;
case JZ_INSCODE_5BFRAME_AUDIO_PLAYLOOPSTATUS:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x05, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_TTS_TONE:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x06, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_TTS_SPEED:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x53, 0x07, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_MUSICLIST_START:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_MUSICLIST_TRANS:
{
char sendbuf[12] = {0x5B, 0x5B, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_MUSICLIST_STOP:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_OUTPUTPOWER:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0C, 0x00, 0x00, 0x5A, 0x02, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_FREQUENCY:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x61, 0x51, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_MODE:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x62, 0x51, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_LUMEN:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x63, 0x51, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_GIMBAL_PITCH:
{
char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0e, 0x00, 0x00, 0x64, 0x51, 0x00, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 14);
*str_len = 14;
}
break;
case JZ_INSCODE_5BFRAME_GIMBAL_PITCH_FINETUNING:
{
char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0e, 0x00, 0x00, 0x64, 0x52, 0x00, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 14);
*str_len = 14;
}
break;
case JZ_INSCODE_5BFRAME_GIMBAL_YAW:
{
char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0e, 0x00, 0x00, 0x65, 0x51, 0x00, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 14);
*str_len = 14;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_STATUS:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x66, 0x51, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_WARNINGLIGHT_COLOR:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x67, 0x51, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_SEARCHLIGHT_TEMPERATURE:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x69, 0x51, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_SERIALNUMBER:
{
char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x6F, 0x57, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
/********************************************************************************************************************************************************
*
* 6A帧
*
********************************************************************************************************************************************************/
case JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE:
{
char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x69 ,0x52 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL:
{
char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x69 ,0x56 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_6AFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME:
{
char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x50 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_6AFRAME_CHECKSTATUS_GIMBAL_LINKAGE:
{
char sendbuf[13] = {0x6A ,0x6A ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
/********************************************************************************************************************************************************
*
* 6B帧
*
********************************************************************************************************************************************************/
case JZ_INSCODE_6BFRAME_CHECKSTATUS_SECONDARY_DEVICE_NAME:
{
char sendbuf[13] = {0x6B ,0x6B ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x50 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_6BFRAME_CHECKSTATUS_GIMBAL_LINKAGE:
{
char sendbuf[13] = {0x6B ,0x6B ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x51 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
case JZ_INSCODE_6BFRAME_CHECK_SPECIAL_PARAMETERS:
{
char sendbuf[13] = {0x6B ,0x6B ,0x77 ,0x00 ,0x0D ,0x00 ,0x00 ,0x6F ,0x54 ,0x00 ,0x00 ,0x00 ,0x23};
memcpy(str, sendbuf, 13);
*str_len = 13;
}
break;
default:
printf("JZsdk_GetFrameTemplate:没有对应的帧模板\n");
break;
}
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file
*
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_GET_FRAME_TEMPLATE_H
#define JZSDK_GET_FRAME_TEMPLATE_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len);
#ifdef __cplusplus
}
#endif
#endif
... ...
/* 头文件 ------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include "JZsdk_Logger.h"
#include <time.h>
#include "JZsdkLib.h"
#include <pthread.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <sys/types.h>
#define LOG_GRADE JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO
// 定义全局互斥锁
static pthread_mutex_t LogWriteMutex = PTHREAD_MUTEX_INITIALIZER;
/* 全局变量 ------------------------------------------------------------------*/
static struct timeval g_start_time;
static FILE *logFile = NULL;
static char LogFileName[JZSDK_FILENAME_SIZE];
static int Logger_init_flag = JZ_FLAGCODE_OFF;
/* 函数声明 ------------------------------------------------------------------*/
long long get_total_ram() {
FILE *file;
char line[128];
long long total_ram = 0;
file = fopen("/proc/meminfo", "r");
if (!file) {
perror("Error opening /proc/meminfo");
return 0;
}
while (fgets(line, sizeof(line), file)) {
if (strncmp(line, "MemTotal:", 9) == 0) {
sscanf(line, "MemTotal: %lld kB", &total_ram);
break;
}
}
fclose(file);
return total_ram;
}
long long get_current_rss(pid_t pid) {
FILE *file;
char line[128];
long long vmrss = 0;
char path[64];
snprintf(path, sizeof(path), "/proc/%d/status", pid);
file = fopen(path, "r");
if (!file) {
perror("Error opening /proc/[pid]/status");
return 0;
}
while (fgets(line, sizeof(line), file)) {
if (strncmp(line, "VmRSS:", 6) == 0) {
sscanf(line, "VmRSS: %lld kB", &vmrss);
break;
}
}
fclose(file);
return vmrss;
}
static void *MonitorTask(void *arg)
{
//获取程序的pid号
pid_t pid = getpid(); // 获取当前进程的 PID
long long total_ram; //最大ram内存
long long current_rss; //RSS内存
double memory_percentage; //内存百分比
// 获取系统总 RAM
total_ram = get_total_ram();
while (1)
{
printf("当前进程pid号%d\n",pid);
// 获取当前进程的内存使用量
current_rss = get_current_rss(pid);
// 计算内存百分比
if (total_ram > 0)
{
memory_percentage = (double)current_rss / total_ram * 100;
} else {
memory_percentage = 0;
}
// 打印结果
printf("Program current memory usage: %lld KB\n", current_rss);
JZSDK_LOG_INFO("Monitor:(%.2f%% of total RAM)", memory_percentage);
delayS(10);
}
}
static int Log_Monitor()
{
pthread_t work_mode_task;
pthread_attr_t task_attribute; //线程属性
pthread_attr_init(&task_attribute); //初始化线程属性
pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程属性
int timer = pthread_create(&work_mode_task,&task_attribute,MonitorTask,NULL); //线程
if(timer != 0)
{
printf("创建计时线程失败!\n");
}
}
T_JZsdkReturnCode createJZLOGFolder()
{
const char *path = "/root/sdcard/JZLOG";
// 使用系统命令检测路径是否存在
if(JZsdk_check_directory_exists_posix(path) == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else
{
JZsdk_Osal_Mkdir(path);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
}
int ReadLogNumFromFile()
{
const char *path = "/root/sdcard/JZLOG/thelast";
int logNum = 0;
FILE *file = fopen(path, "r");
if (file == NULL)
{
// 如果文件不存在,则创建并设置LogNum为0
file = fopen(path, "w");
fprintf(file, "%d", logNum);
}
else
{
// 从文件中读取LogNum,并自增1
fscanf(file, "%d", &logNum);
logNum++;
fclose(file);
// 将新的LogNum写回文件中
file = fopen(path, "w");
fprintf(file, "%d", logNum);
}
fclose(file);
return logNum;
}
T_JZsdkReturnCode JZsdk_LoggerInit()
{
//1、记录启动时间
gettimeofday(&g_start_time, 0);
//2、检查是否存在log文件,不在则创建
createJZLOGFolder();
//3、获取本地log个数
int LogNum = ReadLogNumFromFile();
//4、获取本地时间,拼接出log文件名
time_t current_time;
struct tm *info;
char timeString[80];
time(&current_time);
info = localtime(&current_time);
strftime(timeString, sizeof(timeString), "%Y%m%d_%H-%M-%S", info);
snprintf(LogFileName, sizeof(LogFileName), "/root/sdcard/JZLOG/%d_%s", LogNum, timeString);
printf("LogFileName:%s\n",LogFileName);
// 在主函数或初始化阶段初始化互斥锁
pthread_mutex_init(&LogWriteMutex, NULL);
//5、打开记录文件
logFile = fopen(LogFileName, "w");
if (logFile == NULL) {
// 文件打开失败,输出错误消息
printf("Failed to open file: %s", LogFileName);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//6、写入开始时间
char logMessage[256];
snprintf(logMessage,256,"LOG_FILE:%s\n",LogFileName);
fprintf(logFile, "%s", logMessage);
//dfclose(logFile);
//打开初始化完成的flag
Logger_init_flag = JZ_FLAGCODE_ON;
//设立监控
Log_Monitor();
JZSDK_LOG_INFO("log初始化完成");
}
T_JZsdkReturnCode JZsdk_LoggerDeInit()
{
if (logFile != NULL)
{
fclose(logFile);
}
}
T_JZsdkReturnCode writeToLogFile(const char *data)
{
// 加锁
pthread_mutex_lock(&LogWriteMutex);
//logFile = fopen(LogFileName, "a"); // 使用"a"模式打开文件,以在末尾追加数据
// if (logFile == NULL) {
// // 文件打开失败,输出错误消息
// printf("Failed to open file: %s", LogFileName);
// pthread_mutex_unlock(&LogWriteMutex);
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
if (logFile == NULL)
{
printf("Failed to open file: %s", LogFileName);
pthread_mutex_unlock(&LogWriteMutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
fprintf(logFile, "%s", data); // 写入新的数据
//fclose(logFile);
// 解锁
pthread_mutex_unlock(&LogWriteMutex);
}
T_JZsdkReturnCode HexToLogFile(const char *data)
{
// 加锁
pthread_mutex_lock(&LogWriteMutex);
// logFile = fopen(LogFileName, "a"); // 使用"a"模式打开文件,以在末尾追加数据
// if (logFile == NULL) {
// // 文件打开失败,输出错误消息
// printf("Failed to open file: %s", LogFileName);
// pthread_mutex_unlock(&LogWriteMutex);
// return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
// }
if (logFile == NULL)
{
printf("Failed to open file: %s", LogFileName);
pthread_mutex_unlock(&LogWriteMutex);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
fprintf(logFile, "%x ", data[0]); // 写入新的数据
//fclose(logFile);
// 解锁
pthread_mutex_unlock(&LogWriteMutex);
}
void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...)
{
// 将日志级别转换为相应的字符串
const char *JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "";
switch (level) {
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "DEBUG";
break;
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "INFO";
break;
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "WARNING";
break;
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "ERROR";
break;
default:
break;
}
// 使用可变参数处理传入的格式化字符串和可变参数
va_list args;
va_start(args, fmt);
//格式化日志消息
char logMessage[512];
memset(logMessage, 0, sizeof(logMessage));
vsnprintf(logMessage, sizeof(logMessage), fmt, args);
va_end(args);
struct timeval current_time;
gettimeofday(&current_time, 0);
long seconds = current_time.tv_sec - g_start_time.tv_sec;
long microseconds = current_time.tv_usec - g_start_time.tv_usec;
double elapsed = seconds + microseconds*1e-6;
// 执行具体的日志输出操作
char finalLogMessage[612];
memset(finalLogMessage, 0, sizeof(finalLogMessage));
snprintf(finalLogMessage, 612, "[%s][%.4f]%s\n", JZSDK_LOGGER_CONSOLE_LOG_LEVEL, elapsed, logMessage);
printf("%s",finalLogMessage);
//写入日志
if (Logger_init_flag == JZ_FLAGCODE_ON && level <= LOG_GRADE)
{
writeToLogFile(finalLogMessage);
}
}
void JZsdk_User_OutputHex(E_JZsdkConsoleLogLevel level, const char *fmt, ...)
{
// 将日志级别转换为相应的字符串
const char *JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "";
switch (level) {
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "DEBUG";
break;
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "INFO";
break;
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "WARNING";
break;
case JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR:
JZSDK_LOGGER_CONSOLE_LOG_LEVEL = "ERROR";
break;
default:
break;
}
// 使用可变参数处理传入的格式化字符串和可变参数
va_list args;
va_start(args, fmt);
//格式化日志消息
char logMessage[10];
memset(logMessage, 0, sizeof(logMessage));
vsnprintf(logMessage, sizeof(logMessage), fmt, args);
va_end(args);
// 执行具体的日志输出操作
char finalLogMessage[512];
memset(finalLogMessage, 0, sizeof(finalLogMessage));
snprintf(finalLogMessage, 612, "%s", logMessage);
printf("%x ",finalLogMessage[0]);
//写入日志
HexToLogFile(finalLogMessage);
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdk_Logger.h
* 用于给h150s logger显示文件
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_LOGGER_H
#define JZSDK_LOGGER_H
/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
typedef enum {
JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR = 0, /*!< Logger console error level. The method and level of the console are
associated with each other. If the level of the registered console
method is lower than this level, the level interface will not be
printed successfully. */
JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN = 1, /*!< Logger console warning level.The method and level of the console are
associated with each other. If the level of the registered console
method is lower than this level, the level interface will not be
printed successfully. */
JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO = 2, /*!< Logger console info level. The method and level of the console are
associated with each other. If the level of the registered console
method is lower than this level, the level interface will not be
printed successfully. */
JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG = 3, /*!< Logger console debug level. The method and level of the console are
associated with each other. If the level of the registered console
method is lower than this level, the level interface will not be
printed successfully. */
} E_JZsdkConsoleLogLevel;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void JZsdk_UserLogOutput(E_JZsdkConsoleLogLevel level, const char *fmt, ...);
T_JZsdkReturnCode JZsdk_LoggerInit();
void JZsdk_User_OutputHex(E_JZsdkConsoleLogLevel level, const char *fmt, ...);
/* Exported constants --------------------------------------------------------*/
#define JZSDK_LOG_DEBUG(fmt, ...) \
JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_DEBUG, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
#define JZSDK_LOG_INFO(fmt, ...) \
JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
#define JZSDK_LOG_WARN(fmt, ...) \
JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_WARN, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
#define JZSDK_LOG_ERROR(fmt, ...) \
JZsdk_UserLogOutput(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_ERROR, "[%s:%d) " fmt, __FUNCTION__, __LINE__ , ##__VA_ARGS__)
#define JZSDK_LOG_OUTPUTHEX(fmt, ...) \
JZsdk_User_OutputHex(JZSDK_LOGGER_CONSOLE_LOG_LEVEL_INFO, "" fmt , ##__VA_ARGS__)
#ifdef __cplusplus
}
#endif
#endif
/************************ (C) COPYRIGHT JZSDK Innovations *******END OF FILE******/
... ...
/**
********************************************************************
* @file JZsdk_FS_Standards.h
* 用于规范文件名及长度
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FS_STANDARDS_H
#define JZSDK_FS_STANDARDS_H
#define JZSDK_FILENAME_SIZE (128) //文件名最大长度128
#define JZSDK_CMD_SIZE (256) //cmd指令最大长度
#endif
\ No newline at end of file
... ...
#include <stdio.h>
#include "JZsdk_FileSystm.h"
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "JZsdkLib.h"
#include <dirent.h>
#include <errno.h>
/*
* 用于运行指令
*
*/
T_JZsdkReturnCode JZsdk_RunSystemCmd(char *systemCmd)
{
//FILE *fp;
//printf("JZsdk_RunSystemCmd:%s\n",systemCmd);
// fp = popen(systemCmd, "r");
// if (fp == NULL) {
// return -1;
// }
int status = system(systemCmd);
if (status == -1 || WIFEXITED(status) == false) {
printf("Call %s error, status = %d\n", systemCmd, status);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
if (WEXITSTATUS(status) == 0) {
JZSDK_LOG_DEBUG("指令执行成功%s\n",systemCmd);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else {
JZSDK_LOG_ERROR("指令执行失败Exit status is = %d", WEXITSTATUS(status));
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
//pclose(fp);
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/*
运行命令 并读取返回值
*/
// FILE* JZsdk_RunSystemCmd_ReturnFilePointer(char *systemCmd)
// {
// FILE *fp;
// fp = popen(systemCmd, "r");
// pclose(fp);
// return fp;
// }
/**********************************
*
* 创建一个文件夹
函数名:JZsdk_check_file_exists
参数:文件路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
* *******************************/
T_JZsdkReturnCode JZsdk_Osal_Mkdir(const char *filePath)
{
int32_t ret;
if (filePath == NULL) {
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
ret = mkdir(filePath, S_IRWXU);
if (ret < 0) {
switch (errno) {
case EACCES:
JZSDK_LOG_ERROR("Permission denied\n");
break;
case EEXIST:
JZSDK_LOG_ERROR("Directory already exists\n");
break;
case ENOENT:
JZSDK_LOG_ERROR("A component of the path does not exist or is a dangling symbolic link\n");
break;
case ENOMEM:
JZSDK_LOG_ERROR("Not enough memory\n");
break;
case ENOTDIR:
JZSDK_LOG_ERROR("A component of the path prefix is not a directory\n");
break;
case EROFS:
JZSDK_LOG_ERROR("The named file resides on a read-only file system\n");
break;
default:
JZSDK_LOG_ERROR("Unknown error %d\n", errno);
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**********************************
*
* 文件是否存在判断函数
* 判断文件是否存在
函数名:JZsdk_check_file_exists
参数:文件路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
* *******************************/
T_JZsdkReturnCode JZsdk_check_file_exists(const char* file_path)
{
if (access(file_path, F_OK) == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/**********************************
*
* 文件夹是否存在判断函数
* 判断文件是否存在
函数名:JZsdk_check_file_exists
参数:文件路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
* *******************************/
T_JZsdkReturnCode JZsdk_check_directory_exists_posix(const char* directory_path)
{
struct stat st;
if (stat(directory_path, &st) == 0 && S_ISDIR(st.st_mode))
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/**********************************
*
* 创建新的文件
函数名:JZsdk_check_file_exists
参数:文件路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件存在,
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件不存在
* *******************************/
T_JZsdkReturnCode JZsdk_create_file(const char* file_path)
{
FILE* file = fopen(file_path, "w");
if (file != NULL)
{
fclose(file);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
/**********************************
*
* 删除文件
函数名:JZsdk_delete_file
参数:文件路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件已经不存在
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件仍然存在
* *******************************/
T_JZsdkReturnCode JZsdk_delete_file(const char* file_path)
{
int remove_result = remove(file_path);
if (remove_result != 0) {
// 删除失败,返回错误
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 删除成功
}
/**********************************
*
* 复制文件
函数名:JZsdk_copy_file
参数:文件路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示文件已经不存在
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示文件仍然存在
* *******************************/
T_JZsdkReturnCode JZsdk_copy_file_byC(const char* source_path, const char* dest_path)
{
FILE *source_file = fopen(source_path, "rb"); // 以二进制读模式打开源文件
if (source_file == NULL) {
// 无法打开源文件
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
FILE *dest_file = fopen(dest_path, "wb"); // 以二进制写模式打开目标文件
if (dest_file == NULL) {
// 无法创建或打开目标文件
fclose(source_file); // 关闭已打开的源文件
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 分配缓冲区用于读取和写入文件
char buffer[4096]; // 缓冲区大小可以根据需要调整
size_t bytes_read;
// 复制文件内容
while ((bytes_read = fread(buffer, 1, sizeof(buffer), source_file)) > 0) {
if (fwrite(buffer, 1, bytes_read, dest_file) != bytes_read) {
// 写入目标文件失败
fclose(source_file); // 关闭已打开的源文件
fclose(dest_file); // 关闭已打开的目标文件
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
// 关闭文件
fclose(source_file);
fclose(dest_file);
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 复制成功
}
// 删除指定路径下的所有文件(不包括子文件夹)
// 注意:这个函数不会删除子文件夹,如果您需要删除子文件夹,请添加递归逻辑。
T_JZsdkReturnCode JZsdk_delete_files_in_directory(const char* directory_path)
{
DIR* dir;
struct dirent* ent;
char file_path[1024]; // 假设文件路径不会超过这个长度
T_JZsdkReturnCode ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
if ((dir = opendir(directory_path)) != NULL) {
while ((ent = readdir(dir)) != NULL) {
// 跳过目录条目 '.' 和 '..'
if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
continue;
}
// 构建文件的完整路径
snprintf(file_path, sizeof(file_path), "%s/%s", directory_path, ent->d_name);
// 如果是文件,则删除它
if (remove(file_path) != 0) {
perror("remove"); // 打印错误信息
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
break; // 或者您可以继续并尝试删除其他文件
}
}
closedir(dir);
} else {
perror("opendir"); // 打印错误信息
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return ret;
}
/**********************************
*
* 创建硬链接的函数
函数名:JZsdk_create_hardlink
参数:文件路径 链接路径
返回值:JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示成功
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示失败
* *******************************/
T_JZsdkReturnCode JZsdk_create_hardlink(const char* target_path, const char* link_path)
{
int result = link(target_path, link_path);
if (result == -1) {
JZSDK_LOG_ERROR("hardlink"); // 打印错误信息
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 返回错误代码
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 返回成功代码
}
/**********************************
*
* 字符串后缀对比
函数名:JZsdk_strings_suffix_comparison
参数:字符串,后缀名
返回值:
JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示后缀正确
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示后缀错误,或是长度不对
* *******************************/
T_JZsdkReturnCode JZsdk_strings_suffix_comparison_onlyStr(const unsigned char* Strings, const unsigned char *suffix)
{
if (Strings == NULL || suffix == NULL)
{
JZSDK_LOG_ERROR("字符串后缀对比输入错误");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果指针为NULL,返回失败
}
int suffix_len = (int)strlen((const char*)suffix); // 强制转换为const char*以确保兼容性
int Strings_len = (int)strlen((const char*)Strings); // 强制转换为const char*以确保兼容性
if (Strings_len <= suffix_len)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果字符串长度小于后缀长度,返回失败
}
// 确保不会越界,并且字符串是以空字符结尾的
if (memcmp(Strings + Strings_len - suffix_len, suffix, suffix_len) == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
/**********************************
*
* 字符串后缀对比
函数名:JZsdk_strings_suffix_comparison
参数:字符串, 字符串长度,后缀名
返回值:
JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS表示后缀正确
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE表示后缀错误,或是长度不对
* *******************************/
T_JZsdkReturnCode JZsdk_strings_suffix_comparison_withLen(const unsigned char* Strings, int Strings_len, const unsigned char *suffix)
{
if (Strings == NULL || suffix == NULL)
{
JZSDK_LOG_ERROR("字符串后缀对比输入错误");
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果指针为NULL,返回失败
}
int suffix_len = (int)strlen((const char*)suffix); // 强制转换为const char*以确保兼容性
if (Strings_len <= suffix_len)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 如果字符串长度小于后缀长度,返回失败
}
// 确保不会越界,并且字符串是以空字符结尾的
if (memcmp(Strings + Strings_len - suffix_len, suffix, suffix_len) == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
/**********************************
*
* 读取文件大小
函数名:JZsdk_Fs_ReadFileSize
参数:字符串, 字符串长度,后缀名
返回值:
JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS读取正确
JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE读取错误
* *******************************/
T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *FileSize)
{
struct stat statbuf;
int result = stat(FilePath, &statbuf);
if (result == -1) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
*FileSize = statbuf.st_size;
if (*FileSize == 0)
{
// 文件大小为0,可能是空文件
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdk_FileSystem.h
* 用于文件系统操作
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_FILESYSTEM_H
#define JZSDK_FILESYSTEM_H
/* Includes ------------------------------------------------------------------*/
#include "../JZsdk_Code/JZsdk_Code.h"
#include "./JZsdk_FS_Standards.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_RunSystemCmd(char *systemCmd);
T_JZsdkReturnCode JZsdk_check_file_exists(const char* file_path) ;
T_JZsdkReturnCode JZsdk_create_file(const char* file_path) ;
T_JZsdkReturnCode JZsdk_delete_file(const char* file_path) ;
T_JZsdkReturnCode JZsdk_strings_suffix_comparison_onlyStr(const unsigned char* Strings, const unsigned char *suffix) ;
T_JZsdkReturnCode JZsdk_strings_suffix_comparison_withLen(const unsigned char* Strings, int Strings_len, const unsigned char *suffix) ;
T_JZsdkReturnCode JZsdk_Osal_Mkdir(const char *filePath);
T_JZsdkReturnCode JZsdk_delete_files_in_directory(const char* directory_path);
T_JZsdkReturnCode JZsdk_create_hardlink(const char* target_path, const char* link_path);
T_JZsdkReturnCode JZsdk_check_directory_exists_posix(const char* directory_path);
T_JZsdkReturnCode JZsdk_Fs_ReadFileSize(const unsigned char* FilePath, int *FileSize);
T_JZsdkReturnCode JZsdk_copy_file_byC(const char* source_path, const char* dest_path);
#ifdef __cplusplus
}
#endif
#endif
/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
... ...
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include "JZsdkLib.h"
/**********************************
*
* 注册内存
函数名:JZsdk_Malloc
参数:指针,注册大小
返回值:
JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS正确
JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER 错误
* *******************************/
T_JZsdkReturnCode JZsdk_Malloc(void **ptr, unsigned int size)
{
if (size == 0)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
*ptr = malloc(size);
if (*ptr == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/**********************************
*
* 释放内存
函数名:JZsdk_Free
参数:指针,注册大小
返回值:
JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS正确
JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER 错误
* *******************************/
T_JZsdkReturnCode JZsdk_Free(void *ptr)
{
if (ptr == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
free(ptr);
ptr = NULL;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
\ No newline at end of file
... ...
/**
********************************************************************
* @file JZsdk_MemoryAdapter.h
* 用于内存管理
*
*********************************************************************
*/
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_MEMORY_ADAPTER_H
#define JZSDK_MEMORY_ADAPTER_H
/* Includes ------------------------------------------------------------------*/
#include "../JZsdk_Code/JZsdk_Code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_Malloc(void **ptr, unsigned int size);
T_JZsdkReturnCode JZsdk_Free(void *ptr);
#ifdef __cplusplus
}
#endif
#endif
/************************ (C) COPYRIGHT DJI Innovations *******END OF FILE******/
... ...