diff --git a/Opencv/.cxx/Debug/p1g6s634/arm64-v8a/configure_fingerprint.bin b/Opencv/.cxx/Debug/p1g6s634/arm64-v8a/configure_fingerprint.bin
index 11373faf..5f7721d1 100644
--- a/Opencv/.cxx/Debug/p1g6s634/arm64-v8a/configure_fingerprint.bin
+++ b/Opencv/.cxx/Debug/p1g6s634/arm64-v8a/configure_fingerprint.bin
@@ -2,28 +2,28 @@ C/C++ Structured Logx
 v
 tC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\additional_project_files.txtC
 A
-?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	�����3 ����3u
+?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	ϻ���3 ����3u
 s
-qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\android_gradle_build.json	�����3�
+qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\android_gradle_build.json	ϻ���3�
  ����3z
 x
-vC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\android_gradle_build_mini.json	�����3� ����3g
+vC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\android_gradle_build_mini.json	л���3� ����3g
 e
-cC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\build.ninja	�����3�� ����3k
+cC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\build.ninja	л���3�� ����3k
 i
-gC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\build.ninja.txt	�����3p
+gC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\build.ninja.txt	л���3p
 n
-lC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\build_file_index.txt	�����3
V ����3q
+lC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\build_file_index.txt	л���3
V ����3q
 o
-mC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\compile_commands.json	�����3� ����3u
+mC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\compile_commands.json	л���3� ����3u
 s
-qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\compile_commands.json.bin	�����3	� ����3{
+qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\compile_commands.json.bin	л���3	� ����3{
 y
-wC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\metadata_generation_command.txt	�����3
+wC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\metadata_generation_command.txt	л���3
 � ����3n
 l
-jC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\prefab_config.json	�����3
( ����3s
+jC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\prefab_config.json	л���3
( ����3s
 q
-oC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\symbol_folder_index.txt	�����3
n ����3Z
+oC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\arm64-v8a\symbol_folder_index.txt	л���3
n ����3Z
 X
-VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	�����3
� �֝��3
\ No newline at end of file
+VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	л���3
� �֝��3
\ No newline at end of file
diff --git a/Opencv/.cxx/Debug/p1g6s634/armeabi-v7a/configure_fingerprint.bin b/Opencv/.cxx/Debug/p1g6s634/armeabi-v7a/configure_fingerprint.bin
index 2e390ad2..072bc4b1 100644
--- a/Opencv/.cxx/Debug/p1g6s634/armeabi-v7a/configure_fingerprint.bin
+++ b/Opencv/.cxx/Debug/p1g6s634/armeabi-v7a/configure_fingerprint.bin
@@ -2,28 +2,28 @@ C/C++ Structured Logz
 x
 vC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\additional_project_files.txtC
 A
-?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	����3 �ש��3w
+?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	�Ђ��3 �ש��3w
 u
-sC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\android_gradle_build.json	����3�
+sC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\android_gradle_build.json	�Ђ��3�
  �ש��3|
 z
-xC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\android_gradle_build_mini.json	����3� �ש��3i
+xC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\android_gradle_build_mini.json	�Ђ��3� �ש��3i
 g
-eC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\build.ninja	����3�� �֩��3m
+eC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\build.ninja	�Ђ��3�� �֩��3m
 k
-iC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\build.ninja.txt	����3r
+iC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\build.ninja.txt	�Ђ��3r
 p
-nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\build_file_index.txt	����3
V �ש��3s
+nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\build_file_index.txt	�Ђ��3
V �ש��3s
 q
-oC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\compile_commands.json	����3� �֩��3w
+oC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\compile_commands.json	�Ђ��3� �֩��3w
 u
-sC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\compile_commands.json.bin	����3	� �֩��3}
+sC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\compile_commands.json.bin	�Ђ��3	� �֩��3}
 {
-yC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\metadata_generation_command.txt	����3
+yC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\metadata_generation_command.txt	�Ђ��3
 � �ש��3p
 n
-lC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\prefab_config.json	����3
( �ש��3u
+lC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\prefab_config.json	�Ђ��3
( �ש��3u
 s
-qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\symbol_folder_index.txt	����3
p �ש��3Z
+qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\armeabi-v7a\symbol_folder_index.txt	�Ђ��3
p �ש��3Z
 X
-VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	����3
� �֝��3
\ No newline at end of file
+VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	�Ђ��3
� �֝��3
\ No newline at end of file
diff --git a/Opencv/.cxx/Debug/p1g6s634/x86/configure_fingerprint.bin b/Opencv/.cxx/Debug/p1g6s634/x86/configure_fingerprint.bin
index ed5eec6f..8827ff81 100644
--- a/Opencv/.cxx/Debug/p1g6s634/x86/configure_fingerprint.bin
+++ b/Opencv/.cxx/Debug/p1g6s634/x86/configure_fingerprint.bin
@@ -2,28 +2,28 @@ C/C++ Structured Logr
 p
 nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\additional_project_files.txtC
 A
-?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	׷���3 ��ʛ�3o
+?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	�҂��3 ��ʛ�3o
 m
-kC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\android_gradle_build.json	׷���3�
+kC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\android_gradle_build.json	�҂��3�
  ��ʛ�3t
 r
-pC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\android_gradle_build_mini.json	׷���3� ��ʛ�3a
+pC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\android_gradle_build_mini.json	�҂��3� ��ʛ�3a
 _
-]C:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\build.ninja	׷���3�� ��ʛ�3e
+]C:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\build.ninja	�҂��3�� ��ʛ�3e
 c
-aC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\build.ninja.txt	ڷ���3j
+aC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\build.ninja.txt	�҂��3j
 h
-fC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\build_file_index.txt	۷���3
V ��ʛ�3k
+fC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\build_file_index.txt	�҂��3
V ��ʛ�3k
 i
-gC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\compile_commands.json	۷���3� ��ʛ�3o
+gC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\compile_commands.json	�҂��3� ��ʛ�3o
 m
-kC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\compile_commands.json.bin	۷���3	� ��ʛ�3u
+kC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\compile_commands.json.bin	�҂��3	� ��ʛ�3u
 s
-qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\metadata_generation_command.txt	۷���3
+qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\metadata_generation_command.txt	�҂��3
 � ��ʛ�3h
 f
-dC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\prefab_config.json	۷���3
( ��ʛ�3m
+dC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\prefab_config.json	�҂��3
( ��ʛ�3m
 k
-iC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\symbol_folder_index.txt	۷���3
h ��ʛ�3Z
+iC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86\symbol_folder_index.txt	�҂��3
h ��ʛ�3Z
 X
-VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	۷���3
� �֝��3
\ No newline at end of file
+VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	�҂��3
� �֝��3
\ No newline at end of file
diff --git a/Opencv/.cxx/Debug/p1g6s634/x86_64/configure_fingerprint.bin b/Opencv/.cxx/Debug/p1g6s634/x86_64/configure_fingerprint.bin
index 7ff6d01b..7a4563b5 100644
--- a/Opencv/.cxx/Debug/p1g6s634/x86_64/configure_fingerprint.bin
+++ b/Opencv/.cxx/Debug/p1g6s634/x86_64/configure_fingerprint.bin
@@ -2,28 +2,28 @@ C/C++ Structured Logu
 s
 qC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\additional_project_files.txtC
 A
-?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	Ѹ���3 �婜�3r
+?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint	�ӂ��3 �婜�3r
 p
-nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\android_gradle_build.json	Ѹ���3�
+nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\android_gradle_build.json	�ӂ��3�
  �婜�3w
 u
-sC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\android_gradle_build_mini.json	Ѹ���3� �婜�3d
+sC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\android_gradle_build_mini.json	�ӂ��3� �婜�3d
 b
-`C:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\build.ninja	Ѹ���3�� �䩜�3h
+`C:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\build.ninja	�ӂ��3�� �䩜�3h
 f
-dC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\build.ninja.txt	Ѹ���3m
+dC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\build.ninja.txt	�ӂ��3m
 k
-iC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\build_file_index.txt	Ѹ���3
V �婜�3n
+iC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\build_file_index.txt	�ӂ��3
V �婜�3n
 l
-jC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\compile_commands.json	Ѹ���3� �䩜�3r
+jC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\compile_commands.json	�ӂ��3� �䩜�3r
 p
-nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\compile_commands.json.bin	Ѹ���3	� �䩜�3x
+nC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\compile_commands.json.bin	�ӂ��3	� �䩜�3x
 v
-tC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\metadata_generation_command.txt	Ѹ���3
+tC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\metadata_generation_command.txt	�ӂ��3
 � �婜�3k
 i
-gC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\prefab_config.json	Ѹ���3
( �婜�3p
+gC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\prefab_config.json	�ӂ��3
( �婜�3p
 n
-lC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\symbol_folder_index.txt	Ѹ���3
k �婜�3Z
+lC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\.cxx\Debug\p1g6s634\x86_64\symbol_folder_index.txt	�ӂ��3
k �婜�3Z
 X
-VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	Ѹ���3
� �֝��3
\ No newline at end of file
+VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt	�ӂ��3
� �֝��3
\ No newline at end of file
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_220_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_220_timing.txt
index 725a84d8..dc08d549 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_220_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_220_timing.txt
@@ -12,3 +12,10 @@ generate_cxx_metadata
   [gap of 32ms]
 generate_cxx_metadata completed in 99ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 24ms]
+  create-invalidation-state 57ms
+  [gap of 37ms]
+generate_cxx_metadata completed in 118ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_222_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_222_timing.txt
index 902a3173..f5c27adc 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_222_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_222_timing.txt
@@ -13,3 +13,9 @@ generate_cxx_metadata
   [gap of 29ms]
 generate_cxx_metadata completed in 94ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 31ms
+  [gap of 28ms]
+generate_cxx_metadata completed in 67ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_223_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_223_timing.txt
index b300aab9..b47e0d85 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_223_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_223_timing.txt
@@ -12,3 +12,11 @@ generate_cxx_metadata
   [gap of 42ms]
 generate_cxx_metadata completed in 132ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 16ms]
+  create-invalidation-state 49ms
+  [gap of 25ms]
+  write-metadata-json-to-file 11ms
+generate_cxx_metadata completed in 102ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_224_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_224_timing.txt
index 213dd157..5979d4f5 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_224_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_224_timing.txt
@@ -26,3 +26,10 @@ generate_cxx_metadata
   [gap of 23ms]
 generate_cxx_metadata completed in 74ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 11ms]
+  create-invalidation-state 37ms
+  [gap of 27ms]
+generate_cxx_metadata completed in 75ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_225_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_225_timing.txt
index 36d2c963..81769851 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_225_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_225_timing.txt
@@ -12,3 +12,10 @@ generate_cxx_metadata
   [gap of 37ms]
 generate_cxx_metadata completed in 117ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 20ms]
+  create-invalidation-state 50ms
+  [gap of 38ms]
+generate_cxx_metadata completed in 108ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_228_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_228_timing.txt
index 841d3e24..d82e6b40 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_228_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_228_timing.txt
@@ -5,3 +5,10 @@ generate_cxx_metadata
   [gap of 30ms]
 generate_cxx_metadata completed in 93ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 12ms]
+  create-invalidation-state 42ms
+  [gap of 27ms]
+generate_cxx_metadata completed in 81ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_232_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_232_timing.txt
index 32e282d8..5cd13cce 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_232_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_232_timing.txt
@@ -14,3 +14,10 @@ generate_cxx_metadata
   write-metadata-json-to-file 10ms
 generate_cxx_metadata completed in 102ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 32ms]
+  create-invalidation-state 87ms
+  [gap of 37ms]
+generate_cxx_metadata completed in 156ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_233_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_233_timing.txt
index 715f4df9..d8a6608a 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_233_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_233_timing.txt
@@ -13,3 +13,10 @@ generate_cxx_metadata
   write-metadata-json-to-file 19ms
 generate_cxx_metadata completed in 227ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 14ms]
+  create-invalidation-state 42ms
+  [gap of 28ms]
+generate_cxx_metadata completed in 84ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_234_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_234_timing.txt
index 72a68c96..023ae1f5 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_234_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_234_timing.txt
@@ -19,3 +19,27 @@ generate_cxx_metadata
   write-metadata-json-to-file 12ms
 generate_cxx_metadata completed in 136ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 22ms]
+  create-invalidation-state 66ms
+  [gap of 31ms]
+  write-metadata-json-to-file 11ms
+generate_cxx_metadata completed in 131ms
+
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 14ms]
+  create-invalidation-state 47ms
+  [gap of 32ms]
+  write-metadata-json-to-file 10ms
+generate_cxx_metadata completed in 105ms
+
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 23ms]
+  create-invalidation-state 98ms
+  [gap of 37ms]
+  write-metadata-json-to-file 13ms
+generate_cxx_metadata completed in 173ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_420_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_420_timing.txt
index 25511d49..56bdd3e5 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_420_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_420_timing.txt
@@ -4,3 +4,10 @@ generate_cxx_metadata
   [gap of 18ms]
 generate_cxx_metadata completed in 34ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 21ms]
+  create-invalidation-state 58ms
+  [gap of 33ms]
+generate_cxx_metadata completed in 112ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_480_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_480_timing.txt
index 84358411..038908f8 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_480_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_480_timing.txt
@@ -4,3 +4,9 @@ generate_cxx_metadata
   [gap of 25ms]
 generate_cxx_metadata completed in 57ms
 
+# C/C++ build system timings
+generate_cxx_metadata 25ms
+
+# C/C++ build system timings
+generate_cxx_metadata 22ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_491_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_491_timing.txt
index 9def4dc4..729a6bc1 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_491_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_491_timing.txt
@@ -4,3 +4,6 @@ generate_cxx_metadata
   [gap of 15ms]
 generate_cxx_metadata completed in 31ms
 
+# C/C++ build system timings
+generate_cxx_metadata 25ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_497_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_497_timing.txt
index 199beb78..dde1eab0 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_497_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_497_timing.txt
@@ -10,3 +10,9 @@ generate_cxx_metadata
   [gap of 18ms]
 generate_cxx_metadata completed in 37ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 10ms
+  [gap of 17ms]
+generate_cxx_metadata completed in 30ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_680_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_680_timing.txt
index e7c91575..a458dbcf 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_680_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_680_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 24ms
 
+# C/C++ build system timings
+generate_cxx_metadata 20ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_714_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_714_timing.txt
index 227dbb3f..e4fd8e81 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_714_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_714_timing.txt
@@ -5,3 +5,6 @@ generate_cxx_metadata
   [gap of 34ms]
 generate_cxx_metadata completed in 81ms
 
+# C/C++ build system timings
+generate_cxx_metadata 12ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_750_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_750_timing.txt
index 5477fb50..b1e04e8b 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_750_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/generate_cxx_metadata_750_timing.txt
@@ -4,3 +4,9 @@ generate_cxx_metadata
   [gap of 13ms]
 generate_cxx_metadata completed in 28ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 11ms
+  [gap of 14ms]
+generate_cxx_metadata completed in 29ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/metadata_generation_record.json b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/metadata_generation_record.json
index 6bec155b..e2352f16 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/metadata_generation_record.json
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/arm64-v8a/metadata_generation_record.json
@@ -11,7 +11,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1267503242
+    "memoizedHashCode": 1164482061
   },
   {
     "level_": 0,
@@ -25,7 +25,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1835985214
+    "memoizedHashCode": 596000089
   },
   {
     "level_": 0,
@@ -39,6 +39,6 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1074353236
+    "memoizedHashCode": -788628757
   }
 ]
\ No newline at end of file
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_225_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_225_timing.txt
index 952196a9..6ee942cd 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_225_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_225_timing.txt
@@ -4,3 +4,6 @@ generate_cxx_metadata
   [gap of 18ms]
 generate_cxx_metadata completed in 40ms
 
+# C/C++ build system timings
+generate_cxx_metadata 25ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_234_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_234_timing.txt
index d1a57fee..b18d7877 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_234_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_234_timing.txt
@@ -1,3 +1,18 @@
 # C/C++ build system timings
 generate_cxx_metadata 23ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 12ms
+  [gap of 13ms]
+generate_cxx_metadata completed in 29ms
+
+# C/C++ build system timings
+generate_cxx_metadata 19ms
+
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 11ms
+  [gap of 18ms]
+generate_cxx_metadata completed in 33ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_487_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_487_timing.txt
index da1b5bd6..da37516a 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_487_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/generate_cxx_metadata_487_timing.txt
@@ -4,3 +4,12 @@ generate_cxx_metadata
   [gap of 13ms]
 generate_cxx_metadata completed in 25ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 10ms
+  [gap of 15ms]
+generate_cxx_metadata completed in 27ms
+
+# C/C++ build system timings
+generate_cxx_metadata 16ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/metadata_generation_record.json b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/metadata_generation_record.json
index 89846e8d..2d51e092 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/metadata_generation_record.json
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/armeabi-v7a/metadata_generation_record.json
@@ -11,7 +11,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 573772690
+    "memoizedHashCode": 1226785352
   },
   {
     "level_": 0,
@@ -25,7 +25,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -753817378
+    "memoizedHashCode": -100804716
   },
   {
     "level_": 0,
@@ -39,6 +39,6 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -2107994126
+    "memoizedHashCode": -1454981464
   }
 ]
\ No newline at end of file
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_223_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_223_timing.txt
index 5e2a36b0..8f829b5c 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_223_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_223_timing.txt
@@ -1,3 +1,9 @@
 # C/C++ build system timings
 generate_cxx_metadata 18ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 12ms
+  [gap of 16ms]
+generate_cxx_metadata completed in 31ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_225_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_225_timing.txt
index 93c4084e..794a816d 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_225_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_225_timing.txt
@@ -4,3 +4,9 @@ generate_cxx_metadata 16ms
 # C/C++ build system timings
 generate_cxx_metadata 23ms
 
+# C/C++ build system timings
+generate_cxx_metadata 24ms
+
+# C/C++ build system timings
+generate_cxx_metadata 14ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_234_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_234_timing.txt
index 5e2a36b0..d1e131f3 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_234_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_234_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 18ms
 
+# C/C++ build system timings
+generate_cxx_metadata 24ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_32_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_32_timing.txt
index 9cc39a7b..fc82673e 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_32_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_32_timing.txt
@@ -6,3 +6,11 @@ generate_cxx_metadata
   write-metadata-json-to-file 12ms
 generate_cxx_metadata completed in 151ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  [gap of 25ms]
+  create-invalidation-state 72ms
+  [gap of 34ms]
+  write-metadata-json-to-file 13ms
+generate_cxx_metadata completed in 146ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_487_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_487_timing.txt
index a617a697..dc3c22c5 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_487_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_487_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 21ms
 
+# C/C++ build system timings
+generate_cxx_metadata 16ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_492_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_492_timing.txt
index 5e2a36b0..3ca97fe6 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_492_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_492_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 18ms
 
+# C/C++ build system timings
+generate_cxx_metadata 18ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_497_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_497_timing.txt
index edd333d6..ccf4bdf0 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_497_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/generate_cxx_metadata_497_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 16ms
 
+# C/C++ build system timings
+generate_cxx_metadata 21ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/metadata_generation_record.json b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/metadata_generation_record.json
index e82955f3..19e48979 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/metadata_generation_record.json
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86/metadata_generation_record.json
@@ -11,7 +11,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -532663814
+    "memoizedHashCode": 120348848
   },
   {
     "level_": 0,
@@ -25,7 +25,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1002172346
+    "memoizedHashCode": -349159684
   },
   {
     "level_": 0,
@@ -39,6 +39,6 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1881978758
+    "memoizedHashCode": -1759975876
   }
 ]
\ No newline at end of file
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_225_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_225_timing.txt
index 7caf4c0c..7db66159 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_225_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_225_timing.txt
@@ -7,3 +7,9 @@ generate_cxx_metadata
   [gap of 14ms]
 generate_cxx_metadata completed in 29ms
 
+# C/C++ build system timings
+generate_cxx_metadata 19ms
+
+# C/C++ build system timings
+generate_cxx_metadata 15ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_226_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_226_timing.txt
index edd333d6..b0d0561b 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_226_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_226_timing.txt
@@ -1,3 +1,9 @@
 # C/C++ build system timings
 generate_cxx_metadata 16ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 11ms
+  [gap of 14ms]
+generate_cxx_metadata completed in 28ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_229_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_229_timing.txt
index d1a57fee..e6897288 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_229_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_229_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 23ms
 
+# C/C++ build system timings
+generate_cxx_metadata 18ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_230_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_230_timing.txt
index 918c8e9f..0c5ca865 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_230_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_230_timing.txt
@@ -1,3 +1,9 @@
 # C/C++ build system timings
 generate_cxx_metadata 22ms
 
+# C/C++ build system timings
+generate_cxx_metadata
+  create-invalidation-state 10ms
+  [gap of 11ms]
+generate_cxx_metadata completed in 24ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_487_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_487_timing.txt
index a617a697..f6e41179 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_487_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_487_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 21ms
 
+# C/C++ build system timings
+generate_cxx_metadata 17ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_492_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_492_timing.txt
index daf2a2a9..cb4cc7da 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_492_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_492_timing.txt
@@ -4,3 +4,6 @@ generate_cxx_metadata
   [gap of 18ms]
 generate_cxx_metadata completed in 38ms
 
+# C/C++ build system timings
+generate_cxx_metadata 16ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_497_timing.txt b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_497_timing.txt
index b0316126..dc8cb3ae 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_497_timing.txt
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/generate_cxx_metadata_497_timing.txt
@@ -1,3 +1,6 @@
 # C/C++ build system timings
 generate_cxx_metadata 19ms
 
+# C/C++ build system timings
+generate_cxx_metadata 21ms
+
diff --git a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/metadata_generation_record.json b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/metadata_generation_record.json
index f1a22f4f..85374c2c 100644
--- a/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/metadata_generation_record.json
+++ b/Opencv/build/intermediates/cxx/Debug/p1g6s634/logs/x86_64/metadata_generation_record.json
@@ -11,7 +11,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -2091529352
+    "memoizedHashCode": -1438516690
   },
   {
     "level_": 0,
@@ -25,7 +25,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 305896416
+    "memoizedHashCode": 958909078
   },
   {
     "level_": 0,
@@ -39,6 +39,6 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1264613355
+    "memoizedHashCode": -611600693
   }
 ]
\ No newline at end of file
diff --git a/Opencv/build/intermediates/cxx/abi_configuration_4s4k1647.log b/Opencv/build/intermediates/cxx/abi_configuration_4s4k1647.log
index 2344757e..a65f99c1 100644
--- a/Opencv/build/intermediates/cxx/abi_configuration_4s4k1647.log
+++ b/Opencv/build/intermediates/cxx/abi_configuration_4s4k1647.log
@@ -11,6 +11,6 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1127879665
+    "memoizedHashCode": -735102328
   }
 ]
\ No newline at end of file
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_247_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_247_timing.txt
index b425b07b..70e48273 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_247_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_247_timing.txt
@@ -14,3 +14,13 @@ create_cxx_tasks
   [gap of 71ms]
 create_cxx_tasks completed in 203ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    [gap of 41ms]
+    create-module-model 11ms
+    [gap of 31ms]
+  create-initial-cxx-model completed in 83ms
+  [gap of 27ms]
+create_cxx_tasks completed in 111ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_302_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_302_timing.txt
index e152d3ca..1160a2a7 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_302_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_302_timing.txt
@@ -10,3 +10,14 @@ create_cxx_tasks
   [gap of 10ms]
 create_cxx_tasks completed in 118ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 11ms
+    [gap of 41ms]
+    create-module-model 11ms
+    [gap of 38ms]
+  create-initial-cxx-model completed in 101ms
+  [gap of 10ms]
+create_cxx_tasks completed in 111ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_304_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_304_timing.txt
index af36e6bb..e677bfa1 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_304_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_304_timing.txt
@@ -15,3 +15,13 @@ create_cxx_tasks
   [gap of 12ms]
 create_cxx_tasks completed in 150ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 11ms
+    [gap of 44ms]
+    create-module-model 11ms
+    [gap of 35ms]
+  create-initial-cxx-model completed in 101ms
+create_cxx_tasks completed in 110ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_310_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_310_timing.txt
index db8ffc32..f391a77c 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_310_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_310_timing.txt
@@ -15,3 +15,13 @@ create_cxx_tasks
   [gap of 13ms]
 create_cxx_tasks completed in 149ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 12ms
+    [gap of 38ms]
+    create-module-model 10ms
+    [gap of 34ms]
+  create-initial-cxx-model completed in 94ms
+create_cxx_tasks completed in 101ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_321_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_321_timing.txt
index df375b3e..19008250 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_321_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_321_timing.txt
@@ -19,3 +19,22 @@ create_cxx_tasks
   [gap of 15ms]
 create_cxx_tasks completed in 163ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 74ms]
+  create-initial-cxx-model completed in 84ms
+  [gap of 10ms]
+create_cxx_tasks completed in 94ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model 63ms
+create_cxx_tasks completed in 69ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model 54ms
+create_cxx_tasks completed in 61ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_32_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_32_timing.txt
index ae3ac27a..5d4b5854 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_32_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_32_timing.txt
@@ -778,3 +778,275 @@ create_cxx_tasks
   [gap of 48ms]
 create_cxx_tasks completed in 178ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 14ms
+    [gap of 16ms]
+    create-ARMEABI_V7A-model 14ms
+    create-ARM64_V8A-model 10ms
+    create-X86-model 10ms
+    [gap of 10ms]
+    create-module-model 13ms
+    [gap of 41ms]
+  create-initial-cxx-model completed in 130ms
+  [gap of 55ms]
+create_cxx_tasks completed in 185ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 19ms
+    [gap of 14ms]
+    create-ARMEABI_V7A-model 11ms
+    create-ARM64_V8A-model 12ms
+    create-X86-model 10ms
+    create-module-model 17ms
+    create-ARMEABI_V7A-model 11ms
+    create-ARM64_V8A-model 10ms
+    create-X86-model 12ms
+    create-X86_64-model 11ms
+  create-initial-cxx-model completed in 148ms
+  [gap of 50ms]
+create_cxx_tasks completed in 199ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 13ms
+    [gap of 27ms]
+    create-X86-model 13ms
+    create-X86_64-model 10ms
+    create-module-model 14ms
+    create-ARMEABI_V7A-model 13ms
+    [gap of 24ms]
+  create-initial-cxx-model completed in 125ms
+  [gap of 45ms]
+create_cxx_tasks completed in 170ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 36ms]
+    create-module-model 10ms
+    [gap of 29ms]
+  create-initial-cxx-model completed in 85ms
+  [gap of 33ms]
+create_cxx_tasks completed in 119ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 13ms
+    [gap of 17ms]
+    create-ARMEABI_V7A-model 11ms
+    create-ARM64_V8A-model 11ms
+    create-X86-model 11ms
+    create-X86_64-model 11ms
+    create-module-model 15ms
+    [gap of 26ms]
+    create-X86-model 10ms
+    create-X86_64-model 10ms
+  create-initial-cxx-model completed in 142ms
+  [gap of 50ms]
+create_cxx_tasks completed in 193ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 13ms
+    [gap of 31ms]
+    create-X86_64-model 10ms
+    create-module-model 14ms
+    create-variant-model 12ms
+    create-ARMEABI_V7A-model 19ms
+    create-ARM64_V8A-model 12ms
+    create-X86-model 17ms
+    create-X86_64-model 14ms
+  create-initial-cxx-model completed in 152ms
+  [gap of 14ms]
+create_cxx_tasks completed in 166ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 59ms]
+  create-initial-cxx-model completed in 69ms
+create_cxx_tasks completed in 75ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 33ms]
+    create-module-model 12ms
+    create-ARMEABI_V7A-model 15ms
+    create-ARM64_V8A-model 10ms
+    create-X86_64-model 11ms
+  create-initial-cxx-model completed in 106ms
+  [gap of 10ms]
+create_cxx_tasks completed in 116ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model 78ms
+create_cxx_tasks completed in 87ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 13ms
+    [gap of 39ms]
+    create-X86_64-model 10ms
+    create-module-model 14ms
+    [gap of 43ms]
+  create-initial-cxx-model completed in 121ms
+  [gap of 48ms]
+create_cxx_tasks completed in 169ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 20ms
+    [gap of 18ms]
+    create-ARMEABI_V7A-model 14ms
+    create-ARM64_V8A-model 12ms
+    create-X86-model 13ms
+    create-X86_64-model 11ms
+    create-module-model
+      [gap of 15ms]
+      create-cmake-model 17ms
+    create-module-model completed in 37ms
+    create-variant-model 14ms
+    create-ARMEABI_V7A-model 12ms
+    create-ARM64_V8A-model 11ms
+    create-X86-model 20ms
+    create-X86_64-model 13ms
+  create-initial-cxx-model completed in 204ms
+  [gap of 97ms]
+create_cxx_tasks completed in 301ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 14ms
+    [gap of 22ms]
+    create-ARM64_V8A-model 10ms
+    [gap of 19ms]
+    create-module-model 13ms
+    create-variant-model 10ms
+    [gap of 18ms]
+    create-X86-model 14ms
+    [gap of 10ms]
+  create-initial-cxx-model completed in 131ms
+  [gap of 16ms]
+create_cxx_tasks completed in 147ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 46ms]
+    create-module-model 14ms
+    [gap of 28ms]
+    create-X86_64-model 10ms
+  create-initial-cxx-model completed in 109ms
+  [gap of 38ms]
+create_cxx_tasks completed in 147ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    [gap of 38ms]
+    create-module-model 11ms
+    [gap of 36ms]
+  create-initial-cxx-model completed in 85ms
+  [gap of 34ms]
+create_cxx_tasks completed in 120ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 35ms]
+    create-module-model 13ms
+    create-ARMEABI_V7A-model 13ms
+    [gap of 18ms]
+    create-X86_64-model 12ms
+  create-initial-cxx-model completed in 111ms
+  [gap of 44ms]
+create_cxx_tasks completed in 156ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 15ms
+    [gap of 46ms]
+    create-module-model 10ms
+    [gap of 39ms]
+  create-initial-cxx-model completed in 110ms
+  [gap of 42ms]
+create_cxx_tasks completed in 153ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 41ms]
+    create-module-model 11ms
+    create-ARMEABI_V7A-model 11ms
+    [gap of 20ms]
+  create-initial-cxx-model completed in 100ms
+  [gap of 34ms]
+create_cxx_tasks completed in 134ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 11ms
+    [gap of 42ms]
+    create-module-model 13ms
+    [gap of 40ms]
+  create-initial-cxx-model completed in 106ms
+  [gap of 37ms]
+create_cxx_tasks completed in 143ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 75ms]
+  create-initial-cxx-model completed in 85ms
+  [gap of 31ms]
+create_cxx_tasks completed in 117ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 17ms
+    [gap of 28ms]
+    create-X86-model 10ms
+    create-X86_64-model 10ms
+    create-module-model 18ms
+    [gap of 33ms]
+    create-X86_64-model 10ms
+  create-initial-cxx-model completed in 128ms
+  [gap of 46ms]
+create_cxx_tasks completed in 175ms
+
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 14ms
+    [gap of 54ms]
+    create-module-model 14ms
+    create-variant-model 10ms
+    [gap of 10ms]
+    create-ARM64_V8A-model 10ms
+    create-X86-model 10ms
+  create-initial-cxx-model completed in 135ms
+  [gap of 60ms]
+create_cxx_tasks completed in 196ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_443_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_443_timing.txt
index 813b3d30..1b011f17 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_443_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_443_timing.txt
@@ -16,3 +16,15 @@ create_cxx_tasks
   [gap of 12ms]
 create_cxx_tasks completed in 173ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 11ms
+    [gap of 19ms]
+    create-X86-model 19ms
+    create-module-model 11ms
+    [gap of 31ms]
+  create-initial-cxx-model completed in 100ms
+  [gap of 16ms]
+create_cxx_tasks completed in 116ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_552_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_552_timing.txt
index f9a5811e..01817718 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_552_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_552_timing.txt
@@ -8,3 +8,11 @@ create_cxx_tasks
   [gap of 12ms]
 create_cxx_tasks completed in 93ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model
+    create-module-model 10ms
+    [gap of 73ms]
+  create-initial-cxx-model completed in 83ms
+create_cxx_tasks completed in 90ms
+
diff --git a/Opencv/build/intermediates/cxx/create_cxx_tasks_782_timing.txt b/Opencv/build/intermediates/cxx/create_cxx_tasks_782_timing.txt
index 9605b788..812d9ba3 100644
--- a/Opencv/build/intermediates/cxx/create_cxx_tasks_782_timing.txt
+++ b/Opencv/build/intermediates/cxx/create_cxx_tasks_782_timing.txt
@@ -10,3 +10,8 @@ create_cxx_tasks
   [gap of 11ms]
 create_cxx_tasks completed in 116ms
 
+# C/C++ build system timings
+create_cxx_tasks
+  create-initial-cxx-model 66ms
+create_cxx_tasks completed in 74ms
+
diff --git a/Opencv/build/intermediates/cxx/ndk_locator_record_463t1h4l.log b/Opencv/build/intermediates/cxx/ndk_locator_record_463t1h4l.log
index 8f16c6d5..854d323a 100644
--- a/Opencv/build/intermediates/cxx/ndk_locator_record_463t1h4l.log
+++ b/Opencv/build/intermediates/cxx/ndk_locator_record_463t1h4l.log
@@ -11,7 +11,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1969914283
+    "memoizedHashCode": 106932290
   },
   {
     "level_": 0,
@@ -25,7 +25,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1532864910
+    "memoizedHashCode": 899120393
   },
   {
     "level_": 0,
@@ -39,7 +39,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1992608955
+    "memoizedHashCode": 439376348
   },
   {
     "level_": 0,
@@ -53,7 +53,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1034410353
+    "memoizedHashCode": -828571640
   },
   {
     "level_": 0,
@@ -67,7 +67,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1603122384
+    "memoizedHashCode": -259859609
   },
   {
     "level_": 0,
@@ -81,7 +81,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1968032642
+    "memoizedHashCode": 105050649
   },
   {
     "level_": 0,
@@ -95,7 +95,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -2019793420
+    "memoizedHashCode": 412191883
   },
   {
     "level_": 0,
@@ -109,7 +109,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1717026156
+    "memoizedHashCode": -145955837
   },
   {
     "level_": 0,
@@ -123,7 +123,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1909138387
+    "memoizedHashCode": 522846916
   },
   {
     "level_": 0,
@@ -137,7 +137,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": -1204677194
+    "memoizedHashCode": 1227308109
   },
   {
     "level_": 0,
@@ -151,7 +151,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 658136876
+    "memoizedHashCode": -1204845117
   },
   {
     "level_": 0,
@@ -165,7 +165,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 1226848907
+    "memoizedHashCode": -636133086
   },
   {
     "level_": 0,
@@ -179,7 +179,7 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 2132598970
+    "memoizedHashCode": 269616977
   },
   {
     "level_": 2,
@@ -193,6 +193,6 @@
       "fieldsDescending": {}
     },
     "memoizedSize": -1,
-    "memoizedHashCode": 289047118
+    "memoizedHashCode": -1573934875
   }
 ]
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 1cb250e0..30cf79d6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -234,4 +234,8 @@ dependencies {
      //implementation 'com.quickbirdstudios:opencv-contrib:3.4.5'
     implementation project(path: ':android-sdk-v5-uxsdk')
 
+    //TTS
+
+    implementation files('libs/AIKit.aar')
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/aros/apron/activity/ConnectionActivity.kt b/app/src/main/java/com/aros/apron/activity/ConnectionActivity.kt
index b08f8452..ec43b8cf 100644
--- a/app/src/main/java/com/aros/apron/activity/ConnectionActivity.kt
+++ b/app/src/main/java/com/aros/apron/activity/ConnectionActivity.kt
@@ -90,8 +90,8 @@ open class ConnectionActivity : BaseActivity() {
         }
         if (TextUtils.isEmpty(PreferenceUtils.getInstance().mqttServerUri)){
             PreferenceUtils.getInstance().mqttServerUri =
-               // "tcp://192.168.20.90:2883"
-                "tcp://broker.emqx.io"
+               "tcp://192.168.20.90:2883"
+                //"tcp://broker.emqx.io"
         }
 
         if (TextUtils.isEmpty(PreferenceUtils.getInstance().mqttUserName)){
diff --git a/app/src/main/java/com/aros/apron/activity/MainActivity.kt b/app/src/main/java/com/aros/apron/activity/MainActivity.kt
index 61aa5cf0..30d9aa71 100644
--- a/app/src/main/java/com/aros/apron/activity/MainActivity.kt
+++ b/app/src/main/java/com/aros/apron/activity/MainActivity.kt
@@ -1,4 +1,5 @@
 package com.aros.apron.activity
+
 import android.annotation.SuppressLint
 import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
@@ -6,16 +7,17 @@ import android.os.Build
 import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
+import android.util.Log
 import android.view.View
 import android.view.Window
 import android.view.WindowManager
 import android.widget.Button
 import android.widget.TextView
+import android.widget.Toast
 import androidx.annotation.RequiresApi
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.view.GravityCompat
 import androidx.drawerlayout.widget.DrawerLayout
-import com.aros.apron.BuildConfig
 import com.aros.apron.R
 import com.aros.apron.base.BaseActivity
 import com.aros.apron.callback.MqttCallBack
@@ -36,6 +38,7 @@ import com.aros.apron.manager.MediaManager
 import com.aros.apron.manager.MissionV3Manager
 import com.aros.apron.manager.OSDManager
 import com.aros.apron.manager.PayloadWidgetManager
+import com.aros.apron.manager.SpeakerManager
 import com.aros.apron.manager.StickManager
 import com.aros.apron.manager.StreamManager
 import com.aros.apron.manager.WirelessLinkManager
@@ -45,8 +48,14 @@ import com.aros.apron.tools.DroneHelper
 import com.aros.apron.tools.LogUtil
 import com.aros.apron.tools.MqttManager
 import com.aros.apron.tools.PreferenceUtils
+import com.aros.apron.tools.Utils
 import com.dji.wpmzsdk.manager.WPMZManager
 import com.google.gson.Gson
+import com.iflytek.aikit.core.AiHelper
+import com.iflytek.aikit.core.BaseLibrary
+import com.iflytek.aikit.core.CoreListener
+import com.iflytek.aikit.core.ErrType
+import com.iflytek.aikit.core.LogLvl
 import dji.sdk.keyvalue.key.CameraKey
 import dji.sdk.keyvalue.key.DJIKey
 import dji.sdk.keyvalue.key.FlightControllerKey
@@ -57,9 +66,11 @@ import dji.sdk.keyvalue.value.common.ComponentIndexType
 import dji.sdk.keyvalue.value.common.EmptyMsg
 import dji.sdk.keyvalue.value.flightassistant.VisionAssistDirection
 import dji.v5.common.callback.CommonCallbacks
+import dji.v5.common.callback.CommonCallbacks.CompletionCallback
 import dji.v5.common.error.IDJIError
 import dji.v5.common.utils.GeoidManager
 import dji.v5.manager.KeyManager
+import dji.v5.manager.aircraft.virtualstick.VirtualStickManager
 import dji.v5.manager.datacenter.MediaDataCenter
 import dji.v5.manager.interfaces.ICameraStreamManager
 import dji.v5.manager.interfaces.ICameraStreamManager.AvailableCameraUpdatedListener
@@ -105,7 +116,6 @@ import io.reactivex.rxjava3.functions.Consumer
 import org.eclipse.paho.client.mqttv3.MqttException
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
-import org.opencv.android.OpenCVLoader
 import org.opencv.objdetect.Dictionary
 import org.opencv.objdetect.Objdetect
 import java.util.concurrent.TimeUnit
@@ -143,6 +153,9 @@ open class MainActivity : BaseActivity() {
     private var gimbalAdjustDone: TextView? = null
     private var btn_test: Button? = null
     private var btn_test1: Button? = null
+    private var btn_test2: Button? = null
+    private var btn_test3: Button? = null
+
 
     private var gimbalFineTuneWidget: GimbalFineTuneWidget? = null
     private var lastDevicePosition = ComponentIndexType.UNKNOWN
@@ -175,13 +188,15 @@ open class MainActivity : BaseActivity() {
         }
 
 
-    private var cameraManager: ICameraStreamManager = MediaDataCenter.getInstance().cameraStreamManager
+    private var cameraManager: ICameraStreamManager =
+        MediaDataCenter.getInstance().cameraStreamManager
 
     private var startArucoType = 0  //1执行机库二维码识别  2执行备降点二维码识别
     private var dictionary: Dictionary? = null
     override fun useEventBus(): Boolean {
         return true
     }
+
     override fun onResume() {
         super.onResume()
         dictionary = Objdetect.getPredefinedDictionary(Objdetect.DICT_6X6_250)
@@ -213,14 +228,15 @@ open class MainActivity : BaseActivity() {
                     runOnUiThread { onCameraSourceUpdated(result.devicePosition, result.lensType) }
                 })
         )
-        compositeDisposable!!.add(ObservableInMemoryKeyedStore.getInstance()
-            .addObserver(UXKeys.create(GlobalPreferenceKeys.GIMBAL_ADJUST_CLICKED))
-            .observeOn(ui())
-            .subscribe { broadcastValues: BroadcastValues? ->
-                isGimableAdjustClicked(
-                    broadcastValues!!
-                )
-            })
+        compositeDisposable!!.add(
+            ObservableInMemoryKeyedStore.getInstance()
+                .addObserver(UXKeys.create(GlobalPreferenceKeys.GIMBAL_ADJUST_CLICKED))
+                .observeOn(ui())
+                .subscribe { broadcastValues: BroadcastValues? ->
+                    isGimableAdjustClicked(
+                        broadcastValues!!
+                    )
+                })
         ViewUtil.setKeepScreen(this, true)
     }
 
@@ -234,7 +250,7 @@ open class MainActivity : BaseActivity() {
     }
 
     //endregion
-    private  fun hideOtherPanels(widget: View?) {
+    private fun hideOtherPanels(widget: View?) {
         val panels = arrayOf<View>(
             simulatorControlWidget!!
         )
@@ -347,7 +363,7 @@ open class MainActivity : BaseActivity() {
         }
     }
 
-    private  fun updateViewVisibility(
+    private fun updateViewVisibility(
         devicePosition: ComponentIndexType,
         lensType: CameraLensType
     ) {
@@ -386,7 +402,7 @@ open class MainActivity : BaseActivity() {
     /**
      * Swap the video sources of the FPV and secondary FPV widgets.
      */
-    private  fun swapVideoSource() {
+    private fun swapVideoSource() {
         val primarySource = primaryFpvWidget!!.widgetModel.getCameraIndex()
         val secondarySource = secondaryFPVWidget!!.widgetModel.getCameraIndex()
         //两个source都存在的情况下才进行切换
@@ -406,6 +422,7 @@ open class MainActivity : BaseActivity() {
         val devicePosition: ComponentIndexType,
         val lensType: CameraLensType
     )
+
     override fun onBackPressed() {
         if (mDrawerLayout!!.isDrawerOpen(GravityCompat.END)) {
             mDrawerLayout!!.closeDrawers()
@@ -440,54 +457,109 @@ open class MainActivity : BaseActivity() {
         initDJIManager()
         initCameraStream()
         initView()
+        initSDK()
+    }
+
+    private fun initSDK() {
+        AiHelper.getInst().setLogInfo(LogLvl.VERBOSE, 1, "/sdcard/iflytek/aikit/aeeLog.txt")
+        //设定初始化参数
+        val params = BaseLibrary.Params.builder()
+            .appId("753fd711") //您的应用ID，可从控制台查看
+            .apiKey("35099a7d31abf2259f5ee58cbf8b6791") //您的APIKEY，可从控制台查看
+            .apiSecret("ZTdiMDIwYzEwNTA1NjllYjJlYjdmYWFi") //您的APISECRET，可从控制台查看
+            .workDir(Utils.getSDCardPath() + "/DJIDemo/cache") //SDK的工作目录，需要确保有读写权限。一般用于存放离线能力资源，日志存放目录等使用。
+            .build()
+        //初始化SDK
+        Thread {
+            AiHelper.getInst().initEntry(this@MainActivity.applicationContext, params)
+        }.start()
+        AiHelper.getInst().registerListener(coreListener) // 注册SDK 初始化状态监听
+
+    }
+
+    //授权结果回调
+    private val coreListener = CoreListener { type, code ->
+        Log.i(TAG, "core listener code:$code")
+        runOnUiThread {
+            when (type) {
+                ErrType.AUTH -> {
+                    if (code == 0) {
+                        LogUtil.log(TAG, "SDK授权成功")
+                    } else {
+                        LogUtil.log(TAG, "SDK授权失败，授权码为:$code")
+                    }
+                }
+
+                ErrType.HTTP -> Toast.makeText(
+                    this@MainActivity, "SDK状态：HTTP认证结果$code",
+                    Toast.LENGTH_SHORT
+                ).show()
+
+                else -> Toast.makeText(
+                    this@MainActivity, "SDK状态：其他错误$code",
+                    Toast.LENGTH_SHORT
+                ).show()
+            }
+        }
     }
 
     private fun initView() {
-        fpvParentView = findViewById( R.id.fpv_holder)
-        mDrawerLayout = findViewById( R.id.root_view)
-        topBarPanel = findViewById( R.id.panel_top_bar)
+        fpvParentView = findViewById(R.id.fpv_holder)
+        mDrawerLayout = findViewById(R.id.root_view)
+        topBarPanel = findViewById(R.id.panel_top_bar)
         settingWidget = topBarPanel?.settingWidget
-        primaryFpvWidget = findViewById( R.id.widget_primary_fpv)
-        fpvInteractionWidget = findViewById( R.id.widget_fpv_interaction)
-        secondaryFPVWidget = findViewById( R.id.widget_secondary_fpv)
-        systemStatusListPanelWidget = findViewById( R.id.widget_panel_system_status_list)
-        simulatorControlWidget = findViewById( R.id.widget_simulator_control)
-        lensControlWidget = findViewById<LensControlWidget>( R.id.widget_lens_control)
-        ndviCameraPanel = findViewById( R.id.panel_ndvi_camera)
-        visualCameraPanel = findViewById( R.id.panel_visual_camera)
-        autoExposureLockWidget = findViewById( R.id.widget_auto_exposure_lock)
-        focusModeWidget = findViewById( R.id.widget_focus_mode)
-        focusExposureSwitchWidget = findViewById( R.id.widget_focus_exposure_switch)
-        pfvFlightDisplayWidget = findViewById( R.id.widget_fpv_flight_display_widget)
-        focalZoomWidget = findViewById( R.id.widget_focal_zoom)
-        cameraControlsWidget = findViewById( R.id.widget_camera_controls)
+        primaryFpvWidget = findViewById(R.id.widget_primary_fpv)
+        fpvInteractionWidget = findViewById(R.id.widget_fpv_interaction)
+        secondaryFPVWidget = findViewById(R.id.widget_secondary_fpv)
+        systemStatusListPanelWidget = findViewById(R.id.widget_panel_system_status_list)
+        simulatorControlWidget = findViewById(R.id.widget_simulator_control)
+        lensControlWidget = findViewById<LensControlWidget>(R.id.widget_lens_control)
+        ndviCameraPanel = findViewById(R.id.panel_ndvi_camera)
+        visualCameraPanel = findViewById(R.id.panel_visual_camera)
+        autoExposureLockWidget = findViewById(R.id.widget_auto_exposure_lock)
+        focusModeWidget = findViewById(R.id.widget_focus_mode)
+        focusExposureSwitchWidget = findViewById(R.id.widget_focus_exposure_switch)
+        pfvFlightDisplayWidget = findViewById(R.id.widget_fpv_flight_display_widget)
+        focalZoomWidget = findViewById(R.id.widget_focal_zoom)
+        cameraControlsWidget = findViewById(R.id.widget_camera_controls)
         horizontalSituationIndicatorWidget =
             findViewById(R.id.widget_horizontal_situation_indicator)
 //        gimbalAdjustDone = findViewById<TextView>( R.id.fpv_gimbal_ok_btn)
-        gimbalFineTuneWidget = findViewById( R.id.setting_menu_gimbal_fine_tune)
-        btn_test = findViewById( R.id.btn_test)
-        btn_test1 = findViewById( R.id.btn_test1)
+        gimbalFineTuneWidget = findViewById(R.id.setting_menu_gimbal_fine_tune)
+        btn_test = findViewById(R.id.btn_test)
+        btn_test1 = findViewById(R.id.btn_test1)
+        btn_test2 = findViewById(R.id.btn_test2)
+        btn_test3 = findViewById(R.id.btn_test3)
         btn_test?.setOnClickListener {
-//            MissionManager.getInstance().test()
-            FlightManager.getInstance().startPropellerRotation(null)
+
+
         }
         btn_test1?.setOnClickListener {
-            FlightManager.getInstance().stopPropellerRotation(null)
+
+
+        }
+        btn_test2?.setOnClickListener {
+
+
+        }
+        btn_test3?.setOnClickListener {
+
+
         }
 
 
 
 
         MediaDataCenter.getInstance().cameraStreamManager.setVisionAssistViewDirection(
-            VisionAssistDirection.DOWN,object:CommonCallbacks.CompletionCallback{
-            override fun onSuccess() {
-                LogUtil.log(TAG,"开启成功")
-            }
+            VisionAssistDirection.DOWN, object : CommonCallbacks.CompletionCallback {
+                override fun onSuccess() {
+                    LogUtil.log(TAG, "开启成功")
+                }
 
-            override fun onFailure(p0: IDJIError) {
-                LogUtil.log(TAG,"开启失败"+p0)
-            }
-        })
+                override fun onFailure(p0: IDJIError) {
+                    LogUtil.log(TAG, "开启失败" + p0)
+                }
+            })
 
 
         initClickListener()
@@ -516,11 +588,9 @@ open class MainActivity : BaseActivity() {
         DJINetworkManager.getInstance().addNetworkStatusListener(networkStatusListener)
 
 
-
-
     }
 
-    private  fun isGimableAdjustClicked(broadcastValues: BroadcastValues) {
+    private fun isGimableAdjustClicked(broadcastValues: BroadcastValues) {
         if (mDrawerLayout!!.isDrawerOpen(GravityCompat.END)) {
             mDrawerLayout!!.closeDrawers()
         }
@@ -530,7 +600,7 @@ open class MainActivity : BaseActivity() {
         }
     }
 
-    private  fun initClickListener() {
+    private fun initClickListener() {
         secondaryFPVWidget!!.setOnClickListener { v: View? -> swapVideoSource() }
         if (settingWidget != null) {
             settingWidget!!.setOnClickListener { v: View? -> toggleRightDrawer() }
@@ -549,7 +619,7 @@ open class MainActivity : BaseActivity() {
 //        }
     }
 
-    private  fun toggleRightDrawer() {
+    private fun toggleRightDrawer() {
         mDrawerLayout!!.openDrawer(GravityCompat.END)
     }
 
@@ -572,18 +642,21 @@ open class MainActivity : BaseActivity() {
     }
 
     private val handler: Handler = Handler(Looper.getMainLooper())
-    private var initTimes=0
+    private var initTimes = 0
+
 
     private fun initDJIManager() {
         //如果没有云台修改这里
         // 初始化 OpenCV
-        
+
         val isFlightControllerConnect =
             KeyManager.getInstance().getValue(DJIKey.create(FlightControllerKey.KeyConnection))
         val isCameraConnect =
-            KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.KeyConnection, ComponentIndexType.PORT_1))
-        val isGimbal =KeyManager.getInstance().getValue(KeyTools.createKey(GimbalKey.KeyConnection, ComponentIndexType.PORT_1))
-        LogUtil.log(TAG,isCameraConnect.toString())
+            KeyManager.getInstance()
+                .getValue(KeyTools.createKey(CameraKey.KeyConnection, ComponentIndexType.PORT_1))
+        val isGimbal = KeyManager.getInstance()
+            .getValue(KeyTools.createKey(GimbalKey.KeyConnection, ComponentIndexType.PORT_1))
+        // LogUtil.log(TAG,isCameraConnect.toString())
 
         //全装在初始化
         if ((isFlightControllerConnect == null || !isFlightControllerConnect)) {
@@ -594,7 +667,7 @@ open class MainActivity : BaseActivity() {
             initTimes++
             LogUtil.log(TAG, "初始化$initTimes")
 
-            LogUtil.log(TAG,"自定义推流方式:"+PreferenceUtils.getInstance().customStreamType)
+            LogUtil.log(TAG, "自定义推流方式:" + PreferenceUtils.getInstance().customStreamType)
             Handler().postDelayed(Runnable {
 
 
@@ -615,30 +688,31 @@ open class MainActivity : BaseActivity() {
                 LTEManager.getInstance().initLTEInfo()
                 WirelessLinkManager.getInstance().initWirelessLink()
                 CameraManager.getInstance().initCameraInfo()
-
+                //tts
+                SpeakerManager.getInstance().initMegaphoneInfo()
                 LEDsSettingsManager.getInstance().initLEDsInfo()
 
 
 
 
-                    if (PreferenceUtils.getInstance().customStreamType==1){
-                        StreamManager.getInstance()
-                            .startLiveWithRTSP()
-                    }else if (PreferenceUtils.getInstance().customStreamType==2){
-                        StreamManager.getInstance()
-                            .startLiveWithCustom()
-                    }else {
-                        StreamManager.getInstance()
-                            .startLiveWithCustom()
-                    }
+                if (PreferenceUtils.getInstance().customStreamType == 1) {
+                    StreamManager.getInstance()
+                        .startLiveWithRTSP()
 
-                }, 5000)
-            LogUtil.log(TAG,"推流类型:"+PreferenceUtils.getInstance().customStreamType)
+                } else if (PreferenceUtils.getInstance().customStreamType == 2) {
+                    StreamManager.getInstance()
+                        .startLiveWithCustom()
+                } else {
+                    StreamManager.getInstance()
+                        .startLiveWithCustom()
+                }
+
+            }, 5000)
+            LogUtil.log(TAG, "推流类型:" + PreferenceUtils.getInstance().customStreamType)
         }
     }
 
 
-
     @SuppressLint("SuspiciousIndentation")
     private fun initCameraStream() {
 
@@ -646,25 +720,25 @@ open class MainActivity : BaseActivity() {
             ComponentIndexType.FPV,
             ICameraStreamManager.FrameFormat.YUV420_888
         ) { frameData, _, _, width, height, _ ->
-            Movement.getInstance().isVtx=true
+            Movement.getInstance().isVtx = true
             //检测到图传
-            streamReceive=true
+            streamReceive = true
 //            if (shouldExecute) {
-                if (startArucoType == 1) {
-                    ApronArucoDetect.getInstance()?.detectArucoTags(
-                        height,
-                        width,
-                        frameData,
-                        dictionary
-                    )
-                } else if (startArucoType == 2) {
-                    AlternateArucoDetect.getInstance()?.detectArucoTags(
-                        height,
-                        width,
-                        frameData,
-                        dictionary
-                    )
-                }
+            if (startArucoType == 1) {
+                ApronArucoDetect.getInstance()?.detectArucoTags(
+                    height,
+                    width,
+                    frameData,
+                    dictionary
+                )
+            } else if (startArucoType == 2) {
+                AlternateArucoDetect.getInstance()?.detectArucoTags(
+                    height,
+                    width,
+                    frameData,
+                    dictionary
+                )
+            }
 //            }
 //            shouldExecute = !shouldExecute
         }
@@ -718,7 +792,7 @@ open class MainActivity : BaseActivity() {
                             ApronArucoDetect.getInstance().setDetectedBigMarkers()
                             DroneHelper.getInstance().setGimbalPitchDegree()
                             //每次触发识别二维码时，为避免获取控制权失败,使多次获取控制权
-                            DroneHelper.getInstance().isVirtualStickEnable=false
+                            DroneHelper.getInstance().isVirtualStickEnable = false
                             DroneHelper.getInstance().setVerticalModeToVelocity()
                         }
                     })
@@ -757,24 +831,48 @@ open class MainActivity : BaseActivity() {
                             )
                             DroneHelper.getInstance().setGimbalPitchDegree()
                             //每次触发识别二维码时，为避免获取控制权失败,使多次获取控制权
-                            DroneHelper.getInstance().isVirtualStickEnable=false
+                            DroneHelper.getInstance().isVirtualStickEnable = false
                             DroneHelper.getInstance().setVerticalModeToVelocity()
                         }
                     })
 
-            FLAG_DOWN_LAND ->
-                KeyManager.getInstance().performAction<EmptyMsg>(
-                    KeyTools.createKey<EmptyMsg, EmptyMsg>(FlightControllerKey.KeyStartAutoLanding),
-                    object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
-                        override fun onSuccess(emptyMsg: EmptyMsg?) {
-                            startArucoType = 0
-                            LogUtil.log(TAG, "自动降落调用成功")
-                        }
+            FLAG_DOWN_LAND -> {
+                VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(false)
+
+                VirtualStickManager.getInstance().disableVirtualStick(object : CompletionCallback {
+                    override fun onSuccess() {
+                        LogUtil.log(TAG, "控制取消成功")
+                        VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(false)
+
+                        KeyManager.getInstance().performAction<EmptyMsg>(
+                            KeyTools.createKey<EmptyMsg, EmptyMsg>(FlightControllerKey.KeyStartAutoLanding),
+                            object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
+                                override fun onSuccess(emptyMsg: EmptyMsg?) {
+                                    startArucoType = 0
+                                    LogUtil.log(TAG, "自动降落调用成功")
+                                }
+                                override fun onFailure(error: IDJIError) {
+                                    LogUtil.log(TAG, "自动降落调用失败${error.description()}")
+                                }
+                            })
+                    }
+                    override fun onFailure(error: IDJIError) {
+                        LogUtil.log(TAG, "拖动控制权取消成功")
+                        KeyManager.getInstance().performAction<EmptyMsg>(
+                            KeyTools.createKey<EmptyMsg, EmptyMsg>(FlightControllerKey.KeyStartAutoLanding),
+                            object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
+                                override fun onSuccess(emptyMsg: EmptyMsg?) {
+                                    startArucoType = 0
+                                    LogUtil.log(TAG, "自动降落调用成功")
+                                }
+                                override fun onFailure(error: IDJIError) {
+                                    LogUtil.log(TAG, "自动降落调用失败${error.description()}")
+                                }
+                            })
+                    }
+                })
+            }
 
-                        override fun onFailure(error: IDJIError) {
-                            LogUtil.log(TAG, "自动降落调用失败${error.description()}")
-                        }
-                    })
 
             FLAG_STOP_ARUCO ->
                 startArucoType = 0
@@ -784,9 +882,6 @@ open class MainActivity : BaseActivity() {
         }
     }
 
-
-
-
     private fun setViewVisibilityWithCleanMode() {
         if (PreferenceUtils.getInstance().isCleanMode) {
             fpvInteractionWidget?.visibility = View.GONE
diff --git a/app/src/main/java/com/aros/apron/base/BaseManager.java b/app/src/main/java/com/aros/apron/base/BaseManager.java
index dd40b0a1..db2a0ce2 100644
--- a/app/src/main/java/com/aros/apron/base/BaseManager.java
+++ b/app/src/main/java/com/aros/apron/base/BaseManager.java
@@ -291,7 +291,7 @@ public abstract class BaseManager {
                                     output.setProgress(progress);
 
                                     FlightTaskProgress.Data data = new FlightTaskProgress.Data();
-                                    data.setResult(0);
+                                    data.setResult(Movement.getInstance().getResult());
                                     data.setOutput(output);
 
                                     FlightTaskProgress flightTaskProgress = new FlightTaskProgress();
@@ -321,7 +321,7 @@ public abstract class BaseManager {
                                     output.setProgress(progress);
 
                                     FlightTaskProgress.Data data = new FlightTaskProgress.Data();
-                                    data.setResult(0);
+                                    data.setResult(Movement.getInstance().getResult());
                                     data.setOutput(output);
 
                                     FlightTaskProgress flightTaskProgress = new FlightTaskProgress();
@@ -445,48 +445,47 @@ public abstract class BaseManager {
             LogUtil.log(TAG, "发送sdr异常：" + e.toString());
         }
     }
-    /**
-     * 上报一键起飞任务进度
-     */
-    public void sendTakeoffToPointProgress2Server() {
-        try {
-            if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
-
-                // 构建 data 数据
-                TakeoffToPointProgress.Data data = new TakeoffToPointProgress.Data();
-                data.setFlightId(PreferenceUtils.getInstance().getFlightId());
-                data.setTrackId(PreferenceUtils.getInstance().getFlightId());
-                data.setStatus(Movement.getInstance().getTakeoff_status());
-                data.setResult(Movement.getInstance().getTakeoff_result());
-                data.setWayPointIndex(Movement.getInstance().getCurrentWaypointIndex());
-                data.setRemainingDistance(Movement.getInstance().getTakeoff_remaining_distance());
-                data.setRemainingTime(Movement.getInstance().getTakeoff_remaining_time());
-                data.setPlannedPathPoints(Movement.getInstance().getTakeoff_planned_path_points());
-
-                // 构建事件对象
-                TakeoffToPointProgress progress = new TakeoffToPointProgress();
-                progress.setBid(UUID.randomUUID().toString());
-                progress.setTid(UUID.randomUUID().toString());
-                progress.setTimestamp(System.currentTimeMillis());
-                progress.setMethod("takeoff_to_point_progress");
-                progress.setNeedReply(1);
-                progress.setData(data);
-
-                // 发送
-                MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(progress).getBytes("UTF-8"));
-                mqttMessage.setQos(0);
-                MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
-
-                LogUtil.log(TAG, "发送一键起飞进度事件:" + new Gson().toJson(progress));
-
-            } else {
-                LogUtil.log(TAG, "发送一键起飞进度event失败：mqtt 未连接");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            LogUtil.log(TAG, "发送一键起飞进度event异常：" + e.toString());
-        }
-    }
+//    /**
+//     * 上报一键起飞任务进度
+//     */
+//    public void sendTakeoffToPointProgress2Server() {
+//        try {
+//            if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
+//                // 构建 data 数据
+//                TakeoffToPointProgress.Data data = new TakeoffToPointProgress.Data();
+//                data.setFlightId(PreferenceUtils.getInstance().getFlightId());
+//                data.setTrackId(PreferenceUtils.getInstance().getFlightId());
+//                data.setStatus(Movement.getInstance().getTakeoff_status());
+//                data.setResult(Movement.getInstance().getTakeoff_result());
+//                data.setWayPointIndex(Movement.getInstance().getCurrentWaypointIndex());
+//                data.setRemainingDistance(Movement.getInstance().getTakeoff_remaining_distance());
+//                data.setRemainingTime(Movement.getInstance().getTakeoff_remaining_time());
+//                data.setPlannedPathPoints(Movement.getInstance().getTakeoff_planned_path_points());
+//
+//                // 构建事件对象
+//                TakeoffToPointProgress progress = new TakeoffToPointProgress();
+//                progress.setBid(UUID.randomUUID().toString());
+//                progress.setTid(UUID.randomUUID().toString());
+//                progress.setTimestamp(System.currentTimeMillis());
+//                progress.setMethod("takeoff_to_point_progress");
+//                progress.setNeedReply(1);
+//                progress.setData(data);
+//
+//                // 发送
+//                MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(progress).getBytes("UTF-8"));
+//                mqttMessage.setQos(0);
+//                MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage);
+//
+//                LogUtil.log(TAG, "发送一键起飞进度事件:" + new Gson().toJson(progress));
+//
+//            } else {
+//                LogUtil.log(TAG, "发送一键起飞进度event失败：mqtt 未连接");
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            LogUtil.log(TAG, "发送一键起飞进度event异常：" + e.toString());
+//        }
+//    }
 
     /**
      * 上报拍照进度（camera_photo_take_progress）
diff --git a/app/src/main/java/com/aros/apron/callback/MVirtualStickStateListener.java b/app/src/main/java/com/aros/apron/callback/MVirtualStickStateListener.java
index 5e70bb65..c6f5675d 100644
--- a/app/src/main/java/com/aros/apron/callback/MVirtualStickStateListener.java
+++ b/app/src/main/java/com/aros/apron/callback/MVirtualStickStateListener.java
@@ -16,6 +16,7 @@ public class MVirtualStickStateListener extends BaseManager implements dji.v5.ma
         if (stickState!=null){
             LogUtil.log(TAG,"控制权:"+stickState.isVirtualStickEnable()+"-高级模式:"+stickState.isVirtualStickAdvancedModeEnabled());
             Movement.getInstance().setIsVirtualStickEnable(stickState.isVirtualStickEnable()?1:0);
+
             if (!stickState.isVirtualStickEnable()){
                 Movement.getInstance().setVirtualStickEnableReason(0);
             }
@@ -25,6 +26,9 @@ public class MVirtualStickStateListener extends BaseManager implements dji.v5.ma
 
     @Override
     public void onChangeReasonUpdate(@NonNull FlightControlAuthorityChangeReason reason) {
+        if(reason.name().equals(FlightControlAuthorityChangeReason.BATTERY_LOW_GO_HOME)){
+            Movement.getInstance().setResult(321773);
+        }
         LogUtil.log(TAG,"控制权变更原因:"+reason.name());
 
     }
diff --git a/app/src/main/java/com/aros/apron/callback/MqttCallBack.java b/app/src/main/java/com/aros/apron/callback/MqttCallBack.java
index 9293eb2b..12184b7b 100644
--- a/app/src/main/java/com/aros/apron/callback/MqttCallBack.java
+++ b/app/src/main/java/com/aros/apron/callback/MqttCallBack.java
@@ -12,12 +12,15 @@ import com.aros.apron.constant.Constant;
 import com.aros.apron.entity.ApronExecutionStatus;
 import com.aros.apron.entity.MessageDown;
 import com.aros.apron.entity.Movement;
+import com.aros.apron.entity.SpeakerAudioPlayProgress;
 import com.aros.apron.manager.CameraManager;
 import com.aros.apron.manager.FlightManager;
 import com.aros.apron.manager.FlyToPointManager;
 import com.aros.apron.manager.GimbalManager;
 import com.aros.apron.manager.MissionV3Manager;
 import com.aros.apron.manager.OSDManager;
+import com.aros.apron.manager.PerceptionManager;
+import com.aros.apron.manager.SpeakerManager;
 import com.aros.apron.manager.StickManager;
 import com.aros.apron.manager.StreamManager;
 import com.aros.apron.manager.SystemManager;
@@ -26,6 +29,8 @@ import com.aros.apron.tools.LogUtil;
 import com.aros.apron.tools.MqttManager;
 import com.aros.apron.tools.PreferenceUtils;
 import com.aros.apron.tools.RestartAPPTool;
+import com.aros.apron.tools.SpeakerProgressReporter;
+import com.aros.apron.tools.TakeoffProgressScheduler;
 import com.google.gson.Gson;
 
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
@@ -90,14 +95,10 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended  {
 
 
 
-
-
-
-
     @Override
     public void messageArrived(String topic, MqttMessage mqttMessage) {
         String jsonString = null;
-        //Log.e(TAG, "入口打印:" +mqttMessage.toString());
+        Log.e(TAG, "入口打印:" +mqttMessage.toString());
         try {
 
             jsonString = new String(mqttMessage.getPayload(), "UTF-8");
@@ -142,6 +143,9 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended  {
                 break;
             case Constant.FLIGHTTASK_EXECUTE:
                 LogUtil.log(TAG, "收到：航线" + jsonString);
+                //关闭避障
+                PerceptionManager.getInstance().setPerceptionEnable(false);
+                PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
                 //设置modecode
                 Movement.getInstance().setMode_code(1);
                 sendFlightTaskProgress2Server();
@@ -192,6 +196,7 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended  {
                 sendFlightTaskProgress2Server();
                 //设置标志为指令飞行
                 Movement.getInstance().setFlightmode(2);
+                TakeoffProgressScheduler.getInstance().startReporting();
 
                 TakeOffToPointManager.getInstance().taskExecute(message);
                 break;
@@ -322,6 +327,38 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended  {
                 LogUtil.log(TAG, "收到：框选变焦" + jsonString);
                 CameraManager.getInstance().camera_frame_zoom(message);
                 break;
+            case Constant.SPEAKER_AUDIO_PLAY_START:
+                LogUtil.log(TAG, "收到：喊话器-开始播放音频" + jsonString);
+                SpeakerProgressReporter.getInstance().startAudioReport(2);
+                SpeakerManager.getInstance().speakerAudioPlayStart(message);
+                break;
+            case Constant.SPEAKER_TTS_PLAY_START:
+                LogUtil.log(TAG, "收到：喊话器-开始播放TTS文本" + jsonString);
+                SpeakerProgressReporter.getInstance().startTTSReport(2);
+                SpeakerManager.getInstance().speakerTTSPlayStart(message,0);
+                break;
+            case Constant.SPEAKER_REPLAY:
+                LogUtil.log(TAG, "收到：喊话器-重新播放" + jsonString);
+                SpeakerManager.getInstance().speakerReply(message);
+                break;
+            case Constant.SPEAKER_PLAY_STOP:
+                LogUtil.log(TAG, "收到：喊话器-停止播放" + jsonString);
+
+                SpeakerManager.getInstance().speakerStop(message);
+                break;
+            case Constant.SPEAKER_PLAY_MODE_SET:
+                LogUtil.log(TAG, "收到：喊话器-设置播放模式" + jsonString);
+                SpeakerManager.getInstance().speakerPlayModeSet(message);
+                break;
+            case Constant.SPEAKER_PLAY_VOLUME_SET:
+                LogUtil.log(TAG, "收到：喊话器-设置音量" + jsonString);
+                SpeakerManager.getInstance().speakerPlayVolumeSet(message);
+                break;
+            case Constant.DRC_SPEAKER_TTS_SET:
+                LogUtil.log(TAG, "收到：喊话器-TTS喊话设置" + jsonString);
+                SpeakerManager.getInstance().speakerTTSPlayStart(message,1);
+                break;
+
 
 //            //获取控制权
 //            case 60007:
diff --git a/app/src/main/java/com/aros/apron/constant/Constant.java b/app/src/main/java/com/aros/apron/constant/Constant.java
index cf0dafe6..7ac770d6 100644
--- a/app/src/main/java/com/aros/apron/constant/Constant.java
+++ b/app/src/main/java/com/aros/apron/constant/Constant.java
@@ -287,5 +287,41 @@ public class Constant {
      */
 
 
+    /**
+     *  喊话器-开始播放音频
+     */
+    public static final String SPEAKER_AUDIO_PLAY_START="speaker_audio_play_start";
+
+    /**
+     *  喊话器-开始播放TTS文本
+     */
+    public static final String SPEAKER_TTS_PLAY_START="speaker_tts_play_start";
+
+    /**
+     *  喊话器-重新播放
+     */
+    public static final String SPEAKER_REPLAY="speaker_replay";
+
+    /**
+     *  喊话器-停止播放
+     */
+    public static final String SPEAKER_PLAY_STOP="speaker_play_stop";
+
+    /**
+     *  喊话器-设置播放模式
+     */
+    public static final String SPEAKER_PLAY_MODE_SET="speaker_play_mode_set";
+
+    /**
+     *  喊话器-设置音量
+     */
+    public static final String SPEAKER_PLAY_VOLUME_SET="speaker_play_volume_set";
+
+    /**
+     *  喊话器—TTS喊话设置
+     */
+    public static final String DRC_SPEAKER_TTS_SET="drc_speaker_tts_set";
+
+
 
 }
diff --git a/app/src/main/java/com/aros/apron/entity/MessageDown.java b/app/src/main/java/com/aros/apron/entity/MessageDown.java
deleted file mode 100644
index d06b90d9..00000000
--- a/app/src/main/java/com/aros/apron/entity/MessageDown.java
+++ /dev/null
@@ -1,635 +0,0 @@
-package com.aros.apron.entity;
-
-import java.util.List;
-
-public class MessageDown {
-
-    private String tid;
-    private String bid;
-    private long timestamp;
-    private String method;
-    private Data data;
-
-    public String getTid() {
-        return tid;
-    }
-
-    public void setTid(String tid) {
-        this.tid = tid;
-    }
-
-    public String getBid() {
-        return bid;
-    }
-
-    public void setBid(String bid) {
-        this.bid = bid;
-    }
-
-    public long getTimestamp() {
-        return timestamp;
-    }
-
-    public void setTimestamp(long timestamp) {
-        this.timestamp = timestamp;
-    }
-
-    public String getMethod() {
-        return method;
-    }
-
-    public void setMethod(String method) {
-        this.method = method;
-    }
-
-    public Data getData() {
-        return data;
-    }
-
-    public void setData(Data data) {
-        this.data = data;
-    }
-
-    public static class Data {
-        private int result;
-        private String url;
-        private int video_quality;
-        private int ideo_quality;
-        private AlternateLandPoint alternate_land_point;
-        private int rth_mode;
-        private int task_type;
-        private int wayline_precision_type;
-        private String video_type;
-        private long execute_time;
-        private int exit_wayline_when_rc_lost;
-        private File file;
-        private String flight_id;
-        private int flight_safety_advance_check;
-        private int out_of_control_action;
-        private boolean takeoffToPointTask;
-        private BreakPoint break_point;
-        private int camera_mode=0;//初始化为拍照
-        private String h;
-        private String seq;
-        private String w;
-        //摇杆和云台
-        private String x;
-        private String y;
-
-        private String camera_type;
-        private String payload_index;
-
-        private float height;
-        private double latitude;
-        private boolean locked;
-        private double longitude;
-        private int zoom_factor;
-        private boolean enable;
-        private int exposure_mode;
-        private int exposure_value;
-        private int focus_mode;
-        private int focus_value;
-
-        private double  commander_flight_height;
-        private int commander_mode_lost_action;
-        private String max_speed;
-        private int rc_lost_action;
-        private int rth_altitude;
-        private String security_takeoff_height;
-        private double target_height;
-        private double target_latitude;
-        private double target_longitude;
-        private String fly_to_id;
-        private List<Points> points;
-        private int reset_mode;
-
-        private double pitch_speed;
-
-        private double yaw_speed;
-
-        private float width;
-
-
-
-        public float getWidth() {
-            return width;
-        }
-
-        public void setWidth(float width) {
-            this.width = width;
-        }
-
-        public double getPitch_speed() {
-            return pitch_speed;
-        }
-
-        public void setPitch_speed(double pitch_speed) {
-            this.pitch_speed = pitch_speed;
-        }
-
-        public double getYaw_speed() {
-            return yaw_speed;
-        }
-
-        public void setYaw_speed(double yaw_speed) {
-            this.yaw_speed = yaw_speed;
-        }
-
-        public int getReset_mode() {
-            return reset_mode;
-        }
-
-        public void setReset_mode(int reset_mode) {
-            this.reset_mode = reset_mode;
-        }
-
-        public String getFly_to_id() {
-            return fly_to_id;
-        }
-
-        public void setFly_to_id(String fly_to_id) {
-            this.fly_to_id = fly_to_id;
-        }
-
-        public List<Points> getPoints() {
-            return points;
-        }
-
-        public void setPoints(List<Points> points) {
-            this.points = points;
-        }
-
-        public static class Points {
-            private int height;
-            private double latitude;
-            private double longitude;
-
-            public int getHeight() {
-                return height;
-            }
-
-            public void setHeight(int height) {
-                this.height = height;
-            }
-
-            public double getLatitude() {
-                return latitude;
-            }
-
-            public void setLatitude(double latitude) {
-                this.latitude = latitude;
-            }
-
-            public double getLongitude() {
-                return longitude;
-            }
-
-            public void setLongitude(double longitude) {
-                this.longitude = longitude;
-            }
-        }
-        public double getCommander_flight_height() {
-            return commander_flight_height;
-        }
-
-        public void setCommander_flight_height(int commander_flight_height) {
-            this.commander_flight_height = commander_flight_height;
-        }
-
-        public int getCommander_mode_lost_action() {
-            return commander_mode_lost_action;
-        }
-
-        public void setCommander_mode_lost_action(int commander_mode_lost_action) {
-            this.commander_mode_lost_action = commander_mode_lost_action;
-        }
-
-        public String getMax_speed() {
-            return max_speed;
-        }
-
-        public void setMax_speed(String max_speed) {
-            this.max_speed = max_speed;
-        }
-
-        public int getRc_lost_action() {
-            return rc_lost_action;
-        }
-
-        public void setRc_lost_action(int rc_lost_action) {
-            this.rc_lost_action = rc_lost_action;
-        }
-
-        public String getSecurity_takeoff_height() {
-            return security_takeoff_height;
-        }
-
-        public void setSecurity_takeoff_height(String security_takeoff_height) {
-            this.security_takeoff_height = security_takeoff_height;
-        }
-
-        public double getTarget_height() {
-            return target_height;
-        }
-
-        public void setTarget_height(int target_height) {
-            this.target_height = target_height;
-        }
-
-        public double getTarget_latitude() {
-            return target_latitude;
-        }
-
-        public void setTarget_latitude(double target_latitude) {
-            this.target_latitude = target_latitude;
-        }
-
-        public double getTarget_longitude() {
-            return target_longitude;
-        }
-
-        public void setTarget_longitude(double target_longitude) {
-            this.target_longitude = target_longitude;
-        }
-
-        public int getFocus_value() {
-            return focus_value;
-        }
-
-        public void setFocus_value(int focus_value) {
-            this.focus_value = focus_value;
-        }
-
-        public int getFocus_mode() {
-            return focus_mode;
-        }
-
-        public void setFocus_mode(int focus_mode) {
-            this.focus_mode = focus_mode;
-        }
-
-        public int getExposure_value() {
-            return exposure_value;
-        }
-
-        public void setExposure_value(int exposure_value) {
-            this.exposure_value = exposure_value;
-        }
-
-        public int getExposure_mode() {
-            return exposure_mode;
-        }
-
-        public void setExposure_mode(int exposure_mode) {
-            this.exposure_mode = exposure_mode;
-        }
-
-        public boolean isEnable() {
-            return enable;
-        }
-
-        public void setEnable(boolean enable) {
-            this.enable = enable;
-        }
-
-        public int getZoom_factor() {
-            return zoom_factor;
-        }
-
-        public void setZoom_factor(int zoom_factor) {
-            this.zoom_factor = zoom_factor;
-        }
-
-        public float getHeight() {
-            return height;
-        }
-
-        public void setHeight(int height) {
-            this.height = height;
-        }
-
-        public double getLatitude() {
-            return latitude;
-        }
-
-        public void setLatitude(double latitude) {
-            this.latitude = latitude;
-        }
-
-        public double getLongitude() {
-            return longitude;
-        }
-
-        public void setLongitude(double longitude) {
-            this.longitude = longitude;
-        }
-
-        public String getCamera_type() {
-            return camera_type;
-        }
-
-        public void setCamera_type(String camera_type) {
-            this.camera_type = camera_type;
-        }
-
-        public boolean isLocked() {
-            return locked;
-        }
-
-        public void setLocked(boolean locked) {
-            this.locked = locked;
-        }
-
-        public String getPayload_index() {
-            return payload_index;
-        }
-
-        public void setPayload_index(String payload_index) {
-            this.payload_index = payload_index;
-        }
-
-        public String getH() {
-            return h;
-        }
-
-        public void setH(String h) {
-            this.h = h;
-        }
-
-        public String getSeq() {
-            return seq;
-        }
-
-        public void setSeq(String seq) {
-            this.seq = seq;
-        }
-
-        public String getW() {
-            return w;
-        }
-
-        public void setW(String w) {
-            this.w = w;
-        }
-
-        public String getX() {
-            return x;
-        }
-
-        public void setX(String x) {
-            this.x = x;
-        }
-
-        public String getY() {
-            return y;
-        }
-
-        public void setY(String y) {
-            this.y = y;
-        }
-
-        public int getCamera_mode() {
-            return camera_mode;
-        }
-
-        public void setCamera_mode(int camera_mode) {
-            this.camera_mode = camera_mode;
-        }
-
-        public BreakPoint getBreak_point() {
-            return break_point;
-        }
-
-        public void setBreak_point(BreakPoint break_point) {
-            this.break_point = break_point;
-        }
-        public int getIdeo_quality() {
-            return ideo_quality;
-        }
-
-        public void setIdeo_quality(int ideo_quality) {
-            this.ideo_quality = ideo_quality;
-        }
-
-        public String getUrl() {
-            return url;
-        }
-
-        public void setUrl(String url) {
-            this.url = url;
-        }
-
-        public int getVideo_quality() {
-            return video_quality;
-        }
-
-        public void setVideo_quality(int video_quality) {
-            this.video_quality = video_quality;
-        }
-
-        public int getResult() {
-            return result;
-        }
-
-        public void setResult(int result) {
-            this.result = result;
-        }
-
-        public String getVideo_type() {
-            return video_type;
-        }
-
-        public void setVideo_type(String video_type) {
-            this.video_type = video_type;
-        }
-
-
-        public static class File {
-            private String fingerprint;
-            private String url;
-
-            public String getFingerprint() {
-                return fingerprint;
-            }
-
-            public void setFingerprint(String fingerprint) {
-                this.fingerprint = fingerprint;
-            }
-
-            public String getUrl() {
-                return url;
-            }
-
-            public void setUrl(String url) {
-                this.url = url;
-            }
-        }
-
-
-        public static class BreakPoint {
-            private int index;
-            private double progress;
-            private int state;
-            private int wayline_id;
-
-            public int getIndex() {
-                return index;
-            }
-
-            public void setIndex(int index) {
-                this.index = index;
-            }
-
-            public double getProgress() {
-                return progress;
-            }
-
-            public void setProgress(double progress) {
-                this.progress = progress;
-            }
-
-            public int getState() {
-                return state;
-            }
-
-            public void setState(int state) {
-                this.state = state;
-            }
-
-            public int getWayline_id() {
-                return wayline_id;
-            }
-
-            public void setWayline_id(int wayline_id) {
-                this.wayline_id = wayline_id;
-            }
-        }
-
-        public AlternateLandPoint getAlternate_land_point() {
-            return alternate_land_point;
-        }
-
-        public void setAlternate_land_point(AlternateLandPoint alternate_land_point) {
-            this.alternate_land_point = alternate_land_point;
-        }
-
-        public long getExecute_time() {
-            return execute_time;
-        }
-
-        public void setExecute_time(long execute_time) {
-            this.execute_time = execute_time;
-        }
-
-        public int getExit_wayline_when_rc_lost() {
-            return exit_wayline_when_rc_lost;
-        }
-
-        public void setExit_wayline_when_rc_lost(int exit_wayline_when_rc_lost) {
-            this.exit_wayline_when_rc_lost = exit_wayline_when_rc_lost;
-        }
-
-        public File getFile() {
-            return file;
-        }
-
-        public void setFile(File file) {
-            this.file = file;
-        }
-
-        public String getFlight_id() {
-            return flight_id;
-        }
-
-        public void setFlight_id(String flight_id) {
-            this.flight_id = flight_id;
-        }
-
-        public int getFlight_safety_advance_check() {
-            return flight_safety_advance_check;
-        }
-
-        public void setFlight_safety_advance_check(int flight_safety_advance_check) {
-            this.flight_safety_advance_check = flight_safety_advance_check;
-        }
-
-        public int getOut_of_control_action() {
-            return out_of_control_action;
-        }
-
-        public void setOut_of_control_action(int out_of_control_action) {
-            this.out_of_control_action = out_of_control_action;
-        }
-
-        public int getRth_altitude() {
-            return rth_altitude;
-        }
-
-        public void setRth_altitude(int rth_altitude) {
-            this.rth_altitude = rth_altitude;
-        }
-
-        public int getRth_mode() {
-            return rth_mode;
-        }
-
-        public void setRth_mode(int rth_mode) {
-            this.rth_mode = rth_mode;
-        }
-
-        public boolean isTakeoffToPointTask() {
-            return takeoffToPointTask;
-        }
-
-        public void setTakeoffToPointTask(boolean takeoffToPointTask) {
-            this.takeoffToPointTask = takeoffToPointTask;
-        }
-
-        public int getTask_type() {
-            return task_type;
-        }
-
-        public void setTask_type(int task_type) {
-            this.task_type = task_type;
-        }
-
-        public int getWayline_precision_type() {
-            return wayline_precision_type;
-        }
-
-        public void setWayline_precision_type(int wayline_precision_type) {
-            this.wayline_precision_type = wayline_precision_type;
-        }
-
-        public static class AlternateLandPoint {
-            private double latitude;
-            private double longitude;
-            private double safe_land_height;
-
-            public double getLatitude() {
-                return latitude;
-            }
-
-            public void setLatitude(double latitude) {
-                this.latitude = latitude;
-            }
-
-            public double getLongitude() {
-                return longitude;
-            }
-
-            public void setLongitude(double longitude) {
-                this.longitude = longitude;
-            }
-
-            public double getSafe_land_height() {
-                return safe_land_height;
-            }
-
-            public void setSafe_land_height(double safe_land_height) {
-                this.safe_land_height = safe_land_height;
-            }
-        }
-
-    }
-}
diff --git a/app/src/main/java/com/aros/apron/entity/Movement.java b/app/src/main/java/com/aros/apron/entity/Movement.java
index c96f83dd..699d184d 100644
--- a/app/src/main/java/com/aros/apron/entity/Movement.java
+++ b/app/src/main/java/com/aros/apron/entity/Movement.java
@@ -276,6 +276,9 @@ public class Movement {
     private String sdr_freq_band;
     private String freq_band_4g;
 
+    //航线上报状态
+    private int result=0;
+
 
     // ========== 一键起飞相关字段 ==========
     private boolean takeofftopointmission;
@@ -286,13 +289,93 @@ public class Movement {
     private double speed;  //全局速度
     private List<TakeoffToPointProgress.PlannedPathPoint> takeoff_planned_path_points; // 规划轨迹点
 
+    private double takeofftargetlatitude;
+    private double takeofftargetlongitude;
+    private double takeofftargetheight;
+
+
+
+
     // ========== 上报拍照进度 ==========(全景)
     private String photo_status;             // in_progress/ok/fail
     private int photo_current_step;                 // 3000/3002/3005
     private int photo_percent;               // 0-100
     private int photo_result;                // 0成功，非0错误
+    // ========== 喊话器 ==========(全景)
+    private String TTS_status;
+    private int speakerpercent;
+    private String step_key;
+    private String md5;
 
 
+    public int getSpeakerpercent() {
+        return speakerpercent;
+    }
+
+    public void setSpeakerpercent(int speakerpercent) {
+        this.speakerpercent = speakerpercent;
+    }
+
+    public int getResult() {
+        return result;
+    }
+
+    public void setResult(int result) {
+        this.result = result;
+    }
+
+    public double getTakeofftargetlatitude() {
+        return takeofftargetlatitude;
+    }
+
+    public void setTakeofftargetlatitude(double takeofftargetlatitude) {
+        this.takeofftargetlatitude = takeofftargetlatitude;
+    }
+
+    public double getTakeofftargetlongitude() {
+        return takeofftargetlongitude;
+    }
+
+    public void setTakeofftargetlongitude(double takeofftargetlongitude) {
+        this.takeofftargetlongitude = takeofftargetlongitude;
+    }
+
+    public double getTakeofftargetheight() {
+        return takeofftargetheight;
+    }
+
+    public void setTakeofftargetheight(double takeofftargetheight) {
+        this.takeofftargetheight = takeofftargetheight;
+    }
+
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
+
+
+
+    public String getTTS_status() {
+        return TTS_status;
+    }
+
+    public void setTTS_status(String TTS_status) {
+        this.TTS_status = TTS_status;
+    }
+
+
+
+    public String getStep_key() {
+        return step_key;
+    }
+
+    public void setStep_key(String step_key) {
+        this.step_key = step_key;
+    }
+
 
 
     public int getGPSSatelliteCount() {
@@ -411,7 +494,7 @@ public class Movement {
     }
 
     //用来判断是什么起飞type
-    private int flightmode=0; //0代表没有操作  1代表航线飞行 2代表指令飞行（一键和flyto）
+    private int flightmode=0; //0代表没有操作  1代表航线飞行 2一键代表指令飞行  3flyto（一键和flyto）
     private boolean takeofftopoint;
     private boolean opendrc=false; //true 是开启 false 是关闭
 
diff --git a/app/src/main/java/com/aros/apron/entity/TakeoffToPointProgress.java b/app/src/main/java/com/aros/apron/entity/TakeoffToPointProgress.java
index d6835dc3..f7765da1 100644
--- a/app/src/main/java/com/aros/apron/entity/TakeoffToPointProgress.java
+++ b/app/src/main/java/com/aros/apron/entity/TakeoffToPointProgress.java
@@ -134,15 +134,15 @@ public class TakeoffToPointProgress {
     }
 
     public static class PlannedPathPoint {
-        private Float height;
+        private Double height;
         private Double latitude;
         private Double longitude;
 
-        public Float getHeight() {
+        public Double getHeight() {
             return height;
         }
 
-        public void setHeight(Float height) {
+        public void setHeight(Double height) {
             this.height = height;
         }
 
diff --git a/app/src/main/java/com/aros/apron/manager/FlightManager.java b/app/src/main/java/com/aros/apron/manager/FlightManager.java
index f9bac9c3..ee185b71 100644
--- a/app/src/main/java/com/aros/apron/manager/FlightManager.java
+++ b/app/src/main/java/com/aros/apron/manager/FlightManager.java
@@ -812,6 +812,7 @@ public class FlightManager extends BaseManager {
             sendCloseCabinDoorMsg = true;
             DockCloseManager.getInstance().sendDockCloseMsg2Server();
             PerceptionManager.getInstance().setPerceptionEnable(true);
+            PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(true);
         }
     }
 
@@ -847,6 +848,7 @@ public class FlightManager extends BaseManager {
 //            DroneHelper.getInstance().setCameraFocusMode();
 //            isGimbalDownwards = true;
             PerceptionManager.getInstance().setPerceptionEnable(false);
+            PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
 //            if (Movement.getInstance().getIsRecording() == 1) {
 //                CameraManager.getInstance().stopRecordVideo(null);
 //            }
@@ -880,19 +882,20 @@ public class FlightManager extends BaseManager {
     }
 
 
-    private static final double FLYING_HEIGHT_THRESHOLD_MAX = 5.5;
+    private static final double FLYING_HEIGHT_THRESHOLD_MAX = 6;
     private static final double FLYING_HEIGHT_THRESHOLD_MAX_ALTERNATE = 10;
     private static final double FLYING_HEIGHT_THRESHOLD_MIN = -2;
     private static final double FLYING_HEIGHT_THRESHOLD_MIN_ALTERNATE = 2.0;
 
     private void startVisionLanding() {
+
         boolean isDebugMode = PreferenceUtils.getInstance().getIsDebugMode();
         boolean triggerToAlternatePoint = PreferenceUtils.getInstance().getTriggerToAlternatePoint();
         boolean needTriggerApronArucoLand = PreferenceUtils.getInstance().getNeedTriggerApronArucoLand();
         boolean needTriggerAlterArucoLand = PreferenceUtils.getInstance().getNeedTriggerAlterArucoLand();
         double thresholdMax = triggerToAlternatePoint ? FLYING_HEIGHT_THRESHOLD_MAX_ALTERNATE : FLYING_HEIGHT_THRESHOLD_MAX;
 
-        if (isFlying && Movement.getInstance().getElevation() < thresholdMax && !isSendDetect) {
+        if (isFlying && (Movement.getInstance().getElevation() < thresholdMax || Movement.getInstance().getUltrasonicHeight()<45)&& !isSendDetect) {
             double flyingHeight = Movement.getInstance().getElevation();
             double thresholdMin = triggerToAlternatePoint ? FLYING_HEIGHT_THRESHOLD_MIN_ALTERNATE : FLYING_HEIGHT_THRESHOLD_MIN;
 
diff --git a/app/src/main/java/com/aros/apron/manager/GimbalManager.java b/app/src/main/java/com/aros/apron/manager/GimbalManager.java
index 1bb9eab0..f1b5ead8 100644
--- a/app/src/main/java/com/aros/apron/manager/GimbalManager.java
+++ b/app/src/main/java/com/aros/apron/manager/GimbalManager.java
@@ -270,20 +270,48 @@ public class GimbalManager extends BaseManager {
             locationCoordinate3D.setLongitude(message.getData().getLongitude());
             locationCoordinate3D.setAltitude(Double.parseDouble(message.getData().getHeight() + ""));
             lookAtInfo.setLocation(locationCoordinate3D);
-            KeyManager.getInstance().performAction(KeyTools.createKey(FlightControllerKey.KeyLookAt), lookAtInfo, new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
-                        @Override
-                        public void onSuccess(EmptyMsg emptyMsg) {
-                            LogUtil.log(TAG,"看向目标点成功");
-                            sendMsg2Server(message);
-                        }
+            if(message.getData().isLocked()==true){
+                KeyManager.getInstance().setValue(KeyTools.createKey(GimbalKey.KeyGimbalMode), GimbalMode.YAW_FOLLOW, new CommonCallbacks.CompletionCallback() {
+                    @Override
+                    public void onSuccess() {
+                        //设置云台跟随
+                        KeyManager.getInstance().performAction(KeyTools.createKey(FlightControllerKey.KeyLookAt), lookAtInfo, new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
+                                    @Override
+                                    public void onSuccess(EmptyMsg emptyMsg) {
+                                        LogUtil.log(TAG,"看向目标点成功");
+                                        sendMsg2Server(message);
+                                    }
 
-                        @Override
-                        public void onFailure(@NonNull IDJIError error) {
-                            LogUtil.log(TAG,"看向目标点失败"+error);
-                            sendFailMsg2Server(message, "看向目标点失败:" + getIDJIErrorMsg(error));
-                        }
+                                    @Override
+                                    public void onFailure(@NonNull IDJIError error) {
+                                        LogUtil.log(TAG,"看向目标点失败"+error);
+                                        sendFailMsg2Server(message, "看向目标点失败:" + getIDJIErrorMsg(error));
+                                    }
+                                }
+                        );
                     }
-            );
+
+                    @Override
+                    public void onFailure(@NonNull IDJIError idjiError) {
+                        //设置云台跟随失败
+                    }
+                });
+            }else{
+                KeyManager.getInstance().performAction(KeyTools.createKey(FlightControllerKey.KeyLookAt), lookAtInfo, new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
+                            @Override
+                            public void onSuccess(EmptyMsg emptyMsg) {
+                                LogUtil.log(TAG,"看向目标点成功");
+                                sendMsg2Server(message);
+                            }
+
+                            @Override
+                            public void onFailure(@NonNull IDJIError error) {
+                                LogUtil.log(TAG,"看向目标点失败"+error);
+                                sendFailMsg2Server(message, "看向目标点失败:" + getIDJIErrorMsg(error));
+                            }
+                        }
+                );
+            }
         } else {
             LogUtil.log(TAG, "云台未连接");
         }
diff --git a/app/src/main/java/com/aros/apron/manager/MissionV3Manager.java b/app/src/main/java/com/aros/apron/manager/MissionV3Manager.java
index c29b741e..39cc5705 100644
--- a/app/src/main/java/com/aros/apron/manager/MissionV3Manager.java
+++ b/app/src/main/java/com/aros/apron/manager/MissionV3Manager.java
@@ -20,6 +20,7 @@ import com.aros.apron.entity.Movement;
 import com.aros.apron.tools.LogUtil;
 import com.aros.apron.tools.PreferenceUtils;
 import com.aros.apron.tools.RestartAPPTool;
+import com.aros.apron.tools.TakeoffProgressScheduler;
 import com.dji.wpmzsdk.common.data.KMZInfo;
 import com.dji.wpmzsdk.manager.WPMZManager;
 import com.google.gson.Gson;
@@ -30,6 +31,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
 
+import dji.sdk.keyvalue.key.CameraKey;
 import dji.sdk.keyvalue.key.FlightControllerKey;
 import dji.sdk.keyvalue.key.KeyTools;
 import dji.sdk.keyvalue.value.flightcontroller.RemoteControllerFlightMode;
@@ -103,6 +105,10 @@ public class MissionV3Manager extends BaseManager {
                                 sendFlightTaskProgress2Server();
                                 break;
                             case READY:
+                                if(Movement.getInstance().getFlightmode()==2){
+                                    Movement.getInstance().setTakeoff_status("task_ready");
+                                }
+
                                 if (PreferenceUtils.getInstance().getMissionType()==2
                                 ) {
                                     Movement.getInstance().setTask_status("paused");
@@ -145,6 +151,11 @@ public class MissionV3Manager extends BaseManager {
                                 break;
                             case ENTER_WAYLINE:
                                 enterWayLineTime = System.currentTimeMillis();
+                                if(Movement.getInstance().getFlightmode()==2){
+                                    Movement.getInstance().setTakeoff_status("wayline_progress");
+                                }
+
+
                                 if (PreferenceUtils.getInstance().getMissionType()==2
                                 ) {
                                     Movement.getInstance().setTask_status("paused");
@@ -187,6 +198,11 @@ public class MissionV3Manager extends BaseManager {
                                 sendFlightTaskProgress2Server();
                                 break;
                             case INTERRUPTED:
+
+                                if(Movement.getInstance().getFlightmode()==2){
+                                    Movement.getInstance().setTakeoff_status("wayline_cancel");
+                                }
+
                                 Movement.getInstance().setVirtualStickQuitMission(false);
                                 sendEvent2Server("任务状态:航线任务执行中断", 1);
                                 Movement.getInstance().setTask_status("paused");
@@ -223,6 +239,17 @@ public class MissionV3Manager extends BaseManager {
                                 }else{
 
                                 }
+                                if(Movement.getInstance().getFlightmode()==2){
+                                    Movement.getInstance().setTakeoff_status("task_finish");
+                                    Movement.getInstance().setTakeoff_status("wayline_ok");
+
+                                    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
+                                        @Override
+                                        public void run() {
+                                            TakeoffProgressScheduler.getInstance().stopReporting();
+                                        }
+                                    }, 1000); // 1000ms = 1秒
+                                }
 
                                 finishWayLineTime = System.currentTimeMillis();
                                 mainHandler.postDelayed(new Runnable() {
@@ -348,6 +375,7 @@ public class MissionV3Manager extends BaseManager {
             }
             //2.关闭避障
             PerceptionManager.getInstance().setPerceptionEnable(false);
+            PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
             //3.清空sd卡
             CameraManager.getInstance().formatStorage(null);
             //4.返航或降落状态无法执行航线
@@ -565,6 +593,7 @@ public class MissionV3Manager extends BaseManager {
                 public void onSuccess() {
                     //	"2": "起飞准备完毕",
                     Movement.getInstance().setMode_code(2);
+                    LogUtil.log(TAG,"航线上传成功,准备执行任务");
                     sendEvent2Server("航线上传成功,准备执行任务", 1);
                     isPushKMZSuccess = true;
                     mainHandler.postDelayed(new Runnable() {
@@ -578,6 +607,9 @@ public class MissionV3Manager extends BaseManager {
                             Movement.getInstance().setMode_code(4);
                             sendFlightTaskProgress2Server();
                             Movement.getInstance().setTask_current_step(22);
+                            //关闭避障
+                            PerceptionManager.getInstance().setPerceptionEnable(false);
+                            PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
 
                             startMission(message);
                             pushKMZFileTimes = 0;
diff --git a/app/src/main/java/com/aros/apron/manager/PerceptionManager.java b/app/src/main/java/com/aros/apron/manager/PerceptionManager.java
index 68a899a6..c64fd789 100644
--- a/app/src/main/java/com/aros/apron/manager/PerceptionManager.java
+++ b/app/src/main/java/com/aros/apron/manager/PerceptionManager.java
@@ -20,6 +20,7 @@ import dji.v5.manager.KeyManager;
 import dji.v5.manager.aircraft.perception.data.ObstacleAvoidanceType;
 import dji.v5.manager.aircraft.perception.data.PerceptionDirection;
 import dji.v5.manager.interfaces.IPerceptionManager;
+import dji.v5.manager.interfaces.IRadarManager;
 
 public class PerceptionManager extends BaseManager {
 
@@ -39,14 +40,18 @@ public class PerceptionManager extends BaseManager {
     private boolean closePerceptionSuccess;
 
     public void setPerceptionEnable(boolean perceptionEnable) {
-
         if (PreferenceUtils.getInstance().getCloseObsEnable() && perceptionEnable) {
             LogUtil.log(TAG, "全局避障关闭,不开启避障");
             return;
         }
+
         Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
         if (isConnect != null && isConnect) {
+
             IPerceptionManager perceptionManager = dji.v5.manager.aircraft.perception.PerceptionManager.getInstance();
+
+
+            //关闭避障
             perceptionManager.setObstacleAvoidanceType(perceptionEnable ? ObstacleAvoidanceType.BRAKE : ObstacleAvoidanceType.CLOSE, new CommonCallbacks.CompletionCallback() {
                 @Override
                 public void onSuccess() {
@@ -71,6 +76,7 @@ public class PerceptionManager extends BaseManager {
                                     public void run() {
                                         closePerceptionTimes++;
                                         setPerceptionEnable(false);
+                                        setObstacleAvoidanceHorizontalEnabled(false);
                                     }
                                 }, 2000);
                             } else {
@@ -83,8 +89,9 @@ public class PerceptionManager extends BaseManager {
         }
     }
 
+
     //开启水平避障
-    public void setObstacleAvoidanceHorizontalEnabled() {
+    public void setObstacleAvoidanceHorizontalEnabled(Boolean perceptionEnable) {
         if (PreferenceUtils.getInstance().getCloseObsEnable()) {
             LogUtil.log(TAG, "全局避障关闭,不开启避障");
             return;
@@ -92,7 +99,7 @@ public class PerceptionManager extends BaseManager {
         Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
         if (isConnect != null && isConnect) {
             IPerceptionManager perceptionManager = dji.v5.manager.aircraft.perception.PerceptionManager.getInstance();
-            perceptionManager.setObstacleAvoidanceEnabled(true, PerceptionDirection.HORIZONTAL, new CommonCallbacks.CompletionCallback() {
+            perceptionManager.setObstacleAvoidanceEnabled(perceptionEnable ? true:false, PerceptionDirection.HORIZONTAL, new CommonCallbacks.CompletionCallback() {
                 @Override
                 public void onSuccess() {
                     LogUtil.log(TAG, "开启水平避障");
diff --git a/app/src/main/java/com/aros/apron/manager/StickManager.java b/app/src/main/java/com/aros/apron/manager/StickManager.java
index 36a1c92a..1b78da61 100644
--- a/app/src/main/java/com/aros/apron/manager/StickManager.java
+++ b/app/src/main/java/com/aros/apron/manager/StickManager.java
@@ -71,11 +71,11 @@ public class StickManager extends BaseManager {
 
     public void disableVirtualStick1() {
         VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(false);
-        VirtualStickManager.getInstance().enableVirtualStick(new CommonCallbacks.CompletionCallback() {
+        VirtualStickManager.getInstance().disableVirtualStick(new CommonCallbacks.CompletionCallback() {
             @Override
             public void onSuccess() {
                 LogUtil.log(TAG, "控制取消成功");
-                VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(true);
+                VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(false);
 
             }
             @Override
diff --git a/app/src/main/java/com/aros/apron/manager/StreamManager.java b/app/src/main/java/com/aros/apron/manager/StreamManager.java
index 880497d1..dbd978d7 100644
--- a/app/src/main/java/com/aros/apron/manager/StreamManager.java
+++ b/app/src/main/java/com/aros/apron/manager/StreamManager.java
@@ -150,11 +150,9 @@ sendMsg2Server(message);
 
 
     public void startLiveWithRTSP() {
-
         Boolean isAircraftConnected = KeyManager.getInstance().getValue(DJIKey.create(ProductKey.KeyConnection));
         if (isAircraftConnected == null || !isAircraftConnected) {
             LogUtil.log(TAG, "飞行器未连接");
-
         } else {
             if (PreferenceUtils.getInstance().getRtspUserName()!=null&&
                     PreferenceUtils.getInstance().getRtspPort()!=null&&
@@ -164,11 +162,15 @@ sendMsg2Server(message);
                 LogUtil.log(TAG, "自定义RTSP推流:" + PreferenceUtils.getInstance().getRtspUserName()
                         +"--"+PreferenceUtils.getInstance().getRtspPort()+"--"+PreferenceUtils.getInstance().getRtspPassWord());
                 LiveStreamSettings.Builder streamSettingBuilder = new LiveStreamSettings.Builder();
+
                 LiveStreamSettings streamSettings = streamSettingBuilder.setLiveStreamType(LiveStreamType.RTSP)
                         .setRtspSettings(new RtspSettings.Builder().setPassWord(PreferenceUtils.getInstance().getRtspPassWord()).
                                 setPort(Integer.parseInt(PreferenceUtils.getInstance().getRtspPort())).
                                 setUserName(PreferenceUtils.getInstance().getRtspUserName()).build()).build();
 
+
+
+
                 liveStreamManager.setLiveStreamSettings(streamSettings);
                 CameraType value = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.KeyCameraType, ComponentIndexType.PORT_1));
 //                if (value != null && (value == CameraType.ZENMUSE_H20T ||
diff --git a/app/src/main/java/com/aros/apron/manager/TakeOffToPointManager.java b/app/src/main/java/com/aros/apron/manager/TakeOffToPointManager.java
index da2a2494..27a43f75 100644
--- a/app/src/main/java/com/aros/apron/manager/TakeOffToPointManager.java
+++ b/app/src/main/java/com/aros/apron/manager/TakeOffToPointManager.java
@@ -101,7 +101,6 @@ public class TakeOffToPointManager extends BaseManager {
         });
     }
 
-
     /**
      * 1.校验飞机状态
      */
@@ -114,6 +113,7 @@ public class TakeOffToPointManager extends BaseManager {
             }
             //2.关闭避障
             PerceptionManager.getInstance().setPerceptionEnable(false);
+            PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
             //3.清空sd卡
             CameraManager.getInstance().formatStorage(null);
             //4.返航或降落状态无法执行航线
@@ -230,6 +230,11 @@ public class TakeOffToPointManager extends BaseManager {
      */
     public void toGenerateKMZFile(MessageDown message) {
         Movement.getInstance().setTask_current_step(16);
+        //目标点的经纬度
+        Movement.getInstance().setTakeofftargetlatitude(message.getData().getTarget_latitude());
+        Movement.getInstance().setTakeofftargetlongitude(message.getData().getTarget_longitude());
+        Movement.getInstance().setTakeofftargetheight(message.getData().getTarget_height());
+
         MissionDataBean data = new Gson().fromJson(new Gson().toJson(message.getData()), MissionDataBean.class);
         Boolean generateKmz=Generakmztools.getInstance().generateKmz(data);
         LogUtil.log(TAG,"生成的boole"+generateKmz);
@@ -273,7 +278,6 @@ public class TakeOffToPointManager extends BaseManager {
                         List<WaylineExecuteWaypoint> waypoints = waylines.get(0).getWaypoints();
                         if (waypoints != null && waypoints.size() > 0) {
                             //将航点列表保存在本地
-
                                 Movement.getInstance().setSpeed(configParseInfo.getGlobalTransitionalSpeed());
 
                                 CurrentWayline.getInstance().setWaypoints(waypoints);
@@ -299,8 +303,6 @@ public class TakeOffToPointManager extends BaseManager {
                 public void onProgressUpdate(Double progress) {
                     sendEvent2Server("航线上传进度:" + progress, 1);
                     Movement.getInstance().setTask_current_step(17);
-
-
                 }
 
                 @Override
@@ -316,7 +318,6 @@ public class TakeOffToPointManager extends BaseManager {
                             /**
                              * 7.开始任务
                              */
-
                             //自主起飞
                             Movement.getInstance().setMode_code(4);
                             sendFlightTaskProgress2Server();
@@ -348,7 +349,6 @@ public class TakeOffToPointManager extends BaseManager {
                             //待机
                             Movement.getInstance().setMode_code(0);
                             sendFlightTaskProgress2Server();
-
                             TaskFailManager.getInstance().sendTaskFailMsg2Server(-1);
                         }
                     } else {
@@ -388,6 +388,7 @@ public class TakeOffToPointManager extends BaseManager {
                     sendEvent2Server("任务开始执行", 1);
                     Movement.getInstance().setTask_current_step(23);
                     sendFlightTaskProgress2Server();
+                    Movement.getInstance().setTakeoff_result(0);
                 }
                 @Override
                 public void onFailure(@NonNull IDJIError error) {
@@ -406,6 +407,8 @@ public class TakeOffToPointManager extends BaseManager {
                                 }, 2000);
                             } else {
                                 if (!Movement.getInstance().isPlaneWing()) {
+                                    Movement.getInstance().setTakeoff_status("wayline_failed");
+                                    Movement.getInstance().setTakeoff_result(1);
                                     //待机
                                     Movement.getInstance().setMode_code(0);
                                     sendFlightTaskProgress2Server();
diff --git a/app/src/main/java/com/aros/apron/tools/ApronArucoDetect.java b/app/src/main/java/com/aros/apron/tools/ApronArucoDetect.java
index daea2711..3bacbc8f 100644
--- a/app/src/main/java/com/aros/apron/tools/ApronArucoDetect.java
+++ b/app/src/main/java/com/aros/apron/tools/ApronArucoDetect.java
@@ -6,6 +6,8 @@ import android.os.Handler;
 import android.os.Looper;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+
 import com.aros.apron.constant.AMSConfig;
 import com.aros.apron.entity.ArucoMarker;
 import com.aros.apron.entity.ArucoMarkerDimensions;
@@ -39,6 +41,13 @@ import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
+import dji.sdk.keyvalue.key.FlightControllerKey;
+import dji.sdk.keyvalue.key.KeyTools;
+import dji.sdk.keyvalue.value.common.EmptyMsg;
+import dji.v5.common.callback.CommonCallbacks;
+import dji.v5.common.error.IDJIError;
+import dji.v5.manager.KeyManager;
+
 public class ApronArucoDetect {
 
     //是否触发识别(如果丢失图传，此值为false)
@@ -68,10 +77,10 @@ public class ApronArucoDetect {
 
     // 【关键修改1】M400下视镜头右后方补偿量（像素，正值向右补偿）
     // 如果还往左偏就调大，往右偏就调小，建议范围 30-80
-    private static final double LENS_OFFSET_X = 15.0;
-    private static final double LENS_OFFSET_Y = 20.0;
+    private static  double LENS_OFFSET_X = 0;
+    private static  double LENS_OFFSET_Y = 0;
     // 【关键修改2】放宽居中判定阈值（原40，补偿后改为60更合理）
-    private static final int CENTER_ERR_MAX = 40;    // 居中误差（px）
+    private static final int CENTER_ERR_MAX = 25;    // 居中误差（px）
 
     public PIDControl pidControlX = null;
     public PIDControl pidControlY = null;
@@ -98,7 +107,7 @@ public class ApronArucoDetect {
     public boolean isDoublePayload() {
         return isDoublePayload;
     }
-
+    private Handler riseHandler = new Handler(Looper.getMainLooper());
     public void setDoublePayload(boolean doublePayload) {
         isDoublePayload = doublePayload;
     }
@@ -115,6 +124,7 @@ public class ApronArucoDetect {
             INSTANCE.init();
         }
     }
+    private int trycount=0;
 
     public static ApronArucoDetect getInstance() {
         return OpenCVHelperHolder.INSTANCE;
@@ -123,14 +133,13 @@ public class ApronArucoDetect {
     private static final float SLOW_LAND_SPEED = -0.3f;  // 远场慢降
     private static final float SLOW_SUPER_SPEED = -0.1f;  //  超近慢降
 
-    private static final int PIXEL_TRIGGER = 400;   // 近场像素阈值
+    private static final int PIXEL_TRIGGER = 360;   // 近场像素阈值
 
     public void init() {
-        pidControlX = new PIDControl(0.6f, 0.015f, 0.12f, 0.05f, 2.0f, 0.05f);
-        pidControlY = new PIDControl(0.6f, 0.015f, 0.12f, 0.05f, 2.0f, 0.05f);
+        pidControlX = new PIDControl(0.6f, 0.08f, 0.18f, 0.05f, 2.5f, 0.04f);
+        pidControlY = new PIDControl(0.6f, 0.08f, 0.18f, 0.05f, 2.5f, 0.04f);
         pidControlX.reset();
         pidControlY.reset();
-
     }
 
 
@@ -142,7 +151,7 @@ public class ApronArucoDetect {
         Movement.getInstance().setVirtualStickEnableReason(2);
         //保证一帧进入同时 保证只有一次速降
         if (isStartAruco || startFastStick) {
-            // LogUtil.log(TAG, "过滤:" + isStartAruco + startFastStick);
+             LogUtil.log(TAG, "过滤:" + isStartAruco + startFastStick);
             if (!isStartAruco && startFastStick) {
                 checkThrowingErrorsTimes++;
             }
@@ -150,11 +159,31 @@ public class ApronArucoDetect {
         }
 
         isStartAruco = true;
+
         /* 如果上一帧任务还没跑完，直接 cancel */
         if (lastFuture != null && !lastFuture.isDone()) {
             LogUtil.log(TAG, "break---");
             lastFuture.cancel(true);
         }
+        // 根据超声波高度分段固定偏移（避免 pixelWidth 跳变导致抖动）
+        int ultHeight = Movement.getInstance().getUltrasonicHeight(); // dm
+        if (ultHeight >= 30) {
+            LENS_OFFSET_X = 0;
+            LENS_OFFSET_Y = 0;
+        } else if (ultHeight >= 20) {
+            LENS_OFFSET_X = 0;
+            LENS_OFFSET_Y = 0;
+        } else if (ultHeight >= 10) {
+            LENS_OFFSET_X = 20;
+            LENS_OFFSET_Y = 10;
+        } else if (ultHeight >= 5) {
+            LENS_OFFSET_X = 30;
+            LENS_OFFSET_Y = 20;
+        } else {
+            LENS_OFFSET_X = 50;  // 建议从 60 开始试，80 可能太大
+            LENS_OFFSET_Y = 25;
+        }
+
 
 
         //LogUtil.log(TAG, "执行了");
@@ -197,6 +226,7 @@ public class ApronArucoDetect {
 
                     boolean marker6Found = false;
                     if (!ids.empty()) {
+                        trycount=0;
                         arucoNotFoundTag = false;
                         int[] idArray = ids.toArray();
                         int ultrasonicHeight = Movement.getInstance().getUltrasonicHeight();
@@ -216,26 +246,36 @@ public class ApronArucoDetect {
                             double pixelWidth = calculateDistance(points[0], points[1]);
 
                             // 【关键修改3】降落判断加上镜头偏移补偿（向右补偿）
-                            double centerX = (points[0].x + points[1].x + points[2].x + points[3].x) / 4.0;
-                            double errX = Math.abs(centerX - rgbMat.width() / 2.0 + LENS_OFFSET_X);
+                            double centerX = (points[0].x + points[1].x + points[2].x + points[3].x) / 4.0 +LENS_OFFSET_X;
+                            double errX = Math.abs(centerX - rgbMat.width() / 2.0 );
                             // 修改为（向前补偿）：
-                            double centerY = (points[0].y + points[1].y + points[2].y + points[3].y) / 4.0;
-                            double errY = Math.abs(centerY - rgbMat.height() / 2.0 - LENS_OFFSET_Y); ;
+                            double centerY = (points[0].y + points[1].y + points[2].y + points[3].y) / 4.0 +LENS_OFFSET_Y;
+                            double errY = Math.abs(centerY - rgbMat.height() / 2.0 ); ;
 
                             LogUtil.log(TAG, "像素" + (int) pixelWidth +
                                     " errX=" + (int) errX + " errY=" + (int) errY + " (含偏移" + LENS_OFFSET_X + ")");
 
-                            /* 近场 + 对准 + 像素够 → 立即速降 */
+                            /* 近场 + 对准 + 像素够 → 延迟0.5s后速降 */
                             if (!startFastStick &&
                                     pixelWidth >= PIXEL_TRIGGER &&
-//                                    flyingHeight <= 1 &&
+//        flyingHeight <= 1 &&
                                     ultrasonicHeight <= 4 &&
                                     errX < CENTER_ERR_MAX &&
                                     errY < CENTER_ERR_MAX) {
-                                startFastStick = true;
-                                handler.post(runnable);
-                                LogUtil.log(TAG, "6号居中+近场触发速降 pixel=" + (int) pixelWidth +
+
+                                startFastStick = true;  // 先标记，防止重复触发
+                                LogUtil.log(TAG, "6号居中+近场满足条件，0.5s后触发速降 pixel=" + (int) pixelWidth +
                                         " errX=" + (int) errX + " errY=" + (int) errY);
+
+                                // 延迟500ms执行速降
+                                handler.postDelayed(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        handler.post(runnable);  // 启动速降循环
+                                        LogUtil.log(TAG, "0.5s延迟结束，开始速降");
+                                    }
+                                }, 500);
+
                                 return;
                             }
                         }
@@ -253,9 +293,9 @@ public class ApronArucoDetect {
                         endTime = System.currentTimeMillis();
                         long lostDuration = endTime - startTime;
                         //1s到8s内
-                        if (lostDuration > 700 && lostDuration <= 8000) {
+                        if (lostDuration > 1200 && lostDuration <= 8000) {
                             if (Movement.getInstance().getUltrasonicHeight()<=30) {
-                                DroneHelper.getInstance().moveVxVyYawrateHeight(0f, 0f, 0f, 0.3f);
+                                DroneHelper.getInstance().moveVxVyYawrateHeight(0f, 0f, 0f, 0.8f);
                                 if (dropTimes > Integer.parseInt(AMSConfig.getInstance().getAlternateLandingTimes())) {
                                     LogUtil.log(TAG, "超过复降限制,去备降点");
                                     AlternateLandingManager.getInstance().startTaskProcess(null);
@@ -394,18 +434,28 @@ public class ApronArucoDetect {
         }
 
         /* 2. 中心 + 误差（带镜头偏移补偿） */
-        double cx = (pts[0].x + pts[1].x + pts[2].x + pts[3].x) / 4.0;
-        double cy = (pts[0].y + pts[1].y + pts[2].y + pts[3].y) / 4.0;
+        double cx = (pts[0].x + pts[1].x + pts[2].x + pts[3].x) / 4.0 +LENS_OFFSET_X;
+        double cy = (pts[0].y + pts[1].y + pts[2].y + pts[3].y) / 4.0 +LENS_OFFSET_Y;
         Point screenCenter = new Point(imageWidth / 2.0, imageHeight / 2.0);
 
-        double errX = (cx - screenCenter.x) + LENS_OFFSET_X;  // 向右补偿
-        double errY = (cy - screenCenter.y) - LENS_OFFSET_Y;  // Y方向不变
+        double errX = (cx - screenCenter.x);
+        double errY = (cy - screenCenter.y);
 
         /* 3. PID 微调水平 */
         pidControlX.setInputFilterAll((float) (errX / 700.0));
-        pidControlY.setInputFilterAll((float) (-errY/ 700.0));
-        float vx = (float) Math.max(-0.25, Math.min(0.25, pidControlX.get_pid()));
-        float vy = (float) Math.max(-0.25, Math.min(0.25, pidControlY.get_pid()));
+        pidControlY.setInputFilterAll((float) (-errY / 700.0));
+
+
+        float rawVx = pidControlX.get_pid();
+        float rawVy = pidControlY.get_pid();
+
+
+//        if (Math.abs(rawVx) < 0.005f) rawVx = 0.0f;
+//        if (Math.abs(rawVy) < 0.005f) rawVy = 0.0f;
+
+
+        float vx = (float) Math.max(-0.25, Math.min(0.25, rawVx));
+        float vy = (float) Math.max(-0.25, Math.min(0.25, rawVy));
 
         /* 4. 远场慢降：像素 < 1500 且 > 2 m */
         double pixelWidth = Math.sqrt(Math.pow(pts[1].x - pts[0].x, 2) +
@@ -467,7 +517,7 @@ public class ApronArucoDetect {
         @Override
         public void run() {
             performOperation();
-            if (handlerCallbackCount < 20) {
+            if (handlerCallbackCount < 25) {
                 handler.postDelayed(this, 50); // 每 50 毫秒执行一次，1 秒内执行 20 次
             } else {
                 performNextStep();
@@ -485,9 +535,18 @@ public class ApronArucoDetect {
         canLanding = true;
         handlerCallbackCount = 0;
         dropTimes = 0;//手动测试避免多次累加后直接飞往备降点
-        LogUtil.log(TAG, "下拉完成：触发下一步自动降落");
+//        KeyManager.getInstance().performAction(KeyTools.createKey(FlightControllerKey.KeyStartAutoLanding), new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
+//            @Override
+//            public void onSuccess(EmptyMsg emptyMsg) {
+//                LogUtil.log(TAG, "下拉完成：触发下一步自动降落");
+//            }
+//
+//            @Override
+//            public void onFailure(@NonNull IDJIError idjiError) {
+//                LogUtil.log(TAG, "下拉完成：触发下一步自动降落失败");
+//            }
+//        });
         handler.removeCallbacks(runnable); // 防止重复执行
-
     }
 
 
diff --git a/app/src/main/java/com/aros/apron/tools/DroneHelper.java b/app/src/main/java/com/aros/apron/tools/DroneHelper.java
index 3435967b..b2aa70e0 100644
--- a/app/src/main/java/com/aros/apron/tools/DroneHelper.java
+++ b/app/src/main/java/com/aros/apron/tools/DroneHelper.java
@@ -192,7 +192,7 @@ public class DroneHelper {
         virtualStickFlightControlParam.setRollPitchControlMode(RollPitchControlMode.VELOCITY);
         virtualStickFlightControlParam.setYawControlMode(YawControlMode.ANGULAR_VELOCITY);
         virtualStickFlightControlParam.setRollPitchCoordinateSystem(FlightCoordinateSystem.BODY);
-        virtualStickFlightControlParam.setPitch(mPitch);//左右
+        virtualStickFlightControlParam.setPitch(mPitch);
         virtualStickFlightControlParam.setRoll(mRoll);//前后
         virtualStickFlightControlParam.setYaw(mYaw);
         virtualStickFlightControlParam.setVerticalThrottle(mThrottle);//上下
diff --git a/app/src/main/java/com/aros/apron/tools/PIDControl.java b/app/src/main/java/com/aros/apron/tools/PIDControl.java
index 6e1bd68d..07ce77f1 100644
--- a/app/src/main/java/com/aros/apron/tools/PIDControl.java
+++ b/app/src/main/java/com/aros/apron/tools/PIDControl.java
@@ -35,6 +35,86 @@ public class PIDControl {
         this.mResetFilter = true;
     }
 
+    public float getiMax() {
+        return iMax;
+    }
+
+    public void setiMax(float iMax) {
+        this.iMax = iMax;
+    }
+
+    public float getmFF() {
+        return mFF;
+    }
+
+    public void setmFF(float mFF) {
+        this.mFF = mFF;
+    }
+
+    public float getmFoltHz() {
+        return mFoltHz;
+    }
+
+    public void setmFoltHz(float mFoltHz) {
+        this.mFoltHz = mFoltHz;
+    }
+
+    public float getmKd() {
+        return mKd;
+    }
+
+    public void setmKd(float mKd) {
+        this.mKd = mKd;
+    }
+
+    public float getmKi() {
+        return mKi;
+    }
+
+    public void setmKi(float mKi) {
+        this.mKi = mKi;
+    }
+
+    public float getmKp() {
+        return mKp;
+    }
+
+    public void setmKp(float mKp) {
+        this.mKp = mKp;
+    }
+
+    public boolean ismResetFilter() {
+        return mResetFilter;
+    }
+
+    public void setmResetFilter(boolean mResetFilter) {
+        this.mResetFilter = mResetFilter;
+    }
+
+    public float getmIntegrator() {
+        return mIntegrator;
+    }
+
+    public void setmIntegrator(float mIntegrator) {
+        this.mIntegrator = mIntegrator;
+    }
+
+    public float getmInput() {
+        return mInput;
+    }
+
+    public void setmInput(float mInput) {
+        this.mInput = mInput;
+    }
+
+    public float getmDerivative() {
+        return mDerivative;
+    }
+
+    public void setmDerivative(float mDerivative) {
+        this.mDerivative = mDerivative;
+    }
+
     private void filtHz(float hz) {
         float abs = Math.abs(hz);
         this.mFoltHz = abs;
diff --git a/app/src/main/java/com/aros/apron/tools/Utils.java b/app/src/main/java/com/aros/apron/tools/Utils.java
deleted file mode 100644
index a40dd5f2..00000000
--- a/app/src/main/java/com/aros/apron/tools/Utils.java
+++ /dev/null
@@ -1,123 +0,0 @@
-
-package com.aros.apron.tools;
-
-import android.content.Context;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.google.gson.Gson;
-
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.util.Locale;
-
-import dji.v5.common.error.IDJIError;
-
-public class Utils {
-    public static void printJson(String tag, String json) {
-        if (json == null || json.length() == 0) {
-            Log.e(tag, "JSON is empty");
-            return;
-        }
-
-        int maxLogSize = 4000;
-        for (int i = 0; i <= json.length() / maxLogSize; i++) {
-            int start = i * maxLogSize;
-            int end = (i + 1) * maxLogSize;
-            if (end >= json.length()) {
-                end = json.length();
-            }
-            Log.e(tag, json.substring(start, end));
-        }
-    }
-    /**
-     * //修改变焦数据为从前端拿2-200自己计算然后放入官方的sdk
-     *
-     * @param smallZoomFromWeb
-     * @return
-     */
-    public static int getbigZoomValue(String smallZoomFromWeb) {
-        int zoomLength = Integer.parseInt(smallZoomFromWeb);
-        int bigZoom = (47549 - 317) / 199 * (zoomLength - 2) + 317;
-        return bigZoom;
-    }
-
-    public static String sHA1(Context context){
-        try {
-            PackageInfo info = null;
-            try {
-                info = context.getPackageManager().getPackageInfo(
-                        context.getPackageName(), PackageManager.GET_SIGNATURES);
-            } catch (PackageManager.NameNotFoundException e) {
-                throw new RuntimeException(e);
-            }
-            byte[] cert = info.signatures[0].toByteArray();
-            MessageDigest md = MessageDigest.getInstance("SHA1");
-            byte[] publicKey = md.digest(cert);
-            StringBuffer hexString = new StringBuffer();
-            for (int i = 0; i < publicKey.length; i++) {
-                String appendString = Integer.toHexString(0xFF & publicKey[i])
-                        .toUpperCase(Locale.US);
-                if (appendString.length() == 1)
-                    hexString.append("0");
-                hexString.append(appendString);
-                hexString.append(":");
-            }
-            String result = hexString.toString();
-            return result.substring(0, result.length()-1);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    public static byte[] getByte(String str){
-        try {
-            byte[] bytes = str.getBytes("UTF-8");
-            return bytes;
-            // 使用bytes
-        } catch (UnsupportedEncodingException e) {
-            // 处理异常，比如使用默认字符集
-            byte[] bytes = str.getBytes();
-            return null;
-        }
-    }
-
-    public static double parseLatLon(String latLonStr) {
-        // 检查输入字符串是否为空或无效
-        if (latLonStr == null || latLonStr.isEmpty()) {
-            throw new IllegalArgumentException("Input string is null or empty");
-        }
-
-        // 获取最后一个字符，即方向标识符
-        char direction = latLonStr.charAt(latLonStr.length() - 1);
-
-        // 检查方向标识符是否有效
-        if (direction != 'N' && direction != 'S' && direction != 'E' && direction != 'W') {
-return Double.parseDouble(latLonStr);        }
-
-        // 提取数字部分
-        String numberPart = latLonStr.substring(0, latLonStr.length() - 1);
-
-        // 将数字部分转换为Double
-        double number = Double.parseDouble(numberPart);
-
-        // 根据方向标识符调整数值
-        if (direction == 'S' || direction == 'W') {
-            number = -number;
-        }
-
-        return number;
-    }
-
-    public static String getIDJIErrorMsg(IDJIError idjiError){
-        if (TextUtils.isEmpty(idjiError.description())){
-            return new Gson().toJson(idjiError);
-        }else{
-            return idjiError.description();
-        }
-    }
-
-}
diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml
index 404c9b72..9272457a 100644
--- a/app/src/main/res/layout-land/activity_main.xml
+++ b/app/src/main/res/layout-land/activity_main.xml
@@ -299,13 +299,25 @@
             tools:ignore="MissingConstraints">
             <Button
                 android:id="@+id/btn_test"
-                android:text="旋转"
+                android:text="向前"
                 android:layout_width="100dp"
                 android:layout_height="100dp"
                 />
             <Button
                 android:id="@+id/btn_test1"
-                android:text="停转"
+                android:text="向后"
+                android:layout_width="100dp"
+                android:layout_height="100dp"
+                />
+            <Button
+                android:id="@+id/btn_test2"
+                android:text="向左"
+                android:layout_width="100dp"
+                android:layout_height="100dp"
+                />
+            <Button
+                android:id="@+id/btn_test3"
+                android:text="向右"
                 android:layout_width="100dp"
                 android:layout_height="100dp"
                 />
