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

Commit 6581d0cb authored by Aritra Sen's avatar Aritra Sen
Browse files

Send event data over a map instead of a string for better data representation.

Introduced a new field called `params` which is a key-value pair of a string and a list of string fields mapping all necessary event associated data.

Bug: 250899887
Test: system/gd/cert/run --topshim --clean
Tag: #floss
Change-Id: I7b0443888e3677386a187eb5ff28b61c20d6fd5d
parent a5dfff8b
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -132,6 +132,12 @@ message FetchEventsRequest {}
message FetchEventsResponse {
  EventType event_type = 1;
  string data = 2;
  // Storing all event related data as a key-value pair.
  map<string, EventData> params = 3;
}

message EventData {
  repeated string data = 1;
}

message ToggleStackRequest {
+2 −3
Original line number Diff line number Diff line
@@ -30,10 +30,9 @@ class AdapterTest(TopshimBaseTest):
        self.dut().enable_page_scan()

    def test_set_local_io_caps(self):
        status, properties = self.dut().set_local_io_caps(3)
        status, caps = self.dut().set_local_io_caps(3)
        assertThat(status).isEqualTo("Success")
        assertThat(len(properties)).isEqualTo(1)
        assertThat(properties[0]).isEqualTo("LocalIoCaps(None_)")
        assertThat(caps).isEqualTo("None_")


if __name__ == "__main__":
+5 −3
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ class AdapterClient(AsyncClosable):

            # Match event by some condition.
            if e.event_type == event:
                future.set_result(e.data)
                future.set_result(e.params)
                break
            else:
                print("Got '%s'; expecting '%s'" % (e.event_type, event))
@@ -72,7 +72,8 @@ class AdapterClient(AsyncClosable):

    async def _verify_adapter_started(self):
        future = await self._listen_for_event(facade_pb2.EventType.ADAPTER_STATE)
        return future.result() == "ON"
        params = future.result()
        return params["state"].data[0] == "ON"

    async def toggle_stack(self, is_start=True):
        """Enable/disable the stack"""
@@ -104,7 +105,8 @@ class AdapterClient(AsyncClosable):
    async def le_rand(self):
        await self.__adapter_stub.LeRand(empty_proto.Empty())
        future = await self._listen_for_event(facade_pb2.EventType.LE_RAND)
        return future.result()
        params = future.result()
        return params["data"].data[0]

    async def restore_filter_accept_list(self):
        await self.__adapter_stub.RestoreFilterAcceptList(empty_proto.Empty())
+6 −8
Original line number Diff line number Diff line
@@ -174,9 +174,9 @@ class TopshimDevice(AsyncClosable):
        f = self.__post(self.__security.generate_local_oob_data(transport))

        async def waiter(f):
            data = await f
            data_list = data.split(";")
            return OobData(data_list[0], data_list[1], data_list[2], data_list[3], data_list[4])
            params = await f
            return OobData(params["is_valid"].data[0], params["transport"].data[0], params["address"].data[0],
                           params["confirmation"].data[0], params["randomizer"].data[0])

        return self.__post(waiter(f))

@@ -184,10 +184,8 @@ class TopshimDevice(AsyncClosable):
        f = self.__post(self.__adapter.set_local_io_caps(io_capability))

        async def waiter(f):
            data = await f
            data_list = data.split(" :: ")
            status, properties = data_list[0].strip(), data_list[1].strip()
            properties = list(properties[1:-1].strip().split(","))
            return (status, properties)
            params = await f
            status, io_caps = params["status"].data[0], params["LocalIoCaps"].data[0]
            return (status, io_caps)

        return self.__post(waiter(f))
+45 −27
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
use bt_topshim::btif;
use bt_topshim::btif::{BaseCallbacks, BaseCallbacksDispatcher, BluetoothInterface, BtIoCap};

use crate::utils::converters::{bluetooth_property_to_event_data, event_data_from_string};
use bt_topshim_facade_protobuf::empty::Empty;
use bt_topshim_facade_protobuf::facade::{
    EventType, FetchEventsRequest, FetchEventsResponse, SetDefaultEventMaskExceptRequest,
@@ -18,6 +19,7 @@ use std::sync::{Arc, Mutex};
use tokio::runtime::Runtime;
use tokio::sync::mpsc;
use tokio::sync::Mutex as TokioMutex;

fn get_bt_dispatcher(
    btif: Arc<Mutex<BluetoothInterface>>,
    tx: mpsc::Sender<BaseCallbacks>,
@@ -97,49 +99,65 @@ impl AdapterService for AdapterServiceImpl {
                    BaseCallbacks::AdapterState(_state) => {
                        let mut rsp = FetchEventsResponse::new();
                        rsp.event_type = EventType::ADAPTER_STATE;
                        rsp.data = "ON".to_string();
                        rsp.params.insert(
                            String::from("state"),
                            event_data_from_string(String::from("ON")),
                        );
                        sink.send((rsp, WriteFlags::default())).await.unwrap();
                    }
                    BaseCallbacks::SspRequest(_, _, _, _, _) => {}
                    BaseCallbacks::LeRandCallback(random) => {
                        let mut rsp = FetchEventsResponse::new();
                        rsp.event_type = EventType::LE_RAND;
                        rsp.data = random.to_string();
                        rsp.params.insert(
                            String::from("data"),
                            event_data_from_string(random.to_string()),
                        );
                        sink.send((rsp, WriteFlags::default())).await.unwrap();
                    }
                    BaseCallbacks::GenerateLocalOobData(transport, data) => {
                        let mut rsp = FetchEventsResponse::new();
                        rsp.event_type = EventType::GENERATE_LOCAL_OOB_DATA;
                        let delimiter = ';';
                        // transport = 1
                        // + delimiter = 1
                        // + address+type = 7
                        // + delimiter = 1
                        // + confirmation = 32
                        // + delimiter = 1
                        // + randomizer = 32
                        let cap = 75;
                        let mut s = String::with_capacity(cap);
                        if data.is_valid {
                            s.push('1');
                        rsp.params.insert(
                            String::from("is_valid"),
                            event_data_from_string(String::from(if data.is_valid {
                                "1"
                            } else {
                            s.push('0');
                        }
                        s.push(delimiter);
                        s.push_str(&format!("{}", transport));
                        s.push(delimiter);
                        s.push_str(&encode_hex(&data.address));
                        s.push(delimiter);
                        s.push_str(&encode_hex(&data.c));
                        s.push(delimiter);
                        s.push_str(&encode_hex(&data.r));
                        rsp.data = s;
                                "0"
                            })),
                        );
                        rsp.params.insert(
                            String::from("transport"),
                            event_data_from_string(format!("{}", transport)),
                        );
                        rsp.params.insert(
                            String::from("address"),
                            event_data_from_string(encode_hex(&data.address)),
                        );
                        rsp.params.insert(
                            String::from("confirmation"),
                            event_data_from_string(encode_hex(&data.c)),
                        );
                        rsp.params.insert(
                            String::from("randomizer"),
                            event_data_from_string(encode_hex(&data.r)),
                        );
                        sink.send((rsp, WriteFlags::default())).await.unwrap();
                    }
                    BaseCallbacks::AdapterProperties(status, _, properties) => {
                        let mut rsp = FetchEventsResponse::new();
                        rsp.event_type = EventType::ADAPTER_PROPERTY;
                        rsp.data = format!("{:?} :: {:?}", status, properties);
                        rsp.params.insert(
                            String::from("status"),
                            event_data_from_string(format!("{:?}", status)),
                        );
                        for property in properties.clone() {
                            let (key, event_data) = bluetooth_property_to_event_data(property);
                            if key == "skip" {
                                continue;
                            }
                            rsp.params.insert(key, event_data);
                        }
                        sink.send((rsp, WriteFlags::default())).await.unwrap();
                    }
                    _ => (),
Loading