• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 package com.android.server.uwb;
17 
18 import android.os.PersistableBundle;
19 import android.uwb.RangingChangeReason;
20 
21 import com.android.server.uwb.data.UwbUciConstants;
22 
23 import com.google.uwb.support.base.Params;
24 import com.google.uwb.support.ccc.CccParams;
25 import com.google.uwb.support.ccc.CccRangingError;
26 import com.google.uwb.support.fira.FiraStatusCode;
27 
28 public class UwbSessionNotificationHelper {
convertUciReasonCodeToApiReasonCode(int reasonCode)29     public static int convertUciReasonCodeToApiReasonCode(int reasonCode) {
30         /* set default */
31         int rangingChangeReason = RangingChangeReason.UNKNOWN;
32         switch (reasonCode) {
33             case UwbUciConstants.REASON_STATE_CHANGE_WITH_SESSION_MANAGEMENT_COMMANDS:
34                 rangingChangeReason = RangingChangeReason.LOCAL_API;
35                 break;
36             case UwbUciConstants.REASON_MAX_RANGING_ROUND_RETRY_COUNT_REACHED:
37                 rangingChangeReason = RangingChangeReason.MAX_RR_RETRY_REACHED;
38                 break;
39             case UwbUciConstants.REASON_MAX_NUMBER_OF_MEASUREMENTS_REACHED:
40                 rangingChangeReason = RangingChangeReason.REMOTE_REQUEST;
41                 break;
42             case UwbUciConstants.REASON_ERROR_INSUFFICIENT_SLOTS_PER_RR:
43             case UwbUciConstants.REASON_ERROR_SLOT_LENGTH_NOT_SUPPORTED:
44             case UwbUciConstants.REASON_ERROR_INVALID_UL_TDOA_RANDOM_WINDOW:
45             case UwbUciConstants.REASON_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED:
46             case UwbUciConstants.REASON_ERROR_INVALID_RANGING_INTERVAL:
47             case UwbUciConstants.REASON_ERROR_INVALID_STS_CONFIG:
48             case UwbUciConstants.REASON_ERROR_INVALID_RFRAME_CONFIG:
49                 rangingChangeReason = RangingChangeReason.BAD_PARAMETERS;
50                 break;
51             case UwbUciConstants.REASON_REGULATION_UWB_OFF:
52                 rangingChangeReason = RangingChangeReason.SYSTEM_REGULATION;
53                 break;
54         }
55         return rangingChangeReason;
56     }
57 
convertUciStatusToApiReasonCode(int status)58     public static int convertUciStatusToApiReasonCode(int status) {
59         /* set default */
60         int rangingChangeReason = RangingChangeReason.UNKNOWN;
61         switch (status) {
62             case UwbUciConstants.STATUS_CODE_OK:
63                 rangingChangeReason = RangingChangeReason.LOCAL_API;
64                 break;
65             case UwbUciConstants.STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED:
66                 rangingChangeReason = RangingChangeReason.MAX_SESSIONS_REACHED;
67                 break;
68             case UwbUciConstants.STATUS_CODE_INVALID_PARAM:
69             case UwbUciConstants.STATUS_CODE_INVALID_RANGE:
70             case UwbUciConstants.STATUS_CODE_INVALID_MESSAGE_SIZE:
71                 rangingChangeReason = RangingChangeReason.BAD_PARAMETERS;
72                 break;
73             case UwbUciConstants.STATUS_CODE_ERROR_SESSION_NOT_EXIST:
74             case UwbUciConstants.STATUS_CODE_CCC_LIFECYCLE:
75             case UwbUciConstants.STATUS_CODE_CCC_SE_BUSY:
76                 rangingChangeReason = RangingChangeReason.PROTOCOL_SPECIFIC;
77                 break;
78             case UwbUciConstants.REASON_ERROR_INSUFFICIENT_SLOTS_PER_RR:
79                 rangingChangeReason = RangingChangeReason.INSUFFICIENT_SLOTS_PER_RR;
80                 break;
81         }
82         return rangingChangeReason;
83     }
84 
convertUciStatusToApiCccProtocolError(int status)85     private static @CccParams.ProtocolError int convertUciStatusToApiCccProtocolError(int status) {
86         switch (status) {
87             case UwbUciConstants.STATUS_CODE_ERROR_SESSION_NOT_EXIST:
88                 return CccParams.PROTOCOL_ERROR_NOT_FOUND;
89             case UwbUciConstants.STATUS_CODE_CCC_LIFECYCLE:
90                 return CccParams.PROTOCOL_ERROR_LIFECYCLE;
91             case UwbUciConstants.STATUS_CODE_CCC_SE_BUSY:
92                 return CccParams.PROTOCOL_ERROR_SE_BUSY;
93             default:
94                 return CccParams.PROTOCOL_ERROR_UNKNOWN;
95         }
96     }
97 
convertUciStatusToParam(String protocolName, int status)98     public static PersistableBundle convertUciStatusToParam(String protocolName, int status) {
99         Params c;
100         if (protocolName.equals(CccParams.PROTOCOL_NAME)) {
101             c = new CccRangingError.Builder()
102                     .setError(convertUciStatusToApiCccProtocolError(status))
103                     .build();
104         } else {
105             c = new FiraStatusCode.Builder().setStatusCode(status).build();
106         }
107         return c.toBundle();
108     }
109 
getSessionStateString(int state)110     static String getSessionStateString(int state) {
111         String ret = "";
112         switch (state) {
113             case UwbUciConstants.UWB_SESSION_STATE_INIT:
114                 ret = "INIT";
115                 break;
116             case UwbUciConstants.UWB_SESSION_STATE_DEINIT:
117                 ret = "DEINIT";
118                 break;
119             case UwbUciConstants.UWB_SESSION_STATE_ACTIVE:
120                 ret = "ACTIVE";
121                 break;
122             case UwbUciConstants.UWB_SESSION_STATE_IDLE:
123                 ret = "IDLE";
124                 break;
125             case UwbUciConstants.UWB_SESSION_STATE_ERROR:
126                 ret = "ERROR";
127                 break;
128         }
129         return ret;
130     }
131 }
132