作者 ookk303

Merge branch 'dev_00.00.02.09' into dev

正在显示 76 个修改的文件 包含 2389 行增加956 行删除

要显示太多修改。

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

@@ -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_提示程序
  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")  
  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为默认
@@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <stdint.h> 3 #include <stdint.h>
4 #include <string.h> 4 #include <string.h>
  5 +#include <math.h>
5 6
6 #include "JZsdkLib.h" 7 #include "JZsdkLib.h"
7 8
@@ -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 -}  
1 -#ifndef IRCUT_H3_H10_H  
2 -#define IRCUT_H3_H10_H  
3 -  
4 -void H3_H10_set_amplifier(int amplifier_mode);  
5 -int H3_H10_IrcutInit();  
6 -#endif  
@@ -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 +/***************
  2 + *
  3 + * 多媒体处理器
  4 + * Multimedia Processor
  5 + *
  6 + * ******************/
1 #include "stdio.h" 7 #include "stdio.h"
2 8
3 -#include "./StreamProc.h" 9 +#include "./MultProc.h"
4 10
5 #include "JZsdkLib.h" 11 #include "JZsdkLib.h"
6 12
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 +// }
  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 }
  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)