Commit 066a88e4 authored by 罗小雨's avatar 罗小雨
Browse files

本地模拟数据 车速 航向 电量

parent 7d910fb1
...@@ -33,14 +33,16 @@ class CarPanelBean { ...@@ -33,14 +33,16 @@ class CarPanelBean {
/***档位**/ /***档位**/
var tapPos = ObservableField<Int>(GearStatus.P) var tapPos = ObservableField<Int>(GearStatus.P)
var gear = 0
//剩余油量或电量 //剩余油量或电量
var remainSoc = ObservableField<Int>(0) var remainSoc = ObservableField<Int>(0)
var soc = 0
//转向灯 1=left 2=right //转向灯 1=left 2=right
var lights = ObservableField<Int>(-1) var lights = 0
var driveMode = ObservableField("") var driveMode = ""
//航向角0.。360 //航向角0.。360
var heading = ObservableField<Int>(0) var heading = ObservableField<Int>(0)
......
...@@ -30,10 +30,10 @@ object ShowCarPanelObject { ...@@ -30,10 +30,10 @@ object ShowCarPanelObject {
var tag = tv.tag.toString().toInt() var tag = tv.tag.toString().toInt()
// println("--------tag = ${tag} gear = ${gear}") // println("--------tag = ${tag} gear = ${gear}")
if (tag == gear) { if (tag == gear) {
tv.setTextColor(Color.BLACK) tv.setTextColor(Color.BLUE)
} else { } else {
// tv.setTextColor(Color.GRAY) // tv.setTextColor(Color.GRAY)
tv.setTextColor("#66000000".toColorInt()) tv.setTextColor("#A59C9C".toColorInt())
} }
} }
......
...@@ -42,6 +42,11 @@ class LoginActivity : AppCompatActivity() { ...@@ -42,6 +42,11 @@ class LoginActivity : AppCompatActivity() {
} }
} }
loginVm.loginData.observe(this){
startActivity(Intent(this,MainActivity::class.java))
}
//获取车辆信息
// HTTP获取车辆详情 还没调通 // HTTP获取车辆详情 还没调通
binding.btVehinfo.setOnClickListener { binding.btVehinfo.setOnClickListener {
mainVm.getVehDetail() mainVm.getVehDetail()
......
...@@ -74,6 +74,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() { ...@@ -74,6 +74,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MainVm>() {
binding.btVehicle.setOnClickListener { binding.btVehicle.setOnClickListener {
viewModel.subVehicle().observe(this) { viewModel.subVehicle().observe(this) {
// topicVehicle(it) // topicVehicle(it)
} }
} }
//感知目标物 //感知目标物
......
package com.sd.cavphmi.ui.fragment package com.sd.cavphmi.ui.fragment
import android.graphics.Color
import androidx.activity.viewModels
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.sd.cavphmi.BR import com.sd.cavphmi.BR
import com.sd.cavphmi.R import com.sd.cavphmi.R
import com.sd.cavphmi.base.BaseFragment import com.sd.cavphmi.base.BaseFragment
import com.sd.cavphmi.base.MyBaseViewModel import com.sd.cavphmi.base.MyBaseViewModel
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.CarVehicleItem
import com.sd.cavphmi.databinding.FragmentCarPanelBinding import com.sd.cavphmi.databinding.FragmentCarPanelBinding
import com.sd.cavphmi.viewmodels.MainVm
import com.sd.cavphmi.viewmodels.MockVM
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
...@@ -17,7 +29,7 @@ import dagger.hilt.android.AndroidEntryPoint ...@@ -17,7 +29,7 @@ import dagger.hilt.android.AndroidEntryPoint
* 车仪表 * 车仪表
*/ */
@AndroidEntryPoint @AndroidEntryPoint
class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, MyBaseViewModel>() { class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, MainVm>() {
// //
// private var param1: String? = null // private var param1: String? = null
// private var param2: String? = null // private var param2: String? = null
...@@ -30,6 +42,9 @@ class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, MyBaseViewModel>( ...@@ -30,6 +42,9 @@ class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, MyBaseViewModel>(
// } // }
// } // }
private val mockVM: MockVM by activityViewModels()
override fun getStatuBarColor(): Int { override fun getStatuBarColor(): Int {
return -1 return -1
} }
...@@ -43,17 +58,72 @@ class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, MyBaseViewModel>( ...@@ -43,17 +58,72 @@ class CarPanelFragment : BaseFragment<FragmentCarPanelBinding, MyBaseViewModel>(
return R.layout.fragment_car_panel return R.layout.fragment_car_panel
} }
override fun initViewModel(): MyBaseViewModel { override fun initViewModel(): MainVm {
return ViewModelProvider(this).get(MyBaseViewModel::class.java) return ViewModelProvider(this).get(MainVm::class.java)
} }
override fun initVariableId(): Int { override fun initVariableId(): Int {
return BR.vm return BR.vm
} }
private var currentNumber = 0 // 初始数字
override fun initView() { override fun initView() {
viewModel.mockVM = mockVM
binding.cpBean=viewModel.carPanelBean
//驾驶模式
if(viewModel.carPanelBean.driveMode=="1"){
binding.tvDrivemode.text="自动驾驶"
}else{
binding.tvDrivemode.text="人工驾驶"
}
//车灯
if(viewModel.carPanelBean.lights==0){
binding.ivLeftLight.setImageResource(R.drawable.trun_left_grey)
binding.ivRightLight.setImageResource(R.drawable.trun_left_grey)
}else if(viewModel.carPanelBean.lights==1){
binding.ivLeftLight.setImageResource(R.drawable.trun_left_blue)
binding.ivRightLight.setImageResource(R.drawable.trun_left_grey)
}else{
binding.ivLeftLight.setImageResource(R.drawable.trun_left_grey)
binding.ivRightLight.setImageResource(R.drawable.trun_right_blue)
}
//档位
if(viewModel.carPanelBean.gear==0){
binding.tvP.setTextColor(Color.BLUE)
binding.tvR.setTextColor(resources.getColor(R.color.text_grey))
binding.tvN.setTextColor(resources.getColor(R.color.text_grey))
binding.tvD.setTextColor(resources.getColor(R.color.text_grey))
}else if(viewModel.carPanelBean.gear==1){
binding.tvP.setTextColor(resources.getColor(R.color.text_grey))
binding.tvR.setTextColor(Color.BLUE)
binding.tvN.setTextColor(resources.getColor(R.color.text_grey))
binding.tvD.setTextColor(resources.getColor(R.color.text_grey))
}else if(viewModel.carPanelBean.gear==2){
binding.tvP.setTextColor(resources.getColor(R.color.text_grey))
binding.tvR.setTextColor(resources.getColor(R.color.text_grey))
binding.tvN.setTextColor(resources.getColor(R.color.text_grey))
binding.tvD.setTextColor(Color.BLUE)
}else if(viewModel.carPanelBean.gear==3){
binding.tvP.setTextColor(resources.getColor(R.color.text_grey))
binding.tvR.setTextColor(resources.getColor(R.color.text_grey))
binding.tvN.setTextColor(Color.BLUE)
binding.tvD.setTextColor(resources.getColor(R.color.text_grey))
}
// 启动协程定时切换
lifecycleScope.launch {
while (true) {
if(currentNumber>100){
return@launch
}
binding.tvSoc.text = "${currentNumber}%"
binding.proSoc.progress = currentNumber
delay(1000) // 等待10秒
currentNumber++
println("-----"+currentNumber)
}
}
} }
override fun initListener() { override fun initListener() {
......
...@@ -22,7 +22,7 @@ object MyContants { ...@@ -22,7 +22,7 @@ object MyContants {
//仅仅用于测试接口联通性,这里可不传 //仅仅用于测试接口联通性,这里可不传
private val reType = "51world" private val reType = "51world"
//测试环境 // var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&reType=${reType}&"
var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&" var WSHOST = "wss://itg-dev.cu-sc.com:19443/WSPLUSV5/socket?token=${WSTOKEN}&"
// var PORT = if (IS_DEBUG) "123" else "34534" // var PORT = if (IS_DEBUG) "123" else "34534"
......
...@@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData ...@@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.net.MyResult import com.sd.cavphmi.net.MyResult
import com.sd.cavphmi.repositorys.AvpDataRepo import com.sd.cavphmi.repositorys.AvpDataRepo
import com.sd.cavphmi.utils.MyContants import com.sd.cavphmi.utils.MyContants
...@@ -16,6 +17,11 @@ class LoginVm @Inject constructor(private var avpDataRepo: AvpDataRepo) : ViewMo ...@@ -16,6 +17,11 @@ class LoginVm @Inject constructor(private var avpDataRepo: AvpDataRepo) : ViewMo
//1= 登录成功 0 = 登录失败 //1= 登录成功 0 = 登录失败
var lLogin = MutableLiveData(-1) var lLogin = MutableLiveData(-1)
var loginData = MutableLiveData<String>()
get() = field
set(value) {
field = value
}
/**** /****
* 登录 * 登录
...@@ -35,6 +41,7 @@ class LoginVm @Inject constructor(private var avpDataRepo: AvpDataRepo) : ViewMo ...@@ -35,6 +41,7 @@ class LoginVm @Inject constructor(private var avpDataRepo: AvpDataRepo) : ViewMo
when (result) { when (result) {
is MyResult.Success<String> -> { is MyResult.Success<String> -> {
MyContants.HTTP_TOKEN = result.data MyContants.HTTP_TOKEN = result.data
loginData.postValue("true")
lLogin.value=1 lLogin.value=1
} }
else -> { else -> {
......
package com.sd.cavphmi.viewmodels package com.sd.cavphmi.viewmodels
import android.content.Context import android.content.Context
import android.util.Log
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
...@@ -34,6 +35,7 @@ import kotlinx.coroutines.launch ...@@ -34,6 +35,7 @@ import kotlinx.coroutines.launch
import java.net.URI import java.net.URI
import java.util.Timer import java.util.Timer
import javax.inject.Inject import javax.inject.Inject
import kotlin.math.truncate
@HiltViewModel @HiltViewModel
...@@ -44,7 +46,9 @@ class MainVm @Inject constructor( ...@@ -44,7 +46,9 @@ class MainVm @Inject constructor(
// private var client: MyWebSocketClient? = null // private var client: MyWebSocketClient? = null
//网联车辆位姿socket private val TAG="MainVm"
//w网联车辆socket
private var vecLocWSClient: VecLocWSClient? = null private var vecLocWSClient: VecLocWSClient? = null
//感知物socket //感知物socket
...@@ -71,7 +75,7 @@ class MainVm @Inject constructor( ...@@ -71,7 +75,7 @@ class MainVm @Inject constructor(
lateinit var mockVM: MockVM lateinit var mockVM: MockVM
//是否需要模拟 //是否需要模拟
var isMock = false var isMock = true
//车辆位姿数据 //车辆位姿数据
var carVehicle = MutableLiveData<CarVehicle>() var carVehicle = MutableLiveData<CarVehicle>()
...@@ -139,7 +143,7 @@ class MainVm @Inject constructor( ...@@ -139,7 +143,7 @@ class MainVm @Inject constructor(
* **/ * **/
fun subVehicle(): LiveData<CarVehicle> { fun subVehicle(): LiveData<CarVehicle> {
if (isMock) { if (isMock) {
// mockVM.onVehicleMock(carVehicle, carPanelBean.heading, carPanelBean.speed) mockVM.onVehicleMock(carVehicle, carPanelBean)
} else { } else {
try { try {
if (vecLocWSClient == null) { if (vecLocWSClient == null) {
...@@ -149,12 +153,15 @@ class MainVm @Inject constructor( ...@@ -149,12 +153,15 @@ class MainVm @Inject constructor(
vecLocWSClient?.onDataCb = object : VecLocWSClient.OnDataCb { vecLocWSClient?.onDataCb = object : VecLocWSClient.OnDataCb {
override fun onMsg(str: String) { override fun onMsg(str: String) {
viewModelScope.launch { viewModelScope.launch {
//下载到sd卡下面的DownLoad文件夹下面
FileIoUtils.writeToFile(str, "CarVehicle.txt") FileIoUtils.writeToFile(str, "CarVehicle.txt")
var bean = gson.fromJson(str, CarVehicle::class.java) var bean = gson.fromJson(str, CarVehicle::class.java)
carVehicle.postValue(bean) carVehicle.postValue(bean)
} }
} }
} }
}else{
Log.e(TAG,"进来了")
} }
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
......
...@@ -6,7 +6,9 @@ import androidx.lifecycle.MutableLiveData ...@@ -6,7 +6,9 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.google.gson.Gson import com.google.gson.Gson
import com.sd.cavphmi.bean.CarPanelBean
import com.sd.cavphmi.bean.CarVehicle import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.CarVehicleItem
import com.sd.cavphmi.bean.PerTarget import com.sd.cavphmi.bean.PerTarget
import com.sd.cavphmi.utils.FileIoUtils import com.sd.cavphmi.utils.FileIoUtils
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
...@@ -38,8 +40,7 @@ class MockVM @Inject constructor( ...@@ -38,8 +40,7 @@ class MockVM @Inject constructor(
* **/ * **/
fun onVehicleMock( fun onVehicleMock(
carVehicle: MutableLiveData<CarVehicle>, carVehicle: MutableLiveData<CarVehicle>,
heading: ObservableField<Int>, carPanelBean:CarPanelBean
speed: ObservableField<Float>
) { ) {
viewModelScope.launch { viewModelScope.launch {
val dst = mutableListOf<String>() val dst = mutableListOf<String>()
...@@ -48,8 +49,10 @@ class MockVM @Inject constructor( ...@@ -48,8 +49,10 @@ class MockVM @Inject constructor(
delay(1000) delay(1000)
val bean = parseDataBean(str, CarVehicle::class.java) val bean = parseDataBean(str, CarVehicle::class.java)
println("------模拟车辆位姿数据 = ${bean}") println("------模拟车辆位姿数据 = ${bean}")
heading.set(bean.first().heading.toInt()) println("------车速 = ${bean.first().speed}")
speed.set(bean.first().speed.toFloat()) println("------电量 = ${bean.first().soc}")
carPanelBean.speed.set(bean.first().speed.toInt())
carPanelBean.heading.set(bean.first().heading.toInt())
carVehicle.value = bean carVehicle.value = bean
} }
} }
......
...@@ -22,8 +22,8 @@ class VecLocWSClient : WebSocketClient { ...@@ -22,8 +22,8 @@ class VecLocWSClient : WebSocketClient {
) )
override fun onOpen(handshakedata: ServerHandshake?) { override fun onOpen(handshakedata: ServerHandshake?) {
// send("Hello, it is me. Mario :)") send("Hello, it is me. Mario :)")
// System.out.println(TAG + "new connection opened") System.out.println(TAG + "new connection opened")
} }
override fun onMessage(message: String?) { override fun onMessage(message: String?) {
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
<!-- 车辆仪表--> <!-- 车辆仪表-->
<FrameLayout <FrameLayout
android:id="@+id/map_car_pan" android:id="@+id/map_car_pan"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_width="@dimen/map_left_top_widget" android:layout_width="@dimen/map_left_top_widget"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_10" android:layout_marginLeft="@dimen/dp_10"
...@@ -34,6 +36,7 @@ ...@@ -34,6 +36,7 @@
<LinearLayout <LinearLayout
android:layout_marginTop="30dp"
android:id="@+id/ll_1" android:id="@+id/ll_1"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="match_parent"
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
android:id="@+id/tv_p" android:id="@+id/tv_p"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:tag="33" android:tag="0"
android:text="P" android:text="P"
android:textColor="@color/text_grey" android:textColor="@color/text_grey"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:tag="32" android:tag="1"
android:text="R" android:text="R"
android:textColor="@color/text_grey" android:textColor="@color/text_grey"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:tag="34" android:tag="3"
android:text="N" android:text="N"
android:textColor="@color/text_grey" android:textColor="@color/text_grey"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:tag="31" android:tag="2"
android:text="D" android:text="D"
android:textColor="@color/text_grey" android:textColor="@color/text_grey"
android:textSize="@dimen/sp_14" android:textSize="@dimen/sp_14"
...@@ -120,19 +120,19 @@ ...@@ -120,19 +120,19 @@
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
android:id="@+id/tv_soc"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:showProTv="@{cpBean.remainSoc}"
tools:text="90%" /> tools:text="90%" />
<ProgressBar <ProgressBar
android:id="@+id/pro_soc"
style="@style/MyProgressBarStyle" style="@style/MyProgressBarStyle"
android:layout_width="@dimen/dp_40" android:layout_width="@dimen/dp_40"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:max="100" android:max="100"
android:minHeight="8dp" android:minHeight="8dp"
android:paddingVertical="0dp" android:paddingVertical="0dp"
app:showProgress="@{cpBean.remainSoc}"
tools:progress="50" /> tools:progress="50" />
</LinearLayout> </LinearLayout>
...@@ -186,6 +186,7 @@ ...@@ -186,6 +186,7 @@
<!-- app:showAutoDri="@{cpBean.driveMode}"--> <!-- app:showAutoDri="@{cpBean.driveMode}"-->
<TextView <TextView
android:id="@+id/tv_drivemode"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
...@@ -203,6 +204,7 @@ ...@@ -203,6 +204,7 @@
app:showTurnLight="@{cpBean.lights}"> app:showTurnLight="@{cpBean.lights}">
<ImageView <ImageView
android:id="@+id/iv_left_light"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:tag="left" android:tag="left"
...@@ -210,6 +212,7 @@ ...@@ -210,6 +212,7 @@
tools:src="@drawable/trun_left_grey" /> tools:src="@drawable/trun_left_grey" />
<ImageView <ImageView
android:id="@+id/iv_right_light"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_20" android:layout_marginLeft="@dimen/dp_20"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment