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

Commit adc2d2c0 authored by Himanshu Rawat's avatar Himanshu Rawat Committed by Automerger Merge Worker
Browse files

Merge changes from topic "hid-runtime-config" into main am: 7928d21e am: cca00b0c

parents 301ebe76 cca00b0c
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -84,6 +84,9 @@ import org.mockito.MockitoAnnotations;
import org.mockito.hamcrest.MockitoHamcrest;
import org.mockito.stubbing.Answer;

import pandora.HIDGrpc;
import pandora.HidProto.HidServiceType;
import pandora.HidProto.ServiceRequest;
import pandora.HostProto.AdvertiseRequest;
import pandora.HostProto.OwnAddressType;

@@ -108,6 +111,7 @@ public class HidHostDualModeTest {
            InstrumentationRegistry.getInstrumentation().getTargetContext();
    private final BluetoothAdapter mAdapter =
            mContext.getSystemService(BluetoothManager.class).getAdapter();
    private HIDGrpc.HIDBlockingStub mHidBlockingStub;

    @Rule(order = 0)
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
@@ -275,6 +279,11 @@ public class HidHostDualModeTest {
        BluetoothHeadset hfpService =
                (BluetoothHeadset) verifyProfileServiceConnected(BluetoothProfile.HEADSET);

        mHidBlockingStub = mBumble.hidBlocking();
        mHidBlockingStub.registerService(
                ServiceRequest.newBuilder()
                        .setServiceType(HidServiceType.SERVICE_TYPE_BOTH)
                        .build());
        AdvertiseRequest request =
                AdvertiseRequest.newBuilder()
                        .setLegacy(true)
+6 −1
Original line number Diff line number Diff line
@@ -81,8 +81,10 @@ import org.mockito.hamcrest.MockitoHamcrest;
import org.mockito.stubbing.Answer;

import pandora.HIDGrpc;
import pandora.HidProto.HidServiceType;
import pandora.HidProto.ProtocolModeEvent;
import pandora.HidProto.ReportEvent;
import pandora.HidProto.ServiceRequest;

import java.time.Duration;
import java.util.Arrays;
@@ -286,7 +288,10 @@ public class HidHostTest {
                (BluetoothHeadset) verifyProfileServiceConnected(BluetoothProfile.HEADSET);

        mHidBlockingStub = mBumble.hidBlocking();

        mHidBlockingStub.registerService(
                ServiceRequest.newBuilder()
                        .setServiceType(HidServiceType.SERVICE_TYPE_HID)
                        .build());
        mDevice = mBumble.getRemoteDevice();
        // Remove bond if the device is already bonded
        if (mDevice.getBondState() == BluetoothDevice.BOND_BONDED) {
+1 −3
Original line number Diff line number Diff line
@@ -271,13 +271,11 @@ public class LeAudioServiceDiscoveryTest {
                        BluetoothDevice.EXTRA_UUID,
                        Matchers.allOf(
                                Matchers.hasItemInArray(BluetoothUuid.HFP),
                                Matchers.hasItemInArray(BluetoothUuid.HID),
                                Matchers.hasItemInArray(BluetoothUuid.A2DP_SOURCE),
                                Matchers.hasItemInArray(BluetoothUuid.A2DP_SINK),
                                Matchers.hasItemInArray(BluetoothUuid.AVRCP),
                                Matchers.hasItemInArray(BluetoothUuid.LE_AUDIO),
                                Matchers.hasItemInArray(BluetoothUuid.BATTERY),
                                Matchers.hasItemInArray(BluetoothUuid.HOGP))));
                                Matchers.hasItemInArray(BluetoothUuid.BATTERY))));
        unregisterIntentActions(
                BluetoothDevice.ACTION_UUID,
                BluetoothDevice.ACTION_ACL_CONNECTED,
+12 −0
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ option java_outer_classname = "HidProto";
import "google/protobuf/empty.proto";

service HID {
  // Register service
  rpc RegisterService(ServiceRequest) returns (google.protobuf.Empty);
  // Connect HID Host
  rpc ConnectHost(google.protobuf.Empty) returns (google.protobuf.Empty);
  // Disconnect HID Host
@@ -39,6 +41,16 @@ enum HidReportId {
  HID_INVALID_RPT_ID = 3;
}

enum HidServiceType {
  SERVICE_TYPE_HID = 0;
  SERVICE_TYPE_HOGP = 1;
  SERVICE_TYPE_BOTH = 2;
}

message ServiceRequest {
  HidServiceType service_type = 1;
}

message SendHostReportRequest {
  bytes address = 1;
  HidReportType report_type = 2;
+33 −12
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ from pandora_experimental.hid_pb2 import (
    PROTOCOL_REPORT_MODE,
    PROTOCOL_BOOT_MODE,
    PROTOCOL_UNSUPPORTED_MODE,
    SERVICE_TYPE_HID,
    SERVICE_TYPE_HOGP,
)

from bumble.core import (
@@ -705,19 +707,11 @@ def on_virtual_cable_unplug_cb():

hid_protoMode_queue = None
hid_report_queue = None

# This class implements the Hid Pandora interface.
class HIDService(HIDServicer):

hid_device = None

    def __init__(self, device: Device) -> None:
        super().__init__()
        self.device = device

def register_hid(self) -> None:
    self.device.sdp_service_records.update(sdp_records())
        self.event_queue: Optional[asyncio.Queue[ProtocolModeEvent]] = None
        hogp_device(self.device)
        logging.info(f'Hid device register: ')
    global hid_device
    hid_device = HID_Device(self.device)
    # Register for  call backs
@@ -728,6 +722,33 @@ class HIDService(HIDServicer):
    # Register for virtual cable unplug call back
    hid_device.on('virtual_cable_unplug', on_virtual_cable_unplug_cb)


# This class implements the Hid Pandora interface.
class HIDService(HIDServicer):

    hid_device = None

    def __init__(self, device: Device) -> None:
        super().__init__()
        self.device = device
        self.event_queue: Optional[asyncio.Queue[ProtocolModeEvent]] = None

    @utils.rpc
    async def RegisterService(self, request: empty_pb2.Empty, context: grpc.ServicerContext) -> empty_pb2.Empty:

        if request.service_type == SERVICE_TYPE_HID:
            logging.info(f'Registering HID')
            register_hid(self)
        elif request.service_type == SERVICE_TYPE_HOGP:
            logging.info(f'Registering HOGP')
            hogp_device(self.device)
        else:
            logging.info(f'Registering both HID and HOGP')
            register_hid(self)
            hogp_device(self.device)

        return empty_pb2.Empty()

    @utils.rpc
    async def ConnectHost(self, request: empty_pb2.Empty, context: grpc.ServicerContext) -> empty_pb2.Empty: