| 
					
				 | 
			
			
				@@ -39,14 +39,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /*基础速度*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //__STATIC_INLINE void WIFI_Input(u8 res); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDInit(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    SetInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    RoadInfoInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    CargoInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LiftInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    RfidInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ScreenInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    DRInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_RUN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	SetInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	RoadInfoInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CargoInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LiftInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	RfidInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ScreenInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	DRInit(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_RUN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,7 +62,8 @@ __STATIC_INLINE u8 _InitCargo(void); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @retval 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @note 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-__STATIC_INLINE u8 _obsProcess(void); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//__STATIC_INLINE u8 _obsProcess(void); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+__STATIC_INLINE u8 _CsobsProcess(void); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @brief 处理电池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @param 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -81,26 +82,27 @@ __STATIC_INLINE u8 _NavToStation(s16 station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _defaultAction(void); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _SetAction(u8 act); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDCruise(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _rfidProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 处理电池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _batteryProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    CargoProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_rfidProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 处理电池 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_batteryProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CargoProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //    LiftProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 音乐 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _obsProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    DR_Process(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _checkDriverError(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (_statusProcess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.Point == NULL_POINT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _defaultAction(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //LogDebugGuide("GDCruise Staus run"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Set.Station != NULL_POINT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _NavToStation(Set.Station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 音乐 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	_obsProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	_CsobsProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	DR_Process(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_checkDriverError(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	if (_statusProcess()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.Point == NULL_POINT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_defaultAction(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	//LogDebugGuide("GDCruise Staus run"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Set.Station != NULL_POINT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_NavToStation(Set.Station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @brief 导航到站点 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -108,96 +110,97 @@ void GDCruise(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @retval 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE u8 _NavToStation(s16 station) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    u8 act; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LogDebugGuide("_NavToStation"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    act = RoadInfoGetPointAct(station, Stat.Point); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (act <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(act); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_LEFT_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_RIGHT_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_FORWARD_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_BACKWARD_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Stat.CrossType == CROSS_XY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if ((Stat.Speed == 0) && (Stat.WheelAngle < 1500)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                LogDebugGuide("_NavToStation arrive st %d", Set.Station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_FBSTOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_LRSTOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LogDebugGuide("_NavToStation arrive st %d", Set.Station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 act; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LogDebugGuide("_NavToStation"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	act = RoadInfoGetPointAct(station, Stat.Point); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (act <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(act); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_LEFT_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_RIGHT_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_FORWARD_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_BACKWARD_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (Stat.CrossType == CROSS_XY) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ((Stat.Speed == 0) && (Stat.WheelAngle < 1500)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				LogDebugGuide("_NavToStation arrive st %d", Set.Station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_FBSTOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_LRSTOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogDebugGuide("_NavToStation arrive st %d", Set.Station) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //__STATIC_INLINE void _taskProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _defaultAction(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (Stat.CrossType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case CROSS_OFF: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case CROSS_FB: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case CROSS_XY: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case CROSS_LR: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (Stat.CrossType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case CROSS_OFF: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case CROSS_FB: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case CROSS_XY: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case CROSS_LR: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDStart(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_RUN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.FErrorCode > 0 || Stat.BErrorCode > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_RESET); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LogInfo("DR_ACT_RESET"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_RUN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.FErrorCode > 0 || Stat.BErrorCode > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_RESET); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogInfo("DR_ACT_RESET"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDStop(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDPause(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LogInfo("GD_Pause"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.Status != STATUS_OBS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.PreStatus = Stat.Status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.Status = STATUS_OBS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LogInfo("GD_Pause"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.Status != STATUS_OBS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.PreStatus = Stat.Status; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.Status = STATUS_OBS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDResume(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.Status == STATUS_OBS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.Status = Stat.PreStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.Status == STATUS_OBS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.Status = Stat.PreStatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GDBreak(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_BRAKE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_BRAKE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 u8 GDSetAction(u8 action) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(action); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(action); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 u8 GDSetStation(u16 station) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Set.Station = station; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Set.Station = station; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // todo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 u8 GDAddTasks(u8* data, u8 len) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 u8 GDClearTask(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // todo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// todo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 u8 GDSetSpeed(u16 speed) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Set.Speed = speed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Set.Speed = speed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return True; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CS_ManualStop(void) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -214,8 +217,8 @@ void CS_ManualForward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_FR1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_BK2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_EN2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_Speed(1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_Speed(1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_Speed(1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_Speed(1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CS_ManualBackward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -224,414 +227,468 @@ void CS_ManualBackward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_FR1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_BK2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_EN2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_Speed(1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_Speed(1500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_Speed(1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_Speed(1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CS_ManualLeftForward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CS_ManualRoteLeft(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_BK1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_EN1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_FR1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_FR1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_BK2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_EN2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_Speed(100); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_Speed(200); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_Speed(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_Speed(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CS_ManualRigForhtward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CS_ManualRoteRight(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_BK1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_EN1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_FR1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_BK2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_BK2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_EN2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_Speed(200); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_Speed(100); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_Speed(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_Speed(500); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CS_ManualLeftBackward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CS_ManualLeftForward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_BK1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_EN1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_FR1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_BK2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_FR1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_BK2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_EN2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_Speed(100); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_Speed(200); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CS_ManualRigBackhtward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CS_ManualRigForhtward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_BK1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_EN1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR1_FR1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MOTOR2_BK2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR1_FR1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MOTOR2_BK2 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_EN2 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR1_Speed(200); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	MOTOR2_Speed(100); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualStop(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualForward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualBackward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualLeftward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualRightward(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualTurnLeft(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualTurnRight(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualRoteLeft(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_TRUN_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_TRUN_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualRoteRight(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _SetAction(ACT_MANUAL_TURN_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_REMOTE_MANUAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_SetAction(ACT_MANUAL_TURN_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualLiftUp(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LiftUp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LiftUp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void GD_ManualLiftDown(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    LiftDown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-__STATIC_INLINE u8 _obsProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static u32 interval = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (interval == Timer100ms) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    interval = Timer100ms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (Stat.Direction) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case DIRECTION_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (OBS1_IN1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case DIRECTION_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (OBS1_IN2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case DIRECTION_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (OBS1_IN3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case DIRECTION_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (OBS1_IN4) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    GDResume(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LiftDown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+__STATIC_INLINE u8 _CsobsProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (MOTOR1_FR1 == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!OBS3_IN1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LogInfo("OBS3_IN1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CS_ManualStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V3 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CS_ManualForward(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V3 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!OBS2_IN1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LogInfo("OBS2_IN1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CS_ManualStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V3 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CS_ManualBackward(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LED1_V3 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//__STATIC_INLINE u8 _obsProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    static u32 interval = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    if (interval == Timer100ms) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//    interval = Timer100ms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	if (!OBS3_IN1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		LogInfo("OBS3_IN1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+////                GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		CS_ManualStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		LED1_V1 = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		CS_ManualForward(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		LED1_V1 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	switch (Stat.Direction) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	case DIRECTION_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		if (OBS3_IN1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			LogInfo("OBS3_IN1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			CS_ManualStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			LED1_V1 = !LED1_V1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	case DIRECTION_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		if (OBS1_IN2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	case DIRECTION_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		if (OBS1_IN3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	case DIRECTION_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		if (OBS1_IN4) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			GDPause(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			Screen_SetErrorCode(ERROR_STATUS_OBS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//			return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	GDResume(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _batteryProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static u32 interval = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static u32 lowCnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (interval == Timer1s) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    interval = Timer1s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.BatteryVolt <= Cfg.BatteryVoltStop) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Stat.BatteryStatus == BATTERY_STATUS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            lowCnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            lowCnt++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (lowCnt > 60) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Stat.BatteryStatus = BATTERY_STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    lowCnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.BatteryStatus == BATTERY_STATUS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.Status = STATUS_BATTERY_LOW_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else if (Stat.BatteryVolt > Cfg.BatteryVoltFull) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.BatteryStatus = BATTERY_STATUS_FULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else if (Stat.BatteryVolt > Cfg.BatteryVoltHigh) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.BatteryStatus = BATTERY_STATUS_HIGH; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else if (Stat.BatteryVolt > Cfg.BatteryVoltMid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.BatteryStatus = BATTERY_STATUS_MID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else if (Stat.BatteryVolt > Cfg.BatteryVoltLow) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.BatteryStatus = BATTERY_STATUS_LOW; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.BatteryStatus = BATTERY_STATUS_WARN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Screen_SetBatteryStatus(Stat.BatteryStatus); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static u32 interval = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static u32 lowCnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (interval == Timer1s) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	interval = Timer1s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.BatteryVolt <= Cfg.BatteryVoltStop) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (Stat.BatteryStatus == BATTERY_STATUS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			lowCnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			lowCnt++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (lowCnt > 60) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Stat.BatteryStatus = BATTERY_STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	lowCnt = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.BatteryStatus == BATTERY_STATUS_STOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.Status = STATUS_BATTERY_LOW_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else if (Stat.BatteryVolt > Cfg.BatteryVoltFull) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.BatteryStatus = BATTERY_STATUS_FULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else if (Stat.BatteryVolt > Cfg.BatteryVoltHigh) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.BatteryStatus = BATTERY_STATUS_HIGH; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else if (Stat.BatteryVolt > Cfg.BatteryVoltMid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.BatteryStatus = BATTERY_STATUS_MID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else if (Stat.BatteryVolt > Cfg.BatteryVoltLow) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.BatteryStatus = BATTERY_STATUS_LOW; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.BatteryStatus = BATTERY_STATUS_WARN; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Screen_SetBatteryStatus(Stat.BatteryStatus); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _checkDriverError(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if ((Stat.FErrorCode == 0) && (Stat.BErrorCode == 0)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Stat.Status = STATUS_ERROR_DRIVER; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ((Stat.FErrorCode == 0) && (Stat.BErrorCode == 0)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Stat.Status = STATUS_ERROR_DRIVER; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _statusNotifyProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    static u32 interval = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static u32 interval = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //    if (!Cfg.LogStatus) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (timerSecondSub(Timer1s, interval) < 5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MsgSend(OP_GET_STATUS, (u8*) (&Stat), sizeof(Status_t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //LogStatusInfo("Task_Status:%d,Task_Src:%d,Task_Dst:%d,Status:%d,PreStatus:%d,NavStatus:%d,TargetStation:0x%x,CurStation:0x%x,RoadPoint:0x%x,LiftStatus:%d,TPStatus:%d,BatteryVolt:%d", curTask.Status, curTask.Src, curTask.Dst, Stat.Status, Stat.PreStatus, Stat.NavStatus, Set.Station, Stat.Station, Stat.Point, Stat.LiftStatus, Stat.CargoStatus, Stat.BatteryVolt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    interval = Timer1s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (timerSecondSub(Timer1s, interval) < 5) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MsgSend(OP_GET_STATUS, (u8*) (&Stat), sizeof(Status_t)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	//LogStatusInfo("Task_Status:%d,Task_Src:%d,Task_Dst:%d,Status:%d,PreStatus:%d,NavStatus:%d,TargetStation:0x%x,CurStation:0x%x,RoadPoint:0x%x,LiftStatus:%d,TPStatus:%d,BatteryVolt:%d", curTask.Status, curTask.Src, curTask.Dst, Stat.Status, Stat.PreStatus, Stat.NavStatus, Set.Station, Stat.Station, Stat.Point, Stat.LiftStatus, Stat.CargoStatus, Stat.BatteryVolt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	interval = Timer1s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE u8 _statusProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    _statusNotifyProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.Point == 0xFFFF) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Stat.CargoStatus != CARGO_STATUS_NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (Stat.Status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_INIT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (_InitCargo()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.Status = STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_BATTERY_LOW_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_CHARGING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_OBS_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_ESTOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_BRAKE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_REMOTE_MANUAL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_ERROR_DRIVER: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LED_Flashing(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_ERROR_EDGE_MARKER: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_ERROR_BOOT_WITH_TP_FULL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LED_Flashing(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_BATTERY_LOW: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case STATUS_RUN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LED1_V1 = SIGNAL_LED_HIGH; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 后面处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LogError("GDCruise Stat.Status error %d undefine.", Stat.Status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_statusNotifyProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.Point == 0xFFFF) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (Stat.CargoStatus != CARGO_STATUS_NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (Stat.Status) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_INIT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (_InitCargo()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.Status = STATUS_STOP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_BATTERY_LOW_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_CHARGING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_OBS_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_ESTOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_BRAKE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_REMOTE_MANUAL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_ERROR_DRIVER: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LED_Flashing(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_ERROR_EDGE_MARKER: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_ERROR_BOOT_WITH_TP_FULL: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LED_Flashing(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_SCRAM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_BATTERY_LOW: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case STATUS_RUN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MusicPlay(MUSIC_OFF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 后面处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogError("GDCruise Stat.Status error %d undefine.", Stat.Status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE u8 _InitCargo(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.CargoStatus != CARGO_STATUS_NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Stat.LiftStatus == LIFT_STATUS_TOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            LiftStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return LiftUp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Stat.LiftStatus == LIFT_STATUS_BOTTOM) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            LiftStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return LiftDown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.CargoStatus != CARGO_STATUS_NULL) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (Stat.LiftStatus == LIFT_STATUS_TOP) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LiftStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return LiftUp(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (Stat.LiftStatus == LIFT_STATUS_BOTTOM) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LiftStop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return LiftDown(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _rfidForwardProces(u8 data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_FORWARD_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_FORWARD_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_FORWARD_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_FORWARD_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_FORWARD_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_FORWARD_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _rfidBackwardProces(u8 data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_BACKWARD_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_BACKWARD_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_BACKWARD_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_BACKWARD_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_BACKWARD_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_BACKWARD_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _rfidLeftProces(u8 data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_LEFT_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_LEFT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_LEFT_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_LEFT_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_LEFT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_LEFT_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _rfidRightProces(u8 data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_RIGHT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_RIGHT_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_RIGHT_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_RIGHT_FORWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_DRIFT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_RIGHT_BACKWARD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_STOP_CROSS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_RIGHT_STOP_CROSS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_BACK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _rfidRDMProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    u8 rfidData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.FR == WARD_FORWARD) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rfidData = Stat.RfidData8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        rfidData = Stat.RfidData7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (rfidData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_PASS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_BRANCH_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.Branch = BRANCH_LEFT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_BRANCH_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.Branch = BRANCH_RIGHT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        _SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_TRUN_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case RDM_TRUN_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        switch (Stat.Direction) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case DIRECTION_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _rfidForwardProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case DIRECTION_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _rfidBackwardProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case DIRECTION_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _rfidLeftProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case DIRECTION_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _rfidRightProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            LogError("_RfidRDMProcess: Stat.DrDirection error!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u8 rfidData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.FR == WARD_FORWARD) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		rfidData = Stat.RfidData8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		rfidData = Stat.RfidData7; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (rfidData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_PASS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_BRANCH_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.Branch = BRANCH_LEFT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_BRANCH_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.Branch = BRANCH_RIGHT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_STOP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_SetAction(ACT_STOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_TRUN_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case RDM_TRUN_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		switch (Stat.Direction) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case DIRECTION_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_rfidForwardProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case DIRECTION_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_rfidBackwardProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case DIRECTION_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_rfidLeftProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case DIRECTION_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_rfidRightProces(rfidData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LogError("_RfidRDMProcess: Stat.DrDirection error!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE u8 _rfidProcess(void) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Stat.RfidNeedHandle) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LogDebugGuide("ReadRfidCard: Dir = %d, Cross= %d, type= %d, data8= 0x%x\r\n", Stat.Direction, Stat.CrossType, Stat.RfidType, Stat.RfidData8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        switch (Stat.RfidType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case RFID_TYPE_RDM: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _rfidRDMProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case RFID_TYPE_ACT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            _SetAction(Stat.RfidData8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        case RFID_TYPE_POINT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (Stat.RfidData8 < GD_MAX_STATION) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Stat.Point = Stat.RfidData8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Stat.RfidNeedHandle = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Stat.RfidNeedHandle) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogDebugGuide( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"ReadRfidCard: Dir = %d, Cross= %d, type= %d, data8= 0x%x\r\n", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Stat.Direction, Stat.CrossType, Stat.RfidType, Stat.RfidData8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		switch (Stat.RfidType) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case RFID_TYPE_RDM: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_rfidRDMProcess(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case RFID_TYPE_ACT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_SetAction(Stat.RfidData8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		case RFID_TYPE_POINT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (Stat.RfidData8 < GD_MAX_STATION) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Stat.Point = Stat.RfidData8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Stat.RfidNeedHandle = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 __STATIC_INLINE void _SetAction(u8 act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    switch (act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedNav = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedDrift = (Set.Speed <= Cfg.SpeedMaxDrift)? Set.Speed:Cfg.SpeedMaxDrift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedNav = Set.Speed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedDrift = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_FORWARD_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_FORWARD_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_BACKWARD_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_BACKWARD_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedNav = Set.SpeedApproach; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedDrift = (Set.Speed <= Cfg.SpeedMaxDrift)? Set.Speed:Cfg.SpeedMaxDrift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_LEFT_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_LEFT_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_RIGHT_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    case ACT_RIGHT_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedNav = Set.Speed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.SpeedDrift = (Set.Speed <= Cfg.SpeedMaxDrift)? Set.Speed:Cfg.SpeedMaxDrift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (Set.Action != act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Set.Action = act; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LogDebug("DR_SetAction: 0x%x", act); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedNav = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedDrift = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				(Set.Speed <= Cfg.SpeedMaxDrift) ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						Set.Speed : Cfg.SpeedMaxDrift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedNav = Set.Speed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedDrift = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_FORWARD_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_FORWARD_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_BACKWARD_LEFT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_BACKWARD_RIGHT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedNav = Set.SpeedApproach; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedDrift = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				(Set.Speed <= Cfg.SpeedMaxDrift) ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						Set.Speed : Cfg.SpeedMaxDrift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_LEFT_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_LEFT_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_RIGHT_FORWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case ACT_RIGHT_BACKWARD: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedNav = Set.Speed; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.SpeedDrift = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				(Set.Speed <= Cfg.SpeedMaxDrift) ? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						Set.Speed : Cfg.SpeedMaxDrift; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (Set.Action != act) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Set.Action = act; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LogDebug("DR_SetAction: 0x%x", act); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |