Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff6b6cba authored by Yuyang Huang's avatar Yuyang Huang
Browse files

add ConfirmStreamingRequest and CancelStreamingRequest to enable status update from SCO connection

Bug: 294134504
Bug: 315234036
Test: m .
Change-Id: Icc12559bfa0b0e0071d815385451577e4fff33c7
parent 24056c0e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ namespace hfp {
using ::aidl::android::hardware::bluetooth::audio::LatencyMode;

typedef enum {
  HFP_CTRL_CMD_NONE,
  HFP_CTRL_CMD_NONE = 0,
  HFP_CTRL_CMD_CHECK_READY,
  HFP_CTRL_CMD_START,
  HFP_CTRL_CMD_STOP,
+96 −0
Original line number Diff line number Diff line
@@ -186,6 +186,38 @@ size_t HfpClientInterface::Decode::Read(uint8_t* p_buf, uint32_t len) {
  return get_decode_client_interface()->ReadAudioData(p_buf, len);
}

void HfpClientInterface::Decode::ConfirmStreamingRequest() {
  auto instance = aidl::hfp::HfpDecodingTransport::instance_;
  auto pending_cmd = instance->GetPendingCmd();
  switch (pending_cmd) {
    case aidl::hfp::HFP_CTRL_CMD_START:
      aidl::hfp::HfpDecodingTransport::software_hal_interface->StreamStarted(
          aidl::BluetoothAudioCtrlAck::SUCCESS_FINISHED);
      return;
    case aidl::hfp::HFP_CTRL_CMD_NONE:
      LOG_WARN("no pending start stream request");
      return;
    default:
      LOG_WARN("Invalid state, %d", pending_cmd);
  }
}

void HfpClientInterface::Decode::CancelStreamingRequest() {
  auto instance = aidl::hfp::HfpDecodingTransport::instance_;
  auto pending_cmd = instance->GetPendingCmd();
  switch (pending_cmd) {
    case aidl::hfp::HFP_CTRL_CMD_START:
      aidl::hfp::HfpDecodingTransport::software_hal_interface->StreamStarted(
          aidl::BluetoothAudioCtrlAck::FAILURE);
      return;
    case aidl::hfp::HFP_CTRL_CMD_NONE:
      LOG_WARN("no pending start stream request");
      return;
    default:
      LOG_WARN("Invalid state, %d", pending_cmd);
  }
}

HfpClientInterface::Decode* HfpClientInterface::GetDecode(
    bluetooth::common::MessageLoopThread* message_loop) {
  if (!is_aidl_support_hfp()) {
@@ -300,6 +332,38 @@ size_t HfpClientInterface::Encode::Write(const uint8_t* p_buf, uint32_t len) {
  return get_encode_client_interface()->WriteAudioData(p_buf, len);
}

void HfpClientInterface::Encode::ConfirmStreamingRequest() {
  auto instance = aidl::hfp::HfpEncodingTransport::instance_;
  auto pending_cmd = instance->GetPendingCmd();
  switch (pending_cmd) {
    case aidl::hfp::HFP_CTRL_CMD_START:
      aidl::hfp::HfpEncodingTransport::software_hal_interface->StreamStarted(
          aidl::BluetoothAudioCtrlAck::SUCCESS_FINISHED);
      return;
    case aidl::hfp::HFP_CTRL_CMD_NONE:
      LOG_WARN("no pending start stream request");
      return;
    default:
      LOG_WARN("Invalid state, %d", pending_cmd);
  }
}

void HfpClientInterface::Encode::CancelStreamingRequest() {
  auto instance = aidl::hfp::HfpEncodingTransport::instance_;
  auto pending_cmd = instance->GetPendingCmd();
  switch (pending_cmd) {
    case aidl::hfp::HFP_CTRL_CMD_START:
      aidl::hfp::HfpEncodingTransport::software_hal_interface->StreamStarted(
          aidl::BluetoothAudioCtrlAck::FAILURE);
      return;
    case aidl::hfp::HFP_CTRL_CMD_NONE:
      LOG_WARN("no pending start stream request");
      return;
    default:
      LOG_WARN("Invalid state, %d", pending_cmd);
  }
}

HfpClientInterface::Encode* HfpClientInterface::GetEncode(
    bluetooth::common::MessageLoopThread* message_loop) {
  if (!is_aidl_support_hfp()) {
@@ -404,6 +468,38 @@ void HfpClientInterface::Offload::UpdateAudioConfigToHal(
      offload_config_to_hal_audio_config(offload_config));
}

void HfpClientInterface::Offload::ConfirmStreamingRequest() {
  auto instance = aidl::hfp::HfpEncodingTransport::instance_;
  auto pending_cmd = instance->GetPendingCmd();
  switch (pending_cmd) {
    case aidl::hfp::HFP_CTRL_CMD_START:
      aidl::hfp::HfpEncodingTransport::offloading_hal_interface->StreamStarted(
          aidl::BluetoothAudioCtrlAck::SUCCESS_FINISHED);
      return;
    case aidl::hfp::HFP_CTRL_CMD_NONE:
      LOG_WARN("no pending start stream request");
      return;
    default:
      LOG_WARN("Invalid state, %d", pending_cmd);
  }
}

void HfpClientInterface::Offload::CancelStreamingRequest() {
  auto instance = aidl::hfp::HfpEncodingTransport::instance_;
  auto pending_cmd = instance->GetPendingCmd();
  switch (pending_cmd) {
    case aidl::hfp::HFP_CTRL_CMD_START:
      aidl::hfp::HfpEncodingTransport::offloading_hal_interface->StreamStarted(
          aidl::BluetoothAudioCtrlAck::FAILURE);
      return;
    case aidl::hfp::HFP_CTRL_CMD_NONE:
      LOG_WARN("no pending start stream request");
      return;
    default:
      LOG_WARN("Invalid state, %d", pending_cmd);
  }
}

HfpClientInterface::Offload* HfpClientInterface::GetOffload(
    bluetooth::common::MessageLoopThread* message_loop) {
  if (!is_aidl_support_hfp()) {
+8 −0
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ class HfpClientInterface {
    virtual void StopSession() = 0;
    virtual void UpdateAudioConfigToHal(
        const ::hfp::offload_config& config) = 0;
    virtual void ConfirmStreamingRequest() = 0;
    virtual void CancelStreamingRequest() = 0;
  };

 public:
@@ -49,6 +51,8 @@ class HfpClientInterface {
    void StartSession() override;
    void StopSession() override;
    void UpdateAudioConfigToHal(const ::hfp::offload_config& config) override;
    void ConfirmStreamingRequest() override;
    void CancelStreamingRequest() override;
    size_t Read(uint8_t* p_buf, uint32_t len);
  };

@@ -60,6 +64,8 @@ class HfpClientInterface {
    void StartSession() override;
    void StopSession() override;
    void UpdateAudioConfigToHal(const ::hfp::offload_config& config) override;
    void ConfirmStreamingRequest() override;
    void CancelStreamingRequest() override;
    size_t Write(const uint8_t* p_buf, uint32_t len);
  };

@@ -71,6 +77,8 @@ class HfpClientInterface {
    void StartSession() override;
    void StopSession() override;
    void UpdateAudioConfigToHal(const ::hfp::offload_config& config) override;
    void ConfirmStreamingRequest() override;
    void CancelStreamingRequest() override;
  };

  // Get HFP software decoding client interface if it's not previously acquired