/*
 *地图,存储全场定位点位
 * 
 */
#include "map.h"
#include "define.h"
/* Private variables -------------------------------------------------------- */


Path_t path_state;
point_t path_1;
sick_t sick_1;
point_t path_2;
sick_t sick_2;
point_t path_3;
sick_t sick_3;
	
//点位坐标x轴朝前,y轴朝右
void block_select(Action_POS_t*pos,CMD_t*cmd){ 

	//1
	path_1.x = 0;
  path_1.y = 0;	
	path_1.angle=0;
	sick_1.sick_qian = 0;
	sick_1.sick_you = 0;
	sick_1.sick_hou = 0;
	sick_1.sick_zuo = 0;
	sick_1.sick_flag = 0;
	//2
	path_2.x = 2000;
	path_2.y = -2000;	
	path_2.angle=0;
	sick_2.sick_qian = 3997;
	sick_2.sick_you = 2721;
	sick_2.sick_hou = 2709;
	sick_2.sick_zuo = 0;
	sick_2.sick_flag = 1;
	//3
	path_3.x = pos->pos_x;
	path_3.y = pos->pos_y;	
	//path_3.angle= 0;
	sick_3.sick_qian = 0;
	sick_3.sick_you = 0;
	sick_3.sick_hou = 0;
	sick_3.sick_zuo = 0;
	sick_3.sick_flag = 0;

#ifdef camera_angle_static
// 锁死相机偏差角度
    static float fixed_yaw = 0;
    static int is_calibrating = 0;
    static float prev_camera_yaw = 0;
		
  // 非NAVI模式直接重置状态
    if (cmd->C_cmd.mode != NAVI) {
        is_calibrating = 0;
    }
    
    if (cmd->nuc.vw != 0) {        
        // 只有未校准时才更新固定值
        if (is_calibrating == 0) {
        
                fixed_yaw = pos->pos_yaw + cmd->nuc.vw;
                is_calibrating = 1; 
        }

        // 校准期间始终使用fixed_yaw
        path_3.angle = fixed_yaw;
        prev_camera_yaw = cmd->nuc.vw;
    }	 
#endif		

}
		 

/**
 *     路径选择
 *     
 *      path_state.target  
 */
void  path_select(CMD_t*cmd){
	
	 static int8_t last_pos = -1;

	 if (cmd->C_cmd.pos != last_pos) {
         	
    switch (cmd->C_cmd.pos){
    	case POS_1:
		   path_state.target = &path_1;//选择路径
			 path_state.sick = &sick_1;
		  break;
	   case POS_2:
		   path_state.target = &path_2;//选择路径
		    path_state.sick = &sick_2;
		  break;
	   case POS_3:
		   path_state.target = &path_3;//选择路径
		    path_state.sick = &sick_3;
		  break;	
	   }		
	  path_state.points_flag = 0; 
	 }
		last_pos = cmd->C_cmd.pos; // 更新上一次的位置
	 
	 if(cmd->C_cmd.mode != NAVI){
	  path_state.points_flag = 0; 
	 }
}

Path_t *get_map_pointer(void){
	return &path_state;	
}