// Copyright 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto2";

package android.vts;


// Type of a command.
enum VtsDriverCommandType {
  UNKNOWN_VTS_DRIVER_COMMAND_TYPE = 0;

  // To request to exit a driver.
  EXIT = 1;
  // To get the status of a driver.
  GET_STATUS = 2;

  // for a HAL driver
  // To request to load a HAL.
  LOAD_HAL = 101;
  // To get a list of available functions.
  LIST_FUNCTIONS = 102;
  // To call a function.
  CALL_FUNCTION = 103;
  // To get the value of an attribute.
  GET_ATTRIBUTE = 104;
  // To read the specification message of a component.
  VTS_DRIVER_COMMAND_READ_SPECIFICATION = 105;

  // for a shell driver
  // To execute a shell command.
  EXECUTE_COMMAND = 201;

  // To invoke a system call.
  INVOKE_SYSCALL = 202;
}


// Type of a response.
enum VtsDriverResponseCode {
  UNKNOWN_VTS_DRIVER_RESPONSE_CODE = 0;
  // successful
  VTS_DRIVER_RESPONSE_SUCCESS = 1;
  // failed
  VTS_DRIVER_RESPONSE_FAIL = 2;
}


// To specify a command.
message VtsDriverControlCommandMessage {
  // Command type.
  optional VtsDriverCommandType command_type = 1;

  // for EXIT
  // none

  // for GET_STATUS
  optional int32 status_type = 1101;

  // for LOAD_HAL
  // The name of a target.
  optional bytes file_path = 1201;
  // target class
  optional int32 target_class = 1202;
  // target type
  optional int32 target_type = 1203;
  // target version (should be divided by 100) - float has a compatibility issue
  // between C/C++ and python protoc.
  optional float target_version = 1204;
  // the name of a HAL module to open.
  optional bytes module_name = 1205;
  // the package of a HIDL HAL to open.
  optional bytes target_package = 1206;
  // the name of a target component (currently used for HIDL HALs only).
  optional bytes target_component_name = 1207;

  // the name of a HW Binder service to use (only needed for HIDL HAL).
  optional bytes hw_binder_service_name = 1221;

  // for LIST_FUNCTIONS
  // none

  // for CALL_FUNCTION
  optional bytes arg = 1401;

  // UID of a caller on the driver-side.
  optional bytes driver_caller_uid = 1501;

  // for EXECUTE_COMMAND
  repeated bytes shell_command = 2001;
}


// To specify a response.
message VtsDriverControlResponseMessage {
  // Response type.
  optional VtsDriverResponseCode response_code = 1;

  // Return value.
  optional int32 return_value = 11;
  // Return message.
  optional bytes return_message = 12;

  // The stdout message for each command
  repeated bytes stdout = 1001;
  // The stderr message for each command
  repeated bytes stderr = 1002;
  // The exit code for each command
  repeated int32 exit_code = 1003;

  // The retrieved specifications.
  repeated bytes spec = 2001;
}
