This commit is contained in:
cxf 2026-04-03 20:41:05 +08:00
parent 34c3d8a07f
commit e450e975e2
98 changed files with 4740 additions and 1502 deletions

View File

@ -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 ¨ ÃÖ<C383>˜Á3
VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt  …Àý”Õ3 ¨ ÃÖ<C383>˜Á3

View File

@ -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 ¨ ÃÖ<C383>˜Á3
VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt  Áêã”Õ3 ¨ ÃÖ<C383>˜Á3

View File

@ -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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ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  <EFBFBD>ëã”Õ3  h öùÊÁ3Z
X
VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt  ¢î±áÍ3 ¨ ÃÖ<C383>˜Á3
VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt  <EFBFBD>ëã”Õ3 ¨ ÃÖ<C383>˜Á3

View File

@ -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ª
<20>婜Á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 ¨ ÃÖ<C383>˜Á3
VC:\Users\24171\OneDrive\Desktop\msdk\400apiqwq\ams\Opencv\libcxx_helper\CMakeLists.txt  Íëã”Õ3 ¨ ÃÖ<C383>˜Á3

View File

@ -1,7 +1,7 @@
[
{
"directory": "C:/Users/24171/OneDrive/Desktop/msdk/400apiqwq/ams/Opencv/.cxx/RelWithDebInfo/193z4w1c/x86",
"command": "D:\\androidstudio\\sdk\\ndk\\23.1.7779620\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\clang++.exe --target=i686-none-linux-android24 --sysroot=D:/androidstudio/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64/sysroot -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fexceptions -frtti -stdlib=libc++ -O2 -g -DNDEBUG -fPIC -o CMakeFiles\\opencv_jni_shared.dir\\dummy.cpp.o -c C:\\Users\\24171\\OneDrive\\Desktop\\msdk\\400apiqwq\\ams\\Opencv\\libcxx_helper\\dummy.cpp",
"directory": "C:/Users/24171/OneDrive/Desktop/msdk/400apiqwq/ams/Opencv/.cxx/RelWithDebInfo/3o382i2a/x86",
"command": "D:\\androidstudio\\sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\clang++.exe --target=i686-none-linux-android24 --sysroot=D:/androidstudio/sdk/ndk/29.0.14206865/toolchains/llvm/prebuilt/windows-x86_64/sysroot -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -O2 -g -DNDEBUG -fPIC -o CMakeFiles\\opencv_jni_shared.dir\\dummy.cpp.o -c C:\\Users\\24171\\OneDrive\\Desktop\\msdk\\400apiqwq\\ams\\Opencv\\libcxx_helper\\dummy.cpp",
"file": "C:\\Users\\24171\\OneDrive\\Desktop\\msdk\\400apiqwq\\ams\\Opencv\\libcxx_helper\\dummy.cpp"
}
]

View File

@ -1,3 +1,9 @@
# C/C++ build system timings
generate_cxx_metadata 22ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 16ms
[gap of 16ms]
generate_cxx_metadata completed in 36ms

View File

@ -13,3 +13,26 @@ generate_cxx_metadata
write-metadata-json-to-file 15ms
generate_cxx_metadata completed in 164ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 65ms
[gap of 41ms]
generate_cxx_metadata completed in 124ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 17ms]
create-invalidation-state 53ms
[gap of 24ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 106ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 50ms
[gap of 29ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 108ms

View File

@ -26,3 +26,26 @@ generate_cxx_metadata
[gap of 36ms]
generate_cxx_metadata completed in 102ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 19ms]
create-invalidation-state 51ms
[gap of 23ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 104ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 16ms]
create-invalidation-state 53ms
[gap of 37ms]
generate_cxx_metadata completed in 106ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 14ms]
create-invalidation-state 67ms
[gap of 33ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 125ms

View File

@ -34,3 +34,25 @@ generate_cxx_metadata
[gap of 39ms]
generate_cxx_metadata completed in 114ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 57ms
[gap of 29ms]
write-metadata-json-to-file 11ms
generate_cxx_metadata completed in 117ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 17ms]
create-invalidation-state 53ms
[gap of 44ms]
generate_cxx_metadata completed in 114ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 14ms]
create-invalidation-state 35ms
[gap of 34ms]
generate_cxx_metadata completed in 83ms

View File

@ -34,3 +34,18 @@ generate_cxx_metadata
[gap of 37ms]
generate_cxx_metadata completed in 119ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 19ms]
create-invalidation-state 67ms
[gap of 45ms]
write-metadata-json-to-file 16ms
generate_cxx_metadata completed in 150ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 14ms]
create-invalidation-state 37ms
[gap of 30ms]
generate_cxx_metadata completed in 81ms

View File

@ -41,3 +41,39 @@ generate_cxx_metadata
write-metadata-json-to-file 12ms
generate_cxx_metadata completed in 125ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 22ms]
create-invalidation-state 91ms
[gap of 38ms]
generate_cxx_metadata completed in 151ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 16ms]
create-invalidation-state 64ms
[gap of 32ms]
write-metadata-json-to-file 11ms
generate_cxx_metadata completed in 124ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 17ms]
create-invalidation-state 57ms
[gap of 48ms]
generate_cxx_metadata completed in 122ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 12ms]
create-invalidation-state 38ms
[gap of 23ms]
generate_cxx_metadata completed in 73ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 49ms
[gap of 29ms]
generate_cxx_metadata completed in 96ms

View File

@ -19,3 +19,17 @@ generate_cxx_metadata
[gap of 38ms]
generate_cxx_metadata completed in 108ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 26ms]
create-invalidation-state 76ms
[gap of 36ms]
generate_cxx_metadata completed in 138ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 17ms]
create-invalidation-state 59ms
[gap of 38ms]
generate_cxx_metadata completed in 114ms

View File

@ -26,3 +26,41 @@ generate_cxx_metadata
[gap of 27ms]
generate_cxx_metadata completed in 82ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 56ms
[gap of 38ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 123ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 15ms]
create-invalidation-state 51ms
[gap of 35ms]
generate_cxx_metadata completed in 101ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 20ms]
create-invalidation-state 49ms
[gap of 39ms]
generate_cxx_metadata completed in 108ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 22ms]
create-invalidation-state 73ms
[gap of 39ms]
write-metadata-json-to-file 12ms
generate_cxx_metadata completed in 147ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 16ms]
create-invalidation-state 50ms
[gap of 26ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 103ms

View File

@ -26,3 +26,25 @@ generate_cxx_metadata
[gap of 31ms]
generate_cxx_metadata completed in 92ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 54ms
[gap of 29ms]
generate_cxx_metadata completed in 101ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 18ms]
create-invalidation-state 56ms
[gap of 28ms]
write-metadata-json-to-file 14ms
generate_cxx_metadata completed in 118ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 22ms]
create-invalidation-state 41ms
[gap of 29ms]
generate_cxx_metadata completed in 92ms

View File

@ -42,3 +42,10 @@ generate_cxx_metadata
[gap of 37ms]
generate_cxx_metadata completed in 101ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 15ms]
create-invalidation-state 44ms
[gap of 30ms]
generate_cxx_metadata completed in 89ms

View File

@ -27,3 +27,40 @@ generate_cxx_metadata
[gap of 44ms]
generate_cxx_metadata completed in 111ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 23ms]
create-invalidation-state 68ms
[gap of 34ms]
write-metadata-json-to-file 13ms
generate_cxx_metadata completed in 140ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 19ms]
create-invalidation-state 51ms
[gap of 37ms]
generate_cxx_metadata completed in 107ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 19ms]
create-invalidation-state 48ms
[gap of 29ms]
generate_cxx_metadata completed in 96ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 16ms]
create-invalidation-state 42ms
[gap of 41ms]
generate_cxx_metadata completed in 99ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 23ms]
create-invalidation-state 68ms
[gap of 33ms]
write-metadata-json-to-file 13ms
generate_cxx_metadata completed in 139ms

View File

@ -43,3 +43,18 @@ generate_cxx_metadata
write-metadata-json-to-file 13ms
generate_cxx_metadata completed in 173ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 22ms]
create-invalidation-state 56ms
[gap of 31ms]
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 121ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 12ms]
create-invalidation-state 32ms
[gap of 26ms]
generate_cxx_metadata completed in 70ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata 29ms
# C/C++ build system timings
generate_cxx_metadata 27ms
# C/C++ build system timings
generate_cxx_metadata 22ms
# C/C++ build system timings
generate_cxx_metadata 20ms

View File

@ -6,3 +6,6 @@ generate_cxx_metadata
write-metadata-json-to-file 10ms
generate_cxx_metadata completed in 164ms
# C/C++ build system timings
generate_cxx_metadata 23ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata
[gap of 20ms]
generate_cxx_metadata completed in 43ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 11ms
[gap of 17ms]
generate_cxx_metadata completed in 32ms

View File

@ -10,3 +10,9 @@ generate_cxx_metadata 25ms
# C/C++ build system timings
generate_cxx_metadata 22ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 17ms
[gap of 15ms]
generate_cxx_metadata completed in 38ms

View File

@ -4,3 +4,15 @@ generate_cxx_metadata
[gap of 24ms]
generate_cxx_metadata completed in 71ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 23ms
[gap of 22ms]
generate_cxx_metadata completed in 52ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 11ms
[gap of 14ms]
generate_cxx_metadata completed in 29ms

View File

@ -5,3 +5,15 @@ generate_cxx_metadata
[gap of 40ms]
generate_cxx_metadata completed in 141ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 10ms
[gap of 14ms]
generate_cxx_metadata completed in 27ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 15ms
[gap of 13ms]
generate_cxx_metadata completed in 33ms

View File

@ -16,3 +16,9 @@ generate_cxx_metadata
[gap of 17ms]
generate_cxx_metadata completed in 30ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 10ms
[gap of 18ms]
generate_cxx_metadata completed in 32ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata
[gap of 19ms]
generate_cxx_metadata completed in 36ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 12ms
[gap of 17ms]
generate_cxx_metadata completed in 35ms

View File

@ -7,3 +7,6 @@ generate_cxx_metadata completed in 28ms
# C/C++ build system timings
generate_cxx_metadata 23ms
# C/C++ build system timings
generate_cxx_metadata 16ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata
[gap of 16ms]
generate_cxx_metadata completed in 32ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 15ms
[gap of 16ms]
generate_cxx_metadata completed in 34ms

View File

@ -11,7 +11,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 376961765
"memoizedHashCode": 1793695528
},
{
"level_": 0,
@ -25,7 +25,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -191520207
"memoizedHashCode": 1225213556
},
{
"level_": 0,
@ -39,6 +39,6 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1576149053
"memoizedHashCode": -159415290
}
]

View File

@ -1,3 +1,6 @@
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 22ms

View File

@ -10,3 +10,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 13ms]
generate_cxx_metadata completed in 28ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata 19ms
# C/C++ build system timings
generate_cxx_metadata 21ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 12ms
[gap of 14ms]
generate_cxx_metadata completed in 30ms

View File

@ -7,3 +7,6 @@ generate_cxx_metadata completed in 40ms
# C/C++ build system timings
generate_cxx_metadata 25ms
# C/C++ build system timings
generate_cxx_metadata 22ms

View File

@ -16,3 +16,12 @@ generate_cxx_metadata
[gap of 18ms]
generate_cxx_metadata completed in 33ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 11ms
[gap of 13ms]
generate_cxx_metadata completed in 27ms
# C/C++ build system timings
generate_cxx_metadata 17ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata
[gap of 16ms]
generate_cxx_metadata completed in 27ms
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 20ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata
[gap of 16ms]
generate_cxx_metadata completed in 31ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 10ms
[gap of 13ms]
generate_cxx_metadata completed in 25ms

View File

@ -1,3 +1,6 @@
# C/C++ build system timings
generate_cxx_metadata 14ms
# C/C++ build system timings
generate_cxx_metadata 17ms

View File

@ -11,7 +11,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1605359535
"memoizedHashCode": -659995836
},
{
"level_": 0,
@ -25,7 +25,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 1362017693
"memoizedHashCode": -1987585904
},
{
"level_": 0,
@ -39,6 +39,6 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 7840945
"memoizedHashCode": 953204644
}
]

View File

@ -1,3 +1,9 @@
# C/C++ build system timings
generate_cxx_metadata 12ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 11ms
[gap of 15ms]
generate_cxx_metadata completed in 29ms

View File

@ -4,3 +4,6 @@ generate_cxx_metadata 19ms
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 20ms

View File

@ -10,3 +10,6 @@ generate_cxx_metadata 24ms
# C/C++ build system timings
generate_cxx_metadata 14ms
# C/C++ build system timings
generate_cxx_metadata 15ms

View File

@ -7,3 +7,9 @@ generate_cxx_metadata 19ms
# C/C++ build system timings
generate_cxx_metadata 22ms
# C/C++ build system timings
generate_cxx_metadata 17ms
# C/C++ build system timings
generate_cxx_metadata 15ms

View File

@ -3,3 +3,9 @@ generate_cxx_metadata
create-invalidation-state 10ms
generate_cxx_metadata completed in 21ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 10ms
[gap of 15ms]
generate_cxx_metadata completed in 29ms

View File

@ -7,3 +7,12 @@ generate_cxx_metadata 20ms
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 19ms
# C/C++ build system timings
generate_cxx_metadata 16ms
# C/C++ build system timings
generate_cxx_metadata 21ms

View File

@ -4,3 +4,6 @@ generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 24ms
# C/C++ build system timings
generate_cxx_metadata 21ms

View File

@ -54,3 +54,186 @@ generate_cxx_metadata
write-metadata-json-to-file 20ms
generate_cxx_metadata completed in 233ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 240ms]
create-invalidation-state 153ms
[gap of 139ms]
write-metadata-json-to-file 29ms
[gap of 16ms]
generate_cxx_metadata completed in 577ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 52ms]
create-invalidation-state 162ms
[gap of 51ms]
write-metadata-json-to-file 23ms
generate_cxx_metadata completed in 290ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 31ms]
create-invalidation-state 105ms
[gap of 102ms]
write-metadata-json-to-file 13ms
generate_cxx_metadata completed in 253ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 29ms]
create-invalidation-state 75ms
[gap of 43ms]
write-metadata-json-to-file 18ms
generate_cxx_metadata completed in 168ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 57ms]
create-invalidation-state 102ms
[gap of 52ms]
write-metadata-json-to-file 21ms
generate_cxx_metadata completed in 235ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 27ms]
create-invalidation-state 71ms
[gap of 38ms]
write-metadata-json-to-file 15ms
generate_cxx_metadata completed in 153ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 80ms]
create-invalidation-state 376ms
[gap of 106ms]
write-metadata-json-to-file 30ms
generate_cxx_metadata completed in 593ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 34ms]
create-invalidation-state 85ms
[gap of 47ms]
write-metadata-json-to-file 27ms
generate_cxx_metadata completed in 195ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 32ms]
create-invalidation-state 86ms
[gap of 57ms]
write-metadata-json-to-file 24ms
generate_cxx_metadata completed in 201ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 74ms]
create-invalidation-state 146ms
[gap of 51ms]
write-metadata-json-to-file 46ms
generate_cxx_metadata completed in 319ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 12ms
[gap of 24ms]
generate_cxx_metadata completed in 41ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 234ms]
create-invalidation-state 521ms
[gap of 650ms]
write-metadata-json-to-file 95ms
[gap of 22ms]
generate_cxx_metadata completed in 1522ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 29ms]
create-invalidation-state 1140ms
[gap of 116ms]
write-metadata-json-to-file 434ms
generate_cxx_metadata completed in 1720ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 52ms]
create-invalidation-state 124ms
[gap of 66ms]
write-metadata-json-to-file 56ms
generate_cxx_metadata completed in 299ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 81ms]
create-invalidation-state 287ms
[gap of 316ms]
write-metadata-json-to-file 49ms
generate_cxx_metadata completed in 737ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 130ms]
create-invalidation-state 768ms
[gap of 633ms]
write-metadata-json-to-file 165ms
generate_cxx_metadata completed in 1701ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 25ms]
create-invalidation-state 68ms
[gap of 34ms]
write-metadata-json-to-file 11ms
generate_cxx_metadata completed in 139ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 301ms]
create-invalidation-state 237ms
[gap of 78ms]
write-metadata-json-to-file 55ms
generate_cxx_metadata completed in 676ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 28ms]
create-invalidation-state 67ms
[gap of 39ms]
generate_cxx_metadata completed in 134ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 26ms]
create-invalidation-state 59ms
[gap of 33ms]
write-metadata-json-to-file 12ms
generate_cxx_metadata completed in 132ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 58ms]
create-invalidation-state 106ms
[gap of 75ms]
write-metadata-json-to-file 57ms
generate_cxx_metadata completed in 297ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 23ms]
create-invalidation-state 61ms
[gap of 30ms]
write-metadata-json-to-file 13ms
generate_cxx_metadata completed in 128ms
# C/C++ build system timings
generate_cxx_metadata
[gap of 23ms]
create-invalidation-state 66ms
[gap of 33ms]
write-metadata-json-to-file 14ms
generate_cxx_metadata completed in 139ms

View File

@ -1,3 +1,9 @@
# C/C++ build system timings
generate_cxx_metadata 30ms
# C/C++ build system timings
generate_cxx_metadata 14ms
# C/C++ build system timings
generate_cxx_metadata 14ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 10ms
[gap of 14ms]
generate_cxx_metadata completed in 28ms

View File

@ -4,3 +4,9 @@ generate_cxx_metadata
[gap of 14ms]
generate_cxx_metadata completed in 27ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 12ms
[gap of 13ms]
generate_cxx_metadata completed in 27ms

View File

@ -1,3 +1,6 @@
# C/C++ build system timings
generate_cxx_metadata 14ms
# C/C++ build system timings
generate_cxx_metadata 14ms

View File

@ -11,7 +11,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 1583171257
"memoizedHashCode": -1766432340
},
{
"level_": 0,
@ -25,7 +25,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 1113662725
"memoizedHashCode": 2059026424
},
{
"level_": 0,
@ -39,6 +39,6 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -297153467
"memoizedHashCode": 648210232
}
]

View File

@ -1,3 +1,9 @@
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata
create-invalidation-state 10ms
[gap of 11ms]
generate_cxx_metadata completed in 26ms

View File

@ -4,3 +4,6 @@ generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 20ms
# C/C++ build system timings
generate_cxx_metadata 19ms

View File

@ -16,3 +16,18 @@ generate_cxx_metadata 15ms
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 21ms
# C/C++ build system timings
generate_cxx_metadata 16ms
# C/C++ build system timings
generate_cxx_metadata 24ms
# C/C++ build system timings
generate_cxx_metadata 13ms
# C/C++ build system timings
generate_cxx_metadata 16ms

View File

@ -16,3 +16,12 @@ generate_cxx_metadata 14ms
# C/C++ build system timings
generate_cxx_metadata 15ms
# C/C++ build system timings
generate_cxx_metadata 19ms
# C/C++ build system timings
generate_cxx_metadata 20ms
# C/C++ build system timings
generate_cxx_metadata 14ms

View File

@ -7,3 +7,9 @@ generate_cxx_metadata completed in 38ms
# C/C++ build system timings
generate_cxx_metadata 16ms
# C/C++ build system timings
generate_cxx_metadata 18ms
# C/C++ build system timings
generate_cxx_metadata 23ms

View File

@ -4,3 +4,6 @@ generate_cxx_metadata
[gap of 18ms]
generate_cxx_metadata completed in 35ms
# C/C++ build system timings
generate_cxx_metadata 18ms

View File

@ -1,3 +1,6 @@
# C/C++ build system timings
generate_cxx_metadata 13ms
# C/C++ build system timings
generate_cxx_metadata 14ms

View File

@ -11,7 +11,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 24305719
"memoizedHashCode": 969669418
},
{
"level_": 0,
@ -25,7 +25,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1873235809
"memoizedHashCode": -927872110
},
{
"level_": 0,
@ -39,6 +39,6 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 851221716
"memoizedHashCode": 1796585415
}
]

View File

@ -11,6 +11,6 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1522622624
"memoizedHashCode": -105888861
}
]

View File

@ -8,3 +8,8 @@ create_cxx_tasks
[gap of 10ms]
create_cxx_tasks completed in 82ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model 52ms
create_cxx_tasks completed in 58ms

View File

@ -66,3 +66,77 @@ create_cxx_tasks
create-initial-cxx-model completed in 88ms
create_cxx_tasks completed in 95ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 17ms
create-variant-model 12ms
create-ARMEABI_V7A-model 24ms
[gap of 13ms]
create-ARM64_V8A-model 13ms
create-X86-model 22ms
create-X86_64-model 19ms
create-module-model 13ms
[gap of 45ms]
create-initial-cxx-model completed in 187ms
[gap of 13ms]
create_cxx_tasks completed in 200ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 15ms
create-variant-model 12ms
create-ARMEABI_V7A-model 10ms
[gap of 25ms]
create-module-model 10ms
[gap of 42ms]
create-initial-cxx-model completed in 121ms
[gap of 12ms]
create_cxx_tasks completed in 133ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 11ms
[gap of 19ms]
create-ARM64_V8A-model 12ms
create-X86-model 11ms
[gap of 10ms]
create-module-model 13ms
[gap of 17ms]
create-ARM64_V8A-model 10ms
create-X86_64-model 12ms
create-initial-cxx-model completed in 126ms
[gap of 16ms]
create_cxx_tasks completed in 142ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 13ms
[gap of 12ms]
create-ARMEABI_V7A-model 10ms
create-ARM64_V8A-model 10ms
create-X86-model 11ms
create-X86_64-model 11ms
create-module-model 13ms
[gap of 27ms]
create-X86-model 11ms
create-X86_64-model 11ms
create-initial-cxx-model completed in 135ms
[gap of 17ms]
create_cxx_tasks completed in 152ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 15ms
[gap of 36ms]
create-X86_64-model 10ms
create-module-model 12ms
[gap of 37ms]
create-initial-cxx-model completed in 111ms
[gap of 12ms]
create_cxx_tasks completed in 123ms

View File

@ -25,3 +25,21 @@ create_cxx_tasks
create-initial-cxx-model completed in 101ms
create_cxx_tasks completed in 110ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 16ms
create-variant-model 10ms
create-ARMEABI_V7A-model 13ms
create-ARM64_V8A-model 12ms
create-X86-model 11ms
create-X86_64-model 12ms
create-module-model 15ms
create-ARMEABI_V7A-model 13ms
create-ARM64_V8A-model 13ms
create-X86-model 11ms
create-X86_64-model 13ms
create-initial-cxx-model completed in 155ms
[gap of 19ms]
create_cxx_tasks completed in 174ms

View File

@ -26,3 +26,25 @@ create_cxx_tasks
[gap of 48ms]
create_cxx_tasks completed in 158ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 13ms
[gap of 11ms]
create-ARMEABI_V7A-model 10ms
[gap of 20ms]
create-X86_64-model 10ms
create-module-model 11ms
[gap of 17ms]
create-ARM64_V8A-model 10ms
create-X86-model 10ms
[gap of 10ms]
create-initial-cxx-model completed in 125ms
[gap of 13ms]
create_cxx_tasks completed in 138ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model 61ms
create_cxx_tasks completed in 69ms

View File

@ -53,3 +53,32 @@ create_cxx_tasks
[gap of 11ms]
create_cxx_tasks completed in 128ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 15ms
[gap of 11ms]
create-ARMEABI_V7A-model 12ms
create-ARM64_V8A-model 12ms
create-X86-model 16ms
create-X86_64-model 12ms
create-module-model 16ms
create-variant-model 10ms
create-ARMEABI_V7A-model 12ms
create-ARM64_V8A-model 13ms
create-X86-model 12ms
create-X86_64-model 12ms
create-initial-cxx-model completed in 162ms
[gap of 19ms]
create_cxx_tasks completed in 181ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
[gap of 44ms]
create-module-model 10ms
[gap of 37ms]
create-initial-cxx-model completed in 91ms
[gap of 10ms]
create_cxx_tasks completed in 101ms

File diff suppressed because it is too large Load Diff

View File

@ -13,3 +13,12 @@ create_cxx_tasks
create-initial-cxx-model 57ms
create_cxx_tasks completed in 62ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
[gap of 34ms]
create-module-model 11ms
[gap of 32ms]
create-initial-cxx-model completed in 77ms
create_cxx_tasks completed in 85ms

View File

@ -15,3 +15,44 @@ create_cxx_tasks
create-initial-cxx-model 66ms
create_cxx_tasks completed in 74ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 10ms
[gap of 34ms]
create-module-model 10ms
[gap of 32ms]
create-initial-cxx-model completed in 86ms
[gap of 13ms]
create_cxx_tasks completed in 99ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 12ms
create-ARMEABI_V7A-model 10ms
[gap of 23ms]
create-module-model 12ms
[gap of 28ms]
create-X86_64-model 11ms
create-initial-cxx-model completed in 105ms
[gap of 15ms]
create_cxx_tasks completed in 120ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model
create-module-model 11ms
[gap of 40ms]
create-module-model 11ms
create-variant-model 10ms
create-ARMEABI_V7A-model 10ms
[gap of 21ms]
create-initial-cxx-model completed in 104ms
create_cxx_tasks completed in 113ms
# C/C++ build system timings
create_cxx_tasks
create-initial-cxx-model 53ms
create_cxx_tasks completed in 59ms

View File

@ -11,7 +11,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1730642888
"memoizedHashCode": 736145757
},
{
"level_": 0,
@ -25,7 +25,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -938454785
"memoizedHashCode": 1528333860
},
{
"level_": 0,
@ -39,7 +39,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1398198830
"memoizedHashCode": 1068589815
},
{
"level_": 0,
@ -53,7 +53,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 1628820478
"memoizedHashCode": -199358173
},
{
"level_": 0,
@ -67,7 +67,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -2097434787
"memoizedHashCode": 369353858
},
{
"level_": 0,
@ -81,7 +81,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1732524529
"memoizedHashCode": 734264116
},
{
"level_": 0,
@ -95,7 +95,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1425383295
"memoizedHashCode": 1041405350
},
{
"level_": 0,
@ -109,7 +109,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1983531015
"memoizedHashCode": 483257630
},
{
"level_": 0,
@ -123,7 +123,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1314728262
"memoizedHashCode": 1152060383
},
{
"level_": 0,
@ -137,7 +137,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -610267069
"memoizedHashCode": 1856521576
},
{
"level_": 0,
@ -151,7 +151,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 1252547001
"memoizedHashCode": -575631650
},
{
"level_": 0,
@ -165,7 +165,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 1821259032
"memoizedHashCode": -6919619
},
{
"level_": 0,
@ -179,7 +179,7 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": -1567958201
"memoizedHashCode": 898830444
},
{
"level_": 2,
@ -193,6 +193,6 @@
"fieldsDescending": {}
},
"memoizedSize": -1,
"memoizedHashCode": 883457243
"memoizedHashCode": -944721408
}
]

View File

@ -55,6 +55,7 @@ class ConfigActivity : BaseActivity() {
configBinding.rbRtsp.isChecked = PreferenceUtils.getInstance().customStreamType==1
configBinding.rbRtmp.isChecked = PreferenceUtils.getInstance().customStreamType==2
configBinding.rbNo.isChecked = PreferenceUtils.getInstance().customStreamType==3
configBinding.layoutStreamRtsp.visibility =
if (PreferenceUtils.getInstance().customStreamType==1) VISIBLE else {
GONE
@ -127,7 +128,10 @@ class ConfigActivity : BaseActivity() {
configBinding.rbBeidou.isChecked = PreferenceUtils.getInstance().satelliteSystem == 2
configBinding.rbCameraCenter.isChecked = PreferenceUtils.getInstance().cameraLocationType ==1//中间
configBinding.rbCameraRight.isChecked = PreferenceUtils.getInstance().cameraLocationType ==2//右边
configBinding.rbCameraNull.isChecked = PreferenceUtils.getInstance().cameraLocationType ==0//右边
configBinding.rbCameraNull.isChecked = PreferenceUtils.getInstance().cameraLocationType ==3//下视
configBinding.rbCameraMix.isChecked = PreferenceUtils.getInstance().cameraLocationType ==4//融合
configBinding.btnConfig.setOnClickListener { config() }
@ -234,7 +238,7 @@ class ConfigActivity : BaseActivity() {
}
}
if (!configBinding.rbCameraRight.isChecked && !configBinding.rbCameraCenter.isChecked && !configBinding.rbCameraNull.isChecked) {
if (!configBinding.rbCameraRight.isChecked && !configBinding.rbCameraCenter.isChecked && !configBinding.rbCameraNull.isChecked && !configBinding.rbCameraMix.isChecked) {
ToastUtil.showToast("未配置主相机位置")
return
}
@ -375,7 +379,9 @@ class ConfigActivity : BaseActivity() {
} else if (configBinding.rbCameraRight.isChecked) {
PreferenceUtils.getInstance().cameraLocationType = 2
} else if (configBinding.rbCameraNull.isChecked) {
PreferenceUtils.getInstance().cameraLocationType = 0
PreferenceUtils.getInstance().cameraLocationType = 3
} else if(configBinding.rbCameraMix.isChecked){
PreferenceUtils.getInstance().cameraLocationType = 4
}
ToastUtil.showToast("配置已保存")

View File

@ -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)){
@ -146,7 +146,6 @@ open class ConnectionActivity : BaseActivity() {
): Map<String, String> {
return mapOf()
}
override fun onCrashHandleStart2GetExtraDatas(
crashType: Int, errorType: String,
errorMessage: String, errorStack: String
@ -308,8 +307,6 @@ open class ConnectionActivity : BaseActivity() {
}
private fun toMain(){
val cameraType = KeyManager.getInstance().getValue(
KeyTools.createKey(
CameraKey.KeyCameraType,

View File

@ -7,7 +7,6 @@ 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
@ -21,6 +20,7 @@ import com.aros.apron.R
import com.aros.apron.base.BaseActivity
import com.aros.apron.callback.MqttCallBack
import com.aros.apron.entity.Movement
import com.aros.apron.entity.Synchronizedstatus
import com.aros.apron.manager.AlternateLandingManager
import com.aros.apron.manager.BatteryManager
import com.aros.apron.manager.CameraManager
@ -35,15 +35,17 @@ import com.aros.apron.manager.LEDsSettingsManager
import com.aros.apron.manager.LTEManager
import com.aros.apron.manager.MediaManager
import com.aros.apron.manager.MissionV3Manager
import com.aros.apron.manager.NavigationSatelliteSystemManager
import com.aros.apron.manager.OSDManager
import com.aros.apron.manager.PerceptionManager
import com.aros.apron.manager.RTKManager
import com.aros.apron.manager.StickManager
import com.aros.apron.manager.StreamManager
import com.aros.apron.manager.VlcRtspManager
import com.aros.apron.manager.VlcRtspManager.OnRtspCheckListener
import com.aros.apron.manager.UdpStreamManager
import com.aros.apron.manager.WirelessLinkManager
import com.aros.apron.tools.AlternateArucoDetect
import com.aros.apron.tools.ApronArucoDetect
import com.aros.apron.tools.ApronArucoStatus
import com.aros.apron.tools.ApronArucoDetectPort
import com.aros.apron.tools.DroneHelper
import com.aros.apron.tools.DualCaptureHelper
import com.aros.apron.tools.LogUtil
@ -52,6 +54,7 @@ import com.aros.apron.tools.PreferenceUtils
import com.aros.apron.tools.SimplePortScanner
import com.dji.wpmzsdk.manager.WPMZManager
import com.google.gson.Gson
import dji.sdk.keyvalue.key.CameraKey
import dji.sdk.keyvalue.key.DJIKey
import dji.sdk.keyvalue.key.FlightControllerKey
import dji.sdk.keyvalue.key.KeyTools
@ -65,9 +68,11 @@ 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.perception.radar.RadarManager
import dji.v5.manager.datacenter.MediaDataCenter
import dji.v5.manager.interfaces.ICameraStreamManager
import dji.v5.manager.interfaces.ICameraStreamManager.AvailableCameraUpdatedListener
import dji.v5.manager.interfaces.IRadarManager
import dji.v5.network.DJINetworkManager
import dji.v5.network.IDJINetworkStatusListener
import dji.v5.utils.common.JsonUtil
@ -122,7 +127,50 @@ open class MainActivity : BaseActivity() {
// 如果不需要改变 isAppStarted 的值,可以直接这样声明
var isAppStarted: Boolean = false
var streamReceive: Boolean = false
private var instance: MainActivity? = null
fun getInstance(): MainActivity? {
return instance
}
private var vtxHeartbeatHandler: Handler? = null
private var lastVtxFrameTime: Long = 0
private const val VTX_HEARTBEAT_TIMEOUT = 2000L // 3秒没有收到帧就认为图传异常
private var isVtxHeartbeatRunning = false
fun startVtxHeartbeat() {
if (isVtxHeartbeatRunning) return
isVtxHeartbeatRunning = true
lastVtxFrameTime = System.currentTimeMillis()
vtxHeartbeatHandler = Handler(Looper.getMainLooper())
vtxHeartbeatHandler?.post(object : Runnable {
override fun run() {
val currentTime = System.currentTimeMillis()
val timeSinceLastFrame = currentTime - lastVtxFrameTime
if (timeSinceLastFrame > VTX_HEARTBEAT_TIMEOUT) {
//LogUtil.log("MainActivity", "图传心跳超时设置图传状态为false")
Movement.getInstance().isVtx = false
}
if (isVtxHeartbeatRunning) {
vtxHeartbeatHandler?.postDelayed(this, 1000) // 每秒检查一次
}
}
})
}
fun stopVtxHeartbeat() {
isVtxHeartbeatRunning = false
vtxHeartbeatHandler?.removeCallbacksAndMessages(null)
vtxHeartbeatHandler = null
}
fun updateVtxHeartbeat() {
lastVtxFrameTime = System.currentTimeMillis()
}
}
protected var primaryFpvWidget: FPVWidget? = null
@ -143,6 +191,8 @@ open class MainActivity : BaseActivity() {
protected var settingWidget: SettingWidget? = null
protected var topBarPanel: TopBarPanelWidget? = null
protected var fpvParentView: ConstraintLayout? = null
private var mDrawerLayout: DrawerLayout? = null
private var gimbalAdjustDone: TextView? = null
private var btn_test: Button? = null
@ -172,7 +222,9 @@ open class MainActivity : BaseActivity() {
private val availableCameraUpdatedListener: AvailableCameraUpdatedListener =
object : AvailableCameraUpdatedListener {
override fun onAvailableCameraUpdated(availableCameraList: List<ComponentIndexType>) {
runOnUiThread { updateFPVWidgetSource(availableCameraList) }
runOnUiThread {
updateFPVWidgetSource(availableCameraList)
}
}
override fun onCameraStreamEnableUpdate(cameraStreamEnableMap: Map<ComponentIndexType, Boolean>) {
@ -287,8 +339,8 @@ open class MainActivity : BaseActivity() {
return
}
//大于两路数据
val primarySource = getSuitableSource(cameraList, ComponentIndexType.LEFT_OR_MAIN)
//大于两路数据ort1
val primarySource = getSuitableSource(cameraList, ComponentIndexType.PORT_1)
primaryFpvWidget!!.updateVideoSource(primarySource!!)
cameraList.remove(primarySource)
@ -408,7 +460,8 @@ open class MainActivity : BaseActivity() {
/**
* Swap the video sources of the FPV and secondary FPV widgets.
*/
private fun swapVideoSource() {
fun swapVideoSource() {
val primarySource = primaryFpvWidget!!.widgetModel.getCameraIndex()
val secondarySource = secondaryFPVWidget!!.widgetModel.getCameraIndex()
//两个source都存在的情况下才进行切换
@ -448,20 +501,27 @@ open class MainActivity : BaseActivity() {
)
setContentView(R.layout.activity_main)
isAppStarted = true
instance = this
// mapWidget = findViewById<MapWidget>(R.id.widget_map)
// mapWidget?.initMapLibreMap(applicationContext, OnMapReadyListener { map: DJIMap ->
// val uiSetting = map.uiSettings
// uiSetting?.setZoomControlsEnabled(false)
// })
//
// mapWidget?.onCreate(savedInstanceState)
GeoidManager.getInstance().init(this)
WPMZManager.getInstance().init(this)
MqttManager.getInstance().needConnect()
initDJIManager()
initCameraStream()
// //开启相机图传
// enableStream()
// if(PreferenceUtils.getInstance().cameraLocationType==3){
// initFpvStream()
// }else{
// initCameraStream()
// }
initView()
@ -516,6 +576,7 @@ open class MainActivity : BaseActivity() {
MediaDataCenter.getInstance().cameraStreamManager.addAvailableCameraUpdatedListener(
availableCameraUpdatedListener
)
primaryFpvWidget?.setOnFPVStreamSourceListener(object : FPVStreamSourceListener {
override fun onStreamSourceUpdated(
devicePosition: ComponentIndexType,
@ -578,6 +639,7 @@ open class MainActivity : BaseActivity() {
super.onDestroy()
isAppStarted = false
stopVtxHeartbeat()
try {
if (MqttManager.getInstance().mqttAndroidClient != null && MqttManager.getInstance().mqttAndroidClient.isConnected) {
MqttManager.getInstance().mqttAndroidClient.unregisterResources()
@ -598,16 +660,20 @@ open class MainActivity : BaseActivity() {
private fun initDJIManager() {
val isFlightControllerConnect =
KeyManager.getInstance().getValue(DJIKey.create(FlightControllerKey.KeyConnection))
// val isCameraConnect =
// KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.KeyConnection, ComponentIndexType.PORT_1))
val isCameraConnect =
KeyManager.getInstance()
.getValue(KeyTools.createKey(CameraKey.KeyConnection, ComponentIndexType.PORT_1))
// LogUtil.log(TAG,isCameraConnect.toString())
if (isFlightControllerConnect == null || !isFlightControllerConnect) {
if (PreferenceUtils.getInstance().cameraLocationType == 3) {
if (isFlightControllerConnect == null || isFlightControllerConnect != true) {
handler.postDelayed({
initDJIManager()
}, 8000)
}, 1000)
} else {
initTimes++
LogUtil.log(TAG, "初始化$initTimes")
LogUtil.log(TAG, "下视觉初始化$initTimes")
cameraManager.setKeepAliveDecoding(true);
FlightManager.getInstance().initFlightInfo()
BatteryManager.getInstance().initBatteryInfo()
StickManager.getInstance().initStickInfo()
@ -618,14 +684,124 @@ open class MainActivity : BaseActivity() {
MediaManager.getInstance().init()
StreamManager.getInstance().initStreamManager()
LEDsSettingsManager.getInstance().initLEDsInfo()
RTKManager.getInstance().initRTKInfo()
//负载
//PayloadWidgetManager.getInstance().initPayloadInfo()
//初始化上报
NavigationSatelliteSystemManager.getInstance().initNavigationSatelliteSystem()
NavigationSatelliteSystemManager.getInstance().setNavigationSatelliteSystem()
LTEManager.getInstance().initLTEInfo()
WirelessLinkManager.getInstance().initWirelessLink()
CameraManager.getInstance().initCameraInfo()
//ApronArucoDetect.getInstance().init()
GeoidManager.getInstance().init(this);
MissionV3Manager.getInstance().initMissionManager()
enableStream()
initFpvStream()
startVtxHeartbeat()
MediaDataCenter.getInstance().cameraStreamManager.setVisionAssistViewDirection(
VisionAssistDirection.DOWN, object : CommonCallbacks.CompletionCallback {
override fun onSuccess() {
LogUtil.log(TAG, "开启成功")
}
override fun onFailure(p0: IDJIError) {
LogUtil.log(TAG, "开启失败" + p0)
}
})
val leDsSettings = LEDsSettings()
leDsSettings.setNavigationLEDsOn(false)
leDsSettings.setStatusIndicatorLEDsOn(true)
leDsSettings.setFrontLEDsOn(true)
KeyManager.getInstance().setValue<LEDsSettings?>(
KeyTools.createKey<LEDsSettings?>(FlightControllerKey.KeyLEDsSettings),
leDsSettings,
object : CompletionCallback {
override fun onSuccess() {
LogUtil.log(TAG, "夜航灯关闭成功")
}
override fun onFailure(idjiError: IDJIError) {
LogUtil.log(TAG, "夜航灯关闭失败")
}
})
LogUtil.log(TAG, "自定义推流方式:" + PreferenceUtils.getInstance().customStreamType)
Handler(Looper.getMainLooper()).postDelayed({
when (PreferenceUtils.getInstance().customStreamType) {
1 -> StreamManager.getInstance().startLiveWithRTSP()
2 -> StreamManager.getInstance().startLiveWithCustom()
else -> StreamManager.getInstance().startLiveWithCustom()
}
val scanner = SimplePortScanner.getInstance()
scanner.setOnPortCheckListener(object : SimplePortScanner.OnPortCheckListener {
override fun onPortOpen() {
//LogUtil.log("qwq","✅ 本地8554端口已开启每3秒扫描")
}
override fun onPortClosed() {
LogUtil.log("qwq", "❌ 本地8554端口已关闭每3秒扫描")
//重新开启这个rtp
StreamManager.getInstance().startLiveWithRTSP();
}
})
}, 5000) // 参数别改5秒延迟确保相机就绪
LogUtil.log(TAG, "推流类型:" + PreferenceUtils.getInstance().customStreamType)
}
} else if (PreferenceUtils.getInstance().cameraLocationType == 4) {
if ((isFlightControllerConnect == null || isFlightControllerConnect != true) && (isCameraConnect == null || isCameraConnect != true)) {
handler.postDelayed({
initDJIManager()
}, 1000)
} else {
initTimes++
cameraManager.setKeepAliveDecoding(true);
LogUtil.log(TAG, "云台初始化$initTimes")
FlightManager.getInstance().initFlightInfo()
BatteryManager.getInstance().initBatteryInfo()
StickManager.getInstance().initStickInfo()
GimbalManager.getInstance().initGimbalInfo()
AlternateLandingManager.getInstance().initAlterLandingInfo()
OSDManager.getInstance().initOsd()
FlightTaskProgressManager.getInstance().initFlightTaskProgress()
MediaManager.getInstance().init()
StreamManager.getInstance().initStreamManager()
LEDsSettingsManager.getInstance().initLEDsInfo()
RTKManager.getInstance().initRTKInfo()
//负载
//PayloadWidgetManager.getInstance().initPayloadInfo()
//初始化上报
LTEManager.getInstance().initLTEInfo()
WirelessLinkManager.getInstance().initWirelessLink()
CameraManager.getInstance().initCameraInfo()
//
NavigationSatelliteSystemManager.getInstance().initNavigationSatelliteSystem()
NavigationSatelliteSystemManager.getInstance().setNavigationSatelliteSystem()
//ApronArucoDetect.getInstance().init()
MissionV3Manager.getInstance().initMissionManager()
enableStream()
startVtxHeartbeat()
GeoidManager.getInstance().init(this);
//开启雷达监听器
//PerceptionManager.getInstance().isladraopeninti()
MediaDataCenter.getInstance().cameraStreamManager.setVisionAssistViewDirection(
VisionAssistDirection.DOWN, object : CommonCallbacks.CompletionCallback {
@ -658,13 +834,19 @@ open class MainActivity : BaseActivity() {
LogUtil.log(TAG, "自定义推流方式:" + PreferenceUtils.getInstance().customStreamType)
Handler(Looper.getMainLooper()).postDelayed({
when (PreferenceUtils.getInstance().customStreamType) {
1 -> StreamManager.getInstance().startLiveWithRTSP()
2 -> StreamManager.getInstance().startLiveWithCustom()
else -> StreamManager.getInstance().startLiveWithCustom()
}
val scanner = SimplePortScanner.getInstance()
scanner.setOnPortCheckListener(object : SimplePortScanner.OnPortCheckListener {
override fun onPortOpen() {
//LogUtil.log("qwq","✅ 本地8554端口已开启每3秒扫描")
}
override fun onPortClosed() {
LogUtil.log("qwq", "❌ 本地8554端口已关闭每3秒扫描")
//重新开启这个rtp
@ -672,6 +854,88 @@ open class MainActivity : BaseActivity() {
}
})
}, 5000) // 参数别改5秒延迟确保相机就绪
LogUtil.log(TAG, "推流类型:" + PreferenceUtils.getInstance().customStreamType)
}
} else {
if ((isFlightControllerConnect == null || isFlightControllerConnect != true) && (isCameraConnect == null || isCameraConnect != true)) {
handler.postDelayed({
initDJIManager()
}, 1000)
} else {
initTimes++
cameraManager.setKeepAliveDecoding(true);
LogUtil.log(TAG, "云台初始化$initTimes")
FlightManager.getInstance().initFlightInfo()
BatteryManager.getInstance().initBatteryInfo()
StickManager.getInstance().initStickInfo()
GimbalManager.getInstance().initGimbalInfo()
AlternateLandingManager.getInstance().initAlterLandingInfo()
OSDManager.getInstance().initOsd()
FlightTaskProgressManager.getInstance().initFlightTaskProgress()
MediaManager.getInstance().init()
StreamManager.getInstance().initStreamManager()
LEDsSettingsManager.getInstance().initLEDsInfo()
RTKManager.getInstance().initRTKInfo()
//负载
//PayloadWidgetManager.getInstance().initPayloadInfo()
//初始化上报
LTEManager.getInstance().initLTEInfo()
WirelessLinkManager.getInstance().initWirelessLink()
CameraManager.getInstance().initCameraInfo()
//
NavigationSatelliteSystemManager.getInstance().initNavigationSatelliteSystem()
NavigationSatelliteSystemManager.getInstance().setNavigationSatelliteSystem()
//ApronArucoDetect.getInstance().init()
MissionV3Manager.getInstance().initMissionManager()
enableStream()
initCameraStream()
startVtxHeartbeat()
//
GeoidManager.getInstance().init(this);
//开启雷达监听器
//PerceptionManager.getInstance().isladraopeninti()
MediaDataCenter.getInstance().cameraStreamManager.setVisionAssistViewDirection(
VisionAssistDirection.DOWN, object : CommonCallbacks.CompletionCallback {
override fun onSuccess() {
LogUtil.log(TAG, "开启成功")
}
override fun onFailure(p0: IDJIError) {
LogUtil.log(TAG, "开启失败" + p0)
}
})
val leDsSettings = LEDsSettings()
leDsSettings.setNavigationLEDsOn(false)
leDsSettings.setStatusIndicatorLEDsOn(true)
leDsSettings.setFrontLEDsOn(true)
KeyManager.getInstance().setValue<LEDsSettings?>(
KeyTools.createKey<LEDsSettings?>(FlightControllerKey.KeyLEDsSettings),
leDsSettings,
object : CompletionCallback {
override fun onSuccess() {
LogUtil.log(TAG, "夜航灯关闭成功")
}
override fun onFailure(idjiError: IDJIError) {
LogUtil.log(TAG, "夜航灯关闭失败")
}
})
LogUtil.log(TAG, "自定义推流方式:" + PreferenceUtils.getInstance().customStreamType)
Handler(Looper.getMainLooper()).postDelayed({
@ -680,28 +944,55 @@ open class MainActivity : BaseActivity() {
2 -> StreamManager.getInstance().startLiveWithCustom()
else -> StreamManager.getInstance().startLiveWithCustom()
}
val scanner = SimplePortScanner.getInstance()
scanner.setOnPortCheckListener(object : SimplePortScanner.OnPortCheckListener {
override fun onPortOpen() {
//LogUtil.log("qwq","✅ 本地8554端口已开启每3秒扫描")
}
override fun onPortClosed() {
LogUtil.log("qwq", "❌ 本地8554端口已关闭每3秒扫描")
//重新开启这个rtp
StreamManager.getInstance().startLiveWithRTSP();
}
})
}, 5000) // 参数别改5秒延迟确保相机就绪
LogUtil.log(TAG, "推流类型:" + PreferenceUtils.getInstance().customStreamType)
}
}
}
private fun enableStream() {
cameraManager.enableStream(ComponentIndexType.PORT_1, true);
cameraManager.enableStream(ComponentIndexType.FPV, true);
}
@SuppressLint("SuspiciousIndentation")
private fun initmixStream() {
}
@SuppressLint("SuspiciousIndentation")
private fun initCameraStream() {
private fun initFpvStream() {
cameraManager.addFrameListener(
ComponentIndexType.FPV,
ICameraStreamManager.FrameFormat.YUV420_888
) { frameData, _, _, width, height, _ ->
Movement.getInstance().isVtx = true
//检测到图传
updateVtxHeartbeat()
streamReceive = true
DualCaptureHelper.getInstance().onFrame(height, width, frameData)
// DualCaptureHelper.getInstance().onFrame(height, width, frameData)
// if (shouldExecute) {
if (startArucoType == 1&& ApronArucoStatus.getInstance().canProcess(ApronArucoStatus.CameraSource.DOWNWARD)) {
// if (startArucoType == 1&& ApronArucoStatus.getInstance().canProcess(ApronArucoStatus.CameraSource.DOWNWARD)) {
synchronized(Synchronizedstatus.LOCK_OBJ) {
if (!Synchronizedstatus.isIsruningframe()) {
try {
Synchronizedstatus.setIsruningframe(true)
if (startArucoType == 1) {
ApronArucoDetect.getInstance()?.detectArucoTags(
height,
width,
@ -716,20 +1007,33 @@ open class MainActivity : BaseActivity() {
dictionary
)
}
} finally {
Synchronizedstatus.setIsruningframe(false)
}
//云台
}
}
}
}
@SuppressLint("SuspiciousIndentation")
private fun initCameraStream() {
cameraManager.addFrameListener(
ComponentIndexType.PORT_1,
ICameraStreamManager.FrameFormat.YUV420_888
) { frameData, _, _, width, height, _ ->
Movement.getInstance().isVtx = true
//检测到图传
updateVtxHeartbeat()
streamReceive = true
DualCaptureHelper.getInstance().onFrame(height, width, frameData)
// DualCaptureHelper.getInstance().onFrame(height, width, frameData)
// if (shouldExecute) {
if (startArucoType == 1&&ApronArucoStatus.getInstance().canProcess(ApronArucoStatus.CameraSource.GIMBAL)) {
ApronArucoDetect.getInstance()?.detectArucoTags(
// if (startArucoType == 1&& ApronArucoStatus.getInstance().canProcess(ApronArucoStatus.CameraSource.DOWNWARD)) {
synchronized(Synchronizedstatus.LOCK_OBJ) {
if (!Synchronizedstatus.isIsruningframe()) {
try {
Synchronizedstatus.setIsruningframe(true)
if (startArucoType == 1) {
ApronArucoDetectPort.getInstance()?.detectArucoTags(
height,
width,
frameData,
@ -743,12 +1047,21 @@ open class MainActivity : BaseActivity() {
dictionary
)
}
} finally {
Synchronizedstatus.setIsruningframe(false)
}
}
}
}
}
}
// private val mLoaderCallback: BaseLoaderCallback = object : BaseLoaderCallback(this) {
// override fun onManagerConnected(status: Int) {
@ -771,6 +1084,8 @@ open class MainActivity : BaseActivity() {
object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
override fun onSuccess(emptyMsg: EmptyMsg?) {
LogUtil.log(TAG, "取消降落,识别机库二维码")
if (PreferenceUtils.getInstance().cameraLocationType == 3) {
Handler().postDelayed(Runnable {
if (!ApronArucoDetect.getInstance().isTriggerSuccess) {
LogUtil.log(TAG, "图传异常:飞往备降点")
@ -778,11 +1093,21 @@ open class MainActivity : BaseActivity() {
AlternateLandingManager.getInstance().startTaskProcess(null)
}
}, 6000)
} else {
Handler().postDelayed(Runnable {
if (!ApronArucoDetectPort.getInstance().isTriggerSuccess) {
LogUtil.log(TAG, "图传异常:飞往备降点")
//测试图传丢失
AlternateLandingManager.getInstance().startTaskProcess(null)
}
}, 6000)
}
if (startArucoType == 1) {
return
}
startArucoType = 1
ApronArucoDetect.getInstance().setDetectedBigMarkers()
ApronArucoDetectPort.getInstance().setDetectedBigMarkers()
DroneHelper.getInstance().setGimbalPitchDegree()
//每次触发识别二维码时,为避免获取控制权失败,使多次获取控制权
DroneHelper.getInstance().isVirtualStickEnable = false
@ -796,6 +1121,7 @@ open class MainActivity : BaseActivity() {
startArucoType = 1
LogUtil.log(TAG, "取消降落,识别机库二维码失败:" + Gson().toJson(error))
ApronArucoDetect.getInstance().setDetectedBigMarkers()
ApronArucoDetectPort.getInstance().setDetectedBigMarkers()
DroneHelper.getInstance().setGimbalPitchDegree()
//每次触发识别二维码时,为避免获取控制权失败,使多次获取控制权
DroneHelper.getInstance().isVirtualStickEnable = false
@ -809,6 +1135,7 @@ open class MainActivity : BaseActivity() {
object : CommonCallbacks.CompletionCallbackWithParam<EmptyMsg?> {
override fun onSuccess(emptyMsg: EmptyMsg?) {
LogUtil.log(TAG, "取消降落,识别备降点二维码")
if (PreferenceUtils.getInstance().cameraLocationType == 3) {
Handler().postDelayed(Runnable {
if (!AlternateArucoDetect.getInstance().isTriggerSuccess) {
LogUtil.log(TAG, "图传异常:备降点直接降落")
@ -816,6 +1143,15 @@ open class MainActivity : BaseActivity() {
FlightManager.getInstance().startAutoLanding(null)
}
}, 4000)
} else {
Handler().postDelayed(Runnable {
if (!AlternateArucoDetect.getInstance().isTriggerSuccess) {
LogUtil.log(TAG, "图传异常:备降点直接降落")
//测试图传丢失
FlightManager.getInstance().startAutoLanding(null)
}
}, 4000)
}
if (startArucoType == 2) {
return
}

View File

@ -233,8 +233,6 @@ public abstract class BaseManager {
}
}
/**
* 上报航线任务进度
*/
@ -252,17 +250,20 @@ public abstract class BaseManager {
ext.setWayline_mission_state(Movement.getInstance().getTask_wayline_mission_state());
final FlightTaskProgress.Data.Output.Progress progress = new FlightTaskProgress.Data.Output.Progress();
// LogUtil.log(TAG,"CurrentWayline"+CurrentWayline.getInstance().getWaypoints()+"size"+CurrentWayline.getInstance().getWaypoints().size()
// +"getTask_wayline_mission_state"+Movement.getInstance().getTask_wayline_mission_state());
// +"getTask_wayline_mission_state"+Movement.getInstance().getTask_wayline_mission_state()+"percent"+(100 * (Movement.getInstance().getTask_current_waypoint_index() + 1)
// / CurrentWayline.getInstance().getWaypoints().size()));
if (CurrentWayline.getInstance().getWaypoints() != null
&& CurrentWayline.getInstance().getWaypoints().size() > 0
&& Movement.getInstance().getTask_wayline_mission_state() == 6) {
) {
//这个没执行到
progress.setPercent((100 * (Movement.getInstance().getCurrentWaypointIndex() + 1)
progress.setPercent((100 * (Movement.getInstance().getTask_current_waypoint_index() + 1)
/ CurrentWayline.getInstance().getWaypoints().size()));
}
progress.setCurrent_step(Movement.getInstance().getTask_current_step());
if (Movement.getInstance().isMissionFinish1()) {

View File

@ -13,6 +13,7 @@ import com.aros.apron.constant.AMSConfig;
import com.aros.apron.constant.Constant;
import com.aros.apron.entity.ApronExecutionStatus;
import com.aros.apron.entity.MessageDown;
import com.aros.apron.entity.MissionDataBean;
import com.aros.apron.entity.Movement;
import com.aros.apron.entity.SpeakerAudioPlayProgress;
import com.aros.apron.entity.Synchronizedstatus;
@ -28,6 +29,9 @@ import com.aros.apron.manager.StickManager;
import com.aros.apron.manager.StreamManager;
import com.aros.apron.manager.SystemManager;
import com.aros.apron.manager.TakeOffToPointManager;
import com.aros.apron.tools.ApronArucoDetect;
import com.aros.apron.tools.ApronArucoDetectPort;
import com.aros.apron.tools.Generakmztools;
import com.aros.apron.tools.LogUtil;
import com.aros.apron.tools.MqttManager;
import com.aros.apron.tools.PreferenceUtils;
@ -53,6 +57,7 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended {
private String TAG = "MqttCallBack";
Object lock = Synchronizedstatus.LOCK_OBJ;
@Override
public void connectionLost(Throwable cause) {
LogUtil.log(TAG, "MQtt connectionLost:"+cause.toString());
@ -119,7 +124,6 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended {
if(topic.equals(AMSConfig.DOWN_UAV_PSDK_EVENT)){
//负载设置控件
}else {
switch (message.getMethod()) {
case Constant.PILOT_ON:
@ -156,25 +160,27 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended {
break;
case Constant.FLIGHTTASK_EXECUTE:
synchronized(lock){
if(!Synchronizedstatus.getFlighttaskExecuteStatus()){
Synchronizedstatus.setFlighttaskExecuteStatus(true);
// 检查是否是第一次收到航线指令
if(Synchronizedstatus.isIsruning()){
LogUtil.log(TAG, "自检正在运行");
return;
} else if(!Synchronizedstatus.getInitStatus()){
Synchronizedstatus.setIsruning(true);
//自检
MissionV3Manager.getInstance().checkVtxWithDelay(()->{
Synchronizedstatus.setIsruning(false);
Synchronizedstatus.setInitStatus(true);
});
}else if(Synchronizedstatus.getInitStatus()){
LogUtil.log(TAG, "收到:航线" + jsonString);
//关闭避障
PerceptionManager.getInstance().setPerceptionEnable(false);
LogUtil.log(TAG,"关闭避障");
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
//设置modecode
Movement.getInstance().setMode_code(1);
//设置标志为
Movement.getInstance().setFlightmode(1);
//回复
sendMsg2Server(message);
//存储最新消息并开始自检
MissionV3Manager.getInstance().taskExecute(message);
}else{
//直接回复
sendMsg2Server(message);
return;
Synchronizedstatus.setIsruning(true);
}
}
break;
@ -191,8 +197,19 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended {
LogUtil.log(TAG, "收到:返航" + jsonString);
//自动返航 (如果调用方法失败了 这个设置就有一个问题但是为了方便看懂我就放这里了没放成功的回调里面)
Movement.getInstance().setMode_code(9);
if(!Movement.getInstance().isAlternate()){
if(!Movement.getInstance().isAlternate()&&!ApronArucoDetectPort.getInstance().isStartAruco()&&!ApronArucoDetect.getInstance().isStartAruco()){
// if(Movement.getInstance().getElevation()<15){
//
//
//
// }else{
// FlightManager.getInstance().startGoHome(message);
// }
FlightManager.getInstance().startGoHome(message);
}else{
sendMsg2Server(message);
sendEvent2Server("正在视觉或飞往备降不允许返航",1);
}
break;
case Constant.INBOUND:
@ -216,15 +233,33 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended {
ApronExecutionStatus.getInstance().setServerReplyTaskFail(true);
break;
case Constant.TAKEOFF_TO_POINT:
// //1.检查图传是否连接
// MissionDataBean data = new Gson().fromJson(new Gson().toJson(message.getData()), MissionDataBean.class);
// Boolean generateKmz = Generakmztools.getInstance().generateKmz(data);
synchronized(lock){
if(Synchronizedstatus.isIsruning()){
LogUtil.log(TAG, "自检正在运行");
return;
} else if(!Synchronizedstatus.getInitStatus()){
Synchronizedstatus.setIsruning(true);
//自检
TakeOffToPointManager.getInstance().checkVtxWithDelay(()->{
Synchronizedstatus.setIsruning(false);
Synchronizedstatus.setInitStatus(true);
});
}else if(Synchronizedstatus.getInitStatus()){
LogUtil.log(TAG, "收到:一键起飞" + jsonString);
//设置modecode
Movement.getInstance().setMode_code(1);
//设置标志为指令飞行
Movement.getInstance().setFlightmode(2);
TakeoffProgressScheduler.getInstance().startReporting();
TakeOffToPointManager.getInstance().taskExecute(message);
Synchronizedstatus.setIsruning(true);
}
}
break;
case Constant.FLY_TO_POINT:
LogUtil.log(TAG, "收到:飞向目标点" + jsonString);
@ -369,7 +404,6 @@ public class MqttCallBack extends BaseManager implements MqttCallbackExtended {
break;
case Constant.SPEAKER_PLAY_STOP:
LogUtil.log(TAG, "收到:喊话器-停止播放" + jsonString);
SpeakerManager.getInstance().speakerStop(message);
break;
case Constant.SPEAKER_PLAY_MODE_SET:

View File

@ -57,7 +57,7 @@ public class Movement {
private int landingPower;//降落电量所需百分比
private int lowBatteryRTHState;//智能低电量返航状态 0未触发智能低电量返航 1触发智能低电量返航飞行器正在倒计时 2执行智能低电量返航 3智能低电量返航被取消
private String missionName;//当前正在执行的航线名
private int currentWaypointIndex=-1;//当前航点下标
private int currentWaypointIndex=0;//当前航点下标
private boolean planeWing;//飞机是否在飞
private boolean isMotorsOn;//电机是否起转
@ -103,7 +103,7 @@ public class Movement {
private String remoteSecondBatteryPercent;//遥控器外接电池剩余电量百分比
private List<PayloadInfo> payloadInfos;//当前飞机负载设备信息
private boolean propellerRotation;//飞机是否正在低速慢转桨
private boolean vtx;//检查图传是否正常
private volatile boolean vtx;//检查图传是否正常
private int missionType;//任务类型 一键起飞航线定频推送只会推送3
private boolean virtualStickStatus;//前端判断是否显示/隐藏手控按钮
private boolean cancelVirtualStickStatus;//前端判断是否显示/隐藏取消手控按钮
@ -132,8 +132,8 @@ public class Movement {
private int thermal_isotherm_state;
private int thermal_isotherm_upper_limit;
private int gimbal_pitch;
private int gimbal_roll;
private double gimbal_pitch;
private double gimbal_roll;
private double gimbal_yaw;
private int capacity_percent;
@ -311,7 +311,7 @@ public class Movement {
// ========== 一键起飞相关字段 ==========
private boolean takeofftopointmission;
private String takeoff_status; // task_ready/wayline_progress/wayline_ok/wayline_failed/wayline_cancel/task_finish
private volatile String takeoff_status="task_ready"; // task_ready/wayline_progress/wayline_ok/wayline_failed/wayline_cancel/task_finish
private int takeoff_result; // 0成功非0错误
private float takeoff_remaining_distance; // 剩余距离
private float takeoff_remaining_time; // 剩余时间
@ -530,7 +530,7 @@ public class Movement {
}
//用来判断是什么起飞type
private int flightmode=0; //0代表没有操作 1代表航线飞行 2一键代表指令飞行 3flyto一键和flyto
private volatile int flightmode=0; //0代表没有操作 1代表航线飞行 2一键代表指令飞行 3flyto一键和flyto
private boolean takeofftopoint;
private boolean opendrc=false; //true 是开启 false 是关闭
@ -1698,19 +1698,19 @@ public class Movement {
this.thermal_isotherm_upper_limit = thermal_isotherm_upper_limit;
}
public int getGimbal_pitch() {
public double getGimbal_pitch() {
return gimbal_pitch;
}
public void setGimbal_pitch(int gimbal_pitch) {
public void setGimbal_pitch(double gimbal_pitch) {
this.gimbal_pitch = gimbal_pitch;
}
public int getGimbal_roll() {
public double getGimbal_roll() {
return gimbal_roll;
}
public void setGimbal_roll(int gimbal_roll) {
public void setGimbal_roll(double gimbal_roll) {
this.gimbal_roll = gimbal_roll;
}

View File

@ -431,8 +431,8 @@ public class Osd {
}
public static class _$5300 {
private int gimbal_pitch;
private int gimbal_roll;
private double gimbal_pitch;
private double gimbal_roll;
private double gimbal_yaw;
private double measure_target_altitude;
private int measure_target_distance;
@ -449,19 +449,19 @@ public class Osd {
private int thermal_isotherm_upper_limit;
private int version;
public int getGimbal_pitch() {
public double getGimbal_pitch() {
return gimbal_pitch;
}
public void setGimbal_pitch(int gimbal_pitch) {
public void setGimbal_pitch(double gimbal_pitch) {
this.gimbal_pitch = gimbal_pitch;
}
public int getGimbal_roll() {
public double getGimbal_roll() {
return gimbal_roll;
}
public void setGimbal_roll(int gimbal_roll) {
public void setGimbal_roll(double gimbal_roll) {
this.gimbal_roll = gimbal_roll;
}

View File

@ -1,5 +1,7 @@
package com.aros.apron.entity;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class TakeoffToPointProgress {
@ -59,13 +61,19 @@ public class TakeoffToPointProgress {
}
public static class Data {
@SerializedName("flight_id")
private String flightId;
@SerializedName("planned_path_points")
private List<PlannedPathPoint> plannedPathPoints;
@SerializedName("remaining_distance")
private Float remainingDistance;
@SerializedName("remaining_time")
private Float remainingTime;
private Integer result;
private String status;
@SerializedName("track_id")
private String trackId;
@SerializedName("way_point_index")
private Integer wayPointIndex;
public String getFlightId() {

View File

@ -19,6 +19,7 @@ import com.aros.apron.entity.MissionPoint;
import com.aros.apron.entity.Movement;
import com.aros.apron.tools.DomParserKML;
import com.aros.apron.tools.DomParserWPML;
import com.aros.apron.tools.Generakmzaltheratools;
import com.aros.apron.tools.LogUtil;
import com.aros.apron.tools.PreferenceUtils;
import com.aros.apron.tools.ZipUtil;
@ -273,83 +274,15 @@ public class AlternateLandingManager extends BaseManager {
}
public void creatMissionAndUpload() {
// 创建第一个 MissionPoint 对象
MissionPoint missionPoint = new MissionPoint();
missionPoint.setLat(String.valueOf(Movement.getInstance().getLatitude()));
missionPoint.setLng(String.valueOf(Movement.getInstance().getLongitude()));
missionPoint.setSpeed(8.0);
missionPoint.setExecuteHeight(Movement.getInstance().getElevation()
> Double.parseDouble(PreferenceUtils.getInstance().getAlternatePointSecurityHeight())
? Movement.getInstance().getElevation() :
Double.parseDouble(PreferenceUtils.getInstance().getAlternatePointSecurityHeight()));
// 创建第二个 MissionPoint 对象
MissionPoint missionPoint1 = new MissionPoint();
missionPoint1.setLat(PreferenceUtils.getInstance().getAlternatePointLat());
missionPoint1.setLng(PreferenceUtils.getInstance().getAlternatePointLon());
LogUtil.log(TAG, "备降点经纬度:" + PreferenceUtils.getInstance().getAlternatePointLat() +
"/" + PreferenceUtils.getInstance().getAlternatePointLon());
missionPoint1.setSpeed(7.0);
missionPoint1.setExecuteHeight(Movement.getInstance().getElevation()
> Double.parseDouble(PreferenceUtils.getInstance().getAlternatePointSecurityHeight())
? Movement.getInstance().getElevation() - 1 :
Double.parseDouble(PreferenceUtils.getInstance().getAlternatePointSecurityHeight()));
// 创建一个 MissionPoint 列表
List<MissionPoint> missionPoints = new ArrayList<>();
missionPoints.add(missionPoint);
missionPoints.add(missionPoint1);
// 创建 FlightMission 对象并设置其属性
FlightMission flightMission = new FlightMission();
flightMission.setPoints(missionPoints);
flightMission.setMissionId(2);
flightMission.setFinishAction("autoLand");
flightMission.setTakeOffSecurityHeight(Float.parseFloat(PreferenceUtils.getInstance().getAlternatePointSecurityHeight()));
flightMission.setSpeed(15.0);
LogUtil.log(TAG, "当前高度:" + Movement.getInstance().getElevation()
+ "---飞往备降点高度:" + Double.parseDouble(PreferenceUtils.getInstance().getAlternatePointSecurityHeight())
+ "---航线安全起飞高度:" + Float.parseFloat(PreferenceUtils.getInstance().getAlternatePointSecurityHeight()));
sendEvent2Server( "开始生成备降点航线",1);
// 生成xml文件
File file1 = new File(
getExternalStoragePublicDirectory("KMZ").getAbsolutePath() + File.separator + "wpmz");
if (!file1.exists()) {
if (file1.mkdirs()) {
LogUtil.log(TAG, "生成备降航线成功");
sendEvent2Server( "生成备降路线文件成功",1);
} else {
LogUtil.log(TAG, "生成备降航线失败");
sendEvent2Server( "生成备降航线失败",2);
sendEvent2Server( "生成备降航线失败",2);
Boolean generatealtKmz = Generakmzaltheratools.getInstance().generateKmz();
if(generatealtKmz==true){
sendEvent2Server( "生成备降点航线成功",1);
}
}
DomParserKML domParserKML = new DomParserKML(getExternalStoragePublicDirectory("KMZ").getAbsolutePath() + File.separator + "wpmz",
"/template.kml");
domParserKML.createKml(flightMission);
DomParserWPML domParserWPML = new DomParserWPML(getExternalStoragePublicDirectory("KMZ").getAbsolutePath() + File.separator + "wpmz",
"/waylines.wpml");
domParserWPML.createWpml(flightMission);
File kmzFile = new File(getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + File.separator + "alternate.kmz");
kmzFile.getParentFile().mkdirs();
try {
ZipUtil.zip(getExternalStoragePublicDirectory("KMZ").getAbsolutePath() + "/wpmz", getExternalStoragePublicDirectory("KMZ").getAbsolutePath() + File.separator + "alternate.kmz");
} catch (IOException e) {
sendEvent2Server( "备降任务生成异常",2);
throw new RuntimeException(e);
}
String kmzPath = "/storage/self/primary/DJIDemo/cache/kmz/alternate.kmz";
IWaypointMissionManager missionManager = WaypointMissionManager.getInstance();
missionManager.pushKMZFileToAircraft(getExternalStoragePublicDirectory("KMZ").getAbsolutePath() + File.separator + "alternate.kmz", new CommonCallbacks.CompletionCallbackWithProgress<Double>() {
missionManager.pushKMZFileToAircraft(kmzPath, new CommonCallbacks.CompletionCallbackWithProgress<Double>() {
@Override
public void onProgressUpdate(Double aDouble) {
LogUtil.log(TAG, "备降点航线上传进度:" + aDouble + "%");

View File

@ -1,6 +1,8 @@
package com.aros.apron.manager;
import static dji.sdk.keyvalue.key.KeyTools.createKey;
import androidx.annotation.Nullable;
import com.aros.apron.base.BaseManager;
@ -36,7 +38,7 @@ public class BatteryManager extends BaseManager {
public void initBatteryInfo() {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(BatteryKey.KeyConnection, 0));
Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
if (isConnect != null && isConnect) {
LowBatteryRTHInfo lowBatteryRTHInfo = KeyManager.getInstance().getValue(KeyTools.createKey(FlightControllerKey.

View File

@ -893,6 +893,7 @@ public void stopRecordVideo(MessageDown message) {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "停止录像成功");
sendMsg2Server(message);
}
@Override

View File

@ -18,6 +18,7 @@ import com.aros.apron.entity.MessageDown;
import com.aros.apron.entity.Movement;
import com.aros.apron.tools.AlternateArucoDetect;
import com.aros.apron.tools.ApronArucoDetect;
import com.aros.apron.tools.ApronArucoDetectPort;
import com.aros.apron.tools.DroneHelper;
import com.aros.apron.tools.LocationUtils;
import com.aros.apron.tools.LogUtil;
@ -29,13 +30,20 @@ import com.google.gson.Gson;
import org.greenrobot.eventbus.EventBus;
import java.util.List;
import java.util.Objects;
import dji.sdk.keyvalue.key.AirLinkKey;
import dji.sdk.keyvalue.key.CameraKey;
import dji.sdk.keyvalue.key.FlightControllerKey;
import dji.sdk.keyvalue.key.KeyTools;
import dji.sdk.keyvalue.key.ProductKey;
import dji.sdk.keyvalue.key.RtkMobileStationKey;
import dji.sdk.keyvalue.value.camera.CameraExposureCompensation;
import dji.sdk.keyvalue.value.camera.CameraExposureMode;
import dji.sdk.keyvalue.value.camera.CameraShutterSpeed;
import dji.sdk.keyvalue.value.camera.CameraVideoStreamSourceType;
import dji.sdk.keyvalue.value.common.Attitude;
import dji.sdk.keyvalue.value.common.ComponentIndexType;
import dji.sdk.keyvalue.value.common.EmptyMsg;
import dji.sdk.keyvalue.value.common.LocationCoordinate2D;
import dji.sdk.keyvalue.value.common.LocationCoordinate3D;
@ -79,6 +87,7 @@ public class FlightManager extends BaseManager {
private IDeviceStatusManager iDeviceStatusManager;
private boolean isFlying;
private boolean isMotorsOn;
private int count = 0;
private FlightManager() {
}
@ -105,15 +114,21 @@ public class FlightManager extends BaseManager {
// 飞机未连接时设置未连接状态
Movement.getInstance().setMode_code(14);
OSDManager.getInstance().pushFlightAttitude();
Movement.getInstance().setMissionFinish(true);
} else {
PerceptionManager.getInstance().setPerceptionEnable(false);
LogUtil.log(TAG,"关闭避障");
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
PerceptionManager.getInstance().setObstacleAvoidanceupEnabled(false);
PerceptionManager.getInstance().setObstacleAvoidancedownEnabled(false);
PerceptionManager.getInstance().closeRadarManager(false);
if (count == 0) {
sendEvent2Server("开始上传日志文件", 1);
//上传日志文件
LogUploadManager.getInstance().uploadTodayLog();
count++;
}
//连上就待机
MediaDataCenter.getInstance().getCameraStreamManager().setVisionAssistViewDirection(VisionAssistDirection.DOWN, new CommonCallbacks.CompletionCallback() {
@Override
@ -156,6 +171,7 @@ public class FlightManager extends BaseManager {
public void onDeviceStatusUpdate(DJIDeviceStatus from, DJIDeviceStatus to) {
if (to != null && !TextUtils.isEmpty(to.description())) {
LogUtil.log(TAG, "setPlaneMessage" + to.description());
sendEvent2Server("PlaneMessage"+to.description(),1);
Movement.getInstance().setPlaneMessage(to.description());
pushFlightAttitude();
}
@ -511,10 +527,16 @@ public class FlightManager extends BaseManager {
@Override
public void onValueChange(@Nullable Attitude attitude, @Nullable Attitude t1) {
if (t1 != null) {
Movement.getInstance().setAttitude_pitch(t1.getPitch());
Movement.getInstance().setAttitude_head(t1.getYaw());
double pitch = Math.round(t1.getPitch() * 10.0) / 10.0;
double yaw = Math.round(t1.getYaw() * 10.0) / 10.0;
double roll = Math.round(t1.getRoll() * 10.0) / 10.0;
Movement.getInstance().setAttitude_pitch(pitch);
Movement.getInstance().setAttitude_head(yaw);
Movement.getInstance().setAttitude_roll(roll);
Movement.getInstance().setTask_attitude_head(t1.getYaw());
Movement.getInstance().setAttitude_roll(t1.getRoll());
}
pushFlightAttitude();
}
@ -813,7 +835,7 @@ public class FlightManager extends BaseManager {
private void closeCabinDoor() {
// 获取飞行状态和航线状态
boolean isFlyingAndHeightOk = isFlying && Movement.getInstance().getElevation() > 10 && Movement.getInstance().getElevation()>30;
boolean isFlyingAndHeightOk = isFlying && Movement.getInstance().getElevation() > 30;
boolean isDebugMode = PreferenceUtils.getInstance().getIsDebugMode();
String missionState = Movement.getInstance().getWaypointMissionExecuteState();
boolean isMissionExecuting = (!TextUtils.isEmpty(missionState) &&
@ -825,7 +847,9 @@ public class FlightManager extends BaseManager {
sendCloseCabinDoorMsg = true;
DockCloseManager.getInstance().sendDockCloseMsg2Server();
PerceptionManager.getInstance().setPerceptionEnable(true);
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(true);
PerceptionManager.getInstance().setObstacleAvoidancedownEnabled(true);
PerceptionManager.getInstance().setObstacleAvoidanceupEnabled(true);
PerceptionManager.getInstance().closeRadarManager(true);
}
}
@ -855,16 +879,147 @@ public class FlightManager extends BaseManager {
//降落时将云台朝下
private void gimbalDownwards() {
if (goHomeExecutionState == GoHomeState.LANDING.value()
&& Movement.getInstance().getElevation() > 11) {
// DroneHelper.getInstance().setGimbalPitchDegree();
// //将镜头设置为自动对焦
&& Movement.getInstance().getElevation() > 11 && !isGimbalDownwards) {
DroneHelper.getInstance().setGimbalPitchDegree();
//将镜头设置为自动对焦
DroneHelper.getInstance().setCameraFocusMode();
new android.os.Handler().postDelayed(() -> {
setkuaim();
}, 500);
new android.os.Handler().postDelayed(() -> {
setCameraExposureMode();
}, 500);
//将镜头设置为自动对焦
// new android.os.Handler().postDelayed(() -> {
// setCameraExposureCompensation();
//// }, 500);
// new android.os.Handler().postDelayed(() -> {
// setKeyShutterSpeed();
// }, 500);
// // 等0.5秒后再执行相机设置给固件切换镜头留时间
// new android.os.Handler().postDelayed(() -> {
// DroneHelper.getInstance().setCameraFocusMode();
// isGimbalDownwards = true;
// }, 500);
isGimbalDownwards = true;
PerceptionManager.getInstance().setPerceptionEnable(false);
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
// if (Movement.getInstance().getIsRecording() == 1) {
// CameraManager.getInstance().stopRecordVideo(null);
// }
PerceptionManager.getInstance().setObstacleAvoidanceupEnabled(false);
PerceptionManager.getInstance().setObstacleAvoidancedownEnabled(false);
PerceptionManager.getInstance().closeRadarManager(false);
if (Movement.getInstance().getIsRecording() == 1) {
CameraManager.getInstance().stopRecordVideo(null);
}
}
}
private void setkuaim() {
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect != null && isConnect) {
//切换成广角镜头
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyCameraVideoStreamSource,
ComponentIndexType.PORT_1), CameraVideoStreamSourceType.WIDE_CAMERA, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "返航时将镜头切为广角");
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "返航切换广角失败:" + new Gson().toJson(error));
}
});
} else {
LogUtil.log(TAG, "降落切换广角失败:当前状态相机禁止操作");
}
}
public void setKeyShutterSpeed() {
Boolean cameraConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (cameraConnect != null && cameraConnect) {
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyShutterSpeed, ComponentIndexType.PORT_1), CameraShutterSpeed.SHUTTER_SPEED1_8000, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "设置快门速度成功");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "设置快门速度失败" + idjiError.toString());
}
});
} else {
LogUtil.log(TAG, "相机未连接");
}
}
//
//曝光-1
private void setCameraExposureCompensation() {
Boolean cameraConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (cameraConnect != null && cameraConnect) {
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyExposureCompensation, ComponentIndexType.PORT_1), CameraExposureCompensation.NEG_0EV, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "设置曝光-1成功");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "设置曝光-1失败" + idjiError.toString());
}
});
} else {
LogUtil.log(TAG, "相机未连接");
}
}
//快门优先
private void setCameraExposureMode() {
Boolean cameraConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (cameraConnect != null && cameraConnect) {
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyExposureMode, ComponentIndexType.PORT_1), CameraExposureMode.PROGRAM, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "快门优先曝光成功");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "快门优先曝光失败" + idjiError.toString());
}
});
} else {
LogUtil.log(TAG, "相机未连接");
}
}
//设置成
public void setCameraExposureModePROGRAM() {
Boolean cameraConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (cameraConnect != null && cameraConnect) {
KeyManager.getInstance().setValue(KeyTools.createKey(CameraKey.KeyExposureMode, ComponentIndexType.PORT_1), CameraExposureMode.PROGRAM, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "自动曝光成功");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "自动曝光失败" + idjiError.toString());
}
});
} else {
LogUtil.log(TAG, "相机未连接");
}
}
@ -895,7 +1050,7 @@ public class FlightManager extends BaseManager {
}
private static final double FLYING_HEIGHT_THRESHOLD_MAX = 15;
private static final double FLYING_HEIGHT_THRESHOLD_MAX = 20;
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;
@ -907,8 +1062,10 @@ public class FlightManager extends BaseManager {
boolean needTriggerApronArucoLand = PreferenceUtils.getInstance().getNeedTriggerApronArucoLand();
boolean needTriggerAlterArucoLand = PreferenceUtils.getInstance().getNeedTriggerAlterArucoLand();
double thresholdMax = triggerToAlternatePoint ? FLYING_HEIGHT_THRESHOLD_MAX_ALTERNATE : FLYING_HEIGHT_THRESHOLD_MAX;
LogUtil.log(TAG,"相对高度"+Movement.getInstance().getElevation()+"超声波高度"+Movement.getInstance().getUltrasonicHeight());
if (isFlying && (Movement.getInstance().getElevation() < thresholdMax && Movement.getInstance().getUltrasonicHeight()<50)&& !isSendDetect) {
if (isFlying && (Movement.getInstance().getElevation() < 13 && Movement.getInstance().getUltrasonicHeight() < 50) && !isSendDetect) {
double flyingHeight = Movement.getInstance().getElevation();
double thresholdMin = triggerToAlternatePoint ? FLYING_HEIGHT_THRESHOLD_MIN_ALTERNATE : FLYING_HEIGHT_THRESHOLD_MIN;
@ -920,7 +1077,6 @@ public class FlightManager extends BaseManager {
} else {
shouldTriggerDetection = goHomeExecutionState == 2 || needTriggerApronArucoLand || needTriggerAlterArucoLand;
}
if (shouldTriggerDetection) {
triggerArucoDetection();
}
@ -975,9 +1131,24 @@ public class FlightManager extends BaseManager {
}
}
// public void stopArucoDetectAndLanding(int i) {
// logLandingHeight(i);
// DroneHelper.getInstance().exitVirtualStickMode();
// EventBus.getDefault().post(FLAG_DOWN_LAND);
// PreferenceUtils.getInstance().setNeedTriggerApronArucoLand(false);
// PreferenceUtils.getInstance().setNeedTriggerAlterArucoLand(false);
// PreferenceUtils.getInstance().setTriggerToAlternatePoint(false);
// isGimbalReset = false;
// isTriggerLanding = true;
// isGimbalDownwards = false;
// }
// FlightManager.java
public void stopArucoDetectAndLanding(int i) {
logLandingHeight(i);
DroneHelper.getInstance().exitVirtualStickMode();
DroneHelper.getInstance().exitVirtualStickMode(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
// 只有释放控制权成功后才发送降落事件
EventBus.getDefault().post(FLAG_DOWN_LAND);
PreferenceUtils.getInstance().setNeedTriggerApronArucoLand(false);
PreferenceUtils.getInstance().setNeedTriggerAlterArucoLand(false);
@ -987,6 +1158,14 @@ public class FlightManager extends BaseManager {
isGimbalDownwards = false;
}
@Override
public void onFailure(@NonNull IDJIError error) {
// 释放控制权失败时的处理
LogUtil.log(TAG, "释放控制权失败,无法执行自动降落: " + error.toString());
// 可以添加重试逻辑或其他错误处理
}
});
}
/**
* 打印这里的条件判断是否满足降落停浆
@ -998,15 +1177,15 @@ public class FlightManager extends BaseManager {
if (PreferenceUtils.getInstance().getNeedTriggerAlterArucoLand()) {
return !isTriggerLanding && (isFlying || isMotorsOn) && AlternateArucoDetect.getInstance().isCanLanding();
} else {
return !isTriggerLanding && (isFlying || isMotorsOn) && (
ApronArucoDetect.getInstance().isCanLanding() || (ApronArucoDetect.getInstance().isStartFastStick()
&& ApronArucoDetect.getInstance().getCheckThrowingErrorsTimes() > 100));
return !isTriggerLanding && (isFlying || isMotorsOn) && (ApronArucoDetect.getInstance().isCanLanding() || ApronArucoDetectPort.getInstance().isCanLanding());
}
}
private void logLandingHeight(int i) {
LogUtil.log(TAG, "降落高度" + Movement.getInstance().getElevation() + "米---"
+ Movement.getInstance().getUltrasonicHeight() + "分米");
}
private void droneStorage() {
boolean isDebugMode = PreferenceUtils.getInstance().getIsDebugMode();
// 检查无人机是否满足降落和入库的条件
@ -1018,8 +1197,33 @@ public class FlightManager extends BaseManager {
isTriggerLanding = false;
sendCloseCabinDoorMsg = false;
ApronArucoDetect.getInstance().setCanLanding(false);
ApronArucoDetectPort.getInstance().setCanLanding(false);
// 发布事件通知其他组件停止Aruco检测
EventBus.getDefault().post(FLAG_STOP_ARUCO);
//setCameraExposureModePROGRAM();
if (Movement.getInstance().isIstakeoffex() == true && !Objects.equals(Movement.getInstance().getTakeoff_status(), "wayline_cancel")) {
Movement.getInstance().setTakeoff_status("task_finish");
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
TakeoffProgressScheduler.getInstance().sendProgressReport();
}
}, 1000);
sendEvent2Server("一键起飞已发送task_finish", 1);
} else if (Movement.getInstance().isIstakeoffex() == true && Objects.equals(Movement.getInstance().getTakeoff_status(), "wayline_cancel")) {
Movement.getInstance().setTakeoff_status("wayline_failed");
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
TakeoffProgressScheduler.getInstance().sendProgressReport();
}
}, 1000);
}
//调试模式下不上传媒体文件 不入库
if (!isDebugMode) {
//这里可能也会触发备降点关舱门的逻辑
@ -1046,16 +1250,10 @@ public class FlightManager extends BaseManager {
//Movement.getInstance().setMissionFinish(true);
// }, 1000);
//原有那个替换
if(Movement.getInstance().getMission_type()==0){
Movement.getInstance().setMissionFinish1(true);
//再发送一遍这个一键起飞事件的结果
if(Movement.getInstance().isIstakeoffex()==true){
Movement.getInstance().setTakeoff_status("task_finish");
TakeoffProgressScheduler.getInstance().sendProgressReport();
}
Movement.getInstance().setTask_current_step(25);
sendOpenCabinDoorMsg = false;
}
@ -1073,7 +1271,7 @@ public class FlightManager extends BaseManager {
WayLineExecutingInterruptManager.getInstance().onExecutingInterruptToDo();
} else {
Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
if (isConnect != null && isConnect) {
KeyManager.getInstance().performAction(createKey(FlightControllerKey.KeyStartGoHome), new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
@ -1085,9 +1283,7 @@ public class FlightManager extends BaseManager {
sendFailMsg2Server(message, "返航执行失败:" + getIDJIErrorMsg(error));
}
});
} else {
sendFailMsg2Server(message, "返航执行失败:飞控未连接");
}
}
}
@ -1295,6 +1491,7 @@ public class FlightManager extends BaseManager {
Movement.getInstance().setMode_code(3);
OSDManager.getInstance().pushFlightAttitude();
}
@Override
public void onFailure(@NonNull IDJIError error) {
sendFailMsg2Server(message, "紧急悬停获得控制权失败" + getIDJIErrorMsg(error));

View File

@ -34,7 +34,6 @@ public class FlightTaskProgressManager extends BaseManager {
if (Movement.getInstance().getMission_type()==0&&(Movement.getInstance().isPlaneWing()
|| Movement.getInstance().isMotorsOn()
|| Movement.getInstance().isMissionFinish1())) {
sendFlightTaskProgress2Server();
}
@ -53,6 +52,7 @@ public class FlightTaskProgressManager extends BaseManager {
};
private FlightTaskProgressManager() {
}
public static FlightTaskProgressManager getInstance() {

View File

@ -12,6 +12,7 @@ import com.aros.apron.base.BaseManager;
import com.aros.apron.entity.MessageDown;
import com.aros.apron.entity.Movement;
import com.aros.apron.tools.ApronArucoDetect;
import com.aros.apron.tools.ApronArucoDetectPort;
import com.aros.apron.tools.LogUtil;
import com.aros.apron.tools.PreferenceUtils;
import com.google.gson.Gson;
@ -57,6 +58,7 @@ public class GimbalManager extends BaseManager {
public void initGimbalInfo() {
ApronArucoDetect.getInstance().setDoublePayload(PreferenceUtils.getInstance().getCameraLocationType() == 2);
ApronArucoDetectPort.getInstance().setDoublePayload(PreferenceUtils.getInstance().getCameraLocationType() == 2);
LogUtil.log(TAG, "主摄像头位置:" + PreferenceUtils.getInstance().getCameraLocationType());
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(FlightControllerKey.KeyConnection));
@ -65,9 +67,14 @@ public class GimbalManager extends BaseManager {
@Override
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
if (newValue != null) {
Movement.getInstance().setGimbal_pitch(newValue.getPitch().intValue());
Movement.getInstance().setGimbal_roll(newValue.getRoll().intValue());
Movement.getInstance().setGimbal_yaw(newValue.getYaw().intValue());
// 保留2位小数
double pitch = Math.round(newValue.getPitch().doubleValue() * 10.0) / 10.0;
double roll = Math.round(newValue.getRoll().doubleValue() * 10.0) / 10.0;
double yaw = Math.round(newValue.getYaw().doubleValue() * 10.0) / 10.0;
Movement.getInstance().setGimbal_pitch(pitch);
Movement.getInstance().setGimbal_roll(roll);
Movement.getInstance().setGimbal_yaw(yaw);
}
}
});

View File

@ -32,7 +32,9 @@ import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import dji.sdk.keyvalue.key.FlightControllerKey;
import dji.sdk.keyvalue.key.KeyTools;
@ -63,6 +65,8 @@ public class MediaManager extends BaseManager {
private MediaFileListState mState = null;
private List<MediaFile> mediaFiles = new ArrayList<>();
/* ===== 已上传文件名集合(本次任务内有效) ===== */
private final Set<String> uploadedFileNames = new HashSet<>();
private MediaManager() {
}
@ -97,13 +101,22 @@ public class MediaManager extends BaseManager {
@Override
public void onSuccess() {
LogUtil.log(TAG, "进入媒体模式成功");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
MediaFileListDataSource source = new MediaFileListDataSource.Builder().setIndexType(ComponentIndexType.PORT_1).build();
// MediaDataCenter.getInstance().getMediaManager().setMediaFileDataSource(source);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
pullMediaFileListFromCamera();
isEnablePlayback = true;
}
},1000);
}, 3000);
isEnablePlayback = true;
}
}, 3000);
}
@Override
@ -118,7 +131,7 @@ public class MediaManager extends BaseManager {
enablePlayback();
} else {
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server( "媒体模式进入失败:关机",2);
sendEvent2Server("媒体模式进入失败:关机",1);
}
}
}, 1500);
@ -128,67 +141,123 @@ public class MediaManager extends BaseManager {
}
private int pullMediaFileListFromCameraFailTimes;
private int updatingWaitCount = 0;
private static final int MAX_UPDATING_WAIT = 60; // 最多等待30秒
private boolean pullqwq = false;
private boolean isPullMediaFileListFromCameraSuccess;
private void pullMediaFileListFromCamera() {
mState = MediaDataCenter.getInstance().getMediaManager().getMediaFileListState();
LogUtil.log(TAG, "当前状态:" + mState + ",准备拉取文件列表");
// 1. 当状态为IDLE时需要调用pullMediaFileListFromCamera拉取全量数据
// 2. 当状态为UP_TO_DATE时表示拉取完成可以获取数据
if (mState == MediaFileListState.IDLE) {
// 状态为IDLE开始拉取文件列表
LogUtil.log(TAG, "状态为IDLE开始拉取文件列表");
MediaDataCenter.getInstance().getMediaManager().pullMediaFileListFromCamera(new PullMediaFileListParam.Builder().count(-1).build(), new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
isPullMediaFileListFromCameraSuccess=true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (mState == MediaFileListState.UP_TO_DATE) {
mediaFiles =
MediaDataCenter.getInstance().getMediaManager().getMediaFileListData().getData();
//倒是看会不会上传
Movement.getInstance().setTask_media_count(mediaFiles.size());
if (mediaFiles != null&&mediaFiles.size()>0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
pullOriginalMediaFileFromCamera();
}
} else {
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("拉取媒体文件为空,可关机",2);
disablePlayback();
}
} else {
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("拉取媒体文件失败,可关机:"+mState,2);
disablePlayback();
}
}
},1000);
LogUtil.log(TAG, "拉取文件列表成功");
// 拉取成功后等待状态变为UP_TO_DATE
new Handler().postDelayed(MediaManager.this::pullMediaFileListFromCamera, 1000);
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, ""+pullMediaFileListFromCameraFailTimes+"拉取媒体文件失败:"+new Gson().toJson(idjiError));
if (!isPullMediaFileListFromCameraSuccess){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (pullMediaFileListFromCameraFailTimes < 10) {
pullMediaFileListFromCameraFailTimes++;
pullMediaFileListFromCamera();
}else{
LogUtil.log(TAG, "拉取媒体文件失败: " + new Gson().toJson(idjiError));
// 失败后重试最多重试3次
if (pullMediaFileListFromCameraFailTimes < 5) {
pullMediaFileListFromCameraFailTimes++;
LogUtil.log(TAG, "" + pullMediaFileListFromCameraFailTimes + "次重试...");
new Handler().postDelayed(MediaManager.this::pullMediaFileListFromCamera, 2000);
} else {
LogUtil.log(TAG, "重试次数达到上限,拉取失败");
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("拉取媒体文件失败",2);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
}
}
}, 1500);
}
});
} else if (mState == MediaFileListState.UP_TO_DATE) {
// 状态为UP_TO_DATE获取文件列表数据
LogUtil.log(TAG, "状态为UP_TO_DATE获取文件列表数据");
try {
List<MediaFile> rawList = MediaDataCenter.getInstance().getMediaManager().getMediaFileListData().getData();
// 过滤已上传文件
mediaFiles = new ArrayList<>();
Movement.getInstance().setTask_media_count(mediaFiles.size());
for (MediaFile mf : rawList) {
if (!uploadedFileNames.contains(mf.getFileName())) {
mediaFiles.add(mf);
} else {
LogUtil.log(TAG, "跳过已上传文件: " + mf.getFileName());
}
}
);
if (mediaFiles.isEmpty()) {
LogUtil.log(TAG, "所有文件均已上传,直接清理");
downLoadMediaFileIndex = 0;
removeAllFiles();
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
pullOriginalMediaFileFromCamera();
}
} catch (Exception e) {
LogUtil.log(TAG, "获取文件列表数据失败: " + e.getMessage());
// 发生异常时重试
if (pullMediaFileListFromCameraFailTimes < 5) {
pullMediaFileListFromCameraFailTimes++;
LogUtil.log(TAG, "" + pullMediaFileListFromCameraFailTimes + "次重试...");
new Handler().postDelayed(MediaManager.this::pullMediaFileListFromCamera, 2000);
} else {
LogUtil.log(TAG, "重试次数达到上限,拉取失败");
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("拉取媒体文件失败",2);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
}
}
} else {
// 其他状态如UPDATING等待状态变化
LogUtil.log(TAG, "状态为" + mState + ",等待状态变化...");
updatingWaitCount++;
// 增加超时处理避免无限等待
if (updatingWaitCount >= MAX_UPDATING_WAIT) {
LogUtil.log(TAG, "等待状态变化超时,强制关机");
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("媒体文件状态更新超时",2);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
return;
} else {
if (pullqwq == false) {
MediaDataCenter.getInstance().getMediaManager().pullMediaFileListFromCamera(new PullMediaFileListParam.Builder().count(-1).build(), new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG,"拉取成功");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG,"拉取失败");
}
});
pullqwq = true;
}
}
new Handler().postDelayed(MediaManager.this::pullMediaFileListFromCamera, 1000);
}
}
@RequiresApi(Build.VERSION_CODES.O)
public void pullOriginalMediaFileFromCamera() {
final MediaFile mediaFile = mediaFiles.get(downLoadMediaFileIndex);
@ -223,10 +292,14 @@ public class MediaManager extends BaseManager {
offset = file.length();
}
FileOutputStream outputStream = null;
BufferedOutputStream bos = null;
try {
FileOutputStream outputStream = new FileOutputStream(file, true);
final FileOutputStream finalOutputStream = new FileOutputStream(file, true);
outputStream = finalOutputStream;
long beginTime = System.currentTimeMillis();
BufferedOutputStream bos = new BufferedOutputStream(outputStream);
final BufferedOutputStream finalBos = new BufferedOutputStream(finalOutputStream);
bos = finalBos;
mediaFile.pullOriginalMediaFileFromCamera(0L, new MediaFileDownloadListener() {
@Override
@ -243,8 +316,8 @@ public class MediaManager extends BaseManager {
@Override
public void onRealtimeDataUpdate(byte[] data, long position) {
try {
bos.write(data);
bos.flush();
finalBos.write(data);
finalBos.flush();
} catch (IOException e) {
Log.e(TAG, "Write error: " + e.getMessage());
}
@ -255,25 +328,52 @@ public class MediaManager extends BaseManager {
LogUtil.log(TAG, "File:" + downLoadMediaFileIndex + "fileName:" + mediaFile.getFileName() + " downloaded successfully.");
minIOUpLoad(file, mediaFile);
try {
outputStream.close();
bos.close();
if (finalBos != null) finalBos.close();
if (finalOutputStream != null) finalOutputStream.close();
} catch (IOException error) {
LogUtil.log(TAG, "File " + downLoadMediaFileIndex + " error: " + error.getMessage());
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("文件流关闭失败",2);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
}
}
@Override
public void onFailure(IDJIError error) {
LogUtil.log(TAG, "File " + downLoadMediaFileIndex + ": " + mediaFile.getFileName() + " download failed: " + new Gson().toJson(error));
// 清理临时文件
if (file.exists()) {
file.delete();
}
// 关闭文件流
try {
if (finalBos != null) finalBos.close();
if (finalOutputStream != null) finalOutputStream.close();
} catch (IOException e) {
Log.e(TAG, "Error closing file: " + e.getMessage());
}
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("" + downLoadMediaFileIndex + "个文件下载失败",2);
downLoadMediaFileIndex = 0;
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
}
});
} catch (IOException e) {
Log.e(TAG, "Error opening file: " + e.getMessage());
// 发生异常时也要确保关机
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("文件打开失败",2);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
// 关闭文件流
try {
if (bos != null) bos.close();
if (outputStream != null) outputStream.close();
} catch (IOException ex) {
Log.e(TAG, "Error closing file: " + ex.getMessage());
}
}
}
@ -371,6 +471,7 @@ public class MediaManager extends BaseManager {
@Override
public void onError(Throwable e) {
// 每上传失败一张就清除缓存
uploadedFileNames.add(mediaFile.getFileName());
FileUtil.deleteFile(file);
LogUtil.log(TAG, "Error uploading file " + downLoadMediaFileIndex + ": " + e.getMessage());
@ -406,18 +507,32 @@ public class MediaManager extends BaseManager {
}
public void removeAllFiles() {
// 确保即使没有文件也能正常关机
if (mediaFiles == null || mediaFiles.isEmpty()) {
LogUtil.log(TAG, "没有文件需要清除,直接关机");
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server("没有媒体文件需要清除",1);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
return;
}
MediaDataCenter.getInstance().getMediaManager().deleteMediaFiles(mediaFiles, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
LogUtil.log(TAG, "清除文件成功 ");
sendEvent2Server("媒体文件已清除",1);
disablePlayback();
LogUtil.log(TAG, "发送关闭无人机");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
ApronExecutionStatus.getInstance().setAircraftWaitShutDown(true);
sendEvent2Server( "媒体文件清除失败",1);
LogUtil.log(TAG, "清除文件失败: " + new Gson().toJson(idjiError));
sendEvent2Server("媒体文件清除失败",2);
LogUtil.log(TAG, "发送关闭无人机");
}
});
}

View File

@ -154,9 +154,8 @@ public class MissionV3Manager extends BaseManager {
sendEvent2Server("任务状态:此机型不支持航线任务3.0", 1);
Movement.getInstance().setTask_status("rejected");
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
break;
@ -181,10 +180,7 @@ public class MissionV3Manager extends BaseManager {
}
sendEvent2Server("任务状态:上传中", 1);
Movement.getInstance().setVirtualStickQuitMission(false);
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
break;
@ -197,10 +193,7 @@ public class MissionV3Manager extends BaseManager {
}
sendEvent2Server("任务状态:执行准备中", 1);
Movement.getInstance().setVirtualStickQuitMission(false);
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
break;
@ -220,10 +213,7 @@ public class MissionV3Manager extends BaseManager {
Movement.getInstance().setVirtualStickQuitMission(false);
sendEvent2Server("任务状态:进入航线飞行,飞往指定航线的第一个航点", 1);
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
//航线飞行
@ -246,24 +236,19 @@ public class MissionV3Manager extends BaseManager {
Movement.getInstance().setTask_status("in_progress");
}
Movement.getInstance().setVirtualStickQuitMission(false);
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
break;
case INTERRUPTED:
if (Movement.getInstance().getFlightmode() == 2) {
Movement.getInstance().setTakeoff_status("wayline_cancel");
TakeoffProgressScheduler.getInstance().stopReporting();
}
Movement.getInstance().setVirtualStickQuitMission(false);
sendEvent2Server("任务状态:航线任务执行中断", 1);
Movement.getInstance().setTask_status("paused");
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
//切换成手动飞行
@ -279,17 +264,14 @@ public class MissionV3Manager extends BaseManager {
} else {
Movement.getInstance().setTask_status("in_progress");
}
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
break;
case FINISHED:
//释放锁
Synchronizedstatus.setFlighttaskExecuteStatus(false);
Synchronizedstatus.setIsruning(false);
Synchronizedstatus.setInitStatus(false);
//如果是虚拟摇杆导致的退出应该要可恢复
if (Movement.getInstance().getMode_code() == 16) {
@ -308,8 +290,9 @@ public class MissionV3Manager extends BaseManager {
@Override
public void run() {
TakeoffProgressScheduler.getInstance().stopReporting();
sendEvent2Server("确定已经发送一键起飞的wayok", 1);
}
}, 2000); // 1000ms = 1秒
}, 4000); // 1000ms = 1秒
}
finishWayLineTime = System.currentTimeMillis();
@ -342,10 +325,7 @@ public class MissionV3Manager extends BaseManager {
} else {
Movement.getInstance().setTask_status("in_progress");
}
Movement.getInstance().setMissionFinish(false);
//这个是原来可控制那个发送最终状态的逻辑
Movement.getInstance().setMissionFinish1(false);
break;
}
@ -371,6 +351,8 @@ public class MissionV3Manager extends BaseManager {
@Override
public void onWaylineExecutingInterruptReasonUpdate(IDJIError error) {
LogUtil.log(TAG, "航线中断原因" + error.toString());
sendEvent2Server("航线中断原因" + error.toString(), 2);
}
});
waypointMissionManager.addWaypointActionListener(new WaypointActionListener() {
@ -398,9 +380,12 @@ public class MissionV3Manager extends BaseManager {
}, 2000); // 参数别改2s延迟
}
// 存储最新的航线消息
//收到航线
public void taskExecute(MessageDown message) {
PreferenceUtils.getInstance().setMissionType(0);
Movement.getInstance().setMission_type(0);
PreferenceUtils.getInstance().setFlightId(message.getData().getFlight_id());
@ -423,23 +408,20 @@ public class MissionV3Manager extends BaseManager {
Movement.getInstance().setTask_current_step(5);
//1.检查图传是否连接
checkVtxWithDelay(() -> {
//避免重复执行
if (isReceiverMission == false) {
isReceiverMission = true;
}
//2.回复收到指令
sendMsg2Server(message);
//3.检查飞机状态不满足条件直接taskFail入库
boolean statusOk = verifyAircraftStatus(message);
//4.信号收敛(等待GPS搜星)
if (statusOk) {
sendEvent2Server("条件满足进入自建和下发航线", 1);
verifyGpsAndMissionState(message);
}
});
}
@ -455,8 +437,10 @@ public class MissionV3Manager extends BaseManager {
}
//2.关闭避障
PerceptionManager.getInstance().setPerceptionEnable(false);
PerceptionManager.getInstance().setObstacleAvoidanceupEnabled(false);
PerceptionManager.getInstance().setObstacleAvoidancedownEnabled(false);
PerceptionManager.getInstance().closeRadarManager(false);
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
//3.清空sd卡
CameraManager.getInstance().formatStorage(null);
//4.返航或降落状态无法执行航线
@ -530,7 +514,6 @@ public class MissionV3Manager extends BaseManager {
verifyGpsAndMissionStateSuccess = true;
Movement.getInstance().setIs_fixed(2);
} else {
if (!verifyGpsAndMissionStateSuccess) {
if (verifyGpsAndMissionStateTimes < maxRetries) {
mainHandler.postDelayed(new Runnable() {
@ -645,9 +628,7 @@ public class MissionV3Manager extends BaseManager {
if (waylines != null && waylines.size() > 0) {
List<WaylineExecuteWaypoint> waypoints = waylines.get(0).getWaypoints();
if (waypoints != null && waypoints.size() > 0) {
CurrentWayline.getInstance().setWaypoints(waypoints);
LogUtil.log(TAG, "该航线有" + waypoints.size() + "个航点");
} else {
LogUtil.log(TAG, "WPMZManager getWaypointInfo有误");
@ -692,10 +673,6 @@ public class MissionV3Manager extends BaseManager {
Movement.getInstance().setMode_code(4);
Movement.getInstance().setTask_current_step(22);
//关闭避障
PerceptionManager.getInstance().setPerceptionEnable(false);
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
startMission(message);
pushKMZFileTimes = 0;
}
@ -756,6 +733,9 @@ public class MissionV3Manager extends BaseManager {
CommonCallbacks.CompletionCallback callback = new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
//开始一键起飞事件的上报
Movement.getInstance().setMissionFinish1(false);
isMissionStart = true;
LogUtil.log(TAG, "航线第" + startMissionFailTimes + "次开始成功");
Movement.getInstance().setTask_status("in_progress");
@ -792,11 +772,8 @@ public class MissionV3Manager extends BaseManager {
}, 2000);
} else {
if (!Movement.getInstance().isPlaneWing()) {
//待机
Movement.getInstance().setMode_code(0);
sendEvent2Server("航线第" + startMissionFailTimes + "次开始失败,直接关机:" + "---" + new Gson().toJson(error) + "--" + Movement.getInstance().getQuality(), 2);
TaskFailManager.getInstance().sendTaskFailMsg2Server(-1);
}
@ -895,7 +872,7 @@ public class MissionV3Manager extends BaseManager {
mainHandler.postDelayed(new Runnable() {
@Override
public void run() {
WaypointMissionManager.getInstance().startMission("aros", breakPointInfo,
WaypointMissionManager.getInstance().resumeMission(breakPointInfo,
new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
@ -903,9 +880,7 @@ public class MissionV3Manager extends BaseManager {
PreferenceUtils.getInstance().setIsNewRoute(false);
LogUtil.log(TAG, "恢复断点航线成功");
Movement.getInstance().setTask_status("in_progress");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "恢复断点航线失败:" + getIDJIErrorMsg(idjiError));
@ -932,7 +907,7 @@ public class MissionV3Manager extends BaseManager {
}
private void checkVtxWithDelay(Runnable onVtxReady) {
public void checkVtxWithDelay(Runnable onVtxReady) {
if (Movement.getInstance().isVtx()) {
// 图传正常直接继续后面的流程
@ -954,12 +929,13 @@ public class MissionV3Manager extends BaseManager {
RestartAPPTool.INSTANCE.restartApp(ApronApp.Companion.getContext());
}
} else {
// 图传恢复 执行后续逻辑
PreferenceUtils.getInstance().setRestartAMSTimes(0);
LogUtil.log(TAG, "图传在延迟期间恢复,继续执行任务流程");
onVtxReady.run();
}
}, 5000);
}, 10000);
}
}

View File

@ -19,6 +19,9 @@ import dji.v5.common.error.IDJIError;
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.aircraft.perception.radar.RadarInformation;
import dji.v5.manager.aircraft.perception.radar.RadarInformationListener;
import dji.v5.manager.aircraft.perception.radar.RadarManager;
import dji.v5.manager.interfaces.IPerceptionManager;
import dji.v5.manager.interfaces.IRadarManager;
@ -41,15 +44,12 @@ public class PerceptionManager extends BaseManager {
public void setPerceptionEnable(boolean perceptionEnable) {
if (PreferenceUtils.getInstance().getCloseObsEnable() && perceptionEnable) {
LogUtil.log(TAG, "全局避障关闭,不开启避障");
//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
@ -76,6 +76,9 @@ public class PerceptionManager extends BaseManager {
closePerceptionTimes++;
setPerceptionEnable(false);
setObstacleAvoidanceHorizontalEnabled(false);
setObstacleAvoidanceupEnabled(false);
setObstacleAvoidancedownEnabled(false);
closeRadarManager(false);
}
}, 2000);
} else {
@ -89,7 +92,7 @@ public class PerceptionManager extends BaseManager {
}
//开启水平避障
//关闭水平避障
public void setObstacleAvoidanceHorizontalEnabled(Boolean perceptionEnable) {
if (PreferenceUtils.getInstance().getCloseObsEnable()) {
LogUtil.log(TAG, "全局避障关闭,不开启避障");
@ -111,7 +114,99 @@ public class PerceptionManager extends BaseManager {
}
});
}
}
//关闭上避障
public void setObstacleAvoidanceupEnabled(Boolean perceptionEnable) {
if (PreferenceUtils.getInstance().getCloseObsEnable()) {
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.setObstacleAvoidanceEnabled(perceptionEnable ? true : false, PerceptionDirection.UPWARD, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
//LogUtil.log(TAG, "开启水平避障");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "开启水平避障:" + new Gson().toJson(idjiError));
}
});
}
}
//关闭下避障
public void setObstacleAvoidancedownEnabled(Boolean perceptionEnable) {
if (PreferenceUtils.getInstance().getCloseObsEnable()) {
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.setObstacleAvoidanceEnabled(perceptionEnable ? true : false, PerceptionDirection.DOWNWARD, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
//LogUtil.log(TAG, "开启水平避障");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
LogUtil.log(TAG, "开启水平避障:" + new Gson().toJson(idjiError));
}
});
}
}
public void closeRadarManager(boolean perceptionEnable) {
if (PreferenceUtils.getInstance().getCloseObsEnable()) {
LogUtil.log(TAG, "全局避障关闭,不开启避障");
return;
}
Boolean isConnect = KeyManager.getInstance().getValue(createKey(FlightControllerKey.KeyConnection));
if (isConnect != null && isConnect) {
IRadarManager iRadarManager = new RadarManager();
iRadarManager.setObstacleAvoidanceEnabled(perceptionEnable ? true : false, PerceptionDirection.HORIZONTAL, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
// LogUtil.log(TAG,"雷达水平关闭");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
// LogUtil.log(TAG,"雷达水平关闭失败");
}
});
iRadarManager.setObstacleAvoidanceEnabled(perceptionEnable ? true : false, PerceptionDirection.UPWARD, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
//LogUtil.log(TAG,"雷达上关闭");
}
@Override
public void onFailure(@NonNull IDJIError idjiError) {
// LogUtil.log(TAG,"雷达上关闭失败");
}
});
}
}
public void isladraopeninti() {
IRadarManager iRadarManager = new RadarManager();
iRadarManager.addRadarInformationListener(new RadarInformationListener() {
@Override
public void onUpdate(RadarInformation radarInformation) {
LogUtil.log(TAG, "雷达避障信息:" + "" + radarInformation.isUpwardObstacleAvoidanceEnabled() + "水平" + radarInformation.isHorizontalObstacleAvoidanceEnabled());
}
});
}

View File

@ -50,7 +50,7 @@ public class RTKManager extends BaseManager {
public void onUpdate(RTKSystemState newValue) {
if (newValue!=null){
Movement.getInstance().setIs_fixed(newValue.getRTKHealthy()?0:2);
LogUtil.log(TAG, "机身RTK状态:" + newValue.getRTKHealthy());
//LogUtil.log(TAG, "机身RTK状态:" + newValue.getRTKHealthy());
}
}

View File

@ -88,6 +88,12 @@ public class StickManager extends BaseManager {
//取消虚拟摇杆控制权
public void enableVirtualStick(MessageDown message) {
if(Movement.getInstance().isVirtualcontrollget()==true){
sendMsg2Server(message);
return;
}
//吐过开启了drc或者使用过摇杆
if(Movement.getInstance().isOpendrc()==false){
VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(true);
@ -95,17 +101,14 @@ public class StickManager extends BaseManager {
@Override
public void onSuccess() {
Movement.getInstance().setOpendrc(true);
if (message != null) {
LogUtil.log(TAG, "DRC回复"+message);
sendMsg2Server(message);
}
LogUtil.log(TAG, "控制权获取成功");
VirtualStickManager.getInstance().setVirtualStickAdvancedModeEnabled(true);
//获得过控制权
Movement.getInstance().setVirtualcontrollget(true);
}
@Override
@ -116,11 +119,17 @@ public class StickManager extends BaseManager {
}
});
}else{
sendMsg2Server(message);
}
}
//取消虚拟摇杆控制权
public void disableVirtualStick(MessageDown message) {
if(Movement.getInstance().isVirtualcontrollget()==false){
sendMsg2Server(message);
return;
}
VirtualStickManager.getInstance().disableVirtualStick(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
@ -132,7 +141,6 @@ public class StickManager extends BaseManager {
}else if(Movement.getInstance().getFlightmode()==2){
Movement.getInstance().setMode_code(3);
}
Movement.getInstance().setOpendrc(false);
}
LogUtil.log(TAG, "控制权已取消");
@ -145,7 +153,7 @@ public class StickManager extends BaseManager {
if (message!=null){
sendFailMsg2Server(message,"控制权释放失败:"+ Utils.getIDJIErrorMsg(error));
}
LogUtil.log(TAG, "控制权释放失败:"+Utils.getIDJIErrorMsg(error));
//LogUtil.log(TAG, "控制权释放失败:"+Utils.getIDJIErrorMsg(error));
}
});
}
@ -157,9 +165,9 @@ public class StickManager extends BaseManager {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
// 这里放你要延迟执行的代码
StickManager.getInstance().enableVirtualStick(message);
}, 2000);
}, 100);
sendMsg2Server(message);
////// Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(FlightControllerKey.KeyConnection));
////// if (isConnect != null && isConnect) {

View File

@ -7,6 +7,7 @@ import android.util.Log;
import androidx.annotation.NonNull;
import com.aros.apron.activity.MainActivity;
import com.aros.apron.base.BaseManager;
import com.aros.apron.entity.MessageDown;
import com.aros.apron.entity.Movement;
@ -15,6 +16,9 @@ import com.aros.apron.tools.PreferenceUtils;
import com.aros.apron.tools.SimplePortScanner;
import com.google.gson.Gson;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import dji.sdk.keyvalue.key.CameraKey;
import dji.sdk.keyvalue.key.DJIKey;
import dji.sdk.keyvalue.key.FlightControllerKey;
@ -38,6 +42,11 @@ import dji.v5.manager.interfaces.ILiveStreamManager;
public class StreamManager extends BaseManager {
private static final String TAG = "StreamManager";
// ========== 新增线程池和主线程Handler防止ANR ==========
private final ExecutorService streamExecutor = Executors.newSingleThreadExecutor();
private final Handler mainHandler = new Handler(Looper.getMainLooper());
private StreamManager() {
}
@ -50,8 +59,8 @@ public class StreamManager extends BaseManager {
return StreamHolder.INSTANCE;
}
public void stopstream() {
streamExecutor.execute(() -> {
ILiveStreamManager liveStreamManager = MediaDataCenter.getInstance().getLiveStreamManager();
liveStreamManager.stopStream(new CommonCallbacks.CompletionCallback() {
@Override
@ -64,9 +73,11 @@ public class StreamManager extends BaseManager {
LogUtil.log(TAG, "直播关闭失败");
}
});
});
}
public void startstream() {
streamExecutor.execute(() -> {
ILiveStreamManager liveStreamManager = MediaDataCenter.getInstance().getLiveStreamManager();
liveStreamManager.startStream(new CommonCallbacks.CompletionCallback() {
@Override
@ -79,7 +90,7 @@ public class StreamManager extends BaseManager {
LogUtil.log(TAG, "直播开启成功失败");
}
});
});
}
@ -135,53 +146,60 @@ public class StreamManager extends BaseManager {
//知眸测试
public void startLiveWithCustom() {
streamExecutor.execute(() -> {
Boolean isAircraftConnected = KeyManager.getInstance().getValue(DJIKey.create(ProductKey.KeyConnection));
if (isAircraftConnected == null || !isAircraftConnected) {
LogUtil.log(TAG, "飞行器未连接");
} else {
return;
}
ILiveStreamManager liveStreamManager = MediaDataCenter.getInstance().getLiveStreamManager();
mainHandler.post(() -> {
LogUtil.log(TAG, "自定义推流地址:" + PreferenceUtils.getInstance().getCustomStreamUrl());
LiveStreamSettings.Builder streamSettingBuilder = new LiveStreamSettings.Builder();
LiveStreamSettings streamSettings = streamSettingBuilder.setLiveStreamType(LiveStreamType.RTMP)
.setRtmpSettings(new RtmpSettings.Builder().setUrl(PreferenceUtils.getInstance().getCustomStreamUrl()
).build()).build();
liveStreamManager.setLiveStreamSettings(streamSettings);
CameraType value = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.KeyCameraType, ComponentIndexType.PORT_1));
// if (value != null && (value == CameraType.ZENMUSE_H20T ||
// value == CameraType.ZENMUSE_H20N || value == CameraType.ZENMUSE_H20)
// || value == CameraType.ZENMUSE_H30 || value == CameraType.ZENMUSE_H30T) {
liveStreamManager.setCameraIndex(ComponentIndexType.PORT_1);
// } else {
// liveStreamManager.setCameraIndex(ComponentIndexType.FPV);
// }
liveStreamManager.setLiveStreamQuality(StreamQuality.FULL_HD);
liveStreamManager.setLiveVideoBitrateMode(LiveVideoBitrateMode.AUTO);
});
if (!liveStreamManager.isStreaming()) {
doStartLiveCustom(liveStreamManager);
}
});
}
private void doStartLiveCustom(ILiveStreamManager liveStreamManager) {
liveStreamManager.startStream(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
mainHandler.post(() -> {
LogUtil.log(TAG, "自定义推流启动成功");
isLiveStreamAlreadyStart = true;
});
}
@Override
public void onFailure(@NonNull IDJIError error) {
mainHandler.post(() -> {
LogUtil.log(TAG, "" + startLiveFailTimes + "次开始推流失败:" + new Gson().toJson(error));
if (!isLiveStreamAlreadyStart) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mainHandler.postDelayed(() -> {
streamExecutor.execute(() -> {
if (startLiveFailTimes < 10) {
startLiveFailTimes++;
startLiveWithCustom();
}
}
});
}, 3000);
}
}
});
}
}
});
}
@ -225,28 +243,54 @@ public class StreamManager extends BaseManager {
liveStreamManager.setLiveStreamSettings(streamSettings);
liveStreamManager.setCameraIndex(ComponentIndex);
liveStreamManager.setLiveStreamQuality(StreamQuality.FULL_HD);
liveStreamManager.setLiveVideoBitrateMode(LiveVideoBitrateMode.AUTO);
}
// ========== 核心修复RTSP推流入口全部在子线程执行 ==========
public void startLiveWithRTSP() {
streamExecutor.execute(() -> {
Boolean isAircraftConnected = KeyManager.getInstance().getValue(DJIKey.create(FlightControllerKey.KeyConnection));
if (isAircraftConnected == null || !isAircraftConnected) {
LogUtil.log(TAG, "飞行器未连接");
return;
}
// 检查相机流是否准备好
if (!MainActivity.Companion.getStreamReceive()) {
LogUtil.log(TAG, "相机流未准备好尝试切换FPVWidget恢复");
mainHandler.post(() -> {
MainActivity mainActivity = MainActivity.Companion.getInstance();
if (mainActivity != null) {
mainActivity.swapVideoSource();
}
});
mainHandler.postDelayed(() -> {
streamExecutor.execute(() -> {
if (startLiveFailTimes < 2) {
startLiveFailTimes++;
startLiveWithRTSP();
} else {
forceStartLive();
LogUtil.log(TAG, "相机流未准备好,重试次数已达上限,强制启动");
}
});
}, 1500);
return;
}
if (PreferenceUtils.getInstance().getRtspUserName() != null &&
PreferenceUtils.getInstance().getRtspPort() != null &&
PreferenceUtils.getInstance().getRtspPassWord() != null
) {
PreferenceUtils.getInstance().getRtspPassWord() != null) {
ILiveStreamManager liveStreamManager = MediaDataCenter.getInstance().getLiveStreamManager();
LogUtil.log(TAG, "自定义RTSP推流:" + PreferenceUtils.getInstance().getRtspUserName()
+ "--" + PreferenceUtils.getInstance().getRtspPort() + "--" + PreferenceUtils.getInstance().getRtspPassWord());
// 设置参数在主线程执行部分DJI API要求
mainHandler.post(() -> {
if (isliveindex == 1) {
LiveStreamSettings.Builder streamSettingBuilder = new LiveStreamSettings.Builder();
LiveStreamSettings streamSettings = streamSettingBuilder.setLiveStreamType(LiveStreamType.RTSP)
@ -255,120 +299,145 @@ public class StreamManager extends BaseManager {
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 ||
// value == CameraType.ZENMUSE_H20N || value == CameraType.ZENMUSE_H20)
// || value == CameraType.ZENMUSE_H30 || value == CameraType.ZENMUSE_H30T) {
liveStreamManager.setCameraIndex(ComponentIndexType.PORT_1);
// } else {
// liveStreamManager.setCameraIndex(ComponentIndexType.FPV);
// }
liveStreamManager.setLiveStreamQuality(StreamQuality.FULL_HD);
liveStreamManager.setLiveVideoBitrateMode(LiveVideoBitrateMode.AUTO);
} else {
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);
liveStreamManager.setCameraIndex(ComponentIndexType.FPV);
liveStreamManager.setLiveStreamQuality(StreamQuality.FULL_HD);
liveStreamManager.setLiveVideoBitrateMode(LiveVideoBitrateMode.AUTO);
}
});
// 稍微等待设置生效
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
if (!liveStreamManager.isStreaming()) {
liveStreamManager.startStream(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "自定义RTSP推流启动成功");
isliveindex = 1;
isLiveStreamAlreadyStart = true;
//开始端口扫描
SimplePortScanner.getInstance().startScan();
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "" + startLiveFailTimes + "次开始RTSP推流失败:" + new Gson().toJson(error));
if (!isLiveStreamAlreadyStart) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (startLiveFailTimes < 10) {
startLiveFailTimes++;
startLiveWithRTSP();
}
}
}, 3000);
}
}
});
// 直接启动
doStartLiveWithRTSP(liveStreamManager, false);
} else {
// 先停止再启动
liveStreamManager.stopStream(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
liveStreamManager.startStream(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "自定义RTSP推流启动成功");
isliveindex = 1;
isLiveStreamAlreadyStart = true;
// 在子线程延迟2秒替代 Handler.postDelayed
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
doStartLiveWithRTSP(liveStreamManager, true);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "" + startLiveFailTimes + "次开始RTSP推流失败:" + new Gson().toJson(error));
if (!isLiveStreamAlreadyStart) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (startLiveFailTimes < 10) {
startLiveFailTimes++;
startLiveWithRTSP();
}
}
}, 3000);
}
}
mainHandler.post(() -> {
LogUtil.log(TAG, "停止旧流失败:" + new Gson().toJson(error));
// 即使停止失败也尝试启动
streamExecutor.execute(() -> doStartLiveWithRTSP(liveStreamManager, true));
});
}
}, 2000);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "" + startLiveFailTimes + "次开始RTSP推流失败:" + new Gson().toJson(error));
if (!isLiveStreamAlreadyStart) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (startLiveFailTimes < 10) {
startLiveFailTimes++;
startLiveWithRTSP();
}
}
}, 3000);
}
}
});
}
} else {
LogUtil.log(TAG, "RTSP配置参数有误");
}
}
});
}
private void forceStartLive() {
streamExecutor.execute(() -> {
if (PreferenceUtils.getInstance().getRtspUserName() != null &&
PreferenceUtils.getInstance().getRtspPort() != null &&
PreferenceUtils.getInstance().getRtspPassWord() != null) {
ILiveStreamManager liveStreamManager = MediaDataCenter.getInstance().getLiveStreamManager();
// 直接设置参数并启动不检查相机流状态
mainHandler.post(() -> {
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);
liveStreamManager.setCameraIndex(isliveindex == 1 ? ComponentIndexType.PORT_1 : ComponentIndexType.FPV);
liveStreamManager.setLiveStreamQuality(StreamQuality.FULL_HD);
liveStreamManager.setLiveVideoBitrateMode(LiveVideoBitrateMode.AUTO);
// 直接启动
liveStreamManager.startStream(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
mainHandler.post(() -> {
LogUtil.log(TAG, "强制启动RTSP推流成功");
MainActivity mainActivity = MainActivity.Companion.getInstance();
mainActivity.swapVideoSource();
isLiveStreamAlreadyStart = true;
SimplePortScanner.getInstance().startScan();
});
}
@Override
public void onFailure(@NonNull IDJIError error) {
mainHandler.post(() -> {
LogUtil.log(TAG, "强制启动RTSP推流失败:" + new Gson().toJson(error));
});
}
});
});
}
});
}
// ========== 新增实际启动流的私有方法确保在子线程执行 ==========
private void doStartLiveWithRTSP(ILiveStreamManager liveStreamManager, boolean isRestart) {
liveStreamManager.startStream(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
mainHandler.post(() -> {
LogUtil.log(TAG, "自定义RTSP推流启动成功" + (isRestart ? "(重启)" : ""));
isliveindex = 1;
isLiveStreamAlreadyStart = true;
// 开始端口扫描
SimplePortScanner.getInstance().startScan();
});
}
@Override
public void onFailure(@NonNull IDJIError error) {
mainHandler.post(() -> {
LogUtil.log(TAG, "" + startLiveFailTimes + "次开始RTSP推流失败:" + new Gson().toJson(error));
if (!isLiveStreamAlreadyStart) {
// 延时3秒后重试重试也提交到线程池
mainHandler.postDelayed(() -> {
streamExecutor.execute(() -> {
if (startLiveFailTimes < 10) {
startLiveFailTimes++;
startLiveWithRTSP();
}
});
}, 3000);
}
});
}
});
}
}

View File

@ -21,6 +21,7 @@ import com.aros.apron.entity.MessageDown;
import com.aros.apron.entity.MissionDataBean;
import com.aros.apron.entity.MissionPoint;
import com.aros.apron.entity.Movement;
import com.aros.apron.entity.Synchronizedstatus;
import com.aros.apron.tools.DomParserKML;
import com.aros.apron.tools.DomParserWPML;
import com.aros.apron.tools.Generakmztools;
@ -69,12 +70,14 @@ public class TakeOffToPointManager extends BaseManager {
}
public boolean isReceiverMission = false;
// 存储最新的一键起飞消息
//收到一键起飞航线
public void taskExecute(MessageDown message) {
PreferenceUtils.getInstance().setMissionType(1);
Movement.getInstance().setIstakeoffex(true);
PreferenceUtils.getInstance().setFlightId(message.getData().getFlight_id());
PreferenceUtils.getInstance().setAlternatePointLon(message.getData().getAlternate_land_point().getLongitude() + "");
PreferenceUtils.getInstance().setAlternatePointLat(message.getData().getAlternate_land_point().getLatitude() + "");
@ -83,23 +86,20 @@ public class TakeOffToPointManager extends BaseManager {
Movement.getInstance().setTask_current_step(5);
LogUtil.log(TAG, "生成");
//1.检查图传是否连接
checkVtxWithDelay(() -> {
//避免重复执行
if (isReceiverMission == false) {
isReceiverMission = true;
}
//2.回复收到指令
sendMsg2Server(message);
//3.检查飞机状态不满足条件直接taskFail入库
boolean statusOk = verifyAircraftStatus(message);
//4.信号收敛(等待GPS搜星)
if (statusOk) {
// LogUtil.log(TAG,"verifyGpsAndMissionState(message)执行了");
verifyGpsAndMissionState(message);
}
});
}
/**
@ -114,7 +114,10 @@ public class TakeOffToPointManager extends BaseManager {
}
//2.关闭避障
PerceptionManager.getInstance().setPerceptionEnable(false);
PerceptionManager.getInstance().setObstacleAvoidanceHorizontalEnabled(false);
PerceptionManager.getInstance().setObstacleAvoidanceupEnabled(false);
PerceptionManager.getInstance().setObstacleAvoidancedownEnabled(false);
PerceptionManager.getInstance().closeRadarManager(false);
//3.清空sd卡
CameraManager.getInstance().formatStorage(null);
//4.返航或降落状态无法执行航线
@ -163,7 +166,6 @@ public class TakeOffToPointManager extends BaseManager {
private final int maxRetries = 100;
/**
* 3.GPS信号校验
*/
@ -219,7 +221,6 @@ public class TakeOffToPointManager extends BaseManager {
}
}
}
@ -238,6 +239,7 @@ public class TakeOffToPointManager extends BaseManager {
MissionDataBean data = new Gson().fromJson(new Gson().toJson(message.getData()), MissionDataBean.class);
Boolean generateKmz = Generakmztools.getInstance().generateKmz(data);
LogUtil.log(TAG, "生成的boole" + generateKmz);
if (generateKmz == true) {
pushKMZFileToAircraft(message);
} else {
@ -260,6 +262,7 @@ public class TakeOffToPointManager extends BaseManager {
/**
* 6.上传指点航线
*
* @param message
*/
public void pushKMZFileToAircraft(MessageDown message) {
@ -378,7 +381,6 @@ public class TakeOffToPointManager extends BaseManager {
CommonCallbacks.CompletionCallback callback = new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
isMissionStart = true;
LogUtil.log(TAG, "航线第" + startMissionFailTimes + "次开始成功");
Movement.getInstance().setTask_status("in_progress");
@ -387,6 +389,7 @@ public class TakeOffToPointManager extends BaseManager {
Movement.getInstance().setTask_current_step(23);
Movement.getInstance().setTakeoff_result(0);
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "航线执行失败:" + new Gson().toJson(error));
@ -425,7 +428,7 @@ public class TakeOffToPointManager extends BaseManager {
}
}
private void checkVtxWithDelay(Runnable onVtxReady) {
public void checkVtxWithDelay(Runnable onVtxReady) {
if (Movement.getInstance().isVtx()) {
// 图传正常直接继续后面的流程

View File

@ -38,7 +38,8 @@ public class WayLineExecutingInterruptManager extends BaseManager {
public static WayLineExecutingInterruptManager getInstance() {
return WayLineExecutingInterruptHolder.INSTANCE;
}
public void initWayLineExecutingInterruptInfo() {
}
public void onExecutingInterruptToDo() {
IWaypointMissionManager missionManager = WaypointMissionManager.getInstance();

View File

@ -31,14 +31,13 @@ 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;
/**
* 2帧一处理0处理-1跳过-2处理-3跳过
* 跳过的帧直接return啥也不干让飞机自己飘
* 先预处理检测失败再回退原图检测
*/
public class ApronArucoDetect {
@ -57,6 +56,15 @@ public class ApronArucoDetect {
private boolean isTriggerSuccess;
private boolean arucoNotFoundTag = false;
private boolean isStartAruco = false;
public boolean isStartAruco() {
return isStartAruco;
}
public void setStartAruco(boolean startAruco) {
isStartAruco = startAruco;
}
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Future<?> lastFuture = null;
private String TAG_LOG = getClass().getSimpleName();
@ -104,8 +112,6 @@ public class ApronArucoDetect {
public void init() {
pidControlX = new PIDControl(0.65f, 0.02f, 0.2f, 0.05f, 2.5f, 0.1f);
pidControlY = new PIDControl(0.65f, 0.02f, 0.2f, 0.05f, 2.5f, 0.1f);
// pidControlX = new PIDControl(0.8f, 0.002f, 0.09f, 0.05f, 2.0f, 0.05f);
// pidControlY = new PIDControl(0.8f, 0.002f, 0.09f, 0.05f, 2.0f, 0.05f);
pidControlX.reset();
pidControlY.reset();
}
@ -113,7 +119,7 @@ public class ApronArucoDetect {
public boolean startFastStick;
public boolean canLanding;
// ========== 核心修改主入口2帧一处理 ==========
// ========== 核心修改主入口2帧一处理 + 预处理回退 ==========
public void detectArucoTags(int height, int width, byte[] data, Dictionary dictionary) {
isTriggerSuccess = true;
Movement.getInstance().setVirtualStickEnableReason(2);
@ -154,7 +160,7 @@ public class ApronArucoDetect {
else if (ultHeight >= 5) { LENS_OFFSET_X = 30; LENS_OFFSET_Y = 20; }
else { LENS_OFFSET_X = 55; LENS_OFFSET_Y = 35; }
// ========== 原有完整逻辑一点不改 ==========
// ========== 核心逻辑先预处理检测失败回退原图 ==========
lastFuture = executor.schedule(new Runnable() {
@Override
public void run() {
@ -166,42 +172,33 @@ public class ApronArucoDetect {
Mat grayImgMat = new Mat();
Imgproc.cvtColor(rgbMat, grayImgMat, Imgproc.COLOR_BGR2GRAY);
// ========== 极致容错双重检测策略 ==========
// 策略1增强图检测适应低光/反光
Mat enhancedMat = createEnhancedImage(grayImgMat);
MatOfInt ids = new MatOfInt();
List<Mat> corners = new ArrayList<>();
Mat corner6 = new Mat();
DetectorParameters params = createUltraTolerantParams();
ArucoDetector detector = new ArucoDetector(dictionary, params);
detector.detectMarkers(enhancedMat, corners, ids);
DetectorParameters parameters = new DetectorParameters();
ArucoDetector detector = new ArucoDetector(dictionary, parameters);
// 策略2如果失败用原图兜底适应过曝
// ========== 关键修改第1次预处理图检测 ==========
Mat processedMat = fixedPreprocess(grayImgMat);
detector.detectMarkers(processedMat, corners, ids);
LogUtil.log(TAG_LOG, "预处理图检测: " + (ids.empty() ? "未检出" : "成功,数量=" + corners.size()));
// ========== 关键修改第2次如果失败回退原图检测 ==========
if (ids.empty()) {
corners.clear();
LogUtil.log(TAG_LOG, "预处理失败,回退原图检测");
corners.clear(); // 清空之前的结果
detector.detectMarkers(grayImgMat, corners, ids);
LogUtil.log(TAG_LOG, "原图检测: " + (ids.empty() ? "仍未检出" : "成功,数量=" + corners.size()));
}
// 策略3如果还失败降采样检测适应高分辨率模糊
if (ids.empty()) {
corners.clear();
Mat downscaled = new Mat();
Imgproc.resize(grayImgMat, downscaled, new Size(grayImgMat.width() * 0.8, grayImgMat.height() * 0.8));
detector.detectMarkers(downscaled, corners, ids);
// 坐标映射回原图比例
if (!ids.empty()) {
for (Mat corner : corners) {
Core.multiply(corner, new Scalar(1.25, 1.25), corner);
}
}
downscaled.release();
}
// 释放预处理图必须避免内存泄漏
processedMat.release();
// 只保留6号码
ids = keepOnly6(ids, corners);
boolean marker6Found = false;
Mat corner6 = new Mat();
if (!ids.empty()) {
trycount = 0;
arucoNotFoundTag = false;
@ -251,17 +248,6 @@ public class ApronArucoDetect {
LogUtil.log(TAG_LOG, "延迟结束,开始速降");
}
}, 300);
// 清理资源
enhancedMat.release();
grayImgMat.release();
rgbMat.release();
yuvMat.release();
ids.release();
if (!corners.isEmpty()) {
for (Mat c : corners) if (c != null) c.release();
}
isStartAruco = false;
return;
}
} else {
@ -295,20 +281,8 @@ public class ApronArucoDetect {
DroneHelper.getInstance().moveVxVyYawrateHeight(0f, 0f, 0f, 3f);
if (dropTimes > Integer.parseInt(AMSConfig.getInstance().getAlternateLandingTimes())) {
LogUtil.log(TAG_LOG, "超过复降限制,去备降点");
AlternateLandingManager.getInstance().startTaskProcess(null);
Movement.getInstance().setAlternate(true);
// 清理资源
enhancedMat.release();
grayImgMat.release();
rgbMat.release();
yuvMat.release();
ids.release();
if (!corners.isEmpty()) {
for (Mat c : corners) if (c != null) c.release();
}
isStartAruco = false;
return;
}
if (dropTimesTag) {
@ -323,10 +297,11 @@ public class ApronArucoDetect {
} else if (lostDuration > 8000) {
LogUtil.log(TAG_LOG, "判定未识别到二维码,飞往备降点");
AlternateLandingManager.getInstance().startTaskProcess(null);
Movement.getInstance().setAlternate(true);
}
}
// 原有资源释放
enhancedMat.release();
// 释放资源
grayImgMat.release();
rgbMat.release();
yuvMat.release();
@ -346,9 +321,7 @@ public class ApronArucoDetect {
}
}, 0, TimeUnit.MILLISECONDS);
}
// ========== 以下全部原有方法一点不改 ==========
private static MatOfInt keepOnly6(MatOfInt ids, List<Mat> corners) {
if (ids.empty()) return ids;
int[] idArr = ids.toArray();
@ -365,87 +338,101 @@ public class ApronArucoDetect {
corners.addAll(tmpCorners);
return new MatOfInt(newIds);
}
// ========== 极致容错图像增强全高度段通用 ==========
private Mat createEnhancedImage(Mat src) {
/**
* 简化预处理双边滤波+CLAHE+高反差保留
* 参数别改适配H30T广角画质
*/
/**
* 增强版预处理双边滤波 + CLAHE + Unsharp Mask反锐化掩膜
* 参数别改amount=1.2 FPV 运动模糊的推荐强度
*/
private Mat fixedPreprocess(Mat src) {
Mat result = new Mat();
try {
// 1. 多尺度CLAHE适应不同亮度
Mat claheMat = new Mat();
Imgproc.createCLAHE(2.0, new Size(8, 8)).apply(src, claheMat);
// 新增判断亮度区分白天/夜景
Scalar meanValue = Core.mean(src);
double meanBrightness = meanValue.val[0];
// 2. 中值滤波去噪比双边快保边足够
if (meanBrightness < 80) { // 夜景模式FPV晚上通常<80
LogUtil.log(TAG_LOG, "【夜景预处理】亮度=" + (int)meanBrightness);
// Step 1: 中值滤波去椒盐噪点比双边滤波更适合夜景
Mat denoised = new Mat();
Imgproc.medianBlur(src, denoised, 5); // 5x5去噪且保边
// Step 2: 直方图均衡化全局对比度拉伸把黑灰白拉开
Mat equalized = new Mat();
Imgproc.equalizeHist(denoised, equalized);
// Step 3: 轻度CLAHE局部微调避免过曝
Mat clahe = new Mat();
Imgproc.createCLAHE(2.0, new Size(8, 8)).apply(equalized, clahe); // 2.0比白天4.0保守
// Step 4: 夜景下降低锐化强度避免放大残余噪点
Mat blurred = new Mat();
Imgproc.GaussianBlur(clahe, blurred, new Size(0, 0), 2.0);
Mat detail = new Mat();
Core.subtract(clahe, blurred, detail);
double amount = 0.6; // 关键夜景降到0.6白天1.2会放大噪点
Core.multiply(detail, new Scalar(amount), detail);
Core.add(clahe, detail, result);
// 限制范围
Core.min(result, new Scalar(255), result);
Core.max(result, new Scalar(0), result);
// 释放
denoised.release();
equalized.release();
blurred.release();
detail.release();
clahe.release();
LogUtil.log(TAG_LOG, "夜景处理完成:中值滤波+均衡化+弱锐化(amount=" + amount + ")");
return result;
}
// 原逻辑白天模式亮度>=80
LogUtil.log(TAG_LOG, "【白天预处理】亮度=" + (int)meanBrightness);
// Step 1: 双边滤波保边缘降噪
Mat filtered = new Mat();
Imgproc.medianBlur(claheMat, filtered, 5);
claheMat.release();
Imgproc.bilateralFilter(src, filtered, 9, 75, 75);
// 3. 自适应阈值块大小动态适应全高度
Mat binary = new Mat();
Imgproc.adaptiveThreshold(filtered, binary, 255,
Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C,
Imgproc.THRESH_BINARY, 41, 3); // 块41更大常数3更敏感
// Step 2: CLAHE 局部对比度增强
Mat clahe = new Mat();
Imgproc.createCLAHE(4.0, new Size(8, 8)).apply(filtered, clahe);
filtered.release();
// 4. 形态学操作连接断裂边框
Mat morph = new Mat();
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(5, 5));
Imgproc.morphologyEx(binary, morph, Imgproc.MORPH_CLOSE, kernel);
kernel.release();
binary.release();
// 5. 轻度锐化突出边缘不过度
Mat sharpened = new Mat();
// Step 3: Unsharp Mask反锐化掩膜
Mat blurred = new Mat();
Imgproc.GaussianBlur(morph, blurred, new Size(0, 0), 3.0);
Core.addWeighted(morph, 1.3, blurred, -0.3, 0, sharpened);
morph.release();
blurred.release();
Imgproc.GaussianBlur(clahe, blurred, new Size(0, 0), 2.0);
return sharpened;
Mat detail = new Mat();
Core.subtract(clahe, blurred, detail);
double amount = 1.2; // 白天可以用1.2
Core.multiply(detail, new Scalar(amount), detail);
Core.add(clahe, detail, result);
Core.min(result, new Scalar(255), result);
Core.max(result, new Scalar(0), result);
blurred.release();
detail.release();
clahe.release();
LogUtil.log(TAG_LOG, "白天处理完成:双边滤波+CLAHE+UnsharpMask(amount=" + amount + ")");
return result;
} catch (Exception e) {
LogUtil.log(TAG_LOG, "增强失败: " + e.getMessage());
LogUtil.log(TAG_LOG, "预处理失败: " + e.getMessage());
src.copyTo(result);
return result;
}
}
private DetectorParameters createUltraTolerantParams() {
DetectorParameters params = new DetectorParameters();
// 全高度段4dm=375px, 9dm=190px, 50dm=19px
params.set_minMarkerPerimeterRate(0.003f); // 降到0.00319像素也能检
// 畸变/反光/模糊宽容
params.set_polygonalApproxAccuracyRate(0.12f); // 更松
params.set_cornerRefinementMethod(1); // SUBPIX
params.set_cornerRefinementWinSize(3); // 降到3更快
params.set_cornerRefinementMaxIterations(30);
params.set_cornerRefinementMinAccuracy(0.12f); // 放宽收敛
// 阈值范围更大适应全光照
params.set_adaptiveThreshWinSizeMin(3);
params.set_adaptiveThreshWinSizeMax(63); // 更大
params.set_adaptiveThreshWinSizeStep(10);
params.set_adaptiveThreshConstant(3); // 配合预处理
params.set_minCornerDistanceRate(0.02f);
params.set_minMarkerLengthRatioOriginalImg(0.03f); // 更宽容
params.set_minDistanceToBorder(1); // 边缘也检
params.set_perspectiveRemovePixelPerCell(2); // 降到2小像素精细
params.set_perspectiveRemoveIgnoredMarginPerCell(0.2f);
params.set_maxErroneousBitsInBorderRate(0.6f); // 60%容错
params.set_detectInvertedMarker(false);
return params;
}
private double calculateDistance(Point p1, Point p2) {
double dx = p2.x - p1.x;
double dy = p2.y - p1.y;
@ -515,8 +502,6 @@ public class ApronArucoDetect {
double pixelWidth = Math.sqrt(Math.pow(pts[1].x - pts[0].x, 2) +
Math.pow(pts[1].y - pts[0].y, 2));
if (currentHeight >= 10 && currentHeight <= 55) {
double yawError = calculateYawErrorFromCorners(pts);
double absError = Math.abs(yawError);
@ -556,6 +541,7 @@ public class ApronArucoDetect {
vx = 0f;
}
if (Math.abs(errY) > 120) {
vy = rawVy > 0 ? 0.135f : -0.135f;
} else if (Math.abs(errY) > 80) {
@ -596,7 +582,7 @@ public class ApronArucoDetect {
private void performOperation() {
LogUtil.log(TAG_LOG, "快速下拉中..." + handlerCallbackCount);
DroneHelper.getInstance().moveVxVyYawrateHeight(0f, 0f, 0f, -4);
DroneHelper.getInstance().moveVxVyYawrateHeight(0f, 0f, 0f, -5);
handlerCallbackCount++;
}

View File

@ -34,7 +34,7 @@ public class BasePreference {
}
protected void setBoolean(String key, boolean value) {
sp.edit().putBoolean(key, value).apply();
sp.edit().putBoolean(key, value).commit();
}
protected boolean getBoolean(String key) {

View File

@ -48,18 +48,59 @@ public class DroneHelper {
public static DroneHelper getInstance() {
return DroneHelperHolder.INSTANCE;
}
private boolean isExitInProgress = false; // 新增标志
// DroneHelper.java
private int exitVirtualStickRetryCount = 0;
private static final int MAX_EXIT_RETRY = 10;
public void exitVirtualStickMode() {
exitVirtualStickMode(null);
}
public void exitVirtualStickMode(CommonCallbacks.CompletionCallback callback) {
if (isExitInProgress) {
LogUtil.log(TAG, "释放操作已在进行中,跳过重复调用");
return;
}
isExitInProgress = true;
exitVirtualStickWithRetry(callback);
}
private void exitVirtualStickWithRetry(CommonCallbacks.CompletionCallback callback) {
VirtualStickManager.getInstance().disableVirtualStick(new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
exitVirtualStickRetryCount = 0;
isExitInProgress = false; // 重置标志
LogUtil.log(TAG, "控制权已取消");
if (callback != null) {
callback.onSuccess();
}
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "取消控制权失败:" + error.toString());
if (exitVirtualStickRetryCount < MAX_EXIT_RETRY) {
exitVirtualStickRetryCount++;
LogUtil.log(TAG, "重试释放控制权 (" + exitVirtualStickRetryCount + "/" + MAX_EXIT_RETRY + ")");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (isExitInProgress) { // 检查标志
exitVirtualStickWithRetry(callback);
}
}
}, 1000);
} else {
LogUtil.log(TAG, "多次尝试释放控制权失败,放弃");
exitVirtualStickRetryCount = 0;
isExitInProgress = false; // 重置标志
if (callback != null) {
callback.onFailure(error);
}
}
}
});
@ -121,7 +162,7 @@ public class DroneHelper {
Boolean cameraConnect = KeyManager.getInstance().getValue(KeyTools.createKey(CameraKey.
KeyConnection, ComponentIndexType.PORT_1));
if (cameraConnect!=null&&cameraConnect) {
KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyCameraFocusMode, ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_WIDE), CameraFocusMode.AF, new CommonCallbacks.CompletionCallback() {
KeyManager.getInstance().setValue(KeyTools.createCameraKey(CameraKey.KeyCameraFocusMode, ComponentIndexType.PORT_1, CameraLensType.CAMERA_LENS_WIDE), CameraFocusMode.AFC, new CommonCallbacks.CompletionCallback() {
@Override
public void onSuccess() {
LogUtil.log(TAG, "设置对焦模式自动对焦");
@ -140,6 +181,32 @@ public class DroneHelper {
private int setGimbalPitchDegreeFailTimes = 0;
private boolean isGimbalPitchDegree = false;
public void setGimbalPitchdown(){
Boolean isConnect = KeyManager.getInstance().getValue(KeyTools.createKey(GimbalKey.
KeyConnection, ComponentIndexType.PORT_1));
if (isConnect!=null&&isConnect) {
GimbalAngleRotation rotation = new GimbalAngleRotation();
rotation.setMode(GimbalAngleRotationMode.ABSOLUTE_ANGLE);
rotation.setYaw(0.0);
rotation.setRoll(0.0);
rotation.setPitch(-90.0);
KeyManager.getInstance().performAction(KeyTools.createKey(GimbalKey.KeyRotateByAngle, ComponentIndexType.PORT_1), rotation, new CommonCallbacks.CompletionCallbackWithParam<EmptyMsg>() {
@Override
public void onSuccess(EmptyMsg emptyMsg) {
LogUtil.log(TAG, "云台朝下");
}
@Override
public void onFailure(@NonNull IDJIError error) {
LogUtil.log(TAG, "fail:" + error.toString());
}
}
);
} else {
LogUtil.log(TAG, "云台未连接");
}
}
public void setGimbalPitchDegree() {
//通知拓挂载云台朝下
// PayloadWidgetManager.getInstance().sendMsgToLeftPayload("#TPPG2wPTZ0A76");

View File

@ -8,6 +8,8 @@ import com.aros.apron.entity.Movement;
import com.aros.apron.manager.TakeOffToPointManager;
import com.aros.apron.manager.TaskFailManager;
import com.dji.wpmzsdk.common.data.Template;
import com.dji.wpmzsdk.common.utils.kml.GeoidManager;
import com.dji.wpmzsdk.common.utils.kml.GpsUtils;
import com.dji.wpmzsdk.manager.WPMZManager;
import java.io.File;
@ -30,11 +32,13 @@ public class Generakmztools extends BaseManager {
public static Generakmztools getInstance() { return Holder.INSTANCE; }
public Boolean generateKmz(MissionDataBean data) {
LogUtil.log("qwq","开始生成一键起飞航线");
sendEvent2Server("开始生成一键起飞航线", 1);
LocationCoordinate3D lat = KeyManager.getInstance().getValue(KeyTools.createKey(FlightControllerKey.
KeyAircraftLocation3D));
int retryCount = 0;
final int MAX_RETRY = 60;
@ -77,6 +81,7 @@ public class Generakmztools extends BaseManager {
File root = new File("/storage/self/primary/DJIDemo/cache/kmz");
if (!root.exists()) root.mkdirs();
File kmz = new File(root, "takeofftopoint.kmz");
LogUtil.log(TAG,"高度:"+lat.getAltitude());
/* 1. <wpml:mission> 基本信息 */
WaylineMission mission = new WaylineMission();
@ -131,13 +136,20 @@ public class Generakmztools extends BaseManager {
WaylineWaypoint wp = new WaylineWaypoint();
//初始点
double wp1heighet= GpsUtils.egm96Altitude(lat.getAltitude(),lat.getLatitude(),lat.getLongitude());
//double wpheight=GpsUtils.egm96Altitude(data.getTargetHeight(),data.getTargetLatitude(),data.getTargetLongitude());
//double wp1ellheighet=GpsUtils.wgs84Altitude();
double wpellheight=GpsUtils.wgs84Altitude(data.getTargetHeight(),data.getTargetLatitude(),data.getTargetLongitude());
wp1.setWaypointIndex(0);
wp1.setLocation(new WaylineLocationCoordinate2D(lat.getLatitude(), lat.getLongitude()));
//wp1.setLocation(new WaylineLocationCoordinate2D(data.getTargetLatitude(), data.getTargetLongitude()));
//wp1.setHeight((double)data.getCommanderFlightHeight());
wp1.setHeight(data.getTargetHeight()- Movement.getInstance().getHeight());
// wp1.setUseGlobalFlightHeight(true);
//椭球高
wp1.setEllipsoidHeight(data.getTargetHeight()- Movement.getInstance().getHeight());
wp1.setHeight(data.getTargetHeight());
//wp.setUseGlobalFlightHeight(true);
wp1.setEllipsoidHeight(wpellheight);
wp1.setUseStraightLine(true);
wp1.setUseGlobalTurnParam(true);
wp1.setUseGlobalYawParam(true);
@ -151,10 +163,13 @@ public class Generakmztools extends BaseManager {
wp.setWaypointIndex(1);
wp.setLocation(new WaylineLocationCoordinate2D(data.getTargetLatitude(), data.getTargetLongitude()));
//wp.setHeight((double)data.getCommanderFlightHeight());
wp.setHeight(data.getTargetHeight()- Movement.getInstance().getHeight());
wp.setHeight(data.getTargetHeight());
//wp.setUseGlobalFlightHeight(true);
//椭球高
wp.setEllipsoidHeight(data.getTargetHeight()- Movement.getInstance().getHeight());
wp.setEllipsoidHeight(wpellheight);
wp.setUseStraightLine(true);
wp.setUseGlobalTurnParam(true);
wp.setUseGlobalYawParam(true);
@ -195,7 +210,8 @@ public class Generakmztools extends BaseManager {
/* 5. <wpml:coordinateParam> */
WaylineCoordinateParam coordParam = new WaylineCoordinateParam();
coordParam.setCoordinateMode(WaylineCoordinateMode.WGS84);
coordParam.setAltitudeMode(WaylineAltitudeMode.RELATIVE_TO_START_POINT);
coordParam.setAltitudeMode(WaylineAltitudeMode.EGM96);
coordParam.setPositioningType(WaylinePositioningType.GPS);
/* 6. <wpml:template> */

View File

@ -28,6 +28,7 @@ public class PreferenceUtils extends BasePreference {
private String NEED_TRIGGER_APRON_ARUCO_LAND = "need_trigger_apron_aruco_land";//是否需要触发crash后继续降落到机库
private String NEED_TRIGGER_ALTER_ARUCO_LAND = "need_trigger_alter_aruco_land";//是否需要触发crash后继续降落到备降点
private String TRIGGER_TO_ALTERNATE_POINT = "trigger_to_alternate_point";//是否需要触发crash后继续降落
private String FIRST_MISSION_RECEIVED = "first_mission_received";//是否第一次收到航线指令
//AMS配置清单
private String HAVA_RTK = "have_rtk";
@ -82,6 +83,14 @@ public class PreferenceUtils extends BasePreference {
return getString(FLIGHT_ID);
}
public void setFirstMissionReceived(boolean firstMissionReceived) {
setBoolean(FIRST_MISSION_RECEIVED, firstMissionReceived);
}
public boolean isFirstMissionReceived() {
return getBoolean(FIRST_MISSION_RECEIVED);
}
public String getBucketName() {
return getString(BUCKET_NAME);
}

View File

@ -751,7 +751,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="无" />
android:text="下视" />
<RadioButton
android:id="@+id/rb_camera_mix"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="融合" />
</RadioGroup>
</LinearLayout>

View File

@ -292,7 +292,7 @@
app:layout_constraintWidth_percent="0.95"
app:uxsdk_titleBarBackgroundColor="@color/uxsdk_black" />
<LinearLayout
android:visibility="visible"
android:visibility="gone"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="100dp"

View File

@ -746,12 +746,19 @@
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="中间" />
<RadioButton
android:id="@+id/rb_camera_null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="无" />
android:text="下视" />
<RadioButton
android:id="@+id/rb_camera_mix"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="融合" />
</RadioGroup>
</LinearLayout>