syntax = "proto2";

enum Tof3dFunctional {
  SearchDevice = 1;
  ConnectDevice = 2;
  ConnectAllEtcDevices = 3;
  ConnectAllSearchDevices = 4;
  DisConnectDevice = 5;
  DisConnectAllEtcDevices = 6;
  DisConnectAllSearchDevices = 7;
  getDepthFrame = 8;
  getIrFrame = 9;
  getDepthAndIrPicture = 10;
  getDepthPointCloud = 11;
  DepthFrame2PointCloud = 12;
  Frame2Mat = 13;
}

enum Tof3dVzFrameType {
  Tof3dVzDepthFrame = 0;
  Tof3dVzIRFrame = 1;
}

enum Tof3dVzPixelFormat {
  Tof3dVzPixelFormatDepthMM16 = 0;
  Tof3dVzPixelFormatGray8 = 2;
}

message Tof3dVzFrame {
  required uint32 frameIndex = 1;
  required Tof3dVzFrameType frameType = 2;
  required Tof3dVzPixelFormat pixelFormat = 3;
  repeated uint32 pFrameData = 4;
  required uint32 dataLen = 5;
  required float exposureTime = 6;
  required uint32 depthRange = 7;
  required uint32 width = 8;
  required uint32 height = 9;
  required uint64 deviceTimestamp = 10;
}

message Tof3dVzVector3f {
  required int32 x = 1;
  required int32 y = 2;
  required int32 z = 3;
}

message Tof3dMat {
  repeated uint32 data = 1;
  required int32 size = 2;
  required int32 rows = 3;
  required int32 cols = 4;
  required uint32 type = 5;
  required uint64 stamp = 10;
}

message Tof3dFunctionalParams {
  optional int64 error_code = 1;
  optional int64 error_level = 2;
  optional string error_string = 3;
  optional string ip = 4;
  optional double search_time = 5;
  optional bool open_stream = 6;
  optional Tof3dVzFrame depthFrame = 7;
  optional Tof3dVzFrame irFrame = 8;
  repeated Tof3dVzVector3f depthCloud = 9;
  repeated Tof3dVzVector3f irCloud = 10;
  optional Tof3dMat depthMat = 11;
  optional Tof3dMat irMat = 12;
}

message Tof3dCommunicatonProtocol
{
  required Tof3dFunctional func = 1;
  required Tof3dFunctionalParams func_params = 2;
}
