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