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

Commit b30c0ef5 authored by Chienyuan Huang's avatar Chienyuan Huang
Browse files

RAS: Use notifcation if both registered

Flag: com.android.bluetooth.flags.channel_sounding_in_stack
Bug: 324185011
Bug: 369303724
Test: m com.android.btservice
Change-Id: Ica8227052e9f3bea5eb393efac8a63a14c41c71b
parent 9cccf3f8
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -128,11 +128,11 @@ public:
    uint16_t ccc_data_over_written = tracker.ccc_values_[kRasRangingDataOverWrittenCharacteristic];

    if (ccc_real_time != GATT_CLT_CONFIG_NONE) {
      bool need_confirm = ccc_real_time & GATT_CLT_CONFIG_INDICATION;
      bool use_notification = ccc_real_time & GATT_CLT_CONFIG_NOTIFICATION;
      uint16_t attr_id =
              GetCharacteristic(kRasRealTimeRangingDataCharacteristic)->attribute_handle_;
      log::debug("Send Real-time Ranging Data is_last {}", is_last);
      BTA_GATTS_HandleValueIndication(tracker.conn_id_, attr_id, data, need_confirm);
      BTA_GATTS_HandleValueIndication(tracker.conn_id_, attr_id, data, !use_notification);
    }

    if (ccc_data_ready == GATT_CLT_CONFIG_NONE && ccc_data_over_written == GATT_CLT_CONFIG_NONE) {
@@ -369,15 +369,11 @@ public:
      } break;
      case kRasRangingDataReadyCharacteristic16bit: {
        p_msg.attr_value.len = kRingingCounterSize;
        std::vector<uint8_t> value(kRingingCounterSize);
        if (tracker->buffers_.size() > 0) {
        p_msg.attr_value.value[0] = (tracker->last_ready_procedure_ & 0xFF);
        p_msg.attr_value.value[1] = (tracker->last_ready_procedure_ >> 8) & 0xFF;
        }
      } break;
      case kRasRangingDataOverWrittenCharacteristic16bit: {
        p_msg.attr_value.len = kRingingCounterSize;
        std::vector<uint8_t> value(kRingingCounterSize);
        p_msg.attr_value.value[0] = (tracker->last_overwritten_procedure_ & 0xFF);
        p_msg.attr_value.value[1] = (tracker->last_overwritten_procedure_ >> 8) & 0xFF;
      } break;
@@ -454,11 +450,6 @@ public:
          return;
        }
        ClientTracker* tracker = &trackers_[p_data->req_data.remote_bda];
        if (tracker->handling_control_point_command_) {
          log::warn("Server busy");
          SendResponseCode(ResponseCodeValue::SERVER_BUSY, tracker);
          return;
        }
        if (need_rsp) {
          BTA_GATTS_SendRsp(conn_id, p_data->req_data.trans_id, GATT_SUCCESS, &p_msg);
        }
@@ -566,6 +557,12 @@ public:
      return;
    }

    if (tracker->handling_control_point_command_ && command.opcode_ != Opcode::ABORT_OPERATION) {
      log::warn("Server busy");
      SendResponseCode(ResponseCodeValue::SERVER_BUSY, tracker);
      return;
    }

    tracker->handling_control_point_command_ = true;

    switch (command.opcode_) {
@@ -596,7 +593,7 @@ public:

    uint16_t ccc_value = tracker->ccc_values_[kRasOnDemandDataCharacteristic];
    uint16_t attr_id = GetCharacteristic(kRasOnDemandDataCharacteristic)->attribute_handle_;
    bool need_confirm = ccc_value & GATT_CLT_CONFIG_INDICATION;
    bool use_notification = ccc_value & GATT_CLT_CONFIG_NOTIFICATION;

    std::lock_guard<std::mutex> lock(on_demand_ranging_mutex_);
    auto it = std::find_if(tracker->buffers_.begin(), tracker->buffers_.end(),
@@ -610,7 +607,8 @@ public:
          break;
        }
        log::info("Send On Demand Ranging Data, segment {}", i);
        BTA_GATTS_HandleValueIndication(tracker->conn_id_, attr_id, it->segments_[i], need_confirm);
        BTA_GATTS_HandleValueIndication(tracker->conn_id_, attr_id, it->segments_[i],
                                        !use_notification);
      }
      log::info("Send COMPLETE_RANGING_DATA_RESPONSE, ranging_counter:{}", ranging_counter);
      std::vector<uint8_t> response(3, 0);