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

Commit 58108ccf authored by Steven Liu's avatar Steven Liu
Browse files

Add the measurement frequency selection.

Flag: EXEMPT not part of BT stack, only a demo app.
Bug: 379951331
Test: m ChannelSoundingTestApp

Change-Id: I2c22e243733a131f78be9942e65eff220e8c4935
parent f3bbb9b5
Loading
Loading
Loading
Loading
+34 −2
Original line number Original line Diff line number Diff line
@@ -38,6 +38,34 @@ import java.util.concurrent.Executors;


class DistanceMeasurementInitiator {
class DistanceMeasurementInitiator {


    enum Freq {
        HIGH(DistanceMeasurementParams.REPORT_FREQUENCY_HIGH),
        MEDIUM(DistanceMeasurementParams.REPORT_FREQUENCY_MEDIUM),
        LOW(DistanceMeasurementParams.REPORT_FREQUENCY_LOW);
        private final int freq;

        Freq(int freq) {
            this.freq = freq;
        }

        int getFreq() {
            return freq;
        }

        @Override
        public String toString() {
            return name();
        }

        public static Freq fromName(String name) {
            try {
                return Freq.valueOf(name);
            } catch (IllegalArgumentException e) {
                return MEDIUM;
            }
        }
    }

    private static final int DISTANCE_MEASUREMENT_DURATION_SEC = 3600;
    private static final int DISTANCE_MEASUREMENT_DURATION_SEC = 3600;
    private static final List<Pair<Integer, String>> mDistanceMeasurementMethodMapping =
    private static final List<Pair<Integer, String>> mDistanceMeasurementMethodMapping =
            List.of(
            List.of(
@@ -119,8 +147,12 @@ class DistanceMeasurementInitiator {
        return methods;
        return methods;
    }
    }


    List<String> getMeasurementFreqs() {
        return List.of(Freq.MEDIUM.toString(), Freq.HIGH.toString(), Freq.LOW.toString());
    }

    @SuppressLint("MissingPermission") // permissions are checked upfront
    @SuppressLint("MissingPermission") // permissions are checked upfront
    void startDistanceMeasurement(String distanceMeasurementMethodName) {
    void startDistanceMeasurement(String distanceMeasurementMethodName, String selectedFreq) {


        if (mTargetDevice == null) {
        if (mTargetDevice == null) {
            printLog("do Gatt connect first");
            printLog("do Gatt connect first");
@@ -132,7 +164,7 @@ class DistanceMeasurementInitiator {
        DistanceMeasurementParams params =
        DistanceMeasurementParams params =
                new DistanceMeasurementParams.Builder(mTargetDevice)
                new DistanceMeasurementParams.Builder(mTargetDevice)
                        .setDurationSeconds(DISTANCE_MEASUREMENT_DURATION_SEC)
                        .setDurationSeconds(DISTANCE_MEASUREMENT_DURATION_SEC)
                        .setFrequency(DistanceMeasurementParams.REPORT_FREQUENCY_LOW)
                        .setFrequency(Freq.fromName(selectedFreq).getFreq())
                        .setMethodId(getDistanceMeasurementMethodId(distanceMeasurementMethodName))
                        .setMethodId(getDistanceMeasurementMethodId(distanceMeasurementMethodName))
                        .build();
                        .build();
        DistanceMeasurementManager distanceMeasurementManager =
        DistanceMeasurementManager distanceMeasurementManager =
+11 −2
Original line number Original line Diff line number Diff line
@@ -43,9 +43,11 @@ public class InitiatorFragment extends Fragment {
    private static final DecimalFormat DISTANCE_DECIMAL_FMT = new DecimalFormat("0.00");
    private static final DecimalFormat DISTANCE_DECIMAL_FMT = new DecimalFormat("0.00");


    private ArrayAdapter<String> mDmMethodArrayAdapter;
    private ArrayAdapter<String> mDmMethodArrayAdapter;
    private ArrayAdapter<String> mFreqArrayAdapter;
    private TextView mDistanceText;
    private TextView mDistanceText;
    private CanvasView mDistanceCanvasView;
    private CanvasView mDistanceCanvasView;
    private Spinner mSpinnerDmMethod;
    private Spinner mSpinnerDmMethod;
    private Spinner mSpinnerFreq;
    private Button mButtonCs;
    private Button mButtonCs;
    private LinearLayout mDistanceViewLayout;
    private LinearLayout mDistanceViewLayout;
    private TextView mLogText;
    private TextView mLogText;
@@ -63,6 +65,7 @@ public class InitiatorFragment extends Fragment {


        mButtonCs = (Button) root.findViewById(R.id.btn_cs);
        mButtonCs = (Button) root.findViewById(R.id.btn_cs);
        mSpinnerDmMethod = (Spinner) root.findViewById(R.id.spinner_dm_method);
        mSpinnerDmMethod = (Spinner) root.findViewById(R.id.spinner_dm_method);
        mSpinnerFreq = (Spinner) root.findViewById(R.id.spinner_freq);
        mDistanceViewLayout = (LinearLayout) root.findViewById(R.id.layout_distance_view);
        mDistanceViewLayout = (LinearLayout) root.findViewById(R.id.layout_distance_view);
        mDistanceText = new TextView(getContext());
        mDistanceText = new TextView(getContext());
        mDistanceViewLayout.addView(mDistanceText);
        mDistanceViewLayout.addView(mDistanceText);
@@ -85,6 +88,11 @@ public class InitiatorFragment extends Fragment {
        mDmMethodArrayAdapter.setDropDownViewResource(
        mDmMethodArrayAdapter.setDropDownViewResource(
                android.R.layout.simple_spinner_dropdown_item);
                android.R.layout.simple_spinner_dropdown_item);
        mSpinnerDmMethod.setAdapter(mDmMethodArrayAdapter);
        mSpinnerDmMethod.setAdapter(mDmMethodArrayAdapter);
        mFreqArrayAdapter =
                new ArrayAdapter<String>(
                        getContext(), android.R.layout.simple_spinner_item, new ArrayList<>());
        mFreqArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinnerFreq.setAdapter(mFreqArrayAdapter);


        mInitiatorViewModel = new ViewModelProvider(this).get(InitiatorViewModel.class);
        mInitiatorViewModel = new ViewModelProvider(this).get(InitiatorViewModel.class);
        mBleConnectionViewModel = new ViewModelProvider(this).get(BleConnectionViewModel.class);
        mBleConnectionViewModel = new ViewModelProvider(this).get(BleConnectionViewModel.class);
@@ -134,14 +142,15 @@ public class InitiatorFragment extends Fragment {
                        });
                        });


        mDmMethodArrayAdapter.addAll(mInitiatorViewModel.getSupportedDmMethods());
        mDmMethodArrayAdapter.addAll(mInitiatorViewModel.getSupportedDmMethods());

        mFreqArrayAdapter.addAll(mInitiatorViewModel.getMeasurementFreqs());
        mButtonCs.setOnClickListener(
        mButtonCs.setOnClickListener(
                v -> {
                v -> {
                    String methodName = mSpinnerDmMethod.getSelectedItem().toString();
                    String methodName = mSpinnerDmMethod.getSelectedItem().toString();
                    String freq = mSpinnerFreq.getSelectedItem().toString();
                    if (TextUtils.isEmpty(methodName)) {
                    if (TextUtils.isEmpty(methodName)) {
                        printLog("the device doesn't support any distance measurement methods.");
                        printLog("the device doesn't support any distance measurement methods.");
                    }
                    }
                    mInitiatorViewModel.toggleCsStartStop(methodName);
                    mInitiatorViewModel.toggleCsStartStop(methodName, freq);
                });
                });
    }
    }


+7 −2
Original line number Original line Diff line number Diff line
@@ -71,9 +71,14 @@ public class InitiatorViewModel extends AndroidViewModel {
        return mDistanceMeasurementInitiator.getDistanceMeasurementMethods();
        return mDistanceMeasurementInitiator.getDistanceMeasurementMethods();
    }
    }


    void toggleCsStartStop(String distanceMeasurementMethodName) {
    List<String> getMeasurementFreqs() {
        return mDistanceMeasurementInitiator.getMeasurementFreqs();
    }

    void toggleCsStartStop(String distanceMeasurementMethodName, String freq) {
        if (!mCsStarted.getValue()) {
        if (!mCsStarted.getValue()) {
            mDistanceMeasurementInitiator.startDistanceMeasurement(distanceMeasurementMethodName);
            mDistanceMeasurementInitiator.startDistanceMeasurement(
                    distanceMeasurementMethodName, freq);
        } else {
        } else {
            mDistanceMeasurementInitiator.stopDistanceMeasurement();
            mDistanceMeasurementInitiator.stopDistanceMeasurement();
        }
        }
+33 −5
Original line number Original line Diff line number Diff line
@@ -21,15 +21,43 @@
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
            app:layout_constraintTop_toTopOf="parent" />



        <TextView
            android:id="@+id/dm_method_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text= "Method"
            app:layout_constraintBottom_toTopOf="@id/btn_cs"
            app:layout_constraintEnd_toStartOf="@id/spinner_dm_method"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container"
            />
        <Spinner
        <Spinner
            android:id="@+id/spinner_dm_method"
            android:id="@+id/spinner_dm_method"
            android:layout_width="0dp"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginTop="8dp"
            android:padding="10dp"
            android:padding="10dp"
            app:layout_constraintEnd_toStartOf="@id/btn_cs"
            app:layout_constraintEnd_toStartOf="@id/freq_label"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintStart_toEndOf="@id/dm_method_label"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
        <TextView
            android:id="@+id/freq_label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text= "Freq"
            app:layout_constraintBottom_toTopOf="@id/btn_cs"
            app:layout_constraintEnd_toStartOf="@id/spinner_freq"
            app:layout_constraintStart_toEndOf="@id/spinner_dm_method"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container"
            />
        <Spinner
            android:id="@+id/spinner_freq"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:padding="10dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/freq_label"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
        <Button
        <Button
            android:id="@+id/btn_cs"
            android:id="@+id/btn_cs"
@@ -40,8 +68,8 @@
            android:padding="10dp"
            android:padding="10dp"
            android:text="Start Distance Measurement"
            android:text="Start Distance Measurement"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/spinner_dm_method"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/init_ble_connection_container" />
            app:layout_constraintTop_toBottomOf="@id/spinner_dm_method" />
        <TextView
        <TextView
            android:id="@+id/text_log"
            android:id="@+id/text_log"
            android:layout_width="match_parent"
            android:layout_width="match_parent"