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

Commit 2d488fa7 authored by Aritra Sen's avatar Aritra Sen
Browse files

Add API to topshim adapter facade to toggle discovery state of the current topshim device.

Added appropriate testing for the same.

Bug: 261616658
Test: mma -j $(nproc)
Test: ./build.py
Test: system/gd/cert/run --clean --topshim
Tag: #floss
Change-Id: I0bdf54175dec3303a48b6a9b6fa8650bbbe6f870
parent 75c7ddea
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ service AdapterService {
  rpc SetDefaultEventMaskExcept(SetDefaultEventMaskExceptRequest) returns (google.protobuf.Empty) {}
  rpc SetEventFilterInquiryResultAllDevices(google.protobuf.Empty) returns (google.protobuf.Empty) {}
  rpc SetLocalIoCaps(SetLocalIoCapsRequest) returns (SetLocalIoCapsResponse) {}
  rpc ToggleDiscovery(ToggleDiscoveryRequest) returns (ToggleDiscoveryResponse) {}
}

service SecurityService {
@@ -125,6 +126,7 @@ enum EventType {
  GENERATE_LOCAL_OOB_DATA = 3;
  HFP_CONNECTION_STATE = 4;
  ADAPTER_PROPERTY = 5;
  DISCOVERY_STATE = 6;
}

message FetchEventsRequest {}
@@ -246,3 +248,11 @@ message SetLocalIoCapsRequest {
message SetLocalIoCapsResponse {
  int32 status = 1;
}

message ToggleDiscoveryRequest {
  bool is_start = 1;
}

message ToggleDiscoveryResponse {
  int32 status = 1;
}
+11 −0
Original line number Diff line number Diff line
@@ -46,6 +46,17 @@ class AdapterTest(TopshimBaseTest):
        assertThat(status).isEqualTo("Success")
        assertThat(caps).isEqualTo("None_")

    def test_start_discovery(self):
        state = self.dut().toggle_discovery(True)
        assertThat(state).isEqualTo("Started")
        # Reset device to not discovering.
        self.dut().toggle_discovery(False)

    def test_cancel_discovery(self):
        self.dut().toggle_discovery(True)
        state = self.dut().toggle_discovery(False)
        assertThat(state).isEqualTo("Stopped")


if __name__ == "__main__":
    test_runner.main()
+5 −0
Original line number Diff line number Diff line
@@ -133,6 +133,11 @@ class AdapterClient(AsyncClosable):
        await self.__adapter_stub.SetLocalIoCaps(facade_pb2.SetLocalIoCapsRequest(io_capability=io_capability))
        return await self._listen_for_event(facade_pb2.EventType.ADAPTER_PROPERTY)

    async def toggle_discovery(self, is_start):
        await self.__adapter_stub.ToggleDiscovery(facade_pb2.ToggleDiscoveryRequest(is_start=is_start))
        future = await self._listen_for_event(facade_pb2.EventType.DISCOVERY_STATE)
        return future


class A2dpAutomationHelper():
    """Invoke gRPC on topshim for A2DP testing"""
+9 −0
Original line number Diff line number Diff line
@@ -200,3 +200,12 @@ class TopshimDevice(AsyncClosable):
            return (status, io_caps)

        return self.__post(waiter(f))

    def toggle_discovery(self, is_start):
        f = self.__post(self.__adapter.toggle_discovery(is_start))

        async def waiter(f):
            params = await f
            return params["state"].data[0]

        return self.__post(waiter(f))
+31 −1
Original line number Diff line number Diff line
@@ -8,7 +8,8 @@ use bt_topshim_facade_protobuf::empty::Empty;
use bt_topshim_facade_protobuf::facade::{
    EventType, FetchEventsRequest, FetchEventsResponse, SetDefaultEventMaskExceptRequest,
    SetDiscoveryModeRequest, SetDiscoveryModeResponse, SetLocalIoCapsRequest,
    SetLocalIoCapsResponse, ToggleStackRequest, ToggleStackResponse,
    SetLocalIoCapsResponse, ToggleDiscoveryRequest, ToggleDiscoveryResponse, ToggleStackRequest,
    ToggleStackResponse,
};
use bt_topshim_facade_protobuf::facade_grpc::{create_adapter_service, AdapterService};
use futures::sink::SinkExt;
@@ -42,6 +43,9 @@ fn get_bt_dispatcher(
                        status, properties
                    );
                }
                BaseCallbacks::DiscoveryState(state) => {
                    println!("Discovery state changed, state = {:?}, ", state);
                }
                _ => (),
            }
        }),
@@ -160,6 +164,15 @@ impl AdapterService for AdapterServiceImpl {
                        }
                        sink.send((rsp, WriteFlags::default())).await.unwrap();
                    }
                    BaseCallbacks::DiscoveryState(state) => {
                        let mut rsp = FetchEventsResponse::new();
                        rsp.event_type = EventType::DISCOVERY_STATE;
                        rsp.params.insert(
                            String::from("state"),
                            event_data_from_string(format!("{:?}", state)),
                        );
                        sink.send((rsp, WriteFlags::default())).await.unwrap();
                    }
                    _ => (),
                }
            }
@@ -319,4 +332,21 @@ impl AdapterService for AdapterServiceImpl {
            sink.success(resp).await.unwrap();
        })
    }

    fn toggle_discovery(
        &mut self,
        ctx: RpcContext<'_>,
        req: ToggleDiscoveryRequest,
        sink: UnarySink<ToggleDiscoveryResponse>,
    ) {
        let status = match req.is_start {
            true => self.btif_intf.lock().unwrap().start_discovery(),
            false => self.btif_intf.lock().unwrap().cancel_discovery(),
        };
        let mut resp = ToggleDiscoveryResponse::new();
        resp.status = status;
        ctx.spawn(async move {
            sink.success(resp).await.unwrap();
        })
    }
}