1 /* 2 * Copyright (C) 2017 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * 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, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.google.android.mobly.snippet.bundled.utils; 18 19 import android.bluetooth.BluetoothDevice; 20 import android.bluetooth.BluetoothGatt; 21 import android.bluetooth.BluetoothGattCharacteristic; 22 import android.bluetooth.BluetoothGattService; 23 import android.bluetooth.BluetoothProfile; 24 import android.bluetooth.le.AdvertiseCallback; 25 import android.bluetooth.le.AdvertiseSettings; 26 import android.bluetooth.le.ScanCallback; 27 import android.bluetooth.le.ScanSettings; 28 import android.net.wifi.WifiManager.LocalOnlyHotspotCallback; 29 import android.os.Build; 30 31 /** Mobly Bundled Snippets (MBS)'s {@link RpcEnum} objects representing enums in Android APIs. */ 32 public class MbsEnums { 33 static final RpcEnum BLE_ADVERTISE_MODE = buildBleAdvertiseModeEnum(); 34 static final RpcEnum BLE_ADVERTISE_TX_POWER = buildBleAdvertiseTxPowerEnum(); 35 public static final RpcEnum BLE_SCAN_FAILED_ERROR_CODE = buildBleScanFailedErrorCodeEnum(); 36 public static final RpcEnum BLE_SCAN_RESULT_CALLBACK_TYPE = 37 buildBleScanResultCallbackTypeEnum(); 38 static final RpcEnum BLUETOOTH_DEVICE_BOND_STATE = buildBluetoothDeviceBondState(); 39 static final RpcEnum BLUETOOTH_DEVICE_TYPE = buildBluetoothDeviceTypeEnum(); 40 static final RpcEnum BLE_SERVICE_TYPE = buildServiceTypeEnum(); 41 public static final RpcEnum BLE_STATUS_TYPE = buildStatusTypeEnum(); 42 public static final RpcEnum BLE_CONNECT_STATUS = buildConnectStatusEnum(); 43 static final RpcEnum BLE_PROPERTY_TYPE = buildPropertyTypeEnum(); 44 static final RpcEnum BLE_PERMISSION_TYPE = buildPermissionTypeEnum(); 45 static final RpcEnum BLE_SCAN_MODE = buildBleScanModeEnum(); 46 public static final RpcEnum LOCAL_HOTSPOT_FAIL_REASON = buildLocalHotspotFailedReason(); 47 public static final RpcEnum ADVERTISE_FAILURE_ERROR_CODE = 48 new RpcEnum.Builder().add("ADVERTISE_FAILED_ALREADY_STARTED", 49 AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED) 50 .add("ADVERTISE_FAILED_DATA_TOO_LARGE", 51 AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE) 52 .add( 53 "ADVERTISE_FAILED_FEATURE_UNSUPPORTED", 54 AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED) 55 .add("ADVERTISE_FAILED_INTERNAL_ERROR", 56 AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR) 57 .add( 58 "ADVERTISE_FAILED_TOO_MANY_ADVERTISERS", 59 AdvertiseCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS) 60 .build(); 61 buildBluetoothDeviceBondState()62 private static RpcEnum buildBluetoothDeviceBondState() { 63 RpcEnum.Builder builder = new RpcEnum.Builder(); 64 return builder.add("BOND_NONE", BluetoothDevice.BOND_NONE) 65 .add("BOND_BONDING", BluetoothDevice.BOND_BONDING) 66 .add("BOND_BONDED", BluetoothDevice.BOND_BONDED) 67 .build(); 68 } 69 buildBluetoothDeviceTypeEnum()70 private static RpcEnum buildBluetoothDeviceTypeEnum() { 71 RpcEnum.Builder builder = new RpcEnum.Builder(); 72 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) { 73 return builder.build(); 74 } 75 return builder.add("DEVICE_TYPE_CLASSIC", BluetoothDevice.DEVICE_TYPE_CLASSIC) 76 .add("DEVICE_TYPE_LE", BluetoothDevice.DEVICE_TYPE_LE) 77 .add("DEVICE_TYPE_DUAL", BluetoothDevice.DEVICE_TYPE_DUAL) 78 .add("DEVICE_TYPE_UNKNOWN", BluetoothDevice.DEVICE_TYPE_UNKNOWN) 79 .build(); 80 } 81 buildBleAdvertiseTxPowerEnum()82 private static RpcEnum buildBleAdvertiseTxPowerEnum() { 83 RpcEnum.Builder builder = new RpcEnum.Builder(); 84 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 85 return builder.build(); 86 } 87 return builder.add( 88 "ADVERTISE_TX_POWER_ULTRA_LOW", 89 AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW) 90 .add("ADVERTISE_TX_POWER_LOW", AdvertiseSettings.ADVERTISE_TX_POWER_LOW) 91 .add("ADVERTISE_TX_POWER_MEDIUM", AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM) 92 .add("ADVERTISE_TX_POWER_HIGH", AdvertiseSettings.ADVERTISE_TX_POWER_HIGH) 93 .build(); 94 } 95 buildBleAdvertiseModeEnum()96 private static RpcEnum buildBleAdvertiseModeEnum() { 97 RpcEnum.Builder builder = new RpcEnum.Builder(); 98 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 99 return builder.build(); 100 } 101 return builder.add("ADVERTISE_MODE_BALANCED", AdvertiseSettings.ADVERTISE_MODE_BALANCED) 102 .add("ADVERTISE_MODE_LOW_LATENCY", AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY) 103 .add("ADVERTISE_MODE_LOW_POWER", AdvertiseSettings.ADVERTISE_MODE_LOW_POWER) 104 .build(); 105 } 106 buildBleScanFailedErrorCodeEnum()107 private static RpcEnum buildBleScanFailedErrorCodeEnum() { 108 RpcEnum.Builder builder = new RpcEnum.Builder(); 109 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 110 return builder.build(); 111 } 112 return builder.add("SCAN_FAILED_ALREADY_STARTED", ScanCallback.SCAN_FAILED_ALREADY_STARTED) 113 .add( 114 "SCAN_FAILED_APPLICATION_REGISTRATION_FAILED", 115 ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED) 116 .add( 117 "SCAN_FAILED_FEATURE_UNSUPPORTED", 118 ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED) 119 .add("SCAN_FAILED_INTERNAL_ERROR", ScanCallback.SCAN_FAILED_INTERNAL_ERROR) 120 .build(); 121 } 122 buildBleScanResultCallbackTypeEnum()123 private static RpcEnum buildBleScanResultCallbackTypeEnum() { 124 RpcEnum.Builder builder = new RpcEnum.Builder(); 125 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 126 return builder.build(); 127 } 128 builder.add("CALLBACK_TYPE_ALL_MATCHES", ScanSettings.CALLBACK_TYPE_ALL_MATCHES); 129 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 130 builder.add("CALLBACK_TYPE_FIRST_MATCH", ScanSettings.CALLBACK_TYPE_FIRST_MATCH); 131 builder.add("CALLBACK_TYPE_MATCH_LOST", ScanSettings.CALLBACK_TYPE_MATCH_LOST); 132 } 133 return builder.build(); 134 } 135 buildServiceTypeEnum()136 private static RpcEnum buildServiceTypeEnum() { 137 RpcEnum.Builder builder = new RpcEnum.Builder(); 138 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 139 return builder.build(); 140 } 141 builder.add("SERVICE_TYPE_PRIMARY", BluetoothGattService.SERVICE_TYPE_PRIMARY); 142 builder.add("SERVICE_TYPE_SECONDARY", BluetoothGattService.SERVICE_TYPE_SECONDARY); 143 return builder.build(); 144 } 145 buildStatusTypeEnum()146 private static RpcEnum buildStatusTypeEnum() { 147 RpcEnum.Builder builder = new RpcEnum.Builder(); 148 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 149 return builder.build(); 150 } 151 builder.add("GATT_SUCCESS", BluetoothGatt.GATT_SUCCESS) 152 .add("GATT_CONNECTION_CONGESTED", BluetoothGatt.GATT_CONNECTION_CONGESTED) 153 .add("GATT_FAILURE", BluetoothGatt.GATT_FAILURE) 154 .add("GATT_INSUFFICIENT_AUTHENTICATION", 155 BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION) 156 .add("GATT_INSUFFICIENT_ENCRYPTION", BluetoothGatt.GATT_INSUFFICIENT_ENCRYPTION) 157 .add("GATT_INVALID_ATTRIBUTE_LENGTH", BluetoothGatt.GATT_INVALID_ATTRIBUTE_LENGTH) 158 .add("GATT_INVALID_OFFSET", BluetoothGatt.GATT_INVALID_OFFSET) 159 .add("GATT_READ_NOT_PERMITTED", BluetoothGatt.GATT_READ_NOT_PERMITTED) 160 .add("GATT_REQUEST_NOT_SUPPORTED", BluetoothGatt.GATT_REQUEST_NOT_SUPPORTED) 161 .add("GATT_WRITE_NOT_PERMITTED", BluetoothGatt.GATT_WRITE_NOT_PERMITTED) 162 .add("BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION", 0x13) 163 .add("BLE_HCI_LOCAL_HOST_TERMINATED_CONNECTION", 0x12) 164 .add("BLE_HCI_STATUS_CODE_LMP_RESPONSE_TIMEOUT", 0x22) 165 .add("BLE_HCI_CONN_FAILED_TO_BE_ESTABLISHED", 0x3e) 166 .add("UNEXPECTED_DISCONNECT_NO_ERROR_CODE", 134) 167 .add("DID_NOT_FIND_OFFLINEP2P_SERVICE", 135) 168 .add("MISSING_CHARACTERISTIC", 137) 169 .add("CONNECTION_TIMEOUT", 138) 170 .add("READ_MALFORMED_VERSION", 139) 171 .add("READ_WRITE_VERSION_NONSPECIFIC_ERROR", 140) 172 .add("GATT_0C_err", 0X0C) 173 .add("GATT_16", 0x16) 174 .add("GATT_INTERNAL_ERROR", 129) 175 .add("BLE_HCI_CONNECTION_TIMEOUT", 0x08) 176 .add("GATT_ERROR", 133); 177 return builder.build(); 178 } 179 buildConnectStatusEnum()180 private static RpcEnum buildConnectStatusEnum() { 181 RpcEnum.Builder builder = new RpcEnum.Builder(); 182 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 183 return builder.build(); 184 } 185 builder.add("STATE_CONNECTED", BluetoothProfile.STATE_CONNECTED) 186 .add("STATE_CONNECTING", BluetoothProfile.STATE_CONNECTING) 187 .add("STATE_DISCONNECTED", BluetoothProfile.STATE_DISCONNECTED) 188 .add("STATE_DISCONNECTING", BluetoothProfile.STATE_DISCONNECTING); 189 return builder.build(); 190 } 191 buildPropertyTypeEnum()192 private static RpcEnum buildPropertyTypeEnum() { 193 RpcEnum.Builder builder = new RpcEnum.Builder(); 194 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 195 return builder.build(); 196 } 197 builder 198 .add("PROPERTY_NONE", 0) 199 .add("PROPERTY_BROADCAST", BluetoothGattCharacteristic.PROPERTY_BROADCAST) 200 .add("PROPERTY_EXTENDED_PROPS", BluetoothGattCharacteristic.PROPERTY_EXTENDED_PROPS) 201 .add("PROPERTY_INDICATE", BluetoothGattCharacteristic.PROPERTY_INDICATE) 202 .add("PROPERTY_NOTIFY", BluetoothGattCharacteristic.PROPERTY_NOTIFY) 203 .add("PROPERTY_READ", BluetoothGattCharacteristic.PROPERTY_READ) 204 .add("PROPERTY_SIGNED_WRITE", BluetoothGattCharacteristic.PROPERTY_SIGNED_WRITE) 205 .add("PROPERTY_WRITE", BluetoothGattCharacteristic.PROPERTY_WRITE) 206 .add("PROPERTY_WRITE_NO_RESPONSE", 207 BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE); 208 return builder.build(); 209 } 210 buildPermissionTypeEnum()211 private static RpcEnum buildPermissionTypeEnum() { 212 RpcEnum.Builder builder = new RpcEnum.Builder(); 213 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 214 return builder.build(); 215 } 216 builder.add("PERMISSION_NONE", 0) 217 .add("PERMISSION_READ", BluetoothGattCharacteristic.PERMISSION_READ) 218 .add("PERMISSION_READ_ENCRYPTED", 219 BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED) 220 .add("PERMISSION_READ_ENCRYPTED_MITM", 221 BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED_MITM) 222 .add("PERMISSION_WRITE", BluetoothGattCharacteristic.PERMISSION_WRITE) 223 .add("PERMISSION_WRITE_ENCRYPTED", 224 BluetoothGattCharacteristic.PERMISSION_WRITE_ENCRYPTED) 225 .add("PERMISSION_WRITE_ENCRYPTED_MITM", 226 BluetoothGattCharacteristic.PERMISSION_WRITE_ENCRYPTED_MITM) 227 .add("PERMISSION_WRITE_SIGNED", BluetoothGattCharacteristic.PERMISSION_WRITE_SIGNED) 228 .add("PERMISSION_WRITE_SIGNED_MITM", 229 BluetoothGattCharacteristic.PERMISSION_WRITE_SIGNED_MITM); 230 return builder.build(); 231 } 232 buildBleScanModeEnum()233 private static RpcEnum buildBleScanModeEnum() { 234 RpcEnum.Builder builder = new RpcEnum.Builder(); 235 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 236 return builder.build(); 237 } 238 builder.add("SCAN_MODE_LOW_POWER", ScanSettings.SCAN_MODE_LOW_POWER) 239 .add("SCAN_MODE_BALANCED", ScanSettings.SCAN_MODE_BALANCED) 240 .add("SCAN_MODE_LOW_LATENCY", ScanSettings.SCAN_MODE_LOW_LATENCY); 241 return builder.build(); 242 } 243 buildLocalHotspotFailedReason()244 private static RpcEnum buildLocalHotspotFailedReason() { 245 RpcEnum.Builder builder = new RpcEnum.Builder(); 246 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { 247 return builder.build(); 248 } 249 builder.add("ERROR_TETHERING_DISALLOWED", 250 LocalOnlyHotspotCallback.ERROR_TETHERING_DISALLOWED) 251 .add("ERROR_INCOMPATIBLE_MODE", LocalOnlyHotspotCallback.ERROR_INCOMPATIBLE_MODE) 252 .add("ERROR_NO_CHANNEL", LocalOnlyHotspotCallback.ERROR_NO_CHANNEL) 253 .add("ERROR_GENERIC", LocalOnlyHotspotCallback.ERROR_GENERIC); 254 return builder.build(); 255 } 256 } 257