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

Commit c0088a8f authored by Henri Chataing's avatar Henri Chataing
Browse files

pts-bot: Fix GATT bindings to pass pts tests without LE audio profiles

Patch gatt proto specification and server implementation
with missing definitions and update the test service
with additional characteristics and descriptors.

 - Add the possibility of defining descriptors for
   GATT characteristics
 - Add missing bits for GATT permissions and properties

Bug: 279669844
Test: atest pts-bot:GATT/SR
Change-Id: Id8fae1f1f17000e2270961ade5fdf6f42bb679d6
parent 75470d1d
Loading
Loading
Loading
Loading
+31 −6
Original line number Diff line number Diff line
@@ -39,11 +39,15 @@ from pandora_experimental.gatt_pb2 import (
    PERMISSION_READ,
    PERMISSION_WRITE,
    PERMISSION_READ_ENCRYPTED,
    PERMISSION_READ_ENCRYPTED_MITM,
    PERMISSION_WRITE_ENCRYPTED,
    PERMISSION_WRITE_ENCRYPTED_MITM,
    ENABLE_NOTIFICATION_VALUE,
    ENABLE_INDICATION_VALUE,
)
from pandora_experimental.gatt_pb2 import GattServiceParams
from pandora_experimental.gatt_pb2 import GattCharacteristicParams
from pandora_experimental.gatt_pb2 import GattDescriptorParams
from pandora_experimental.gatt_pb2 import ReadCharacteristicResponse
from pandora_experimental.gatt_pb2 import ReadCharacteristicsFromUuidResponse

@@ -58,11 +62,15 @@ MMI_SERVER = {
}

# These UUIDs are used as reference for GATT server tests
BASE_READ_WRITE_SERVICE_UUID = "0000fffa-0000-1000-8000-00805f9b34fb"
BASE_READ_CHARACTERISTIC_UUID = "0000fffb-0000-1000-8000-00805f9b34fb"
BASE_WRITE_CHARACTERISTIC_UUID = "0000fffc-0000-1000-8000-00805f9b34fb"
CUSTOM_SERVICE_UUID = "0000fffd-0000-1000-8000-00805f9b34fb"
CUSTOM_CHARACTERISTIC_UUID = "0000fffe-0000-1000-8000-00805f9b34fb"
BASE_READ_WRITE_SERVICE_UUID = "0000fffe-0000-1000-8000-00805f9b34fb"
BASE_READ_CHARACTERISTIC_UUID = "0000ffd-0000-1000-8000-00805f9b34fb"
BASE_WRITE_CHARACTERISTIC_UUID = "0000fffa-0000-1000-8000-00805f9b34fb"
BASE_READ_WRITE_ENCRYPTED_CHARACTERISTIC_UUID = "0000fff9-0000-1000-8000-00805f9b34fb"
BASE_READ_WRITE_ENCRYPTED_MITM_CHARACTERISTIC_UUID = "0000fff8-0000-1000-8000-00805f9b34fb"
BASE_READ_DESCRIPTOR_UUID = "0000fff7-0000-1000-8000-00805f9b34fb"
BASE_WRITE_DESCRIPTOR_UUID = "0000fff6-0000-1000-8000-00805f9b34fb"
CUSTOM_SERVICE_UUID = "0000fff5-0000-1000-8000-00805f9b34fb"
CUSTOM_CHARACTERISTIC_UUID = "0000fff4-0000-1000-8000-00805f9b34fb"


class GATTProxy(ProfileProxy):
@@ -987,12 +995,29 @@ class GATTProxy(ProfileProxy):
                    uuid=BASE_READ_CHARACTERISTIC_UUID,
                    properties=PROPERTY_READ,
                    permissions=PERMISSION_READ,
                    descriptors=[
                        GattDescriptorParams(
                            uuid=BASE_READ_DESCRIPTOR_UUID,
                            properties=PROPERTY_READ,
                            permissions=PERMISSION_READ,
                        ),
                    ],
                ),
                GattCharacteristicParams(
                    uuid=BASE_WRITE_CHARACTERISTIC_UUID,
                    properties=PROPERTY_WRITE,
                    permissions=PERMISSION_WRITE,
                ),
                GattCharacteristicParams(
                    uuid=BASE_READ_WRITE_ENCRYPTED_CHARACTERISTIC_UUID,
                    properties=PROPERTY_READ | PROPERTY_WRITE,
                    permissions=PERMISSION_READ_ENCRYPTED | PERMISSION_WRITE_ENCRYPTED,
                ),
                GattCharacteristicParams(
                    uuid=BASE_READ_WRITE_ENCRYPTED_MITM_CHARACTERISTIC_UUID,
                    properties=PROPERTY_READ | PROPERTY_WRITE,
                    permissions=PERMISSION_READ_ENCRYPTED_MITM | PERMISSION_WRITE_ENCRYPTED_MITM,
                ),
            ],
        ))

+12 −8
Original line number Diff line number Diff line
@@ -241,14 +241,18 @@ class Gatt(private val context: Context) : GATTImplBase(), Closeable {
      Log.i(TAG, "registerService")
      val service =
        BluetoothGattService(UUID.fromString(request.service.uuid), SERVICE_TYPE_PRIMARY)
      for (characteristic in request.service.characteristicsList) {
        service.addCharacteristic(
          BluetoothGattCharacteristic(
            UUID.fromString(characteristic.uuid),
            characteristic.properties,
            characteristic.permissions
          )
        )
      for (characteristic_params in request.service.characteristicsList) {
        val characteristic = BluetoothGattCharacteristic(
          UUID.fromString(characteristic_params.uuid),
          characteristic_params.properties,
          characteristic_params.permissions)
        for (descriptor_params in characteristic_params.descriptorsList) {
          characteristic.addDescriptor(BluetoothGattDescriptor(
            UUID.fromString(descriptor_params.uuid),
            descriptor_params.properties,
            descriptor_params.permissions))
        }
        service.addCharacteristic(characteristic)
      }

      val fullService = coroutineScope {
+11 −1
Original line number Diff line number Diff line
@@ -67,8 +67,11 @@ enum AttProperties {
enum AttPermissions {
  PERMISSION_NONE = 0x00;
  PERMISSION_READ = 0x01;
  PERMISSION_WRITE = 0x10;
  PERMISSION_READ_ENCRYPTED = 0x02;
  PERMISSION_READ_ENCRYPTED_MITM = 0x04;
  PERMISSION_WRITE = 0x10;
  PERMISSION_WRITE_ENCRYPTED = 0x20;
  PERMISSION_WRITE_ENCRYPTED_MITM = 0x40;
}

enum EnableValue {
@@ -233,6 +236,13 @@ message GattCharacteristicParams {
  uint32 properties = 1;
  uint32 permissions = 2;
  string uuid = 3;
  repeated GattDescriptorParams descriptors = 4;
}

message GattDescriptorParams {
  uint32 properties = 1;
  uint32 permissions = 2;
  string uuid = 3;
}

message RegisterServiceRequest {