Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
SuZhouAvp
Commits
5e6e85f0
Commit
5e6e85f0
authored
Sep 30, 2025
by
p x
Browse files
添加协议
parent
9723db98
Changes
10
Show whitespace changes
Inline
Side-by-side
app/libs/car_and_road_3d-0930-debug.aar
0 → 100644
View file @
5e6e85f0
File added
app/libs/unityLibrary-release(9).aar
deleted
100644 → 0
View file @
9723db98
File deleted
app/src/main/java/com/sd/cavphmi/highmap/HighMapApi.kt
View file @
5e6e85f0
...
@@ -144,4 +144,28 @@ object HighMapApi {
...
@@ -144,4 +144,28 @@ object HighMapApi {
UnityPlayer
.
UnitySendMessage
(
MODELNAME
,
"parkRoundLight"
,
gson
.
toJson
(
parkRoundLight
))
UnityPlayer
.
UnitySendMessage
(
MODELNAME
,
"parkRoundLight"
,
gson
.
toJson
(
parkRoundLight
))
}
}
// 停车位绘制 - 上面有其他车的状态(传入车辆占用情况绘制)
fun
setParkStatu
(
parkStatu
:
ParkStatu
)
{
UnityPlayer
.
UnitySendMessage
(
MODELNAME
,
"SetSpaceParkStatu"
,
gson
.
toJson
(
parkStatu
))
}
// 正在倒车
fun
setParkRever
(
reverCar
:
ReverCar
)
{
UnityPlayer
.
UnitySendMessage
(
MODELNAME
,
"SetParking"
,
gson
.
toJson
(
reverCar
))
}
// 泊车完成
fun
setParkComplete
(
complete
:
Boolean
)
{
var
parkComplete
=
ParkComplete
().
apply
{
this
.
complete
=
complete
}
UnityPlayer
.
UnitySendMessage
(
MODELNAME
,
"SetParking"
,
gson
.
toJson
(
parkComplete
))
}
// 设置地锁状态
fun
setLockStatus
(
lockStatu
:
LockStatu
)
{
UnityPlayer
.
UnitySendMessage
(
MODELNAME
,
"setLockStatus"
,
gson
.
toJson
(
lockStatu
))
}
}
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/highmap/LockStatu.kt
0 → 100644
View file @
5e6e85f0
package
com.sd.cavphmi.highmap
class
LockStatu
{
var
code
=
""
//车位编号
var
isHide
=
false
var
up
=
false
//// true是升起, false是降下
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/highmap/ParkComplete.kt
0 → 100644
View file @
5e6e85f0
package
com.sd.cavphmi.highmap
//泊车完成
class
ParkComplete
{
var
complete
=
false
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/highmap/ParkStatu.kt
0 → 100644
View file @
5e6e85f0
package
com.sd.cavphmi.highmap
//停车位绘制 - 上面有其他车的状态(传入车辆占用情况绘制)
data class
ParkStatu
(
val
spinfo
:
List
<
Spinfo
>
)
class
Spinfo
{
val
code
:
String
=
""
val
state
:
String
=
""
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/highmap/ReverCar.kt
0 → 100644
View file @
5e6e85f0
package
com.sd.cavphmi.highmap
class
ReverCar
{
val
cenLat
:
Double
=
0.0
//车位中心点坐标
val
cenLng
:
Double
=
0.0
//车位中心点坐标
val
code
:
String
=
""
//车位编号
}
\ No newline at end of file
app/src/main/java/com/sd/cavphmi/ui/MainActivity.kt
View file @
5e6e85f0
...
@@ -102,6 +102,12 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>(),
...
@@ -102,6 +102,12 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>(),
}
}
private
fun
mockBt
()
{
private
fun
mockBt
()
{
//获取AVP状态
binding
.
btAvpStatu
.
setOnClickListener
{
mainVm
.
getAvpStatus
().
observe
(
this
)
{
}
}
//联网车辆位姿数据
//联网车辆位姿数据
binding
.
btVehicle
.
setOnClickListener
{
binding
.
btVehicle
.
setOnClickListener
{
mainVm
.
subVehicle
().
observe
(
this
)
{
mainVm
.
subVehicle
().
observe
(
this
)
{
...
@@ -188,46 +194,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>(),
...
@@ -188,46 +194,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>(),
ft
.
commit
()
ft
.
commit
()
}
}
/* private fun setImage() {
if(mainVm.v2xStartBean.value.type==1){//前向碰撞
binding.viewPopuler.setImageResource(R.drawable.advance)
startPulseAnimation(binding.viewPopuler)
}else if(mainVm.v2xStartBean.value.type==3){//左转辅助
binding.viewPopuler.setImageResource(R.drawable.left_icon)
startPulseAnimation(binding.viewPopuler)
}else if(mainVm.v2xStartBean.value.type==4){//盲区预警
binding.viewPopuler.setImageResource(R.drawable.change_lanes)
startPulseAnimation(binding.viewPopuler)
}else if(mainVm.v2xStartBean.value.type==6){//紧急制动预警
binding.viewPopuler.setImageResource(R.drawable.stop_icon)
startPulseAnimation(binding.viewPopuler)
}else if(mainVm.v2xStartBean.value.type==12){//弱势交通参与者
binding.viewPopuler.setImageResource(R.drawable.weak)
startPulseAnimation(binding.viewPopuler)
}else{
binding.viewPopuler.setImageResource(0)
}
}*/
/* fun startPulseAnimation(imageView: ImageView) {
val alphaAnim = ObjectAnimator.ofFloat(imageView, "alpha", 1.0f, 0.5f)
val scaleXAnim = ObjectAnimator.ofFloat(imageView, "scaleX", 1.0f, 1.2f)
val scaleYAnim = ObjectAnimator.ofFloat(imageView, "scaleY", 1.0f, 1.2f)
val set = AnimatorSet().apply {
playTogether(alphaAnim, scaleXAnim, scaleYAnim)
duration = 300
}
set.start()
}
private val displayRunnable = object : Runnable {
override fun run() {
isPlay = false
}
}*/
override
fun
dispatchKeyEvent
(
event
:
KeyEvent
):
Boolean
{
override
fun
dispatchKeyEvent
(
event
:
KeyEvent
):
Boolean
{
if
((
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_BACK
)
||
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_HOME
)
{
if
((
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_BACK
)
||
event
.
getKeyCode
()
==
KeyEvent
.
KEYCODE_HOME
)
{
// var ft = supportFragmentManager.beginTransaction()
// var ft = supportFragmentManager.beginTransaction()
...
...
app/src/main/java/com/sd/cavphmi/viewmodels/MainVm.kt
View file @
5e6e85f0
...
@@ -26,6 +26,9 @@ import com.sd.cavphmi.websockets.V2xWSClient
...
@@ -26,6 +26,9 @@ import com.sd.cavphmi.websockets.V2xWSClient
import
com.sd.cavphmi.websockets.VecLocWSClient
import
com.sd.cavphmi.websockets.VecLocWSClient
import
dagger.hilt.android.lifecycle.HiltViewModel
import
dagger.hilt.android.lifecycle.HiltViewModel
import
dagger.hilt.android.qualifiers.ApplicationContext
import
dagger.hilt.android.qualifiers.ApplicationContext
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.isActive
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.launch
import
java.net.URI
import
java.net.URI
import
javax.inject.Inject
import
javax.inject.Inject
...
@@ -84,8 +87,10 @@ class MainVm @Inject constructor(
...
@@ -84,8 +87,10 @@ class MainVm @Inject constructor(
//avp状态数据
//avp状态数据
var
avpStatu
=
MutableLiveData
<
AvpStatuBean
>()
var
avpStatu
=
MutableLiveData
<
AvpStatuBean
>()
//车位占用情况
//车位占用情况
var
spaceInfo
=
MutableLiveData
<
SpaceInfoBean
>()
var
spaceInfo
=
MutableLiveData
<
SpaceInfoBean
>()
//获取已绑定车辆列表
//获取已绑定车辆列表
var
bindCars
=
MutableLiveData
<
List
<
BindCarItem
>>()
var
bindCars
=
MutableLiveData
<
List
<
BindCarItem
>>()
...
@@ -146,9 +151,12 @@ class MainVm @Inject constructor(
...
@@ -146,9 +151,12 @@ class MainVm @Inject constructor(
return
spaceInfo
return
spaceInfo
}
}
private
var
avpStatuJob
:
Job
?
=
null
//HTTP获取AVP状态
//HTTP获取AVP状态
fun
getAvpStatus
()
:
LiveData
<
AvpStatuBean
>{
fun
getAvpStatus
():
LiveData
<
AvpStatuBean
>
{
viewModelScope
.
launch
{
avpStatuJob
=
viewModelScope
.
launch
{
while
(
isActive
)
{
var
result
=
avpDataRepo
.
getAvpStatus
()
var
result
=
avpDataRepo
.
getAvpStatus
()
when
(
result
)
{
when
(
result
)
{
is
MyResult
.
Success
<
AvpStatuBean
>
->
{
is
MyResult
.
Success
<
AvpStatuBean
>
->
{
...
@@ -160,12 +168,17 @@ class MainVm @Inject constructor(
...
@@ -160,12 +168,17 @@ class MainVm @Inject constructor(
else
->
{
else
->
{
}
}
}
}
delay
(
2000
)
}
}
avpStatuJob
?.
invokeOnCompletion
{
}
}
return
avpStatu
return
avpStatu
}
}
//HTTP获取已绑定车辆列表
//HTTP获取已绑定车辆列表
fun
getBindCar
()
:
LiveData
<
AvpStatuBean
>{
fun
getBindCar
():
LiveData
<
AvpStatuBean
>
{
viewModelScope
.
launch
{
viewModelScope
.
launch
{
var
result
=
avpDataRepo
.
getBindCar
()
var
result
=
avpDataRepo
.
getBindCar
()
when
(
result
)
{
when
(
result
)
{
...
@@ -201,12 +214,17 @@ class MainVm @Inject constructor(
...
@@ -201,12 +214,17 @@ class MainVm @Inject constructor(
var
carBean
=
gson
.
fromJson
(
str
,
CarVehicle
::
class
.
java
)
var
carBean
=
gson
.
fromJson
(
str
,
CarVehicle
::
class
.
java
)
// carVehicle.postValue(carBean)
// carVehicle.postValue(carBean)
//更新主车位置
//更新主车位置
var
car
=
carBean
.
first
()
var
car
=
carBean
.
first
()
HighMapApi
.
setCarPosition
(
car
.
heading
,
car
.
latitude
,
car
.
longitude
,
20.80189
)
HighMapApi
.
setCarPosition
(
car
.
heading
,
car
.
latitude
,
car
.
longitude
,
20.80189
)
}
}
}
}
}
}
if
(!
vecLocWSClient
.
isOpen
){
if
(!
vecLocWSClient
.
isOpen
)
{
vecLocWSClient
.
connect
()
vecLocWSClient
.
connect
()
}
}
}
catch
(
e
:
Exception
)
{
}
catch
(
e
:
Exception
)
{
...
@@ -234,7 +252,7 @@ class MainVm @Inject constructor(
...
@@ -234,7 +252,7 @@ class MainVm @Inject constructor(
}
}
}
}
}
}
if
(!
feelTargetWSClient
.
isOpen
){
if
(!
feelTargetWSClient
.
isOpen
)
{
feelTargetWSClient
.
connect
()
feelTargetWSClient
.
connect
()
}
}
}
catch
(
e
:
Exception
)
{
}
catch
(
e
:
Exception
)
{
...
@@ -263,7 +281,7 @@ class MainVm @Inject constructor(
...
@@ -263,7 +281,7 @@ class MainVm @Inject constructor(
}
}
}
}
}
}
if
(
v2xWSClient
.
isOpen
==
false
){
if
(
v2xWSClient
.
isOpen
==
false
)
{
v2xWSClient
.
connect
()
v2xWSClient
.
connect
()
}
}
}
catch
(
e
:
Exception
)
{
}
catch
(
e
:
Exception
)
{
...
...
app/src/main/res/layout/activity_main.xml
View file @
5e6e85f0
...
@@ -93,21 +93,15 @@
...
@@ -93,21 +93,15 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"选择车辆"
android:text=
"选择车辆"
/>
/>
<!-- <Button-->
<!-- android:id="@+id/bt_tarpre"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="交通(感知)事件"-->
<!-- android:visibility="gone"/>-->
<!-- <Button-->
<!-- android:id="@+id/bt_tarlight"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="交通信号灯"-->
<!-- android:visibility="gone"/>-->
<Button
android:id=
"@+id/bt_avpStatu"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"AVP状态"
/>
</LinearLayout>
</LinearLayout>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment