• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.uwb.support;
18 
19 import static org.junit.Assert.assertArrayEquals;
20 import static org.junit.Assert.assertEquals;
21 
22 import androidx.test.ext.junit.runners.AndroidJUnit4;
23 import androidx.test.filters.SmallTest;
24 
25 import com.google.uwb.support.ccc.CccParams;
26 import com.google.uwb.support.ccc.CccProtocolVersion;
27 import com.google.uwb.support.ccc.CccPulseShapeCombo;
28 import com.google.uwb.support.ccc.CccSpecificationParams;
29 import com.google.uwb.support.fira.FiraParams;
30 import com.google.uwb.support.fira.FiraProtocolVersion;
31 import com.google.uwb.support.fira.FiraSpecificationParams;
32 import com.google.uwb.support.generic.GenericSpecificationParams;
33 
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 
37 import java.util.EnumSet;
38 import java.util.List;
39 
40 @SmallTest
41 @RunWith(AndroidJUnit4.class)
42 public class GenericTests {
43 
44     @Test
testSpecificationParams()45     public void testSpecificationParams() {
46         FiraProtocolVersion minPhyVersionSupported = new FiraProtocolVersion(1, 0);
47         FiraProtocolVersion maxPhyVersionSupported = new FiraProtocolVersion(2, 0);
48         FiraProtocolVersion minMacVersionSupported = new FiraProtocolVersion(1, 2);
49         FiraProtocolVersion maxMacVersionSupported = new FiraProtocolVersion(1, 2);
50         List<Integer> supportedChannels = List.of(5, 6, 8, 9);
51         EnumSet<FiraParams.AoaCapabilityFlag> aoaCapabilities =
52                 EnumSet.of(FiraParams.AoaCapabilityFlag.HAS_ELEVATION_SUPPORT);
53 
54         EnumSet<FiraParams.DeviceRoleCapabilityFlag> deviceRoleCapabilities =
55                 EnumSet.allOf(FiraParams.DeviceRoleCapabilityFlag.class);
56         boolean hasBlockStridingSupport = true;
57         boolean hasNonDeferredModeSupport = true;
58         boolean hasInitiationTimeSupport = true;
59         EnumSet<FiraParams.MultiNodeCapabilityFlag> multiNodeCapabilities =
60                 EnumSet.allOf(FiraParams.MultiNodeCapabilityFlag.class);
61         EnumSet<FiraParams.PrfCapabilityFlag> prfCapabilities =
62                 EnumSet.allOf(FiraParams.PrfCapabilityFlag.class);
63         EnumSet<FiraParams.RangingRoundCapabilityFlag> rangingRoundCapabilities =
64                 EnumSet.allOf(FiraParams.RangingRoundCapabilityFlag.class);
65         EnumSet<FiraParams.RframeCapabilityFlag> rframeCapabilities =
66                 EnumSet.allOf(FiraParams.RframeCapabilityFlag.class);
67         EnumSet<FiraParams.StsCapabilityFlag> stsCapabilities =
68                 EnumSet.allOf(FiraParams.StsCapabilityFlag.class);
69         EnumSet<FiraParams.PsduDataRateCapabilityFlag> psduDataRateCapabilities =
70                 EnumSet.allOf(FiraParams.PsduDataRateCapabilityFlag.class);
71         EnumSet<FiraParams.BprfParameterSetCapabilityFlag> bprfCapabilities =
72                 EnumSet.allOf(FiraParams.BprfParameterSetCapabilityFlag.class);
73         EnumSet<FiraParams.HprfParameterSetCapabilityFlag> hprfCapabilities =
74                 EnumSet.allOf(FiraParams.HprfParameterSetCapabilityFlag.class);
75         FiraSpecificationParams firaSpecificationParams =
76                 new FiraSpecificationParams.Builder()
77                         .setMinPhyVersionSupported(minPhyVersionSupported)
78                         .setMaxPhyVersionSupported(maxPhyVersionSupported)
79                         .setMinMacVersionSupported(minMacVersionSupported)
80                         .setMaxMacVersionSupported(maxMacVersionSupported)
81                         .setSupportedChannels(supportedChannels)
82                         .setAoaCapabilities(aoaCapabilities)
83                         .setDeviceRoleCapabilities(deviceRoleCapabilities)
84                         .hasBlockStridingSupport(hasBlockStridingSupport)
85                         .hasNonDeferredModeSupport(hasNonDeferredModeSupport)
86                         .hasInitiationTimeSupport(hasInitiationTimeSupport)
87                         .setMultiNodeCapabilities(multiNodeCapabilities)
88                         .setPrfCapabilities(prfCapabilities)
89                         .setRangingRoundCapabilities(rangingRoundCapabilities)
90                         .setRframeCapabilities(rframeCapabilities)
91                         .setStsCapabilities(stsCapabilities)
92                         .setPsduDataRateCapabilities(psduDataRateCapabilities)
93                         .setBprfParameterSetCapabilities(bprfCapabilities)
94                         .setHprfParameterSetCapabilities(hprfCapabilities)
95                         .build();
96 
97         CccProtocolVersion[] protocolVersions =
98                 new CccProtocolVersion[] {
99                         new CccProtocolVersion(1, 0),
100                         new CccProtocolVersion(2, 0),
101                         new CccProtocolVersion(2, 1)
102                 };
103 
104         Integer[] uwbConfigs = new Integer[] {CccParams.UWB_CONFIG_0, CccParams.UWB_CONFIG_1};
105         CccPulseShapeCombo[] pulseShapeCombos =
106                 new CccPulseShapeCombo[] {
107                         new CccPulseShapeCombo(
108                                 CccParams.PULSE_SHAPE_SYMMETRICAL_ROOT_RAISED_COSINE,
109                                 CccParams.PULSE_SHAPE_SYMMETRICAL_ROOT_RAISED_COSINE),
110                         new CccPulseShapeCombo(
111                                 CccParams.PULSE_SHAPE_PRECURSOR_FREE,
112                                 CccParams.PULSE_SHAPE_PRECURSOR_FREE),
113                         new CccPulseShapeCombo(
114                                 CccParams.PULSE_SHAPE_PRECURSOR_FREE_SPECIAL,
115                                 CccParams.PULSE_SHAPE_PRECURSOR_FREE_SPECIAL)
116                 };
117         int ranMultiplier = 200;
118         Integer[] chapsPerSlots =
119                 new Integer[] {CccParams.CHAPS_PER_SLOT_4, CccParams.CHAPS_PER_SLOT_12};
120         Integer[] syncCodes =
121                 new Integer[] {10, 23};
122         Integer[] channels = new Integer[] {CccParams.UWB_CHANNEL_5, CccParams.UWB_CHANNEL_9};
123         Integer[] hoppingConfigModes =
124                 new Integer[] {
125                         CccParams.HOPPING_CONFIG_MODE_ADAPTIVE,
126                         CccParams.HOPPING_CONFIG_MODE_CONTINUOUS
127                 };
128         Integer[] hoppingSequences =
129                 new Integer[] {CccParams.HOPPING_SEQUENCE_AES, CccParams.HOPPING_SEQUENCE_DEFAULT};
130         CccSpecificationParams.Builder paramsBuilder = new CccSpecificationParams.Builder();
131         for (CccProtocolVersion p : protocolVersions) {
132             paramsBuilder.addProtocolVersion(p);
133         }
134         for (int uwbConfig : uwbConfigs) {
135             paramsBuilder.addUwbConfig(uwbConfig);
136         }
137         for (CccPulseShapeCombo pulseShapeCombo : pulseShapeCombos) {
138             paramsBuilder.addPulseShapeCombo(pulseShapeCombo);
139         }
140         paramsBuilder.setRanMultiplier(ranMultiplier);
141         for (int chapsPerSlot : chapsPerSlots) {
142             paramsBuilder.addChapsPerSlot(chapsPerSlot);
143         }
144         for (int syncCode : syncCodes) {
145             paramsBuilder.addSyncCode(syncCode);
146         }
147         for (int channel : channels) {
148             paramsBuilder.addChannel(channel);
149         }
150         for (int hoppingConfigMode : hoppingConfigModes) {
151             paramsBuilder.addHoppingConfigMode(hoppingConfigMode);
152         }
153         for (int hoppingSequence : hoppingSequences) {
154             paramsBuilder.addHoppingSequence(hoppingSequence);
155         }
156         CccSpecificationParams cccSpecificationParams = paramsBuilder.build();
157 
158         boolean hasPowerStatsSupport = true;
159         GenericSpecificationParams genericSpecificationParams =
160                 new GenericSpecificationParams.Builder()
161                         .setFiraSpecificationParams(firaSpecificationParams)
162                         .setCccSpecificationParams(cccSpecificationParams)
163                         .hasPowerStatsSupport(hasPowerStatsSupport)
164                         .build();
165         firaSpecificationParams = genericSpecificationParams.getFiraSpecificationParams();
166         cccSpecificationParams = genericSpecificationParams.getCccSpecificationParams();
167 
168         assertEquals(minPhyVersionSupported, firaSpecificationParams.getMinPhyVersionSupported());
169         assertEquals(maxPhyVersionSupported, firaSpecificationParams.getMaxPhyVersionSupported());
170         assertEquals(minMacVersionSupported, firaSpecificationParams.getMinMacVersionSupported());
171         assertEquals(maxMacVersionSupported, firaSpecificationParams.getMaxMacVersionSupported());
172         assertEquals(supportedChannels, firaSpecificationParams.getSupportedChannels());
173         assertEquals(aoaCapabilities, firaSpecificationParams.getAoaCapabilities());
174         assertEquals(deviceRoleCapabilities, firaSpecificationParams.getDeviceRoleCapabilities());
175         assertEquals(hasBlockStridingSupport, firaSpecificationParams.hasBlockStridingSupport());
176         assertEquals(hasNonDeferredModeSupport,
177                 firaSpecificationParams.hasNonDeferredModeSupport());
178         assertEquals(hasInitiationTimeSupport,
179                 firaSpecificationParams.hasInitiationTimeSupport());
180         assertEquals(multiNodeCapabilities, firaSpecificationParams.getMultiNodeCapabilities());
181         assertEquals(prfCapabilities, firaSpecificationParams.getPrfCapabilities());
182         assertEquals(rangingRoundCapabilities,
183                 firaSpecificationParams.getRangingRoundCapabilities());
184         assertEquals(rframeCapabilities, firaSpecificationParams.getRframeCapabilities());
185         assertEquals(stsCapabilities, firaSpecificationParams.getStsCapabilities());
186         assertEquals(psduDataRateCapabilities,
187                 firaSpecificationParams.getPsduDataRateCapabilities());
188         assertEquals(bprfCapabilities, firaSpecificationParams.getBprfParameterSetCapabilities());
189         assertEquals(hprfCapabilities, firaSpecificationParams.getHprfParameterSetCapabilities());
190 
191         assertArrayEquals(cccSpecificationParams.getProtocolVersions().toArray(), protocolVersions);
192         assertArrayEquals(cccSpecificationParams.getUwbConfigs().toArray(), uwbConfigs);
193         assertArrayEquals(cccSpecificationParams.getPulseShapeCombos().toArray(), pulseShapeCombos);
194         assertEquals(cccSpecificationParams.getRanMultiplier(), ranMultiplier);
195         assertArrayEquals(cccSpecificationParams.getChapsPerSlot().toArray(), chapsPerSlots);
196         assertArrayEquals(cccSpecificationParams.getSyncCodes().toArray(), syncCodes);
197         assertArrayEquals(cccSpecificationParams.getChannels().toArray(), channels);
198         assertArrayEquals(cccSpecificationParams.getHoppingConfigModes().toArray(),
199                 hoppingConfigModes);
200         assertArrayEquals(cccSpecificationParams.getHoppingSequences().toArray(),
201                 hoppingSequences);
202 
203         assertEquals(hasPowerStatsSupport, genericSpecificationParams.hasPowerStatsSupport());
204     }
205 }
206