syntax = "proto3";

package bluetooth.hci;

import "google/protobuf/empty.proto";

service AclManagerFacade {
  rpc CreateConnection(ConnectionMsg) returns (stream ConnectionEvent) {}
  rpc CancelConnection(ConnectionMsg) returns (google.protobuf.Empty) {}
  rpc Disconnect(HandleMsg) returns (google.protobuf.Empty) {}
  rpc WriteDefaultLinkPolicySettings(PolicyMsg) returns (google.protobuf.Empty) {}
  rpc AuthenticationRequested(HandleMsg) returns (google.protobuf.Empty) {}
  rpc ConnectionCommand(ConnectionCommandMsg) returns (google.protobuf.Empty) {}
  rpc SwitchRole(RoleMsg) returns (google.protobuf.Empty) {}
  rpc SendAclData(AclData) returns (google.protobuf.Empty) {}
  rpc FetchAclData(HandleMsg) returns (stream AclData) {}
  rpc FetchIncomingConnection(google.protobuf.Empty) returns (stream ConnectionEvent) {}
}

message HandleMsg {
  uint32 handle = 1;
}

message ConnectionMsg {
  bytes address = 1;
}

message PolicyMsg {
  uint32 policy = 1;
}

enum NewRole {
  CENTRAL = 0;
  PERIPHERAL = 1;
}

message RoleMsg {
  bytes address = 1;
  NewRole role = 2;
}

message ConnectionCommandMsg {
  bytes packet = 1;
}

message ConnectionEvent {
  bytes payload = 1;
}

message AclData {
  uint32 handle = 1;
  bytes payload = 2;
}
