1a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville/* 2a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Copyright (C) 2014 The Android Open Source Project 3a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 4a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 5a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * you may not use this file except in compliance with the License. 6a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * You may obtain a copy of the License at 7a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 8a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * http://www.apache.org/licenses/LICENSE-2.0 9a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 10a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * Unless required by applicable law or agreed to in writing, software 11a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * distributed under the License is distributed on an "AS IS" BASIS, 12a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * See the License for the specific language governing permissions and 14a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * limitations under the License. 15a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 16a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 17a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savillepackage com.android.internal.telephony; 18a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 19a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.Rlog; 20a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport java.util.BitSet; 21a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savilleimport android.telephony.ServiceState; 22a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 23a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville/** 24a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * {@hide} 25a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 26a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * hardware configuration information reported by the ril layer and for 27a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * use by the telephone framework. 28a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 29a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * the hardware configuration is managed by the TelephonyDevController 30a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * (aka: the 'TDC'). 31a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 32a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * the hardware resources are: 33a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * - modem: physical entity providing acces technology. 34a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * - sim: physicaly entity providing a slot interface. 35a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 36a8467dd0c524787104b1ccdddc5e8af10ba729edWink Savillepublic class HardwareConfig { 37a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville static final String LOG_TAG = "HardwareConfig"; 38a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 39a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 40a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * hardware configuration kind. 41a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 42a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_HARDWARE_TYPE_MODEM = 0; 43a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_HARDWARE_TYPE_SIM = 1; 44a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 45a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * ril attachment model. if single, there is a one-to-one 46a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * relationship between a modem hardware and a ril daemon. 47a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * if multiple, there is a one-to-many relatioship between a 48a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * modem hardware and several ril simultaneous ril daemons. 49a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 50a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_MODEM_RIL_MODEL_SINGLE = 0; 51a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_MODEM_RIL_MODEL_MULTIPLE = 1; 52a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 53a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * hardware state of the resource. 54a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 55a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * enabled: the resource can be used by the msim-framework, 56a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * call activity can be handled on it. 57a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * standby: the resource can be used by the msim-framework but 58a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * only for non call related activity. as example: 59a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * reading the address book from a sim device. attempt 60a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * to use this resource for call activity leads to 61a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * undetermined results. 62a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * disabled: the resource cannot be used and attempt to use 63a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * it leads to undetermined results. 64a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 65a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * by default, all resources are 'enabled', what causes a resource 66a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * to be marked otherwise is a property of the underlying hardware 67a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * knowledge and implementation and it is out of scope of the TDC. 68a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 69a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_HARDWARE_STATE_ENABLED = 0; 70a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_HARDWARE_STATE_STANDBY = 1; 71a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public static final int DEV_HARDWARE_STATE_DISABLED = 2; 72a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 73a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 74a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * common hardware configuration. 75a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 76a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * type - see DEV_HARDWARE_TYPE_ 77a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * uuid - unique identifier for this hardware. 78a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * state - see DEV_HARDWARE_STATE_ 79a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 80a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int type; 81a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public String uuid; 82a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int state; 83a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 84a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * following is some specific hardware configuration based on the hardware type. 85a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 86a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 87a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * DEV_HARDWARE_TYPE_MODEM. 88a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 89a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * rilModel - see DEV_MODEM_RIL_MODEL_ 90a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * rat - BitSet value, based on android.telephony.ServiceState 91a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * maxActiveVoiceCall - maximum number of concurent active voice calls. 92a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * maxActiveDataCall - maximum number of concurent active data calls. 93a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * maxStandby - maximum number of concurent standby connections. 94a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 95a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * note: the maxStandby is not necessarily an equal sum of the maxActiveVoiceCall 96a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * and maxActiveDataCall (nor a derivative of it) since it really depends on the 97a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * modem capability, hence it is left for the hardware to define. 98a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 99a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int rilModel; 100a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public BitSet rat; 101a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int maxActiveVoiceCall; 102a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int maxActiveDataCall; 103a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int maxStandby; 104a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 105a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * DEV_HARDWARE_TYPE_SIM. 106a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * 107a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * modemUuid - unique association to a modem for a sim. 108a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 109a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public String modemUuid; 110a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 111a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 112a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * default constructor. 113a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 114a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public HardwareConfig(int type) { 115ac2672b837715cdcbe10edcd72379a77d7557e92Ian Rogers this.type = type; 116a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 117a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 118a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville /** 119a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville * create from a resource string format. 120a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville */ 121a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public HardwareConfig(String res) { 122a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String split[] = res.split(","); 123a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 124a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville type = Integer.parseInt(split[0]); 125a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 126a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville switch (type) { 127a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville case DEV_HARDWARE_TYPE_MODEM: { 128a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville assignModem( 129a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville split[1].trim(), /* uuid */ 130a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[2]), /* state */ 131a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[3]), /* ril-model */ 132a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[4]), /* rat */ 133a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[5]), /* max-voice */ 134a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[6]), /* max-data */ 135a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[7]) /* max-standby */ 136a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville ); 137a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville break; 138a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 139a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville case DEV_HARDWARE_TYPE_SIM: { 140a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville assignSim( 141a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville split[1].trim(), /* uuid */ 142a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville Integer.parseInt(split[2]), /* state */ 143a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville split[3].trim() /* modem-uuid */ 144a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville ); 145a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville break; 146a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 147a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 148a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 149a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 150a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void assignModem(String id, int state, int model, int ratBits, 151a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville int maxV, int maxD, int maxS) { 152a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (type == DEV_HARDWARE_TYPE_MODEM) { 153a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville char[] bits = Integer.toBinaryString(ratBits).toCharArray(); 154a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville uuid = id; 155ac2672b837715cdcbe10edcd72379a77d7557e92Ian Rogers this.state = state; 156a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville rilModel = model; 157a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville rat = new BitSet(bits.length); 158a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville for (int i = 0 ; i < bits.length ; i++) { 159a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville rat.set(i, (bits[i] == '1' ? true : false)); 160a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 161a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville maxActiveVoiceCall = maxV; 162a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville maxActiveDataCall = maxD; 163a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville maxStandby = maxS; 164a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 165a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 166a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 167a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public void assignSim(String id, int state, String link) { 168a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (type == DEV_HARDWARE_TYPE_SIM) { 169a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville uuid = id; 170a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville modemUuid = link; 171ac2672b837715cdcbe10edcd72379a77d7557e92Ian Rogers this.state = state; 172a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 173a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 174a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 175a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public String toString() { 176a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville StringBuilder builder = new StringBuilder(); 177a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville if (type == DEV_HARDWARE_TYPE_MODEM) { 178a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append("Modem "); 179a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append("{ uuid=" + uuid); 180a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", state=" + state); 181a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", rilModel=" + rilModel); 182a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", rat=" + rat.toString()); 183a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", maxActiveVoiceCall=" + maxActiveVoiceCall); 184a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", maxActiveDataCall=" + maxActiveDataCall); 185a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", maxStandby=" + maxStandby); 186a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(" }"); 187a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else if (type == DEV_HARDWARE_TYPE_SIM) { 188a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append("Sim "); 189a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append("{ uuid=" + uuid); 190a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", modemUuid=" + modemUuid); 191a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(", state=" + state); 192a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append(" }"); 193a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } else { 194a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville builder.append("Invalid Configration"); 195a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 196a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return builder.toString(); 197a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 198a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 199a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville public int compareTo(HardwareConfig hw) { 200a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String one = this.toString(); 201a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville String two = hw.toString(); 202a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville 203a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville return (one.compareTo(two)); 204a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville } 205a8467dd0c524787104b1ccdddc5e8af10ba729edWink Saville} 206