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

Commit d7473e82 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

service: Expose Connect and Disconnect through IBluetothLowEnergy

Change-Id: Idcfd3fac263e61bc1bb2be97017554d552511765
parent 3fe8b3e8
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -158,6 +158,11 @@ class CLIBluetoothLowEnergyCallback
    ble_registering = false;
  }

  void OnConnectionState(int status, int client_id, const char* address,
                         bool connected) override {
    //TODO(jpawlowski): implement
  }

  void OnScanResult(const bluetooth::ScanResult& scan_result) override {
    if (showing_prompt.load())
      cout << endl;
+47 −0
Original line number Diff line number Diff line
@@ -65,6 +65,25 @@ status_t BnBluetoothLowEnergy::onTransact(
    UnregisterAll();
    return android::NO_ERROR;
  }
  case CONNECT_TRANSACTION: {
    int client_id = data.readInt32();
    const char* address = data.readCString();
    bool is_direct = data.readBool();

    bool result = Connect(client_id, address, is_direct);
    reply->writeInt32(result);

    return android::NO_ERROR;
  }
  case DISCONNECT_TRANSACTION: {
    int client_id = data.readInt32();
    const char* address = data.readCString();

    bool result = Disconnect(client_id, address);
    reply->writeInt32(result);

    return android::NO_ERROR;
  }
  case START_SCAN_TRANSACTION: {
    int client_id = data.readInt32();
    auto settings = CreateScanSettingsFromParcel(data);
@@ -162,6 +181,34 @@ void BpBluetoothLowEnergy::UnregisterAll() {
                     data, &reply);
}

bool BpBluetoothLowEnergy::Connect(int client_id, const char* address,
                                   bool is_direct) {
  Parcel data, reply;

  data.writeInterfaceToken(IBluetoothLowEnergy::getInterfaceDescriptor());
  data.writeInt32(client_id);
  data.writeCString(address);
  data.writeBool(is_direct);

  remote()->transact(IBluetoothLowEnergy::CONNECT_TRANSACTION,
                     data, &reply);

  return reply.readInt32();
}

bool BpBluetoothLowEnergy::Disconnect(int client_id, const char* address) {
  Parcel data, reply;

  data.writeInterfaceToken(IBluetoothLowEnergy::getInterfaceDescriptor());
  data.writeInt32(client_id);
  data.writeCString(address);

  remote()->transact(IBluetoothLowEnergy::DISCONNECT_TRANSACTION,
                     data, &reply);

  return reply.readInt32();
}

bool BpBluetoothLowEnergy::StartScan(
    int client_id,
    const bluetooth::ScanSettings& settings,
+7 −0
Original line number Diff line number Diff line
@@ -72,6 +72,9 @@ class IBluetoothLowEnergy : public android::IInterface {
  virtual void UnregisterClient(int client_if) = 0;
  virtual void UnregisterAll() = 0;

  virtual bool Connect(int client_id, const char* address, bool is_direct) = 0;
  virtual bool Disconnect(int client_id, const char* address) = 0;

  virtual bool StartScan(
      int client_id,
      const bluetooth::ScanSettings& settings,
@@ -119,6 +122,10 @@ class BpBluetoothLowEnergy : public android::BpInterface<IBluetoothLowEnergy> {
      const android::sp<IBluetoothLowEnergyCallback>& callback) override;
  void UnregisterClient(int client_if) override;
  void UnregisterAll() override;

  bool Connect(int client_id, const char* address, bool is_direct) override;
  bool Disconnect(int client_id, const char* address) override;

  bool StartScan(
      int client_id,
      const bluetooth::ScanSettings& settings,
+27 −0
Original line number Diff line number Diff line
@@ -55,6 +55,15 @@ status_t BnBluetoothLowEnergyCallback::onTransact(
    OnClientRegistered(status, client_if);
    return android::NO_ERROR;
  }
  case ON_CONNECTION_STATE_TRANSACTION: {
    int status = data.readInt32();
    int client_id = data.readInt32();
    const char* address = data.readCString();
    bool connected = data.readBool();

    OnConnectionState(status, client_id, address, connected);
    return android::NO_ERROR;
  }
  case ON_SCAN_RESULT_TRANSACTION: {
    auto scan_result = CreateScanResultFromParcel(data);
    CHECK(scan_result.get());
@@ -97,6 +106,24 @@ void BpBluetoothLowEnergyCallback::OnClientRegistered(
      IBinder::FLAG_ONEWAY);
}

void BpBluetoothLowEnergyCallback::OnConnectionState(
    int status, int client_id, const char* address, bool connected) {

  Parcel data;

  data.writeInterfaceToken(
      IBluetoothLowEnergyCallback::getInterfaceDescriptor());
  data.writeInt32(status);
  data.writeInt32(client_id);
  data.writeCString(address);
  data.writeBool(connected);

  remote()->transact(
      IBluetoothLowEnergyCallback::ON_CONNECTION_STATE_TRANSACTION,
      data, NULL,
      IBinder::FLAG_ONEWAY);
}

void BpBluetoothLowEnergyCallback::OnScanResult(
    const bluetooth::ScanResult& scan_result) {
  Parcel data, reply;
+4 −0
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ namespace binder {
  };

  virtual void OnClientRegistered(int status, int client_if) = 0;
  virtual void OnConnectionState(int status, int client_id, const char* address,
                                 bool connected) = 0;
  virtual void OnScanResult(const bluetooth::ScanResult& scan_result) = 0;
  virtual void OnMultiAdvertiseCallback(
      int status, bool is_start,
@@ -93,6 +95,8 @@ class BpBluetoothLowEnergyCallback

  // IBluetoothLowEnergyCallback overrides:
  void OnClientRegistered(int status, int client_if) override;
  void OnConnectionState(int status, int client_id, const char* address,
                         bool connected) override;
  void OnScanResult(const bluetooth::ScanResult& scan_result) override;
  void OnMultiAdvertiseCallback(
      int status, bool is_start,
Loading