125 lines
5.1 KiB
Java
125 lines
5.1 KiB
Java
|
/*
|
||
|
* Copyright (C) 2021 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
package com.android.server.uwb;
|
||
|
|
||
|
import android.os.PersistableBundle;
|
||
|
import android.uwb.RangingChangeReason;
|
||
|
|
||
|
import com.android.server.uwb.data.UwbUciConstants;
|
||
|
|
||
|
import com.google.uwb.support.base.Params;
|
||
|
import com.google.uwb.support.ccc.CccParams;
|
||
|
import com.google.uwb.support.ccc.CccRangingError;
|
||
|
import com.google.uwb.support.fira.FiraStatusCode;
|
||
|
|
||
|
public class UwbSessionNotificationHelper {
|
||
|
public static int convertUciReasonCodeToApiReasonCode(int reasonCode) {
|
||
|
/* set default */
|
||
|
int rangingChangeReason = RangingChangeReason.UNKNOWN;
|
||
|
switch (reasonCode) {
|
||
|
case UwbUciConstants.REASON_STATE_CHANGE_WITH_SESSION_MANAGEMENT_COMMANDS:
|
||
|
rangingChangeReason = RangingChangeReason.LOCAL_API;
|
||
|
break;
|
||
|
case UwbUciConstants.REASON_MAX_RANGING_ROUND_RETRY_COUNT_REACHED:
|
||
|
rangingChangeReason = RangingChangeReason.MAX_RR_RETRY_REACHED;
|
||
|
break;
|
||
|
case UwbUciConstants.REASON_MAX_NUMBER_OF_MEASUREMENTS_REACHED:
|
||
|
rangingChangeReason = RangingChangeReason.REMOTE_REQUEST;
|
||
|
break;
|
||
|
case UwbUciConstants.REASON_ERROR_INSUFFICIENT_SLOTS_PER_RR:
|
||
|
case UwbUciConstants.REASON_ERROR_SLOT_LENGTH_NOT_SUPPORTED:
|
||
|
case UwbUciConstants.REASON_ERROR_MAC_ADDRESS_MODE_NOT_SUPPORTED:
|
||
|
case UwbUciConstants.REASON_ERROR_INVALID_RANGING_INTERVAL:
|
||
|
case UwbUciConstants.REASON_ERROR_INVALID_STS_CONFIG:
|
||
|
case UwbUciConstants.REASON_ERROR_INVALID_RFRAME_CONFIG:
|
||
|
rangingChangeReason = RangingChangeReason.BAD_PARAMETERS;
|
||
|
break;
|
||
|
}
|
||
|
return rangingChangeReason;
|
||
|
}
|
||
|
|
||
|
public static int convertUciStatusToApiReasonCode(int status) {
|
||
|
/* set default */
|
||
|
int rangingChangeReason = RangingChangeReason.UNKNOWN;
|
||
|
switch (status) {
|
||
|
case UwbUciConstants.STATUS_CODE_OK:
|
||
|
rangingChangeReason = RangingChangeReason.LOCAL_API;
|
||
|
break;
|
||
|
case UwbUciConstants.STATUS_CODE_ERROR_MAX_SESSIONS_EXCEEDED:
|
||
|
rangingChangeReason = RangingChangeReason.MAX_SESSIONS_REACHED;
|
||
|
break;
|
||
|
case UwbUciConstants.STATUS_CODE_INVALID_PARAM:
|
||
|
case UwbUciConstants.STATUS_CODE_INVALID_RANGE:
|
||
|
case UwbUciConstants.STATUS_CODE_INVALID_MESSAGE_SIZE:
|
||
|
rangingChangeReason = RangingChangeReason.BAD_PARAMETERS;
|
||
|
break;
|
||
|
case UwbUciConstants.STATUS_CODE_ERROR_SESSION_NOT_EXIST:
|
||
|
case UwbUciConstants.STATUS_CODE_CCC_LIFECYCLE:
|
||
|
case UwbUciConstants.STATUS_CODE_CCC_SE_BUSY:
|
||
|
rangingChangeReason = RangingChangeReason.PROTOCOL_SPECIFIC;
|
||
|
break;
|
||
|
}
|
||
|
return rangingChangeReason;
|
||
|
}
|
||
|
|
||
|
private static @CccParams.ProtocolError int convertUciStatusToApiCccProtocolError(int status) {
|
||
|
switch (status) {
|
||
|
case UwbUciConstants.STATUS_CODE_ERROR_SESSION_NOT_EXIST:
|
||
|
return CccParams.PROTOCOL_ERROR_NOT_FOUND;
|
||
|
case UwbUciConstants.STATUS_CODE_CCC_LIFECYCLE:
|
||
|
return CccParams.PROTOCOL_ERROR_LIFECYCLE;
|
||
|
case UwbUciConstants.STATUS_CODE_CCC_SE_BUSY:
|
||
|
return CccParams.PROTOCOL_ERROR_SE_BUSY;
|
||
|
default:
|
||
|
return CccParams.PROTOCOL_ERROR_UNKNOWN;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static PersistableBundle convertUciStatusToParam(String protocolName, int status) {
|
||
|
Params c;
|
||
|
if (protocolName.equals(CccParams.PROTOCOL_NAME)) {
|
||
|
c = new CccRangingError.Builder()
|
||
|
.setError(convertUciStatusToApiCccProtocolError(status))
|
||
|
.build();
|
||
|
} else {
|
||
|
c = new FiraStatusCode.Builder().setStatusCode(status).build();
|
||
|
}
|
||
|
return c.toBundle();
|
||
|
}
|
||
|
|
||
|
static String getSessionStateString(int state) {
|
||
|
String ret = "";
|
||
|
switch (state) {
|
||
|
case UwbUciConstants.UWB_SESSION_STATE_INIT:
|
||
|
ret = "INIT";
|
||
|
break;
|
||
|
case UwbUciConstants.UWB_SESSION_STATE_DEINIT:
|
||
|
ret = "DEINIT";
|
||
|
break;
|
||
|
case UwbUciConstants.UWB_SESSION_STATE_ACTIVE:
|
||
|
ret = "ACTIVE";
|
||
|
break;
|
||
|
case UwbUciConstants.UWB_SESSION_STATE_IDLE:
|
||
|
ret = "IDLE";
|
||
|
break;
|
||
|
case UwbUciConstants.UWB_SESSION_STATE_ERROR:
|
||
|
ret = "ERROR";
|
||
|
break;
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
}
|