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

Commit 51d73a97 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Use proper sockets for A2DP and Hearing Aid HAL

Test: bond both Hearing Aid and Headset, try to stream to devices separately
Bug: 69623109
Change-Id: I81c9baa65d2ef114d4e964db29beb85def2629ae
(cherry picked from commit 16a63404814c4b1bcf2de6e1a624b5bd8b6b1cf6)
parent 11ec5795
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -115,7 +115,8 @@ void hearing_aid_recv_ctrl_data() {
    case HEARING_AID_CTRL_CMD_START:
      localAudioReceiver->OnAudioResume();
      // timer is restarted in UIPC_Open
      UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_AUDIO, hearing_aid_data_cb);
      UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_AUDIO, hearing_aid_data_cb,
                HEARING_AID_DATA_PATH);
      hearing_aid_send_ack(HEARING_AID_CTRL_ACK_SUCCESS);
      break;

@@ -229,7 +230,8 @@ void hearing_aid_ctrl_cb(tUIPC_CH_ID, tUIPC_EVENT event) {
    case UIPC_OPEN_EVT:
      break;
    case UIPC_CLOSE_EVT:
      UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb);
      UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb,
                HEARING_AID_CTRL_PATH);
      break;
    case UIPC_RX_DATA_READY_EVT:
      hearing_aid_recv_ctrl_data();
@@ -254,7 +256,8 @@ void HearingAidAudioSource::Stop() {

void HearingAidAudioSource::Initialize() {
  uipc_hearing_aid = UIPC_Init();
  UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb);
  UIPC_Open(*uipc_hearing_aid, UIPC_CH_ID_AV_CTRL, hearing_aid_ctrl_cb,
            HEARING_AID_CTRL_PATH);
}

void HearingAidAudioSource::CleanUp() {
+7 −4
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ std::unique_ptr<tUIPC_STATE> a2dp_uipc;

void btif_a2dp_control_init(void) {
  a2dp_uipc = UIPC_Init();
  UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_CTRL, btif_a2dp_ctrl_cb);
  UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_CTRL, btif_a2dp_ctrl_cb, A2DP_CTRL_PATH);
}

void btif_a2dp_control_cleanup(void) {
@@ -118,7 +118,8 @@ static void btif_a2dp_recv_ctrl_data(void) {

      if (btif_av_stream_ready()) {
        /* Setup audio data channel listener */
        UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_AUDIO, btif_a2dp_data_cb);
        UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_AUDIO, btif_a2dp_data_cb,
                  A2DP_DATA_PATH);

        /*
         * Post start event and wait for audio path to open.
@@ -136,7 +137,8 @@ static void btif_a2dp_recv_ctrl_data(void) {
         * Already started, setup audio data channel listener and ACK
         * back immediately.
         */
        UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_AUDIO, btif_a2dp_data_cb);
        UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_AUDIO, btif_a2dp_data_cb,
                  A2DP_DATA_PATH);
        btif_a2dp_command_ack(A2DP_CTRL_ACK_SUCCESS);
        break;
      }
@@ -310,7 +312,8 @@ static void btif_a2dp_ctrl_cb(UNUSED_ATTR tUIPC_CH_ID ch_id,
    case UIPC_CLOSE_EVT:
      /* restart ctrl server unless we are shutting down */
      if (btif_a2dp_source_media_task_is_running())
        UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_CTRL, btif_a2dp_ctrl_cb);
        UIPC_Open(*a2dp_uipc, UIPC_CH_ID_AV_CTRL, btif_a2dp_ctrl_cb,
                  A2DP_CTRL_PATH);
      break;

    case UIPC_RX_DATA_READY_EVT:
+3 −1
Original line number Diff line number Diff line
@@ -90,9 +90,11 @@ std::unique_ptr<tUIPC_STATE> UIPC_Init();
 *
 * @param ch_id Channel ID
 * @param p_cback Callback handler
 * @param socket_path Path to the socket
 * @return true on success, otherwise false
 */
bool UIPC_Open(tUIPC_STATE& uipc, tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK* p_cback);
bool UIPC_Open(tUIPC_STATE& uipc, tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK* p_cback,
               const char* socket_path);

/**
 * Closes a channel in UIPC or the entire UIPC module
+3 −10
Original line number Diff line number Diff line
@@ -539,7 +539,8 @@ std::unique_ptr<tUIPC_STATE> UIPC_Init() {
 ** Returns          true in case of success, false in case of failure.
 **
 ******************************************************************************/
bool UIPC_Open(tUIPC_STATE& uipc, tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK* p_cback) {
bool UIPC_Open(tUIPC_STATE& uipc, tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK* p_cback,
               const char* socket_path) {
  BTIF_TRACE_DEBUG("UIPC_Open : ch_id %d, p_cback %x", ch_id, p_cback);

  std::lock_guard<std::recursive_mutex> lock(uipc.mutex);
@@ -553,15 +554,7 @@ bool UIPC_Open(tUIPC_STATE& uipc, tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK* p_cback) {
    return 0;
  }

  switch (ch_id) {
    case UIPC_CH_ID_AV_CTRL:
      uipc_setup_server_locked(uipc, ch_id, A2DP_CTRL_PATH, p_cback);
      break;

    case UIPC_CH_ID_AV_AUDIO:
      uipc_setup_server_locked(uipc, ch_id, A2DP_DATA_PATH, p_cback);
      break;
  }
  uipc_setup_server_locked(uipc, ch_id, socket_path, p_cback);

  return true;
}