1 /* 2 * Copyright (C) 2015 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 17 package android.mtp; 18 19 /** 20 * This class encapsulates information about a MTP event. 21 * This corresponds to the events described in appendix G of the MTP specification. 22 */ 23 public class MtpEvent { 24 /** Event code for UNDEFINED event */ 25 public static final int EVENT_UNDEFINED = 0x4000; 26 /** Event code for CANCEL_TRANSACTION event */ 27 public static final int EVENT_CANCEL_TRANSACTION = 0x4001; 28 /** Event code for OBJECT_ADDED event */ 29 public static final int EVENT_OBJECT_ADDED = 0x4002; 30 /** Event code for OBJECT_REMOVED event */ 31 public static final int EVENT_OBJECT_REMOVED = 0x4003; 32 /** Event code for STORE_ADDED event */ 33 public static final int EVENT_STORE_ADDED = 0x4004; 34 /** Event code for STORE_REMOVED event */ 35 public static final int EVENT_STORE_REMOVED = 0x4005; 36 /** Event code for DEVICE_PROP_CHANGED event */ 37 public static final int EVENT_DEVICE_PROP_CHANGED = 0x4006; 38 /** Event code for OBJECT_INFO_CHANGED event */ 39 public static final int EVENT_OBJECT_INFO_CHANGED = 0x4007; 40 /** Event code for DEVICE_INFO_CHANGED event */ 41 public static final int EVENT_DEVICE_INFO_CHANGED = 0x4008; 42 /** Event code for REQUEST_OBJECT_TRANSFER event */ 43 public static final int EVENT_REQUEST_OBJECT_TRANSFER = 0x4009; 44 /** Event code for STORE_FULL event */ 45 public static final int EVENT_STORE_FULL = 0x400A; 46 /** Event code for DEVICE_RESET event */ 47 public static final int EVENT_DEVICE_RESET = 0x400B; 48 /** Event code for STORAGE_INFO_CHANGED event */ 49 public static final int EVENT_STORAGE_INFO_CHANGED = 0x400C; 50 /** Event code for CAPTURE_COMPLETE event */ 51 public static final int EVENT_CAPTURE_COMPLETE = 0x400D; 52 /** Event code for UNREPORTED_STATUS event */ 53 public static final int EVENT_UNREPORTED_STATUS = 0x400E; 54 /** Event code for OBJECT_PROP_CHANGED event */ 55 public static final int EVENT_OBJECT_PROP_CHANGED = 0xC801; 56 /** Event code for OBJECT_PROP_DESC_CHANGED event */ 57 public static final int EVENT_OBJECT_PROP_DESC_CHANGED = 0xC802; 58 /** Event code for OBJECT_REFERENCES_CHANGED event */ 59 public static final int EVENT_OBJECT_REFERENCES_CHANGED = 0xC803; 60 61 private int mEventCode = EVENT_UNDEFINED; 62 63 // Parameters for event. The interpretation of event parameters depends upon mEventCode. 64 private int mParameter1; 65 private int mParameter2; 66 private int mParameter3; 67 68 /** 69 * MtpEvent is instantiated by JNI. 70 */ MtpEvent()71 private MtpEvent() {} 72 73 /** 74 * Returns event code of MTP event. 75 * See the USB-IF MTP specification for the details of event constants. 76 * @return event code 77 */ getEventCode()78 public int getEventCode() { return mEventCode; } 79 80 /** 81 * Obtains the first event parameter. 82 */ getParameter1()83 public int getParameter1() { return mParameter1; } 84 85 /** 86 * Obtains the second event parameter. 87 */ getParameter2()88 public int getParameter2() { return mParameter2; } 89 90 /** 91 * Obtains the third event parameter. 92 */ getParameter3()93 public int getParameter3() { return mParameter3; } 94 95 /** 96 * Obtains objectHandle event parameter. 97 * 98 * @see #EVENT_OBJECT_ADDED 99 * @see #EVENT_OBJECT_REMOVED 100 * @see #EVENT_OBJECT_INFO_CHANGED 101 * @see #EVENT_REQUEST_OBJECT_TRANSFER 102 * @see #EVENT_OBJECT_PROP_CHANGED 103 * @see #EVENT_OBJECT_REFERENCES_CHANGED 104 */ getObjectHandle()105 public int getObjectHandle() { 106 switch (mEventCode) { 107 case EVENT_OBJECT_ADDED: 108 return mParameter1; 109 case EVENT_OBJECT_REMOVED: 110 return mParameter1; 111 case EVENT_OBJECT_INFO_CHANGED: 112 return mParameter1; 113 case EVENT_REQUEST_OBJECT_TRANSFER: 114 return mParameter1; 115 case EVENT_OBJECT_PROP_CHANGED: 116 return mParameter1; 117 case EVENT_OBJECT_REFERENCES_CHANGED: 118 return mParameter1; 119 default: 120 throw new IllegalParameterAccess("objectHandle", mEventCode); 121 } 122 } 123 124 /** 125 * Obtains storageID event parameter. 126 * 127 * @see #EVENT_STORE_ADDED 128 * @see #EVENT_STORE_REMOVED 129 * @see #EVENT_STORE_FULL 130 * @see #EVENT_STORAGE_INFO_CHANGED 131 */ getStorageId()132 public int getStorageId() { 133 switch (mEventCode) { 134 case EVENT_STORE_ADDED: 135 return mParameter1; 136 case EVENT_STORE_REMOVED: 137 return mParameter1; 138 case EVENT_STORE_FULL: 139 return mParameter1; 140 case EVENT_STORAGE_INFO_CHANGED: 141 return mParameter1; 142 default: 143 throw new IllegalParameterAccess("storageID", mEventCode); 144 } 145 } 146 147 /** 148 * Obtains devicePropCode event parameter. 149 * 150 * @see #EVENT_DEVICE_PROP_CHANGED 151 */ getDevicePropCode()152 public int getDevicePropCode() { 153 switch (mEventCode) { 154 case EVENT_DEVICE_PROP_CHANGED: 155 return mParameter1; 156 default: 157 throw new IllegalParameterAccess("devicePropCode", mEventCode); 158 } 159 } 160 161 /** 162 * Obtains transactionID event parameter. 163 * 164 * @see #EVENT_CAPTURE_COMPLETE 165 */ getTransactionId()166 public int getTransactionId() { 167 switch (mEventCode) { 168 case EVENT_CAPTURE_COMPLETE: 169 return mParameter1; 170 default: 171 throw new IllegalParameterAccess("transactionID", mEventCode); 172 } 173 } 174 175 /** 176 * Obtains objectPropCode event parameter. 177 * 178 * @see #EVENT_OBJECT_PROP_CHANGED 179 * @see #EVENT_OBJECT_PROP_DESC_CHANGED 180 */ getObjectPropCode()181 public int getObjectPropCode() { 182 switch (mEventCode) { 183 case EVENT_OBJECT_PROP_CHANGED: 184 return mParameter2; 185 case EVENT_OBJECT_PROP_DESC_CHANGED: 186 return mParameter1; 187 default: 188 throw new IllegalParameterAccess("objectPropCode", mEventCode); 189 } 190 } 191 192 /** 193 * Obtains objectFormatCode event parameter. 194 * 195 * @see #EVENT_OBJECT_PROP_DESC_CHANGED 196 */ getObjectFormatCode()197 public int getObjectFormatCode() { 198 switch (mEventCode) { 199 case EVENT_OBJECT_PROP_DESC_CHANGED: 200 return mParameter2; 201 default: 202 throw new IllegalParameterAccess("objectFormatCode", mEventCode); 203 } 204 } 205 206 private static class IllegalParameterAccess extends UnsupportedOperationException { IllegalParameterAccess(String propertyName, int eventCode)207 public IllegalParameterAccess(String propertyName, int eventCode) { 208 super("Cannot obtain " + propertyName + " for the event: " + eventCode + "."); 209 } 210 } 211 } 212