From 73da6671bd933ab98207474cbcc309c23e270f2d Mon Sep 17 00:00:00 2001 From: zhongchao Date: Thu, 20 Jul 2023 16:50:22 +0800 Subject: [PATCH] [3.4.0] add func of door state invoke --- .../res/drawable/iv_light_increase_set.png | Bin 0 -> 2138 bytes .../src/main/res/drawable/iv_light_set.png | Bin 0 -> 1735 bytes .../res/drawable/iv_voice_increase_set.png | Bin 0 -> 1572 bytes .../src/main/res/drawable/iv_voice_set.png | Bin 0 -> 1057 bytes .../main/res/layout/taxi_p_setting_view.xml | 26 +++-- .../autopilot/adapter/MoGoAdasListenerImpl.kt | 2 + .../IMoGoChassisDoorStateListener.kt | 22 ++++ .../CallerChassisDoorStateListenerManager.kt | 108 ++++++++++++++++++ 8 files changed, 147 insertions(+), 11 deletions(-) create mode 100644 OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_increase_set.png create mode 100644 OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_set.png create mode 100644 OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_increase_set.png create mode 100644 OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_set.png create mode 100644 core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoChassisDoorStateListener.kt create mode 100644 core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisDoorStateListenerManager.kt diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_increase_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_increase_set.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec15568b0c3b8e5b78a57d401a59466f11332d6 GIT binary patch literal 2138 zcmV-g2&MOlP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K9#7RU!R9Fe^SZQ!nRTjQWce=9) zsLdc)g#wBxQA@J1m7?O3G-Ffaao4Dbv5is!To?$r%FF9c zo3C1M7v2}}T4Sf)5n$o&lOR*!N{PkzspFi!tfK zq6p(+Dnk53d1ZC?H+w>fbTlt0`O{Jc{58pp%Q@p0ga_pQ!{0W4os5>&Y&Eze5YU0M zuaF7;VFTsYB9RXl-t^dbnkKfrjT`IEJS+3+*2ay?+csBsC+^d{pmfC&$=Tl!oR8+H z@d05#7me+jqcgj++<(_XY>r_1ToWWymk#LaHe~jS#c=+OPfZ?Hkvy)9%Z?rynp{}2 zVvtGx15>hf!db5U+y7N%Y8>fuquSv8jH!#vvs@fiz}L40Yj;|_lJ$-Nch|2wg1)y* z4at`UgA$C;er~`ZF(RK-L$F-aLuHu%@)$stK$TDwbAu?1!$HLwOyX2W{NPooTayMn>kNcF|D23>ld!-_Z-_I{waf#62T>${wHgaTE_Bq`yB>G;gS)n_82|u|4HcQX*#=3nqhwa8 zv43zdOmM)3QcUjFxvR`0au@lFd{?=$-PeNflo}wPL+yQUq5$P`adq>s9)2ni2#9pS z5e7#eOaw_jhiR^uY>GNSUlMOHp7~r`@TDJ#wkc?y7{dPt@L6+tX~iBFlW(9uo`>4R ze5Y>zp!LW*xM!PIOb&7X($*kFD`KL6FntceH3^q|wzV+^E{^BO@ZXIazW^!zihH}sXx07e_9MK@va|NZ9YeYEQFsy~P)6?4yO|wfY zmJu=KIZ7oorhv%ElK-J`sz&~%xMwqRFiCMbaX{<)Ln?U|-w_||80@=3fN?L@A``7m zpx?{H1J~XCM39m&XFK35FO+z!oN9x|)57>;NV zldP6EN;}D|<(1hCoIa`JBeWLO++hSr(L7z(UF4gqPw=tr7Wki;Fl_WMr5{EX z01k(yWEXeR0VjDD!#ERLOUe836Flu$=*99E-Vj*YSE2^4N=_YHr9w9Xp+BR?%!{oE zjY-*1U%$+>kkeUfFKvM2haC6@x?AZm2GbO&^y-4rl}jjP1N zKH(O3G&j_4cao8~mo`AE=bGMM9a>QKbWT(YZxvjj@K|KVqMKM@D#2)t1w?F>1S;k_ zgvtHM*2bDT(roUu@St@8BmzpDrv-3!>B_|t^d}KOhTH2c%NUo_AO5-Lc}(1QV4XOP z0wA%)R03&kUG3W!9pPy7o0uabep|N;8R6bNnlB#Ju_ffH8?wjpa+9U~=DydXDaE zit5J~mIrdegU2UwuIF;eG((BdH1GVb_-G}wM%zUja+yun0BYZFMEgH3zO(Ym=C^D6 z6J=X-+bE{@Rs)Q?Fc|Voa9kY2fT+qWn($d-Jx3S+d0FE+l>s@r0@c>A{!lzP5=K5p zX2nY=XgLICf;@E`N-QwRdRu@yUJu~AE&LZj^`pstD$a+ zYd^jxkaNpdEzv{zeIWSG=3q@M`NtE*jU55Tw8-8fdd_R&j-5QDZ!=*SFawT?j8xxd z@NJO-W7El8lFw{SoSgjEUp*}VPxaf(sr<~8c`zMjr}Awk9e%&l{H8SU3+^d@7eFR% Q%K!iX07*qoM6N<$f|{!K?EnA( literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_light_set.png new file mode 100644 index 0000000000000000000000000000000000000000..de1f7f064fd3447339fa36dfee14d13575885703 GIT binary patch literal 1735 zcmV;&1~~bNP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K8F-b&0R9Fe^S9@$zRT%%yqbs$A zZ3s9-g$+>D7?cghYXSc<8#*Fp#uy`lny4^g(MXgSNQ{pNI;E(I2!^00G9zK=i2fxk zFvcUsL^R4CfCGW?8nl+R_ngn~>vm&P*REX_6O-L!JNMpm&hPy0?|T+t=o(UBNP+*i z0%9=fmsYO0!Ewxz9O>EC^iA!l!N8V-0m2xFD4du%BM?_djnhz7wOtJc_Mj1*yKvQ5 zDX>j}2?#)cN2ICXKPQ+@6$iQvf{42esVE(*O)7%vaFX|AtYArH^*ybjy_btCmVeOK z0Xbf40l~`$SSboTUbM-F@pExS^=oaRy;m8puleM684-*Viop+>%%>0^KOS!Uq`bO1 zPR0dntP6Ic5MRYWhXja?`**BA=g#rS>q{z@Z0uBNf(IBPWx`t)b|hAkg+&gTEQ$f}oJrT6qQ) ztW*L!j1k`x!H>sGgjaS4gWd5({rt;HLB?Wpb>8`l2p{U2k2d-xnQSDPiztaM8ZTLp z-DFDgPt2#cxjaK^UnFm;36x&{#pt7VU?$4ByfgAacQKC)&Spgu+e*$pQVL;+0HDx| zrB9X}*&Uq1BR|vo7D4kpA7R(vMFBIr(C9~&R;W?)LdTLW$ZDjU?FOG?I3#p}}_V0T4G%4NVxJf`M36?IZ zzR8K$Zz&r6Tp5s(FZtC*(0Vh(obO1L@fOr^HfOJ5NzgryjAJ9Vk<2{72z>&yx(^-u zoCJIbEJg{LE?J~Ks-U_4{ja$Ifs<1@V4jv{a%qt_Rl^Q6Po53rZ%(&nXFNtv;p53|OJs=*!y;=+l%UwxAa6 zoaZ=|aI~^QeF3}gc)mBPf%ox#3apO^GZM!YvW<}1^f2+6yC-o>Ns#3}+z^yG+Fz!$ zn&k_KyN@&kS9rYgWN#8C9LzV@L~$Zu@_o-d=JR{r$NLHQC7)l6XI!rilobWarlqn( zN*_!HHiYF&VvAdR{cv3VL+fDvDiPX0UYRjR9U{+B)pr&%% zlsRo^Z8>>izNW$)Gq_;ftus&FeAkTdsb3FXVY7}coO!P?X1_<6TvA$ERDTNXS$6vO z1D);%WHJs&!TD>~>QM8AN2$!!ax5(La_7hB?zbhjXb48&p_$?*uQ`EKOQChfSKx`@s%vV4XQAsSMl+q6Jy4i;s)}2XQd&B6jjaFx002ovPDHLkV1hwE7xMrB literal 0 HcmV?d00001 diff --git a/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_increase_set.png b/OCH/mogo-och-taxi-passenger/src/main/res/drawable/iv_voice_increase_set.png new file mode 100644 index 0000000000000000000000000000000000000000..7e62e77a056d7d30311e6f1a9463b55ab0f29c51 GIT binary patch literal 1572 zcmV+<2HW|GP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K7j!8s8R9Fe^R()(!RTRJHwM{$5 zWU!EdBE}$zMqn&4`-;&C23^bim_krA62-Bu4BQ_Y68)nj0vSU5nCn0#=pQ80C4l?r zW&m9X`=~RKp&*)ROeV>uKp`+|x7T+(=e~Ap-(KhHf5zVA-Fv>@xxahfxlf4nNF$I& zAdSHP8v*#Y+b`Q#b4xI&9wz^XguoLHOQxr*b^qmmidXoUdj+W2iU^&3eqR*;;B-F9 zbjoD9(sk9duLj3YAz}qRa}mY*koxEA$?W6h78UczelcyTvSe-b_IRBcopOR+uU83; zVv|5|Uwl9ixH6uPrwd)~%AzuN8Ov_VT=1y?@eR|c;hqP|x8BKgvXOFvonH^{6NoMj z2m%HLz%bJYkj<-c6gfSGLc@b7&|l(myPBK5V^%9XN4{Y?TSqve?lSts^C=}*P^IIW?2uE<%n zjrs0&-&d5(XH3(^wv}%3I!-p%T_?Ip$~5t8Sxt>y(uOH%f_$8#VQmOeJ4`j_A(-Y# zUx0={yH6r%h&92I?H`gsQCH&h+`+U}vF+Anm>vFoq(Y}Hhj``K!9jJElo=+|1i7%u z=^&k6#)Lh^LT6vLs3h-@Wi+Uf_WG`?kD`d}XC_0fX) z{bUOZ(b=^ZNV;c6NEaYGR0~9NGRrX|zT)PsJ># zC!b~-1;~~}ElVTjqSOQC#q8qOBngUDx|6uv>u-Fkx5YO|J0(D7KFIzUTXRz`URN6} z59PaPguA#7r5?ohx*gmb)g>(E2_ojQ6&=ah1nbn8V9Xpw$Fi6P)W)QYPA4PlioRhK zSELNYEV&vc^8|&E&6nWMf>zog+k*))YFCwomD$#g6P1|**B;I+`};}pf`6;8a0sZg+BWp)tlnt}yKm_B!DpqyaJk#Ypt zv^xVMj}XKQSVkXJm(&?1(*)UuTFQI24Ethobkp+@iLSGp@8V)t^-D}AAK<0UeUc$y zBcY_pFIL04sQqs%ZqMUeiAL;-gVF44>leB#ah}p-6V;Pk@mkMnjA)%ymsXOFTfp*g zkH6tG-8dKYct^9+MRPYJE(8FGz_Zo(Z%cXexQ4W{DP7FY58&1M=N6=`l$q zMR3wYr+V8OPVpTamD?hy9p#r8?TmbhvwCGLIXa1EPOjAJwQ6JP5l)Vf4qNQjy+*$n zKjQ@1LEgc17wgWLqm7NX5qkQ6Aegs_3_A=_f&D@?eZr9mFS74n{UbZcuTaKO#QvV+ z^*`$|r_Ov_DGk1hLxB~)df4ZRUE5{)27_?fqWmTh$_A^|p5J%;onH;=G@C{sjX)ZKGy?xM1pWq- W@cXSR<_lQ>0000Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91D4+uX1ONa40RR91C;$Ke0D9(TtN;K5i%CR5R9Fe^R!eA8K@^?)@?sjQ zB9sz;xDW&dL4|4(L9BLTl6FyP3*u72CMB)eh~g#)B4|b1lD4AYRuL*SHj!GPR{Mz? zb>YJA!f({tRHRMYBs1Q5`A|ceH|=w!ZyG$SD>eY`a!$9XnK?UhCL{(l!0ysfrxINMv zc+15iA(1qMjNZBww>jL+=&eMcnswNZs6`7BB>NR0AmgKmkXu!?965WrYwRY26>BrLi9$a4bE3(Hc_3ad<>5%whu6gVd?1lA%*^h=ThhRNasNIQi4h|R zhK_k)t?_u`gU#6(wK^M5iYn^xdQCJ%+p;)VaeA`-VoxE0W1&CNGLF*I2QPm zC2~5&q~}J1)ISt#dtbn%;FP8>YOBlRA(RHv$ne8plC5+u8N^Dl1+{t+33qKRm~|18 zLVIu_Jf#L>El%568J$bqMRMuyKw!y*;ubTni6BpuuEo&L` @@ -40,10 +41,11 @@ app:layout_constraintWidth_percent="0.253" /> @@ -72,10 +74,11 @@ app:layout_constraintTop_toBottomOf="@+id/tvSettingLight" /> @@ -94,10 +97,11 @@ app:layout_constraintWidth_percent="0.253" /> @@ -105,7 +109,7 @@ android:id="@+id/tvVoicePer" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/dp_333" + android:layout_marginTop="@dimen/dp_330" android:layout_marginRight="@dimen/dp_113" android:gravity="right" android:textColor="@color/taxi_p_303C52" diff --git a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt index f7cc9e3ba4..fac5ae9442 100644 --- a/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt +++ b/core/function-impl/mogo-core-function-datacenter/src/main/java/com/mogo/eagle/core/function/datacenter/autopilot/adapter/MoGoAdasListenerImpl.kt @@ -170,6 +170,8 @@ class MoGoAdasListenerImpl : OnAdasListener { CallerChassisThrottleStateListenerManager.invokeAutopilotThrottle(vehicleState.throttle) //刹车 CallerChassisBrakeStateListenerManager.invokeAutopilotBrake(vehicleState.brake) + //车门 + CallerChassisDoorStateListenerManager.invokeAutopilotDoorState(vehicleState.doorStateList) //电量 if (vehicleState.hasBmsSoc()) { CallerBatteryManagementSystemListenerManager.invokeBatteryManagementSystemStates( diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoChassisDoorStateListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoChassisDoorStateListener.kt new file mode 100644 index 0000000000..5cecb34e8c --- /dev/null +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/autopilot/IMoGoChassisDoorStateListener.kt @@ -0,0 +1,22 @@ +package com.mogo.eagle.core.function.api.autopilot + +import chassis.Chassis.DoorNumber +import chassis.VehicleStateOuterClass + +/** + * 车门数据 回调监听 + */ +interface IMoGoChassisDoorStateListener { + + /** + * 车门状态集合 底盘HZ + */ + fun onAutopilotDoorState(doorList: MutableList) {} + + /** + * 单个车门状态回调(变化回调) + * @param num 枚举 taxi(前左/右,后左/右) / bus(中) + * @param open true:开门(1), false:关门(0) + */ + fun onAutopilotSingleDoorState(num:DoorNumber, open:Boolean){} +} \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisDoorStateListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisDoorStateListenerManager.kt new file mode 100644 index 0000000000..65714818ad --- /dev/null +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerChassisDoorStateListenerManager.kt @@ -0,0 +1,108 @@ +package com.mogo.eagle.core.function.call.autopilot + +import chassis.Chassis +import chassis.VehicleStateOuterClass +import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener +import com.mogo.eagle.core.function.call.base.CallerBase +import java.util.* +import kotlin.properties.Delegates + +/** + * 车门数据 回调监听 + */ +object CallerChassisDoorStateListenerManager : CallerBase() { + + private val listCache = Collections.emptyList() + + private var frontLeft by Delegates.observable(0) { _, oldV, newV -> + if (oldV != newV) { + invokeSingleDoorState(Chassis.DoorNumber.FRONT_LEFT, newV) + } + } + + private var frontRight by Delegates.observable(0) { _, oldV, newV -> + if (oldV != newV) { + invokeSingleDoorState(Chassis.DoorNumber.FRONT_RIGHT, newV) + } + } + + private var backLeft by Delegates.observable(0) { _, oldV, newV -> + if (oldV != newV) { + invokeSingleDoorState(Chassis.DoorNumber.REAR_LEFT, newV) + } + } + + private var backRight by Delegates.observable(0) { _, oldV, newV -> + if (oldV != newV) { + invokeSingleDoorState(Chassis.DoorNumber.REAR_RIGHT, newV) + } + } + + private var middle by Delegates.observable(0) { _, oldV, newV -> + if (oldV != newV) { + invokeSingleDoorState(Chassis.DoorNumber.MIDDLE, newV) + } + } + + override fun doSomeAfterAddListener(tag: String, listener: IMoGoChassisDoorStateListener) { + super.doSomeAfterAddListener(tag, listener) + if (listCache.size > 0) { + listener.onAutopilotDoorState(listCache) + } + } + + /** + * 车门状态 + */ + fun invokeAutopilotDoorState(doorList: MutableList) { + listCache.addAll(doorList) + doorList.forEach { + when (it.number) { + Chassis.DoorNumber.FRONT_LEFT -> frontLeft = it.status + Chassis.DoorNumber.FRONT_RIGHT -> frontRight = it.status + Chassis.DoorNumber.REAR_LEFT -> backLeft = it.status + Chassis.DoorNumber.REAR_RIGHT -> backRight = it.status + Chassis.DoorNumber.MIDDLE -> middle = it.status + else -> {} + } + } + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotDoorState(doorList) + } + } + + @Synchronized + private fun invokeSingleDoorState(num: Chassis.DoorNumber, value: Int) { + M_LISTENERS.forEach { + val listener = it.value + listener.onAutopilotSingleDoorState(num, value == 1) + } + } + + /** + * 返回所有门状态 + */ + fun getDoorList(): List? { + return if (listCache.size > 0) listCache else null + } + + /** + * 获取某个门的状态 + * @param num + * @return true:开门,false:关门 + */ + fun getIndexDoorState(num: Chassis.DoorNumber): Boolean { + return when (num) { + Chassis.DoorNumber.FRONT_LEFT -> frontLeft == 1 + Chassis.DoorNumber.FRONT_RIGHT -> frontRight == 1 + Chassis.DoorNumber.REAR_LEFT -> backLeft == 1 + Chassis.DoorNumber.REAR_RIGHT -> backRight == 1 + Chassis.DoorNumber.MIDDLE -> middle == 1 + else -> { + false + } + } + } +} +