syntax = "proto3";

/*测量信息*/
message measure_info {
  float cx=1;
  float cy=2;
  float theta=3;
  float length=4;
  float width=5;
  float height=6;
  float wheelbase=7;
  float front_theta=8;
  int32 border_statu=9;
  int32 ground_status=10;                   //0  ok 1,nothing 2,noise  3,border
}

/*分配的车位信息*/
message parkspace_info{
  int32 id=1;
  int32 unit_id=2;  //单元号
  int32 floor=3;    //楼层号
  int32 room_id=4;    //同层编号
}

enum STATU{
  eNormal=0;
  eError=1;
}

/*
表单执行状态
 */
message table_statu{
  STATU execute_statu=1;    //执行状态
  string statu_description=2; //状态描述
}

/*
停车表单
 */
message park_table{
  table_statu statu=1;  //表单状态
  int32 queue_id=2;        //指令排队编号

  string car_number=3;
  int32 unit_id=4;
  int32 terminal_id=5;
  string primary_key=6;

  measure_info entrance_measure_info=7;   //入口测量信息


  parkspace_info allocated_space_info=8;       //分配的车位信息

  measure_info actually_measure_info=9;   //实际测量信息或者叫二次测量信息

  parkspace_info actually_space_info=10;      //实际停放的车位


}

/*
取车表单
 */
message pick_table{
  table_statu statu=1;  //表单状态
  int32 queue_id=2;        //指令排队编号

  string car_number=3;
  int32 unit_id=4;
  int32 terminal_id=5;
  string primary_key=6;

  parkspace_info actually_space_info=7; //实际停放的车位信息

  measure_info actually_measure_info=8; //存车时的实际测量信息（轴距）

  int32 export_id=9;            //分配出口
  bool  is_leaved=10;         //是否离开


}



/*
以下是状态消息
 */

/*
单片机节点状态
 */
message out_mcpu_statu{     //数值+1后
  int32 door_statu=1;       //外门状态       0无效, 1无效, 2开到位, 3 关到位, 4开关中, 5 故障
  int32 outside_safety=2;    //是否有车      0无效, 1无车, 2有车
}

message in_mcpu_statu{      //数值+1后
  int32 door_statu=1;       //外门状态       0无效, 1无效, 2开到位, 3 关到位, 4开关中, 5 故障
  int32 back_io=2;          //后超界       0无效, 1后超界, 2正常
  int32 is_occupy=3;        //是否有车      0无效, 1无车, 2有车
  int32 heighth=4;          //车高状态      0无效, 1无效, 2小车, 3中车, 4大车, 5故障, 6故障
}
/*
测量节点状态
 */
message measure_statu{
  measure_info info=1;
}

//搬运器状态枚举
enum CarrierStatu{
  eIdle=0;
  eBusy=1;
  eFault=2;
}

//调度入口汽车范围的修正信息
message dispatch_region_info
{
    int32 terminal_id=1;                //入口终端编号, 1~6
    float turnplate_angle_min=2;        //转盘角度最小值, 负值, 例如 -5度
    float turnplate_angle_max=3;        //转盘角度最大值, 正值, 例如 +5度
}

/*
搬运器状态消息
 */
message dispatch_node_statu{
  CarrierStatu statu=1;
  int32 idle_stop_floor=2;  //空闲时停留位置
  park_table  running_pack_info=3;  //正在执行的停车表单
  pick_table  running_pick_info=4;  //正在执行的取车表单

    int32                                   unit_id = 5;                            //单元号, 1~3
    int32                                   plc_heartbeat = 6;                      //plc心跳信息
    int32                                   plc_status_info = 7;                    //plc状态的集合
                                                                                    		//0 bit, 手动模式
                                                                                    		//1 bit, 自动模式
                                                                                    		//2 bit, 自动运行中
                                                                                    		//3 bit, 复位
                                                                                    		//4 bit, 1号口可以进车
                                                                                    		//5 bit, 2号口可以进车
                                                                                    		//6 bit, 预留
                                                                                    		//7 bit, 预留
    repeated dispatch_region_info           dispatch_region_info_vector = 8;        //调度入口汽车范围的修正信息

}
message terminal_node_statu
{
  int32   terminal_id=1;                //入口终端编号, 1~6
  string  car_number=2;	//车牌号
}