syntax = "proto3";

package bluetooth.facade;

import "google/protobuf/empty.proto";
import "facade/common.proto";

service RootFacade {
  rpc StartStack(StartStackRequest) returns (StartStackResponse) {}
  rpc StopStack(StopStackRequest) returns (StopStackResponse) {}
}

enum BluetoothModule {
  HAL = 0;
  HCI = 1;
  L2CAP = 2;
  SECURITY = 3;
}

message StartStackRequest {
  BluetoothModule module_under_test = 1;
}

message StartStackResponse {}

message StopStackRequest {}

message StopStackResponse {}

service ReadOnlyProperty {
  rpc ReadLocalAddress(google.protobuf.Empty) returns (facade.BluetoothAddress) {}
}
