MtpProperty.cpp revision 2bb8c0e7c4e4093f4161ff5e98cef51c87193859
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), 342bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood mGroupCode(0), 35a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag(kFormNone), 36a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength(0), 37a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues(NULL) 38a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood{ 39a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultValue.str = NULL; 40a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentValue.str = NULL; 41a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mMinimumValue.str = NULL; 42a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mMaximumValue.str = NULL; 43a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 44a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 4521ef7d0e70c5ad599bc2602cb484f8cd647055caMike LockwoodMtpProperty::MtpProperty(MtpPropertyCode propCode, 4621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood MtpDataType type, 4721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood bool writeable, 4821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood int defaultValue) 4921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood : mCode(propCode), 5021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mType(type), 5121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mWriteable(writeable), 5221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayLength(0), 5321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayValues(NULL), 5421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayLength(0), 5521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayValues(NULL), 562bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood mGroupCode(0), 5721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mFormFlag(kFormNone), 5821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumLength(0), 5921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumValues(NULL) 6021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood{ 6121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mDefaultValue, 0, sizeof(mDefaultValue)); 6221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mCurrentValue, 0, sizeof(mCurrentValue)); 6321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMinimumValue, 0, sizeof(mMinimumValue)); 6421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMaximumValue, 0, sizeof(mMaximumValue)); 6521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 6621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (defaultValue) { 6721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (type) { 6821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 6921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i8 = defaultValue; 7021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 7221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u8 = defaultValue; 7321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 7521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i16 = defaultValue; 7621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 7821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u16 = defaultValue; 7921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 8121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i32 = defaultValue; 8221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 8421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u32 = defaultValue; 8521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 8721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.i64 = defaultValue; 8821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 9021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultValue.u64 = defaultValue; 9121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 9221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 935cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood LOGE("unknown type %04X in MtpProperty::MtpProperty", type); 9421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 9721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 98a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::~MtpProperty() { 99a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mType == MTP_TYPE_STR) { 100a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood // free all strings 101a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultValue.str); 102a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentValue.str); 103a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMinimumValue.str); 104a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMaximumValue.str); 105a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mDefaultArrayValues) { 106a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mDefaultArrayLength; i++) 107a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultArrayValues[i].str); 108a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 109a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mCurrentArrayValues) { 110a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mCurrentArrayLength; i++) 111a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentArrayValues[i].str); 112a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 113a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mEnumValues) { 114a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 115a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mEnumValues[i].str); 116a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 117a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 118a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mDefaultArrayValues; 119a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mCurrentArrayValues; 120a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mEnumValues; 121a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 122a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 12321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::read(MtpDataPacket& packet, bool deviceProp) { 124a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 125a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCode = packet.getUInt16(); 126a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType = packet.getUInt16(); 127a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable = (packet.getUInt8() == 1); 128a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 129a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT8: 130a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT8: 131a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT16: 132a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT16: 133a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT32: 134a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT32: 135a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT64: 136a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT64: 137a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT128: 138a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT128: 139a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); 140a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); 141a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 142a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 143a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mDefaultValue); 14421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (deviceProp) 14521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood readValue(packet, mCurrentValue); 146a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 1472bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood mGroupCode = packet.getUInt32(); 148a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag = packet.getUInt8(); 149a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 150a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mFormFlag == kFormRange) { 151a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMinimumValue); 152a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMaximumValue); 153a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mStepSize); 154a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } else if (mFormFlag == kFormEnum) { 155a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength = packet.getUInt16(); 156a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues = new MtpPropertyValue[mEnumLength]; 157a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 158a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mEnumValues[i]); 159a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 160a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 161a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 16221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood// FIXME - only works for object properties 16321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::write(MtpDataPacket& packet) { 16421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mCode); 16521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mType); 16621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(mWriteable ? 1 : 0); 16721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 16821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 16921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT8: 17021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT8: 17121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT16: 17221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT16: 17321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT32: 17421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT32: 17521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT64: 17621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT64: 17721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT128: 17821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT128: 17921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeArrayValues(packet, mDefaultArrayValues, mDefaultArrayLength); 18021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 18121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 18221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mDefaultValue); 18321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 1842bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood packet.putUInt32(mGroupCode); 18521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(mFormFlag); 18621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (mFormFlag == kFormRange) { 18721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMinimumValue); 18821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMaximumValue); 18921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mStepSize); 19021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } else if (mFormFlag == kFormEnum) { 19121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mEnumLength); 19221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < mEnumLength; i++) 19321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mEnumValues[i]); 19421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 19521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 19621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 197a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::print() { 198f43c641bf3f8bcb5748f4ae504d434896edc94f5Mike Lockwood LOGV("MtpProperty %04X\n", mCode); 199f43c641bf3f8bcb5748f4ae504d434896edc94f5Mike Lockwood LOGV(" type %04X\n", mType); 200f43c641bf3f8bcb5748f4ae504d434896edc94f5Mike Lockwood LOGV(" writeable %s\n", (mWriteable ? "true" : "false")); 201a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 202a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 203a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::readValue(MtpDataPacket& packet, MtpPropertyValue& value) { 2045cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 2055cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 206a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 207a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT8: 2085cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 209a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i8 = packet.getInt8(); 210a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 211a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT8: 2125cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 213a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u8 = packet.getUInt8(); 214a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 215a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT16: 2165cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 217a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i16 = packet.getInt16(); 218a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 219a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT16: 2205cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 221a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u16 = packet.getUInt16(); 222a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 223a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT32: 2245cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 225a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i32 = packet.getInt32(); 226a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 227a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT32: 2285cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 229a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u32 = packet.getUInt32(); 230a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 231a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT64: 2325cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 233a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.i64 = packet.getInt64(); 234a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 235a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT64: 2365cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 237a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood value.u64 = packet.getUInt64(); 238a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 239a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT128: 2405cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 241a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood packet.getInt128(value.i128); 242a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 243a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT128: 2445cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 245a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood packet.getUInt128(value.u128); 246a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 2475cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 2485cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.getString(stringBuffer); 2495cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood value.str = strdup(stringBuffer); 2505cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 251a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 2525cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood LOGE("unknown type %04X in MtpProperty::readValue", mType); 253a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 254a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 255a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 25621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeValue(MtpDataPacket& packet, MtpPropertyValue& value) { 2575cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 2585cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 25921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 26021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 2615cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 26221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt8(value.i8); 26321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 26421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 2655cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 26621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(value.u8); 26721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 26821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 2695cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 27021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt16(value.i16); 27121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 27221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 2735cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 27421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(value.u16); 27521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 27621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 2775cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 27821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt32(value.i32); 27921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 28021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 2815cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 28221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt32(value.u32); 28321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 28421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 2855cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 28621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt64(value.i64); 28721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 28821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 2895cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 29021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt64(value.u64); 29121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 29221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT128: 2935cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 29421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putInt128(value.i128); 29521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 29621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT128: 2975cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 29821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt128(value.u128); 29921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 3005cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 3015cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood if (value.str) 3025cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putString(value.str); 3035cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood else 3045cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putEmptyString(); 3055cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 30621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 3075cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood LOGE("unknown type %04X in MtpProperty::writeValue", mType); 30821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 30921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 31021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 311a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpPropertyValue* MtpProperty::readArrayValues(MtpDataPacket& packet, int& length) { 312a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood length = packet.getUInt32(); 313a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (length == 0) 314a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return NULL; 315a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood MtpPropertyValue* result = new MtpPropertyValue[length]; 316a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < length; i++) 317a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, result[i]); 318a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return result; 319a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 320a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 32121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeArrayValues(MtpDataPacket& packet, MtpPropertyValue* values, int length) { 32221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt32(length); 32321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < length; i++) 32421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, values[i]); 32521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 32621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 327a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} // namespace android 328