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

Commit a0541c03 authored by Yuyang Huang's avatar Yuyang Huang Committed by Gerrit Code Review
Browse files

Merge "add ConfirmStreamingRequest and CancelStreamingRequest to enable status...

Merge "add ConfirmStreamingRequest and CancelStreamingRequest to enable status update from SCO connection" into main
parents 827610f0 ff6b6cba
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,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