MtpProperty.cpp revision 5cdceca217319bf6a22caf1acadc38c8dc259316
1a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood/* 2a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * Copyright (C) 2010 The Android Open Source Project 3a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * 4a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 5a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * you may not use this file except in compliance with the License. 6a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * You may obtain a copy of the License at 7a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * 8a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * 10a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * Unless required by applicable law or agreed to in writing, software 11a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 12a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * See the License for the specific language governing permissions and 14a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood * limitations under the License. 15a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood */ 16a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 17a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#define LOG_TAG "MtpProperty" 18a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 19a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpDataPacket.h" 20a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpProperty.h" 21a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpStringBuffer.h" 22a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpUtils.h" 23a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 24a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodnamespace android { 25a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 26a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::MtpProperty() 27a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood : mCode(0), 28a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType(0), 29a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable(false), 30a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayLength(0), 31a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues(NULL), 32a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayLength(0), 33a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayValues(NULL), 34a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag(kFormNone), 35a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength(0), 36a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues(NULL) 37a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood{ 38a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultValue.str = NULL; 39a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentValue.str = NULL; 40a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mMinimumValue.str = NULL; 41a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mMaximumValue.str = NULL; 42a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 43a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 4421ef7d0e70c5ad599bc2602cb484f8cd647055caMike LockwoodMtpProperty::MtpProperty(MtpPropertyCode propCode, 4521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood MtpDataType type, 4621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood bool writeable, 4721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood int defaultValue) 4821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood : mCode(propCode), 4921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mType(type), 5021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mWriteable(writeable), 5121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayLength(0), 5221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayValues(NULL), 5321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayLength(0), 5421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayValues(NULL), 5521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mFormFlag(kFormNone), 5621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumLength(0), 5721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumValues(NULL) 5821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood{ 5921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mDefaultValue, 0, sizeof(mDefaultValue)); 6021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mCurrentValue, 0, sizeof(mCurrentValue)); 6121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMinimumValue, 0, sizeof(mMinimumValue)); 6221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMaximumValue, 0, sizeof(mMaximumValue)); 6321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 6421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (defaultValue) { 6521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (type) { 6621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 6721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i8 = defaultValue; 6821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 6921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 7021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u8 = defaultValue; 7121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 7321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i16 = defaultValue; 7421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 7621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u16 = defaultValue; 7721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 7921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i32 = defaultValue; 8021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 8221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u32 = defaultValue; 8321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 8521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i64 = defaultValue; 8621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 8821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u64 = defaultValue; 8921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 9021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 915cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood LOGE("unknown type %04X in MtpProperty::MtpProperty", type); 9221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 9521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 96a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::~MtpProperty() { 97a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mType == MTP_TYPE_STR) { 98a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood // free all strings 99a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultValue.str); 100a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentValue.str); 101a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMinimumValue.str); 102a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMaximumValue.str); 103a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mDefaultArrayValues) { 104a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mDefaultArrayLength; i++) 105a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultArrayValues[i].str); 106a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 107a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mCurrentArrayValues) { 108a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mCurrentArrayLength; i++) 109a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentArrayValues[i].str); 110a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 111a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mEnumValues) { 112a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 113a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mEnumValues[i].str); 114a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 115a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 116a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mDefaultArrayValues; 117a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mCurrentArrayValues; 118a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mEnumValues; 119a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 120a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 12121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::read(MtpDataPacket& packet, bool deviceProp) { 122a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 123a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCode = packet.getUInt16(); 124a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType = packet.getUInt16(); 125a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable = (packet.getUInt8() == 1); 126a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 127a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT8: 128a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT8: 129a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT16: 130a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT16: 131a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT32: 132a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT32: 133a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT64: 134a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT64: 135a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT128: 136a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT128: 137a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); 138a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); 139a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 140a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 141a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mDefaultValue); 14221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (deviceProp) 14321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood readValue(packet, mCurrentValue); 144a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 145a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag = packet.getUInt8(); 146a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 147a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mFormFlag == kFormRange) { 148a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMinimumValue); 149a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMaximumValue); 150a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mStepSize); 151a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } else if (mFormFlag == kFormEnum) { 152a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength = packet.getUInt16(); 153a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues = new MtpPropertyValue[mEnumLength]; 154a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 155a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mEnumValues[i]); 156a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 157a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 158a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 15921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood// FIXME - only works for object properties 16021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::write(MtpDataPacket& packet) { 16121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mCode); 16221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mType); 16321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(mWriteable ? 1 : 0); 16421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 16521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 16621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT8: 16721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT8: 16821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT16: 16921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT16: 17021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT32: 17121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT32: 17221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT64: 17321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT64: 17421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT128: 17521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT128: 17621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeArrayValues(packet, mDefaultArrayValues, mDefaultArrayLength); 17721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 17821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 17921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mDefaultValue); 18021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 18121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(mFormFlag); 18221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (mFormFlag == kFormRange) { 18321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMinimumValue); 18421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMaximumValue); 18521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mStepSize); 18621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } else if (mFormFlag == kFormEnum) { 18721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mEnumLength); 18821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < mEnumLength; i++) 18921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mEnumValues[i]); 19021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 19121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 19221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 193a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::print() { 194a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood LOGD("MtpProperty %04X\n", mCode); 195a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood LOGD(" type %04X\n", mType); 196a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood LOGD(" writeable %s\n", (mWriteable ? "true" : "false")); 197a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 198a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 199a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::readValue(MtpDataPacket& packet, MtpPropertyValue& value) { 2005cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 2015cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 202a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 203a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT8: 2045cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 205a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i8 = packet.getInt8(); 206a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 207a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT8: 2085cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 209a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u8 = packet.getUInt8(); 210a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 211a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT16: 2125cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 213a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i16 = packet.getInt16(); 214a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 215a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT16: 2165cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 217a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u16 = packet.getUInt16(); 218a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 219a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT32: 2205cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 221a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i32 = packet.getInt32(); 222a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 223a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT32: 2245cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 225a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u32 = packet.getUInt32(); 226a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 227a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT64: 2285cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 229a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i64 = packet.getInt64(); 230a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 231a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT64: 2325cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 233a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u64 = packet.getUInt64(); 234a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 235a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT128: 2365cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 237a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood packet.getInt128(value.i128); 238a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 239a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT128: 2405cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 241a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood packet.getUInt128(value.u128); 242a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 2435cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 2445cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.getString(stringBuffer); 2455cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood value.str = strdup(stringBuffer); 2465cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 247a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 2485cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood LOGE("unknown type %04X in MtpProperty::readValue", mType); 249a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 250a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 251a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 25221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeValue(MtpDataPacket& packet, MtpPropertyValue& value) { 2535cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 2545cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 25521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 25621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 2575cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 25821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt8(value.i8); 25921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 26021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 2615cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 26221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(value.u8); 26321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 26421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 2655cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 26621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt16(value.i16); 26721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 26821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 2695cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 27021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(value.u16); 27121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 27221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 2735cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 27421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt32(value.i32); 27521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 27621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 2775cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 27821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt32(value.u32); 27921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 28021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 2815cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 28221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt64(value.i64); 28321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 28421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 2855cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 28621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt64(value.u64); 28721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 28821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT128: 2895cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 29021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt128(value.i128); 29121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 29221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT128: 2935cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 29421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt128(value.u128); 29521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 2965cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 2975cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood if (value.str) 2985cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putString(value.str); 2995cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood else 3005cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putEmptyString(); 3015cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 30221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 3035cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood LOGE("unknown type %04X in MtpProperty::writeValue", mType); 30421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 30521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 30621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 307a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpPropertyValue* MtpProperty::readArrayValues(MtpDataPacket& packet, int& length) { 308a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood length = packet.getUInt32(); 309a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (length == 0) 310a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return NULL; 311a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood MtpPropertyValue* result = new MtpPropertyValue[length]; 312a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < length; i++) 313a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, result[i]); 314a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return result; 315a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 316a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 31721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeArrayValues(MtpDataPacket& packet, MtpPropertyValue* values, int length) { 31821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt32(length); 31921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < length; i++) 32021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, values[i]); 32121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 32221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 323a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} // namespace android 324