• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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.android.server.uwb.params;
18 
19 import com.android.server.uwb.config.ConfigParam;
20 
21 import com.google.uwb.support.base.Params;
22 import com.google.uwb.support.rftest.RfTestOpenSessionParams;
23 import com.google.uwb.support.base.ProtocolVersion;
24 import android.uwb.UwbAddress;
25 
26 import com.android.modules.utils.build.SdkLevel;
27 
28 /** RfTest encoder */
29 public class RfTestEncoder extends TlvEncoder {
30     @Override
getTlvBuffer(final Params param, final ProtocolVersion protocolVersion)31     public TlvBuffer getTlvBuffer(final Params param, final ProtocolVersion protocolVersion) {
32         if (param instanceof RfTestOpenSessionParams) {
33             return getTlvBufferFromRfTestOpenSessionParams(param);
34         }
35         return null;
36     }
37 
getRfTestTlvBuffer(final Params param)38     public TlvBuffer getRfTestTlvBuffer(final Params param) {
39         if (param instanceof RfTestOpenSessionParams) {
40             return getTlvBufferFromRfTestParams(param);
41         }
42         return null;
43     }
44 
getTlvBufferFromRfTestParams(final Params param)45     private TlvBuffer getTlvBufferFromRfTestParams(final Params param) {
46         RfTestOpenSessionParams params = (RfTestOpenSessionParams) param;
47 
48         TlvBuffer.Builder tlvBufferBuilder = new TlvBuffer.Builder()
49                 .putInt(ConfigParam.NUMBER_OF_PACKETS, params.getNumberOfPackets())
50                 .putInt(ConfigParam.T_GAP, params.getTgap())
51                 .putInt(ConfigParam.T_START, params.getTstart())
52                 .putInt(ConfigParam.T_WIN, params.getTwin())
53                 .putByte(ConfigParam.RANDOMIZE_PSDU, (byte) params.getRandomizePsdu())
54                 .putByte(ConfigParam.PHR_RANGING_BIT, (byte) params.getPhrRangingBit())
55                 .putInt(ConfigParam.RMARKER_TX_START, params.getRmarkerTxStart())
56                 .putInt(ConfigParam.RMARKER_RX_START, params.getRmarkerRxStart())
57                 .putByte(ConfigParam.STS_INDEX_AUTO_INCR, (byte) params.getStsIndexAutoIncr())
58                 .putByte(ConfigParam.STS_DETECT_BITMAP, (byte) params.getStsDetectBitmap());
59 
60         return tlvBufferBuilder.build();
61     }
62 
getTlvBufferFromRfTestOpenSessionParams(final Params baseParam)63     private TlvBuffer getTlvBufferFromRfTestOpenSessionParams(final Params baseParam) {
64         RfTestOpenSessionParams params = (RfTestOpenSessionParams) baseParam;
65 
66         TlvBuffer.Builder tlvBufferBuilder = new TlvBuffer.Builder()
67                 .putByte(ConfigParam.CHANNEL_NUMBER, (byte) params.getChannelNumber())
68                 .putByte(ConfigParam.NUMBER_OF_CONTROLEES,
69                         (byte) params.getDestAddressList().size())
70                 .putByteArray(ConfigParam.DEVICE_MAC_ADDRESS, params.getDeviceAddress().size(),
71                     getComputedMacAddress(params.getDeviceAddress()))
72                 .putShort(ConfigParam.SLOT_DURATION, (short) params.getSlotDurationRstu())
73                 .putInt(ConfigParam.STS_INDEX, params.getStsIndex())
74                 .putByte(ConfigParam.MAC_FCS_TYPE, (byte) params.getFcsType())
75                 .putByte(ConfigParam.DEVICE_ROLE, (byte) params.getDeviceRole())
76                 .putByte(ConfigParam.RFRAME_CONFIG, (byte) params.getRframeConfig())
77                 .putByte(ConfigParam.PREAMBLE_CODE_INDEX, (byte) params.getPreambleCodeIndex())
78                 .putByte(ConfigParam.SFD_ID, (byte) params.getSfdId())
79                 .putByte(ConfigParam.PSDU_DATA_RATE, (byte) params.getPsduDataRate())
80                 .putByte(ConfigParam.PREAMBLE_DURATION, (byte) params.getPreambleDuration())
81                 .putByte(ConfigParam.PRF_MODE, (byte) params.getPrfMode())
82                 .putByte(ConfigParam.NUMBER_OF_STS_SEGMENTS, (byte) params.getStsSegmentCount());
83         return tlvBufferBuilder.build();
84     }
85 
getComputedMacAddress(final UwbAddress address)86     private static byte[] getComputedMacAddress(final UwbAddress address) {
87         if (!SdkLevel.isAtLeastU()) {
88             return TlvUtil.getReverseBytes(address.toBytes());
89         }
90         return address.toBytes();
91     }
92 }
93