Merge branch 'dev_00.00.02.09' into dev
正在显示
76 个修改的文件
包含
2389 行增加
和
956 行删除
| @@ -25,3 +25,5 @@ project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/* | @@ -25,3 +25,5 @@ project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/* | ||
| 25 | !project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/application | 25 | !project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/application |
| 26 | !project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/hal | 26 | !project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/hal |
| 27 | !project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/CMakeLists.txt | 27 | !project_build/DJI_大疆PSDK/samples/sample_c/platform/linux/all/CMakeLists.txt |
| 28 | + | ||
| 29 | +project_build/Attention_提示程序 |
.vscode/c_cpp_properties.json
0 → 100644
| 1 | +{ | ||
| 2 | + "configurations": [ | ||
| 3 | + { | ||
| 4 | + "name": "Win32", | ||
| 5 | + "includePath": [ | ||
| 6 | + "${workspaceFolder}/**", | ||
| 7 | + "${workspaceFolder}/linux_kernel/include/**" | ||
| 8 | + ], | ||
| 9 | + "defines": [ | ||
| 10 | + "_DEBUG", | ||
| 11 | + "UNICODE", | ||
| 12 | + "_UNICODE" | ||
| 13 | + ], | ||
| 14 | + "cStandard": "c99", | ||
| 15 | + "intelliSenseMode": "${default}" | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "version": 4 | ||
| 19 | +} |
| @@ -42,7 +42,22 @@ | @@ -42,7 +42,22 @@ | ||
| 42 | "jzsdk_uart_send.h": "c", | 42 | "jzsdk_uart_send.h": "c", |
| 43 | "espeak_tts.h": "c", | 43 | "espeak_tts.h": "c", |
| 44 | "buffersrc.h": "c", | 44 | "buffersrc.h": "c", |
| 45 | - "audiodeal.h": "c" | 45 | + "audiodeal.h": "c", |
| 46 | + "wiringpi.h": "c", | ||
| 47 | + "v4l2_cameraparametersetting.h": "c", | ||
| 48 | + "rtk_mmp.h": "c", | ||
| 49 | + "videostream_shootphoto.h": "c", | ||
| 50 | + "videostream_record.h": "c", | ||
| 51 | + "videomgmt_parm.h": "c", | ||
| 52 | + "multproc.h": "c", | ||
| 53 | + "videomgmt.h": "c", | ||
| 54 | + "string.h": "c", | ||
| 55 | + "unistd.h": "c", | ||
| 56 | + "mediaparm.h": "c", | ||
| 57 | + "videostream_push.h": "c", | ||
| 58 | + "v4l2_record.h": "c", | ||
| 59 | + "deviceinfo.h": "c" | ||
| 46 | }, | 60 | }, |
| 47 | - "Codegeex.GenerationPreference": "automatic" | 61 | + "Codegeex.GenerationPreference": "automatic", |
| 62 | + "C_Cpp.dimInactiveRegions": false | ||
| 48 | } | 63 | } |
| 1 | # 编译链的配置 | 1 | # 编译链的配置 |
| 2 | 2 | ||
| 3 | #1、编译链与设备类型的选择 | 3 | #1、编译链与设备类型的选择 |
| 4 | -set(DEVICE_NAME JZ_H1E) | 4 | +set(DEVICE_NAME JZ_H150S) |
| 5 | #上一行为禁止修改行 | 5 | #上一行为禁止修改行 |
| 6 | 6 | ||
| 7 | +message("**************************JZSDK构建编译开始***************************\n") | ||
| 8 | + | ||
| 7 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | 9 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") |
| 8 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) | 10 | set(MAKE_COMPILER ARM_CORTEXA9_LINUX) |
| 9 | set(DEVICE_TYPE MEGAPHONE) | 11 | set(DEVICE_TYPE MEGAPHONE) |
| @@ -70,4 +72,4 @@ else() | @@ -70,4 +72,4 @@ else() | ||
| 70 | message(FATAL_ERROR "不支持的编译链") | 72 | message(FATAL_ERROR "不支持的编译链") |
| 71 | endif() | 73 | endif() |
| 72 | 74 | ||
| 73 | -message("编译链配置完毕\n") | ||
| 75 | +message("\n**************************编译链配置完毕***********************\n") |
| 1 | -# SubsidiaryThirdPartyConfig.cmake 附属第三方库配置文件 | ||
| 2 | - | ||
| 3 | -set(IFLAY_TTS_MODULE VERSION_SWITCH_OFF) | ||
| 4 | -set(ESPEAK_TTS_MODULE VERSION_SWITCH_OFF) | ||
| 5 | -set(ALSALIB_MODULE VERSION_SWITCH_OFF) | ||
| 6 | -set(OPUS_MODULE VERSION_SWITCH_OFF) | ||
| 7 | -set(LIB_RTK_MMP VERSION_SWITCH_OFF) | ||
| 8 | -set(LIB_USB VERSION_SWITCH_OFF) | ||
| 9 | -set(LIB_KT_IRC VERSION_SWITCH_OFF) | ||
| 10 | - | ||
| 11 | -add_definitions(-D COMPILE_MODE_MODULE) #设置代码为编译模式 | ||
| 12 | - | ||
| 13 | -if(${MEGAPHONE_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 14 | - message("\n喊话器模块已加载") | ||
| 15 | - add_definitions(-DMACRO_MEGAPHONE_MODULE) #加载喊话器模块 | ||
| 16 | - | ||
| 17 | - message("加载讯飞TTS模块") | ||
| 18 | - set(IFLAY_TTS_MODULE VERSION_SWITCH_ON) | ||
| 19 | - | ||
| 20 | - message("加载espeak模块") | ||
| 21 | - set(ESPEAK_TTS_MODULE VERSION_SWITCH_ON) | ||
| 22 | - | ||
| 23 | - message("加载alsalib模块") | ||
| 24 | - set(ALSALIB_MODULE VERSION_SWITCH_ON) | ||
| 25 | - | ||
| 26 | - message("加载OPUS模块") | ||
| 27 | - set(OPUS_MODULE VERSION_SWITCH_ON) | ||
| 28 | -endif() | ||
| 29 | - | ||
| 30 | -if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 31 | - message("\n红外相机模块已加载") | ||
| 32 | - add_definitions(-DMACRO_IRC_MODULE) | ||
| 33 | - | ||
| 34 | - message("加载RTK模块") | ||
| 35 | - set(LIB_RTK_MMP VERSION_SWITCH_ON) | ||
| 36 | - | ||
| 37 | - message("加载USB模块") | ||
| 38 | - set(LIB_USB VERSION_SWITCH_ON) | ||
| 39 | - | ||
| 40 | - message("\n媒体管理模块已加载") | ||
| 41 | - add_definitions(-DMACRO_MEDIA_PROC_MODULE) | ||
| 42 | - if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 43 | - set(LIB_KT_IRC VERSION_SWITCH_ON) | ||
| 44 | - endif() | ||
| 45 | -endif() | ||
| 46 | - | ||
| 47 | - | ||
| 48 | - | ||
| 49 | -if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 50 | - message("加载侧面激光模块") | ||
| 51 | - add_definitions(-DMACRO_SIDE_LASER_MODULE) | ||
| 52 | -endif() | ||
| 53 | - | ||
| 54 | - | ||
| 55 | -message("附属库已加载\n") |
CmakeConfig/module_build.cmake
0 → 100644
| 1 | +# 模组构建文件,用于加载源代码 与 配置代码中的开关 | ||
| 2 | +# ${ROOT_DIRS}为cmakelist文件提供的工程根目录 | ||
| 3 | + | ||
| 4 | +message("\n*************************开始模块构建***********************\n") | ||
| 5 | + | ||
| 6 | +set(IFLAY_TTS_MODULE VERSION_SWITCH_OFF) | ||
| 7 | +set(ESPEAK_TTS_MODULE VERSION_SWITCH_OFF) | ||
| 8 | +set(ALSALIB_MODULE VERSION_SWITCH_OFF) | ||
| 9 | +set(OPUS_MODULE VERSION_SWITCH_OFF) | ||
| 10 | +set(LIB_RTK_MMP VERSION_SWITCH_OFF) | ||
| 11 | +set(LIB_USB VERSION_SWITCH_OFF) | ||
| 12 | +set(LIB_KT_IRC VERSION_SWITCH_OFF) | ||
| 13 | + | ||
| 14 | +add_definitions(-D COMPILE_MODE_MODULE) #设置代码为编译模式 | ||
| 15 | + | ||
| 16 | +#加载基础库JZSDK库基础代码 | ||
| 17 | +file(GLOB_RECURSE JZSDK_COMMON_SRC ${ROOT_DIRS}JZsdk_Common/*.c) | ||
| 18 | +list(APPEND ALL_SRC_FILES ${JZSDK_COMMON_SRC}) | ||
| 19 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Common) | ||
| 20 | + | ||
| 21 | +file(GLOB_RECURSE JZSDK_CONFIG_SRC ${ROOT_DIRS}JZsdk_Config/*.c) | ||
| 22 | +list(APPEND ALL_SRC_FILES ${JZSDK_CONFIG_SRC}) | ||
| 23 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_Config) | ||
| 24 | + | ||
| 25 | +file(GLOB_RECURSE JZSDK_HAL_SRC ${ROOT_DIRS}JZsdk_hal/*.c) | ||
| 26 | +list(APPEND ALL_SRC_FILES ${JZSDK_HAL_SRC}) | ||
| 27 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_hal) | ||
| 28 | + | ||
| 29 | +file(GLOB_RECURSE JZSDK_OSAL_SRC ${ROOT_DIRS}JZsdk_osal/*.c) | ||
| 30 | +list(APPEND ALL_SRC_FILES ${JZSDK_OSAL_SRC}) | ||
| 31 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}JZsdk_osal) | ||
| 32 | + | ||
| 33 | +message("\nJZSDK基础代码加载完毕\n") | ||
| 34 | + | ||
| 35 | +#如果要加载设备信息模块,需要加载以下附属内容 | ||
| 36 | +if(${DEVICE_INFO_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 37 | + message("\n设备信息模块源码加载中") | ||
| 38 | + file(GLOB_RECURSE DEVICE_MESSAGE_SRC ${ROOT_DIRS}Module/DeviceInfo/*.c) | ||
| 39 | + list(APPEND ALL_SRC_FILES ${DEVICE_MESSAGE_SRC}) | ||
| 40 | + | ||
| 41 | +endif() | ||
| 42 | + | ||
| 43 | +#如果要加载云台模块,需要加载以下附属内容 | ||
| 44 | +if(${GIMBAL_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 45 | + message("\n云台模块源码加载中") | ||
| 46 | + file(GLOB_RECURSE GIMBAL_SRC ${ROOT_DIRS}Module/Gimbal/*.c) | ||
| 47 | + list(APPEND ALL_SRC_FILES ${GIMBAL_SRC}) | ||
| 48 | + | ||
| 49 | +endif() | ||
| 50 | + | ||
| 51 | +#如果要加载引脚模块,需要加载以下附属内容 | ||
| 52 | +if(${IRCUT_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 53 | + message("\n引脚模块源码加载中") | ||
| 54 | + file(GLOB_RECURSE MODULE_IRCUT_SRC ${ROOT_DIRS}Module/Ircut/*.c) | ||
| 55 | + list(APPEND ALL_SRC_FILES ${MODULE_IRCUT_SRC}) | ||
| 56 | + | ||
| 57 | +endif() | ||
| 58 | + | ||
| 59 | +#如果要加载光源模块,需要加载以下附属内容 | ||
| 60 | +if(${LIGHTING_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 61 | + message("\n光源模块加载中") | ||
| 62 | + | ||
| 63 | + #打开光源的代码编译部分 | ||
| 64 | + add_definitions(-DMACRO_LIGHTING_MODULE) | ||
| 65 | + | ||
| 66 | + #将光源的源代码加入编译中 | ||
| 67 | + file(GLOB_RECURSE LIGHTING_SRC ${ROOT_DIRS}Module/Lighting/*.c) | ||
| 68 | + list(APPEND ALL_SRC_FILES ${LIGHTING_SRC}) | ||
| 69 | + | ||
| 70 | +endif() | ||
| 71 | + | ||
| 72 | +#如果要加载媒体管理模块,需要加载以下附属内容 | ||
| 73 | +if(${MEDIA_PROC_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 74 | + message("\n媒体管理模块加载中") | ||
| 75 | + | ||
| 76 | + #将媒体管理模块的源代码加入编译中 | ||
| 77 | + add_definitions(-DMACRO_MEDIA_PROC_MODULE) | ||
| 78 | + | ||
| 79 | + file(GLOB_RECURSE MEDIA_PROC_SRC ${ROOT_DIRS}Module/MediaProc/*.c) | ||
| 80 | + file(GLOB_RECURSE MEDIA_PROC_SRC_CPP ${ROOT_DIRS}Module/MediaProc/*.cpp) | ||
| 81 | + list(APPEND ALL_SRC_FILES ${MEDIA_PROC_SRC}) | ||
| 82 | + list(APPEND ALL_SRC_FILES ${MEDIA_PROC_SRC_CPP}) | ||
| 83 | + | ||
| 84 | + #如果要加载红外相机模块,额外加载以下附属内容 | ||
| 85 | + if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 86 | + message("加载红外相机模块") | ||
| 87 | + add_definitions(-DMACRO_IRC_MODULE) | ||
| 88 | + | ||
| 89 | + message("加载RTK模块") | ||
| 90 | + set(LIB_RTK_MMP VERSION_SWITCH_ON) | ||
| 91 | + | ||
| 92 | + message("加载USB模块") | ||
| 93 | + set(LIB_USB VERSION_SWITCH_ON) | ||
| 94 | + | ||
| 95 | + if(${IRC_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 96 | + set(LIB_KT_IRC VERSION_SWITCH_ON) | ||
| 97 | + | ||
| 98 | + endif() | ||
| 99 | + endif() | ||
| 100 | + | ||
| 101 | +endif() | ||
| 102 | + | ||
| 103 | + | ||
| 104 | + | ||
| 105 | +#如果要加载喊话器模块,需要加载以下附属内容 | ||
| 106 | +if(${MEGAPHONE_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 107 | + message("\n喊话器模块加载中") | ||
| 108 | + | ||
| 109 | + message("加载喊话器") | ||
| 110 | + add_definitions(-DMACRO_MEGAPHONE_MODULE) #加载喊话器模块 | ||
| 111 | + file(GLOB_RECURSE MEGAPHONE_SRC ${ROOT_DIRS}Module/Megaphone/*.c) | ||
| 112 | + list(APPEND ALL_SRC_FILES ${MEGAPHONE_SRC}) | ||
| 113 | + | ||
| 114 | + message("加载音频库") | ||
| 115 | + file(GLOB_RECURSE AUDIODEAL_SRC ${ROOT_DIRS}Module/AudioDeal/*.c) | ||
| 116 | + list(APPEND ALL_SRC_FILES ${AUDIODEAL_SRC}) | ||
| 117 | + | ||
| 118 | + message("加载讯飞TTS模块") | ||
| 119 | + set(IFLAY_TTS_MODULE VERSION_SWITCH_ON) | ||
| 120 | + | ||
| 121 | + message("加载espeak模块") | ||
| 122 | + set(ESPEAK_TTS_MODULE VERSION_SWITCH_ON) | ||
| 123 | + | ||
| 124 | + message("加载alsalib模块") | ||
| 125 | + set(ALSALIB_MODULE VERSION_SWITCH_ON) | ||
| 126 | + | ||
| 127 | + message("加载OPUS模块") | ||
| 128 | + set(OPUS_MODULE VERSION_SWITCH_ON) | ||
| 129 | +endif() | ||
| 130 | + | ||
| 131 | +#如果要加载电源管理模块,需要加载以下附属内容 | ||
| 132 | +if(${POWER_MANAGER_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 133 | + | ||
| 134 | + message("\n电源模块加载中") | ||
| 135 | + file(GLOB_RECURSE POWERMANAGER_SRC ${ROOT_DIRS}Module/PowerManager/*.c) | ||
| 136 | + list(APPEND ALL_SRC_FILES ${POWERMANAGER_SRC}) | ||
| 137 | + | ||
| 138 | +endif() | ||
| 139 | + | ||
| 140 | +#如果要加载侧面激光模块,需要加载以下附属内容 | ||
| 141 | +if(${SIDE_LASER_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 142 | + message("\n侧面激光模块加载中") | ||
| 143 | + | ||
| 144 | + #打开侧面激光的代码编译部分 | ||
| 145 | + add_definitions(-DMACRO_SIDE_LASER_MODULE) | ||
| 146 | + | ||
| 147 | + file(GLOB_RECURSE MODULE_SIDE_LASER_SRC ${ROOT_DIRS}Module/SideLaser/*.c) | ||
| 148 | + list(APPEND ALL_SRC_FILES ${MODULE_SIDE_LASER_SRC}) | ||
| 149 | +endif() | ||
| 150 | + | ||
| 151 | +#如果要加载UI模块,需要加载以下附属内容 | ||
| 152 | +if(${UI_CONTROL_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 153 | + message("\nUI模块源码加载中") | ||
| 154 | + | ||
| 155 | + file(GLOB_RECURSE MODULE_UICONTROL_SRC ${ROOT_DIRS}Module/UI_control/*.c) | ||
| 156 | + list(APPEND ALL_SRC_FILES ${MODULE_UICONTROL_SRC}) | ||
| 157 | + | ||
| 158 | +endif() | ||
| 159 | + | ||
| 160 | +# wiringPi | ||
| 161 | +if(${WIRINGPI_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 162 | + message("\nwiringPi模块加载中") | ||
| 163 | + | ||
| 164 | + file(GLOB_RECURSE WIRINGPI_SRC ${ROOT_DIRS}ThirdParty/wiringPi/*.c) | ||
| 165 | + list(APPEND ALL_SRC_FILES ${WIRINGPI_SRC}) | ||
| 166 | + list(APPEND ALL_INC_FILES ${ROOT_DIRS}ThirdParty/wiringPi) | ||
| 167 | + | ||
| 168 | + #打开wiringPi的代码编译部分 | ||
| 169 | + add_definitions(-DMACRO_WIRINGPI_MODULE) | ||
| 170 | + | ||
| 171 | +endif() | ||
| 172 | + | ||
| 173 | +# 如果要加入特殊图像处理模块,需要加载以下附属内容 | ||
| 174 | +if(${IMAGEPROCESSING_MODULE} STREQUAL "VERSION_SWITCH_ON") | ||
| 175 | + message("\n特殊图像处理模块加载中") | ||
| 176 | + | ||
| 177 | + file(GLOB_RECURSE MODULE_IMAGEPROCESSING_SRC ${ROOT_DIRS}Module/ImageProcessing/*.c) | ||
| 178 | + file(GLOB_RECURSE MODULE_IMAGEPROCESSING_cpp_SRC ${ROOT_DIRS}Module/ImageProcessing/*.cpp) | ||
| 179 | + list(APPEND ALL_SRC_FILES ${MODULE_IMAGEPROCESSING_SRC}) | ||
| 180 | + list(APPEND ALL_SRC_FILES ${MODULE_IMAGEPROCESSING_cpp_SRC}) | ||
| 181 | +endif() | ||
| 182 | + | ||
| 183 | + | ||
| 184 | + | ||
| 185 | +# 头文件加载,后续再进行优化 | ||
| 186 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Megaphone) | ||
| 187 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Ircut) | ||
| 188 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Gimbal) | ||
| 189 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Lighting) | ||
| 190 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/UI_control) | ||
| 191 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/Camera) | ||
| 192 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/PowerManager) | ||
| 193 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/TestAPP) | ||
| 194 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/ImageProcessing) | ||
| 195 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module/SerialManagement) | ||
| 196 | +list(APPEND ALL_INC_FILES ${ROOT_DIRS}Module) | ||
| 197 | + | ||
| 198 | +message("**************************库构建完毕***************************\n") |
| 1 | -# ModuleConfig.cmake 模组模块的配置文件 | 1 | +# 设备类型的模块配置文件 |
| 2 | +# 主要用于根据设备类型 | ||
| 3 | +# 将对应的模块打开 | ||
| 2 | 4 | ||
| 3 | ###################### 自己的库 ############################## | 5 | ###################### 自己的库 ############################## |
| 4 | # AudioDeal 音频处理模块 | 6 | # AudioDeal 音频处理模块 |
| @@ -16,8 +18,6 @@ set(IRCUT_MODULE VERSION_SWITCH_OFF) | @@ -16,8 +18,6 @@ set(IRCUT_MODULE VERSION_SWITCH_OFF) | ||
| 16 | # LIGHTING 光源处理模块 | 18 | # LIGHTING 光源处理模块 |
| 17 | set(LIGHTING_MODULE VERSION_SWITCH_OFF) | 19 | set(LIGHTING_MODULE VERSION_SWITCH_OFF) |
| 18 | 20 | ||
| 19 | -# MediaProc 媒体管理模块 | ||
| 20 | -set(MEDIA_PROC_MODULE VERSION_SWITCH_OFF) | ||
| 21 | 21 | ||
| 22 | # 喊话器模块 | 22 | # 喊话器模块 |
| 23 | set(MEGAPHONE_MODULE VERSION_SWITCH_OFF) | 23 | set(MEGAPHONE_MODULE VERSION_SWITCH_OFF) |
| @@ -28,6 +28,10 @@ set(POWER_MANAGER_MODULE VERSION_SWITCH_OFF) | @@ -28,6 +28,10 @@ set(POWER_MANAGER_MODULE VERSION_SWITCH_OFF) | ||
| 28 | # UI管理模块 | 28 | # UI管理模块 |
| 29 | set(UI_CONTROL_MODULE VERSION_SWITCH_OFF) | 29 | set(UI_CONTROL_MODULE VERSION_SWITCH_OFF) |
| 30 | 30 | ||
| 31 | + | ||
| 32 | +# MediaProc 媒体管理模块 | ||
| 33 | +set(MEDIA_PROC_MODULE VERSION_SWITCH_OFF) | ||
| 34 | + | ||
| 31 | # 红外相机模块 | 35 | # 红外相机模块 |
| 32 | set(IRC_MODULE VERSION_SWITCH_OFF) | 36 | set(IRC_MODULE VERSION_SWITCH_OFF) |
| 33 | 37 | ||
| @@ -42,7 +46,13 @@ set(FFMPEG_MODULE VERSION_SWITCH_OFF) | @@ -42,7 +46,13 @@ set(FFMPEG_MODULE VERSION_SWITCH_OFF) | ||
| 42 | # cedarxLib | 46 | # cedarxLib |
| 43 | set(CedarxLib VERSION_SWITCH_OFF) | 47 | set(CedarxLib VERSION_SWITCH_OFF) |
| 44 | 48 | ||
| 45 | -########################## 通用库 ########################################### | 49 | +# wiringPi库 |
| 50 | +set(WIRINGPI_MODULE VERSION_SWITCH_OFF) | ||
| 51 | + | ||
| 52 | +# OpenCV库 | ||
| 53 | +set(IMAGEPROCESSING_MODULE VERSION_SWITCH_OFF) | ||
| 54 | + | ||
| 55 | +########################## 通用库加载 ########################################### | ||
| 46 | 56 | ||
| 47 | # 添加信息模块 | 57 | # 添加信息模块 |
| 48 | set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) | 58 | set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) |
| @@ -50,7 +60,12 @@ set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) | @@ -50,7 +60,12 @@ set(DEVICE_INFO_MODULE VERSION_SWITCH_ON) | ||
| 50 | # 添加UI管理模块 | 60 | # 添加UI管理模块 |
| 51 | set(UI_CONTROL_MODULE VERSION_SWITCH_ON) | 61 | set(UI_CONTROL_MODULE VERSION_SWITCH_ON) |
| 52 | 62 | ||
| 53 | -##################################################################### | 63 | +# 添加电源管理模块 |
| 64 | +set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | ||
| 65 | + | ||
| 66 | +message("通用库加载完成") | ||
| 67 | + | ||
| 68 | +########################### 独立库加载 ########################################## | ||
| 54 | 69 | ||
| 55 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | 70 | if("${DEVICE_NAME}" STREQUAL "JZ_H1E") |
| 56 | # 添加AudioDeal 音频处理模块 | 71 | # 添加AudioDeal 音频处理模块 |
| @@ -68,9 +83,6 @@ if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | @@ -68,9 +83,6 @@ if("${DEVICE_NAME}" STREQUAL "JZ_H1E") | ||
| 68 | # 添加喊话器模块 | 83 | # 添加喊话器模块 |
| 69 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | 84 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) |
| 70 | 85 | ||
| 71 | - # 添加电源管理模块 | ||
| 72 | - set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | ||
| 73 | - | ||
| 74 | # 添加FFMPEG及其附属模块 | 86 | # 添加FFMPEG及其附属模块 |
| 75 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 87 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
| 76 | 88 | ||
| @@ -91,8 +103,25 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") | @@ -91,8 +103,25 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_H1T") | ||
| 91 | # 添加喊话器模块 | 103 | # 添加喊话器模块 |
| 92 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | 104 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) |
| 93 | 105 | ||
| 94 | - # 添加电源管理模块 | ||
| 95 | - set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | 106 | + # 添加FFMPEG及其附属模块 |
| 107 | + set(FFMPEG_MODULE VERSION_SWITCH_ON) | ||
| 108 | + | ||
| 109 | +elseif("${DEVICE_NAME}" STREQUAL "JZ_U3") | ||
| 110 | + | ||
| 111 | + # 添加AudioDeal 音频处理模块 | ||
| 112 | + set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | ||
| 113 | + | ||
| 114 | + # 添加Gimbal 云台处理模块 | ||
| 115 | + set(GIMBAL_MODULE VERSION_SWITCH_ON) | ||
| 116 | + | ||
| 117 | + # 添加IRCUT 引脚处理模块 | ||
| 118 | + set(IRCUT_MODULE VERSION_SWITCH_ON) | ||
| 119 | + | ||
| 120 | + # 添加LIGHTING 光源处理模块 | ||
| 121 | + set(LIGHTING_MODULE VERSION_SWITCH_ON) | ||
| 122 | + | ||
| 123 | + # 添加喊话器模块 | ||
| 124 | + set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | ||
| 96 | 125 | ||
| 97 | # 添加FFMPEG及其附属模块 | 126 | # 添加FFMPEG及其附属模块 |
| 98 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 127 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
| @@ -114,9 +143,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") | @@ -114,9 +143,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3S") | ||
| 114 | # 添加喊话器模块 | 143 | # 添加喊话器模块 |
| 115 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | 144 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) |
| 116 | 145 | ||
| 117 | - # 添加电源管理模块 | ||
| 118 | - set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | ||
| 119 | - | ||
| 120 | # 添加FFMPEG及其附属模块 | 146 | # 添加FFMPEG及其附属模块 |
| 121 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 147 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
| 122 | 148 | ||
| @@ -140,9 +166,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") | @@ -140,9 +166,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U3D") | ||
| 140 | # 添加喊话器模块 | 166 | # 添加喊话器模块 |
| 141 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | 167 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) |
| 142 | 168 | ||
| 143 | - # 添加电源管理模块 | ||
| 144 | - set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | ||
| 145 | - | ||
| 146 | # 添加FFMPEG及其附属模块 | 169 | # 添加FFMPEG及其附属模块 |
| 147 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 170 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
| 148 | 171 | ||
| @@ -163,8 +186,86 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") | @@ -163,8 +186,86 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_U30") | ||
| 163 | # 添加喊话器模块 | 186 | # 添加喊话器模块 |
| 164 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | 187 | set(MEGAPHONE_MODULE VERSION_SWITCH_ON) |
| 165 | 188 | ||
| 166 | - # 添加电源管理模块 | ||
| 167 | - set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | 189 | + # 添加FFMPEG及其附属模块 |
| 190 | + set(FFMPEG_MODULE VERSION_SWITCH_ON) | ||
| 191 | + | ||
| 192 | +elseif("${DEVICE_NAME}" STREQUAL "JZ_H10") | ||
| 193 | + # 添加AudioDeal 音频处理模块 | ||
| 194 | + set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | ||
| 195 | + | ||
| 196 | + # 添加Gimbal 云台处理模块 | ||
| 197 | + set(GIMBAL_MODULE VERSION_SWITCH_ON) | ||
| 198 | + | ||
| 199 | + # 添加IRCUT 引脚处理模块 | ||
| 200 | + set(IRCUT_MODULE VERSION_SWITCH_ON) | ||
| 201 | + | ||
| 202 | + # 添加喊话器模块 | ||
| 203 | + set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | ||
| 204 | + | ||
| 205 | + # 添加wringpi | ||
| 206 | + set(WIRINGPI_MODULE VERSION_SWITCH_ON) | ||
| 207 | + | ||
| 208 | + # 添加FFMPEG及其附属模块 | ||
| 209 | + set(FFMPEG_MODULE VERSION_SWITCH_ON) | ||
| 210 | + | ||
| 211 | +elseif("${DEVICE_NAME}" STREQUAL "JZ_H10T") | ||
| 212 | + | ||
| 213 | + # 添加AudioDeal 音频处理模块 | ||
| 214 | + set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | ||
| 215 | + | ||
| 216 | + # 添加Gimbal 云台处理模块 | ||
| 217 | + set(GIMBAL_MODULE VERSION_SWITCH_ON) | ||
| 218 | + | ||
| 219 | + # 添加IRCUT 引脚处理模块 | ||
| 220 | + set(IRCUT_MODULE VERSION_SWITCH_ON) | ||
| 221 | + | ||
| 222 | + # 添加喊话器模块 | ||
| 223 | + set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | ||
| 224 | + | ||
| 225 | + # 添加FFMPEG及其附属模块 | ||
| 226 | + set(FFMPEG_MODULE VERSION_SWITCH_ON) | ||
| 227 | + | ||
| 228 | +elseif("${DEVICE_NAME}" STREQUAL "JZ_H150S") | ||
| 229 | + # 添加AudioDeal 音频处理模块 | ||
| 230 | + set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | ||
| 231 | + | ||
| 232 | + # 添加Gimbal 云台处理模块 | ||
| 233 | + set(GIMBAL_MODULE VERSION_SWITCH_ON) | ||
| 234 | + | ||
| 235 | + # 添加IRCUT 引脚处理模块 | ||
| 236 | + set(IRCUT_MODULE VERSION_SWITCH_ON) | ||
| 237 | + | ||
| 238 | + # 添加喊话器模块 | ||
| 239 | + set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | ||
| 240 | + | ||
| 241 | + # 添加MediaProc 媒体管理模块 | ||
| 242 | + set(MEDIA_PROC_MODULE VERSION_SWITCH_ON) | ||
| 243 | + | ||
| 244 | + # 添加wringpi | ||
| 245 | + set(WIRINGPI_MODULE VERSION_SWITCH_ON) | ||
| 246 | + | ||
| 247 | + # 添加FFMPEG及其附属模块 | ||
| 248 | + set(FFMPEG_MODULE VERSION_SWITCH_ON) | ||
| 249 | + | ||
| 250 | +elseif("${DEVICE_NAME}" STREQUAL "JZ_H150T") | ||
| 251 | + | ||
| 252 | + # 添加AudioDeal 音频处理模块 | ||
| 253 | + set(AUDIODEAL_MODULE VERSION_SWITCH_ON) | ||
| 254 | + | ||
| 255 | + # 添加Gimbal 云台处理模块 | ||
| 256 | + set(GIMBAL_MODULE VERSION_SWITCH_ON) | ||
| 257 | + | ||
| 258 | + # 添加IRCUT 引脚处理模块 | ||
| 259 | + set(IRCUT_MODULE VERSION_SWITCH_ON) | ||
| 260 | + | ||
| 261 | + # 添加喊话器模块 | ||
| 262 | + set(MEGAPHONE_MODULE VERSION_SWITCH_ON) | ||
| 263 | + | ||
| 264 | + # 添加MediaProc 媒体管理模块 | ||
| 265 | + set(MEDIA_PROC_MODULE VERSION_SWITCH_ON) | ||
| 266 | + | ||
| 267 | + # 添加wringpi | ||
| 268 | + set(WIRINGPI_MODULE VERSION_SWITCH_ON) | ||
| 168 | 269 | ||
| 169 | # 添加FFMPEG及其附属模块 | 270 | # 添加FFMPEG及其附属模块 |
| 170 | set(FFMPEG_MODULE VERSION_SWITCH_ON) | 271 | set(FFMPEG_MODULE VERSION_SWITCH_ON) |
| @@ -183,9 +284,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | @@ -183,9 +284,6 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | ||
| 183 | # 添加MediaProc 媒体管理模块 | 284 | # 添加MediaProc 媒体管理模块 |
| 184 | set(MEDIA_PROC_MODULE VERSION_SWITCH_ON) | 285 | set(MEDIA_PROC_MODULE VERSION_SWITCH_ON) |
| 185 | 286 | ||
| 186 | - # 添加电源管理模块 | ||
| 187 | - set(POWER_MANAGER_MODULE VERSION_SWITCH_ON) | ||
| 188 | - | ||
| 189 | # 添加红外相机模块 | 287 | # 添加红外相机模块 |
| 190 | set(IRC_MODULE VERSION_SWITCH_ON) | 288 | set(IRC_MODULE VERSION_SWITCH_ON) |
| 191 | 289 | ||
| @@ -193,4 +291,4 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | @@ -193,4 +291,4 @@ elseif("${DEVICE_NAME}" STREQUAL "JZ_C1") | ||
| 193 | set(LIB_KT_MODULE VERSION_SWITCH_ON) | 291 | set(LIB_KT_MODULE VERSION_SWITCH_ON) |
| 194 | endif() | 292 | endif() |
| 195 | 293 | ||
| 196 | -message("模组模块已加载\n") | ||
| 294 | +message("***********************模组模块配置完毕*********************************\n") |
| 1 | - | ||
| 2 | -# ModuleLoading.cmake 模块加载文件 | 1 | +# 第一方/第三方 模块加载文件 |
| 2 | +# 主要用于加载动态库给编译使用 | ||
| 3 | +# ${ROOT_DIRS}为cmakelist文件提供的工程根目录 | ||
| 3 | 4 | ||
| 4 | 5 | ||
| 5 | if(${IFLAY_TTS_MODULE} STREQUAL "VERSION_SWITCH_ON") | 6 | if(${IFLAY_TTS_MODULE} STREQUAL "VERSION_SWITCH_ON") |
| @@ -170,5 +171,7 @@ if(${LIB_KT_IRC} STREQUAL "VERSION_SWITCH_ON") | @@ -170,5 +171,7 @@ if(${LIB_KT_IRC} STREQUAL "VERSION_SWITCH_ON") | ||
| 170 | ${PROJECT_NAME} | 171 | ${PROJECT_NAME} |
| 171 | ${ROOT_DIRS}/ThirdParty/KT_IRC/aarch64-none-linux-gnu/lib/libktlib.so | 172 | ${ROOT_DIRS}/ThirdParty/KT_IRC/aarch64-none-linux-gnu/lib/libktlib.so |
| 172 | ) | 173 | ) |
| 174 | + add_definitions(-DMACRO_KTIRC_MODULE) | ||
| 173 | endif() | 175 | endif() |
| 174 | 176 | ||
| 177 | +message("**************************动态库加载完毕***************************\n") |
| @@ -156,7 +156,9 @@ typedef enum { | @@ -156,7 +156,9 @@ typedef enum { | ||
| 156 | JZ_INSCODE_5BFRAME_MUSICLIST_START = 0x10004300, //开启发送音乐列表帧 | 156 | JZ_INSCODE_5BFRAME_MUSICLIST_START = 0x10004300, //开启发送音乐列表帧 |
| 157 | JZ_INSCODE_5BFRAME_MUSICLIST_TRANS = 0x10004301, //发送音乐列表帧 | 157 | JZ_INSCODE_5BFRAME_MUSICLIST_TRANS = 0x10004301, //发送音乐列表帧 |
| 158 | JZ_INSCODE_5BFRAME_MUSICLIST_STOP = 0x10004302, //结束发送音乐列表帧 | 158 | JZ_INSCODE_5BFRAME_MUSICLIST_STOP = 0x10004302, //结束发送音乐列表帧 |
| 159 | + JZ_INSCODE_5BFRAME_MUSICLIST_TRANS_2 = 0x10004303, //查询音频详细信息2型 | ||
| 159 | 160 | ||
| 161 | + | ||
| 160 | JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS = 0x10004310, //音频播放状态返回帧 | 162 | JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS = 0x10004310, //音频播放状态返回帧 |
| 161 | JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END = 0x10004311, //音频播放状态结束帧 | 163 | JZ_INSCODE_5BFRAME_AUDIO_PLAYSTATUS_END = 0x10004311, //音频播放状态结束帧 |
| 162 | 164 | ||
| @@ -168,6 +170,7 @@ typedef enum { | @@ -168,6 +170,7 @@ typedef enum { | ||
| 168 | JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE = 0x10004405, //查询音频详细信息 | 170 | JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE = 0x10004405, //查询音频详细信息 |
| 169 | 171 | ||
| 170 | 172 | ||
| 173 | + | ||
| 171 | JZ_INSCODE_5BFRAME_GIMBAL_PITCH = 0x10004500, //云台俯仰角度 | 174 | JZ_INSCODE_5BFRAME_GIMBAL_PITCH = 0x10004500, //云台俯仰角度 |
| 172 | JZ_INSCODE_5BFRAME_GIMBAL_YAW = 0x10004501, //云台航向角度 | 175 | JZ_INSCODE_5BFRAME_GIMBAL_YAW = 0x10004501, //云台航向角度 |
| 173 | JZ_INSCODE_5BFRAME_GIMBAL_ROLL = 0x10004502, // | 176 | JZ_INSCODE_5BFRAME_GIMBAL_ROLL = 0x10004502, // |
| @@ -198,6 +201,8 @@ typedef enum { | @@ -198,6 +201,8 @@ typedef enum { | ||
| 198 | //6A类 | 201 | //6A类 |
| 199 | JZ_INSCODE_6AFRAME_FRAME = 0x10008000, //发送帧 | 202 | JZ_INSCODE_6AFRAME_FRAME = 0x10008000, //发送帧 |
| 200 | 203 | ||
| 204 | + JZ_INSCODE_6AFRAME_DEBUG_INS = 0x10008080, //调试指令 | ||
| 205 | + | ||
| 201 | JZ_INSCODE_6AFRAME_SET_GIMBAL_ORIGIN = 0x10008101, //设置坐标0值 | 206 | JZ_INSCODE_6AFRAME_SET_GIMBAL_ORIGIN = 0x10008101, //设置坐标0值 |
| 202 | JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE = 0x10008102, //设置云台范围最大最小值 | 207 | JZ_INSCODE_6AFRAME_SET_GIMBAL_MAXMIN_RANGE = 0x10008102, //设置云台范围最大最小值 |
| 203 | JZ_INSCODE_6AFRAME_SET_LUMEN_MAXMIN_RANGE = 0x10008103, //设置灯光范围最大最小值 | 208 | JZ_INSCODE_6AFRAME_SET_LUMEN_MAXMIN_RANGE = 0x10008103, //设置灯光范围最大最小值 |
| @@ -3,6 +3,24 @@ | @@ -3,6 +3,24 @@ | ||
| 3 | 3 | ||
| 4 | 4 | ||
| 5 | //一级功能码是私有协议 | 5 | //一级功能码是私有协议 |
| 6 | +static int Comparison_6AFRAME_FirstLevelCode_0x10(char *getdata) | ||
| 7 | +{ | ||
| 8 | + //二级功能位 | ||
| 9 | + switch (getdata[8]) | ||
| 10 | + { | ||
| 11 | + //调试指令 | ||
| 12 | + case 0x00: | ||
| 13 | + return JZ_INSCODE_6AFRAME_DEBUG_INS; | ||
| 14 | + break; | ||
| 15 | + | ||
| 16 | + default: | ||
| 17 | + return JZ_ERROR_SYSTEM_FRAME_ERROR; | ||
| 18 | + break; | ||
| 19 | + } | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | + | ||
| 23 | +//一级功能码是私有协议 | ||
| 6 | static int Comparison_6AFRAME_FirstLevelCode_0x69(char *getdata) | 24 | static int Comparison_6AFRAME_FirstLevelCode_0x69(char *getdata) |
| 7 | { | 25 | { |
| 8 | //二级功能位 | 26 | //二级功能位 |
| @@ -104,6 +122,10 @@ int JZsdk_6AFrameComparsion(char *getdata, int len) | @@ -104,6 +122,10 @@ int JZsdk_6AFrameComparsion(char *getdata, int len) | ||
| 104 | //一级功能码 | 122 | //一级功能码 |
| 105 | switch (getdata[7]) | 123 | switch (getdata[7]) |
| 106 | { | 124 | { |
| 125 | + case 0x10: | ||
| 126 | + return Comparison_6AFRAME_FirstLevelCode_0x10(getdata); | ||
| 127 | + break; | ||
| 128 | + | ||
| 107 | case 0x69: | 129 | case 0x69: |
| 108 | return Comparison_6AFRAME_FirstLevelCode_0x69(getdata); | 130 | return Comparison_6AFRAME_FirstLevelCode_0x69(getdata); |
| 109 | break; | 131 | break; |
| @@ -391,14 +391,23 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | @@ -391,14 +391,23 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) | ||
| 391 | } | 391 | } |
| 392 | break; | 392 | break; |
| 393 | 393 | ||
| 394 | + case JZ_INSCODE_5BFRAME_MUSICLIST_TRANS_2: | ||
| 395 | + { | ||
| 396 | + char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0d, 0x01, 0x00, 0x58, 0x04, 0x00, 0x00, 0x00, 0x00, 0x23}; | ||
| 397 | + memcpy(str, sendbuf, 14); | ||
| 398 | + *str_len = 14; | ||
| 399 | + } | ||
| 400 | + break; | ||
| 401 | + | ||
| 394 | case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE: | 402 | case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE: |
| 395 | { | 403 | { |
| 396 | - char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x01, 0x00, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x23}; | 404 | + char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0d, 0x01, 0x00, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x23}; |
| 397 | memcpy(str, sendbuf, 14); | 405 | memcpy(str, sendbuf, 14); |
| 398 | *str_len = 14; | 406 | *str_len = 14; |
| 399 | } | 407 | } |
| 400 | break; | 408 | break; |
| 401 | 409 | ||
| 410 | + | ||
| 402 | case JZ_INSCODE_5BFRAME_MUSICLIST_STOP: | 411 | case JZ_INSCODE_5BFRAME_MUSICLIST_STOP: |
| 403 | { | 412 | { |
| 404 | char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23}; | 413 | char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23}; |
| @@ -387,7 +387,6 @@ int Main_APP_Uart() | @@ -387,7 +387,6 @@ int Main_APP_Uart() | ||
| 387 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON | 387 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON |
| 388 | //音频库初始化 | 388 | //音频库初始化 |
| 389 | AudioDeal_Init(); | 389 | AudioDeal_Init(); |
| 390 | - | ||
| 391 | #endif | 390 | #endif |
| 392 | 391 | ||
| 393 | if (DEVICE_VERSION == JZ_H1E) | 392 | if (DEVICE_VERSION == JZ_H1E) |
| 1 | #include <stdio.h> | 1 | #include <stdio.h> |
| 2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
| 3 | #include <string.h> | 3 | #include <string.h> |
| 4 | -#include <unistd.h> // 包含getopt函数 | 4 | +#include <unistd.h> |
| 5 | #include <ctype.h> | 5 | #include <ctype.h> |
| 6 | +#include <getopt.h> | ||
| 6 | 7 | ||
| 7 | #include "JZsdkLib.h" | 8 | #include "JZsdkLib.h" |
| 8 | #include "./ParamterParsing.h" | 9 | #include "./ParamterParsing.h" |
| 9 | 10 | ||
| 11 | +/* | ||
| 12 | +struct option { | ||
| 13 | + const char *name; 参数名称 | ||
| 14 | + int has_arg; 指明是否带有参数 | ||
| 15 | + int *flag; flag=NULL时,返回value;不为空时,*flag=val,返回0 | ||
| 16 | + int val; 用于指定函数找到选项的返回值或flag非空时指定*flag的值 | ||
| 17 | +}; | ||
| 18 | + | ||
| 19 | +no_argument 不带参数 如: --version,--help | ||
| 20 | +required_argument 必须带参数 --参数 值 或者 --参数=值。如:--dir=/root | ||
| 21 | +optional_argument 参数可选 只能为:--参数=值 | ||
| 22 | + | ||
| 23 | +char *optstring="ab:c::"; | ||
| 24 | + | ||
| 25 | +运行程序可以给最多三个参数,分别为-a,-b和-c,其中 | ||
| 26 | + | ||
| 27 | +a选项 :因为没有跟冒号,不能有参数,如:-a | ||
| 28 | + | ||
| 29 | +b选项 :因为后面跟了1个冒号,必须有参数,如:-b 100 | ||
| 30 | + | ||
| 31 | +c选项 :因为跟了2个冒号,参数可有可无,如:-c 100 或 -c 都行 | ||
| 32 | + | ||
| 33 | +*/ | ||
| 34 | + | ||
| 35 | +typedef enum parameter{ | ||
| 36 | + PARAMETER_OUT_TIMEFLAG = 0x1010, //备用超时标志位 | ||
| 37 | + PARAMETER_OUT_TIMEOUT = 0x1011, //备用超时时间 | ||
| 38 | + PARAMETER_PLAY_PROMPT_TTS = 0x1012, //播放提示音 | ||
| 39 | +}parameter; | ||
| 40 | + | ||
| 41 | +static const struct option storage_opts[] = { | ||
| 42 | + { "OutFlag", required_argument, 0, PARAMETER_OUT_TIMEFLAG }, //超时标志 | ||
| 43 | + { "OutTime", required_argument, 0, PARAMETER_OUT_TIMEOUT }, //超时时间 | ||
| 44 | + | ||
| 45 | + { "play_prompt_tts", required_argument, NULL, PARAMETER_PLAY_PROMPT_TTS }, //提示选项 | ||
| 46 | + { 0, 0, 0, 0 } | ||
| 47 | +}; | ||
| 48 | + | ||
| 49 | + | ||
| 10 | static int Timeout_flag = JZ_FLAGCODE_OFF; //超时标记位,默认关闭 | 50 | static int Timeout_flag = JZ_FLAGCODE_OFF; //超时标记位,默认关闭 |
| 11 | static int Timeout_time = 60; //超时时间 | 51 | static int Timeout_time = 60; //超时时间 |
| 12 | - | 52 | +unsigned char *g_JZsdkParam_PlayPromptTTS = NULL; //播放提示音 |
| 13 | 53 | ||
| 14 | int JZsdk_ParamterParsing_GetTimeOutFlag() | 54 | int JZsdk_ParamterParsing_GetTimeOutFlag() |
| 15 | { | 55 | { |
| @@ -25,38 +65,68 @@ int JZsdk_ParamterParsing_GetTimeOutTime() | @@ -25,38 +65,68 @@ int JZsdk_ParamterParsing_GetTimeOutTime() | ||
| 25 | * | 65 | * |
| 26 | * * 程序参数解析 | 66 | * * 程序参数解析 |
| 27 | * * 输入:参数字符串 | 67 | * * 输入:参数字符串 |
| 28 | - * | 68 | + * 输出:模式 |
| 69 | + * 目前 模式0 为不开启任何单独功能,即psdk或者串口模式 | ||
| 70 | + * 模式1 为开起喊话器播放模式 | ||
| 29 | * | 71 | * |
| 30 | * ********************************/ | 72 | * ********************************/ |
| 31 | -T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[]) | 73 | +T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mode) |
| 32 | { | 74 | { |
| 33 | JZSDK_LOG_INFO("参数解析"); | 75 | JZSDK_LOG_INFO("参数解析"); |
| 34 | 76 | ||
| 35 | - int c; | ||
| 36 | - | ||
| 37 | - // getopt_long 需要长选项,但这里我们只使用短选项 | ||
| 38 | - // getopt循环将逐个处理选项,直到没有更多选项 | ||
| 39 | - while ((c = getopt(argc, argv, "f:t:")) != -1) | ||
| 40 | - { | ||
| 41 | - switch (c) { | 77 | + int insCode = 0; //指令码 |
| 78 | + | ||
| 79 | + //获取短选项 | ||
| 80 | + static char *opt_storage = "t:f:"; | ||
| 81 | + | ||
| 82 | + //解析参数 | ||
| 83 | + while (1) | ||
| 84 | + { | ||
| 85 | + int opt_index = 0; | ||
| 86 | + insCode = getopt_long(argc, argv, opt_storage, storage_opts, &opt_index); | ||
| 87 | + if (insCode == -1) | ||
| 88 | + break; | ||
| 89 | + | ||
| 90 | + switch (insCode) | ||
| 91 | + { | ||
| 92 | + case PARAMETER_OUT_TIMEFLAG: | ||
| 93 | + printf("备用:outtimeflag:%d \n", atoi(optarg)); | ||
| 94 | + Timeout_flag = atoi(optarg); | ||
| 95 | + break; | ||
| 96 | + case PARAMETER_OUT_TIMEOUT: | ||
| 97 | + printf("备用:time %d \n", atoi(optarg)); | ||
| 98 | + Timeout_time = atoi(optarg); | ||
| 99 | + break; | ||
| 100 | + | ||
| 101 | + //提示音选项 | ||
| 102 | + case PARAMETER_PLAY_PROMPT_TTS: | ||
| 103 | + printf("prompt_option:%s \n", optarg); | ||
| 104 | + g_JZsdkParam_PlayPromptTTS = optarg; | ||
| 105 | + *mode = 1; | ||
| 106 | + break; | ||
| 107 | + | ||
| 42 | case 'f': //超时标记位 | 108 | case 'f': //超时标记位 |
| 43 | Timeout_flag = atoi(optarg); | 109 | Timeout_flag = atoi(optarg); |
| 44 | break; | 110 | break; |
| 45 | case 't': //超时时间 | 111 | case 't': //超时时间 |
| 46 | Timeout_time = atoi(optarg); | 112 | Timeout_time = atoi(optarg); |
| 47 | break; | 113 | break; |
| 48 | - case '?': | 114 | + |
| 115 | + case '?': | ||
| 49 | // 如果getopt遇到一个它不认识的选项,它会打印一个消息到stderr | 116 | // 如果getopt遇到一个它不认识的选项,它会打印一个消息到stderr |
| 50 | // 并返回'?'。然后我们可以选择退出或给出更多帮助。 | 117 | // 并返回'?'。然后我们可以选择退出或给出更多帮助。 |
| 51 | if (isprint(optopt)) | 118 | if (isprint(optopt)) |
| 52 | JZSDK_LOG_ERROR("Unknown option `-%c'.", optopt); | 119 | JZSDK_LOG_ERROR("Unknown option `-%c'.", optopt); |
| 53 | else | 120 | else |
| 54 | JZSDK_LOG_ERROR("Unknown option character `\\x%x'.", optopt); | 121 | JZSDK_LOG_ERROR("Unknown option character `\\x%x'.", optopt); |
| 55 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 56 | - default: | 122 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 57 | break; | 123 | break; |
| 58 | - } | ||
| 59 | - } | 124 | + |
| 125 | + default: | ||
| 126 | + break; | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | + | ||
| 60 | 130 | ||
| 61 | JZSDK_LOG_INFO("参数解析成功"); | 131 | JZSDK_LOG_INFO("参数解析成功"); |
| 62 | 132 |
| @@ -24,7 +24,7 @@ extern "C" { | @@ -24,7 +24,7 @@ extern "C" { | ||
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | /* Exported functions --------------------------------------------------------*/ | 26 | /* Exported functions --------------------------------------------------------*/ |
| 27 | -T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[]); | 27 | +T_JZsdkReturnCode JZsdk_ParamterParsing(int argc, char *argv[], unsigned int *mode); |
| 28 | int JZsdk_ParamterParsing_GetTimeOutFlag(); | 28 | int JZsdk_ParamterParsing_GetTimeOutFlag(); |
| 29 | int JZsdk_ParamterParsing_GetTimeOutTime(); | 29 | int JZsdk_ParamterParsing_GetTimeOutTime(); |
| 30 | 30 |
| @@ -7,25 +7,25 @@ | @@ -7,25 +7,25 @@ | ||
| 7 | #define VERSION_CHOOSE_H | 7 | #define VERSION_CHOOSE_H |
| 8 | #include "./ConfigParams.h" | 8 | #include "./ConfigParams.h" |
| 9 | //1~10行 除了D可以修改版本选择 禁止动任何东西 | 9 | //1~10行 除了D可以修改版本选择 禁止动任何东西 |
| 10 | -#define DEVICE_VERSION JZ_H1E | 10 | +#define DEVICE_VERSION JZ_H150S |
| 11 | 11 | ||
| 12 | //禁止修改行 选择是串口程序 还是 psdk程序 | 12 | //禁止修改行 选择是串口程序 还是 psdk程序 |
| 13 | #define APP_VERSION APP_PSDK | 13 | #define APP_VERSION APP_PSDK |
| 14 | 14 | ||
| 15 | //禁止修改行 板子型号 | 15 | //禁止修改行 板子型号 |
| 16 | -#define PLATFORM_VERSION PLATFORM_V3S | 16 | +#define PLATFORM_VERSION PLATFORM_H3 |
| 17 | 17 | ||
| 18 | //禁止修改行 串口连接程序的软件版本号 | 18 | //禁止修改行 串口连接程序的软件版本号 |
| 19 | #define MAJOR_VERSION 0x01 | 19 | #define MAJOR_VERSION 0x01 |
| 20 | #define MINOR_VERSION 0x03 | 20 | #define MINOR_VERSION 0x03 |
| 21 | #define MODIFY_VERSION 0x09 | 21 | #define MODIFY_VERSION 0x09 |
| 22 | -#define DEBUG_VERSION 0x01 | 22 | +#define DEBUG_VERSION 0x02 |
| 23 | 23 | ||
| 24 | //禁止修改行 滤波方式 | 24 | //禁止修改行 滤波方式 |
| 25 | #define FILTERING_TYPE HIGH_PASS_FILTERING | 25 | #define FILTERING_TYPE HIGH_PASS_FILTERING |
| 26 | 26 | ||
| 27 | //禁止修改行固件属地 目前 国内版/海外版 | 27 | //禁止修改行固件属地 目前 国内版/海外版 |
| 28 | -#define FIRMWARE_ORIGIN OVERSEAS_VERSION | 28 | +#define FIRMWARE_ORIGIN DOMESTIC_VERSION |
| 29 | 29 | ||
| 30 | //禁止修改行指定特殊固件 | 30 | //禁止修改行指定特殊固件 |
| 31 | #define SPECIAL_VERSION SPECIAL_NORMAL | 31 | #define SPECIAL_VERSION SPECIAL_NORMAL |
| @@ -60,6 +60,11 @@ | @@ -60,6 +60,11 @@ | ||
| 60 | #define IRC_CONFIG_STATUS VERSION_SWITCH_OFF | 60 | #define IRC_CONFIG_STATUS VERSION_SWITCH_OFF |
| 61 | #endif | 61 | #endif |
| 62 | 62 | ||
| 63 | + //是否加载ktirclib | ||
| 64 | + #ifdef DMACRO_KTIRC_MODULE | ||
| 65 | + #define KTIRC_LIB_STATUS_ON | ||
| 66 | + #endif | ||
| 67 | + | ||
| 63 | //是否加载usb模块 | 68 | //是否加载usb模块 |
| 64 | #ifdef MACRO_USB_MODULE | 69 | #ifdef MACRO_USB_MODULE |
| 65 | #define USB_CONFIG_STATUS VERSION_SWITCH_ON | 70 | #define USB_CONFIG_STATUS VERSION_SWITCH_ON |
| @@ -76,9 +81,7 @@ | @@ -76,9 +81,7 @@ | ||
| 76 | 81 | ||
| 77 | //是否加载WIRINGPI模块 | 82 | //是否加载WIRINGPI模块 |
| 78 | #ifdef MACRO_WIRINGPI_MODULE | 83 | #ifdef MACRO_WIRINGPI_MODULE |
| 79 | - #define WIRINGPI_STATUS VERSION_SWITCH_ON | ||
| 80 | - #else | ||
| 81 | - #define WIRINGPI_STATUS VERSION_SWITCH_OFF | 84 | + #define WIRINGPI_STATUS_ON |
| 82 | #endif | 85 | #endif |
| 83 | 86 | ||
| 84 | //是否加载侧边激光模块 | 87 | //是否加载侧边激光模块 |
| @@ -86,7 +89,12 @@ | @@ -86,7 +89,12 @@ | ||
| 86 | #define SIDE_LASER_STATUS_ON | 89 | #define SIDE_LASER_STATUS_ON |
| 87 | #endif | 90 | #endif |
| 88 | 91 | ||
| 89 | -#else | 92 | + //是否加载光源模块 |
| 93 | + #ifdef MACRO_LIGHTING_MODULE | ||
| 94 | + #define LIGHTING_STATUS_ON | ||
| 95 | + #endif | ||
| 96 | + | ||
| 97 | +#else //这里用于方便调试使用,不是实际加载的模组 | ||
| 90 | //是否开启喊话器功能 | 98 | //是否开启喊话器功能 |
| 91 | #define MEGAPHONE_CONFIG_STATUS VERSION_SWITCH_ON | 99 | #define MEGAPHONE_CONFIG_STATUS VERSION_SWITCH_ON |
| 92 | 100 | ||
| @@ -103,10 +111,16 @@ | @@ -103,10 +111,16 @@ | ||
| 103 | #define RTK_MPP_STATUS VERSION_SWITCH_ON | 111 | #define RTK_MPP_STATUS VERSION_SWITCH_ON |
| 104 | 112 | ||
| 105 | //是否加载WIRINGPI模块 | 113 | //是否加载WIRINGPI模块 |
| 106 | - #define WIRINGPI_STATUS VERSION_SWITCH_ON | 114 | + #define WIRINGPI_STATUS_ON |
| 107 | 115 | ||
| 108 | //是否加载侧边激光模块 | 116 | //是否加载侧边激光模块 |
| 109 | #define SIDE_LASER_STATUS_ON | 117 | #define SIDE_LASER_STATUS_ON |
| 118 | + | ||
| 119 | + //默认开启ktlib | ||
| 120 | + #define KTIRC_LIB_STATUS_ON | ||
| 121 | + | ||
| 122 | + //默认开启光源模块 | ||
| 123 | + #define LIGHTING_STATUS_ON | ||
| 110 | #endif | 124 | #endif |
| 111 | 125 | ||
| 112 | #endif | 126 | #endif |
| @@ -804,23 +804,27 @@ static int RecvDeal_audio_NextSong(int Port, char *getbuf) | @@ -804,23 +804,27 @@ static int RecvDeal_audio_NextSong(int Port, char *getbuf) | ||
| 804 | **********/ | 804 | **********/ |
| 805 | static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) | 805 | static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) |
| 806 | { | 806 | { |
| 807 | + T_JZsdkReturnCode ret; | ||
| 808 | + | ||
| 807 | JZSDK_LOG_INFO("%s,获取音乐列表",RecvDeal_GetPortName(Port)); | 809 | JZSDK_LOG_INFO("%s,获取音乐列表",RecvDeal_GetPortName(Port)); |
| 808 | int music_sum = 0; | 810 | int music_sum = 0; |
| 809 | 811 | ||
| 810 | //获取帧的序列号 | 812 | //获取帧的序列号 |
| 811 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); | 813 | int FrameSequence = JZsdk_Get_FrameSequence(getbuf); |
| 812 | - | ||
| 813 | - //0、刷新歌曲列表 | 814 | + |
| 814 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON | 815 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON |
| 816 | + | ||
| 817 | + //刷新歌曲列表 | ||
| 815 | Megaphone_Flush_MusicList(); | 818 | Megaphone_Flush_MusicList(); |
| 816 | 819 | ||
| 817 | - JZSDK_LOG_INFO("刷新"); | 820 | + //解析获取的类型 |
| 821 | + int type = getbuf[9]; | ||
| 818 | 822 | ||
| 819 | //1、获取歌曲总数 | 823 | //1、获取歌曲总数 |
| 820 | Megaphone_get_music_list_sum(&music_sum); | 824 | Megaphone_get_music_list_sum(&music_sum); |
| 821 | 825 | ||
| 822 | //2、注册一个歌曲数组 | 826 | //2、注册一个歌曲数组 |
| 823 | - char **MusicName = (char **)malloc(music_sum * sizeof(char*)); | 827 | + unsigned char **MusicName = (unsigned char **)malloc(music_sum * sizeof(unsigned char*)); |
| 824 | if (MusicName == NULL) | 828 | if (MusicName == NULL) |
| 825 | { | 829 | { |
| 826 | //回复操作失败 | 830 | //回复操作失败 |
| @@ -841,7 +845,7 @@ static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) | @@ -841,7 +845,7 @@ static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) | ||
| 841 | //4、为每一首歌曲分配内存 | 845 | //4、为每一首歌曲分配内存 |
| 842 | for (int i = 0; i < music_sum; i++) | 846 | for (int i = 0; i < music_sum; i++) |
| 843 | { | 847 | { |
| 844 | - MusicName[i] = (char*)malloc(128); | 848 | + MusicName[i] = (unsigned char*)malloc(128 * sizeof(unsigned char)); |
| 845 | if (MusicName[i] == NULL) | 849 | if (MusicName[i] == NULL) |
| 846 | { | 850 | { |
| 847 | // 内存分配失败,需要释放之前分配的内存 | 851 | // 内存分配失败,需要释放之前分配的内存 |
| @@ -857,28 +861,78 @@ static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) | @@ -857,28 +861,78 @@ static T_JZsdkReturnCode RecvDeal_audio_GetMusicList(int Port, char *getbuf) | ||
| 857 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 861 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 858 | } | 862 | } |
| 859 | 863 | ||
| 864 | + memset(MusicName[i], 0, 128 * sizeof(unsigned char)); | ||
| 865 | + | ||
| 860 | //如果成功分配内存,则写入名字 | 866 | //如果成功分配内存,则写入名字 |
| 861 | Megaphone_get_music_list_name(i, MusicName[i], &MusicNameLength[i]); | 867 | Megaphone_get_music_list_name(i, MusicName[i], &MusicNameLength[i]); |
| 862 | } | 868 | } |
| 863 | 869 | ||
| 864 | - JZSDK_LOG_INFO("列表取出完成"); | 870 | + JZSDK_LOG_DEBUG("列表取出完成"); |
| 865 | 871 | ||
| 866 | - //开始发送歌曲列表 | ||
| 867 | - T_JZsdkReturnCode ret = JZsdk_Uart_SentDeal_Reply_Musiclist(Port, FrameSequence, music_sum, MusicName, MusicNameLength); | ||
| 868 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 872 | + //默认类型的歌曲列表发送 |
| 873 | + if (type == 0x00) | ||
| 874 | + { | ||
| 875 | + //开始发送歌曲列表 | ||
| 876 | + ret = JZsdk_Uart_SentDeal_Reply_Musiclist(Port, FrameSequence, music_sum, MusicName, MusicNameLength); | ||
| 877 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 878 | + { | ||
| 879 | + for (int i = 0; i < music_sum; i++) | ||
| 880 | + { | ||
| 881 | + free(MusicName[i]); | ||
| 882 | + } | ||
| 883 | + free(MusicNameLength); | ||
| 884 | + free(MusicName); | ||
| 885 | + | ||
| 886 | + //回复操作失败 | ||
| 887 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 888 | + | ||
| 889 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 890 | + } | ||
| 891 | + } | ||
| 892 | + | ||
| 893 | + else if(type == 0x01) | ||
| 869 | { | 894 | { |
| 895 | + //发送开始帧 | ||
| 896 | + ret = JZsdk_Uart_SendDeal_Send_AudioList_Start(Port, FrameSequence, music_sum); | ||
| 897 | + | ||
| 898 | + for (int i = 0; i < music_sum; i++) | ||
| 899 | + { | ||
| 900 | + //获取歌曲详细信息 | ||
| 901 | + struct AudioMange_audio_struct AudioDetailMessage; | ||
| 902 | + memset(&AudioDetailMessage, 0, sizeof(struct AudioMange_audio_struct)); | ||
| 903 | + ret = AudioFile_GetAudioInfo(MusicName[i], MusicNameLength[i],&AudioDetailMessage); | ||
| 904 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 905 | + { | ||
| 906 | + //回复操作失败 | ||
| 907 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 908 | + | ||
| 909 | + continue; | ||
| 910 | + } | ||
| 911 | + | ||
| 912 | + //发送歌曲列表Ⅱ型 | ||
| 913 | + ret = JZsdk_Uart_SendDeal_Send_AudioList_2(Port, FrameSequence, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen, AudioDetailMessage.FileSize, AudioDetailMessage.Time); | ||
| 914 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 915 | + { | ||
| 916 | + //回复操作失败 | ||
| 917 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 918 | + | ||
| 919 | + continue; | ||
| 920 | + } | ||
| 921 | + } | ||
| 922 | + | ||
| 923 | + //释放存储的数据 | ||
| 870 | for (int i = 0; i < music_sum; i++) | 924 | for (int i = 0; i < music_sum; i++) |
| 871 | { | 925 | { |
| 872 | free(MusicName[i]); | 926 | free(MusicName[i]); |
| 873 | } | 927 | } |
| 928 | + | ||
| 874 | free(MusicNameLength); | 929 | free(MusicNameLength); |
| 875 | free(MusicName); | 930 | free(MusicName); |
| 876 | 931 | ||
| 877 | - //回复操作失败 | ||
| 878 | - JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 879 | - | ||
| 880 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 932 | + //发送结束帧 |
| 933 | + ret = JZsdk_Uart_SendDeal_Send_AudioList_Stop(Port, FrameSequence); | ||
| 881 | } | 934 | } |
| 935 | + | ||
| 882 | 936 | ||
| 883 | #endif | 937 | #endif |
| 884 | 938 | ||
| @@ -917,90 +971,87 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char | @@ -917,90 +971,87 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char | ||
| 917 | 971 | ||
| 918 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON | 972 | #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON |
| 919 | 973 | ||
| 920 | -if (ListBelong == 0) | ||
| 921 | -{ | ||
| 922 | - //1、检查歌曲是否存在 | ||
| 923 | - ret = AudioFile_CheckFile_WhetherInList(AudioName,AudioNameLength); | ||
| 924 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 974 | + if (ListBelong == 0) |
| 925 | { | 975 | { |
| 926 | - //回复操作失败 | ||
| 927 | - JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 928 | - | ||
| 929 | - return ret; | ||
| 930 | - } | ||
| 931 | - | ||
| 932 | - //2、获取歌曲详细信息 | ||
| 933 | - struct AudioMange_audio_struct AudioDetailMessage; | ||
| 934 | - ret = AudioFile_GetAudioInfo(AudioName, AudioNameLength,&AudioDetailMessage); | ||
| 935 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 936 | - { | ||
| 937 | - //回复操作失败 | ||
| 938 | - JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | 976 | + //1、检查歌曲是否存在 |
| 977 | + ret = AudioFile_CheckFile_WhetherInList(AudioName,AudioNameLength); | ||
| 978 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 979 | + { | ||
| 980 | + //回复操作失败 | ||
| 981 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 939 | 982 | ||
| 940 | - return ret; | ||
| 941 | - } | 983 | + return ret; |
| 984 | + } | ||
| 985 | + | ||
| 986 | + //2、获取歌曲详细信息 | ||
| 987 | + struct AudioMange_audio_struct AudioDetailMessage; | ||
| 988 | + ret = AudioFile_GetAudioInfo(AudioName, AudioNameLength,&AudioDetailMessage); | ||
| 989 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 990 | + { | ||
| 991 | + //回复操作失败 | ||
| 992 | + JZsdk_Uart_SendDeal_Reply_Failure(Port, FrameSequence); | ||
| 942 | 993 | ||
| 943 | - //获取文件的md5码 | ||
| 944 | - unsigned char md5[16]; | ||
| 945 | - unsigned char cmd[256]; | ||
| 946 | - snprintf(cmd, sizeof(cmd), "md5sum /root/sdcard/audio/%s", AudioDetailMessage.FileName); | ||
| 947 | - JZsdk_RunSystemCmd_ReturnResult_Str(cmd, md5); | 994 | + return ret; |
| 995 | + } | ||
| 948 | 996 | ||
| 949 | - //3、发送歌曲详细信息 | ||
| 950 | - // JZSDK_LOG_INFO("即将发送%s, %d, %d, %s", | ||
| 951 | - // AudioDetailMessage.FileName, AudioDetailMessage.FileSize, AudioDetailMessage.Time, md5); | 997 | + //获取文件的md5码 |
| 998 | + unsigned char md5[16]; | ||
| 999 | + unsigned char cmd[256]; | ||
| 1000 | + snprintf(cmd, sizeof(cmd), "md5sum /root/sdcard/audio/%s", AudioDetailMessage.FileName); | ||
| 1001 | + JZsdk_RunSystemCmd_ReturnResult_Str(cmd, md5); | ||
| 952 | 1002 | ||
| 953 | - //要求所有信息 | ||
| 954 | - if (QueryContent == 0) | ||
| 955 | - { | ||
| 956 | - //发送名字 | ||
| 957 | - JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x00, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen); | 1003 | + //3、发送歌曲详细信息 |
| 1004 | + // JZSDK_LOG_INFO("即将发送%s, %d, %d, %s", | ||
| 1005 | + // AudioDetailMessage.FileName, AudioDetailMessage.FileSize, AudioDetailMessage.Time, md5); | ||
| 958 | 1006 | ||
| 959 | - //文件大小 | ||
| 960 | - unsigned char str1[4]; | ||
| 961 | - str1[0] = (AudioDetailMessage.FileSize >> 24) & 0xFF; | ||
| 962 | - str1[1] = (AudioDetailMessage.FileSize >> 16) & 0xFF; | ||
| 963 | - str1[2] = (AudioDetailMessage.FileSize >> 8) & 0xFF; | ||
| 964 | - str1[3] = AudioDetailMessage.FileSize & 0xFF; | 1007 | + //要求所有信息 |
| 1008 | + if (QueryContent == 0) | ||
| 1009 | + { | ||
| 1010 | + //发送名字 | ||
| 1011 | + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x00, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen); | ||
| 965 | 1012 | ||
| 966 | - JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x01, str1, sizeof(str1)); | 1013 | + //文件大小 |
| 1014 | + unsigned char str1[4]; | ||
| 1015 | + str1[0] = (AudioDetailMessage.FileSize >> 24) & 0xFF; | ||
| 1016 | + str1[1] = (AudioDetailMessage.FileSize >> 16) & 0xFF; | ||
| 1017 | + str1[2] = (AudioDetailMessage.FileSize >> 8) & 0xFF; | ||
| 1018 | + str1[3] = AudioDetailMessage.FileSize & 0xFF; | ||
| 967 | 1019 | ||
| 968 | - //播放时间 | ||
| 969 | - unsigned char str2[4]; | ||
| 970 | - str2[0] = (AudioDetailMessage.Time >> 8) & 0xFF; | ||
| 971 | - str2[1] = AudioDetailMessage.Time & 0xFF; | 1020 | + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x01, str1, sizeof(str1)); |
| 972 | 1021 | ||
| 973 | - JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x02, str2, sizeof(str2)); | ||
| 974 | - } | ||
| 975 | - else if (QueryContent == 0x01) | ||
| 976 | - { | ||
| 977 | - //文件大小 | ||
| 978 | - unsigned char str1[4]; | ||
| 979 | - str1[0] = (AudioDetailMessage.FileSize >> 24) & 0xFF; | ||
| 980 | - str1[1] = (AudioDetailMessage.FileSize >> 16) & 0xFF; | ||
| 981 | - str1[2] = (AudioDetailMessage.FileSize >> 8) & 0xFF; | ||
| 982 | - str1[3] = AudioDetailMessage.FileSize & 0xFF; | 1022 | + //播放时间 |
| 1023 | + unsigned char str2[4]; | ||
| 1024 | + str2[0] = (AudioDetailMessage.Time >> 8) & 0xFF; | ||
| 1025 | + str2[1] = AudioDetailMessage.Time & 0xFF; | ||
| 983 | 1026 | ||
| 984 | - JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x01, str1, sizeof(str1)); | ||
| 985 | - } | ||
| 986 | - else if (QueryContent == 0x02) | ||
| 987 | - { | ||
| 988 | - //播放时间 | ||
| 989 | - unsigned char str2[4]; | ||
| 990 | - str2[0] = (AudioDetailMessage.Time >> 8) & 0xFF; | ||
| 991 | - str2[1] = AudioDetailMessage.Time & 0xFF; | 1027 | + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x02, str2, sizeof(str2)); |
| 1028 | + } | ||
| 1029 | + else if (QueryContent == 0x01) | ||
| 1030 | + { | ||
| 1031 | + //文件大小 | ||
| 1032 | + unsigned char str1[4]; | ||
| 1033 | + str1[0] = (AudioDetailMessage.FileSize >> 24) & 0xFF; | ||
| 1034 | + str1[1] = (AudioDetailMessage.FileSize >> 16) & 0xFF; | ||
| 1035 | + str1[2] = (AudioDetailMessage.FileSize >> 8) & 0xFF; | ||
| 1036 | + str1[3] = AudioDetailMessage.FileSize & 0xFF; | ||
| 1037 | + | ||
| 1038 | + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x01, str1, sizeof(str1)); | ||
| 1039 | + } | ||
| 1040 | + else if (QueryContent == 0x02) | ||
| 1041 | + { | ||
| 1042 | + //播放时间 | ||
| 1043 | + unsigned char str2[4]; | ||
| 1044 | + str2[0] = (AudioDetailMessage.Time >> 8) & 0xFF; | ||
| 1045 | + str2[1] = AudioDetailMessage.Time & 0xFF; | ||
| 992 | 1046 | ||
| 993 | - JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x02, str2, sizeof(str2)); | ||
| 994 | - } | ||
| 995 | - else if (QueryContent == 0x20) | ||
| 996 | - { | ||
| 997 | - //发送md5码 | ||
| 998 | - JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x20, md5, sizeof(md5)); | 1047 | + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x02, str2, sizeof(str2)); |
| 1048 | + } | ||
| 1049 | + else if (QueryContent == 0x20) | ||
| 1050 | + { | ||
| 1051 | + //发送md5码 | ||
| 1052 | + JZsdk_Uart_SendDeal_Send_AudioDetailMessage(Port, FrameSequence, 0x20, md5, sizeof(md5)); | ||
| 1053 | + } | ||
| 999 | } | 1054 | } |
| 1000 | - | ||
| 1001 | -} | ||
| 1002 | - | ||
| 1003 | - | ||
| 1004 | 1055 | ||
| 1005 | #endif | 1056 | #endif |
| 1006 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1057 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| @@ -2986,6 +3037,28 @@ static int RecvDeal_SetGimbalRange(int Port, char *getbuf) | @@ -2986,6 +3037,28 @@ static int RecvDeal_SetGimbalRange(int Port, char *getbuf) | ||
| 2986 | } | 3037 | } |
| 2987 | } | 3038 | } |
| 2988 | 3039 | ||
| 3040 | +/*************** | ||
| 3041 | + * | ||
| 3042 | + * 调试指令 | ||
| 3043 | + * | ||
| 3044 | + * **************/ | ||
| 3045 | +static T_JZsdkReturnCode RecvDeal_DebugIns(int Port, char *getbuf) | ||
| 3046 | +{ | ||
| 3047 | + JZSDK_LOG_INFO("%s,调试指令",RecvDeal_GetPortName(Port)); | ||
| 3048 | + | ||
| 3049 | + //解析参数 | ||
| 3050 | + int len = getbuf[4] + ((int)getbuf[3]) << 8; | ||
| 3051 | + int InsLen = len - 11 - 1; | ||
| 3052 | + | ||
| 3053 | + // int pwm = (((int)getbuf[9]) << 8 ) + getbuf[10]; | ||
| 3054 | + // H3_ircut_pwm(pwm); | ||
| 3055 | + | ||
| 3056 | + // int pwm = (((int)getbuf[9]) << 8 ) + getbuf[10]; | ||
| 3057 | + // Ircut_PWM_control(pwm); | ||
| 3058 | + | ||
| 3059 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 3060 | +} | ||
| 3061 | + | ||
| 2989 | /********* | 3062 | /********* |
| 2990 | * | 3063 | * |
| 2991 | * 设置云台联动 | 3064 | * 设置云台联动 |
| @@ -3861,6 +3934,12 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in | @@ -3861,6 +3934,12 @@ int RecvDeal_InstructInput(int Port, int Receive_mode, unsigned char *getbuf, in | ||
| 3861 | * 6A类部分 | 3934 | * 6A类部分 |
| 3862 | * | 3935 | * |
| 3863 | * *******************************************************************************************************************************/ | 3936 | * *******************************************************************************************************************************/ |
| 3937 | + //debug调试 | ||
| 3938 | + case JZ_INSCODE_6AFRAME_DEBUG_INS: | ||
| 3939 | + RecvDeal_DebugIns(Port,getbuf); | ||
| 3940 | + return 0; | ||
| 3941 | + break; | ||
| 3942 | + | ||
| 3864 | //云台联动控制 | 3943 | //云台联动控制 |
| 3865 | case JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL: | 3944 | case JZ_INSCODE_6AFRAME_GIMBAL_LINKAGE_CONTROL: |
| 3866 | RecvDeal_GimbalLinkageControl(Port,getbuf); | 3945 | RecvDeal_GimbalLinkageControl(Port,getbuf); |
| @@ -377,7 +377,7 @@ static void JZsdk_Uart_SentDeal_Reply_Musiclist_Task(void *data) | @@ -377,7 +377,7 @@ static void JZsdk_Uart_SentDeal_Reply_Musiclist_Task(void *data) | ||
| 377 | JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_MUSICLIST_STOP , sendbuf, &send_buf_len); | 377 | JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_MUSICLIST_STOP , sendbuf, &send_buf_len); |
| 378 | //写入数据 | 378 | //写入数据 |
| 379 | sendbuf[6] = taskData->FrameSequence; //帧序列 | 379 | sendbuf[6] = taskData->FrameSequence; //帧序列 |
| 380 | - sendbuf[9] = taskData->music_sum; | 380 | + sendbuf[9] = 0x00; |
| 381 | //发送帧 | 381 | //发送帧 |
| 382 | printf("发送歌曲结束列表"); | 382 | printf("发送歌曲结束列表"); |
| 383 | JZsdk_Uart_UartSend_NotTask(taskData->UartPort ,sendbuf, send_buf_len); | 383 | JZsdk_Uart_UartSend_NotTask(taskData->UartPort ,sendbuf, send_buf_len); |
| @@ -397,6 +397,7 @@ static void JZsdk_Uart_SentDeal_Reply_Musiclist_Task(void *data) | @@ -397,6 +397,7 @@ static void JZsdk_Uart_SentDeal_Reply_Musiclist_Task(void *data) | ||
| 397 | taskData = NULL; | 397 | taskData = NULL; |
| 398 | } | 398 | } |
| 399 | 399 | ||
| 400 | +//发送歌曲列表Ⅰ型 | ||
| 400 | T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSequence, int music_sum ,char **MusicName ,int *MusicNameLength) | 401 | T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSequence, int music_sum ,char **MusicName ,int *MusicNameLength) |
| 401 | { | 402 | { |
| 402 | struct JZsdk_MusicListSentStruct *musicList = (struct JZsdk_MusicListSentStruct *)malloc(sizeof(struct JZsdk_MusicListSentStruct)); | 403 | struct JZsdk_MusicListSentStruct *musicList = (struct JZsdk_MusicListSentStruct *)malloc(sizeof(struct JZsdk_MusicListSentStruct)); |
| @@ -422,6 +423,85 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq | @@ -422,6 +423,85 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq | ||
| 422 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 423 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 423 | } | 424 | } |
| 424 | 425 | ||
| 426 | +//发送歌曲列表开始帧 | ||
| 427 | +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioList_Start(int Uartport, int FrameSequence, int music_sum) | ||
| 428 | +{ | ||
| 429 | + printf("发送歌曲开始列表帧\n"); | ||
| 430 | + | ||
| 431 | + unsigned char sendbuf[128]; | ||
| 432 | + int send_buf_len; | ||
| 433 | + | ||
| 434 | + //获取帧样板 | ||
| 435 | + memset(sendbuf,0,sizeof(sendbuf)); | ||
| 436 | + JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_MUSICLIST_START , sendbuf, &send_buf_len); | ||
| 437 | + //写入数据 | ||
| 438 | + sendbuf[6] = FrameSequence; //帧序列 | ||
| 439 | + sendbuf[9] = music_sum; | ||
| 440 | + | ||
| 441 | + //发送帧 | ||
| 442 | + JZsdk_Uart_UartSend_NotTask(Uartport ,sendbuf, send_buf_len); | ||
| 443 | + | ||
| 444 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 445 | +} | ||
| 446 | + | ||
| 447 | +//发送歌曲列表结束帧 | ||
| 448 | +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioList_Stop(int Uartport, int FrameSequence) | ||
| 449 | +{ | ||
| 450 | + printf("发送歌曲结束列表帧\n"); | ||
| 451 | + | ||
| 452 | + unsigned char sendbuf[128]; | ||
| 453 | + int send_buf_len; | ||
| 454 | + | ||
| 455 | + //获取帧样板 | ||
| 456 | + memset(sendbuf,0,sizeof(sendbuf)); | ||
| 457 | + JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_MUSICLIST_STOP , sendbuf, &send_buf_len); | ||
| 458 | + //写入数据 | ||
| 459 | + sendbuf[6] = FrameSequence; //帧序列 | ||
| 460 | + | ||
| 461 | + JZsdk_Uart_UartSend_NotTask(Uartport ,sendbuf, send_buf_len); | ||
| 462 | +} | ||
| 463 | + | ||
| 464 | +//发送歌曲列表Ⅱ型 | ||
| 465 | +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioList_2(int Uartport, int FrameSequence, unsigned char *name, unsigned int namelen, unsigned int Filesize, unsigned int Time) | ||
| 466 | +{ | ||
| 467 | + printf("发送歌曲列表Ⅱ型 %s %d %d %d\n",name, namelen, Filesize, Time); | ||
| 468 | + unsigned char sendbuf[400]; | ||
| 469 | + int send_buf_len; | ||
| 470 | + | ||
| 471 | + //1、获取帧样板 | ||
| 472 | + JZsdk_GetFrameTemplate(JZ_INSCODE_5BFRAME_MUSICLIST_TRANS_2 , sendbuf, &send_buf_len); | ||
| 473 | + | ||
| 474 | + //写入文件名 | ||
| 475 | + sendbuf[9] = namelen; | ||
| 476 | + memcpy(&sendbuf[10], name, namelen); | ||
| 477 | + | ||
| 478 | + //文件大小 | ||
| 479 | + sendbuf[10+namelen] = (Filesize >> 24) & 0xFF; | ||
| 480 | + sendbuf[10+namelen+1] = (Filesize >> 16) & 0xFF; | ||
| 481 | + sendbuf[10+namelen+2] = (Filesize >> 8) & 0xFF; | ||
| 482 | + sendbuf[10+namelen+3] = Filesize & 0xFF; | ||
| 483 | + | ||
| 484 | + //播放时间 | ||
| 485 | + sendbuf[10+namelen+4] = (Time >> 8) & 0xFF; | ||
| 486 | + sendbuf[10+namelen+5] = Time & 0xFF; | ||
| 487 | + | ||
| 488 | + //2、写入数据 | ||
| 489 | + send_buf_len = 9 + 1 + namelen + 4 + 2 + 2; | ||
| 490 | + | ||
| 491 | + sendbuf[3] = (unsigned char)( (send_buf_len >> 8) & 0xFF); //帧长度 | ||
| 492 | + sendbuf[4] = (unsigned char)(send_buf_len & 0xFF); //帧长度 | ||
| 493 | + sendbuf[6] = FrameSequence; //帧序列 | ||
| 494 | + | ||
| 495 | + sendbuf[send_buf_len-2] = 0x00; | ||
| 496 | + sendbuf[send_buf_len-1] = 0x23; | ||
| 497 | + | ||
| 498 | + //3、发送帧 | ||
| 499 | + JZsdk_Uart_UartSend_NotTask(Uartport ,sendbuf, send_buf_len); | ||
| 500 | + | ||
| 501 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 502 | +} | ||
| 503 | + | ||
| 504 | + | ||
| 425 | //发送音频详细信息帧 | 505 | //发送音频详细信息帧 |
| 426 | T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport, int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen) | 506 | T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport, int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen) |
| 427 | { | 507 | { |
| @@ -681,9 +761,6 @@ int JZsdk_Uart_SendDeal_Set_GimbalPitchAngle(int Uartport ,int angle) | @@ -681,9 +761,6 @@ int JZsdk_Uart_SendDeal_Set_GimbalPitchAngle(int Uartport ,int angle) | ||
| 681 | //1、获取帧样板 | 761 | //1、获取帧样板 |
| 682 | JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL, sendbuf, &send_buf_len); | 762 | JZsdk_GetFrameTemplate(JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL, sendbuf, &send_buf_len); |
| 683 | 763 | ||
| 684 | - //char sendbuf[14] = {0x5A ,0x5A ,0x77 ,0x00 ,0x0E ,0x00 ,0x00 ,0x64 ,0x51 ,0x00 ,0x00 ,0x00 ,0x00 ,0x23}; | ||
| 685 | - //send_buf_len = 14; | ||
| 686 | - | ||
| 687 | //2、写入数据 | 764 | //2、写入数据 |
| 688 | if (angle < 0) | 765 | if (angle < 0) |
| 689 | { | 766 | { |
| @@ -46,7 +46,12 @@ T_JZsdkReturnCode JZsdk_Uart_SendDeal_Reply_DecodeError(int Uartport ,int FrameS | @@ -46,7 +46,12 @@ T_JZsdkReturnCode JZsdk_Uart_SendDeal_Reply_DecodeError(int Uartport ,int FrameS | ||
| 46 | 46 | ||
| 47 | int JZsdk_Uart_SendDeal_Reply_Failure(int Uartport ,int FrameSequence); | 47 | int JZsdk_Uart_SendDeal_Reply_Failure(int Uartport ,int FrameSequence); |
| 48 | T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSequence, int music_sum ,char **MusicName ,int *MusicNameLength); | 48 | T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSequence, int music_sum ,char **MusicName ,int *MusicNameLength); |
| 49 | +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioList_2(int Uartport, int FrameSequence, unsigned char *name, unsigned int namelen, unsigned int Filesize, unsigned int Time); | ||
| 49 | T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport,int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen); | 50 | T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport,int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen); |
| 51 | +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioList_Start(int Uartport, int FrameSequence, int music_sum); | ||
| 52 | +T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioList_Stop(int Uartport, int FrameSequence); | ||
| 53 | + | ||
| 54 | + | ||
| 50 | 55 | ||
| 51 | int JZsdk_Uart_SendDeal_Send_PlayStatus_end(int Uartport); | 56 | int JZsdk_Uart_SendDeal_Send_PlayStatus_end(int Uartport); |
| 52 | int JZsdk_Uart_SendDeal_Send_PlayStatus(int Uartport ,int num); | 57 | int JZsdk_Uart_SendDeal_Send_PlayStatus(int Uartport ,int num); |
| @@ -36,7 +36,7 @@ struct FF_Filter | @@ -36,7 +36,7 @@ struct FF_Filter | ||
| 36 | 36 | ||
| 37 | }FF_Filter; | 37 | }FF_Filter; |
| 38 | 38 | ||
| 39 | -static int g_FilterFlag = JZ_FLAGCODE_ON; | 39 | +static int g_FilterFlag = JZ_FLAGCODE_OFF; |
| 40 | static int FilterParamNumber = 0; | 40 | static int FilterParamNumber = 0; |
| 41 | static int g_FilterMode = 0; //滤波模式 0为默认 1为m30 | 41 | static int g_FilterMode = 0; //滤波模式 0为默认 1为m30 |
| 42 | static int g_FilterType = 0; //滤波类型 0为默认 | 42 | static int g_FilterType = 0; //滤波类型 0为默认 |
| @@ -42,6 +42,9 @@ static int g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_OFF; //云台状态,用于 | @@ -42,6 +42,9 @@ static int g_JZsdk_GimbalStatusFlag = JZ_FLAGCODE_OFF; //云台状态,用于 | ||
| 42 | 42 | ||
| 43 | static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, int UAV_pitch); | 43 | static T_JZsdkReturnCode Gimbal_Set_RealPitchAngle(int pitch, int FineTuningP, int UAV_pitch); |
| 44 | 44 | ||
| 45 | +//手动刷新角度标志位 | ||
| 46 | +static int g_Flush_Pitch = JZ_FLAGCODE_OFF; | ||
| 47 | + | ||
| 45 | /************************** | 48 | /************************** |
| 46 | * | 49 | * |
| 47 | * | 50 | * |
| @@ -64,11 +67,13 @@ static void *Gimbal_SendAngleTask(void *arg) | @@ -64,11 +67,13 @@ static void *Gimbal_SendAngleTask(void *arg) | ||
| 64 | if (Gimbal_PitchAngle != Old_angle //云台角度发生了变化 | 67 | if (Gimbal_PitchAngle != Old_angle //云台角度发生了变化 |
| 65 | || Gimbal_UavSelfPitch != Old_UAV_self_angle //飞机自身角度发生了变化 | 68 | || Gimbal_UavSelfPitch != Old_UAV_self_angle //飞机自身角度发生了变化 |
| 66 | || g_MotorFineTuningPitch != Old_PitchFineTuning //微调角度发生了变化 | 69 | || g_MotorFineTuningPitch != Old_PitchFineTuning //微调角度发生了变化 |
| 70 | + || g_Flush_Pitch == JZ_FLAGCODE_ON | ||
| 67 | ) | 71 | ) |
| 68 | { | 72 | { |
| 69 | Old_angle = Gimbal_PitchAngle; | 73 | Old_angle = Gimbal_PitchAngle; |
| 70 | Old_UAV_self_angle = Gimbal_UavSelfPitch; | 74 | Old_UAV_self_angle = Gimbal_UavSelfPitch; |
| 71 | Old_PitchFineTuning = g_MotorFineTuningPitch; | 75 | Old_PitchFineTuning = g_MotorFineTuningPitch; |
| 76 | + g_Flush_Pitch = JZ_FLAGCODE_OFF; | ||
| 72 | Gimbal_Set_RealPitchAngle(Old_angle, Old_PitchFineTuning, Old_UAV_self_angle); | 77 | Gimbal_Set_RealPitchAngle(Old_angle, Old_PitchFineTuning, Old_UAV_self_angle); |
| 73 | } | 78 | } |
| 74 | 79 | ||
| @@ -103,6 +108,8 @@ static T_JZsdkReturnCode Gimal_MotorInit() | @@ -103,6 +108,8 @@ static T_JZsdkReturnCode Gimal_MotorInit() | ||
| 103 | //数据处理初始化 | 108 | //数据处理初始化 |
| 104 | Gimbal_DataDeal_init(); | 109 | Gimbal_DataDeal_init(); |
| 105 | 110 | ||
| 111 | + JZSDK_LOG_INFO("MODULE_GIMBAL_MOTOR_INIT_COMPLETE"); | ||
| 112 | + | ||
| 106 | } | 113 | } |
| 107 | 114 | ||
| 108 | //初始化云台模块 | 115 | //初始化云台模块 |
| @@ -239,23 +246,25 @@ T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch) | @@ -239,23 +246,25 @@ T_JZsdkReturnCode Gimbal_Set_PitchFineTuning(int pitch) | ||
| 239 | } | 246 | } |
| 240 | 247 | ||
| 241 | //设置本地微调值 | 248 | //设置本地微调值 |
| 242 | - g_MotorFineTuningPitch = g_MotorFineTuningPitch + pitch; | ||
| 243 | - | ||
| 244 | - //组合机是发到另外一个设备 | ||
| 245 | -#if DEVICE_VERSION == JZ_H1T | ||
| 246 | - JZsdk_Uart_Send_SetGimbalFineTuningPitch(UART_DEV_1, g_MotorFineTuningPitch); | ||
| 247 | -#else | 249 | + int temp_pitch = g_MotorFineTuningPitch + pitch; |
| 248 | //微调值要小于20度 | 250 | //微调值要小于20度 |
| 249 | - if (g_MotorFineTuningPitch >= 200) | 251 | + if (temp_pitch >= 200) |
| 250 | { | 252 | { |
| 251 | - g_MotorFineTuningPitch = 200; | 253 | + temp_pitch = 200; |
| 252 | } | 254 | } |
| 253 | 255 | ||
| 254 | - if (g_MotorFineTuningPitch <= -200) | 256 | + if (temp_pitch <= -200) |
| 255 | { | 257 | { |
| 256 | - g_MotorFineTuningPitch = -200; | 258 | + temp_pitch = -200; |
| 257 | } | 259 | } |
| 258 | 260 | ||
| 261 | + g_MotorFineTuningPitch = temp_pitch; | ||
| 262 | + | ||
| 263 | + //组合机是发到另外一个设备 | ||
| 264 | +#if DEVICE_VERSION == JZ_H1T | ||
| 265 | + JZsdk_Uart_Send_SetGimbalFineTuningPitch(UART_DEV_1, g_MotorFineTuningPitch); | ||
| 266 | +#else | ||
| 267 | + | ||
| 259 | //存储到文件 | 268 | //存储到文件 |
| 260 | MotorFineTuning_WritePitch(g_MotorFineTuningPitch); | 269 | MotorFineTuning_WritePitch(g_MotorFineTuningPitch); |
| 261 | #endif | 270 | #endif |
| @@ -542,4 +551,11 @@ int Gimbal_Get_PitchFineTuning() | @@ -542,4 +551,11 @@ int Gimbal_Get_PitchFineTuning() | ||
| 542 | int Gimbal_Get_PitchRealPitchAngle() | 551 | int Gimbal_Get_PitchRealPitchAngle() |
| 543 | { | 552 | { |
| 544 | return Gimbal_RealPitchAngle; | 553 | return Gimbal_RealPitchAngle; |
| 554 | +} | ||
| 555 | + | ||
| 556 | +T_JZsdkReturnCode Gimbal_Flush_Pitch() | ||
| 557 | +{ | ||
| 558 | + g_Flush_Pitch = JZ_FLAGCODE_ON; | ||
| 559 | + | ||
| 560 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 545 | } | 561 | } |
| @@ -53,6 +53,7 @@ int Gimbal_ReplyPitchToUAVScale(int angle); | @@ -53,6 +53,7 @@ int Gimbal_ReplyPitchToUAVScale(int angle); | ||
| 53 | int Gimbal_Get_PitchAngle(); | 53 | int Gimbal_Get_PitchAngle(); |
| 54 | int Gimbal_Get_PitchFineTuning(); | 54 | int Gimbal_Get_PitchFineTuning(); |
| 55 | int Gimbal_Get_PitchRealPitchAngle(); | 55 | int Gimbal_Get_PitchRealPitchAngle(); |
| 56 | +T_JZsdkReturnCode Gimbal_Flush_Pitch(); | ||
| 56 | 57 | ||
| 57 | #ifdef __cplusplus | 58 | #ifdef __cplusplus |
| 58 | } | 59 | } |
| @@ -10,15 +10,23 @@ | @@ -10,15 +10,23 @@ | ||
| 10 | 10 | ||
| 11 | #include "JZsdk_TaskManagement/TaskManagement.h" | 11 | #include "JZsdk_TaskManagement/TaskManagement.h" |
| 12 | #include "Gimbal_SpecialUart/Gimbal_SpecialUart.h" | 12 | #include "Gimbal_SpecialUart/Gimbal_SpecialUart.h" |
| 13 | +#include "../Gimbal_Param.h" | ||
| 13 | 14 | ||
| 14 | #if WIRINGPI_STATUS == VERSION_SWITCH_ON | 15 | #if WIRINGPI_STATUS == VERSION_SWITCH_ON |
| 15 | #include <wiringPi.h> | 16 | #include <wiringPi.h> |
| 16 | #endif | 17 | #endif |
| 17 | 18 | ||
| 19 | +#define PITCH_OFFSET_FILE_PATH "/root/Gimbal_Pitch_BaseOffset" | ||
| 20 | + | ||
| 21 | +static T_JZsdkReturnCode Gimbal_DataDeal_Read_PitchBaseOffset(int *offset); | ||
| 22 | +static T_JZsdkReturnCode Gimbal_DataDeal_Write_PitchBaseOffset(int offset); | ||
| 23 | + | ||
| 24 | + | ||
| 25 | +static int g_Gimbal_Pitch_BaseOffset = 0; //云台俯仰基准偏移量 | ||
| 18 | 26 | ||
| 19 | /****************** | 27 | /****************** |
| 20 | * | 28 | * |
| 21 | - | 29 | + * 初始化 |
| 22 | * | 30 | * |
| 23 | * **************/ | 31 | * **************/ |
| 24 | T_JZsdkReturnCode Gimbal_DataDeal_init() | 32 | T_JZsdkReturnCode Gimbal_DataDeal_init() |
| @@ -37,7 +45,12 @@ T_JZsdkReturnCode Gimbal_DataDeal_init() | @@ -37,7 +45,12 @@ T_JZsdkReturnCode Gimbal_DataDeal_init() | ||
| 37 | //不需特地初始化 | 45 | //不需特地初始化 |
| 38 | #elif DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_C1 | 46 | #elif DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_C1 |
| 39 | // 不用去特地初始化t60的云台 | 47 | // 不用去特地初始化t60的云台 |
| 40 | -#elif DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T || DEVICE_VERSION == JZ_U3 \ | 48 | +#elif DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T |
| 49 | + | ||
| 50 | + //H10 H10T需要去读取云台偏移量 | ||
| 51 | + Gimbal_DataDeal_Read_PitchBaseOffset(&g_Gimbal_Pitch_BaseOffset); | ||
| 52 | + | ||
| 53 | +#elif DEVICE_VERSION == JZ_U3 \ | ||
| 41 | || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 || DEVICE_VERSION == TF_A1 | 54 | || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 || DEVICE_VERSION == TF_A1 |
| 42 | //设置0度 | 55 | //设置0度 |
| 43 | 56 | ||
| @@ -66,33 +79,35 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle) | @@ -66,33 +79,35 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle) | ||
| 66 | 79 | ||
| 67 | Gimbal_SpecialUart_UartSend(send_angle, 4); | 80 | Gimbal_SpecialUart_UartSend(send_angle, 4); |
| 68 | #elif DEVICE_VERSION == JZ_H10 | 81 | #elif DEVICE_VERSION == JZ_H10 |
| 69 | - int base = 200; | ||
| 70 | - //完整计算公式 | ||
| 71 | - //angle_PWM = base + angle*195/((abs(MAX_PITCH)+abs(MIN_PITCH))) | 82 | + //因为PWM写的时候是按90度写的,所以分母是900,不是设定的600 |
| 83 | + int base_offset = g_Gimbal_Pitch_BaseOffset; | ||
| 84 | + //最大最小值的偏移量 //正整数时,则总体角度向0偏移 为负数时,向-900便宜 | ||
| 85 | + //计算方法 设置最小角度时 为 PwM - 195 - 200 //设置最大角度时 为 PwM - 0 - 200 | ||
| 86 | + int base = 200; //0度 | ||
| 72 | 87 | ||
| 73 | - //简化为 | ||
| 74 | - angle_PWM = base + angle*195/MIN_PITCH; | 88 | + //每43.5对饮20度 |
| 75 | 89 | ||
| 90 | + //完整计算公式 | ||
| 91 | + //angle_PWM = base + angle*195/((abs(MAX_PITCH) + abs(MIN_PITCH))) | ||
| 76 | //上调15度 | 92 | //上调15度 |
| 77 | //angle_PWM = 200 -angle*195/900 -150*195/900; //上调15度 | 93 | //angle_PWM = 200 -angle*195/900 -150*195/900; //上调15度 |
| 78 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 79 | - pwmWrite(18,angle_PWM); | 94 | + |
| 95 | + //简化为 | ||
| 96 | + //angle_PWM =base + base_offset +angle*195/MIN_PITCH; | ||
| 97 | + angle_PWM =base + base_offset +angle*195/(-900); | ||
| 98 | + | ||
| 99 | +#ifdef WIRINGPI_STATUS_ON | ||
| 100 | + H3_ircut_pwm(angle_PWM); | ||
| 80 | #endif | 101 | #endif |
| 81 | 102 | ||
| 82 | #elif DEVICE_VERSION == JZ_H10T | 103 | #elif DEVICE_VERSION == JZ_H10T |
| 83 | - //因为PWM写的时候是按90度写的,所以分母是900,不是设定的600 | ||
| 84 | - PWM_num = ( angle * (V3S_H10T_angle_PWM_MAX-V3S_H10T_angle_PWM_MIN) /900 ) + V3S_H10T_angle_PWM_MAX; | 104 | + int base_offset = g_Gimbal_Pitch_BaseOffset; |
| 105 | + int base = 820; | ||
| 85 | 106 | ||
| 86 | - if (PWM_num > PITCH_PWM_MAX) | ||
| 87 | - { | ||
| 88 | - PWM_num = PITCH_PWM_MAX; | ||
| 89 | - } | ||
| 90 | - if (PWM_num < PITCH_PWM_MIN) | ||
| 91 | - { | ||
| 92 | - PWM_num = PITCH_PWM_MIN; | ||
| 93 | - } | 107 | + //因为PWM写的时候是按60度写的 |
| 108 | + angle_PWM = base + base_offset + ( angle * (120) /(MAX_PITCH - MIN_PITCH) ); | ||
| 94 | 109 | ||
| 95 | - Ircut_PWM_control(PWM_num); | 110 | + Ircut_PWM_control(angle_PWM); |
| 96 | 111 | ||
| 97 | #elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 \ | 112 | #elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 \ |
| 98 | || DEVICE_VERSION == TF_A1 | 113 | || DEVICE_VERSION == TF_A1 |
| @@ -111,7 +126,13 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle) | @@ -111,7 +126,13 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle) | ||
| 111 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 126 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 112 | } | 127 | } |
| 113 | 128 | ||
| 114 | - | 129 | +/****************************** |
| 130 | + * | ||
| 131 | + * | ||
| 132 | + * 设置云台最大最小值 | ||
| 133 | + * | ||
| 134 | + * | ||
| 135 | + * *******************************/ | ||
| 115 | T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range) | 136 | T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range) |
| 116 | { | 137 | { |
| 117 | if (Range != 0xFF && Range != 0x00) | 138 | if (Range != 0xFF && Range != 0x00) |
| @@ -132,13 +153,117 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range) | @@ -132,13 +153,117 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range) | ||
| 132 | Gimbal_SpecialUart_UartSend(set_min_motor, 4); | 153 | Gimbal_SpecialUart_UartSend(set_min_motor, 4); |
| 133 | } | 154 | } |
| 134 | #elif DEVICE_VERSION == JZ_H10 | 155 | #elif DEVICE_VERSION == JZ_H10 |
| 156 | + //因为PWM写的时候是按90度写的,所以分母是900,不是设定的600 | ||
| 157 | + int base_offset = g_Gimbal_Pitch_BaseOffset; | ||
| 158 | + | ||
| 159 | + //在最大的角度弄的 | ||
| 160 | + if (Range == 0xFF) | ||
| 161 | + { | ||
| 162 | + //先通过角度 得出目前的PWM值 | ||
| 163 | + int angle = Gimbal_Get_PitchRealPitchAngle(); | ||
| 164 | + //int angle_PWM =200 + base_offset +angle*195/MIN_PITCH; | ||
| 165 | + int angle_PWM =200 + base_offset +angle*195/(-900); | ||
| 166 | + | ||
| 167 | + //通过最大值的计算方式 得出offset值 | ||
| 168 | + //g_Gimbal_Pitch_BaseOffset = angle_PWM - ((MAX_PITCH*195)/(MAX_PITCH - MIN_PITCH)) - base_offset; | ||
| 169 | + g_Gimbal_Pitch_BaseOffset = angle_PWM - ((MAX_PITCH*195)/(MAX_PITCH - (-900))) - base_offset; | ||
| 170 | + if (g_Gimbal_Pitch_BaseOffset <= - 100) | ||
| 171 | + { | ||
| 172 | + g_Gimbal_Pitch_BaseOffset = - 100; | ||
| 173 | + } | ||
| 174 | + else if (g_Gimbal_Pitch_BaseOffset >= 100) | ||
| 175 | + { | ||
| 176 | + g_Gimbal_Pitch_BaseOffset = 100; | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + //在最小的角度弄的 | ||
| 182 | + else if (Range == 0x00) | ||
| 183 | + { | ||
| 184 | + //先通过角度 得出目前的PWM值 | ||
| 185 | + int angle = Gimbal_Get_PitchRealPitchAngle(); | ||
| 186 | + int angle_PWM =200 + base_offset +angle*195/(-900); | ||
| 187 | + | ||
| 188 | + //通过最小值的计算方式 得出offset值 | ||
| 189 | + g_Gimbal_Pitch_BaseOffset = angle_PWM - (((MAX_PITCH - (-900))*195)/(MAX_PITCH - (-900)) ) - base_offset; | ||
| 190 | + if (g_Gimbal_Pitch_BaseOffset <= - 100) //最小160 | ||
| 191 | + { | ||
| 192 | + g_Gimbal_Pitch_BaseOffset = - 100; | ||
| 193 | + } | ||
| 194 | + else if (g_Gimbal_Pitch_BaseOffset >= 100) //最大420 | ||
| 195 | + { | ||
| 196 | + g_Gimbal_Pitch_BaseOffset = 100; | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + JZSDK_LOG_INFO("设置pitch的offset值:%d",g_Gimbal_Pitch_BaseOffset); | ||
| 202 | + | ||
| 203 | + //写入偏移量 | ||
| 204 | + Gimbal_DataDeal_Write_PitchBaseOffset(g_Gimbal_Pitch_BaseOffset); | ||
| 135 | 205 | ||
| 136 | - //还没想好怎么弄 | 206 | + //刷新角度 |
| 207 | + Gimbal_Flush_Pitch(); | ||
| 137 | 208 | ||
| 138 | #elif DEVICE_VERSION == JZ_H10T | 209 | #elif DEVICE_VERSION == JZ_H10T |
| 139 | 210 | ||
| 140 | - //还没想好怎么弄 | 211 | + //因为PWM写的时候是按90度写的,所以分母是900,不是设定的600 |
| 212 | + int base_offset = g_Gimbal_Pitch_BaseOffset; | ||
| 213 | + | ||
| 214 | + //先通过角度 得出目前的PWM值 | ||
| 215 | + int angle = Gimbal_Get_PitchRealPitchAngle(); | ||
| 216 | + | ||
| 217 | + //在最大的角度弄的 | ||
| 218 | + if (Range == 0xFF) | ||
| 219 | + { | ||
| 220 | + //先得出目前pwm值 | ||
| 221 | + int angle_PWM = 820 + base_offset + (angle * (120)/(MAX_PITCH - MIN_PITCH)); //820是0度 | ||
| 222 | + | ||
| 223 | + //通过最大值的计算方式 得出新的offset值 | ||
| 224 | + //g_Gimbal_Pitch_BaseOffset = angle_PWM - ((MAX_PITCH*195)/(MAX_PITCH - MIN_PITCH)) - base_offset; | ||
| 225 | + g_Gimbal_Pitch_BaseOffset = angle_PWM - 820 - ((MAX_PITCH*120)/(MAX_PITCH - MIN_PITCH)) - base_offset; | ||
| 226 | + | ||
| 227 | + //下限600,上限830 | ||
| 228 | + if (g_Gimbal_Pitch_BaseOffset <= - 100) | ||
| 229 | + { | ||
| 230 | + g_Gimbal_Pitch_BaseOffset = - 100; | ||
| 231 | + } | ||
| 232 | + else if (g_Gimbal_Pitch_BaseOffset >= 20) | ||
| 233 | + { | ||
| 234 | + g_Gimbal_Pitch_BaseOffset = 20; | ||
| 235 | + } | ||
| 236 | + } | ||
| 237 | + | ||
| 238 | + //在最小的角度弄的 | ||
| 239 | + else if (Range == 0x00) | ||
| 240 | + { | ||
| 241 | + //先通过角度 得出目前的PWM值 | ||
| 242 | + int angle = Gimbal_Get_PitchRealPitchAngle(); | ||
| 243 | + int angle_PWM = 820 + base_offset + (angle * (120)/(900)); //820是0度 | ||
| 244 | + | ||
| 245 | + //通过最小值的计算方式 得出offset值 | ||
| 246 | + g_Gimbal_Pitch_BaseOffset = angle_PWM - 820 - ((MAX_PITCH*120)/(MAX_PITCH - MIN_PITCH)) - base_offset; | ||
| 247 | + | ||
| 248 | + //下限600,上限830 | ||
| 249 | + if (g_Gimbal_Pitch_BaseOffset <= - 100) | ||
| 250 | + { | ||
| 251 | + g_Gimbal_Pitch_BaseOffset = - 100; | ||
| 252 | + } | ||
| 253 | + else if (g_Gimbal_Pitch_BaseOffset >= 20) | ||
| 254 | + { | ||
| 255 | + g_Gimbal_Pitch_BaseOffset = 20; | ||
| 256 | + } | ||
| 257 | + } | ||
| 258 | + | ||
| 259 | + JZSDK_LOG_INFO("设置pitch的offset值:%d",g_Gimbal_Pitch_BaseOffset); | ||
| 260 | + | ||
| 261 | + //写入偏移量 | ||
| 262 | + Gimbal_DataDeal_Write_PitchBaseOffset(g_Gimbal_Pitch_BaseOffset); | ||
| 141 | 263 | ||
| 264 | + //刷新角度 | ||
| 265 | + Gimbal_Flush_Pitch(); | ||
| 266 | + | ||
| 142 | #elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 \ | 267 | #elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 \ |
| 143 | || DEVICE_VERSION == TF_A1 | 268 | || DEVICE_VERSION == TF_A1 |
| 144 | 269 | ||
| @@ -162,3 +287,72 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range) | @@ -162,3 +287,72 @@ T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range) | ||
| 162 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 287 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 163 | } | 288 | } |
| 164 | 289 | ||
| 290 | +static T_JZsdkReturnCode Gimbal_DataDeal_Read_PitchBaseOffset(int *offset) | ||
| 291 | +{ | ||
| 292 | + FILE *fp = NULL; | ||
| 293 | + | ||
| 294 | + fp = fopen(PITCH_OFFSET_FILE_PATH, "rb+"); | ||
| 295 | + if (fp == NULL) | ||
| 296 | + { | ||
| 297 | + fp = fopen(PITCH_OFFSET_FILE_PATH, "wb+"); | ||
| 298 | + if (fp == NULL) | ||
| 299 | + { | ||
| 300 | + *offset = 0; | ||
| 301 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 302 | + } | ||
| 303 | + } | ||
| 304 | + else | ||
| 305 | + { | ||
| 306 | + int ret = fseek(fp, 0, SEEK_SET); | ||
| 307 | + if (ret != 0) | ||
| 308 | + { | ||
| 309 | + JZSDK_LOG_ERROR("Seek count file error, ret: %d.", ret); | ||
| 310 | + } | ||
| 311 | + | ||
| 312 | + ret = fread((int *) offset, 1, sizeof(int), fp); | ||
| 313 | + if (ret != sizeof(int)) | ||
| 314 | + { | ||
| 315 | + JZSDK_LOG_ERROR("Read Pitch BaseOffset error."); | ||
| 316 | + *offset = 0; | ||
| 317 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 318 | + } | ||
| 319 | + else | ||
| 320 | + { | ||
| 321 | + JZSDK_LOG_ERROR("Pitch BaseOffset=%d",*offset); | ||
| 322 | + *offset = 0; | ||
| 323 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 324 | + } | ||
| 325 | + } | ||
| 326 | + | ||
| 327 | + if (fp != NULL) | ||
| 328 | + { | ||
| 329 | + fclose(fp); | ||
| 330 | + } | ||
| 331 | + | ||
| 332 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 333 | +} | ||
| 334 | + | ||
| 335 | +static T_JZsdkReturnCode Gimbal_DataDeal_Write_PitchBaseOffset(int offset) | ||
| 336 | +{ | ||
| 337 | + FILE *fp = NULL; | ||
| 338 | + | ||
| 339 | + fp = fopen(PITCH_OFFSET_FILE_PATH, "wb+"); | ||
| 340 | + if (fp == NULL) | ||
| 341 | + { | ||
| 342 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + int ret = fwrite((int *) &offset, 1, sizeof(unsigned int),fp); | ||
| 346 | + if (ret != sizeof(unsigned int)) | ||
| 347 | + { | ||
| 348 | + JZSDK_LOG_ERROR("Pitch BaseOffset error."); | ||
| 349 | + } | ||
| 350 | + else | ||
| 351 | + { | ||
| 352 | + JZSDK_LOG_DEBUG("Pitch BaseOffset=%d\n",offset); | ||
| 353 | + } | ||
| 354 | + | ||
| 355 | + fclose(fp); | ||
| 356 | + | ||
| 357 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 358 | +} |
| @@ -36,6 +36,7 @@ T_JZsdkReturnCode Gimbal_DataDeal_init(); //初始化 | @@ -36,6 +36,7 @@ T_JZsdkReturnCode Gimbal_DataDeal_init(); //初始化 | ||
| 36 | T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle); | 36 | T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle); |
| 37 | T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range); | 37 | T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range); |
| 38 | T_JZsdkReturnCode Read_MotorFineTuning_Pitch(int *value); | 38 | T_JZsdkReturnCode Read_MotorFineTuning_Pitch(int *value); |
| 39 | +T_JZsdkReturnCode Gimbal_DataDeal_Write_PitchBaseOffset(int offset); | ||
| 39 | 40 | ||
| 40 | #ifdef __cplusplus | 41 | #ifdef __cplusplus |
| 41 | } | 42 | } |
| 1 | #include <stdlib.h> | 1 | #include <stdlib.h> |
| 2 | #include <stdio.h> | 2 | #include <stdio.h> |
| 3 | #include <string.h> | 3 | #include <string.h> |
| 4 | -#include "H3_ircut.h" | ||
| 5 | -#include "version_choose.h" | ||
| 6 | 4 | ||
| 7 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 8 | - #include <wiringPi.h> | 5 | +#include "./H3_ircut.h" |
| 6 | +#include "BaseConfig.h" | ||
| 7 | + | ||
| 8 | +//如果wiringPi库安装了,则使用wiringPi库,否则使用sysfs | ||
| 9 | +#ifdef WIRINGPI_STATUS_ON | ||
| 10 | + #include <wiringPi.h> | ||
| 9 | #endif | 11 | #endif |
| 10 | -#define AC 7 | ||
| 11 | -#define AC2 19 | ||
| 12 | 12 | ||
| 13 | -int now_ircut_mode=0; | 13 | +#define AMPLIFIER_IRCUT_PIN_1 7 |
| 14 | +#define AMPLIFIER_IRCUT_PIN_2 19 | ||
| 15 | +#define MOTOR_IRCUT_PIN 18 | ||
| 16 | + | ||
| 17 | +//sys方案输入,未进行测试 | ||
| 14 | int gpio_test_in(unsigned int gpio_chip_num, unsigned int gpio_offset_num) | 18 | int gpio_test_in(unsigned int gpio_chip_num, unsigned int gpio_offset_num) |
| 15 | { | 19 | { |
| 16 | FILE *fp; | 20 | FILE *fp; |
| @@ -62,7 +66,7 @@ int gpio_test_in(unsigned int gpio_chip_num, unsigned int gpio_offset_num) | @@ -62,7 +66,7 @@ int gpio_test_in(unsigned int gpio_chip_num, unsigned int gpio_offset_num) | ||
| 62 | return (int)(buf[0]-48); | 66 | return (int)(buf[0]-48); |
| 63 | } | 67 | } |
| 64 | 68 | ||
| 65 | -//���ܣ�����GPIO��� | 69 | +//sys方案输入,未进行测试 |
| 66 | int gpio_test_out(unsigned int gpio_chip_num, unsigned int gpio_offset_num,unsigned int gpio_out_val) | 70 | int gpio_test_out(unsigned int gpio_chip_num, unsigned int gpio_offset_num,unsigned int gpio_out_val) |
| 67 | { | 71 | { |
| 68 | FILE *fp; | 72 | FILE *fp; |
| @@ -116,60 +120,79 @@ int gpio_test_out(unsigned int gpio_chip_num, unsigned int gpio_offset_num,unsig | @@ -116,60 +120,79 @@ int gpio_test_out(unsigned int gpio_chip_num, unsigned int gpio_offset_num,unsig | ||
| 116 | return 0; | 120 | return 0; |
| 117 | } | 121 | } |
| 118 | 122 | ||
| 119 | -void set_mute(int mutemode){//�������� | ||
| 120 | - if(mutemode==1) | ||
| 121 | - {//ȡ������ | ||
| 122 | - | ||
| 123 | - //gpio_test_out(1,2,1);//gpio1_2 ����� | ||
| 124 | - } | ||
| 125 | - if(mutemode==0) | ||
| 126 | - {//���� | ||
| 127 | - //gpio_test_out(1,2,0);//gpio1_2 ����� | ||
| 128 | - } | ||
| 129 | - else{ | ||
| 130 | - printf("mutemode error\n"); | ||
| 131 | - } | ||
| 132 | -} | ||
| 133 | 123 | ||
| 124 | +/******************** | ||
| 125 | + * | ||
| 126 | + * | ||
| 127 | + * H3引脚初始化 | ||
| 128 | + * | ||
| 129 | + * | ||
| 130 | + * ****************/ | ||
| 131 | +T_JZsdkReturnCode H3_ircut_init() | ||
| 132 | +{ | ||
| 133 | +#ifdef WIRINGPI_STATUS_ON | ||
| 134 | + | ||
| 135 | + //wiringPi库的初始化 | ||
| 136 | + wiringPiSetup() ; | ||
| 137 | + | ||
| 138 | + //静音引脚初始化 | ||
| 139 | + pinMode (AMPLIFIER_IRCUT_PIN_1, OUTPUT) ; | ||
| 140 | + digitalWrite(AMPLIFIER_IRCUT_PIN_1,LOW); | ||
| 141 | + pinMode (AMPLIFIER_IRCUT_PIN_2, OUTPUT) ; | ||
| 142 | + digitalWrite(AMPLIFIER_IRCUT_PIN_2,LOW); | ||
| 143 | + | ||
| 144 | + //H10要初始化电机引脚 | ||
| 145 | + if (DEVICE_VERSION == JZ_H10) | ||
| 146 | + { | ||
| 147 | + pinMode(MOTOR_IRCUT_PIN,PWM_OUTPUT);//设置输出模式 | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + JZSDK_LOG_INFO("H3 Init Complete"); | ||
| 134 | 151 | ||
| 135 | -void H3_init_amplifier(void) | 152 | +#endif |
| 153 | + | ||
| 154 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 155 | +} | ||
| 156 | + | ||
| 157 | +/*********************** | ||
| 158 | + * | ||
| 159 | + * | ||
| 160 | + * H3 pwm控制 | ||
| 161 | + * | ||
| 162 | + * ***************************/ | ||
| 163 | +T_JZsdkReturnCode H3_ircut_pwm(int pwm_duty) | ||
| 136 | { | 164 | { |
| 137 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 138 | - wiringPiSetup() ; //��ʼ��GPIO | ||
| 139 | - pinMode (AC, OUTPUT) ;//�������ģʽ | ||
| 140 | - digitalWrite(AC,LOW); | ||
| 141 | - pinMode (AC2, OUTPUT) ;//�������ģʽ | ||
| 142 | - digitalWrite(AC2,LOW); | 165 | +#ifdef WIRINGPI_STATUS_ON |
| 166 | + pwmWrite(MOTOR_IRCUT_PIN,pwm_duty); | ||
| 167 | + | ||
| 168 | + //printf("pwm控制:%d\n",pwm_duty); | ||
| 143 | #endif | 169 | #endif |
| 144 | } | 170 | } |
| 145 | 171 | ||
| 146 | -void H3_set_amplifier(int amplifier_mode){ | ||
| 147 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 148 | - if(amplifier_mode==1) | ||
| 149 | - {//���Ŵ� | ||
| 150 | - if(now_ircut_mode==0){ | ||
| 151 | - digitalWrite(AC,HIGH);//gpio1_3 ����� | ||
| 152 | - digitalWrite(AC2,HIGH);//gpio1_3 ����� | ||
| 153 | - now_ircut_mode=1; | ||
| 154 | - printf("open!!!\n"); | ||
| 155 | - } | ||
| 156 | - //gpio_test_out(1,2,1);//gpio1_2 ����� | ||
| 157 | - return; | ||
| 158 | - } | ||
| 159 | - if(amplifier_mode==0) | ||
| 160 | - {//���Źر� | ||
| 161 | - if(now_ircut_mode==1){ | ||
| 162 | - digitalWrite(AC,LOW); | ||
| 163 | - digitalWrite(AC2,LOW);//gpio1_3 ����� | ||
| 164 | - now_ircut_mode=0; | ||
| 165 | - printf("close!!!\n"); | ||
| 166 | - } | ||
| 167 | - //gpio_test_out(1,2,0);//gpio1_2 ����� | ||
| 168 | - return; | ||
| 169 | - } | ||
| 170 | - else{ | ||
| 171 | - printf("amplifier_mode error\n"); | ||
| 172 | - return; | ||
| 173 | - } | 172 | +/*********************** |
| 173 | + * | ||
| 174 | + * H3引脚控制 | ||
| 175 | + * 静音角控制 | ||
| 176 | + * | ||
| 177 | + * *******************/ | ||
| 178 | +T_JZsdkReturnCode H3_ircut_set_amplifier(int ircut_mode) | ||
| 179 | +{ | ||
| 180 | +#ifdef WIRINGPI_STATUS_ON | ||
| 181 | + if (ircut_mode == JZ_FLAGCODE_ON) | ||
| 182 | + { | ||
| 183 | + digitalWrite(AMPLIFIER_IRCUT_PIN_1,HIGH); | ||
| 184 | + digitalWrite(AMPLIFIER_IRCUT_PIN_2,HIGH); | ||
| 185 | + } | ||
| 186 | + else if (ircut_mode == JZ_FLAGCODE_OFF) | ||
| 187 | + { | ||
| 188 | + digitalWrite(AMPLIFIER_IRCUT_PIN_1,LOW); | ||
| 189 | + digitalWrite(AMPLIFIER_IRCUT_PIN_2,LOW); | ||
| 190 | + } | ||
| 191 | + else | ||
| 192 | + { | ||
| 193 | + JZSDK_LOG_ERROR("H3引脚控制错误"); | ||
| 194 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 195 | + } | ||
| 174 | #endif | 196 | #endif |
| 175 | -} | 197 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 198 | +} |
| 1 | +/** | ||
| 2 | + ******************************************************************** | ||
| 3 | + * @file | ||
| 4 | + * | ||
| 5 | + * | ||
| 6 | + ********************************************************************* | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
| 1 | #ifndef H3_IRCUT_H | 10 | #ifndef H3_IRCUT_H |
| 2 | #define H3_IRCUT_H | 11 | #define H3_IRCUT_H |
| 3 | -#include <stdio.h> | ||
| 4 | -#include <stdint.h> | ||
| 5 | 12 | ||
| 6 | -int gpio_test_in(unsigned int gpio_chip_num, unsigned int gpio_offset_num); | ||
| 7 | -int gpio_test_out(unsigned int gpio_chip_num, unsigned int gpio_offset_num,unsigned int gpio_out_val); | ||
| 8 | -void set_mute(int mutemode);//�������ܣ�0���� 1�رվ��� | ||
| 9 | -void H3_set_amplifier(int amplifier_mode);//���ſ��� 0�ر� 1�� | ||
| 10 | -void H3_init_amplifier(void); | 13 | +/* Includes ------------------------------------------------------------------*/ |
| 14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
| 15 | + | ||
| 16 | +#ifdef __cplusplus | ||
| 17 | +extern "C" { | ||
| 18 | +#endif | ||
| 19 | + | ||
| 20 | +/* Exported constants --------------------------------------------------------*/ | ||
| 21 | +/* 常亮定义*/ | ||
| 22 | + | ||
| 23 | +/* Exported types ------------------------------------------------------------*/ | ||
| 24 | + | ||
| 25 | +/* Exported functions --------------------------------------------------------*/ | ||
| 26 | + | ||
| 27 | +T_JZsdkReturnCode H3_ircut_init(); | ||
| 28 | +T_JZsdkReturnCode H3_ircut_set_amplifier(int ircut_mode); | ||
| 29 | +T_JZsdkReturnCode H3_ircut_pwm(int pwm_duty); | ||
| 30 | + | ||
| 31 | +#ifdef __cplusplus | ||
| 32 | +} | ||
| 33 | +#endif | ||
| 11 | 34 | ||
| 12 | -#endif //IRCUT_H | ||
| 35 | +#endif |
| 1 | - | ||
| 2 | -#include "Ircut_H3_H10.h" | ||
| 3 | -#include "version_choose.h" | ||
| 4 | -#include <stdio.h> | ||
| 5 | - | ||
| 6 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 7 | - #include <wiringPi.h> | ||
| 8 | -#endif | ||
| 9 | - | ||
| 10 | -#define AC 7 | ||
| 11 | -#define AC2 19 | ||
| 12 | -#define MOTOR 18 | ||
| 13 | - | ||
| 14 | -int H3_H10_now_ircut_mode=0; | ||
| 15 | - | ||
| 16 | -int H3_H10_Gimbal_IrcutInit() | ||
| 17 | -{ | ||
| 18 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 19 | - pinMode(MOTOR,PWM_OUTPUT);//设置输出模式 | ||
| 20 | -#endif | ||
| 21 | -} | ||
| 22 | - | ||
| 23 | -void H3_H10_init_amplifier(void) | ||
| 24 | -{ | ||
| 25 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 26 | - pinMode (AC, OUTPUT) ;//�������ģʽ | ||
| 27 | - digitalWrite(AC,LOW); | ||
| 28 | - pinMode (AC2, OUTPUT) ;//�������ģʽ | ||
| 29 | - digitalWrite(AC2,LOW); | ||
| 30 | -#endif | ||
| 31 | -} | ||
| 32 | - | ||
| 33 | -int H3_H10_IrcutInit() | ||
| 34 | -{ | ||
| 35 | - printf("正在进行H3_H10的引脚初始化\n"); | ||
| 36 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 37 | - //wiringPi库的初始化 | ||
| 38 | - wiringPiSetup() ; | ||
| 39 | - | ||
| 40 | - //声音引脚初始化 | ||
| 41 | - H3_H10_init_amplifier(); | ||
| 42 | - | ||
| 43 | - //电机引脚初始化 | ||
| 44 | - H3_H10_Gimbal_IrcutInit(); | ||
| 45 | - | ||
| 46 | - printf("H3_H10引脚初始化完成\n"); | ||
| 47 | -#endif | ||
| 48 | -} | ||
| 49 | - | ||
| 50 | -void H3_H10_set_amplifier(int amplifier_mode) | ||
| 51 | -{ | ||
| 52 | -#if WIRINGPI_STATUS == VERSION_SWITCH_ON | ||
| 53 | - if(amplifier_mode==1) | ||
| 54 | - {//���Ŵ� | ||
| 55 | - if(H3_H10_now_ircut_mode==0){ | ||
| 56 | - digitalWrite(AC,HIGH);//gpio1_3 ����� | ||
| 57 | - digitalWrite(AC2,HIGH);//gpio1_3 ����� | ||
| 58 | - H3_H10_now_ircut_mode=1; | ||
| 59 | - printf("open!!!\n"); | ||
| 60 | - } | ||
| 61 | - //gpio_test_out(1,2,1);//gpio1_2 ����� | ||
| 62 | - return; | ||
| 63 | - } | ||
| 64 | - if(amplifier_mode==0) | ||
| 65 | - {//���Źر� | ||
| 66 | - if(H3_H10_now_ircut_mode==1){ | ||
| 67 | - digitalWrite(AC,LOW); | ||
| 68 | - digitalWrite(AC2,LOW);//gpio1_3 ����� | ||
| 69 | - H3_H10_now_ircut_mode=0; | ||
| 70 | - printf("close!!!\n"); | ||
| 71 | - } | ||
| 72 | - //gpio_test_out(1,2,0);//gpio1_2 ����� | ||
| 73 | - return; | ||
| 74 | - } | ||
| 75 | - else{ | ||
| 76 | - printf("amplifier_mode error\n"); | ||
| 77 | - return; | ||
| 78 | - } | ||
| 79 | -#endif | ||
| 80 | -} |
| @@ -2,14 +2,13 @@ | @@ -2,14 +2,13 @@ | ||
| 2 | #include "version_choose.h" | 2 | #include "version_choose.h" |
| 3 | #include "./V3s_ircut/V3s_ircut.h" | 3 | #include "./V3s_ircut/V3s_ircut.h" |
| 4 | #include "./H3_ircut/H3_ircut.h" | 4 | #include "./H3_ircut/H3_ircut.h" |
| 5 | -#include "./H3_ircut/Ircut_H3_H10/Ircut_H3_H10.h" | ||
| 6 | #include "ircut.h" | 5 | #include "ircut.h" |
| 7 | 6 | ||
| 8 | #include "JZsdkLib.h" | 7 | #include "JZsdkLib.h" |
| 9 | 8 | ||
| 10 | static int OutPutPower = JZ_FLAGCODE_OFF; | 9 | static int OutPutPower = JZ_FLAGCODE_OFF; |
| 11 | 10 | ||
| 12 | -void Ircut_Init()//引脚初始化 | 11 | +T_JZsdkReturnCode Ircut_Init()//引脚初始化 |
| 13 | { | 12 | { |
| 14 | if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || | 13 | if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || |
| 15 | DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30|| | 14 | DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30|| |
| @@ -18,13 +17,9 @@ void Ircut_Init()//引脚初始化 | @@ -18,13 +17,9 @@ void Ircut_Init()//引脚初始化 | ||
| 18 | V3s_Ircut_Init(); | 17 | V3s_Ircut_Init(); |
| 19 | } | 18 | } |
| 20 | 19 | ||
| 21 | - else if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | 20 | + else if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T || DEVICE_VERSION == JZ_H10) |
| 22 | { | 21 | { |
| 23 | - H3_init_amplifier(); | ||
| 24 | - } | ||
| 25 | - else if (DEVICE_VERSION == JZ_H10) | ||
| 26 | - { | ||
| 27 | - H3_H10_IrcutInit(); | 22 | + H3_ircut_init(); |
| 28 | } | 23 | } |
| 29 | else if (DEVICE_VERSION == JZ_C1) | 24 | else if (DEVICE_VERSION == JZ_C1) |
| 30 | { | 25 | { |
| @@ -38,19 +33,23 @@ void Ircut_Init()//引脚初始化 | @@ -38,19 +33,23 @@ void Ircut_Init()//引脚初始化 | ||
| 38 | } | 33 | } |
| 39 | 34 | ||
| 40 | JZSDK_LOG_INFO("MODULE_IRCUT_INIT_COMPLETE"); | 35 | JZSDK_LOG_INFO("MODULE_IRCUT_INIT_COMPLETE"); |
| 36 | + | ||
| 37 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 41 | } | 38 | } |
| 42 | 39 | ||
| 43 | 40 | ||
| 44 | -int Ircut_uInit() | 41 | +T_JZsdkReturnCode Ircut_uInit() |
| 45 | { | 42 | { |
| 46 | if (DEVICE_VERSION == JZ_H1E) | 43 | if (DEVICE_VERSION == JZ_H1E) |
| 47 | { | 44 | { |
| 48 | V3s_Ircut_uInit(); | 45 | V3s_Ircut_uInit(); |
| 49 | } | 46 | } |
| 47 | + | ||
| 48 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 50 | } | 49 | } |
| 51 | 50 | ||
| 52 | //功放开关 | 51 | //功放开关 |
| 53 | -void set_amplifier(int amplifier_mode) | 52 | +T_JZsdkReturnCode set_amplifier(int amplifier_mode) |
| 54 | { | 53 | { |
| 55 | if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || | 54 | if (DEVICE_VERSION == JZ_H1E || DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_H10T || |
| 56 | DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 || | 55 | DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30 || |
| @@ -59,15 +58,12 @@ void set_amplifier(int amplifier_mode) | @@ -59,15 +58,12 @@ void set_amplifier(int amplifier_mode) | ||
| 59 | V3s_set_amplifier(amplifier_mode); | 58 | V3s_set_amplifier(amplifier_mode); |
| 60 | } | 59 | } |
| 61 | 60 | ||
| 62 | - if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | 61 | + if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T || DEVICE_VERSION == JZ_H10) |
| 63 | { | 62 | { |
| 64 | - H3_set_amplifier(amplifier_mode); | 63 | + H3_ircut_set_amplifier(amplifier_mode); |
| 65 | } | 64 | } |
| 66 | 65 | ||
| 67 | - if (DEVICE_VERSION == JZ_H10) | ||
| 68 | - { | ||
| 69 | - H3_H10_set_amplifier(amplifier_mode); | ||
| 70 | - } | 66 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 71 | } | 67 | } |
| 72 | 68 | ||
| 73 | //PWM控制 | 69 | //PWM控制 |
| @@ -77,7 +73,6 @@ int Ircut_PWM_control(int pwm_num) | @@ -77,7 +73,6 @@ int Ircut_PWM_control(int pwm_num) | ||
| 77 | { | 73 | { |
| 78 | V3s_PWM_contrl(pwm_num); | 74 | V3s_PWM_contrl(pwm_num); |
| 79 | } | 75 | } |
| 80 | - | ||
| 81 | } | 76 | } |
| 82 | 77 | ||
| 83 | //对外电源控制 | 78 | //对外电源控制 |
| @@ -25,9 +25,9 @@ extern "C" { | @@ -25,9 +25,9 @@ extern "C" { | ||
| 25 | /* Exported types ------------------------------------------------------------*/ | 25 | /* Exported types ------------------------------------------------------------*/ |
| 26 | 26 | ||
| 27 | /* Exported functions --------------------------------------------------------*/ | 27 | /* Exported functions --------------------------------------------------------*/ |
| 28 | -void Ircut_Init(); | ||
| 29 | -int Ircut_uInit() ; | ||
| 30 | -void set_amplifier(int amplifier_mode); | 28 | +T_JZsdkReturnCode Ircut_Init(); |
| 29 | +T_JZsdkReturnCode Ircut_uInit() ; | ||
| 30 | +T_JZsdkReturnCode set_amplifier(int amplifier_mode); | ||
| 31 | int Ircut_PWM_control(int pwm_num); | 31 | int Ircut_PWM_control(int pwm_num); |
| 32 | T_JZsdkReturnCode Ircut_Set_OutPutPower_Control(int value); | 32 | T_JZsdkReturnCode Ircut_Set_OutPutPower_Control(int value); |
| 33 | T_JZsdkReturnCode Ircut_CheckStatus_OutPutPower(int *value); | 33 | T_JZsdkReturnCode Ircut_CheckStatus_OutPutPower(int *value); |
| @@ -386,8 +386,8 @@ T_JZsdkReturnCode Lighting_Obtain_WarningLight_Color(int color1, int color2) | @@ -386,8 +386,8 @@ T_JZsdkReturnCode Lighting_Obtain_WarningLight_Color(int color1, int color2) | ||
| 386 | //获取探警灯颜色 | 386 | //获取探警灯颜色 |
| 387 | T_JZsdkReturnCode Lighting_Get_WarningLight_Color(int *color1, int *color2) | 387 | T_JZsdkReturnCode Lighting_Get_WarningLight_Color(int *color1, int *color2) |
| 388 | { | 388 | { |
| 389 | - *color1 = WarningLight_Status; | ||
| 390 | - *color2 = WarningLight_Mode; | 389 | + *color1 = WarningLight_Color1; |
| 390 | + *color2 = WarningLight_Color2; | ||
| 391 | 391 | ||
| 392 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 392 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 393 | } | 393 | } |
| @@ -406,7 +406,7 @@ T_JZsdkReturnCode Lighting_CheckStatus_WarningLightColor(int *ValueColor1, int * | @@ -406,7 +406,7 @@ T_JZsdkReturnCode Lighting_CheckStatus_WarningLightColor(int *ValueColor1, int * | ||
| 406 | } | 406 | } |
| 407 | 407 | ||
| 408 | //2、获取一次本地探警灯颜色 | 408 | //2、获取一次本地探警灯颜色 |
| 409 | - Lighting_Get_WarningLight_Status(ValueColor1, ValueColor2); | 409 | + Lighting_Get_WarningLight_Color(ValueColor1, ValueColor2); |
| 410 | 410 | ||
| 411 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 411 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 412 | } | 412 | } |
| @@ -5,22 +5,20 @@ | @@ -5,22 +5,20 @@ | ||
| 5 | #include <unistd.h> | 5 | #include <unistd.h> |
| 6 | 6 | ||
| 7 | #include "JZsdkLib.h" | 7 | #include "JZsdkLib.h" |
| 8 | -#include "version_choose.h" | ||
| 9 | #include "BaseConfig.h" | 8 | #include "BaseConfig.h" |
| 10 | 9 | ||
| 11 | #include "../V4L2_camera/V4L2_Record.h" | 10 | #include "../V4L2_camera/V4L2_Record.h" |
| 12 | -#include "../../StreamProc/StreamProc.h" | 11 | +#include "../V4L2_camera/V4L2_CameraParameterSetting.h" |
| 12 | + | ||
| 13 | +#include "../../MultProc/MultProc.h" | ||
| 13 | #include "../../MediaParm.h" | 14 | #include "../../MediaParm.h" |
| 14 | #include "../../VideoMgmt/VideoMgmt.h" | 15 | #include "../../VideoMgmt/VideoMgmt.h" |
| 15 | -#include "../../StreamProc/StreamProc.h" | ||
| 16 | -#include "Ircut/ircut.h" | ||
| 17 | #include "../Camera.h" | 16 | #include "../Camera.h" |
| 18 | 17 | ||
| 19 | -#include "UI_control/UI_control.h" | ||
| 20 | static int CameraFd = 0; | 18 | static int CameraFd = 0; |
| 21 | 19 | ||
| 22 | -//光学相机数据读取线程 | ||
| 23 | -static void *JZsdk_Cam_Data_Thread(void *args) | 20 | +//多线程抓取数据线程 |
| 21 | +static void *JZsdk_Catch_MultiThread(void *args) | ||
| 24 | { | 22 | { |
| 25 | while (1) | 23 | while (1) |
| 26 | { | 24 | { |
| @@ -30,13 +28,15 @@ static void *JZsdk_Cam_Data_Thread(void *args) | @@ -30,13 +28,15 @@ static void *JZsdk_Cam_Data_Thread(void *args) | ||
| 30 | //从相机中读取一张照片 | 28 | //从相机中读取一张照片 |
| 31 | V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | 29 | V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); |
| 32 | 30 | ||
| 31 | + //printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); | ||
| 32 | + | ||
| 33 | if (buf == NULL) | 33 | if (buf == NULL) |
| 34 | { | 34 | { |
| 35 | JZSDK_LOG_ERROR("相机数据读取失败"); | 35 | JZSDK_LOG_ERROR("相机数据读取失败"); |
| 36 | continue; | 36 | continue; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | - //放入缓冲池 | 39 | + //放入缓冲池 //将数据放入缓冲池,从而被其他线程使用 |
| 40 | VideoMgmt_write_data(&VideoMgmt_FirstVideo_index, buf, buf_size); | 40 | VideoMgmt_write_data(&VideoMgmt_FirstVideo_index, buf, buf_size); |
| 41 | 41 | ||
| 42 | //归还图片 | 42 | //归还图片 |
| @@ -44,30 +44,68 @@ static void *JZsdk_Cam_Data_Thread(void *args) | @@ -44,30 +44,68 @@ static void *JZsdk_Cam_Data_Thread(void *args) | ||
| 44 | } | 44 | } |
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | -//150st相机初始化 | ||
| 48 | -T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num) | 47 | + |
| 48 | +//单线程抓取数据线程 | ||
| 49 | +static void *JZsdk_Catch_SingleThread(void *args) | ||
| 49 | { | 50 | { |
| 50 | - T_JZsdkReturnCode ret; | 51 | + while (1) |
| 52 | + { | ||
| 53 | + unsigned int buf_size = 0; | ||
| 54 | + unsigned char *buf = NULL; | ||
| 55 | + | ||
| 56 | + //从相机中读取一张照片 | ||
| 57 | + V4L2_CameraFrameRecord_OnlyGetFrame(&buf, &buf_size); | ||
| 51 | 58 | ||
| 52 | - //初始化摄像头 | ||
| 53 | - ret = V4l2_Camarainit2(&CameraFd,width,height,frame_num); | ||
| 54 | - if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 55 | - { | ||
| 56 | - return ret; | 59 | + //printf("read: len:%d data[3]:%x data[4]:%x\n", buf_size, buf[3], buf[4]); |
| 60 | + | ||
| 61 | + if (buf == NULL) | ||
| 62 | + { | ||
| 63 | + JZSDK_LOG_ERROR("相机数据读取失败"); | ||
| 64 | + continue; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + //进行数据处理 | ||
| 68 | + VideoMgmt_Single_FrameIn(buf, buf_size); | ||
| 69 | + | ||
| 70 | + //归还图片 | ||
| 71 | + V4L2_CameraFrameRecord_OnlyReturnFrame(); | ||
| 57 | } | 72 | } |
| 58 | - | 73 | +} |
| 74 | + | ||
| 75 | +/****************************** | ||
| 76 | + * | ||
| 77 | + * 相机抓取初始化 | ||
| 78 | + * ThreadMode: 0为单线程 1为多线程 | ||
| 79 | + * | ||
| 80 | + * ******************************/ | ||
| 81 | +T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode) | ||
| 82 | +{ | ||
| 83 | + T_JZsdkReturnCode ret; | ||
| 59 | 84 | ||
| 60 | //初始化数据接收线程 | 85 | //初始化数据接收线程 |
| 61 | pthread_t ReadDataTask; | 86 | pthread_t ReadDataTask; |
| 62 | pthread_attr_t task_attribute; //线程属性 | 87 | pthread_attr_t task_attribute; //线程属性 |
| 63 | pthread_attr_init(&task_attribute); //初始化线程属性 | 88 | pthread_attr_init(&task_attribute); //初始化线程属性 |
| 64 | pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | 89 | pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 |
| 65 | - int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Cam_Data_Thread,NULL); //线程 | ||
| 66 | - if(opus_Protection != 0) | ||
| 67 | - { | ||
| 68 | - JZSDK_LOG_ERROR("创建v4l2线程失败!"); | ||
| 69 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 70 | - } | ||
| 71 | 90 | ||
| 91 | + if (ThreadMode == 0) | ||
| 92 | + { | ||
| 93 | + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_SingleThread,NULL); //线程 | ||
| 94 | + if(opus_Protection != 0) | ||
| 95 | + { | ||
| 96 | + JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); | ||
| 97 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + else if (ThreadMode == 1) | ||
| 101 | + { | ||
| 102 | + int opus_Protection = pthread_create(&ReadDataTask,&task_attribute,JZsdk_Catch_MultiThread,NULL); //线程 | ||
| 103 | + if(opus_Protection != 0) | ||
| 104 | + { | ||
| 105 | + JZSDK_LOG_ERROR("创建相机抓取并处理初始化线程失败!"); | ||
| 106 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + | ||
| 72 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 110 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 73 | } | 111 | } |
| 1 | /** | 1 | /** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | - * @file H150ST_Cam.h | ||
| 4 | - * H150ST_Cam.h 的头文件 | 3 | + * @file Cam_FrameCatch.h |
| 4 | + * Cam_FrameCatch.c 的头文件 | ||
| 5 | * | 5 | * |
| 6 | ********************************************************************* | 6 | ********************************************************************* |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | 9 | /* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ |
| 10 | -#ifndef H150ST_CAM_H | ||
| 11 | -#define H150ST_CAM_H | 10 | +#ifndef CAM_FRAMECATCH_H |
| 11 | +#define CAM_FRAMECATCH_H | ||
| 12 | 12 | ||
| 13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
| 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
| @@ -24,7 +24,7 @@ extern "C" { | @@ -24,7 +24,7 @@ extern "C" { | ||
| 24 | /* Exported types ------------------------------------------------------------*/ | 24 | /* Exported types ------------------------------------------------------------*/ |
| 25 | 25 | ||
| 26 | /* Exported functions --------------------------------------------------------*/ | 26 | /* Exported functions --------------------------------------------------------*/ |
| 27 | -T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num); | 27 | +T_JZsdkReturnCode JZsdk_FrameCatch_Init(int ThreadMode); |
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | 30 |
| @@ -14,6 +14,12 @@ | @@ -14,6 +14,12 @@ | ||
| 14 | 14 | ||
| 15 | #include "MediaProc/IRC_funtion/IRC_funtion.h" | 15 | #include "MediaProc/IRC_funtion/IRC_funtion.h" |
| 16 | 16 | ||
| 17 | +#include "./V4L2_camera/V4L2_CameraParameterSetting.h" | ||
| 18 | +#include "./V4L2_camera/V4L2_Record.h" | ||
| 19 | +#include "./Cam_FrameCatch/Cam_FrameCatch.h" | ||
| 20 | + | ||
| 21 | +static int g_CameraFd = 0; //摄像头文件描述符 | ||
| 22 | + | ||
| 17 | 23 | ||
| 18 | static int PseudoColor = JZ_FLAGCODE_OFF; //伪彩颜色 | 24 | static int PseudoColor = JZ_FLAGCODE_OFF; //伪彩颜色 |
| 19 | static int PixelColorMode = JZ_FLAGCODE_OFF; //像素颜色模式 | 25 | static int PixelColorMode = JZ_FLAGCODE_OFF; //像素颜色模式 |
| @@ -25,6 +31,42 @@ int g_CameraRegionBox_FirstPixel[2] = {0, 0}; // 初始化第一点坐标(x, y) | @@ -25,6 +31,42 @@ int g_CameraRegionBox_FirstPixel[2] = {0, 0}; // 初始化第一点坐标(x, y) | ||
| 25 | int g_CameraRegionBox_SecondPixel[2] = {0, 0}; // 初始化第二点坐标(x, y)为(0, 0) | 31 | int g_CameraRegionBox_SecondPixel[2] = {0, 0}; // 初始化第二点坐标(x, y)为(0, 0) |
| 26 | int g_CameraRegionBox_ClickTime = 0; | 32 | int g_CameraRegionBox_ClickTime = 0; |
| 27 | 33 | ||
| 34 | +/****************************** | ||
| 35 | + * | ||
| 36 | + * 相机初始化 | ||
| 37 | + * ThreadMode: 0为单线程 1为多线程 | ||
| 38 | + * width: 宽 | ||
| 39 | + * height: 高 | ||
| 40 | + * frame_num: 帧数 | ||
| 41 | + * | ||
| 42 | + * ******************************/ | ||
| 43 | +T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_num) | ||
| 44 | +{ | ||
| 45 | + T_JZsdkReturnCode ret; | ||
| 46 | + | ||
| 47 | + //初始化摄像头 | ||
| 48 | + ret = V4l2_Camarainit2(&g_CameraFd,width,height,frame_num); | ||
| 49 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 50 | + { | ||
| 51 | + return ret; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | +#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | ||
| 55 | + //初始化摄像头参数 | ||
| 56 | + ret = V4L2_Parameter_Setting(g_CameraFd); | ||
| 57 | + if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | ||
| 58 | + { | ||
| 59 | + JZSDK_LOG_ERROR("摄像头参数调整失败"); | ||
| 60 | + return ret; | ||
| 61 | + } | ||
| 62 | +#endif | ||
| 63 | + | ||
| 64 | + //根据线程模式初始化抓取和初步处理的线程 | ||
| 65 | + JZsdk_FrameCatch_Init(ThreadMode); | ||
| 66 | + | ||
| 67 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 68 | + | ||
| 69 | +} | ||
| 28 | 70 | ||
| 29 | //快门开关 | 71 | //快门开关 |
| 30 | /*********************************** | 72 | /*********************************** |
| @@ -93,6 +135,8 @@ T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch() | @@ -93,6 +135,8 @@ T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch() | ||
| 93 | * ******************/ | 135 | * ******************/ |
| 94 | T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) | 136 | T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) |
| 95 | { | 137 | { |
| 138 | + printf("设置框选点X:%d Y:%d\n",PointX,PointY); | ||
| 139 | + | ||
| 96 | //1、检查该点是否合法 | 140 | //1、检查该点是否合法 |
| 97 | #if DEVICE_VERSION == JZ_C1 | 141 | #if DEVICE_VERSION == JZ_C1 |
| 98 | //红外相机下的坐标参数是0~319 0~255 | 142 | //红外相机下的坐标参数是0~319 0~255 |
| @@ -100,11 +144,7 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) | @@ -100,11 +144,7 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) | ||
| 100 | { | 144 | { |
| 101 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 145 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 102 | } | 146 | } |
| 103 | - | ||
| 104 | -#endif | ||
| 105 | - | ||
| 106 | - printf("设置框选点X:%d Y:%d\n",PointX,PointY); | ||
| 107 | - | 147 | + |
| 108 | //如果本次操作是画第一个点 | 148 | //如果本次操作是画第一个点 |
| 109 | if (g_CameraRegionBox_ClickTime+1 == 1) | 149 | if (g_CameraRegionBox_ClickTime+1 == 1) |
| 110 | { | 150 | { |
| @@ -129,7 +169,8 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) | @@ -129,7 +169,8 @@ T_JZsdkReturnCode Camera_RegionBox(unsigned int PointX, unsigned int PointY) | ||
| 129 | { | 169 | { |
| 130 | g_CameraRegionBox_ClickTime=0; | 170 | g_CameraRegionBox_ClickTime=0; |
| 131 | IRC_Set_RegionMode(0); | 171 | IRC_Set_RegionMode(0); |
| 132 | - } | 172 | + } |
| 173 | +#endif | ||
| 133 | 174 | ||
| 134 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 175 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 135 | } | 176 | } |
| @@ -32,7 +32,8 @@ T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(); | @@ -32,7 +32,8 @@ T_JZsdkReturnCode JZsdk_Camera_BadPixelSwitch(); | ||
| 32 | T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(); | 32 | T_JZsdkReturnCode JZsdk_CameraSPC_ResetSwitch(); |
| 33 | T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch(); | 33 | T_JZsdkReturnCode JZsdk_Camera_GasEnhancementCorrectSwitch(); |
| 34 | 34 | ||
| 35 | -T_JZsdkReturnCode JZsdk_H150ST_CameraInit(int width, int height, int frame_num); | 35 | +T_JZsdkReturnCode Camera_Init(int ThreadMode, int width, int height, int frame_num); |
| 36 | + | ||
| 36 | 37 | ||
| 37 | #ifdef __cplusplus | 38 | #ifdef __cplusplus |
| 38 | } | 39 | } |
| @@ -11,10 +11,9 @@ | @@ -11,10 +11,9 @@ | ||
| 11 | 11 | ||
| 12 | #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" | 12 | #include "JZsdk_usb_bulk/JZsdk_usb_bulk.h" |
| 13 | #include "../V4L2_camera/V4L2_Record.h" | 13 | #include "../V4L2_camera/V4L2_Record.h" |
| 14 | -#include "../../StreamProc/StreamProc.h" | 14 | +#include "../../MultProc/MultProc.h" |
| 15 | #include "../../MediaParm.h" | 15 | #include "../../MediaParm.h" |
| 16 | #include "../../VideoMgmt/VideoMgmt.h" | 16 | #include "../../VideoMgmt/VideoMgmt.h" |
| 17 | -#include "../../StreamProc/StreamProc.h" | ||
| 18 | #include "Ircut/ircut.h" | 17 | #include "Ircut/ircut.h" |
| 19 | #include "../Camera.h" | 18 | #include "../Camera.h" |
| 20 | 19 | ||
| @@ -238,11 +237,19 @@ static void *JZsdk_Kt_Irc_DataDeal_Thread(void *args) | @@ -238,11 +237,19 @@ static void *JZsdk_Kt_Irc_DataDeal_Thread(void *args) | ||
| 238 | //4、将原始码流数据转换成h264流,为避免多次复制,这里的h264会直接放入视频流管理的缓冲区 | 237 | //4、将原始码流数据转换成h264流,为避免多次复制,这里的h264会直接放入视频流管理的缓冲区 |
| 239 | JZsdk_RTKMMP_RawData_to_h264(raw_data, raw_data_len); | 238 | JZsdk_RTKMMP_RawData_to_h264(raw_data, raw_data_len); |
| 240 | 239 | ||
| 241 | - free(raw_data); | ||
| 242 | - raw_data = NULL; | ||
| 243 | - free(gary_data); | ||
| 244 | - gary_data = NULL; | ||
| 245 | - | 240 | + //5、释放内存 |
| 241 | + if (raw_data != NULL) | ||
| 242 | + { | ||
| 243 | + free(raw_data); | ||
| 244 | + raw_data = NULL; | ||
| 245 | + } | ||
| 246 | + | ||
| 247 | + if (gary_data != NULL) | ||
| 248 | + { | ||
| 249 | + free(gary_data); | ||
| 250 | + gary_data = NULL; | ||
| 251 | + } | ||
| 252 | + | ||
| 246 | //JZSDK_LOG_DEBUG("得到了一帧红外h264"); | 253 | //JZSDK_LOG_DEBUG("得到了一帧红外h264"); |
| 247 | } | 254 | } |
| 248 | } | 255 | } |
| 1 | + | ||
| 2 | +#include <stdio.h> | ||
| 3 | +#include <stdlib.h> | ||
| 4 | +#include <string.h> | ||
| 5 | +#include <assert.h> | ||
| 6 | +#include <getopt.h> /* getopt_long() */ | ||
| 7 | +#include <fcntl.h> /* low-level i/o */ | ||
| 8 | +#include <unistd.h> | ||
| 9 | +#include <errno.h> | ||
| 10 | +#include <sys/stat.h> | ||
| 11 | +#include <sys/types.h> | ||
| 12 | +#include <sys/time.h> | ||
| 13 | +#include <sys/mman.h> | ||
| 14 | +#include <sys/ioctl.h> | ||
| 15 | + | ||
| 16 | +#include <linux/videodev2.h> | ||
| 17 | +#include "./V4L2_CameraParameterSetting.h" | ||
| 18 | +#include "JZsdkLib.h" | ||
| 19 | + | ||
| 20 | +#include "MediaProc/MediaParm.h" | ||
| 21 | + | ||
| 22 | +T_JZsdkReturnCode V4L2_Parameter_Setting(int cam_fd) | ||
| 23 | +{ | ||
| 24 | + struct v4l2_control ctrl; | ||
| 25 | + | ||
| 26 | + //设置亮度* | ||
| 27 | + ctrl.id= V4L2_CID_BRIGHTNESS; | ||
| 28 | + ctrl.value = BRIGHTNESS; | ||
| 29 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 30 | + { | ||
| 31 | + JZSDK_LOG_INFO("相机亮度设置失败"); | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + //设置对比度 | ||
| 35 | + ctrl.id = V4L2_CID_CONTRAST; | ||
| 36 | + ctrl.value= CONTRAST; | ||
| 37 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 38 | + { | ||
| 39 | + JZSDK_LOG_INFO("相机对比度设置失败"); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + //设置饱和度 | ||
| 43 | + ctrl.id = V4L2_CID_SATURATION; | ||
| 44 | + ctrl.value= SATURATION; | ||
| 45 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 46 | + { | ||
| 47 | + perror("相机饱和度设置失败"); | ||
| 48 | + } | ||
| 49 | +/* | ||
| 50 | + //设置色度 | ||
| 51 | + ctrl.id = V4L2_CID_HUE; | ||
| 52 | + ctrl.value = 1; | ||
| 53 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 54 | + { | ||
| 55 | + perror("ioctl"); | ||
| 56 | + exit(EXIT_FAILURE); | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + //设置手动白平衡 | ||
| 60 | + ctrl.id = V4L2_CID_AUTO_WHITE_BALANCE; | ||
| 61 | + ctrl.value = V4L2_WHITE_BALANCE_MANUAL ; | ||
| 62 | + if(ioctl(cam_fd,VIDIOC_G_CTRL,&ctrl)==-1) | ||
| 63 | + { | ||
| 64 | + perror("ioctl"); | ||
| 65 | + exit(EXIT_FAILURE); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + | ||
| 69 | + //设置白平衡色温 | ||
| 70 | + ctrl.id = V4L2_CID_WHITE_BALANCE_TEMPERATURE; | ||
| 71 | + ctrl.value = 5100; | ||
| 72 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 73 | + { | ||
| 74 | + perror("ioctl"); | ||
| 75 | + exit(EXIT_FAILURE); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + | ||
| 79 | + //设置锐度 | ||
| 80 | + ctrl.id = V4L2_CID_SHARPNESS; | ||
| 81 | + ctrl.value = 4; | ||
| 82 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 83 | + { | ||
| 84 | + perror("ioctl"); | ||
| 85 | + exit(EXIT_FAILURE); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + | ||
| 89 | + //设置背光补偿 | ||
| 90 | + ctrl.id = V4L2_CID_BACKLIGHT_COMPENSATION; | ||
| 91 | + ctrl.value = 3; | ||
| 92 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 93 | + { | ||
| 94 | + perror("ioctl"); | ||
| 95 | + exit(EXIT_FAILURE); | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + //设置伽玛值 | ||
| 99 | + ctrl.id = V4L2_CID_GAMMA; | ||
| 100 | + ctrl.value = 120; | ||
| 101 | + if(ioctl(cam_fd,VIDIOC_S_CTRL,&ctrl)==-1) | ||
| 102 | + { | ||
| 103 | + perror("ioctl"); | ||
| 104 | + exit(EXIT_FAILURE); | ||
| 105 | + } | ||
| 106 | +*/ | ||
| 107 | + | ||
| 108 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 109 | +} | ||
| 110 | + |
| 1 | +/** | ||
| 2 | + ******************************************************************** | ||
| 3 | + * @file V4L2_CameraParameterSetting.h | ||
| 4 | + * 用于转码拍下来的照片以及视频 | ||
| 5 | + * | ||
| 6 | + ********************************************************************* | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
| 10 | +#ifndef V4L2_CAMERA_PARAMETER_SETTING_H | ||
| 11 | +#define V4L2_CAMERA_PARAMETER_SETTING_H | ||
| 12 | + | ||
| 13 | +/* Includes ------------------------------------------------------------------*/ | ||
| 14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
| 15 | + | ||
| 16 | + | ||
| 17 | +#ifdef __cplusplus | ||
| 18 | +extern "C" { | ||
| 19 | +#endif | ||
| 20 | + | ||
| 21 | +/* Exported constants --------------------------------------------------------*/ | ||
| 22 | +/* 常亮定义*/ | ||
| 23 | + | ||
| 24 | + | ||
| 25 | +/* Exported types ------------------------------------------------------------*/ | ||
| 26 | + | ||
| 27 | + | ||
| 28 | +/* Exported functions --------------------------------------------------------*/ | ||
| 29 | +T_JZsdkReturnCode V4L2_Parameter_Setting(int cam_fd); | ||
| 30 | + | ||
| 31 | + | ||
| 32 | +#ifdef __cplusplus | ||
| 33 | +} | ||
| 34 | +#endif | ||
| 35 | + | ||
| 36 | +#endif |
| @@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
| 19 | 19 | ||
| 20 | #include "JZsdkLib.h" | 20 | #include "JZsdkLib.h" |
| 21 | #include "./V4L2_Record.h" | 21 | #include "./V4L2_Record.h" |
| 22 | +#include "MediaProc/MediaParm.h" | ||
| 22 | 23 | ||
| 23 | /* Private constants ---------------------------------------------------------*/ | 24 | /* Private constants ---------------------------------------------------------*/ |
| 24 | // 清空 | 25 | // 清空 |
| @@ -42,7 +43,6 @@ static struct v4l2_buffer buf; | @@ -42,7 +43,6 @@ static struct v4l2_buffer buf; | ||
| 42 | static int camera_width; | 43 | static int camera_width; |
| 43 | static int camera_height; | 44 | static int camera_height; |
| 44 | static int camera_record_frame; | 45 | static int camera_record_frame; |
| 45 | -#define CAMERA_DEVICE_NAME ("/dev/video21") | ||
| 46 | 46 | ||
| 47 | //unsigned char* pucVideBuf[4]; // 视频BUFF空间地址 | 47 | //unsigned char* pucVideBuf[4]; // 视频BUFF空间地址 |
| 48 | 48 | ||
| @@ -213,8 +213,7 @@ static int init_device() | @@ -213,8 +213,7 @@ static int init_device() | ||
| 213 | fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | 213 | fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
| 214 | fmt.fmt.pix.width = camera_width; | 214 | fmt.fmt.pix.width = camera_width; |
| 215 | fmt.fmt.pix.height = camera_height; | 215 | fmt.fmt.pix.height = camera_height; |
| 216 | - fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG; | ||
| 217 | - //fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_H264; | 216 | + fmt.fmt.pix.pixelformat = CAMERA_CATCH_PIXEL; |
| 218 | fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; | 217 | fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; |
| 219 | 218 | ||
| 220 | //写入格式参数 | 219 | //写入格式参数 |
| @@ -288,7 +287,7 @@ T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame | @@ -288,7 +287,7 @@ T_JZsdkReturnCode V4l2_Camarainit2(int *dev_fd, int width, int height, int frame | ||
| 288 | ret = open_device(); | 287 | ret = open_device(); |
| 289 | if (ret != 0) | 288 | if (ret != 0) |
| 290 | { | 289 | { |
| 291 | - JZSDK_LOG_ERROR("打开摄像头失败"); | 290 | + JZSDK_LOG_ERROR("打开摄像头失败%s", CAMERA_DEVICE_NAME); |
| 292 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 291 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 293 | } | 292 | } |
| 294 | 293 |
| @@ -6,11 +6,12 @@ | @@ -6,11 +6,12 @@ | ||
| 6 | #include "./KtLibProc/KtLibProc.h" | 6 | #include "./KtLibProc/KtLibProc.h" |
| 7 | #include "./IRC_data_deal/IRC_data_deal.h" | 7 | #include "./IRC_data_deal/IRC_data_deal.h" |
| 8 | #include "./IRC_Param.h" | 8 | #include "./IRC_Param.h" |
| 9 | -#include "../StreamProc/StreamProc.h" | 9 | +#include "../MultProc/MultProc.h" |
| 10 | #include "../ImageProc/BadPixelProc/BadPixelProc.h" | 10 | #include "../ImageProc/BadPixelProc/BadPixelProc.h" |
| 11 | 11 | ||
| 12 | #include "MediaProc/MediaProc_Param.h" | 12 | #include "MediaProc/MediaProc_Param.h" |
| 13 | #include "./IRC_funtion.h" | 13 | #include "./IRC_funtion.h" |
| 14 | +#include "MediaProc/IRC_funtion/JZIRC_LibProc/JZIRC_Lib.h" | ||
| 14 | 15 | ||
| 15 | #define IRC_DEALMODE_JZSDK 0 | 16 | #define IRC_DEALMODE_JZSDK 0 |
| 16 | #define IRC_DEALMODE_KTLIB 1 | 17 | #define IRC_DEALMODE_KTLIB 1 |
| @@ -828,9 +828,32 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | @@ -828,9 +828,32 @@ T_JZsdkReturnCode JZIrcLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | ||
| 828 | break; | 828 | break; |
| 829 | 829 | ||
| 830 | default: | 830 | default: |
| 831 | + if (GrayImage != NULL) | ||
| 832 | + { | ||
| 833 | + free(GrayImage); | ||
| 834 | + GrayImage = NULL; | ||
| 835 | + } | ||
| 836 | + | ||
| 837 | + if (u16_CorrentData != NULL) | ||
| 838 | + { | ||
| 839 | + free(u16_CorrentData); | ||
| 840 | + u16_CorrentData = NULL; | ||
| 841 | + } | ||
| 831 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 842 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 832 | break; | 843 | break; |
| 833 | } | 844 | } |
| 834 | 845 | ||
| 846 | + if (GrayImage != NULL) | ||
| 847 | + { | ||
| 848 | + free(GrayImage); | ||
| 849 | + GrayImage = NULL; | ||
| 850 | + } | ||
| 851 | + | ||
| 852 | + if (u16_CorrentData != NULL) | ||
| 853 | + { | ||
| 854 | + free(u16_CorrentData); | ||
| 855 | + u16_CorrentData = NULL; | ||
| 856 | + } | ||
| 857 | + | ||
| 835 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 858 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 836 | } | 859 | } |
| @@ -3,11 +3,18 @@ | @@ -3,11 +3,18 @@ | ||
| 3 | #include <string.h> | 3 | #include <string.h> |
| 4 | #include "JZsdkLib.h" | 4 | #include "JZsdkLib.h" |
| 5 | 5 | ||
| 6 | +#include "BaseConfig.h" | ||
| 6 | 7 | ||
| 7 | #include "../IRC_data_deal/IRC_data_deal.h" | 8 | #include "../IRC_data_deal/IRC_data_deal.h" |
| 8 | 9 | ||
| 9 | #include <vector> | 10 | #include <vector> |
| 10 | -#include "KTv330_CPP.h" | 11 | + |
| 12 | +#ifdef KTIRC_LIB_STATUS_ON | ||
| 13 | + #include "KTv330_CPP.h" | ||
| 14 | +#endif | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 11 | #include "MediaProc/MediaProc_Param.h" | 18 | #include "MediaProc/MediaProc_Param.h" |
| 12 | 19 | ||
| 13 | #include "KtLibProc.h" | 20 | #include "KtLibProc.h" |
| @@ -15,7 +22,9 @@ | @@ -15,7 +22,9 @@ | ||
| 15 | #include "../IRC_Param.h" | 22 | #include "../IRC_Param.h" |
| 16 | 23 | ||
| 17 | // 创建一个 ClassKT 类对象 | 24 | // 创建一个 ClassKT 类对象 |
| 18 | -KTv330Space::ClassKT* KtObject = new KTv330Space::ClassKT(); | 25 | +#ifdef KTIRC_LIB_STATUS_ON |
| 26 | + KTv330Space::ClassKT* KtObject = new KTv330Space::ClassKT(); | ||
| 27 | +#endif | ||
| 19 | 28 | ||
| 20 | 29 | ||
| 21 | 30 | ||
| @@ -24,7 +33,7 @@ T_JZsdkReturnCode KtLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | @@ -24,7 +33,7 @@ T_JZsdkReturnCode KtLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | ||
| 24 | struct IRC_param *dealInfo) | 33 | struct IRC_param *dealInfo) |
| 25 | { | 34 | { |
| 26 | T_JZsdkReturnCode ret; | 35 | T_JZsdkReturnCode ret; |
| 27 | - | 36 | +#ifdef KTIRC_LIB_STATUS_ON |
| 28 | // 创建一个存储转换后数据的 vector<int> | 37 | // 创建一个存储转换后数据的 vector<int> |
| 29 | std::vector<int> inputDataVector(U16_data, U16_data + U16_dataSize); | 38 | std::vector<int> inputDataVector(U16_data, U16_data + U16_dataSize); |
| 30 | 39 | ||
| @@ -117,12 +126,14 @@ T_JZsdkReturnCode KtLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | @@ -117,12 +126,14 @@ T_JZsdkReturnCode KtLib_DataDeal(U16_t* U16_data, unsigned int U16_dataSize, | ||
| 117 | } | 126 | } |
| 118 | 127 | ||
| 119 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 128 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 129 | +#endif | ||
| 120 | } | 130 | } |
| 121 | 131 | ||
| 122 | T_JZsdkReturnCode KtLib_Init() | 132 | T_JZsdkReturnCode KtLib_Init() |
| 123 | { | 133 | { |
| 134 | +#ifdef KTIRC_LIB_STATUS_ON | ||
| 124 | KtObject->KT_M330_InfraredLogin("192.168.1.3", 6666, "192.168.1.2", 6666, 320, 256, 14, NULL, 0, 0); | 135 | KtObject->KT_M330_InfraredLogin("192.168.1.3", 6666, "192.168.1.2", 6666, 320, 256, 14, NULL, 0, 0); |
| 125 | - | 136 | +#endif |
| 126 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 137 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 127 | } | 138 | } |
| 128 | 139 |
| @@ -31,19 +31,35 @@ extern "C" { | @@ -31,19 +31,35 @@ extern "C" { | ||
| 31 | #define FIRST_HEIGHT 256 | 31 | #define FIRST_HEIGHT 256 |
| 32 | #define FIRST_FRAME_NUM 30 | 32 | #define FIRST_FRAME_NUM 30 |
| 33 | 33 | ||
| 34 | +#define BRIGHTNESS (80) //亮度,该摄像头亮度范围为 1-255 默认128 | ||
| 35 | +#define CONTRAST (155) //对比度,摄像头对比度范围为 1-255 默认128 | ||
| 36 | +#define SATURATION (128) //饱和度 摄像头饱和度范围为 1-255 默认128 | ||
| 37 | +#define EXPSURE (100) //曝光值 摄像头曝光值范围: 5-2500 默认auto设置 | ||
| 38 | + | ||
| 39 | + | ||
| 34 | #define SECOND_WIDTH 1920 | 40 | #define SECOND_WIDTH 1920 |
| 35 | #define SECOND_HEIGHT 1080 | 41 | #define SECOND_HEIGHT 1080 |
| 36 | #define SECOND_FRAME_NUM 30 | 42 | #define SECOND_FRAME_NUM 30 |
| 43 | +#define CAMERA_DEVICE_NAME ("/dev/video21") | ||
| 44 | +#define CAMERA_CATCH_PIXEL V4L2_PIX_FMT_MJPEG | ||
| 37 | 45 | ||
| 38 | #elif DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | 46 | #elif DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T |
| 39 | 47 | ||
| 40 | -#define FIRST_WIDTH 1280 | ||
| 41 | -#define FIRST_HEIGHT 720 | 48 | +#define FIRST_WIDTH 1980 |
| 49 | +#define FIRST_HEIGHT 1080 | ||
| 42 | #define FIRST_FRAME_NUM 25 | 50 | #define FIRST_FRAME_NUM 25 |
| 43 | 51 | ||
| 52 | +#define BRIGHTNESS (80) //亮度,该摄像头亮度范围为 1-255 默认128 | ||
| 53 | +#define CONTRAST (155) //对比度,摄像头对比度范围为 1-255 默认128 | ||
| 54 | +#define SATURATION (128) //饱和度 摄像头饱和度范围为 1-255 默认128 | ||
| 55 | +#define EXPSURE (100) //曝光值 摄像头曝光值范围: 5-2500 默认auto设置 | ||
| 56 | + | ||
| 44 | #define SECOND_WIDTH 0 | 57 | #define SECOND_WIDTH 0 |
| 45 | #define SECOND_HEIGHT 0 | 58 | #define SECOND_HEIGHT 0 |
| 46 | #define SECOND_FRAME_NUM 25 | 59 | #define SECOND_FRAME_NUM 25 |
| 60 | +#define CAMERA_DEVICE_NAME ("/dev/video0") | ||
| 61 | +#define CAMERA_CATCH_PIXEL V4L2_PIX_FMT_H264 | ||
| 62 | + | ||
| 47 | 63 | ||
| 48 | #else | 64 | #else |
| 49 | 65 | ||
| @@ -55,6 +71,9 @@ extern "C" { | @@ -55,6 +71,9 @@ extern "C" { | ||
| 55 | #define SECOND_HEIGHT 720 | 71 | #define SECOND_HEIGHT 720 |
| 56 | #define SECOND_FRAME_NUM 25 | 72 | #define SECOND_FRAME_NUM 25 |
| 57 | 73 | ||
| 74 | +#define CAMERA_DEVICE_NAME ("/dev/video0") | ||
| 75 | + | ||
| 76 | + | ||
| 58 | #endif | 77 | #endif |
| 59 | 78 | ||
| 60 | 79 |
| @@ -9,18 +9,48 @@ | @@ -9,18 +9,48 @@ | ||
| 9 | #include "BaseConfig.h" | 9 | #include "BaseConfig.h" |
| 10 | 10 | ||
| 11 | #include "./VideoMgmt/VideoMgmt.h" | 11 | #include "./VideoMgmt/VideoMgmt.h" |
| 12 | -#include "./StreamProc/StreamProc.h" | 12 | +#include "./MultProc/MultProc.h" |
| 13 | #include "./MediaParm.h" | 13 | #include "./MediaParm.h" |
| 14 | #include "./Camera/Camera.h" | 14 | #include "./Camera/Camera.h" |
| 15 | #include "./Camera/Kt_Irc/Kt_Irc.h" | 15 | #include "./Camera/Kt_Irc/Kt_Irc.h" |
| 16 | 16 | ||
| 17 | -static int Kt_irc_flag = JZ_FLAGCODE_ON; | 17 | +//单线程方案 |
| 18 | +static T_JZsdkReturnCode MediaProc_SingleThreading() | ||
| 19 | +{ | ||
| 20 | + //如果是150S相机 150T相机 | ||
| 21 | + if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
| 22 | + { | ||
| 23 | + //1、相机初始化 | ||
| 24 | + Camera_Init(0,FIRST_WIDTH, FIRST_HEIGHT, FIRST_FRAME_NUM); | ||
| 18 | 25 | ||
| 19 | -//视频流模块初始化 | ||
| 20 | -T_JZsdkReturnCode MediaProc_Init() | 26 | + //2、转码模块初始化 |
| 27 | + VideoStreamTransCode_Init(); | ||
| 28 | + } | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +//多线程方案 | ||
| 32 | +static T_JZsdkReturnCode MediaProc_MultiThreading() | ||
| 21 | { | 33 | { |
| 34 | + //如果是150S相机 150T相机 | ||
| 35 | + if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
| 36 | + { | ||
| 37 | + //1、启动视频流缓冲区模块 | ||
| 38 | + VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); | ||
| 39 | + | ||
| 40 | + //2、相机初始化 | ||
| 41 | + Camera_Init(1,FIRST_WIDTH, FIRST_HEIGHT, FIRST_FRAME_NUM); | ||
| 42 | + | ||
| 43 | + //3、启用推流模块 | ||
| 44 | + VideoMgmt_VideoStreamFlow_Init(FIRST_FRAME_NUM, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); | ||
| 45 | + | ||
| 46 | + //转码模块 | ||
| 47 | + VideoStreamTransCode_Init(); | ||
| 48 | + | ||
| 49 | + VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头 | ||
| 50 | + } | ||
| 51 | + | ||
| 22 | //如果是昆腾相机 红外+光学 则红外为1号,光学为2号 | 52 | //如果是昆腾相机 红外+光学 则红外为1号,光学为2号 |
| 23 | - if (Kt_irc_flag == JZ_FLAGCODE_ON) | 53 | + if (DEVICE_VERSION == JZ_C1) |
| 24 | { | 54 | { |
| 25 | //1、启动视频流缓冲区模块 | 55 | //1、启动视频流缓冲区模块 |
| 26 | VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); | 56 | VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); |
| @@ -43,7 +73,7 @@ T_JZsdkReturnCode MediaProc_Init() | @@ -43,7 +73,7 @@ T_JZsdkReturnCode MediaProc_Init() | ||
| 43 | VideoStreamTransCode_Init(); | 73 | VideoStreamTransCode_Init(); |
| 44 | 74 | ||
| 45 | //5、打开默认选项 | 75 | //5、打开默认选项 |
| 46 | - VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND); //默认推送光学摄像头 | 76 | + VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送红外摄像头 后续改成 红外+光学 的组合画面 |
| 47 | JZsdk_Kt_Irc_ShutterSwitch(JZ_FLAGCODE_ON); | 77 | JZsdk_Kt_Irc_ShutterSwitch(JZ_FLAGCODE_ON); |
| 48 | 78 | ||
| 49 | //6、修改部分参数 | 79 | //6、修改部分参数 |
| @@ -53,20 +83,17 @@ T_JZsdkReturnCode MediaProc_Init() | @@ -53,20 +83,17 @@ T_JZsdkReturnCode MediaProc_Init() | ||
| 53 | Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); | 83 | Camera_param(JZ_FLAGCODE_SET, CAMERA_PIXEL_PSEUDO_COLOR_MODE, &value); |
| 54 | } | 84 | } |
| 55 | 85 | ||
| 56 | - //如果是150S相机 150T相机 | ||
| 57 | - if (DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T) | ||
| 58 | - { | ||
| 59 | - //1、启动视频流缓冲区模块 | ||
| 60 | - VideoMgmt_init_buffer(&VideoMgmt_FirstVideo_index); | 86 | +} |
| 61 | 87 | ||
| 62 | - //2、相机初始化 | ||
| 63 | - JZsdk_H150ST_CameraInit(FIRST_WIDTH, FIRST_HEIGHT, FIRST_FRAME_NUM); | 88 | +//视频流模块初始化 |
| 89 | +T_JZsdkReturnCode MediaProc_Init() | ||
| 90 | +{ | ||
| 64 | 91 | ||
| 65 | - //3、启用推流模块 | ||
| 66 | - VideoMgmt_VideoStreamFlow_Init(FIRST_FRAME_NUM, &VideoMgmt_FirstVideo_index, VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); | ||
| 67 | - | ||
| 68 | - VideoMgmt_VideoStreamFlowIndex(VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST); //默认推送光学摄像头 | ||
| 69 | - } | 92 | +#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T |
| 93 | + MediaProc_SingleThreading(); | ||
| 94 | +# elif DEVICE_VERSION == JZ_C1 | ||
| 95 | + MediaProc_MultiThreading(); | ||
| 96 | +#endif | ||
| 70 | 97 | ||
| 71 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 98 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 72 | } | 99 | } |
| 1 | /** | 1 | /** |
| 2 | ******************************************************************** | 2 | ******************************************************************** |
| 3 | - * @file StreamProc.h | ||
| 4 | - * StreamProc的头文件 | 3 | + * @file MultProc.h |
| 4 | + * MultProc.c的头文件 | ||
| 5 | * | 5 | * |
| 6 | ********************************************************************* | 6 | ********************************************************************* |
| 7 | */ | 7 | */ |
| 1 | +/************************************************** | ||
| 2 | + * | ||
| 3 | + * 文件名:VideoMgmt.c | ||
| 4 | + * 视频流模块 | ||
| 5 | + * 版本:V1.0 | ||
| 6 | + * 作用: | ||
| 7 | + * 在视频流完成处理之后 | ||
| 8 | + * 1、将视频流数据发送到视频流推送模块 | ||
| 9 | + * 2、将视频流数据发送到视频流录制块 | ||
| 10 | + * 3、将视频流数据发送到视频流拍照模块 | ||
| 11 | + * | ||
| 12 | + * **********************************************************/ | ||
| 1 | #include <stdio.h> | 13 | #include <stdio.h> |
| 2 | #include <string.h> | 14 | #include <string.h> |
| 3 | #include <stdlib.h> | 15 | #include <stdlib.h> |
| @@ -15,245 +27,11 @@ | @@ -15,245 +27,11 @@ | ||
| 15 | #include "UI_control/UI_control.h" | 27 | #include "UI_control/UI_control.h" |
| 16 | #include "../MediaParm.h" | 28 | #include "../MediaParm.h" |
| 17 | 29 | ||
| 18 | -#include "../StreamProc/RTK_mmp/RTK_mmp.h" | ||
| 19 | - | ||
| 20 | -//额外头文件声明 | ||
| 21 | - | 30 | +#include "../MultProc/RTK_mmp/RTK_mmp.h" |
| 22 | 31 | ||
| 23 | -#define DATA_SEND_FROM_VIDEO_STREAM_MAX_LEN 60000 | ||
| 24 | -#define VIDEO_FRAME_AUD_LEN 6 | ||
| 25 | - | ||
| 26 | -static const unsigned char s_frameAudInfo[VIDEO_FRAME_AUD_LEN] = {0x00, 0x00, 0x00, 0x01, 0x09, 0x10}; | ||
| 27 | 32 | ||
| 28 | JZ_VideoStreamUseStatus g_VideoStreamDealStatus = VIDEO_STREAM_IDLE; //视频流的处理状态 | 33 | JZ_VideoStreamUseStatus g_VideoStreamDealStatus = VIDEO_STREAM_IDLE; //视频流的处理状态 |
| 29 | - | ||
| 30 | -/*视频流缓冲区地址说明 | ||
| 31 | - 留有三对缓冲区,一队中的数据分别为成型数据,以及原始数据 | ||
| 32 | - | ||
| 33 | - 如果设备只有一个摄像头,则使用一号视频流 | ||
| 34 | - | ||
| 35 | - 如果设备为 红外+光学 则红外为1号,光学为2号 | ||
| 36 | - | ||
| 37 | -*/ | ||
| 38 | -void *VideoMgmt_FirstVideo_index = NULL; //一号视频流的缓冲地址 | ||
| 39 | -void *VideoMgmt_SecondVideo_index = NULL; //二号视频流的缓冲地址 | ||
| 40 | -void *VideoMgmt_ThirdVideo_index = NULL; //三号视频流的缓冲地址 | ||
| 41 | - | ||
| 42 | -void *VideoMgmt_FirstRaw_index = NULL; //一号原始流的缓冲地址 | ||
| 43 | -void *VideoMgmt_SecondRaw_index = NULL; //二号原始流的缓冲地址 | ||
| 44 | -void *VideoMgmt_ThirdRaw_index = NULL; //三号原始流的缓冲地址 | ||
| 45 | - | ||
| 46 | -static int VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 | ||
| 47 | - | ||
| 48 | -//视频流缓冲区结构 | ||
| 49 | -typedef struct JZsdk_VideoBuffer{ | ||
| 50 | - unsigned char *data; //缓冲区数据 | ||
| 51 | - unsigned int data_len; | ||
| 52 | - int is_ready; // 标志位,表示数据是否准备好被读取 | ||
| 53 | - pthread_mutex_t lock; // 互斥锁,用于线程同步 | ||
| 54 | - pthread_cond_t cond; // 条件变量,用于通知读取线程数据已准备好 | ||
| 55 | -} JZsdk_VideoBuffer; | ||
| 56 | - | ||
| 57 | -// 初始化缓冲区 | ||
| 58 | -T_JZsdkReturnCode VideoMgmt_init_buffer(void **index) | ||
| 59 | -{ | ||
| 60 | - //从索引值获取对应的缓冲区 | ||
| 61 | - //创建一个缓冲区 | ||
| 62 | - struct JZsdk_VideoBuffer *VideoBuffer = NULL; | ||
| 63 | - | ||
| 64 | - //为编码器参数注册内存 | ||
| 65 | - VideoBuffer = (struct JZsdk_VideoBuffer *)malloc(sizeof(struct JZsdk_VideoBuffer)); | ||
| 66 | - if (VideoBuffer == NULL) { | ||
| 67 | - JZSDK_LOG_ERROR("视频流缓冲区注册失败"); | ||
| 68 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 69 | - } | ||
| 70 | - | ||
| 71 | - VideoBuffer->data = NULL; | ||
| 72 | - VideoBuffer->data_len = 0; | ||
| 73 | - VideoBuffer->is_ready = 0; | ||
| 74 | - pthread_mutex_init(&VideoBuffer->lock, NULL); | ||
| 75 | - pthread_cond_init(&VideoBuffer->cond, NULL); | ||
| 76 | - | ||
| 77 | - if (*index != NULL) | ||
| 78 | - { | ||
| 79 | - free(*index); | ||
| 80 | - } | ||
| 81 | - | ||
| 82 | - *index = (void *)VideoBuffer; | ||
| 83 | - | ||
| 84 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 85 | -} | ||
| 86 | - | ||
| 87 | -//缓冲区清理 | ||
| 88 | -T_JZsdkReturnCode VideoMgmt_VideoBuffer_Deinit(void **index) | ||
| 89 | -{ | ||
| 90 | - if (index == NULL || *index == NULL) { | ||
| 91 | - // 如果索引或缓冲区指针为空,则直接返回 | ||
| 92 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | - //从索引值获取对应的缓冲区 | ||
| 96 | - struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 97 | - | ||
| 98 | - if (VideoBuffer->data != NULL) | ||
| 99 | - { | ||
| 100 | - free(VideoBuffer->data); | ||
| 101 | - VideoBuffer->data = NULL; | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - VideoBuffer->data_len = 0; | ||
| 105 | - VideoBuffer->is_ready = 0; | ||
| 106 | - pthread_mutex_destroy(&VideoBuffer->lock); | ||
| 107 | - pthread_cond_destroy(&VideoBuffer->cond); | ||
| 108 | - | ||
| 109 | - free(VideoBuffer); | ||
| 110 | - index = NULL; // 防止悬挂指针 | ||
| 111 | - | ||
| 112 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 113 | -} | ||
| 114 | - | ||
| 115 | -//缓冲区写入 | ||
| 116 | -T_JZsdkReturnCode VideoMgmt_write_data(void **index, unsigned char *data, unsigned int data_len) | ||
| 117 | -{ | ||
| 118 | - //从索引值获取对应的缓冲区 | ||
| 119 | - struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 120 | - | ||
| 121 | - pthread_mutex_lock(&VideoBuffer->lock); | ||
| 122 | - | ||
| 123 | - // 释放旧数据 | ||
| 124 | - if (VideoBuffer->data) | ||
| 125 | - { | ||
| 126 | - free(VideoBuffer->data); | ||
| 127 | - VideoBuffer->data = NULL; | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | - // 分配新内存并复制数据 | ||
| 131 | - VideoBuffer->data = (unsigned char *)malloc(data_len); | ||
| 132 | - memcpy(VideoBuffer->data, data, data_len); | ||
| 133 | - VideoBuffer->data_len = data_len; | ||
| 134 | - VideoBuffer->is_ready = 1; // 标记数据已准备好 | ||
| 135 | - | ||
| 136 | - // 通知读取线程数据已准备好 | ||
| 137 | - pthread_cond_signal(&VideoBuffer->cond); | ||
| 138 | - | ||
| 139 | - pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 140 | -} | ||
| 141 | - | ||
| 142 | -//缓冲区读取 | ||
| 143 | -//输入的参数,缓冲区索引地址 回复的数据地址 回复的数据长度 帧头帧尾模式 帧头帧尾长度 | ||
| 144 | -T_JZsdkReturnCode VideoMgmt_read_data(void **index, unsigned char **data, unsigned int *data_len, unsigned int mode, unsigned int extra_len) | ||
| 145 | -{ | ||
| 146 | - //从索引值获取对应的缓冲区 | ||
| 147 | - struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 148 | - | ||
| 149 | - // 检查缓冲区指针是否有效 | ||
| 150 | - if (VideoBuffer == NULL) | ||
| 151 | - { | ||
| 152 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示参数无效 | ||
| 153 | - } | ||
| 154 | - | ||
| 155 | - pthread_mutex_lock(&VideoBuffer->lock); | ||
| 156 | - | ||
| 157 | - // 等待数据准备好 | ||
| 158 | - while (!VideoBuffer->is_ready) | ||
| 159 | - { | ||
| 160 | - pthread_cond_wait(&VideoBuffer->cond, &VideoBuffer->lock); | ||
| 161 | - } | ||
| 162 | - | ||
| 163 | - // 检查数据指针是否有效 | ||
| 164 | - if (VideoBuffer->data == NULL) | ||
| 165 | - { | ||
| 166 | - pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 167 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示没有数据可供读取 | ||
| 168 | - } | ||
| 169 | - | ||
| 170 | - // 返回数据和长度 | ||
| 171 | - *data_len = VideoBuffer->data_len; | ||
| 172 | - if (mode == JZ_FLAGCODE_OFF) | ||
| 173 | - { | ||
| 174 | - *data = (unsigned char *)malloc(*data_len); | ||
| 175 | - memcpy(*data, VideoBuffer->data, *data_len); | ||
| 176 | - } | ||
| 177 | - else if (mode == VIDEOMGMT_USE_FRAMEHEAD) | ||
| 178 | - { | ||
| 179 | - *data = (unsigned char *)malloc(*data_len + extra_len); | ||
| 180 | - memcpy(*data+extra_len, VideoBuffer->data, VideoBuffer->data_len); | ||
| 181 | - } | ||
| 182 | - else if (mode == VIDEOMGMT_USE_FRAMEEND) | ||
| 183 | - { | ||
| 184 | - *data = (unsigned char *)malloc(*data_len + extra_len); | ||
| 185 | - memcpy(*data, VideoBuffer->data, VideoBuffer->data_len); | ||
| 186 | - } | ||
| 187 | - else | ||
| 188 | - { | ||
| 189 | - *data = (unsigned char *)malloc(*data_len); | ||
| 190 | - memcpy(*data, VideoBuffer->data, *data_len); | ||
| 191 | - } | ||
| 192 | - | ||
| 193 | - VideoBuffer->is_ready = 0; | ||
| 194 | - pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 195 | - | ||
| 196 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 197 | -} | ||
| 198 | - | ||
| 199 | -/********** | ||
| 200 | - * | ||
| 201 | - * 直接返回地址略有风险,暂时不考虑使用这个以下注释的方法 | ||
| 202 | - * | ||
| 203 | - * ************/ | ||
| 204 | -// //缓冲区读取 | ||
| 205 | -// T_JZsdkReturnCode VideoMgmt_read_data(void **index, unsigned char **data, unsigned int *data_len) | ||
| 206 | -// { | ||
| 207 | -// //从索引值获取对应的缓冲区 | ||
| 208 | -// struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 209 | - | ||
| 210 | -// // 检查缓冲区指针是否有效 | ||
| 211 | -// if (VideoBuffer == NULL) | ||
| 212 | -// { | ||
| 213 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示参数无效 | ||
| 214 | -// } | ||
| 215 | - | ||
| 216 | -// pthread_mutex_lock(&VideoBuffer->lock); | ||
| 217 | - | ||
| 218 | -// // 等待数据准备好 | ||
| 219 | -// while (!VideoBuffer->is_ready) | ||
| 220 | -// { | ||
| 221 | -// pthread_cond_wait(&VideoBuffer->cond, &VideoBuffer->lock); | ||
| 222 | -// } | ||
| 223 | - | ||
| 224 | -// // 检查数据指针是否有效 | ||
| 225 | -// if (VideoBuffer->data == NULL) | ||
| 226 | -// { | ||
| 227 | -// pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 228 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示没有数据可供读取 | ||
| 229 | -// } | ||
| 230 | - | ||
| 231 | -// // 返回数据和长度 | ||
| 232 | -// *data = (VideoBuffer->data); | ||
| 233 | -// *data_len = VideoBuffer->data_len; | ||
| 234 | - | ||
| 235 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 236 | -// } | ||
| 237 | - | ||
| 238 | -// //回复已经读取完成,在read函数,且数据处理完成后调用 | ||
| 239 | -// T_JZsdkReturnCode VideoMgmt_ReplyRead(void **index) | ||
| 240 | -// { | ||
| 241 | -// //从索引值获取对应的缓冲区 | ||
| 242 | -// struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 243 | - | ||
| 244 | -// // 检查缓冲区指针是否有效 | ||
| 245 | -// if (VideoBuffer == NULL) | ||
| 246 | -// { | ||
| 247 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示参数无效 | ||
| 248 | -// } | ||
| 249 | - | ||
| 250 | -// VideoBuffer->is_ready = 0; | ||
| 251 | -// pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 252 | - | ||
| 253 | -// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 254 | -// } | ||
| 255 | - | ||
| 256 | - | 34 | +static int g_VideoFreezeFlag = JZ_FLAGCODE_OFF; //视频流冻结功能 |
| 257 | 35 | ||
| 258 | /********************************************************************************************************************************************* | 36 | /********************************************************************************************************************************************* |
| 259 | * | 37 | * |
| @@ -262,15 +40,14 @@ T_JZsdkReturnCode VideoMgmt_read_data(void **index, unsigned char **data, unsign | @@ -262,15 +40,14 @@ T_JZsdkReturnCode VideoMgmt_read_data(void **index, unsigned char **data, unsign | ||
| 262 | * | 40 | * |
| 263 | * | 41 | * |
| 264 | * *********************************************************************************************************************************************/ | 42 | * *********************************************************************************************************************************************/ |
| 265 | -struct VideoMgmt_VideoStreamFlow | ||
| 266 | -{ | ||
| 267 | - void **index; //用于提出画面流的缓冲区地址 | ||
| 268 | - int VideoStreamFlowIndex; //缓冲区的索引号,用于区分缓冲区 | ||
| 269 | - int FrameNumber; //推流的帧数 | ||
| 270 | -}; | ||
| 271 | 43 | ||
| 272 | -static int VideoStreamFlowIndexNum = JZ_FLAGCODE_OFF; //视频流转的索引值 | ||
| 273 | 44 | ||
| 45 | +static int g_VideoStreamFlowIndexNum = JZ_FLAGCODE_OFF; //视频流转的索引值 | ||
| 46 | + | ||
| 47 | +int VideoMgmt_GetVideoStreamFlowIndexNum() | ||
| 48 | +{ | ||
| 49 | + return g_VideoStreamFlowIndexNum; | ||
| 50 | +} | ||
| 274 | 51 | ||
| 275 | //设置流转的视频流 | 52 | //设置流转的视频流 |
| 276 | T_JZsdkReturnCode VideoMgmt_VideoStreamFlowIndex(int index) | 53 | T_JZsdkReturnCode VideoMgmt_VideoStreamFlowIndex(int index) |
| @@ -280,28 +57,28 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlowIndex(int index) | @@ -280,28 +57,28 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlowIndex(int index) | ||
| 280 | case JZ_FLAGCODE_OFF: | 57 | case JZ_FLAGCODE_OFF: |
| 281 | { | 58 | { |
| 282 | JZSDK_LOG_INFO("切换视频流为关"); | 59 | JZSDK_LOG_INFO("切换视频流为关"); |
| 283 | - VideoStreamFlowIndexNum = index; | 60 | + g_VideoStreamFlowIndexNum = index; |
| 284 | } | 61 | } |
| 285 | break; | 62 | break; |
| 286 | 63 | ||
| 287 | case VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST: | 64 | case VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST: |
| 288 | { | 65 | { |
| 289 | JZSDK_LOG_INFO("切换视频流为一号"); | 66 | JZSDK_LOG_INFO("切换视频流为一号"); |
| 290 | - VideoStreamFlowIndexNum = index; | 67 | + g_VideoStreamFlowIndexNum = index; |
| 291 | } | 68 | } |
| 292 | break; | 69 | break; |
| 293 | 70 | ||
| 294 | case VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND: | 71 | case VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND: |
| 295 | { | 72 | { |
| 296 | JZSDK_LOG_INFO("切换视频流为二号"); | 73 | JZSDK_LOG_INFO("切换视频流为二号"); |
| 297 | - VideoStreamFlowIndexNum = index; | 74 | + g_VideoStreamFlowIndexNum = index; |
| 298 | } | 75 | } |
| 299 | break; | 76 | break; |
| 300 | 77 | ||
| 301 | case VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD: | 78 | case VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD: |
| 302 | { | 79 | { |
| 303 | JZSDK_LOG_INFO("切换视频流为三号"); | 80 | JZSDK_LOG_INFO("切换视频流为三号"); |
| 304 | - VideoStreamFlowIndexNum = index; | 81 | + g_VideoStreamFlowIndexNum = index; |
| 305 | } | 82 | } |
| 306 | break; | 83 | break; |
| 307 | 84 | ||
| @@ -325,12 +102,12 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_RecordPlay(int status) | @@ -325,12 +102,12 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_RecordPlay(int status) | ||
| 325 | { | 102 | { |
| 326 | if (status == JZ_FLAGCODE_ON && Temp_LastVideoStatus == JZ_FLAGCODE_NORMAL) | 103 | if (status == JZ_FLAGCODE_ON && Temp_LastVideoStatus == JZ_FLAGCODE_NORMAL) |
| 327 | { | 104 | { |
| 328 | - Temp_LastVideoStatus = VideoStreamFlowIndexNum; | ||
| 329 | - VideoStreamFlowIndexNum = VIDEOMGMT_STREAMING_FLOW_INDEX_RECORD; | 105 | + Temp_LastVideoStatus = g_VideoStreamFlowIndexNum; |
| 106 | + g_VideoStreamFlowIndexNum = VIDEOMGMT_STREAMING_FLOW_INDEX_RECORD; | ||
| 330 | } | 107 | } |
| 331 | else if (status == JZ_FLAGCODE_OFF && Temp_LastVideoStatus != JZ_FLAGCODE_NORMAL) | 108 | else if (status == JZ_FLAGCODE_OFF && Temp_LastVideoStatus != JZ_FLAGCODE_NORMAL) |
| 332 | { | 109 | { |
| 333 | - VideoStreamFlowIndexNum = Temp_LastVideoStatus; | 110 | + g_VideoStreamFlowIndexNum = Temp_LastVideoStatus; |
| 334 | Temp_LastVideoStatus = JZ_FLAGCODE_NORMAL; | 111 | Temp_LastVideoStatus = JZ_FLAGCODE_NORMAL; |
| 335 | } | 112 | } |
| 336 | else | 113 | else |
| @@ -349,7 +126,7 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_RecordPlay(int status) | @@ -349,7 +126,7 @@ T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_RecordPlay(int status) | ||
| 349 | T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | 126 | T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() |
| 350 | { | 127 | { |
| 351 | #if DEVICE_VERSION == JZ_C1 | 128 | #if DEVICE_VERSION == JZ_C1 |
| 352 | - switch (VideoStreamFlowIndexNum) | 129 | + switch (g_VideoStreamFlowIndexNum) |
| 353 | { | 130 | { |
| 354 | case VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST: | 131 | case VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST: |
| 355 | { | 132 | { |
| @@ -375,10 +152,10 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | @@ -375,10 +152,10 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR() | ||
| 375 | /************** | 152 | /************** |
| 376 | * | 153 | * |
| 377 | * 视频流流转的线程 | 154 | * 视频流流转的线程 |
| 378 | - * | 155 | + * 视频流处理完成后,可以通过此函数完成拍照记录 录像记录 以及推送 |
| 379 | * | 156 | * |
| 380 | * ************/ | 157 | * ************/ |
| 381 | -static T_JZsdkReturnCode VideoStreamToDeal(unsigned char *data, unsigned int data_len) | 158 | +T_JZsdkReturnCode VideoMgmt_VideoStreamToDeal(unsigned char *data, unsigned int data_len) |
| 382 | { | 159 | { |
| 383 | //拍照数据 | 160 | //拍照数据 |
| 384 | VideoStramPhoto_PhotoDataIn(data, data_len); | 161 | VideoStramPhoto_PhotoDataIn(data, data_len); |
| @@ -394,117 +171,6 @@ static T_JZsdkReturnCode VideoStreamToDeal(unsigned char *data, unsigned int dat | @@ -394,117 +171,6 @@ static T_JZsdkReturnCode VideoStreamToDeal(unsigned char *data, unsigned int dat | ||
| 394 | //JZSDK_LOG_INFO("推送一帧%d,数据大小%d\n",VideoPush->VideoStreamFlowIndex,data_len); | 171 | //JZSDK_LOG_INFO("推送一帧%d,数据大小%d\n",VideoPush->VideoStreamFlowIndex,data_len); |
| 395 | } | 172 | } |
| 396 | 173 | ||
| 397 | -static void *VideoMgmt_VideoStreamFlow_Thread(void *args) | ||
| 398 | -{ | ||
| 399 | - struct VideoMgmt_VideoStreamFlow *VideoPush = (struct VideoMgmt_VideoStreamFlow *)args; | ||
| 400 | - int delay_time_ms = (1000/VideoPush->FrameNumber); //得出延时的ms | ||
| 401 | - | ||
| 402 | - unsigned char *FreezeData = NULL; | ||
| 403 | - unsigned int FreezeDataLen = 0; | ||
| 404 | - int FreezeFlag = JZ_FLAGCODE_OFF; | ||
| 405 | - | ||
| 406 | - while (1) | ||
| 407 | - { | ||
| 408 | - delayMs(delay_time_ms); | ||
| 409 | - | ||
| 410 | - //判断是否用视频流是否用的是当前这个 | ||
| 411 | - if (VideoPush->VideoStreamFlowIndex != VideoStreamFlowIndexNum) | ||
| 412 | - { | ||
| 413 | - continue; | ||
| 414 | - } | ||
| 415 | - | ||
| 416 | - //推流操作 | ||
| 417 | - //读取数据 | ||
| 418 | - unsigned char *data = NULL; | ||
| 419 | - unsigned int data_len = 0; | ||
| 420 | - | ||
| 421 | - //如果视频为大疆H264型 或 JZH264型 | ||
| 422 | - if (VIDEOMGMT_VIDEO_TPYE == VIDEOMGMT_TPYE_DJIH264 || VIDEOMGMT_VIDEO_TPYE == VIDEOMGMT_TPYE_JZH264 ) | ||
| 423 | - { | ||
| 424 | - VideoMgmt_read_data((void **)VideoPush->index, &data, &data_len, VIDEOMGMT_USE_FRAMEEND, VIDEO_FRAME_AUD_LEN); //读取 | ||
| 425 | - memcpy(data + data_len, s_frameAudInfo, VIDEO_FRAME_AUD_LEN); | ||
| 426 | - data_len = data_len + VIDEO_FRAME_AUD_LEN; | ||
| 427 | - } | ||
| 428 | - else | ||
| 429 | - { | ||
| 430 | - VideoMgmt_read_data((void **)VideoPush->index, &data, &data_len, JZ_FLAGCODE_OFF, JZ_FLAGCODE_OFF); //读取 | ||
| 431 | - } | ||
| 432 | - | ||
| 433 | - //冻结功能 | ||
| 434 | - if (VideoFreezeFlag == JZ_FLAGCODE_ON) | ||
| 435 | - { | ||
| 436 | - //如果冻结数据为空,且 当前为i帧 | ||
| 437 | - if (FreezeData == NULL && data[4] == 0x67) | ||
| 438 | - { | ||
| 439 | - FreezeDataLen = data_len; | ||
| 440 | - JZsdk_Malloc((void **)&FreezeData, data_len); | ||
| 441 | - memcpy(FreezeData, data, data_len); | ||
| 442 | - } | ||
| 443 | - } | ||
| 444 | - | ||
| 445 | - if (VideoFreezeFlag == JZ_FLAGCODE_ON && FreezeDataLen != 0) | ||
| 446 | - { | ||
| 447 | - VideoStreamToDeal(FreezeData, FreezeDataLen); | ||
| 448 | - } | ||
| 449 | - else | ||
| 450 | - { | ||
| 451 | - VideoStreamToDeal(data, data_len); | ||
| 452 | - } | ||
| 453 | - | ||
| 454 | - // 释放数据(如果有必要的话) | ||
| 455 | - if (data) { | ||
| 456 | - free(data); | ||
| 457 | - data = NULL; | ||
| 458 | - } | ||
| 459 | - data_len = 0; | ||
| 460 | - | ||
| 461 | - if (VideoFreezeFlag == JZ_FLAGCODE_OFF) | ||
| 462 | - { | ||
| 463 | - if (FreezeData) { | ||
| 464 | - free(FreezeData); | ||
| 465 | - FreezeData = NULL; | ||
| 466 | - } | ||
| 467 | - FreezeDataLen = 0; | ||
| 468 | - } | ||
| 469 | - } | ||
| 470 | - | ||
| 471 | - pthread_exit(NULL); | ||
| 472 | - return NULL; | ||
| 473 | -} | ||
| 474 | - | ||
| 475 | -//视频流流转模块的初始化 | ||
| 476 | -T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_Init(int FrameNumber, void **index, int VideoStreamFlowIndex) | ||
| 477 | -{ | ||
| 478 | - struct VideoMgmt_VideoStreamFlow *VideoStreamFlow = NULL; | ||
| 479 | - | ||
| 480 | - // 分配新内存并复制数据 | ||
| 481 | - VideoStreamFlow = (struct VideoMgmt_VideoStreamFlow *)malloc(sizeof(struct VideoMgmt_VideoStreamFlow)); | ||
| 482 | - if (VideoStreamFlow == NULL) { | ||
| 483 | - JZSDK_LOG_ERROR("视频流流转模块注册失败"); | ||
| 484 | - return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 485 | - } | ||
| 486 | - | ||
| 487 | - VideoStreamFlow->index = index; | ||
| 488 | - VideoStreamFlow->FrameNumber = FrameNumber; | ||
| 489 | - VideoStreamFlow->VideoStreamFlowIndex = VideoStreamFlowIndex; | ||
| 490 | - | ||
| 491 | - //创建视频流流转线程 | ||
| 492 | - pthread_t ReadDataTask; | ||
| 493 | - pthread_attr_t task_attribute; //线程属性 | ||
| 494 | - pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 495 | - pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 496 | - int ret = pthread_create(&ReadDataTask,&task_attribute,(void *)VideoMgmt_VideoStreamFlow_Thread,VideoStreamFlow); //线程 | ||
| 497 | - if(ret != 0) | ||
| 498 | - { | ||
| 499 | - JZSDK_LOG_ERROR("创建视频流流转线程失败!"); | ||
| 500 | - return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 501 | - } | ||
| 502 | - | ||
| 503 | - JZSDK_LOG_INFO("视频流流转模块初始化完毕"); | ||
| 504 | - | ||
| 505 | - return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 506 | -} | ||
| 507 | - | ||
| 508 | 174 | ||
| 509 | /************** | 175 | /************** |
| 510 | * | 176 | * |
| @@ -556,12 +222,12 @@ static T_JZsdkReturnCode VideoStream_FreezeVideo(int value) | @@ -556,12 +222,12 @@ static T_JZsdkReturnCode VideoStream_FreezeVideo(int value) | ||
| 556 | if (value == JZ_FLAGCODE_ON) | 222 | if (value == JZ_FLAGCODE_ON) |
| 557 | { | 223 | { |
| 558 | JZSDK_LOG_INFO("视频流冻结"); | 224 | JZSDK_LOG_INFO("视频流冻结"); |
| 559 | - VideoFreezeFlag = JZ_FLAGCODE_ON; | 225 | + g_VideoFreezeFlag = JZ_FLAGCODE_ON; |
| 560 | } | 226 | } |
| 561 | else if (value == JZ_FLAGCODE_OFF) | 227 | else if (value == JZ_FLAGCODE_OFF) |
| 562 | { | 228 | { |
| 563 | JZSDK_LOG_INFO("关闭视频流冻结"); | 229 | JZSDK_LOG_INFO("关闭视频流冻结"); |
| 564 | - VideoFreezeFlag = JZ_FLAGCODE_OFF; | 230 | + g_VideoFreezeFlag = JZ_FLAGCODE_OFF; |
| 565 | } | 231 | } |
| 566 | else | 232 | else |
| 567 | { | 233 | { |
| @@ -588,7 +254,7 @@ T_JZsdkReturnCode VideoMgmt_param(int flagcode, enum VideoMgmtParm paramflag, in | @@ -588,7 +254,7 @@ T_JZsdkReturnCode VideoMgmt_param(int flagcode, enum VideoMgmtParm paramflag, in | ||
| 588 | { | 254 | { |
| 589 | case VIDEO_MGMT_FREEZE: | 255 | case VIDEO_MGMT_FREEZE: |
| 590 | { | 256 | { |
| 591 | - *value = VideoFreezeFlag; | 257 | + *value = g_VideoFreezeFlag; |
| 592 | } | 258 | } |
| 593 | break; | 259 | break; |
| 594 | 260 | ||
| @@ -645,7 +311,7 @@ T_JZsdkReturnCode VideoMgmt_Send_StreamStatus(JZ_VideoStreamUseStatus status) | @@ -645,7 +311,7 @@ T_JZsdkReturnCode VideoMgmt_Send_StreamStatus(JZ_VideoStreamUseStatus status) | ||
| 645 | T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | 311 | T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) |
| 646 | { | 312 | { |
| 647 | #if DEVICE_VERSION == JZ_C1 | 313 | #if DEVICE_VERSION == JZ_C1 |
| 648 | - if (VideoStreamFlowIndexNum == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST) | 314 | + if (g_VideoStreamFlowIndexNum == VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST) |
| 649 | { | 315 | { |
| 650 | *width = FIRST_WIDTH; | 316 | *width = FIRST_WIDTH; |
| 651 | *height = FIRST_HEIGHT; | 317 | *height = FIRST_HEIGHT; |
| @@ -656,5 +322,11 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | @@ -656,5 +322,11 @@ T_JZsdkReturnCode VideoMgmt_Get_StreamWidthAndHeight(int *width, int *height) | ||
| 656 | *height = SECOND_HEIGHT; | 322 | *height = SECOND_HEIGHT; |
| 657 | } | 323 | } |
| 658 | #endif | 324 | #endif |
| 325 | + | ||
| 326 | +#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | ||
| 327 | + *width = FIRST_WIDTH; | ||
| 328 | + *height = FIRST_HEIGHT; | ||
| 329 | +#endif | ||
| 330 | + | ||
| 659 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 331 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 660 | } | 332 | } |
| @@ -12,6 +12,7 @@ | @@ -12,6 +12,7 @@ | ||
| 12 | 12 | ||
| 13 | /* Includes ------------------------------------------------------------------*/ | 13 | /* Includes ------------------------------------------------------------------*/ |
| 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | 14 | #include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" |
| 15 | +#include "./VideoMgmt_Parm.h" | ||
| 15 | 16 | ||
| 16 | #ifdef __cplusplus | 17 | #ifdef __cplusplus |
| 17 | extern "C" { | 18 | extern "C" { |
| @@ -19,48 +20,7 @@ extern "C" { | @@ -19,48 +20,7 @@ extern "C" { | ||
| 19 | 20 | ||
| 20 | /* Exported constants --------------------------------------------------------*/ | 21 | /* Exported constants --------------------------------------------------------*/ |
| 21 | /* 常亮定义*/ | 22 | /* 常亮定义*/ |
| 22 | -typedef enum { | ||
| 23 | - VIDEOMGMT_TPYE_H264 = 0x0000, | ||
| 24 | - VIDEOMGMT_TPYE_DJIH264 = 0x0001, | ||
| 25 | - VIDEOMGMT_TPYE_JZH264 = 0x0002 | ||
| 26 | -} JZ_VideoMgmt_Type_Code; | ||
| 27 | 23 | ||
| 28 | -//推送的索引值,用于解决推送哪一个视频流的问题 | ||
| 29 | -typedef enum JZ_VideoMgmt_PushIndex{ | ||
| 30 | - VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST = 0x0001, | ||
| 31 | - VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND = 0x0002, | ||
| 32 | - VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD = 0x0003, | ||
| 33 | - VIDEOMGMT_STREAMING_FLOW_INDEX_RECORD = 0x0010, //录像流 | ||
| 34 | -}JZ_VideoMgmt_PushIndex; | ||
| 35 | - | ||
| 36 | -//视频流的使用状态 | ||
| 37 | -typedef enum JZ_VideoStreamUseStatus{ | ||
| 38 | - VIDEO_STREAM_IDLE = 0x0000, //相机空闲 | ||
| 39 | - VIDEO_STREAM_RECORD = 0x0001, //相机录像中 | ||
| 40 | - VIDEO_STREAM_SHOOTPHOTO = 0x0002, //相机拍照中 | ||
| 41 | - VIDEO_STREAM_BRUSTSHOORPHOTO = 0x0003, //相机连拍中 | ||
| 42 | - VIDEO_STREAM_TRANSCODE = 0x0004, //相机转码中 | ||
| 43 | -}JZ_VideoStreamUseStatus; | ||
| 44 | - | ||
| 45 | - | ||
| 46 | -typedef enum VideoMgmtParm | ||
| 47 | -{ | ||
| 48 | - VIDEO_MGMT_FREEZE = 0x0001, //冻结 | ||
| 49 | - | ||
| 50 | -}VideoMgmtParm; | ||
| 51 | - | ||
| 52 | - | ||
| 53 | -extern void *VideoMgmt_FirstVideo_index; //一号视频流的缓冲地址 | ||
| 54 | -extern void *VideoMgmt_SecondVideo_index; //二号视频流的缓冲地址 | ||
| 55 | -extern void *VideoMgmt_ThirdVideo_index; //三号视频流的缓冲地址 | ||
| 56 | - | ||
| 57 | -extern void *VideoMgmt_FirstRaw_index; //一号原始流的缓冲地址 | ||
| 58 | -extern void *VideoMgmt_SecondRaw_index; //二号原始流的缓冲地址 | ||
| 59 | -extern void *VideoMgmt_ThirdRaw_index; //三号原始流的缓冲地址 | ||
| 60 | - | ||
| 61 | -#define VIDEOMGMT_USE_FRAMEHEAD (1) //获取的数据加上帧头预留位 | ||
| 62 | -#define VIDEOMGMT_USE_FRAMEEND (2) //获取的数据加上帧尾预留位 | ||
| 63 | -#define VIDEOMGMT_VIDEO_TPYE VIDEOMGMT_TPYE_DJIH264 //推送帧的视频格式 | ||
| 64 | 24 | ||
| 65 | /* Exported types ------------------------------------------------------------*/ | 25 | /* Exported types ------------------------------------------------------------*/ |
| 66 | 26 | ||
| @@ -93,6 +53,22 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR(); | @@ -93,6 +53,22 @@ T_JZsdkReturnCode VideoStramPhoto_DevelopH264FlowGenerateIDR(); | ||
| 93 | * *********/ | 53 | * *********/ |
| 94 | T_JZsdkReturnCode VideoRecord_TransMode(int status); | 54 | T_JZsdkReturnCode VideoRecord_TransMode(int status); |
| 95 | 55 | ||
| 56 | + | ||
| 57 | +/********* | ||
| 58 | + * | ||
| 59 | + * 内部交互函数 | ||
| 60 | + * | ||
| 61 | + * *****************/ | ||
| 62 | +T_JZsdkReturnCode VideoMgmt_VideoStreamToDeal(unsigned char *data, unsigned int data_len); | ||
| 63 | +int VideoMgmt_GetVideoStreamFlowIndexNum(); | ||
| 64 | + | ||
| 65 | +/************* | ||
| 66 | + * | ||
| 67 | + * 单线程输入函数 | ||
| 68 | + * | ||
| 69 | + * **************/ | ||
| 70 | +T_JZsdkReturnCode VideoMgmt_Single_FrameIn(unsigned char *FrmaeData,unsigned int FrmaeDataLen); | ||
| 71 | + | ||
| 96 | #ifdef __cplusplus | 72 | #ifdef __cplusplus |
| 97 | } | 73 | } |
| 98 | #endif | 74 | #endif |
| 1 | +/************************************************** | ||
| 2 | + * | ||
| 3 | + * 文件名:缓冲区管理文件 | ||
| 4 | + * | ||
| 5 | + * **********************************************************/ | ||
| 6 | +#include <stdio.h> | ||
| 7 | +#include <string.h> | ||
| 8 | +#include <stdlib.h> | ||
| 9 | +#include <pthread.h> | ||
| 10 | +#include <unistd.h> | ||
| 11 | + | ||
| 12 | +#include "JZsdkLib.h" | ||
| 13 | +#include "BaseConfig.h" | ||
| 14 | + | ||
| 15 | +#include "./VideoMgmt.h" | ||
| 16 | +#include "../MediaParm.h" | ||
| 17 | +#include "./VideoMgmt_Parm.h" | ||
| 18 | + | ||
| 19 | + | ||
| 20 | +/*视频流缓冲区地址说明 | ||
| 21 | + 留有三对缓冲区,一队中的数据分别为成型数据,以及原始数据 | ||
| 22 | + | ||
| 23 | + 如果设备只有一个摄像头,则使用一号视频流 | ||
| 24 | + | ||
| 25 | + 如果设备为 红外+光学 则红外为1号,光学为2号 | ||
| 26 | + | ||
| 27 | +*/ | ||
| 28 | +void *VideoMgmt_FirstVideo_index = NULL; //一号视频流的缓冲地址 | ||
| 29 | +void *VideoMgmt_SecondVideo_index = NULL; //二号视频流的缓冲地址 | ||
| 30 | +void *VideoMgmt_ThirdVideo_index = NULL; //三号视频流的缓冲地址 | ||
| 31 | + | ||
| 32 | +void *VideoMgmt_FirstRaw_index = NULL; //一号原始流的缓冲地址 | ||
| 33 | +void *VideoMgmt_SecondRaw_index = NULL; //二号原始流的缓冲地址 | ||
| 34 | +void *VideoMgmt_ThirdRaw_index = NULL; //三号原始流的缓冲地址 | ||
| 35 | + | ||
| 36 | +//视频流缓冲区结构 | ||
| 37 | +typedef struct JZsdk_VideoBuffer{ | ||
| 38 | + unsigned char *data; //缓冲区数据 | ||
| 39 | + unsigned int data_len; | ||
| 40 | + int is_ready; // 标志位,表示数据是否准备好被读取 | ||
| 41 | + pthread_mutex_t lock; // 互斥锁,用于线程同步 | ||
| 42 | + pthread_cond_t cond; // 条件变量,用于通知读取线程数据已准备好 | ||
| 43 | +} JZsdk_VideoBuffer; | ||
| 44 | + | ||
| 45 | +// 初始化缓冲区 | ||
| 46 | +T_JZsdkReturnCode VideoMgmt_init_buffer(void **index) | ||
| 47 | +{ | ||
| 48 | + //从索引值获取对应的缓冲区 | ||
| 49 | + //创建一个缓冲区 | ||
| 50 | + struct JZsdk_VideoBuffer *VideoBuffer = NULL; | ||
| 51 | + | ||
| 52 | + //为编码器参数注册内存 | ||
| 53 | + VideoBuffer = (struct JZsdk_VideoBuffer *)malloc(sizeof(struct JZsdk_VideoBuffer)); | ||
| 54 | + if (VideoBuffer == NULL) { | ||
| 55 | + JZSDK_LOG_ERROR("视频流缓冲区注册失败"); | ||
| 56 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + VideoBuffer->data = NULL; | ||
| 60 | + VideoBuffer->data_len = 0; | ||
| 61 | + VideoBuffer->is_ready = 0; | ||
| 62 | + pthread_mutex_init(&VideoBuffer->lock, NULL); | ||
| 63 | + pthread_cond_init(&VideoBuffer->cond, NULL); | ||
| 64 | + | ||
| 65 | + if (*index != NULL) | ||
| 66 | + { | ||
| 67 | + free(*index); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + *index = (void *)VideoBuffer; | ||
| 71 | + | ||
| 72 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +//缓冲区清理 | ||
| 76 | +T_JZsdkReturnCode VideoMgmt_VideoBuffer_Deinit(void **index) | ||
| 77 | +{ | ||
| 78 | + if (index == NULL || *index == NULL) { | ||
| 79 | + // 如果索引或缓冲区指针为空,则直接返回 | ||
| 80 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + //从索引值获取对应的缓冲区 | ||
| 84 | + struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 85 | + | ||
| 86 | + if (VideoBuffer->data != NULL) | ||
| 87 | + { | ||
| 88 | + free(VideoBuffer->data); | ||
| 89 | + VideoBuffer->data = NULL; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + VideoBuffer->data_len = 0; | ||
| 93 | + VideoBuffer->is_ready = 0; | ||
| 94 | + pthread_mutex_destroy(&VideoBuffer->lock); | ||
| 95 | + pthread_cond_destroy(&VideoBuffer->cond); | ||
| 96 | + | ||
| 97 | + free(VideoBuffer); | ||
| 98 | + index = NULL; // 防止悬挂指针 | ||
| 99 | + | ||
| 100 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 101 | +} | ||
| 102 | + | ||
| 103 | +//缓冲区写入 | ||
| 104 | +T_JZsdkReturnCode VideoMgmt_write_data(void **index, unsigned char *data, unsigned int data_len) | ||
| 105 | +{ | ||
| 106 | + //从索引值获取对应的缓冲区 | ||
| 107 | + struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 108 | + | ||
| 109 | + pthread_mutex_lock(&VideoBuffer->lock); | ||
| 110 | + | ||
| 111 | + // 释放旧数据 | ||
| 112 | + if (VideoBuffer->data) | ||
| 113 | + { | ||
| 114 | + free(VideoBuffer->data); | ||
| 115 | + VideoBuffer->data = NULL; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + // 分配新内存并复制数据 | ||
| 119 | + VideoBuffer->data = (unsigned char *)malloc(data_len); | ||
| 120 | + memcpy(VideoBuffer->data, data, data_len); | ||
| 121 | + VideoBuffer->data_len = data_len; | ||
| 122 | + VideoBuffer->is_ready = 1; // 标记数据已准备好 | ||
| 123 | + | ||
| 124 | + // 通知读取线程数据已准备好 | ||
| 125 | + pthread_cond_signal(&VideoBuffer->cond); | ||
| 126 | + | ||
| 127 | + pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 128 | +} | ||
| 129 | + | ||
| 130 | +//缓冲区读取 | ||
| 131 | +//输入的参数,缓冲区索引地址 回复的数据地址 回复的数据长度 帧头帧尾模式 帧头帧尾长度 | ||
| 132 | +T_JZsdkReturnCode VideoMgmt_read_data(void **index, unsigned char **data, unsigned int *data_len, unsigned int mode, unsigned int extra_len) | ||
| 133 | +{ | ||
| 134 | + //从索引值获取对应的缓冲区 | ||
| 135 | + struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 136 | + | ||
| 137 | + // 检查缓冲区指针是否有效 | ||
| 138 | + if (VideoBuffer == NULL) | ||
| 139 | + { | ||
| 140 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示参数无效 | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + pthread_mutex_lock(&VideoBuffer->lock); | ||
| 144 | + | ||
| 145 | + // 等待数据准备好 | ||
| 146 | + while (!VideoBuffer->is_ready) | ||
| 147 | + { | ||
| 148 | + pthread_cond_wait(&VideoBuffer->cond, &VideoBuffer->lock); | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + // 检查数据指针是否有效 | ||
| 152 | + if (VideoBuffer->data == NULL) | ||
| 153 | + { | ||
| 154 | + pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 155 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示没有数据可供读取 | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + // 返回数据和长度 | ||
| 159 | + *data_len = VideoBuffer->data_len; | ||
| 160 | + if (mode == JZ_FLAGCODE_OFF) | ||
| 161 | + { | ||
| 162 | + *data = (unsigned char *)malloc(*data_len); | ||
| 163 | + memcpy(*data, VideoBuffer->data, *data_len); | ||
| 164 | + } | ||
| 165 | + else if (mode == VIDEOMGMT_USE_FRAMEHEAD) | ||
| 166 | + { | ||
| 167 | + *data = (unsigned char *)malloc(*data_len + extra_len); | ||
| 168 | + memcpy(*data+extra_len, VideoBuffer->data, VideoBuffer->data_len); | ||
| 169 | + } | ||
| 170 | + else if (mode == VIDEOMGMT_USE_FRAMEEND) | ||
| 171 | + { | ||
| 172 | + *data = (unsigned char *)malloc(*data_len + extra_len); | ||
| 173 | + memcpy(*data, VideoBuffer->data, VideoBuffer->data_len); | ||
| 174 | + } | ||
| 175 | + else | ||
| 176 | + { | ||
| 177 | + *data = (unsigned char *)malloc(*data_len); | ||
| 178 | + memcpy(*data, VideoBuffer->data, *data_len); | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + VideoBuffer->is_ready = 0; | ||
| 182 | + pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 183 | + | ||
| 184 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 185 | +} | ||
| 186 | + | ||
| 187 | +/********** | ||
| 188 | + * | ||
| 189 | + * 直接返回地址略有风险,暂时不考虑使用这个以下注释的方法 | ||
| 190 | + * | ||
| 191 | + * ************/ | ||
| 192 | +// //缓冲区读取 | ||
| 193 | +// T_JZsdkReturnCode VideoMgmt_read_data(void **index, unsigned char **data, unsigned int *data_len) | ||
| 194 | +// { | ||
| 195 | +// //从索引值获取对应的缓冲区 | ||
| 196 | +// struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 197 | + | ||
| 198 | +// // 检查缓冲区指针是否有效 | ||
| 199 | +// if (VideoBuffer == NULL) | ||
| 200 | +// { | ||
| 201 | +// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示参数无效 | ||
| 202 | +// } | ||
| 203 | + | ||
| 204 | +// pthread_mutex_lock(&VideoBuffer->lock); | ||
| 205 | + | ||
| 206 | +// // 等待数据准备好 | ||
| 207 | +// while (!VideoBuffer->is_ready) | ||
| 208 | +// { | ||
| 209 | +// pthread_cond_wait(&VideoBuffer->cond, &VideoBuffer->lock); | ||
| 210 | +// } | ||
| 211 | + | ||
| 212 | +// // 检查数据指针是否有效 | ||
| 213 | +// if (VideoBuffer->data == NULL) | ||
| 214 | +// { | ||
| 215 | +// pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 216 | +// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示没有数据可供读取 | ||
| 217 | +// } | ||
| 218 | + | ||
| 219 | +// // 返回数据和长度 | ||
| 220 | +// *data = (VideoBuffer->data); | ||
| 221 | +// *data_len = VideoBuffer->data_len; | ||
| 222 | + | ||
| 223 | +// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 224 | +// } | ||
| 225 | + | ||
| 226 | +// //回复已经读取完成,在read函数,且数据处理完成后调用 | ||
| 227 | +// T_JZsdkReturnCode VideoMgmt_ReplyRead(void **index) | ||
| 228 | +// { | ||
| 229 | +// //从索引值获取对应的缓冲区 | ||
| 230 | +// struct JZsdk_VideoBuffer *VideoBuffer = (struct JZsdk_VideoBuffer *)*index; | ||
| 231 | + | ||
| 232 | +// // 检查缓冲区指针是否有效 | ||
| 233 | +// if (VideoBuffer == NULL) | ||
| 234 | +// { | ||
| 235 | +// return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; // 假设的错误码,表示参数无效 | ||
| 236 | +// } | ||
| 237 | + | ||
| 238 | +// VideoBuffer->is_ready = 0; | ||
| 239 | +// pthread_mutex_unlock(&VideoBuffer->lock); | ||
| 240 | + | ||
| 241 | +// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 242 | +// } |
Module/MediaProc/VideoMgmt/VideoMgmt_Parm.h
0 → 100644
| 1 | +/** | ||
| 2 | + ******************************************************************** | ||
| 3 | + * @file VideoMgmt_Parm.h | ||
| 4 | + * VideoMgmt_Parm的头文件 | ||
| 5 | + * | ||
| 6 | + ********************************************************************* | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
| 10 | +#ifndef VIDEO_MGMT_PARAM_H | ||
| 11 | +#define VIDEO_MGMT_PARAM_H | ||
| 12 | + | ||
| 13 | +/* Includes ------------------------------------------------------------------*/ | ||
| 14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
| 15 | + | ||
| 16 | +#ifdef __cplusplus | ||
| 17 | +extern "C" { | ||
| 18 | +#endif | ||
| 19 | + | ||
| 20 | +/* Exported constants --------------------------------------------------------*/ | ||
| 21 | +/* 常亮定义*/ | ||
| 22 | + | ||
| 23 | +typedef enum { | ||
| 24 | + VIDEOMGMT_TPYE_H264 = 0x0000, | ||
| 25 | + VIDEOMGMT_TPYE_DJIH264 = 0x0001, | ||
| 26 | + VIDEOMGMT_TPYE_JZH264 = 0x0002 | ||
| 27 | +} JZ_VideoMgmt_Type_Code; | ||
| 28 | + | ||
| 29 | +//推送的索引值,用于解决推送哪一个视频流的问题 | ||
| 30 | +typedef enum JZ_VideoMgmt_PushIndex{ | ||
| 31 | + VIDEOMGMT_STREAMING_FLOW_INDEX_FIRST = 0x0001, | ||
| 32 | + VIDEOMGMT_STREAMING_FLOW_INDEX_SECOND = 0x0002, | ||
| 33 | + VIDEOMGMT_STREAMING_FLOW_INDEX_THIRD = 0x0003, | ||
| 34 | + VIDEOMGMT_STREAMING_FLOW_INDEX_RECORD = 0x0010, //录像流 | ||
| 35 | +}JZ_VideoMgmt_PushIndex; | ||
| 36 | + | ||
| 37 | +//视频流的使用状态 | ||
| 38 | +typedef enum JZ_VideoStreamUseStatus{ | ||
| 39 | + VIDEO_STREAM_IDLE = 0x0000, //相机空闲 | ||
| 40 | + VIDEO_STREAM_RECORD = 0x0001, //相机录像中 | ||
| 41 | + VIDEO_STREAM_SHOOTPHOTO = 0x0002, //相机拍照中 | ||
| 42 | + VIDEO_STREAM_BRUSTSHOORPHOTO = 0x0003, //相机连拍中 | ||
| 43 | + VIDEO_STREAM_TRANSCODE = 0x0004, //相机转码中 | ||
| 44 | +}JZ_VideoStreamUseStatus; | ||
| 45 | + | ||
| 46 | +//视频流索引 | ||
| 47 | +typedef struct VideoMgmt_VideoStreamFlow | ||
| 48 | +{ | ||
| 49 | + void **index; //用于提出画面流的缓冲区地址 | ||
| 50 | + int VideoStreamFlowIndex; //缓冲区的索引号,用于区分缓冲区 | ||
| 51 | + int FrameNumber; //推流的帧数 | ||
| 52 | +}VideoMgmt_VideoStreamFlow; | ||
| 53 | + | ||
| 54 | + | ||
| 55 | +typedef enum VideoMgmtParm | ||
| 56 | +{ | ||
| 57 | + VIDEO_MGMT_FREEZE = 0x0001, //冻结 | ||
| 58 | + | ||
| 59 | +}VideoMgmtParm; | ||
| 60 | + | ||
| 61 | + | ||
| 62 | +extern void *VideoMgmt_FirstVideo_index; //一号视频流的缓冲地址 | ||
| 63 | +extern void *VideoMgmt_SecondVideo_index; //二号视频流的缓冲地址 | ||
| 64 | +extern void *VideoMgmt_ThirdVideo_index; //三号视频流的缓冲地址 | ||
| 65 | + | ||
| 66 | +extern void *VideoMgmt_FirstRaw_index; //一号原始流的缓冲地址 | ||
| 67 | +extern void *VideoMgmt_SecondRaw_index; //二号原始流的缓冲地址 | ||
| 68 | +extern void *VideoMgmt_ThirdRaw_index; //三号原始流的缓冲地址 | ||
| 69 | + | ||
| 70 | +#define VIDEOMGMT_USE_FRAMEHEAD (1) //获取的数据加上帧头预留位 | ||
| 71 | +#define VIDEOMGMT_USE_FRAMEEND (2) //获取的数据加上帧尾预留位 | ||
| 72 | +#define VIDEOMGMT_VIDEO_TPYE VIDEOMGMT_TPYE_DJIH264 //推送帧的视频格式 | ||
| 73 | + | ||
| 74 | +#define VIDEO_FRAME_AUD_NO1_LEN 6 | ||
| 75 | +static const unsigned char FrameAudInfo_NO1[VIDEO_FRAME_AUD_NO1_LEN] = {0x00, 0x00, 0x00, 0x01, 0x09, 0x10}; //类型一帧长度 | ||
| 76 | + | ||
| 77 | +/* Exported types ------------------------------------------------------------*/ | ||
| 78 | + | ||
| 79 | +/* Exported functions --------------------------------------------------------*/ | ||
| 80 | + | ||
| 81 | + | ||
| 82 | + | ||
| 83 | +#ifdef __cplusplus | ||
| 84 | +} | ||
| 85 | +#endif | ||
| 86 | + | ||
| 87 | +#endif |
| 1 | +/************************************************** | ||
| 2 | + * | ||
| 3 | + * 文件名:VideoMgmt的多线程处理模式 | ||
| 4 | + * | ||
| 5 | + * **********************************************************/ | ||
| 6 | +#include <stdio.h> | ||
| 7 | +#include <string.h> | ||
| 8 | +#include <stdlib.h> | ||
| 9 | +#include <pthread.h> | ||
| 10 | +#include <unistd.h> | ||
| 11 | + | ||
| 12 | +#include "JZsdkLib.h" | ||
| 13 | +#include "BaseConfig.h" | ||
| 14 | + | ||
| 15 | +#include "./VideoMgmt.h" | ||
| 16 | +#include "../MediaParm.h" | ||
| 17 | +#include "./VideoMgmt_Parm.h" | ||
| 18 | + | ||
| 19 | + | ||
| 20 | +static void *VideoMgmt_VideoStreamFlow_Thread(void *args) | ||
| 21 | +{ | ||
| 22 | + struct VideoMgmt_VideoStreamFlow *VideoPush = (struct VideoMgmt_VideoStreamFlow *)args; | ||
| 23 | + int delay_time_ms = (1000/VideoPush->FrameNumber); //得出延时的ms | ||
| 24 | + | ||
| 25 | + unsigned char *FreezeData = NULL; | ||
| 26 | + unsigned int FreezeDataLen = 0; | ||
| 27 | + int VideoFreezeFlag = JZ_FLAGCODE_OFF; | ||
| 28 | + | ||
| 29 | + while (1) | ||
| 30 | + { | ||
| 31 | + delayMs(delay_time_ms); | ||
| 32 | + | ||
| 33 | + //判断是否用视频流是否用的是当前这个 | ||
| 34 | + if (VideoPush->VideoStreamFlowIndex != VideoMgmt_GetVideoStreamFlowIndexNum()) | ||
| 35 | + { | ||
| 36 | + continue; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + //推流操作 | ||
| 40 | + //读取数据 | ||
| 41 | + unsigned char *data = NULL; | ||
| 42 | + unsigned int data_len = 0; | ||
| 43 | + | ||
| 44 | + //如果视频为大疆H264型 或 JZH264型 | ||
| 45 | + if (VIDEOMGMT_VIDEO_TPYE == VIDEOMGMT_TPYE_DJIH264 || VIDEOMGMT_VIDEO_TPYE == VIDEOMGMT_TPYE_JZH264 ) | ||
| 46 | + { | ||
| 47 | + VideoMgmt_read_data((void **)VideoPush->index, &data, &data_len, VIDEOMGMT_USE_FRAMEEND, VIDEO_FRAME_AUD_NO1_LEN); //读取 | ||
| 48 | + memcpy(data + data_len, FrameAudInfo_NO1, VIDEO_FRAME_AUD_NO1_LEN); | ||
| 49 | + data_len = data_len + VIDEO_FRAME_AUD_NO1_LEN; | ||
| 50 | + } | ||
| 51 | + else | ||
| 52 | + { | ||
| 53 | + VideoMgmt_read_data((void **)VideoPush->index, &data, &data_len, JZ_FLAGCODE_OFF, JZ_FLAGCODE_OFF); //读取 | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + //获取冻结标志位 | ||
| 57 | + VideoMgmt_param(JZ_FLAGCODE_SET, VIDEO_MGMT_FREEZE, &VideoFreezeFlag); | ||
| 58 | + | ||
| 59 | + //冻结功能 | ||
| 60 | + if (VideoFreezeFlag == JZ_FLAGCODE_ON) | ||
| 61 | + { | ||
| 62 | + //如果冻结数据为空,且 当前为i帧 | ||
| 63 | + if (FreezeData == NULL && data[4] == 0x67) | ||
| 64 | + { | ||
| 65 | + FreezeDataLen = data_len; | ||
| 66 | + JZsdk_Malloc((void **)&FreezeData, data_len); | ||
| 67 | + memcpy(FreezeData, data, data_len); | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + //冻结开了就推送冻结画面 | ||
| 72 | + if (VideoFreezeFlag == JZ_FLAGCODE_ON && FreezeDataLen != 0) | ||
| 73 | + { | ||
| 74 | + VideoMgmt_VideoStreamToDeal(FreezeData, FreezeDataLen); | ||
| 75 | + } | ||
| 76 | + //否则推送正常画面 | ||
| 77 | + else | ||
| 78 | + { | ||
| 79 | + VideoMgmt_VideoStreamToDeal(data, data_len); | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + // 释放数据(如果有必要的话) | ||
| 83 | + if (data) { | ||
| 84 | + printf("释放1\n"); | ||
| 85 | + free(data); | ||
| 86 | + data = NULL; | ||
| 87 | + } | ||
| 88 | + data_len = 0; | ||
| 89 | + | ||
| 90 | + if (VideoFreezeFlag == JZ_FLAGCODE_OFF) | ||
| 91 | + { | ||
| 92 | + if (FreezeData) { | ||
| 93 | + free(FreezeData); | ||
| 94 | + FreezeData = NULL; | ||
| 95 | + } | ||
| 96 | + FreezeDataLen = 0; | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + pthread_exit(NULL); | ||
| 101 | + return NULL; | ||
| 102 | +} | ||
| 103 | + | ||
| 104 | + | ||
| 105 | + | ||
| 106 | + | ||
| 107 | +/************************ | ||
| 108 | + * | ||
| 109 | + * 开启流转区块 | ||
| 110 | + * | ||
| 111 | + * | ||
| 112 | + * | ||
| 113 | + * ***********************/ | ||
| 114 | +T_JZsdkReturnCode VideoMgmt_VideoStreamFlow_Init(int FrameNumber, void **index, int VideoStreamFlowIndex) | ||
| 115 | +{ | ||
| 116 | + struct VideoMgmt_VideoStreamFlow *VideoStreamFlow = NULL; | ||
| 117 | + | ||
| 118 | + // 分配新内存并复制数据 | ||
| 119 | + VideoStreamFlow = (struct VideoMgmt_VideoStreamFlow *)malloc(sizeof(struct VideoMgmt_VideoStreamFlow)); | ||
| 120 | + if (VideoStreamFlow == NULL) { | ||
| 121 | + JZSDK_LOG_ERROR("视频流流转模块注册失败"); | ||
| 122 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + VideoStreamFlow->index = index; | ||
| 126 | + VideoStreamFlow->FrameNumber = FrameNumber; | ||
| 127 | + VideoStreamFlow->VideoStreamFlowIndex = VideoStreamFlowIndex; | ||
| 128 | + | ||
| 129 | + //创建视频流流转线程 | ||
| 130 | + pthread_t ReadDataTask; | ||
| 131 | + pthread_attr_t task_attribute; //线程属性 | ||
| 132 | + pthread_attr_init(&task_attribute); //初始化线程属性 | ||
| 133 | + pthread_attr_setdetachstate(&task_attribute, PTHREAD_CREATE_DETACHED); //设置线程分离属性 | ||
| 134 | + int ret = pthread_create(&ReadDataTask,&task_attribute,(void *)VideoMgmt_VideoStreamFlow_Thread,VideoStreamFlow); //线程 | ||
| 135 | + if(ret != 0) | ||
| 136 | + { | ||
| 137 | + JZSDK_LOG_ERROR("创建视频流流转线程失败!"); | ||
| 138 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + JZSDK_LOG_INFO("视频流流转模块初始化完毕"); | ||
| 142 | + | ||
| 143 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 144 | +} |
| 1 | +/************************************************** | ||
| 2 | + * | ||
| 3 | + * 文件名:VideoMgmt的单线程处理模式 | ||
| 4 | + * | ||
| 5 | + * **********************************************************/ | ||
| 6 | +#include <stdio.h> | ||
| 7 | +#include <string.h> | ||
| 8 | +#include <stdlib.h> | ||
| 9 | +#include <unistd.h> | ||
| 10 | + | ||
| 11 | +#include "JZsdkLib.h" | ||
| 12 | +#include "BaseConfig.h" | ||
| 13 | + | ||
| 14 | +#include "./VideoMgmt.h" | ||
| 15 | +#include "../MediaParm.h" | ||
| 16 | +#include "./VideoMgmt_Parm.h" | ||
| 17 | + | ||
| 18 | + | ||
| 19 | +/************************ | ||
| 20 | + * | ||
| 21 | + * 视频管理模块 | ||
| 22 | + * 单线程模式下的数据输入接口 | ||
| 23 | + * | ||
| 24 | + * *************************/ | ||
| 25 | +T_JZsdkReturnCode VideoMgmt_Single_FrameIn(unsigned char *FrmaeData,unsigned int FrmaeDataLen) | ||
| 26 | +{ | ||
| 27 | + //判断数据是否为空 | ||
| 28 | + if(FrmaeData == NULL) | ||
| 29 | + { | ||
| 30 | + return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER; | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + //判断数据长度是否为空 | ||
| 34 | + if(FrmaeDataLen == 0) | ||
| 35 | + { | ||
| 36 | + return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + //进行数据后处理,即加入帧头,帧尾等 | ||
| 40 | + //如果视频为大疆H264型 或 JZH264型 | ||
| 41 | + if (VIDEOMGMT_VIDEO_TPYE == VIDEOMGMT_TPYE_DJIH264 || VIDEOMGMT_VIDEO_TPYE == VIDEOMGMT_TPYE_JZH264 ) | ||
| 42 | + { | ||
| 43 | + unsigned char *data = (unsigned char *)malloc(FrmaeDataLen + VIDEO_FRAME_AUD_NO1_LEN); | ||
| 44 | + memcpy(data, FrmaeData, FrmaeDataLen); | ||
| 45 | + memcpy(data + FrmaeDataLen, FrameAudInfo_NO1, VIDEO_FRAME_AUD_NO1_LEN); | ||
| 46 | + FrmaeDataLen = FrmaeDataLen + VIDEO_FRAME_AUD_NO1_LEN; | ||
| 47 | + | ||
| 48 | + //将数据输入到流转函数中 | ||
| 49 | + VideoMgmt_VideoStreamToDeal(data,FrmaeDataLen); | ||
| 50 | + | ||
| 51 | + free(data); | ||
| 52 | + } | ||
| 53 | + else | ||
| 54 | + { | ||
| 55 | + //将数据输入到流转函数中 | ||
| 56 | + VideoMgmt_VideoStreamToDeal(FrmaeData,FrmaeDataLen); | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 60 | +} |
| @@ -29,7 +29,7 @@ T_JZsdkReturnCode VideoStream_PushFrame(unsigned char* h264_data, unsigned int d | @@ -29,7 +29,7 @@ T_JZsdkReturnCode VideoStream_PushFrame(unsigned char* h264_data, unsigned int d | ||
| 29 | } | 29 | } |
| 30 | else | 30 | else |
| 31 | { | 31 | { |
| 32 | - JZSDK_LOG_ERROR("视频传输发送了错误帧\n"); | 32 | + JZSDK_LOG_ERROR("视频传输发送了错误帧,长度%d [0]:%x [1]:%x [2]:%x [3]:%x [4]:%x",data_len, h264_data[0], h264_data[1], h264_data[2], h264_data[3], h264_data[4]); |
| 33 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 33 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 34 | } | 34 | } |
| 35 | 35 |
| @@ -190,6 +190,8 @@ static int Video_TransCode_Thread_Init() | @@ -190,6 +190,8 @@ static int Video_TransCode_Thread_Init() | ||
| 190 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 190 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 194 | + | ||
| 193 | } | 195 | } |
| 194 | 196 | ||
| 195 | /***** | 197 | /***** |
| @@ -210,6 +212,8 @@ T_JZsdkReturnCode VideoStreamTransCode_Init() | @@ -210,6 +212,8 @@ T_JZsdkReturnCode VideoStreamTransCode_Init() | ||
| 210 | { | 212 | { |
| 211 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 213 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 212 | } | 214 | } |
| 215 | + | ||
| 216 | + JZSDK_LOG_INFO("transcode module init success"); | ||
| 213 | 217 | ||
| 214 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 218 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 215 | } | 219 | } |
| @@ -5,6 +5,8 @@ | @@ -5,6 +5,8 @@ | ||
| 5 | #include "Megaphone/Megaphone.h" | 5 | #include "Megaphone/Megaphone.h" |
| 6 | #include "DeviceInfo/DeviceInfo.h" | 6 | #include "DeviceInfo/DeviceInfo.h" |
| 7 | 7 | ||
| 8 | +extern unsigned char *g_JZsdkParam_PlayPromptTTS; //播放提示音 | ||
| 9 | + | ||
| 8 | T_JZsdkReturnCode Start_voice() | 10 | T_JZsdkReturnCode Start_voice() |
| 9 | { | 11 | { |
| 10 | if (APP_VERSION == APP_UART) | 12 | if (APP_VERSION == APP_UART) |
| @@ -107,4 +109,105 @@ T_JZsdkReturnCode Start_up_and_broadcast_voice() | @@ -107,4 +109,105 @@ T_JZsdkReturnCode Start_up_and_broadcast_voice() | ||
| 107 | } | 109 | } |
| 108 | } | 110 | } |
| 109 | } | 111 | } |
| 112 | +} | ||
| 113 | + | ||
| 114 | +T_JZsdkReturnCode AttentionVoice_IndependencePlay() | ||
| 115 | +{ | ||
| 116 | + | ||
| 117 | + //如果是 -p sucess 程序成功 播放喊话器升级成功 | ||
| 118 | + | ||
| 119 | + //如果是 -p updefeat 程序失败 播放喊话器升级失败 | ||
| 120 | + | ||
| 121 | + //设置音量 | ||
| 122 | + Megaphone_SetVolume(30 , 0); | ||
| 123 | + | ||
| 124 | + delayMs(100); | ||
| 125 | + | ||
| 126 | + //根据属地设置默认语言 | ||
| 127 | + int language = 0; | ||
| 128 | + int OriginValue = FOMAT_Get_FirewareOriginRegion(); | ||
| 129 | + | ||
| 130 | + //如果是国内版或者无属地 设置为中文 | ||
| 131 | + if (OriginValue == ORIGIN_DEFAULT || OriginValue == ORIGIN_CN) | ||
| 132 | + { | ||
| 133 | + language = 0x01; | ||
| 134 | + Megaphone_TTS_param(JZ_FLAGCODE_SET, MEGAPHONE_TTS_TONE, &language); | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + //如果是海外版 设置为英文 | ||
| 138 | + else | ||
| 139 | + { | ||
| 140 | + language = 0x11; | ||
| 141 | + Megaphone_TTS_param(JZ_FLAGCODE_SET, MEGAPHONE_TTS_TONE, &language); | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + //如果是 -p error 程序错误 播放喊话器错误 | ||
| 145 | + if (strcmp((const char *)g_JZsdkParam_PlayPromptTTS, "error") == 0) | ||
| 146 | + { | ||
| 147 | + JZSDK_LOG_INFO("播放喊话器错误"); | ||
| 148 | + | ||
| 149 | + if (language == 0x11) | ||
| 150 | + { | ||
| 151 | + Megaphone_TTS_Play("Software error, restarting Megaphone.", strlen("Software error, restarting Megaphone."), JZ_FLAGCODE_ON); | ||
| 152 | + } | ||
| 153 | + else | ||
| 154 | + { | ||
| 155 | + Megaphone_TTS_Play("程序错误,正在重启喊话器", strlen("程序错误,正在重启喊话器"), JZ_FLAGCODE_ON); | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + else if (strcmp((const char *)g_JZsdkParam_PlayPromptTTS, "upsucess") == 0) | ||
| 159 | + { | ||
| 160 | + JZSDK_LOG_INFO("播放喊话器升级成功"); | ||
| 161 | + | ||
| 162 | + if (language == 0x11) | ||
| 163 | + { | ||
| 164 | + Megaphone_TTS_Play("Upgrade completed, restarting Megaphone.", strlen("Upgrade completed, restarting Megaphone."), JZ_FLAGCODE_ON); | ||
| 165 | + } | ||
| 166 | + else | ||
| 167 | + { | ||
| 168 | + Megaphone_TTS_Play("升级已完成,正在重启喊话器", strlen("升级已完成,正在重启喊话器"), JZ_FLAGCODE_ON); | ||
| 169 | + } | ||
| 170 | + } | ||
| 171 | + else if (strcmp((const char *)g_JZsdkParam_PlayPromptTTS, "updefeat") == 0) | ||
| 172 | + { | ||
| 173 | + JZSDK_LOG_INFO("播放喊话器升级失败"); | ||
| 174 | + | ||
| 175 | + if (language == 0x11) | ||
| 176 | + { | ||
| 177 | + Megaphone_TTS_Play("Upgrade defeat, restarting Megaphone.", strlen("Upgrade defeat, restarting Megaphone."), JZ_FLAGCODE_ON); | ||
| 178 | + } | ||
| 179 | + else | ||
| 180 | + { | ||
| 181 | + Megaphone_TTS_Play("升级失败,请检查Log或者重启喊话器", strlen("升级失败,请检查Log或者重启喊话器"), JZ_FLAGCODE_ON); | ||
| 182 | + } | ||
| 183 | + } | ||
| 184 | + else if (strcmp((const char *)g_JZsdkParam_PlayPromptTTS, "start") == 0) | ||
| 185 | + { | ||
| 186 | + JZSDK_LOG_INFO("播放喊话器启动中"); | ||
| 187 | + | ||
| 188 | + if (language == 0x11) | ||
| 189 | + { | ||
| 190 | + Megaphone_TTS_Play("Upgrade defeat, restarting Megaphone.", strlen("Upgrade defeat, restarting Megaphone."), JZ_FLAGCODE_ON); | ||
| 191 | + } | ||
| 192 | + else | ||
| 193 | + { | ||
| 194 | + Megaphone_TTS_Play("喊话器启动中", strlen("喊话器启动中"), JZ_FLAGCODE_ON); | ||
| 195 | + } | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + delayMs(100); | ||
| 199 | + | ||
| 200 | + //等待播放状态结束 | ||
| 201 | + while(1) | ||
| 202 | + { | ||
| 203 | + if (Megaphone_GetMegaphoneStatus() != JZ_FLAGCODE_OFF) | ||
| 204 | + { | ||
| 205 | + delayMs(1); | ||
| 206 | + continue; | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + break; | ||
| 210 | + } | ||
| 211 | + | ||
| 212 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 110 | } | 213 | } |
| 1 | +/** | ||
| 2 | + ******************************************************************** | ||
| 3 | + * @file | ||
| 4 | + * | ||
| 5 | + * | ||
| 6 | + ********************************************************************* | ||
| 7 | + */ | ||
| 8 | + | ||
| 9 | +/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/ | ||
| 10 | +#ifndef ATTENTIONVOICE_H | ||
| 11 | +#define ATTENTIONVOICE_H | ||
| 12 | + | ||
| 13 | +/* Includes ------------------------------------------------------------------*/ | ||
| 14 | +#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h" | ||
| 15 | + | ||
| 16 | +#ifdef __cplusplus | ||
| 17 | +extern "C" { | ||
| 18 | +#endif | ||
| 19 | + | ||
| 20 | +/* Exported constants --------------------------------------------------------*/ | ||
| 21 | +/* 常亮定义*/ | ||
| 22 | + | ||
| 23 | +/* Exported types ------------------------------------------------------------*/ | ||
| 24 | + | ||
| 25 | +/* Exported functions --------------------------------------------------------*/ | ||
| 26 | + | ||
| 27 | +T_JZsdkReturnCode Start_voice(); | ||
| 28 | +T_JZsdkReturnCode Start_up_and_broadcast_voice(); | ||
| 29 | +T_JZsdkReturnCode AttentionVoice_IndependencePlay(); | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +#ifdef __cplusplus | ||
| 36 | +} | ||
| 37 | +#endif | ||
| 38 | + | ||
| 39 | +#endif |
| @@ -335,6 +335,7 @@ T_JZsdkReturnCode JZsdk_GetSongInDudioList_AudioInfo(struct AudioMange_Node *hea | @@ -335,6 +335,7 @@ T_JZsdkReturnCode JZsdk_GetSongInDudioList_AudioInfo(struct AudioMange_Node *hea | ||
| 335 | while (current != NULL) { | 335 | while (current != NULL) { |
| 336 | if (strcmp(current->audioInfo.FileName, songToFind->FileName) == 0) | 336 | if (strcmp(current->audioInfo.FileName, songToFind->FileName) == 0) |
| 337 | { | 337 | { |
| 338 | + songToFind->FileNameLen = current->audioInfo.FileNameLen; | ||
| 338 | songToFind->BitRate = current->audioInfo.BitRate; | 339 | songToFind->BitRate = current->audioInfo.BitRate; |
| 339 | songToFind->FileSize = current->audioInfo.FileSize; | 340 | songToFind->FileSize = current->audioInfo.FileSize; |
| 340 | songToFind->FileType = current->audioInfo.FileType; | 341 | songToFind->FileType = current->audioInfo.FileType; |
| @@ -309,6 +309,8 @@ T_JZsdkReturnCode AudioFile_FlushAudioList() | @@ -309,6 +309,8 @@ T_JZsdkReturnCode AudioFile_FlushAudioList() | ||
| 309 | //打印一遍已加载的音乐 | 309 | //打印一遍已加载的音乐 |
| 310 | JZsdk_PrintfAuidoNode_AudioList(g_AudioList); | 310 | JZsdk_PrintfAuidoNode_AudioList(g_AudioList); |
| 311 | 311 | ||
| 312 | + JZSDK_LOG_INFO("刷新歌曲列表已完成"); | ||
| 313 | + | ||
| 312 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 314 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 313 | } | 315 | } |
| 314 | 316 | ||
| @@ -636,6 +638,8 @@ T_JZsdkReturnCode AudioFile_SaveAudioFileStop(int checkFlag, unsigned char *Chec | @@ -636,6 +638,8 @@ T_JZsdkReturnCode AudioFile_SaveAudioFileStop(int checkFlag, unsigned char *Chec | ||
| 636 | g_AudioFile_SaveAudioFile_NameFp = NULL; | 638 | g_AudioFile_SaveAudioFile_NameFp = NULL; |
| 637 | g_AudioFile_SaveAudioFile_len = 0; //置零长度 | 639 | g_AudioFile_SaveAudioFile_len = 0; //置零长度 |
| 638 | 640 | ||
| 641 | + JZsdk_RunSystemCmd("sync"); | ||
| 642 | + | ||
| 639 | if (checkFlag != JZ_FLAGCODE_OFF) | 643 | if (checkFlag != JZ_FLAGCODE_OFF) |
| 640 | { | 644 | { |
| 641 | //校验文件 | 645 | //校验文件 |
| @@ -676,6 +680,8 @@ T_JZsdkReturnCode AudioFile_SaveAudioFileStop(int checkFlag, unsigned char *Chec | @@ -676,6 +680,8 @@ T_JZsdkReturnCode AudioFile_SaveAudioFileStop(int checkFlag, unsigned char *Chec | ||
| 676 | ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 680 | ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 677 | } | 681 | } |
| 678 | 682 | ||
| 683 | + JZsdk_RunSystemCmd("sync"); | ||
| 684 | + | ||
| 679 | //2、关闭标志位 | 685 | //2、关闭标志位 |
| 680 | AudioFile_save_flag = 0; | 686 | AudioFile_save_flag = 0; |
| 681 | 687 | ||
| @@ -720,12 +726,13 @@ T_JZsdkReturnCode AudioFile_GetAudioInfo(unsigned char *str, unsigned int str_le | @@ -720,12 +726,13 @@ T_JZsdkReturnCode AudioFile_GetAudioInfo(unsigned char *str, unsigned int str_le | ||
| 720 | T_JZsdkReturnCode ret; | 726 | T_JZsdkReturnCode ret; |
| 721 | 727 | ||
| 722 | //1、查询该名字是否存在于音乐列表中 | 728 | //1、查询该名字是否存在于音乐列表中 |
| 729 | + memset(songToFind->FileName, 0 ,sizeof(songToFind->FileName)); | ||
| 723 | memcpy(songToFind->FileName, str, str_len); | 730 | memcpy(songToFind->FileName, str, str_len); |
| 724 | 731 | ||
| 725 | ret = JZsdk_isSongInAudioList(g_AudioList, (*songToFind)); | 732 | ret = JZsdk_isSongInAudioList(g_AudioList, (*songToFind)); |
| 726 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 733 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
| 727 | { | 734 | { |
| 728 | - JZSDK_LOG_ERROR("播放文件不存在于音乐列表"); | 735 | + JZSDK_LOG_ERROR("播放文件不存在于音乐列表 %s", songToFind->FileName); |
| 729 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 736 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 730 | } | 737 | } |
| 731 | 738 |
| @@ -188,7 +188,7 @@ static void *MegTempRead_task(void *arg) | @@ -188,7 +188,7 @@ static void *MegTempRead_task(void *arg) | ||
| 188 | int fd = open("/dev/sunxi_adc",O_RDWR); | 188 | int fd = open("/dev/sunxi_adc",O_RDWR); |
| 189 | if(fd < 0) | 189 | if(fd < 0) |
| 190 | { | 190 | { |
| 191 | - return; | 191 | + return NULL; |
| 192 | JZSDK_LOG_ERROR("测温模块出错"); | 192 | JZSDK_LOG_ERROR("测温模块出错"); |
| 193 | } | 193 | } |
| 194 | 194 |
| @@ -1174,8 +1174,8 @@ T_JZsdkReturnCode Megaphone_SetVolume(int value, int mode)//设置音é‡ï¼ŒéŸ³é‡ | @@ -1174,8 +1174,8 @@ T_JZsdkReturnCode Megaphone_SetVolume(int value, int mode)//设置音é‡ï¼ŒéŸ³é‡ | ||
| 1174 | 1174 | ||
| 1175 | now_volume=value;//获取当前音量 | 1175 | now_volume=value;//获取当前音量 |
| 1176 | 1176 | ||
| 1177 | - //10T要提高30初始音量 | ||
| 1178 | - if (DEVICE_VERSION == JZ_H10T) | 1177 | + //v3s自设系统 10T要提高30初始音量 |
| 1178 | + if (DEVICE_VERSION == JZ_H10T || DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30) | ||
| 1179 | { | 1179 | { |
| 1180 | if (value > 0) | 1180 | if (value > 0) |
| 1181 | { | 1181 | { |
| @@ -1190,29 +1190,12 @@ T_JZsdkReturnCode Megaphone_SetVolume(int value, int mode)//设置音é‡ï¼ŒéŸ³é‡ | @@ -1190,29 +1190,12 @@ T_JZsdkReturnCode Megaphone_SetVolume(int value, int mode)//设置音é‡ï¼ŒéŸ³é‡ | ||
| 1190 | 1190 | ||
| 1191 | else if(value>0&&value<100) | 1191 | else if(value>0&&value<100) |
| 1192 | { | 1192 | { |
| 1193 | - if (DEVICE_VERSION == JZ_U3) | ||
| 1194 | - { | ||
| 1195 | - value=value*g_Max_volume/100 *63/100; | ||
| 1196 | - } | ||
| 1197 | - | ||
| 1198 | - else | ||
| 1199 | - { | ||
| 1200 | - value=value*g_Max_volume/100 *255/100; | ||
| 1201 | - } | 1193 | + value=value*g_Max_volume/100 *255/100; |
| 1202 | } | 1194 | } |
| 1203 | 1195 | ||
| 1204 | else if(value>=100) | 1196 | else if(value>=100) |
| 1205 | { | 1197 | { |
| 1206 | - if (DEVICE_VERSION == JZ_U3) | ||
| 1207 | - { | ||
| 1208 | - value=100*g_Max_volume/100 *63/100; | ||
| 1209 | - } | ||
| 1210 | - | ||
| 1211 | - else | ||
| 1212 | - { | ||
| 1213 | - value=100*g_Max_volume/100 *255/100; | ||
| 1214 | - } | ||
| 1215 | - | 1198 | + value=100*g_Max_volume/100 *255/100; |
| 1216 | } | 1199 | } |
| 1217 | 1200 | ||
| 1218 | int* set_volume_value_ptr = malloc(sizeof(int)); // 动态分配内存 | 1201 | int* set_volume_value_ptr = malloc(sizeof(int)); // 动态分配内存 |
| @@ -1244,8 +1227,8 @@ static T_JZsdkReturnCode Megaphone_SetTTSvolume() | @@ -1244,8 +1227,8 @@ static T_JZsdkReturnCode Megaphone_SetTTSvolume() | ||
| 1244 | int value = now_volume; | 1227 | int value = now_volume; |
| 1245 | printf("TTS音量修改\n"); | 1228 | printf("TTS音量修改\n"); |
| 1246 | 1229 | ||
| 1247 | - //10T要提高30初始音量 | ||
| 1248 | - if (DEVICE_VERSION == JZ_H10T) | 1230 | + //v3s自设系统 10T要提高30初始音量 |
| 1231 | + if (DEVICE_VERSION == JZ_H10T || DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U30) | ||
| 1249 | { | 1232 | { |
| 1250 | if (value > 0) | 1233 | if (value > 0) |
| 1251 | { | 1234 | { |
| @@ -1261,29 +1244,12 @@ static T_JZsdkReturnCode Megaphone_SetTTSvolume() | @@ -1261,29 +1244,12 @@ static T_JZsdkReturnCode Megaphone_SetTTSvolume() | ||
| 1261 | 1244 | ||
| 1262 | else if(value>0&&value<100) | 1245 | else if(value>0&&value<100) |
| 1263 | { | 1246 | { |
| 1264 | - if (DEVICE_VERSION == JZ_U3) | ||
| 1265 | - { | ||
| 1266 | - value=value*g_TTS_Max_volume/63 *63/100; | ||
| 1267 | - } | ||
| 1268 | - | ||
| 1269 | - else | ||
| 1270 | - { | ||
| 1271 | - value=value*g_TTS_Max_volume/100 *255/100; | ||
| 1272 | - } | 1247 | + value=value*g_TTS_Max_volume/100 *255/100; |
| 1273 | } | 1248 | } |
| 1274 | 1249 | ||
| 1275 | else if(value>=100) | 1250 | else if(value>=100) |
| 1276 | { | 1251 | { |
| 1277 | - if (DEVICE_VERSION == JZ_U3) | ||
| 1278 | - { | ||
| 1279 | - value=100*g_TTS_Max_volume/100 *63/100; | ||
| 1280 | - } | ||
| 1281 | - | ||
| 1282 | - else | ||
| 1283 | - { | ||
| 1284 | - value=100*g_TTS_Max_volume/100 *255/100; | ||
| 1285 | - } | ||
| 1286 | - | 1252 | + value=100*g_TTS_Max_volume/100 *255/100; |
| 1287 | } | 1253 | } |
| 1288 | 1254 | ||
| 1289 | int* set_volume_value_ptr = malloc(sizeof(int)); // 动态分配内存 | 1255 | int* set_volume_value_ptr = malloc(sizeof(int)); // 动态分配内存 |
| @@ -57,7 +57,7 @@ static T_JZsdkReturnCode TTS_Synthesis(const char* src_text, const char* params) | @@ -57,7 +57,7 @@ static T_JZsdkReturnCode TTS_Synthesis(const char* src_text, const char* params) | ||
| 57 | { | 57 | { |
| 58 | /* 获取合成音频 */ | 58 | /* 获取合成音频 */ |
| 59 | //const void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); | 59 | //const void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); |
| 60 | - unsigned char *data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); | 60 | + unsigned char *data = (unsigned char *)QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); |
| 61 | if (ret != MSP_SUCCESS) | 61 | if (ret != MSP_SUCCESS) |
| 62 | { | 62 | { |
| 63 | break; | 63 | break; |
| @@ -25,14 +25,9 @@ extern "C" { | @@ -25,14 +25,9 @@ extern "C" { | ||
| 25 | #if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T | 25 | #if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T |
| 26 | #define MAX_VOLUME (61) | 26 | #define MAX_VOLUME (61) |
| 27 | #define MAX_TTS_VOLUME (75) | 27 | #define MAX_TTS_VOLUME (75) |
| 28 | - | ||
| 29 | - //#define MAX_VOLUME (43) | ||
| 30 | - //#define MAX_TTS_VOLUME (53) | ||
| 31 | #elif DEVICE_VERSION == JZ_H1E | 28 | #elif DEVICE_VERSION == JZ_H1E |
| 32 | #define MAX_VOLUME (75) | 29 | #define MAX_VOLUME (75) |
| 33 | #define MAX_TTS_VOLUME (82) | 30 | #define MAX_TTS_VOLUME (82) |
| 34 | - // #define MAX_VOLUME (100) | ||
| 35 | - // #define MAX_TTS_VOLUME (100) | ||
| 36 | #elif DEVICE_VERSION == JZ_H1T | 31 | #elif DEVICE_VERSION == JZ_H1T |
| 37 | // #define MAX_VOLUME 75 | 32 | // #define MAX_VOLUME 75 |
| 38 | // #define MAX_TTS_VOLUME 84 | 33 | // #define MAX_TTS_VOLUME 84 |
| @@ -45,22 +40,18 @@ extern "C" { | @@ -45,22 +40,18 @@ extern "C" { | ||
| 45 | #elif DEVICE_VERSION == JZ_H10 | 40 | #elif DEVICE_VERSION == JZ_H10 |
| 46 | #define MAX_VOLUME (65) | 41 | #define MAX_VOLUME (65) |
| 47 | #define MAX_TTS_VOLUME (70) //115 | 42 | #define MAX_TTS_VOLUME (70) //115 |
| 48 | - //#define MAX_VOLUME (80) | ||
| 49 | - //#define MAX_TTS_VOLUME (86) //119 | ||
| 50 | - //#define MAX_VOLUME (95) | ||
| 51 | - //#define MAX_TTS_VOLUME (95) | ||
| 52 | #elif DEVICE_VERSION == JZ_H10T | 43 | #elif DEVICE_VERSION == JZ_H10T |
| 53 | #define MAX_VOLUME (83) | 44 | #define MAX_VOLUME (83) |
| 54 | #define MAX_TTS_VOLUME (83) | 45 | #define MAX_TTS_VOLUME (83) |
| 55 | #elif DEVICE_VERSION == JZ_U3 | 46 | #elif DEVICE_VERSION == JZ_U3 |
| 56 | - #define MAX_VOLUME (100) | ||
| 57 | - #define MAX_TTS_VOLUME (100) | 47 | + #define MAX_VOLUME (74) |
| 48 | + #define MAX_TTS_VOLUME (82) | ||
| 58 | #elif DEVICE_VERSION == JZ_U3D | 49 | #elif DEVICE_VERSION == JZ_U3D |
| 59 | - #define MAX_VOLUME (80) | ||
| 60 | - #define MAX_TTS_VOLUME (90) | 50 | + #define MAX_VOLUME (73) |
| 51 | + #define MAX_TTS_VOLUME (81) | ||
| 61 | #elif DEVICE_VERSION == JZ_U30 | 52 | #elif DEVICE_VERSION == JZ_U30 |
| 62 | - #define MAX_VOLUME (80) | ||
| 63 | - #define MAX_TTS_VOLUME (90) | 53 | + #define MAX_VOLUME (74) |
| 54 | + #define MAX_TTS_VOLUME (82) | ||
| 64 | #elif DEVICE_VERSION == JZ_U3S | 55 | #elif DEVICE_VERSION == JZ_U3S |
| 65 | #define MAX_VOLUME (74) | 56 | #define MAX_VOLUME (74) |
| 66 | #define MAX_TTS_VOLUME (82) | 57 | #define MAX_TTS_VOLUME (82) |
| @@ -9,6 +9,7 @@ | @@ -9,6 +9,7 @@ | ||
| 9 | #include "../../Megaphone.h" | 9 | #include "../../Megaphone.h" |
| 10 | #include "version_choose.h" | 10 | #include "version_choose.h" |
| 11 | #include "AudioDeal/AudioDeal.h" | 11 | #include "AudioDeal/AudioDeal.h" |
| 12 | +#include "AudioDeal/NoiseReduction/NoiseReduction.h" | ||
| 12 | 13 | ||
| 13 | #include "opus.h" | 14 | #include "opus.h" |
| 14 | 15 | ||
| @@ -174,7 +175,7 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | @@ -174,7 +175,7 @@ static T_JZsdkReturnCode Opus_RealTimeVoice_PlayData(unsigned char *data,int len | ||
| 174 | 175 | ||
| 175 | for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) | 176 | for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) |
| 176 | { | 177 | { |
| 177 | - TempPcm [i] = out[i] & 0xFF | (out[i] >> 8) << 8; | 178 | + TempPcm[i] = out[i] & 0xFF | (out[i] >> 8) << 8; |
| 178 | TempPcm[i] = PcmNoiseReduction(TempPcm[i]); | 179 | TempPcm[i] = PcmNoiseReduction(TempPcm[i]); |
| 179 | 180 | ||
| 180 | pcm_bytes[2 * i] = TempPcm[i] & 0xFF; | 181 | pcm_bytes[2 * i] = TempPcm[i] & 0xFF; |
| @@ -171,6 +171,8 @@ T_JZsdkReturnCode Opus_RecordVoice_PlayFixedFile() | @@ -171,6 +171,8 @@ T_JZsdkReturnCode Opus_RecordVoice_PlayFixedFile() | ||
| 171 | JZSDK_LOG_ERROR("创建Opus_PlayFixedFile线程失败!\n"); | 171 | JZSDK_LOG_ERROR("创建Opus_PlayFixedFile线程失败!\n"); |
| 172 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 172 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 173 | } | 173 | } |
| 174 | + | ||
| 175 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 174 | } | 176 | } |
| 175 | 177 | ||
| 176 | 178 | ||
| @@ -334,6 +336,8 @@ static T_JZsdkReturnCode Opus_RecordVoice_DecodeFixedFile() | @@ -334,6 +336,8 @@ static T_JZsdkReturnCode Opus_RecordVoice_DecodeFixedFile() | ||
| 334 | JZSDK_LOG_ERROR("创建DecodeAudioData_task线程失败!\n"); | 336 | JZSDK_LOG_ERROR("创建DecodeAudioData_task线程失败!\n"); |
| 335 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; | 337 | return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; |
| 336 | } | 338 | } |
| 339 | + | ||
| 340 | + return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | ||
| 337 | } | 341 | } |
| 338 | 342 | ||
| 339 | /* | 343 | /* |
| @@ -423,7 +427,7 @@ static T_JZsdkReturnCode Opus_Decode() | @@ -423,7 +427,7 @@ static T_JZsdkReturnCode Opus_Decode() | ||
| 423 | 427 | ||
| 424 | for (i = 0; i < OPUS_CHANNELS * frame_size; i++) { | 428 | for (i = 0; i < OPUS_CHANNELS * frame_size; i++) { |
| 425 | TempPcm [i] = out[i] & 0xFF | (out[i] >> 8) << 8; | 429 | TempPcm [i] = out[i] & 0xFF | (out[i] >> 8) << 8; |
| 426 | - TempPcm[i] = PcmNoiseReduction(TempPcm[i]); | 430 | + //TempPcm[i] = PcmNoiseReduction(TempPcm[i]); |
| 427 | } | 431 | } |
| 428 | 432 | ||
| 429 | fwrite(TempPcm, sizeof(short), frame_size * OPUS_CHANNELS, fout); | 433 | fwrite(TempPcm, sizeof(short), frame_size * OPUS_CHANNELS, fout); |
| @@ -463,7 +467,7 @@ DecodeFinsh: | @@ -463,7 +467,7 @@ DecodeFinsh: | ||
| 463 | } | 467 | } |
| 464 | 468 | ||
| 465 | //解码完成 | 469 | //解码完成 |
| 466 | - printf("Decode Finished...\n"); | 470 | + JZSDK_LOG_INFO("Decode Finished...\n"); |
| 467 | OpusDecode_Flag = JZ_FLAGCODE_OFF; | 471 | OpusDecode_Flag = JZ_FLAGCODE_OFF; |
| 468 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 472 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 469 | } | 473 | } |
| @@ -857,6 +857,8 @@ T_JZsdkReturnCode JZsdk_Psdk_Ui_io_Gimbal_PitchRotationMode(int Pitch) | @@ -857,6 +857,8 @@ T_JZsdkReturnCode JZsdk_Psdk_Ui_io_Gimbal_PitchRotationMode(int Pitch) | ||
| 857 | //1、将得到的拨轮pitch值裁切,避免变化角度过大 | 857 | //1、将得到的拨轮pitch值裁切,避免变化角度过大 |
| 858 | int CutPitch = Pitch/50; | 858 | int CutPitch = Pitch/50; |
| 859 | 859 | ||
| 860 | + //printf("拨轮控制pitch%d\n",Pitch); | ||
| 861 | + | ||
| 860 | Gimbal_PitchRotationMode(CutPitch); | 862 | Gimbal_PitchRotationMode(CutPitch); |
| 861 | } | 863 | } |
| 862 | 864 | ||
| @@ -890,6 +892,7 @@ T_JZsdkReturnCode JZsdk_Psdk_Ui_io_Gimbal_PitchScaleMode(int value) | @@ -890,6 +892,7 @@ T_JZsdkReturnCode JZsdk_Psdk_Ui_io_Gimbal_PitchScaleMode(int value) | ||
| 890 | T_JZsdkReturnCode JZsdk_Psdk_Ui_io_Gimbal_PitchSelfangleMode(int Pitch) | 892 | T_JZsdkReturnCode JZsdk_Psdk_Ui_io_Gimbal_PitchSelfangleMode(int Pitch) |
| 891 | { | 893 | { |
| 892 | //printf("飞机自身角度pitch%d\n",Pitch); | 894 | //printf("飞机自身角度pitch%d\n",Pitch); |
| 895 | + | ||
| 893 | Gimbal_PitchSelfangleMode(Pitch); | 896 | Gimbal_PitchSelfangleMode(Pitch); |
| 894 | } | 897 | } |
| 895 | 898 |
| @@ -1049,6 +1049,7 @@ T_JZsdkReturnCode UIcontrol_Obtain_GimbalLinkage(int DeviceName, int GimbalLinka | @@ -1049,6 +1049,7 @@ T_JZsdkReturnCode UIcontrol_Obtain_GimbalLinkage(int DeviceName, int GimbalLinka | ||
| 1049 | **********/ | 1049 | **********/ |
| 1050 | T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value) | 1050 | T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value) |
| 1051 | { | 1051 | { |
| 1052 | +#ifdef LIGHTING_STATUS_ON | ||
| 1052 | //调用探照灯的接口 | 1053 | //调用探照灯的接口 |
| 1053 | T_JZsdkReturnCode ret = Lighting_Set_SearchLightFrequency(value); | 1054 | T_JZsdkReturnCode ret = Lighting_Set_SearchLightFrequency(value); |
| 1054 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 1055 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
| @@ -1086,6 +1087,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value) | @@ -1086,6 +1087,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value) | ||
| 1086 | } | 1087 | } |
| 1087 | 1088 | ||
| 1088 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1089 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1090 | +#endif | ||
| 1089 | 1091 | ||
| 1090 | } | 1092 | } |
| 1091 | 1093 | ||
| @@ -1096,6 +1098,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value) | @@ -1096,6 +1098,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightFrequency(int DeviceName,int value) | ||
| 1096 | **********/ | 1098 | **********/ |
| 1097 | T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value) | 1099 | T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value) |
| 1098 | { | 1100 | { |
| 1101 | +#ifdef LIGHTING_STATUS_ON | ||
| 1099 | //调用探照灯的灯光模式接口 | 1102 | //调用探照灯的灯光模式接口 |
| 1100 | T_JZsdkReturnCode ret = Lighting_SearchLightControl(value); | 1103 | T_JZsdkReturnCode ret = Lighting_SearchLightControl(value); |
| 1101 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 1104 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
| @@ -1133,6 +1136,8 @@ T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value) | @@ -1133,6 +1136,8 @@ T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value) | ||
| 1133 | } | 1136 | } |
| 1134 | 1137 | ||
| 1135 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1138 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1139 | + | ||
| 1140 | +#endif | ||
| 1136 | } | 1141 | } |
| 1137 | 1142 | ||
| 1138 | /********* | 1143 | /********* |
| @@ -1142,6 +1147,7 @@ T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value) | @@ -1142,6 +1147,7 @@ T_JZsdkReturnCode UIcontrol_SearchLightControl(int DeviceName, int value) | ||
| 1142 | **********/ | 1147 | **********/ |
| 1143 | T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlush, int value1, int value2) | 1148 | T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlush, int value1, int value2) |
| 1144 | { | 1149 | { |
| 1150 | +#ifdef LIGHTING_STATUS_ON | ||
| 1145 | //检查是否合法 | 1151 | //检查是否合法 |
| 1146 | if (value1 >= 100) | 1152 | if (value1 >= 100) |
| 1147 | { | 1153 | { |
| @@ -1204,6 +1210,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlus | @@ -1204,6 +1210,7 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlus | ||
| 1204 | } | 1210 | } |
| 1205 | 1211 | ||
| 1206 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1212 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1213 | +#endif | ||
| 1207 | } | 1214 | } |
| 1208 | 1215 | ||
| 1209 | /********* | 1216 | /********* |
| @@ -1213,8 +1220,10 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlus | @@ -1213,8 +1220,10 @@ T_JZsdkReturnCode UIcontrol_Set_SearchLightLumen(int DeviceName, int WeatherFlus | ||
| 1213 | **********/ | 1220 | **********/ |
| 1214 | T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightLightAttribute(int *ValueFrequency, int *ValueMode, int *ValueLeftLumen, int *ValueRightLumen) | 1221 | T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightLightAttribute(int *ValueFrequency, int *ValueMode, int *ValueLeftLumen, int *ValueRightLumen) |
| 1215 | { | 1222 | { |
| 1223 | +#ifdef LIGHTING_STATUS_ON | ||
| 1216 | //获取本地的灯光属性,并主动刷新一次灯光属性 | 1224 | //获取本地的灯光属性,并主动刷新一次灯光属性 |
| 1217 | Lighting_CheckStatus_SearchLightLightAttribute(ValueFrequency, ValueMode, ValueLeftLumen, ValueRightLumen); | 1225 | Lighting_CheckStatus_SearchLightLightAttribute(ValueFrequency, ValueMode, ValueLeftLumen, ValueRightLumen); |
| 1226 | +#endif | ||
| 1218 | } | 1227 | } |
| 1219 | 1228 | ||
| 1220 | /********* | 1229 | /********* |
| @@ -1224,8 +1233,10 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightLightAttribute(int *ValueFreq | @@ -1224,8 +1233,10 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightLightAttribute(int *ValueFreq | ||
| 1224 | **********/ | 1233 | **********/ |
| 1225 | T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightTemperture(int *ValueLeftTemperature, int *ValueRightTemperaturen) | 1234 | T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightTemperture(int *ValueLeftTemperature, int *ValueRightTemperaturen) |
| 1226 | { | 1235 | { |
| 1236 | +#ifdef LIGHTING_STATUS_ON | ||
| 1227 | //获取本地的灯光温度,并主动刷新一次灯光温度 | 1237 | //获取本地的灯光温度,并主动刷新一次灯光温度 |
| 1228 | Lighting_CheckStatus_SearchLightTemperture(ValueLeftTemperature, ValueRightTemperaturen); | 1238 | Lighting_CheckStatus_SearchLightTemperture(ValueLeftTemperature, ValueRightTemperaturen); |
| 1239 | +#endif | ||
| 1229 | } | 1240 | } |
| 1230 | 1241 | ||
| 1231 | /**************************************************************************************************************************************** | 1242 | /**************************************************************************************************************************************** |
| @@ -1236,6 +1247,7 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightTemperture(int *ValueLeftTemp | @@ -1236,6 +1247,7 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_SearchLightTemperture(int *ValueLeftTemp | ||
| 1236 | //设置警灯状态 | 1247 | //设置警灯状态 |
| 1237 | T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int value1, int value2) | 1248 | T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int value1, int value2) |
| 1238 | { | 1249 | { |
| 1250 | +#ifdef LIGHTING_STATUS_ON | ||
| 1239 | //调用探照灯的接口 | 1251 | //调用探照灯的接口 |
| 1240 | T_JZsdkReturnCode ret = Lighting_Set_WarningLight_Status(value1, value2); | 1252 | T_JZsdkReturnCode ret = Lighting_Set_WarningLight_Status(value1, value2); |
| 1241 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 1253 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
| @@ -1274,11 +1286,13 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val | @@ -1274,11 +1286,13 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_ModeControl(int DeviceName, int val | ||
| 1274 | 1286 | ||
| 1275 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1287 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1276 | 1288 | ||
| 1289 | +#endif | ||
| 1277 | } | 1290 | } |
| 1278 | 1291 | ||
| 1279 | //设置警灯颜色 | 1292 | //设置警灯颜色 |
| 1280 | T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, int value2) | 1293 | T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, int value2) |
| 1281 | { | 1294 | { |
| 1295 | +#ifdef LIGHTING_STATUS_ON | ||
| 1282 | //调用探照灯的接口 | 1296 | //调用探照灯的接口 |
| 1283 | T_JZsdkReturnCode ret = Lighting_Set_WarningLight_Color(value1, value2); | 1297 | T_JZsdkReturnCode ret = Lighting_Set_WarningLight_Color(value1, value2); |
| 1284 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) | 1298 | if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS) |
| @@ -1316,6 +1330,7 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | @@ -1316,6 +1330,7 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | ||
| 1316 | } | 1330 | } |
| 1317 | 1331 | ||
| 1318 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1332 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1333 | +#endif | ||
| 1319 | } | 1334 | } |
| 1320 | 1335 | ||
| 1321 | 1336 | ||
| @@ -1326,8 +1341,10 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | @@ -1326,8 +1341,10 @@ T_JZsdkReturnCode UIcontrol_Set_WarningLight_Color(int DeviceName, int value1, i | ||
| 1326 | **********/ | 1341 | **********/ |
| 1327 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode) | 1342 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int *ValueMode) |
| 1328 | { | 1343 | { |
| 1344 | +#ifdef LIGHTING_STATUS_ON | ||
| 1329 | //获取本地的警灯状态,并主动刷新一次警灯状态 | 1345 | //获取本地的警灯状态,并主动刷新一次警灯状态 |
| 1330 | Lighting_CheckStatus_WarningLightStatus(ValueSwitch, ValueMode); | 1346 | Lighting_CheckStatus_WarningLightStatus(ValueSwitch, ValueMode); |
| 1347 | +#endif | ||
| 1331 | } | 1348 | } |
| 1332 | 1349 | ||
| 1333 | /********* | 1350 | /********* |
| @@ -1337,8 +1354,10 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int | @@ -1337,8 +1354,10 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightStatus(int *ValueSwitch, int | ||
| 1337 | **********/ | 1354 | **********/ |
| 1338 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2) | 1355 | T_JZsdkReturnCode UIcontrol_CheckStatus_WarningLightColor(int *ValueColor1, int *ValueColor2) |
| 1339 | { | 1356 | { |
| 1357 | +#ifdef LIGHTING_STATUS_ON | ||
| 1340 | //获取本地的警灯颜色,并主动刷新一次警灯颜色 | 1358 | //获取本地的警灯颜色,并主动刷新一次警灯颜色 |
| 1341 | Lighting_CheckStatus_WarningLightColor(ValueColor1, ValueColor2); | 1359 | Lighting_CheckStatus_WarningLightColor(ValueColor1, ValueColor2); |
| 1360 | +#endif | ||
| 1342 | } | 1361 | } |
| 1343 | 1362 | ||
| 1344 | /**************************************************************************************************************************************** | 1363 | /**************************************************************************************************************************************** |
| @@ -1469,6 +1488,7 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_OutPutPowerValue(int *Value) | @@ -1469,6 +1488,7 @@ T_JZsdkReturnCode UIcontrol_CheckStatus_OutPutPowerValue(int *Value) | ||
| 1469 | **********/ | 1488 | **********/ |
| 1470 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Frequency) | 1489 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Frequency) |
| 1471 | { | 1490 | { |
| 1491 | +#ifdef LIGHTING_STATUS_ON | ||
| 1472 | //1、设置本地存储值 | 1492 | //1、设置本地存储值 |
| 1473 | Lighting_Obtain_SearchLightFrequency(Frequency); | 1493 | Lighting_Obtain_SearchLightFrequency(Frequency); |
| 1474 | 1494 | ||
| @@ -1494,6 +1514,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Freq | @@ -1494,6 +1514,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Freq | ||
| 1494 | } | 1514 | } |
| 1495 | 1515 | ||
| 1496 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1516 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1517 | +#endif | ||
| 1497 | } | 1518 | } |
| 1498 | 1519 | ||
| 1499 | /********* | 1520 | /********* |
| @@ -1503,6 +1524,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Freq | @@ -1503,6 +1524,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Frequency(int DeviceName, int Freq | ||
| 1503 | **********/ | 1524 | **********/ |
| 1504 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode) | 1525 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode) |
| 1505 | { | 1526 | { |
| 1527 | +#ifdef LIGHTING_STATUS_ON | ||
| 1506 | //1、设置本地存储值 | 1528 | //1、设置本地存储值 |
| 1507 | Lighting_Obtain_SearchLightMode(mode); | 1529 | Lighting_Obtain_SearchLightMode(mode); |
| 1508 | 1530 | ||
| @@ -1528,6 +1550,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode) | @@ -1528,6 +1550,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode) | ||
| 1528 | } | 1550 | } |
| 1529 | 1551 | ||
| 1530 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1552 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1553 | +#endif | ||
| 1531 | } | 1554 | } |
| 1532 | 1555 | ||
| 1533 | /********* | 1556 | /********* |
| @@ -1537,6 +1560,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode) | @@ -1537,6 +1560,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Mode(int DeviceName, int mode) | ||
| 1537 | **********/ | 1560 | **********/ |
| 1538 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLumen, int RightLumen) | 1561 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLumen, int RightLumen) |
| 1539 | { | 1562 | { |
| 1563 | +#ifdef LIGHTING_STATUS_ON | ||
| 1540 | //1、设置本地存储值 | 1564 | //1、设置本地存储值 |
| 1541 | Lighting_Obtain_SearchLightLumen(LeftLumen, RightLumen); | 1565 | Lighting_Obtain_SearchLightLumen(LeftLumen, RightLumen); |
| 1542 | 1566 | ||
| @@ -1563,6 +1587,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLume | @@ -1563,6 +1587,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLume | ||
| 1563 | } | 1587 | } |
| 1564 | 1588 | ||
| 1565 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1589 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1590 | +#endif | ||
| 1566 | } | 1591 | } |
| 1567 | 1592 | ||
| 1568 | /********* | 1593 | /********* |
| @@ -1572,6 +1597,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLume | @@ -1572,6 +1597,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Lumen(int DeviceName, int LeftLume | ||
| 1572 | **********/ | 1597 | **********/ |
| 1573 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int LeftTemperature, int RightTemperature) | 1598 | T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int LeftTemperature, int RightTemperature) |
| 1574 | { | 1599 | { |
| 1600 | +#ifdef LIGHTING_STATUS_ON | ||
| 1575 | //1、设置本地存储值 | 1601 | //1、设置本地存储值 |
| 1576 | Lighting_Obtain_SearchLightTemperature(LeftTemperature, RightTemperature); | 1602 | Lighting_Obtain_SearchLightTemperature(LeftTemperature, RightTemperature); |
| 1577 | 1603 | ||
| @@ -1598,6 +1624,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le | @@ -1598,6 +1624,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le | ||
| 1598 | } | 1624 | } |
| 1599 | 1625 | ||
| 1600 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1626 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1627 | +#endif | ||
| 1601 | } | 1628 | } |
| 1602 | 1629 | ||
| 1603 | /**************************************************************************************************************************************** | 1630 | /**************************************************************************************************************************************** |
| @@ -1612,6 +1639,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le | @@ -1612,6 +1639,7 @@ T_JZsdkReturnCode UIcontrol_ObtainSearchLight_Temperature(int DeviceName, int Le | ||
| 1612 | **********/ | 1639 | **********/ |
| 1613 | T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status, int mode) | 1640 | T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status, int mode) |
| 1614 | { | 1641 | { |
| 1642 | +#ifdef LIGHTING_STATUS_ON | ||
| 1615 | //1、设置本地存储值 | 1643 | //1、设置本地存储值 |
| 1616 | Lighting_Obtain_WarningLight_Status(status, mode); | 1644 | Lighting_Obtain_WarningLight_Status(status, mode); |
| 1617 | 1645 | ||
| @@ -1637,6 +1665,7 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status | @@ -1637,6 +1665,7 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status | ||
| 1637 | } | 1665 | } |
| 1638 | 1666 | ||
| 1639 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1667 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1668 | +#endif | ||
| 1640 | } | 1669 | } |
| 1641 | 1670 | ||
| 1642 | /********* | 1671 | /********* |
| @@ -1646,6 +1675,7 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status | @@ -1646,6 +1675,7 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Status(int DeviceName, int status | ||
| 1646 | **********/ | 1675 | **********/ |
| 1647 | T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Color(int DeviceName, int color1, int color2) | 1676 | T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Color(int DeviceName, int color1, int color2) |
| 1648 | { | 1677 | { |
| 1678 | +#ifdef LIGHTING_STATUS_ON | ||
| 1649 | //1、设置本地存储值 | 1679 | //1、设置本地存储值 |
| 1650 | Lighting_Obtain_WarningLight_Color(color1, color2); | 1680 | Lighting_Obtain_WarningLight_Color(color1, color2); |
| 1651 | 1681 | ||
| @@ -1671,6 +1701,7 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Color(int DeviceName, int color1, | @@ -1671,6 +1701,7 @@ T_JZsdkReturnCode UIcontrol_ObtainWarningLight_Color(int DeviceName, int color1, | ||
| 1671 | } | 1701 | } |
| 1672 | 1702 | ||
| 1673 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1703 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1704 | +#endif | ||
| 1674 | } | 1705 | } |
| 1675 | 1706 | ||
| 1676 | /**************************************************************************************************************************************** | 1707 | /**************************************************************************************************************************************** |
| @@ -1688,6 +1719,11 @@ T_JZsdkReturnCode UIcontrol_ObtainGimbal_Pitch(int DeviceName, int GimbalPitchAn | @@ -1688,6 +1719,11 @@ T_JZsdkReturnCode UIcontrol_ObtainGimbal_Pitch(int DeviceName, int GimbalPitchAn | ||
| 1688 | //1、设置本地存储值 | 1719 | //1、设置本地存储值 |
| 1689 | Gimbal_Obtain_Gimbal_Pitch(GimbalPitchAngle); | 1720 | Gimbal_Obtain_Gimbal_Pitch(GimbalPitchAngle); |
| 1690 | 1721 | ||
| 1722 | +#if DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U30 | ||
| 1723 | + | ||
| 1724 | + //无变化 | ||
| 1725 | + | ||
| 1726 | +#else | ||
| 1691 | //通知其他设备的ui界面变化 | 1727 | //通知其他设备的ui界面变化 |
| 1692 | //如果4G模块有启动 | 1728 | //如果4G模块有启动 |
| 1693 | if ((JZsdk_Get_UartDev_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) ) | 1729 | if ((JZsdk_Get_UartDev_UseFlag(UART_4G) == JZ_FLAGCODE_ON) && (DeviceName != UART_4G) ) |
| @@ -1709,6 +1745,7 @@ T_JZsdkReturnCode UIcontrol_ObtainGimbal_Pitch(int DeviceName, int GimbalPitchAn | @@ -1709,6 +1745,7 @@ T_JZsdkReturnCode UIcontrol_ObtainGimbal_Pitch(int DeviceName, int GimbalPitchAn | ||
| 1709 | { | 1745 | { |
| 1710 | JZsdk_Psdk_UI_io_Reply_GimbalPitchAngle(GimbalPitchAngle); | 1746 | JZsdk_Psdk_UI_io_Reply_GimbalPitchAngle(GimbalPitchAngle); |
| 1711 | } | 1747 | } |
| 1748 | +#endif | ||
| 1712 | 1749 | ||
| 1713 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; | 1750 | return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; |
| 1714 | } | 1751 | } |
project_build/Attention_提示程序/CMakeLists.txt
0 → 100644
| 1 | +# cmake 最低版本要求 第三行名字不能动 | ||
| 2 | +cmake_minimum_required(VERSION 2.8) | ||
| 3 | +project(ATTENTION_APP) | ||
| 4 | + | ||
| 5 | +set(CMAKE_C_FLAGS "-pthread -std=gnu99 -lm -ldl -lstdc++") | ||
| 6 | +#"-pthread":指定在编译时链接POSIX线程库,以支持多线程程序。 | ||
| 7 | +#"-std=gnu99":指定C语言标准为GNU C99(也就是C99加上GNU的扩展特性),该标准对于一些特性和库的使用是必须的。 | ||
| 8 | +#"-lm":指定在编译时链接数学库,以使用一些数学函数。 | ||
| 9 | +#"-ldl":指定在编译时链接动态库加载库,以使用动态加载。 | ||
| 10 | +#"-lstdc++":指定在编译时链接C++标准库,以使用C++的一些特性和函数。 | ||
| 11 | + | ||
| 12 | +set(CMAKE_EXE_LINKER_FLAGS "-pthread") | ||
| 13 | + | ||
| 14 | +#预留行 | ||
| 15 | +set(DEVICE_TYPE MEGAPHONE) | ||
| 16 | +#预留行 | ||
| 17 | +#预留行 | ||
| 18 | +#预留行 | ||
| 19 | +#预留行 | ||
| 20 | +#预留行 | ||
| 21 | +#预留行 | ||
| 22 | + | ||
| 23 | +set(ROOT_DIRS "${CMAKE_CURRENT_LIST_DIR}/../../") | ||
| 24 | + | ||
| 25 | +# 包含模块配置 | ||
| 26 | +include(${ROOT_DIRS}CmakeConfig/Compiler.cmake) | ||
| 27 | +include(${ROOT_DIRS}CmakeConfig/module_config.cmake) | ||
| 28 | +include(${ROOT_DIRS}CmakeConfig/module_build.cmake) | ||
| 29 | + | ||
| 30 | +# 加载jzsdk的头文件 ***************************************************** | ||
| 31 | +include_directories(${ALL_INC_FILES}) | ||
| 32 | + | ||
| 33 | +# 生成可执行文件 | ||
| 34 | +add_executable( | ||
| 35 | + ATTENTION_APP | ||
| 36 | + ./application/main.c | ||
| 37 | + ./application/Megaphone_Attention.c | ||
| 38 | + ${ALL_SRC_FILES} #加载jzsdk的源文件 ***************************************************** | ||
| 39 | +) | ||
| 40 | + | ||
| 41 | + | ||
| 42 | +include(${ROOT_DIRS}CmakeConfig/module_lib_loading.cmake) |
不能预览此文件类型
-
请 注册 或 登录 后发表评论