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

Commit b9ccd3fb authored by weichinweng's avatar weichinweng Committed by Weichin Weng
Browse files

HearingAid: set playback_started to true when start audio command finish.

Bug: 205679750
Tag: #compatibility
Test: 1. Paring from setting and and streaming play
      2. HA battery remove and back reconnect
      3. out of range reconnect
      4. Paired from APP

Change-Id: I0a3e58b792bb12aa86f8ca9e1fe7a9d7bca58ec7
parent 3213a372
Loading
Loading
Loading
Loading
+29 −4
Original line number Original line Diff line number Diff line
@@ -1117,12 +1117,37 @@ class HearingAidImpl : public HearingAid {
                << ", audio type=" << loghex(start[2])
                << ", audio type=" << loghex(start[2])
                << ", device=" << device->address
                << ", device=" << device->address
                << ", other side streaming=" << loghex(start[4]);
                << ", other side streaming=" << loghex(start[4]);
      device->playback_started = true;
      device->command_acked = false;
      device->command_acked = false;
      BtaGattQueue::WriteCharacteristic(device->conn_id,
      BtaGattQueue::WriteCharacteristic(
                                        device->audio_control_point_handle,
          device->conn_id, device->audio_control_point_handle, start,
                                        start, GATT_WRITE, nullptr, nullptr);
          GATT_WRITE, HearingAidImpl::StartAudioCtrlCallbackStatic, nullptr);
    }
  }

  static void StartAudioCtrlCallbackStatic(uint16_t conn_id,
                                           tGATT_STATUS status, uint16_t handle,
                                           uint16_t len, const uint8_t* value,
                                           void* data) {
    if (status != GATT_SUCCESS) {
      LOG(ERROR) << __func__ << ": handle=" << handle << ", conn_id=" << conn_id
                 << ", status=" << loghex(static_cast<uint8_t>(status));
      return;
    }
    if (!instance) {
      LOG(ERROR) << __func__ << ": instance is null.";
      return;
    }
    instance->StartAudioCtrlCallback(conn_id);
  }

  void StartAudioCtrlCallback(uint16_t conn_id) {
    HearingDevice* hearingDevice = hearingDevices.FindByConnId(conn_id);
    if (!hearingDevice) {
      LOG(ERROR) << "Skipping unknown device, conn_id=" << loghex(conn_id);
      return;
    }
    }
    LOG(INFO) << __func__ << ": device: " << hearingDevice->address;
    hearingDevice->playback_started = true;
  }
  }


  void OnAudioDataReady(const std::vector<uint8_t>& data) {
  void OnAudioDataReady(const std::vector<uint8_t>& data) {