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