syntax = "proto2";
package message;
import "message_base.proto";

//雷达管理模块的工作状态
enum Laser_manager_status
{
    LASER_MANAGER_UNKNOW               	= 0;    //未知
    LASER_MANAGER_READY               	= 1;    //准备，待机
	LASER_MANAGER_ISSUED_TASK			= 2;	//工作下发任务
	LASER_MANAGER_WAIT_REPLY			= 3;	//工作等待答复
	LASER_MANAGER_FAULT					= 4;	//故障
}
	
//子雷达状态
enum Laser_statu
{
	LASER_DISCONNECT	=0;	        //雷达断连
	LASER_READY			=1;			//雷达正常待机，空闲
	LASER_BUSY			=2;	        //雷达正在工作，正忙
	LASER_FAULT			=3;         //雷达错误
}

//定位管理模块的工作状态
enum Locate_manager_status
{
	LOCATE_MANAGER_UNKNOW               	= 0;    //未知
	LOCATE_MANAGER_READY               		= 1;    //准备，待机
	LOCATE_MANAGER_SIFT						= 2;	//sift点云筛选; 将车身和轮胎的点剥离出来
	LOCATE_MANAGER_CAR						= 3;	//通过车身 计算汽车的定位信息.
	LOCATE_MANAGER_WHEEL					= 4;	//通过车轮 计算汽车的定位信息.
	LOCATE_MANAGER_FAULT					= 5;	//故障
}
	

//雷达管理的状态
enum Wanji_manager_status
{
	WANJI_MANAGER_UNKNOWN              	= 0;    //未知
	WANJI_MANAGER_READY               	= 1;    //准备，待机
	WANJI_MANAGER_BUSY					= 2; 	//工作正忙

	WANJI_MANAGER_ISSUED_SCAN			= 3; 	//下发任务; 获取点云
	WANJI_MANAGER_WAIT_SCAN				= 4;	//等待任务; 扫描点云

	WANJI_MANAGER_ISSUED_DETECT			= 5; 	//下发任务; 算法预测
	WANJI_MANAGER_WAIT_DETECT			= 6; 	//等待任务; 算法预测

	WANJI_MANAGER_FAULT					= 10;	//故障
}

//万集设备身状态
enum Wanji_lidar_device_status
{
	WANJI_LIDAR_DEVICE_UNKNOWN              	= 0;    //未知
	WANJI_LIDAR_DEVICE_READY	             	= 1;    //正常待机
	WANJI_LIDAR_DEVICE_DISCONNECT			= 2;	//断连

	WANJI_LIDAR_DEVICE_BUSY					= 3; 	//工作正忙

	WANJI_LIDAR_DEVICE_FAULT					=10;	//故障
}

//万集区域功能的状态
enum Region_worker_status
{
	REGION_WORKER_UNKNOWN              	= 0;    //未知
	REGION_WORKER_READY               	= 1;    //准备，待机
	REGION_WORKER_BUSY					= 2; 	//工作正忙

	REGION_WORKER_FAULT					= 10;	//故障
}

//定位模块状态
message Measure_status_msg
{
    required Base_info                  base_info=1;                 //消息类型
    required Id_struct                      id_struct=2;

    required Laser_manager_status       laser_manager_status = 3;       //大疆管理状态
    repeated Laser_statu                laser_statu_vector = 4;         //大疆雷达设备状态
    required Locate_manager_status      locate_manager_status = 5;      //大疆定位算法状态

    required Error_manager              error_manager = 6;
}


//定位请求消息
message Measure_request_msg
{
    required Base_info                  base_info=1;        //消息类型
    required string                     command_key=2;                   //指令唯一标识符id
    required Id_struct                      id_struct=3;          //终端id
}

//定位测量返回消息
message Measure_response_msg
{
    required Base_info                  base_info=1;                         //消息类型
    required string                     command_key=2;                   //指令唯一标识符id
    required Id_struct                      id_struct=3;

    optional Locate_information         locate_information=4;
    required Error_manager              error_manager = 5;
}

//地面测量请求消息
message Ground_detect_request_msg
{
    required Base_info                  base_info=1;        //消息类型
    required string                     command_key=2;                   //指令唯一标识符id
    required Id_struct                      id_struct=3;          //终端id
}

//地面测量反馈消息
message Ground_detect_response_msg
{
    required Base_info                  base_info=1;                     //消息类型
    required string                     command_key=2;                   //指令唯一标识符id
    required Id_struct                      id_struct=3;

    optional Locate_information         locate_information=4;
    required Error_manager              error_manager = 5;
}

// 电子围栏状态
enum Ground_statu
{
    Nothing=0;
    Noise=1;
    Car_correct=2;
    Car_border_reached=3;
}

message Ground_status_msg
{
    required Base_info                  base_info=1;                 //消息类型
    required Id_struct                  id_struct=2;                //终端编号结构体

    required Wanji_manager_status       wanji_manager_status = 3;       //万集管理状态
    repeated Wanji_lidar_device_status  wanji_lidar_device_status = 4;  //万集设备身状态
    required Region_worker_status       region_worker_status = 5;       //万集区域功能的状态
    required Locate_information         locate_information_realtime = 6;//地面雷达的 实时定位信息
    required Ground_statu               ground_status=7; // 电子围栏状态
    // 超界状态,为0表示正常，从末尾开始123456位分别代表前、后、左、右、底盘、车高超界
    // 增加超宽、超轴距、左(逆时针)旋转超界，右(顺时针)旋转超界，前轮角超界判断，分别处于7 8 9 10 11
    // 增加 车辆移动 12位 静止为0，运动为1
    required int32               	border_status=8; 

    required Error_manager              error_manager = 9;
    repeated Cloud_coordinate           cloud=10;     //点云坐标
}

/*测量信息*/
//20221102, huli move to message.proto
/*
//message measure_info {
//  required float cx=1;
//  required float cy=2;
//  required float theta=3;
//  required float length=4;
//  required float width=5;
//  required float height=6;
//  required float wheelbase=7;
//  required float front_theta=8;
//  required int32 border_statu=9;
//  required int32 ground_status=10; // 电子围栏状态, 0 ok, 1 nothing, 2 noise, 3 border
//}
*/

//点云坐标
message Cloud_coordinate
{
    required float                      x=1;
    required float                      y=2;
    required float                      z=3;
}
//点云类型
message Cloud_type
{
    required int32                      type=1;
}

//筛选点云; 请求消息
message Locate_sift_request_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;          //指令唯一标识符id
    required Id_struct                      id_struct=3;          //终端id
    required int32                      lidar_id=4;             //雷达id
    repeated Cloud_coordinate           cloud_coordinates=5;     //点云坐标
}

//筛选点云; 答复消息
message Locate_sift_response_msg
{
    required Base_info                  base_info=1;            //消息类型
    required string                     command_key=2;          //指令唯一标识符id
    required Id_struct                      id_struct=3;          //终端id
    required int32                      lidar_id=4;             //雷达id
    repeated Cloud_type                 cloud_type=5;            //点云类型
    required Error_manager              error_manager = 6;      //错误码
}
