[6.6.0] merge

This commit is contained in:
EmArrow
2024-08-16 11:24:53 +08:00
26 changed files with 580 additions and 311 deletions

View File

@@ -11,7 +11,6 @@ import kotlinx.android.synthetic.main.charter_p_statusview_blue_tooth.view.mofan
/**
* 魔戒蓝牙控件
* 放置于StatusBar右侧位置
* todo arrow
*/
class M1BlueToothView @JvmOverloads constructor(
context: Context,

View File

@@ -10,6 +10,9 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.env.ProjectUtils
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.base.IMoGoFunctionProvider
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
@@ -19,22 +22,21 @@ import com.mogo.eagle.core.function.hmi.ui.widget.StatusBarView
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d
import com.mogo.eagle.core.utilcode.util.AppUtils
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.mogo.eagle.core.utilcode.util.VolumeUtils
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.biz.login.BusinessEnum
import com.mogo.och.common.module.biz.login.ILoginCallback
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.login.LoginStatusEnum
import com.mogo.och.common.module.biz.login.LoginStatusManager
import com.mogo.och.common.module.biz.provider.CommonService
import com.mogo.och.common.module.constant.OchCommonConst
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.commons.env.ProjectUtils
/**
* 网约车小巴业务实现入口
*
* @author tongchenfei
*/
abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
private var containerId = 0
@@ -79,14 +81,14 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
}
private fun getFragment(): Fragment {
if(FunctionBuildConfig.isOffLine){
if(AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
if (FunctionBuildConfig.isOffLine) {
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.OFFLINE_DRIVER)
}else if(AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)){
} else if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.OFFLINE_PASSENGER)
}
}
if(DeviceUtils.isEB5Model()&&!AppIdentityModeUtils.isCharterPassenger(FunctionBuildConfig.appIdentityMode)){
if(DeviceUtils.isEB5Model() && !AppIdentityModeUtils.isCharterPassenger(FunctionBuildConfig.appIdentityMode)){
val maxVolume = VolumeUtils.getMaxVolume(AudioManager.STREAM_MUSIC)
val volume = VolumeUtils.getVolume(AudioManager.STREAM_MUSIC)
val tartgetVolume = (maxVolume * 0.8).toInt()
@@ -98,19 +100,19 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
if (AppIdentityModeUtils.isBusDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.BUS_DRIVER)
} else if (AppIdentityModeUtils.isShuttleDriver(FunctionBuildConfig.appIdentityMode)) {
return if(ProjectUtils.isSaas()){
return if (ProjectUtils.isSaas()) {
getFragmentByServeName(OchCommonConst.SHUTTLE_DRIVER_WEAKNET)
}else{
} else {
getFragmentByServeName(OchCommonConst.SHUTTLE_DRIVER)
}
} else if (AppIdentityModeUtils.isCharterDriver(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.CHARTER_DRIVER)
} else if (AppIdentityModeUtils.isTaxiDriver(FunctionBuildConfig.appIdentityMode)) {
return if(ProjectUtils.isMogo()){
return if (ProjectUtils.isMogo()) {
getFragmentByServeName(OchCommonConst.TAXI_DRIVER)
}else if(ProjectUtils.isSaas()){
} else if (ProjectUtils.isSaas()) {
getFragmentByServeName(OchCommonConst.TAXI_UNMANNED_DRIVER)
}else{
} else {
getFragmentByServeName(OchCommonConst.TAXI_DRIVER)
}
} else if (AppIdentityModeUtils.isSweeper(FunctionBuildConfig.appIdentityMode)) {
@@ -118,19 +120,19 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
} else if (AppIdentityModeUtils.isBusPassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.BUS_PASSENGER)
} else if (AppIdentityModeUtils.isShuttlePassenger(FunctionBuildConfig.appIdentityMode)) {
return if(ProjectUtils.isSaas()){
return if (ProjectUtils.isSaas()) {
getFragmentByServeName(OchCommonConst.SHUTTLE_PASSENGER_WEAKNET)
}else{
} else {
getFragmentByServeName(OchCommonConst.SHUTTLE_PASSENGER)
}
} else if (AppIdentityModeUtils.isCharterPassenger(FunctionBuildConfig.appIdentityMode)) {
return getFragmentByServeName(OchCommonConst.CHARTER_PASSENGER)
} else if (AppIdentityModeUtils.isTaxiPassenger(FunctionBuildConfig.appIdentityMode)) {
return if(ProjectUtils.isMogo()){
return if (ProjectUtils.isMogo()) {
getFragmentByServeName(OchCommonConst.TAXI_PASSENGER)
}else if(ProjectUtils.isSaas()){
} else if (ProjectUtils.isSaas()) {
getFragmentByServeName(OchCommonConst.TAXI_UNMANNED_PASSENGER)
}else{
} else {
getFragmentByServeName(OchCommonConst.TAXI_PASSENGER)
}
}
@@ -162,7 +164,7 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
}
override fun onStatusChange(currentStatus: LoginStatusEnum) {
d(TAG, "登录状态发生改变 ${currentStatus}")
d(TAG, "登录状态发生改变 $currentStatus")
UiThreadHandler.post {
showFragment()
}
@@ -170,18 +172,31 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
override fun onBusinessChange(businessEnum: BusinessEnum) {
super.onBusinessChange(businessEnum)
val (_, identity, model) =AppIdentityModeUtils.getInfo(FunctionBuildConfig.appIdentityMode)
val (_, identity, model) = AppIdentityModeUtils.getInfo(FunctionBuildConfig.appIdentityMode)
when (businessEnum) {
BusinessEnum.None -> {}
BusinessEnum.Taxi -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.TAXI}_${identity}_${model}"
BusinessEnum.Bus -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.BUS}_${identity}_${model}"
BusinessEnum.Shuttle -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.SHUTTLE}_${identity}_${model}"
BusinessEnum.Charter -> FunctionBuildConfig.appIdentityMode = "${AppIdentityModeUtils.CHARTER}_${identity}_${model}"
BusinessEnum.Taxi -> FunctionBuildConfig.appIdentityMode =
"${AppIdentityModeUtils.TAXI}_${identity}_${model}"
BusinessEnum.Bus -> FunctionBuildConfig.appIdentityMode =
"${AppIdentityModeUtils.BUS}_${identity}_${model}"
BusinessEnum.Shuttle -> FunctionBuildConfig.appIdentityMode =
"${AppIdentityModeUtils.SHUTTLE}_${identity}_${model}"
BusinessEnum.Charter -> FunctionBuildConfig.appIdentityMode =
"${AppIdentityModeUtils.CHARTER}_${identity}_${model}"
}
// 加入启动统计
val mStartParams: HashMap<String, Any> = HashMap()
mStartParams["start_time"] = TimeUtils.getNowMills()
mStartParams["app_version"] = AppUtils.getAppVersionName()
mStartParams["app_identity_mode"] = FunctionBuildConfig.appIdentityMode
MogoAnalyticUtils.track("app_start_time", mStartParams)
}
override fun onBusinessChangeDebug(businessEnum: BusinessEnum) {
if(businessEnum==BusinessEnum.None){
if (businessEnum == BusinessEnum.None) {
removeStatusBar()
CallerHmiManager.hideToolsView()
ToggleDebugView.toggleDebugView.dismiss()
@@ -194,7 +209,7 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
back.replace(containerId, fragment, fragment.tag)
back.commitAllowingStateLoss()
}
}else {
} else {
onBusinessChange(businessEnum)
val supportFragmentManager: FragmentManager? = activity?.supportFragmentManager
val fragment = getFragment()
@@ -227,22 +242,23 @@ abstract class FacadeProvider : IMoGoFunctionProvider, ILoginCallback {
)
statusBarLP.topMargin = 0
statusBarLP.gravity = Gravity.TOP
statusBar?.let {view->
if(view.isAttachedToWindow){
statusBar?.let { view ->
if (view.isAttachedToWindow) {
return
}
}
CallerLogger.d(TAG,"添加statusBar---${commonService}")
CallerLogger.d(TAG, "添加statusBar---${commonService}")
decorView.addView(statusBarView, statusBarLP)
}
}
private fun removeStatusBar(){
private fun removeStatusBar() {
activity?.let {
CallerLogger.d(TAG,"移除statusBar")
CallerLogger.d(TAG, "移除statusBar")
val decorView = it.window.decorView as? FrameLayout ?: return
val statusBar = decorView.findViewWithTag<View>("status_bar")
statusBar?.let {
decorView.removeView(it)
val statusBar = decorView.findViewWithTag<View>("status_bar")
statusBar?.let { view ->
decorView.removeView(view)
}
}
}

View File

@@ -13,7 +13,6 @@ import kotlinx.android.synthetic.main.taxt_u_p_blue_tooth.view.mofangView
/**
* 魔戒蓝牙控件
* 放置于StatusBar右侧位置
* todo arrow
*/
class TaxiPBlueToothView : RelativeLayout, IMoGoMoFangProvider.OnMoFangStatusListener {

View File

@@ -8,7 +8,6 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.network.MoGoRetrofitFactory
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.function.biz.v2x.V2XBizTrace
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
@@ -48,7 +47,6 @@ class LineUploadManager private constructor(context: Context) : IMoGoAutopilotSt
override fun onAutopilotRouteLineId(lineId: Long) {
super.onAutopilotRouteLineId(lineId)
V2XBizTrace.onAck("onAutopilotRouteLineId", "lineId: $lineId")
if (lineId > 0) {
uploadLine(lineId)
}

View File

@@ -239,10 +239,9 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
uuid = e.uuid ?: ""
}
}
Logger.d(TAG, "cameraIp: $cameraIp, heading:$heading, uuid: $uuid")
val newEventId = "other_retrograde_vehicle_${event.eventId}"
val isUseGps = event.gnssType != 0
Logger.i(TAG, "isUseGps --> $isUseGps")
V2XBizTrace.onAck(TAG, mapOf("cameraIp" to cameraIp, "heading" to heading, "uuid" to uuid, "isUseGps" to isUseGps, "newEventId" to newEventId), true)
val eventLocation = arrayOf(event.longitude, event.latitude)
val carLocation = if (isUseGps) CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() else CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
if (DrivingDirectionUtils.getDegreeOfCar2Poi(
@@ -531,7 +530,6 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
}
private fun drawShiGong(events: List<TrackedObject>) {
// V2XBizTrace.onAck(events,"onV2NShiGong", false)
if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) {
handler.removeMessages(MSG_WHAT_DRAW_SHIGONE)
handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_SHIGONE, events))
@@ -539,7 +537,6 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
}
private fun drawShiGu(events: List<TrackedObject>) {
// V2XBizTrace.onAck(events,"onV2NShiGu", false)
if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) {
handler.removeMessages(MSG_WHAT_DRAW_SHIGU)
handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_SHIGU, events))
@@ -547,7 +544,6 @@ internal object V2NIdentifyDrawer: IEventDismissListener {
}
private fun drawYongDu(events: List<MogoV2X.RTEData_PB>) {
// V2XBizTrace.onAck(events,"onV2NYongDu", false)
if (V2NCarTypeCheck.verifyCarType() && FunctionBuildConfig.v2nMainSwitch && FunctionBuildConfig.isNewV2NData) {
handler.removeMessages(MSG_WHAT_DRAW_YONGDU)
handler.sendMessage(Message.obtain(handler, MSG_WHAT_DRAW_YONGDU, events))

View File

@@ -5,32 +5,30 @@ import chassis.Chassis
import chassis.ChassisStatesOuterClass
import chassis.VehicleStateOuterClass
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.data.config.HdMapBuildConfig
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ABILITY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ARRIVE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_RECORD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ROUTE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_VEHICLE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_CONFIG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_CAR_LOC
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_FM_MSG
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_GUARDIAN
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_MAP_PARAM
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_PARALLEL
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_ACTIONS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_P_OBJECTS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_RECORD
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_ROUTE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_STATUS_QUERY_RESP
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_CODE_ADAS_VEHICLE
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_SOURCE_ADAS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_GNSS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_AUTOPILOT
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_TRAJECTORY
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_SOCKET_VEHICLE
import com.mogo.eagle.core.function.call.autopilot.*
import com.mogo.eagle.core.data.deva.chain.ChainConstant.Companion.CHAIN_TYPE_STATUS
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeArriveAtStation
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotGuardian
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeAutopilotSNRequest
@@ -38,22 +36,51 @@ import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.invokeSystemStatus
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutoPilotDockerInfo
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager.updateAutoPilotStatus
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListenerManager.invokeAutopilotAbility
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotCarConfigListenerManager.invokeAutopilotCarConfigData
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotGetParamResponseDispatcher
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyDataUpdate
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotIdentifyListenerManager.invokeAutopilotIdentifyPlanningObj
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotPointCloudListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordConfig
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotRecordListenerManager.invokeAutopilotRecordResult
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotStatisticsListenerManager.invokeAutopilotStatistics
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotVehicleStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerBackCameraVideoListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerBatteryManagementSystemListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisAccStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisBrakeStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisDoorStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisGearStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisGnssListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLamplightListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisSteeringStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerChassisThrottleStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerFaultManagementStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerFsm2024ListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerLocalizationStateListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingActionsListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerParallelDrivingListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningActionsListenerManager.invokePNCActions
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager.invokeAutopilotRotting
import com.mogo.eagle.core.function.call.autopilot.CallerPlanningTrajectoryListenerManager.invokeAutopilotTrajectory
import com.mogo.eagle.core.function.call.autopilot.CallerReceiveReceivedAckListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StatesListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StitchedVideoListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerStartAutopilotFailedListenerManager.invokeStartAutopilotFailed
import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerV2XListenerManager
import com.mogo.eagle.core.function.call.autopilot.CallerV2nNioEventListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuMapMathListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsiListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuWarningRsmListenerManager
import com.mogo.eagle.core.function.call.obu.CallerObuWarningSpatListenerManager
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C
import com.mogo.eagle.core.utilcode.util.DeviceUtils
import com.mogo.support.obu.ObuScene
import com.zhidao.support.adas.high.OnAdasListener
@@ -63,15 +90,15 @@ import com.zhidao.support.adas.high.common.ProtocolStatus
import com.zhjt.mogo.adas.common.MessageType
import com.zhjt.mogo.adas.data.AiCloudTask
import com.zhjt.mogo.adas.data.bean.AutopilotStatistics
import com.zhjt.mogo.adas.data.bean.ReceivedAck
import com.zhjt.mogo.adas.data.bean.LaunchConditionData
import com.zhjt.mogo.adas.data.bean.ReceivedAck
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable
import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm
import com.zhjt.mogo.adas.data.sweeper.task.s_r.SweeperTaskSuspendResume
import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus
import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop
import com.zhjt.service.chain.ChainLog
@@ -116,13 +143,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
}
}
//感知物体 注解暂时关闭通过调试面板查看数量此注解暂时用于aiCloud显示感知物
// @ChainLog(
// linkChainLog = CHAIN_LINK_LOG_WEB_SOCKET_DATA_TRACKED,
// linkCode = CHAIN_LINK_ADAS,
// nodeAliasCode = CHAIN_ALIAS_CODE_ADAS_MESSAGE_RECT_DATA,
// paramIndexes = [0, 1]
// )
override fun onTrackedObjects(
header: MessagePad.Header,
trackedObjects: MessagePad.TrackedObjects
@@ -142,10 +162,13 @@ class MoGoAdasListenerImpl : OnAdasListener {
override fun onGnssInfo(header: MessagePad.Header, gnssInfo: MessagePad.GnssInfo) {
CallerChassisGnssListenerManager.invokeChassisGnssListener(gnssInfo)
if (gnssInfo != null) {
if (1 == FunctionBuildConfig.gpsProvider) {
// 同步更新经纬度和系统时间至 AutoPilotStatusListener
CallerAutoPilotStatusListenerManager.updateAutoPilotLocAndTime(gnssInfo.satelliteTime, gnssInfo.longitude, gnssInfo.latitude, gnssInfo.heading)
}
// 同步更新经纬度和系统时间至 AutoPilotStatusListener
CallerAutoPilotStatusListenerManager.updateAutoPilotLocAndTime(
gnssInfo.satelliteTime,
gnssInfo.longitude,
gnssInfo.latitude,
gnssInfo.heading
)
}
}
@@ -169,8 +192,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
) {
CallerAutopilotActionsListenerManager.setVehicleState(vehicleState)
if (vehicleState != null) {
//转向灯数据
// CallerChassisLamplightListenerManager.invokeAutopilotLightSwitchData(vehicleState.light)
//刹车灯数据
CallerChassisLamplightListenerManager.invokeAutopilotBrakeLightData(vehicleState.brakeLightStatus)
//方向盘转向角数据
@@ -233,10 +254,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
CallerAutopilotActionsListenerManager.setChassisStates(chassisStates)
if (chassisStates != null) {
chassisStates.bcmSystemStates?.let { bcmSystemStates ->
// bcmSystemStates.turnLightState?.let {
// //转向灯数据
// CallerChassisLamplightListenerManager.invokeAutopilotLightSwitchData(it)
// }
//刹车灯数据
CallerChassisLamplightListenerManager.invokeAutopilotBrakeLightData(bcmSystemStates.brakeLightState != 0)
}
@@ -306,9 +323,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
if (autopilotState != null) {
//工控机模拟时间
CallerAutopilotVehicleStateListenerManager.invokeAutopilotTime(header.timestamp.toLong())
if (HdMapBuildConfig.isMapLoaded) {
updateAutoPilotStatus(autopilotState.state, autopilotState.autopilotMode)
}
updateAutoPilotStatus(autopilotState.state, autopilotState.autopilotMode)
}
}
@@ -323,9 +338,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
header: MessagePad.Header,
mogoReportMessage: MogoReportMsg.MogoReportMessage?
) {
if (HdMapBuildConfig.isMapLoaded) {
invokeAutopilotGuardian(mogoReportMessage)
}
invokeAutopilotGuardian(mogoReportMessage)
}
//融合感知红绿灯
@@ -463,18 +476,20 @@ class MoGoAdasListenerImpl : OnAdasListener {
header: MessagePad.Header?,
statusInfo: SystemStatusInfo.StatusInfo?
) {
if(statusInfo!=null && statusInfo.hasAutoPilotReady()){
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady = statusInfo.autoPilotReady
}else{
if (statusInfo != null && statusInfo.hasAutoPilotReady()) {
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady =
statusInfo.autoPilotReady
} else {
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady = false
}
invokeAutopilotStatusRespByQuery(statusInfo)
}
override fun onSystemStatus(header: MessagePad.Header?, statusInf: SsmInfo.SsmStatusInf?) {
if(statusInf!=null && statusInf.hasAutoPilotReady()){
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady = statusInf.autoPilotReady
}else{
if (statusInf != null && statusInf.hasAutoPilotReady()) {
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady =
statusInf.autoPilotReady
} else {
CallerAutoPilotStatusListenerManager.getAutoPilotStatusInfo().ssmAutoPilotReady = false
}
invokeSystemStatus(statusInf)
@@ -529,12 +544,12 @@ class MoGoAdasListenerImpl : OnAdasListener {
/**
* planning决策状态, 透传
*/
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_P_ACTIONS,
paramIndexes = [0, 1]
)
// @ChainLog(
// linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
// linkCode = CHAIN_SOURCE_ADAS,
// nodeAliasCode = CHAIN_CODE_ADAS_P_ACTIONS,
// paramIndexes = [0, 1]
// )
override fun onPlanningActionMsg(
header: MessagePad.Header?,
planningActionMsg: MessagePad.PlanningActionMsg?
@@ -1036,18 +1051,15 @@ class MoGoAdasListenerImpl : OnAdasListener {
launchConditionData: LaunchConditionData,
unableAutopilotReasons: ArrayList<UnableLaunchReason>?
) {
var reason = ""
if (unableAutopilotReasons != null) {
reason = unableAutopilotReasons.toString()
}
autopilotAbilityCheck(isAutopilotAbility, reason, launchConditionData.json)
invokeAutopilotAbility(isAutopilotAbility, launchConditionData, unableAutopilotReasons)
}
override fun onParallelDrivingAbility(
isParallelDrivingAbility: Boolean
) {
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(isParallelDrivingAbility)
CallerParallelDrivingActionsListenerManager.invokeParallelDrivingAbility(
isParallelDrivingAbility
)
}
/**
@@ -1083,16 +1095,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
private fun receiveReceivedAck(receivedAck: ReceivedAck) {
}
@ChainLog(
linkChainLog = CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_ADAS_ABILITY,
paramIndexes = [0, 1, 2]
)
private fun autopilotAbilityCheck(isAutopilotAbility: Boolean, reason: String, launchConditionDataJson: String) {
}
/**
* 启动自动驾驶失败回调
* 根据MAP 系统监控状态返回过滤
@@ -1122,6 +1124,6 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param bytes 原始数据
*/
override fun onError(status: ProtocolStatus, bytes: ByteArray) {
Logger.e(TAG, "status===$status")
CallerLogger.e("$M_D_C$TAG", "status===$status")
}
}

View File

@@ -328,7 +328,7 @@ class MoGoAdasMsgConnectStatusListenerImpl :
else -> {}
}
if (title.isNotEmpty() && content.isNotEmpty()) {
CallerMsgBoxManager.saveMsgBox(
CallerMsgBoxManager.saveMsgBoxNoTrace(
MsgBoxBean(
MsgBoxType.AUTOPILOT,
AutopilotMsg(0, title, content, System.currentTimeMillis())

View File

@@ -34,7 +34,7 @@ object MoGoLocationDispatcher :
private var lastGnssLocation: MogoLocation = MogoLocation()
/**
* 最后一次OBU GNSS 返回更新的位置
* 最后一次OBU GNSS 返回更新的位置
*/
private var lastOBULocation: MogoLocation = MogoLocation()
@@ -69,16 +69,10 @@ object MoGoLocationDispatcher :
lastGnssLocation.district = it.district
lastGnssLocation.province = it.province
lastGnssLocation.adCode = it.adCode
lastGnssLocation.locationDetail = it.locationDetail
lastGnssLocation.poiName = it.poiName
lastGnssLocation.aoiName = it.aoiName
lastGnssLocation.street = it.street
lastGnssLocation.streetNum = it.streetNum
lastGnssLocation.description = it.description
lastGnssLocation.buildingId = it.buildingId
lastGnssLocation.floor = it.floor
lastGnssLocation.errorCode = it.errorCode
lastGnssLocation.errorInfo = it.errorInfo
}
if (1 == FunctionBuildConfig.gpsProvider) {
// WGS84坐标系高精度位置信息
@@ -158,16 +152,10 @@ object MoGoLocationDispatcher :
lastOBULocation.district = it.district
lastOBULocation.province = it.province
lastOBULocation.adCode = it.adCode
lastOBULocation.locationDetail = it.locationDetail
lastOBULocation.poiName = it.poiName
lastOBULocation.aoiName = it.aoiName
lastOBULocation.street = it.street
lastOBULocation.streetNum = it.streetNum
lastOBULocation.description = it.description
lastOBULocation.buildingId = it.buildingId
lastOBULocation.floor = it.floor
lastOBULocation.errorCode = it.errorCode
lastOBULocation.errorInfo = it.errorInfo
}
if (2 == FunctionBuildConfig.gpsProvider) {

View File

@@ -9,6 +9,7 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
import com.mogo.eagle.core.function.call.msgbox.CallerMsgBoxManager
import com.mogo.eagle.core.utilcode.util.TimeUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import com.zhjt.mogo.adas.data.bean.MogoReport
import mogo_msg.MogoReportMsg
@@ -126,18 +127,19 @@ class IPCReportManager : IMoGoAutopilotStatusListener {
it.src,it.level,it.msg,it.code,it.resultList,it.actionsList,false)
CallerMsgBoxManager.saveMsgBox(MsgBoxBean(MsgBoxType.REPORT, reportEntity))
}
if (reportList.size > 49) {
reportList.removeLast()
}
reportList.add(
0,
ReportEntity(
TimeUtils.millis2String(System.currentTimeMillis()),
it.src, it.level, it.msg, it.code, it.resultList, it.actionsList
,false)
)
reportListFloatWindow?.refreshData(reportList)
UiThreadHandler.post({
if (reportList.size > 49) {
reportList.removeLast()
}
reportList.add(
0,
ReportEntity(
TimeUtils.millis2String(System.currentTimeMillis()),
it.src, it.level, it.msg, it.code, it.resultList, it.actionsList
,false)
)
reportListFloatWindow?.refreshData(reportList)
}, UiThreadHandler.MODE.QUEUE)
// //Error 弹窗并有提示音
// if(it.resultList.contains(RESULT_AUTOPILOT_DISABLE)

View File

@@ -9,6 +9,7 @@ import androidx.lifecycle.Lifecycle.Event
import androidx.lifecycle.Lifecycle.Event.ON_CREATE
import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.deva.chain.ChainConstant
import com.mogo.eagle.core.function.call.autopilot.CallerAutopilotActionsListenerManager
import com.mogo.eagle.core.utilcode.kotlin.*
import com.mogo.eagle.core.utilcode.mogo.logger.*
@@ -38,6 +39,7 @@ import com.zhjt.mogo_core_function_devatools.status.flow.ipc.IpcImpl
import com.zhjt.mogo_core_function_devatools.status.flow.rtk.RTKImpl
import com.zhjt.mogo_core_function_devatools.status.flow.trace.TracingImpl
import com.zhjt.mogo_core_function_devatools.status.ui.StatusView
import com.zhjt.service.chain.ChainLog
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import java.lang.ref.*
@@ -196,6 +198,7 @@ object StatusManager {
l.filter { it.isException() }.also { ll ->
val time = System.currentTimeMillis()
val launchCondition = CallerAutopilotActionsListenerManager.getLaunchCondition()
logLauncherCondition(launchCondition)
ThreadUtils.getIoPool().execute {
val result = runCatching {
MogoAnalyticUtils.track(
@@ -253,4 +256,12 @@ object StatusManager {
*/
fun onStatusChanged(changed: List<Status>, all: List<Status>)
}
@ChainLog(
linkChainLog = ChainConstant.CHAIN_TYPE_SOCKET_AUTOPILOT,
linkCode = ChainConstant.CHAIN_SOURCE_ADAS,
nodeAliasCode = ChainConstant.CHAIN_CODE_ADAS_ABILITY,
paramIndexes = [0]
)
private fun logLauncherCondition(json:String){}
}

View File

@@ -24,6 +24,7 @@ import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationWGS84Lis
import com.mogo.eagle.core.function.call.hmi.CallerHmiViewControlListenerManager
import com.mogo.eagle.core.function.call.hmi.CallerRoadV2NEventWindowListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.function.hmi.ui.utils.HmiActionLog
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.glide.GlideImageLoader
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -64,6 +65,7 @@ class RoadV2NEventWindowView @JvmOverloads constructor(
ANALYTICS_KEY,
map
)
HmiActionLog.hmiAction(TAG, msg)
}
CallerLogger.i(TAG, msg)
}

View File

@@ -10,7 +10,6 @@ import com.mogo.cloud.trafficlive.api.MoGoAiCloudTrafficLive
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.eagle.core.widget.RoundConstraintLayout
@@ -116,10 +115,6 @@ class DriverMonitorView :
currentDriverLiveSN = ""
}
Logger.d(
"${SceneConstant.M_HMI}$TAG",
"当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}"
)
CallerLogger.d(
"${SceneConstant.M_HMI}$TAG",
"当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}"
@@ -133,10 +128,6 @@ class DriverMonitorView :
*/
fun startLive() {
if (currentDriverLiveSN.isNotEmpty()) {
Logger.d(
"${SceneConstant.M_HMI}$TAG",
"检查司机直播……isLived=$isLived 当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}"
)
CallerLogger.d(
"${SceneConstant.M_HMI}$TAG",
"检查司机直播……isLived=$isLived 当前车上的司机端SN=${currentDriverSN},直播分体机SN=${currentDriverLiveSN}"
@@ -153,10 +144,6 @@ class DriverMonitorView :
} else {
ToastUtils.showShort("当前车内没有直播源")
//为空又怎么撸
Logger.d(
"${SceneConstant.M_HMI}$TAG",
"检查司机直播……isLived=$isLived 当前车辆SN=${currentDriverSN} 不支持直播"
)
CallerLogger.d(
"${SceneConstant.M_HMI}$TAG",
"检查司机直播……isLived=$isLived 当前车辆SN=${currentDriverSN} 不支持直播"
@@ -190,40 +177,34 @@ class DriverMonitorView :
private val carLiveCallBack = object : ITrafficCarLiveCallBack {
override fun onLive(liveSn: String?) {
Logger.i("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn")
CallerLogger.d("${SceneConstant.M_HMI}$TAG", "onLive:$liveSn")
}
override fun onFirstFrame() {
Logger.i("${SceneConstant.M_HMI}$TAG", "onFirstFrame:isFirstPage")
CallerLogger.d("${SceneConstant.M_HMI}$TAG", "onFirstFrame:isFirstPage")
isLived = true
refreshView(isLived)
}
override fun onDisConnect() {
Logger.w("${SceneConstant.M_HMI}$TAG", "onDisConnect")
CallerLogger.w("${SceneConstant.M_HMI}$TAG", "onDisConnect")
isLived = false
refreshView(isLived)
}
override fun onError(errorMsg: String?) {
Logger.e("${SceneConstant.M_HMI}$TAG", "onError msg is:${errorMsg}")
CallerLogger.e("${SceneConstant.M_HMI}$TAG", "onError msg is:${errorMsg}")
isLived = false
refreshView(isLived)
}
override fun onPlaying() {
Logger.i("${SceneConstant.M_HMI}$TAG", "onPlaying……")
CallerLogger.i("${SceneConstant.M_HMI}$TAG", "onPlaying……")
isLived = true
refreshView(isLived)
}
override fun onPlaRequesting() {
Logger.w("${SceneConstant.M_HMI}$TAG", "onPlaRequesting……")
CallerLogger.w("${SceneConstant.M_HMI}$TAG", "onPlaRequesting……")
isLived = false
refreshView(isLived)

View File

@@ -21,13 +21,18 @@ import com.mogo.eagle.core.function.call.setting.CallerSkinModeListenerManager
import com.mogo.eagle.core.function.hmi.R
import com.mogo.eagle.core.utilcode.kotlin.scope
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.util.BarUtils
import com.mogo.eagle.core.utilcode.util.ThreadUtils
import com.mogo.eagle.core.utilcode.util.UiThreadHandler
import kotlinx.android.synthetic.main.view_status_bar.view.*
import kotlinx.android.synthetic.main.view_status_bar.view.routeDownloadFailMark
import kotlinx.android.synthetic.main.view_status_bar.view.routeDownloadStatus
import kotlinx.android.synthetic.main.view_status_bar.view.routeDownloadStatusRoot
import kotlinx.android.synthetic.main.view_status_bar.view.status_container
import kotlinx.android.synthetic.main.view_status_bar.view.viewProgressTv
import kotlinx.android.synthetic.main.view_status_bar.view.viewStatusBarLeft
import kotlinx.android.synthetic.main.view_status_bar.view.viewStatusBarRight
import kotlinx.android.synthetic.main.view_status_bar.view.viewTextClock
import kotlinx.coroutines.Runnable
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.atomic.AtomicLong
@@ -36,7 +41,8 @@ class StatusBarView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr), IMoGoSkinModeChangeListener, IViewControlListener, IMoGoAutopilotStatusListener {
) : LinearLayout(context, attrs, defStyleAttr), IMoGoSkinModeChangeListener, IViewControlListener,
IMoGoAutopilotStatusListener {
companion object {
const val TAG = "StatusBarView"
@@ -61,35 +67,49 @@ class StatusBarView @JvmOverloads constructor(
}
//添加view控制
CallerHmiViewControlListenerManager.addListener(TAG,this)
CallerHmiViewControlListenerManager.addListener(TAG, this)
// 添加换肤监听
CallerSkinModeListenerManager.addListener(TAG, this)
//将状态窗口中的状态移到状态栏上
CallerDevaToolsManager.showStatusBar(context, status_container)
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)){
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
CallerAutoPilotStatusListenerManager.addListener(TAG, this)
updateStatusBarLeftView(true, FUNC_MODE_DEMO, DemoModeView(this.context))
updateStatusBarLeftView(true, FUNC_MODE_RAIN, RainModeView(this.context))
routeDownloadStatusRoot?.visibility = View.GONE
CallerDevaToolsManager.registerRouteDownloadListener(TAG) { state ->
when(state) {
when (state) {
0 -> {
routeDownloadStatusRoot?.visibility = View.GONE
}
1 -> {
routeDownloadStatusRoot?.visibility = View.VISIBLE
routeDownloadStatus?.background = ContextCompat.getDrawable(context, R.drawable.bg_autopilot_route_download_start)
routeDownloadStatus?.background = ContextCompat.getDrawable(
context,
R.drawable.bg_autopilot_route_download_start
)
routeDownloadFailMark?.visibility = View.GONE
}
2 -> {
routeDownloadStatusRoot?.visibility = View.VISIBLE
routeDownloadStatus?.background = ContextCompat.getDrawable(context, R.drawable.bg_autopilot_route_download_success)
routeDownloadStatus?.background = ContextCompat.getDrawable(
context,
R.drawable.bg_autopilot_route_download_success
)
routeDownloadFailMark?.visibility = View.GONE
UiThreadHandler.postDelayed(Runnable { routeDownloadStatusRoot?.visibility = View.GONE }, 3000)
UiThreadHandler.postDelayed(Runnable {
routeDownloadStatusRoot?.visibility = View.GONE
}, 3000)
}
3 -> {
routeDownloadStatusRoot?.visibility = View.VISIBLE
routeDownloadStatus?.background = ContextCompat.getDrawable(context, R.drawable.bg_autopilot_route_download_failed)
routeDownloadStatus?.background = ContextCompat.getDrawable(
context,
R.drawable.bg_autopilot_route_download_failed
)
routeDownloadFailMark?.visibility = View.VISIBLE
}
}
@@ -111,10 +131,11 @@ class StatusBarView @JvmOverloads constructor(
super.onAutopilotRouteLineId(lineId)
if (lineId != this.lineId.get()) {
this.lineId.set(lineId)
Logger.d(TAG, "--- onAutopilotRouteLineId ---: $lineId")
routeDownloadStatusRoot?.scope?.launch {
Logger.d(TAG, "--- onAutopilotRouteLineId 1 ---: $lineId")
if ((routeDownloadStatusRoot?.visibility == View.VISIBLE) && AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
if ((routeDownloadStatusRoot?.visibility == View.VISIBLE) && AppIdentityModeUtils.isDriver(
FunctionBuildConfig.appIdentityMode
)
) {
routeDownloadStatusRoot?.visibility = View.GONE
}
}
@@ -143,7 +164,7 @@ class StatusBarView @JvmOverloads constructor(
override fun updateStatusBarLeftView(insert: Boolean, tag: String, viewGroup: ViewGroup) {
if (insert) {
if(leftViewList.contains(tag)){
if (leftViewList.contains(tag)) {
return
}
leftViewList.add(0, tag)

View File

@@ -43,7 +43,6 @@ class NDERoadCameraNetWorkModel private constructor() {
loc.longitude,
loc.latitude,
CallerMapUIServiceManager.getCityCode() ?: ""
// "0734" //todo emArrow test
)
}
}
@@ -76,7 +75,6 @@ class NDERoadCameraNetWorkModel private constructor() {
loc.longitude,
loc.latitude,
CallerMapUIServiceManager.getCityCode() ?: ""
// "0734" //todo emArrow test
)
}
}

View File

@@ -256,14 +256,6 @@ class HttpDnsStartUp : AndroidStartup<Boolean>(), IMoGoCloudListener {
ThreadPoolService.execute {
// 初始化网络配置
NetConfigUtils.init()
// 加入启动统计
// todo 钟超 登陆后调用 获取 app_flavor
// val mStartParams: HashMap<String, Any> = HashMap()
// mStartParams["start_time"] = TimeUtils.getNowMills()
// mStartParams["app_version"] = AppUtils.getAppVersionName()
// mStartParams["app_flavor"] = DebugConfig.getProductFlavor()
// mStartParams["app_identity_mode"] = FunctionBuildConfig.appIdentityMode
// MogoAnalyticUtils.track("app_start_time", mStartParams)
}
}

View File

@@ -24,7 +24,7 @@ class ChainConstant {
//业务类型与下方文件名一一对应
const val CHAIN_TYPE_STATUS = 0 // 记录所有业务信息(正常调用,异常数据)
const val CHAIN_TYPE_GNSS = 1 // 工控定位数据
const val CHAIN_TYPE_SOCKET_AUTOPILOT = 2 // 包括自动驾驶状态,reportMsg,planning数据,全局路径数据,FM
const val CHAIN_TYPE_SOCKET_AUTOPILOT = 2 // 包括自动驾驶状态,reportMsg,PNC数据,全局路径数据,FM
const val CHAIN_TYPE_SOCKET_DATA_TRACKED = 3 // 感知数据,现阶段记录云端漫游
const val CHAIN_TYPE_SOCKET_TRAJECTORY = 4 // 前车引导线,用于调试
const val CHAIN_TYPE_SOCKET_VEHICLE = 5 // 底盘数据
@@ -79,7 +79,6 @@ class ChainConstant {
const val CHAIN_CODE_APP_INFO_CONFIG_UPDATE = "CHAIN_CODE_APP_INFO_CONFIG_UPDATE"
const val CHAIN_CODE_FUNC_CONFIG_CHANGED = "CHAIN_CODE_FUNC_CONFIG_CHANGED"
const val CHAIN_CODE_START_UP = "CHAIN_CODE_START_UP"
const val CHAIN_CODE_INIT_ENV_RESTART = "CHAIN_CODE_INIT_ENV_RESTART"
const val CHAIN_CODE_INIT_ON_MAP_LOADED = "CHAIN_CODE_INIT_ON_MAP_LOADED"
const val CHAIN_CODE_INIT_ON_MAP_INIT = "CHAIN_CODE_INIT_ON_MAP_INIT"
const val CHAIN_CODE_BINDING_CAR = "CHAIN_CODE_BINDING_CAR"

View File

@@ -14,16 +14,10 @@ public class MogoLocation implements Cloneable {
private String district = "";
private String province = "";
private String adCode = "";
private String locationDetail = "";
private String poiName = "";
private String aoiName = "";
private String street = "";
private String streetNum = "";
private String description = "";
private String buildingId = "";
private String floor = "";
private int errorCode = 0;
private String errorInfo = "";
private int gpsAccuracyStatus = 0;
private int satellite = 0;
@@ -93,14 +87,6 @@ public class MogoLocation implements Cloneable {
}
}
public String getLocationDetail() {
return locationDetail;
}
public void setLocationDetail(String locationDetail) {
this.locationDetail = locationDetail;
}
public String getPoiName() {
return poiName;
}
@@ -117,22 +103,6 @@ public class MogoLocation implements Cloneable {
this.aoiName = aoiName;
}
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public String getErrorInfo() {
return errorInfo;
}
public void setErrorInfo(String errorInfo) {
this.errorInfo = errorInfo;
}
public String getStreet() {
return street;
}
@@ -149,30 +119,6 @@ public class MogoLocation implements Cloneable {
this.streetNum = streetNum;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getBuildingId() {
return buildingId;
}
public void setBuildingId(String buildingId) {
this.buildingId = buildingId;
}
public String getFloor() {
return floor;
}
public void setFloor(String floor) {
this.floor = floor;
}
public int getGpsAccuracyStatus() {
return gpsAccuracyStatus;
}
@@ -330,17 +276,11 @@ public class MogoLocation implements Cloneable {
mogoLocation.adCode = lastLocation.adCode;
mogoLocation.address = lastLocation.address;
mogoLocation.aoiName = lastLocation.aoiName;
mogoLocation.buildingId = lastLocation.buildingId;
mogoLocation.cityCode = lastLocation.cityCode;
mogoLocation.cityName = lastLocation.cityName;
mogoLocation.description = lastLocation.description;
mogoLocation.district = lastLocation.district;
mogoLocation.errorCode = lastLocation.errorCode;
mogoLocation.errorInfo = lastLocation.errorInfo;
mogoLocation.floor = lastLocation.floor;
mogoLocation.gpsAccuracyStatus = lastLocation.gpsAccuracyStatus;
mogoLocation.lastReceiveTime = lastLocation.lastReceiveTime;
mogoLocation.locationDetail = lastLocation.locationDetail;
mogoLocation.locType = lastLocation.locType;
mogoLocation.poiName = lastLocation.poiName;
mogoLocation.provider = lastLocation.provider;
@@ -394,16 +334,10 @@ public class MogoLocation implements Cloneable {
", district='" + district + '\'' +
", province='" + province + '\'' +
", adCode='" + adCode + '\'' +
", locationDetail='" + locationDetail + '\'' +
", poiName='" + poiName + '\'' +
", aoiName='" + aoiName + '\'' +
", errCode=" + errorCode +
", errInfo='" + errorInfo + '\'' +
", street='" + street + '\'' +
", streetNum='" + streetNum + '\'' +
", description='" + description + '\'' +
", buildingId='" + buildingId + '\'' +
", floor='" + floor + '\'' +
", gpsAccuracyStatus=" + gpsAccuracyStatus +
", satellite=" + satellite +
'}';

View File

@@ -5,7 +5,8 @@ import chassis.VehicleStateOuterClass
import com.google.protobuf.TextFormat
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotActionsListener
import com.mogo.eagle.core.function.call.base.CallerBase
import com.mogo.eagle.core.utilcode.mogo.logger.Logger
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_D_C
import com.zhjt.mogo.adas.data.bean.LaunchConditionData
import com.zhjt.mogo.adas.data.bean.UnableLaunchReason
import org.json.JSONException
@@ -247,8 +248,8 @@ object CallerAutopilotActionsListenerManager : CallerBase<IMoGoAutopilotActionsL
}
private fun notification() {
Logger.d(
"CallerAutopilotActionsListenerManager",
CallerLogger.d(
"$M_D_C CallerAutopilotActionsListenerManager",
"是否可以启动自动驾驶=" + isAutopilotAbility + " 原因=" + (unableAutopilotReasons?.toString()) + " 原始数据=" + launchConditionData?.json
)
M_LISTENERS.forEach {

View File

@@ -9,40 +9,17 @@ import com.mogo.eagle.core.function.call.base.CallerBase
*/
object CallerChassisLamplightListenerManager : CallerBase<IMoGoChassisLamplightListener>() {
private var turnLightTimes = 0
private var isOnTurnLight = false
/**
* 车辆转向灯数据回调
* @param lightSwitch
*/
fun invokeAutopilotLightSwitchData(lightSwitch: Chassis.LightSwitch) {
// val switch = getTurnLightState(lightSwitch)
M_LISTENERS.forEach {
val listener = it.value
listener.onAutopilotLightSwitchData(lightSwitch)
}
}
private fun getTurnLightState(turn_light: Chassis.LightSwitch): Chassis.LightSwitch? {
if (turn_light.number == Chassis.LightSwitch.LIGHT_NONE.number) {
if (isOnTurnLight) {
if (turnLightTimes >= 10) {
isOnTurnLight = false
return turn_light
}
turnLightTimes++
return null
} else {
return null
}
} else {
turnLightTimes = 0
isOnTurnLight = true
return turn_light
}
}
/**
* 车辆刹车灯数据回调
* @param brakeLight

View File

@@ -2,6 +2,7 @@ package com.mogo.eagle.core.function.call.autopilot
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotPlanningActionsListener
import com.mogo.eagle.core.function.call.base.CallerBase
import com.mogo.eagle.core.function.call.trace.CallerTrace
import mogo.telematics.pad.MessagePad
/**
@@ -9,12 +10,22 @@ import mogo.telematics.pad.MessagePad
*/
object CallerPlanningActionsListenerManager : CallerBase<IMoGoAutopilotPlanningActionsListener>() {
private var state = 0
private var action = 0
/**
* pnc actions 决策回调
* @param planningActionMsg 具体决策
*/
@Synchronized
fun invokePNCActions(planningActionMsg: MessagePad.PlanningActionMsg) {
val s = planningActionMsg.actionMsg.drivingState.number
val a = planningActionMsg.actionMsg.drivingAction.number
if(s != state || a != action){
state = s
action = a
CallerTrace.write("PncActions", mapOf("state" to state, "action" to action))
}
M_LISTENERS.forEach {
val listener = it.value
listener.pncActions(planningActionMsg)

View File

@@ -21,6 +21,10 @@ object CallerMsgBoxManager {
providerApi?.queryAllMessages(context)
}
fun saveMsgBoxNoTrace(bean: MsgBoxBean){
providerApi?.saveMsg(bean)
}
/**
* 存储数据到消息盒子
*/

View File

@@ -64,21 +64,21 @@ bytex.ASM_API=ASM7
LOGLIB_VERSION=1.10.18
######## MogoAiCloudSDK Version ########
# 网络请求LOGLIB_VERSION
MOGO_NETWORK_VERSION=1.4.7.28
MOGO_NETWORK_VERSION=1.4.7.29
# 鉴权
MOGO_PASSPORT_VERSION=1.4.7.28
MOGO_PASSPORT_VERSION=1.4.7.29
# 长链接
MOGO_SOCKET_VERSION=1.4.7.28
MOGO_SOCKET_VERSION=1.4.7.29
# 数据采集
MOGO_REALTIME_VERSION=1.4.7.28
MOGO_REALTIME_VERSION=1.4.7.29
# 直播推流
MOGO_LIVE_VERSION=1.4.7.28
MOGO_LIVE_VERSION=1.4.7.29
# 直播拉流
MOGO_TRAFFICLIVE_VERSION=1.4.7.28
MOGO_TRAFFICLIVE_VERSION=1.4.7.29
# 定位服务
MOGO_LOCATION_VERSION=1.4.7.28
MOGO_LOCATION_VERSION=1.4.7.29
# 远程通讯模块
MOGO_TELEMATIC_VERSION=1.4.7.28
MOGO_TELEMATIC_VERSION=1.4.7.29
######## MogoAiCloudSDK Version ########
# 自研地图
MAP_SDK_VERSION=3.4.0.6

View File

@@ -6,7 +6,6 @@ import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_SYSTEM_CMD;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_ADAS_SEND_TRAJECTORY_DOWNLOAD;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_CONNECT_ADDRESS;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_CODE_STATUS_CHANGE_REASON;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_SOURCE_ADAS;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_TYPE_INIT_STATUS;
import static com.zhidao.support.adas.high.chain.AdasChain.CHAIN_TYPE_SOCKET_AUTOPILOT;
@@ -904,15 +903,6 @@ public class AdasChannel implements IAdasNetCommApi, FpgaSocket.IWebSocketConnec
}
}
@ChainLog(linkChainLog = CHAIN_TYPE_INIT_STATUS,
linkCode = CHAIN_SOURCE_ADAS,
nodeAliasCode = CHAIN_CODE_STATUS_CHANGE_REASON,
paramIndexes = {0, 1})
private void log(int status, @Nullable String reason) {
}
@Override
public void stopDispatchHandler() {
if (defaultDispatchHandler != null) {

View File

@@ -8,11 +8,8 @@ public class AdasChain {
public static final int CHAIN_TYPE_SOCKET_AUTOPILOT = 2;
public static final String CHAIN_CODE_ADAS_INIT = "CHAIN_CODE_ADAS_INIT";
public static final String CHAIN_CODE_STATUS_CHANGE_REASON = "CHAIN_CODE_STATUS_CHANGE_REASON";
public static final String CHAIN_CODE_CONNECT_ADDRESS = "CHAIN_CODE_CONNECT_ADDRESS";
public static final String CHAIN_CODE_WEB_SOCKET_OPEN = "CHAIN_CODE_WEB_SOCKET_OPEN";
public static final String CHAIN_CODE_WEB_SOCKET_MESSAGE_JSON = "CHAIN_CODE_WEB_SOCKET_MESSAGE_JSON";
public static final String CHAIN_CODE_WEB_SOCKET_MESSAGE_BYTE = "CHAIN_CODE_WEB_SOCKET_MESSAGE_BYTE";
//operation by user
public static final String CHAIN_CODE_ADAS_START_AUTOPILOT = "CHAIN_CODE_ADAS_START_AUTOPILOT";

View File

@@ -100,16 +100,10 @@ class GDLocationClient private constructor() : AMapLocationListener,
lastGaoDeLocation.district = it.district
lastGaoDeLocation.province = it.province
lastGaoDeLocation.adCode = it.adCode
lastGaoDeLocation.locationDetail = it.locationDetail
lastGaoDeLocation.poiName = it.poiName
lastGaoDeLocation.aoiName = it.aoiName
lastGaoDeLocation.street = it.street
lastGaoDeLocation.streetNum = it.streetNum
lastGaoDeLocation.description = it.description
lastGaoDeLocation.buildingId = it.buildingId
lastGaoDeLocation.floor = it.floor
lastGaoDeLocation.errorCode = it.errorCode
lastGaoDeLocation.errorInfo = it.errorInfo
}
try {

View File

@@ -3,17 +3,374 @@ package com.mogo.map.utils
object HDMapUtils {
private val cityCodeMap by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {
val map = HashMap<String, Int>()
// TODO:("高精地图自己去做")
map["0831"] = 5115// 宜宾
map["0512"] = 3205// 苏州
map["0872"] = 5329// 大理
map["0711"] = 4207// 鄂州
map["028"] = 5101// 成都
map["0931"] = 6201// 兰州
map["0535"] = 3706// 烟台
map["027"] = 4201// 武汉
map["010"] = 1101// 北京
map["0734"] = 4304// 衡阳
map["010"] = 1101 //北京
map["022"] = 1201 //天津
map["024"] = 2101 //沈阳
map["021"] = 3101 //上海
map["025"] = 3201 //南京
map["027"] = 4201 //武汉
map["020"] = 4401 //广州
map["023"] = 5001 //重庆
map["028"] = 5101 //成都
map["029"] = 6101 //西安
//河北
map["0311"] = 1301 //石家庄市
// map["0315"] = 1302 //唐山市
// map["0335"] = 1303 //秦皇岛市
// map["0310"] = 1304 //邯郸市
// map["0319"] = 1305 //邢台市
// map["0312"] = 1306 //保定市
// map["0313"] = 1307 //张家口市
// map["0314"] = 1308 //承德市
// map["0317"] = 1309 //沧州市
map["0316"] = 1310 //廊坊市
// map["0318"] = 1311 //衡水市
//山西
// map["0351"] = 1401 //太原市
// map["0352"] = 1402 //大同市
// map["0353"] = 1403 //阳泉市
// map["0355"] = 1404 //长治市
// map["0356"] = 1405 //晋城市
// map["0349"] = 1406 //朔州市
// map["0354"] = 1407 //晋中市
// map["0359"] = 1408 //运城市
// map["0350"] = 1409 //忻州市
// map["0357"] = 1410 //临汾市
// map["0358"] = 1411 //吕梁市
//内蒙古
map["0471"] = 1501 //呼和浩特市
map["0472"] = 1502 //包头市
// map["0473"] = 1503 //乌海市
// map["0476"] = 1504 //赤峰市
// map["0475"] = 1505 //通辽市
map["0477"] = 1506 //鄂尔多斯市
map["0470"] = 1507 //呼伦贝尔市
// map["0478"] = 1508 //巴彦淖尔市
// map["0474"] = 1509 //乌兰察布市
// map["0482"] = 1522 //兴安盟
map["0479"] = 1525 //锡林郭勒盟
// map["0483"] = 1529 //阿拉善盟
//辽宁
// map["0411"] = 2102 //大连市
// map["0412"] = 2103 //鞍山市
// map["0413"] = 2104 //抚顺市
// map["0414"] = 2105 //本溪市
// map["0415"] = 2106 //丹东市
// map["0416"] = 2107 //锦州市
// map["0417"] = 2108 //营口市
// map["0418"] = 2109 //阜新市
// map["0419"] = 2110 //辽阳市
// map["0427"] = 2111 //盘锦市
// map["0410"] = 2112 //铁岭市
// map["0421"] = 2113 //朝阳市
// map["0429"] = 2114 //葫芦岛市
//吉林
map["0431"] = 2201 //长春市
map["0432"] = 2202 //吉林市
// map["0434"] = 2203 //四平市
// map["0437"] = 2204 //辽源市
// map["0435"] = 2205 //通化市
// map["0439"] = 2206 //白山市
// map["0438"] = 2207 //松原市
// map["0436"] = 2208 //白城市
// map["1433"] = 2224 //延边朝鲜族自治州
//黑龙江
map["0451"] = 2301 //哈尔滨市
// map["0452"] = 2302 //齐齐哈尔市
// map["0467"] = 2303 //鸡西市
// map["0468"] = 2304 //鹤岗市
// map["0469"] = 2305 //双鸭山市
// map["0459"] = 2306 //大庆市
// map["0458"] = 2307 //伊春市
// map["0454"] = 2308 //佳木斯市
// map["0464"] = 2309 //七台河市
// map["0453"] = 2310 //牡丹江市
// map["0456"] = 2311 //黑河市
// map["0455"] = 2312 //绥化市
// map["0457"] = 2327 //大兴安岭地区
//江苏
map["0510"] = 3202 //无锡市
// map["0516"] = 3203 //徐州市
// map["0519"] = 3204 //常州市
map["0512"] = 3205 //苏州市
// map["0513"] = 3206 //南通市
// map["0518"] = 3207 //连云港市
// map["0517"] = 3208 //淮安市
// map["0515"] = 3209 //盐城市
// map["0514"] = 3210 //扬州市
// map["0511"] = 3211 //镇江市
// map["0523"] = 3212 //泰州市
// map["0527"] = 3213 //宿迁市
//浙江
// map["0571"] = 3301 //杭州市
// map["0574"] = 3302 //宁波市
// map["0577"] = 3303 //温州市
map["0573"] = 3304 //嘉兴市
map["0572"] = 3305 //湖州市
// map["0575"] = 3306 //绍兴市
// map["0579"] = 3307 //金华市
// map["0570"] = 3308 //衢州市
// map["0580"] = 3309 //舟山市
// map["0576"] = 3310 //台州市
// map["0578"] = 3311 //丽水市
//安徽
// map["0551"] = 3401 //合肥市
// map["0553"] = 3402 //芜湖市
// map["0552"] = 3403 //蚌埠市
// map["0554"] = 3404 //淮南市
// map["0555"] = 3405 //马鞍山市
// map["0561"] = 3406 //淮北市
// map["0562"] = 3407 //铜陵市
// map["0556"] = 3408 //安庆市
// map["0559"] = 3410 //黄山市
// map["0550"] = 3411 //滁州市
// map["1558"] = 3412 //阜阳市
// map["0557"] = 3413 //宿州市
// map["0564"] = 3415 //六安市
// map["0558"] = 3416 //亳州市
// map["0566"] = 3417 //池州市
// map["0563"] = 3418 //宣城市
//福建
map["0591"] = 3501 //福州市
map["0592"] = 3502 //厦门市
// map["0594"] = 3503 //莆田市
// map["0598"] = 3504 //三明市
// map["0595"] = 3505 //泉州市
// map["0596"] = 3506 //漳州市
// map["0599"] = 3507 //南平市
// map["0597"] = 3508 //龙岩市
// map["0593"] = 3509 //宁德市
//江西
map["0791"] = 3601 //南昌市
// map["0798"] = 3602 //景德镇市
// map["0799"] = 3603 //萍乡市
// map["0792"] = 3604 //九江市
// map["0790"] = 3605 //新余市
// map["0701"] = 3606 //鹰潭市
// map["0797"] = 3607 //赣州市
// map["0796"] = 3608 //吉安市
// map["0795"] = 3609 //宜春市
// map["0794"] = 3610 //抚州市
// map["0793"] = 3611 //上饶市
//山东
// map["0531"] = 3701 //济南市
// map["0532"] = 3702 //青岛市
// map["0533"] = 3703 //淄博市
// map["0632"] = 3704 //枣庄市
// map["0546"] = 3705 //东营市
map["0535"] = 3706 //烟台市
// map["0536"] = 3707 //潍坊市
// map["0537"] = 3708 //济宁市
// map["0538"] = 3709 //泰安市
// map["0631"] = 3710 //威海市
// map["0633"] = 3711 //日照市
// map["0539"] = 3713 //临沂市
// map["0534"] = 3714 //德州市
// map["0635"] = 3715 //聊城市
// map["0543"] = 3716 //滨州市
// map["0530"] = 3717 //菏泽市
//河南
map["0371"] = 4101 //郑州市
// map["0378"] = 4102 //开封市
// map["0379"] = 4103 //洛阳市
// map["0375"] = 4104 //平顶山市
// map["0372"] = 4105 //安阳市
map["0392"] = 4106 //鹤壁市
// map["0373"] = 4107 //新乡市
// map["0391"] = 4108 //焦作市
// map["0393"] = 4109 //濮阳市
// map["0374"] = 4110 //许昌市
// map["0395"] = 4111 //漯河市
map["0398"] = 4112 //三门峡市
// map["0377"] = 4113 //南阳市
// map["0370"] = 4114 //商丘市
// map["0376"] = 4115 //信阳市
// map["0394"] = 4116 //周口市
// map["0396"] = 4117 //驻马店市
//湖北
// map["0714"] = 4202 //黄石市
// map["0719"] = 4203 //十堰市
// map["0717"] = 4205 //宜昌市
// map["0710"] = 4206 //襄阳市
map["0711"] = 4207 //鄂州市
// map["0724"] = 4208 //荆门市
// map["0712"] = 4209 //孝感市
// map["0716"] = 4210 //荆州市
// map["0713"] = 4211 //黄冈市
// map["0715"] = 4212 //咸宁市
// map["0722"] = 4213 //随州市
// map["0718"] = 4228 //恩施土家族苗族自治州
//湖南
// map["0731"] = 4301 //长沙市
map["0733"] = 4302 //株洲市
// map["0732"] = 4303 //湘潭市
map["0734"] = 4304 //衡阳市
// map["0739"] = 4305 //邵阳市
// map["0730"] = 4306 //岳阳市
// map["0736"] = 4307 //常德市
// map["0744"] = 4308 //张家界市
// map["0737"] = 4309 //益阳市
// map["0735"] = 4310 //郴州市
// map["0746"] = 4311 //永州市
// map["0745"] = 4312 //怀化市
// map["0738"] = 4313 //娄底市
// map["0743"] = 4331 //湘西土家族苗族自治州
//广东
// map["0751"] = 4402 //韶关市
map["0755"] = 4403 //深圳市
// map["0756"] = 4404 //珠海市
// map["0754"] = 4405 //汕头市
// map["0757"] = 4406 //佛山市
// map["0750"] = 4407 //江门市
// map["0759"] = 4408 //湛江市
// map["0668"] = 4409 //茂名市
// map["0758"] = 4412 //肇庆市
// map["0752"] = 4413 //惠州市
// map["0753"] = 4414 //梅州市
// map["0660"] = 4415 //汕尾市
// map["0762"] = 4416 //河源市
// map["0662"] = 4417 //阳江市
// map["0763"] = 4418 //清远市
// map["0769"] = 4419 //东莞市
// map["0760"] = 4420 //中山市
// map["0768"] = 4451 //潮州市
// map["0663"] = 4452 //揭阳市
// map["0766"] = 4453 //云浮市
//广西
map["0771"] = 4501 //南宁市
// map["0772"] = 4502 //柳州市
// map["0773"] = 4503 //桂林市
// map["0774"] = 4504 //梧州市
// map["0779"] = 4505 //北海市
// map["0770"] = 4506 //防城港市
// map["0777"] = 4507 //钦州市
// map["1755"] = 4508 //贵港市
// map["0775"] = 4509 //玉林市
// map["0776"] = 4510 //百色市
// map["1774"] = 4511 //贺州市
// map["0778"] = 4512 //河池市
// map["1772"] = 4513 //来宾市
// map["1771"] = 4514 //崇左市
//海南
// map["0898"] = 4601 //海口市
// map["0899"] = 4602 //三亚市
// map["2898"] = 4603 //三沙市
// map["0805"] = 4604 //儋州市
//四川
// map["0813"] = 5103 //自贡市
// map["0812"] = 5104 //攀枝花市
// map["0830"] = 5105 //泸州市
// map["0838"] = 5106 //德阳市
// map["0816"] = 5107 //绵阳市
// map["0839"] = 5108 //广元市
// map["0825"] = 5109 //遂宁市
// map["1832"] = 5110 //内江市
// map["0833"] = 5111 //乐山市
// map["0817"] = 5113 //南充市
// map["1833"] = 5114 //眉山市
map["0831"] = 5115 //宜宾市
// map["0826"] = 5116 //广安市
// map["0818"] = 5117 //达州市
// map["0835"] = 5118 //雅安市
// map["0827"] = 5119 //巴中市
// map["0832"] = 5120 //资阳市
// map["0837"] = 5132 //阿坝藏族羌族自治州
// map["0836"] = 5133 //甘孜藏族自治州
// map["0834"] = 5134 //凉山彝族自治州
//贵州
map["0851"] = 5201 //贵阳市
// map["0858"] = 5202 //六盘水市
// map["0852"] = 5203 //遵义市
// map["0853"] = 5204 //安顺市
// map["0857"] = 5205 //毕节市
// map["0856"] = 5206 //铜仁市
// map["0859"] = 5223 //黔西南布依族苗族自治州
// map["0855"] = 5226 //黔东南苗族侗族自治州
// map["0854"] = 5227 //黔南布依族苗族自治州
//云南
// map["0871"] = 5301 //昆明市
// map["0874"] = 5303 //曲靖市
// map["0877"] = 5304 //玉溪市
// map["0875"] = 5305 //保山市
// map["0870"] = 5306 //昭通市
// map["0888"] = 5307 //丽江市
// map["0879"] = 5308 //普洱市
// map["0883"] = 5309 //临沧市
// map["0878"] = 5323 //楚雄彝族自治州
// map["0873"] = 5325 //红河哈尼族彝族自治州
// map["0876"] = 5326 //文山壮族苗族自治州
// map["0691"] = 5328 //西双版纳傣族自治州
map["0872"] = 5329 //大理白族自治州
// map["0692"] = 5331 //德宏傣族景颇族自治州
// map["0886"] = 5333 //怒江傈僳族自治州
// map["0887"] = 5334 //迪庆藏族自治州
//陕西
// map["0919"] = 6102 //铜川市
// map["0917"] = 6103 //宝鸡市
// map["0910"] = 6104 //咸阳市
// map["0913"] = 6105 //渭南市
// map["0911"] = 6106 //延安市
// map["0916"] = 6107 //汉中市
// map["0912"] = 6108 //榆林市
// map["0915"] = 6109 //安康市
// map["0914"] = 6110 //商洛市
//甘肃
map["0931"] = 6201 //兰州市
// map["1937"] = 6202 //嘉峪关市
// map["0935"] = 6203 //金昌市
// map["0943"] = 6204 //白银市
// map["0938"] = 6205 //天水市
// map["1935"] = 6206 //武威市
// map["0936"] = 6207 //张掖市
// map["0933"] = 6208 //平凉市
// map["0937"] = 6209 //酒泉市
// map["0934"] = 6210 //庆阳市
// map["0932"] = 6211 //定西市
// map["2935"] = 6212 //陇南市
// map["0930"] = 6229 //临夏回族自治州
// map["0941"] = 6230 //甘南藏族自治州
//青海
map["0971"] = 6301 //西宁市
// map["0972"] = 6302 //海东市
//宁夏
map["0951"] = 6401 //银川市
// map["0952"] = 6402 //石嘴山市
// map["0953"] = 6403 //吴忠市
// map["0954"] = 6404 //固原市
// map["1953"] = 6405 //中卫市
//新疆
// map["0991"] = 6501 //乌鲁木齐市
// map["0990"] = 6502 //克拉玛依市
// map["0995"] = 6504 //吐鲁番地区
// map["0902"] = 6505 //哈密地区
map
}