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

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

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