| // 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; |
| } |