blob: a511286f01ec1fd7ca8c9fc536a59cf64dfca67f [file] [log] [blame]
// Copyright 2022 Google LLC
//
// 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
//
// https://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 = "proto3";
option java_outer_classname = "ASHAProto";
package pandora.asha;
import "google/protobuf/empty.proto";
import "pandora/host.proto";
// Service to trigger Audio Streaming for Hearing Aid (ASHA) procedures.
// ASHA uses connection-oriented L2CAP channels (CoC) and GATT.
service ASHA {
// Register ASHA Service.
rpc Register(RegisterRequest) returns (google.protobuf.Empty);
// Capture Audio.
rpc CaptureAudio(CaptureAudioRequest) returns (stream CaptureAudioResponse);
// Start a suspended stream.
rpc Start(StartRequest) returns (StartResponse);
// Playback audio
rpc PlaybackAudio(stream PlaybackAudioRequest) returns (PlaybackAudioResponse);
// Stop a started stream.
rpc Stop(StopRequest) returns (StopResponse);
// Wait for ASHA device to be connected.
rpc WaitPeripheral(WaitPeripheralRequest) returns (WaitPeripheralResponse);
}
// Request of the `Register` method.
message RegisterRequest {
uint32 capability = 1; // left or right device, monaural or binaural device.
repeated uint32 hisyncid = 2; // id identifying two hearing aids as one pair.
}
// Request of the `CaptureAudio` method.
message CaptureAudioRequest {
// Low Energy connection.
Connection connection = 1;
}
// Response of the `CaptureAudio` method.
message CaptureAudioResponse {
// Audio data received on peripheral side.
// `data` is decoded by G722 decoder.
bytes data = 1;
}
// Request of the `Start` method.
message StartRequest {
// Low Energy connection.
Connection connection = 1;
}
// Response of the `Start` method.
message StartResponse {}
// Request of the `PlaybackAudio` method.
message PlaybackAudioRequest {
// Low Energy connection.
Connection connection = 1;
// Audio data to playback.
// `data` should be interleaved stereo frames with 16-bit signed little-endian
// linear PCM samples at 44100Hz sample rate
bytes data = 2;
}
// Response of the `PlaybackAudio` method.
message PlaybackAudioResponse {}
// Request of the `Stop` method.
message StopRequest {
// Low Energy connection.
Connection connection = 1;
}
// Response of the `Stop` method.
message StopResponse {}
// Request for the `WaitPeripheral` method.
message WaitPeripheralRequest {
// The connection that is awaiting the stream.
Connection connection = 1;
}
// Response for the `WaitPeripheral` method.
message WaitPeripheralResponse {
// Result of the `WaitPeripheral` call:
// - If successful: the connection to the ASHA device.
Connection connection = 1;
}