1 /* 2 * Copyright 2021 HIMSA II K/S - www.himsa.com. 3 * Represented by EHIMA - www.ehima.com 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package com.android.bluetooth.csip; 19 20 import android.bluetooth.BluetoothDevice; 21 22 import java.util.UUID; 23 24 /** 25 * CSIP Set Coordinator role stack event 26 */ 27 public class CsipSetCoordinatorStackEvent { 28 // Event types for STACK_EVENT message (coming from native) 29 private static final int EVENT_TYPE_NONE = 0; 30 public static final int EVENT_TYPE_CONNECTION_STATE_CHANGED = 1; 31 public static final int EVENT_TYPE_DEVICE_AVAILABLE = 2; 32 public static final int EVENT_TYPE_SET_MEMBER_AVAILABLE = 3; 33 public static final int EVENT_TYPE_GROUP_LOCK_CHANGED = 4; 34 35 // Do not modify without updating the HAL bt_csis.h files. 36 // Match up with enum class ConnectionState of bt_csis.h. 37 static final int CONNECTION_STATE_DISCONNECTED = 0; 38 static final int CONNECTION_STATE_CONNECTING = 1; 39 static final int CONNECTION_STATE_CONNECTED = 2; 40 static final int CONNECTION_STATE_DISCONNECTING = 3; 41 42 static final int LOCK_STATUS_SUCCESS = 0; 43 static final int LOCK_STATUS_FAILED_INVALID_GROUP = 1; 44 static final int LOCK_STATUS_FAILED_GROUP_EMPTY = 2; 45 static final int LOCK_STATUS_FAILED_GROUP_NOT_CONNECTED = 3; 46 static final int LOCK_STATUS_FAILED_GROUP_LOCKED_BY_OTHERS = 5; 47 static final int LOCK_STATUS_FAILED_OTHER_REASON = 6; 48 static final int LOCK_STATUS_GROUP_MEMBER_LOST = 7; 49 50 public int type = EVENT_TYPE_NONE; 51 public BluetoothDevice device; 52 public int valueInt1 = 0; 53 public int valueInt2 = 0; 54 public int valueInt3 = 0; 55 public UUID valueUuid1; 56 57 public boolean valueBool1 = false; 58 CsipSetCoordinatorStackEvent(int type)59 CsipSetCoordinatorStackEvent(int type) { 60 this.type = type; 61 } 62 63 @Override toString()64 public String toString() { 65 // event dump 66 StringBuilder result = new StringBuilder(); 67 result.append("CsipSetCoordinatorStackEvent {type:" + eventTypeToString(type)); 68 result.append(", device:" + device); 69 result.append(", " + eventTypeValueInt1ToString(type, valueInt1)); 70 result.append(", " + eventTypeValueInt2ToString(type, valueInt2)); 71 result.append(", " + eventTypeValueInt3ToString(type, valueInt3)); 72 result.append(", " + eventTypeValueBool1ToString(type, valueBool1)); 73 result.append(", " + eventTypeValueUuid1ToString(type, valueUuid1)); 74 result.append("}"); 75 return result.toString(); 76 } 77 eventTypeToString(int type)78 private static String eventTypeToString(int type) { 79 switch (type) { 80 case EVENT_TYPE_NONE: 81 return "EVENT_TYPE_NONE"; 82 case EVENT_TYPE_CONNECTION_STATE_CHANGED: 83 return "EVENT_TYPE_CONNECTION_STATE_CHANGED"; 84 case EVENT_TYPE_DEVICE_AVAILABLE: 85 return "EVENT_TYPE_DEVICE_AVAILABLE"; 86 case EVENT_TYPE_SET_MEMBER_AVAILABLE: 87 return "EVENT_TYPE_SET_MEMBER_AVAILABLE"; 88 case EVENT_TYPE_GROUP_LOCK_CHANGED: 89 return "EVENT_TYPE_GROUP_LOCK_CHANGED"; 90 default: 91 return "EVENT_TYPE_UNKNOWN:" + type; 92 } 93 } 94 connectionStateToString(int value)95 private static String connectionStateToString(int value) { 96 switch (value) { 97 case CONNECTION_STATE_DISCONNECTED: 98 return "CONNECTION_STATE_DISCONNECTED"; 99 case CONNECTION_STATE_CONNECTING: 100 return "CONNECTION_STATE_CONNECTING"; 101 case CONNECTION_STATE_CONNECTED: 102 return "CONNECTION_STATE_CONNECTED"; 103 case CONNECTION_STATE_DISCONNECTING: 104 return "CONNECTION_STATE_DISCONNECTING"; 105 default: 106 return "STATE_UNKNOWN"; 107 } 108 } 109 eventTypeValueBool1ToString(int evType, boolean value)110 private static String eventTypeValueBool1ToString(int evType, boolean value) { 111 switch (evType) { 112 case EVENT_TYPE_GROUP_LOCK_CHANGED: 113 return "locked: " + Boolean.toString(value); 114 default: 115 return "<unused>"; 116 } 117 } 118 eventTypeValueUuid1ToString(int evType, UUID value)119 private static String eventTypeValueUuid1ToString(int evType, UUID value) { 120 switch (evType) { 121 case EVENT_TYPE_DEVICE_AVAILABLE: 122 return "csis uuid: " + value; 123 default: 124 return "<unused>"; 125 } 126 } 127 eventTypeValueInt1ToString(int evType, int value)128 private static String eventTypeValueInt1ToString(int evType, int value) { 129 switch (evType) { 130 case EVENT_TYPE_CONNECTION_STATE_CHANGED: 131 return connectionStateToString(value); 132 case EVENT_TYPE_DEVICE_AVAILABLE: 133 case EVENT_TYPE_GROUP_LOCK_CHANGED: 134 case EVENT_TYPE_SET_MEMBER_AVAILABLE: 135 return "group id: " + value; 136 default: 137 return "<unused>"; 138 } 139 } 140 eventTypeValueInt2ToString(int evType, int value)141 private static String eventTypeValueInt2ToString(int evType, int value) { 142 switch (evType) { 143 case EVENT_TYPE_DEVICE_AVAILABLE: 144 return "group size: " + value; 145 case EVENT_TYPE_GROUP_LOCK_CHANGED: 146 return "status:" + csipLockStatusToString(value); 147 default: 148 return "<unused>"; 149 } 150 } 151 eventTypeValueInt3ToString(int evType, int value)152 private static String eventTypeValueInt3ToString(int evType, int value) { 153 switch (evType) { 154 case EVENT_TYPE_DEVICE_AVAILABLE: 155 return "rank: " + value; 156 default: 157 return "<unused>"; 158 } 159 } 160 csipLockStatusToString(int state)161 private static String csipLockStatusToString(int state) { 162 switch (state) { 163 case LOCK_STATUS_SUCCESS: 164 return "LOCK_STATUS_SUCCESS"; 165 case LOCK_STATUS_FAILED_INVALID_GROUP: 166 return "LOCK_STATUS_FAILED_INVALID_GROUP"; 167 case LOCK_STATUS_FAILED_GROUP_EMPTY: 168 return "LOCK_STATUS_FAILED_GROUP_EMPTY"; 169 case LOCK_STATUS_FAILED_GROUP_NOT_CONNECTED: 170 return "LOCK_STATUS_FAILED_GROUP_NOT_CONNECTED"; 171 case LOCK_STATUS_FAILED_GROUP_LOCKED_BY_OTHERS: 172 return "LOCK_STATUS_FAILED_GROUP_LOCKED_BY_OTHERS"; 173 case LOCK_STATUS_FAILED_OTHER_REASON: 174 return "LOCK_STATUS_FAILED_OTHER_REASON"; 175 case LOCK_STATUS_GROUP_MEMBER_LOST: 176 return "LOCK_STATUS_GROUP_MEMBER_LOST"; 177 default: 178 return "UNKNOWN"; 179 } 180 } 181 } 182