MtpProperty.cpp revision 377b2ec9a2885f9b6405b07ba900a9e3f4349c38
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 19377b2ec9a2885f9b6405b07ba900a9e3f4349c38Kévin PETIT#include <inttypes.h> 20a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpDataPacket.h" 210c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood#include "MtpDebug.h" 22a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpProperty.h" 23a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpStringBuffer.h" 24a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpUtils.h" 25a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 26a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodnamespace android { 27a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 28a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::MtpProperty() 29a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood : mCode(0), 30a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType(0), 31a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable(false), 32a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayLength(0), 33a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues(NULL), 34a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayLength(0), 35a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayValues(NULL), 362bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood mGroupCode(0), 37a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag(kFormNone), 38a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength(0), 39a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues(NULL) 40a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood{ 41dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mDefaultValue, 0, sizeof(mDefaultValue)); 42dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mCurrentValue, 0, sizeof(mCurrentValue)); 43dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mMinimumValue, 0, sizeof(mMinimumValue)); 44dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mMaximumValue, 0, sizeof(mMaximumValue)); 45a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 46a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 4721ef7d0e70c5ad599bc2602cb484f8cd647055caMike LockwoodMtpProperty::MtpProperty(MtpPropertyCode propCode, 4821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood MtpDataType type, 4921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood bool writeable, 5021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood int defaultValue) 5121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood : mCode(propCode), 5221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mType(type), 5321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mWriteable(writeable), 5421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayLength(0), 5521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayValues(NULL), 5621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayLength(0), 5721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayValues(NULL), 5840ce1f262cc4edbc8b7c470830325466263acaecMike Lockwood mGroupCode(0), 5921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mFormFlag(kFormNone), 6021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumLength(0), 6121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumValues(NULL) 6221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood{ 6321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mDefaultValue, 0, sizeof(mDefaultValue)); 6421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mCurrentValue, 0, sizeof(mCurrentValue)); 6521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMinimumValue, 0, sizeof(mMinimumValue)); 6621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMaximumValue, 0, sizeof(mMaximumValue)); 6721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 6821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (defaultValue) { 6921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (type) { 7021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 71dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i8 = defaultValue; 7221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 74dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u8 = defaultValue; 7521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 77dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i16 = defaultValue; 7821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 80dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u16 = defaultValue; 8121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 83dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i32 = defaultValue; 8421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 86dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u32 = defaultValue; 8721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 89dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i64 = defaultValue; 9021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 9121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 92dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u64 = defaultValue; 9321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 9421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 9529357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unknown type %04X in MtpProperty::MtpProperty", type); 9621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 9921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 100a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::~MtpProperty() { 101a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mType == MTP_TYPE_STR) { 102a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood // free all strings 103a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultValue.str); 104a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentValue.str); 105a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMinimumValue.str); 106a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMaximumValue.str); 107a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mDefaultArrayValues) { 108a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mDefaultArrayLength; i++) 109a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultArrayValues[i].str); 110a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 111a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mCurrentArrayValues) { 112a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mCurrentArrayLength; i++) 113a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentArrayValues[i].str); 114a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 115a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mEnumValues) { 116a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 117a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mEnumValues[i].str); 118a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 119a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 120a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mDefaultArrayValues; 121a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mCurrentArrayValues; 122a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mEnumValues; 123a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 124a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 125e3e76c456baee122de6715ae280130abaddc906cMike Lockwoodvoid MtpProperty::read(MtpDataPacket& packet) { 126a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCode = packet.getUInt16(); 1275da864845e024833c4c7f641acd7c88187a6bc1eMike Lockwood bool deviceProp = isDeviceProperty(); 128a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType = packet.getUInt16(); 129a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable = (packet.getUInt8() == 1); 130a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 131a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT8: 132a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT8: 133a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT16: 134a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT16: 135a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT32: 136a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT32: 137a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT64: 138a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT64: 139a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT128: 140a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT128: 141a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); 1427cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 1437cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); 144a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 145a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 146a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mDefaultValue); 1477cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 14821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood readValue(packet, mCurrentValue); 149a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 1507cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (!deviceProp) 1517cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood mGroupCode = packet.getUInt32(); 152a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag = packet.getUInt8(); 153a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 154a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mFormFlag == kFormRange) { 155a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMinimumValue); 156a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMaximumValue); 157a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mStepSize); 158a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } else if (mFormFlag == kFormEnum) { 159a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength = packet.getUInt16(); 160a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues = new MtpPropertyValue[mEnumLength]; 161a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 162a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mEnumValues[i]); 163a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 164a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 165a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 16621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::write(MtpDataPacket& packet) { 1677cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood bool deviceProp = isDeviceProperty(); 1687cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood 16921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mCode); 17021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mType); 17121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(mWriteable ? 1 : 0); 17221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 17321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 17421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT8: 17521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT8: 17621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT16: 17721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT16: 17821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT32: 17921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT32: 18021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT64: 18121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT64: 18221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT128: 18321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT128: 18421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeArrayValues(packet, mDefaultArrayValues, mDefaultArrayLength); 1857cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 1867cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood writeArrayValues(packet, mCurrentArrayValues, mCurrentArrayLength); 18721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 18821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 18921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mDefaultValue); 1907cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 1917cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood writeValue(packet, mCurrentValue); 19221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 1932bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood packet.putUInt32(mGroupCode); 1947cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (!deviceProp) 1957cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood packet.putUInt8(mFormFlag); 19621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (mFormFlag == kFormRange) { 19721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMinimumValue); 19821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMaximumValue); 19921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mStepSize); 20021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } else if (mFormFlag == kFormEnum) { 20121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mEnumLength); 20221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < mEnumLength; i++) 20321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mEnumValues[i]); 20421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 20521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 20621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 207dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwoodvoid MtpProperty::setDefaultValue(const uint16_t* string) { 208dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood free(mDefaultValue.str); 209dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood if (string) { 210dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood MtpStringBuffer buffer(string); 211dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.str = strdup(buffer); 212dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood } 213dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood else 214dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.str = NULL; 215dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood} 216dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood 217dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwoodvoid MtpProperty::setCurrentValue(const uint16_t* string) { 218dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood free(mCurrentValue.str); 219dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood if (string) { 220dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood MtpStringBuffer buffer(string); 221dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mCurrentValue.str = strdup(buffer); 222dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood } 223dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood else 224dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mCurrentValue.str = NULL; 225dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood} 226dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood 2270181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwoodvoid MtpProperty::setFormRange(int min, int max, int step) { 2280181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mFormFlag = kFormRange; 2290181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood switch (mType) { 2300181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT8: 2310181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i8 = min; 2320181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i8 = max; 2330181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i8 = step; 2340181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2350181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT8: 2360181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u8 = min; 2370181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u8 = max; 2380181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u8 = step; 2390181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2400181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT16: 2410181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i16 = min; 2420181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i16 = max; 2430181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i16 = step; 2440181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2450181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT16: 2460181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u16 = min; 2470181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u16 = max; 2480181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u16 = step; 2490181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2500181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT32: 2510181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i32 = min; 2520181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i32 = max; 2530181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i32 = step; 2540181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2550181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT32: 2560181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u32 = min; 2570181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u32 = max; 2580181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u32 = step; 2590181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2600181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT64: 2610181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i64 = min; 2620181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i64 = max; 2630181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i64 = step; 2640181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2650181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT64: 2660181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u64 = min; 2670181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u64 = max; 2680181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u64 = step; 2690181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2700181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood default: 27129357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unsupported type for MtpProperty::setRange"); 2720181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2730181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood } 2740181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood} 2750181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood 2760181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwoodvoid MtpProperty::setFormEnum(const int* values, int count) { 2770181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mFormFlag = kFormEnum; 2780181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood delete[] mEnumValues; 2790181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues = new MtpPropertyValue[count]; 2800181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumLength = count; 2810181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood 2820181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood for (int i = 0; i < count; i++) { 2830181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood int value = *values++; 2840181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood switch (mType) { 2850181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT8: 2860181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i8 = value; 2870181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2880181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT8: 2890181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u8 = value; 2900181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2910181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT16: 2920181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i16 = value; 2930181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2940181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT16: 2950181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u16 = value; 2960181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2970181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT32: 2980181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i32 = value; 2990181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3000181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT32: 3010181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u32 = value; 3020181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3030181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT64: 3040181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i64 = value; 3050181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3060181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT64: 3070181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u64 = value; 3080181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3090181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood default: 31029357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unsupported type for MtpProperty::setEnum"); 3110181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3120181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood } 3130181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood } 3140181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood} 3150181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood 316b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwoodvoid MtpProperty::setFormDateTime() { 317b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwood mFormFlag = kFormDateTime; 318b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwood} 319b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwood 320a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::print() { 3210c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood MtpString buffer; 3220c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood bool deviceProp = isDeviceProperty(); 3230c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood if (deviceProp) 324df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" %s (%04X)", MtpDebug::getDevicePropCodeName(mCode), mCode); 3250c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood else 326df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" %s (%04X)", MtpDebug::getObjectPropCodeName(mCode), mCode); 327df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" type %04X", mType); 328df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" writeable %s", (mWriteable ? "true" : "false")); 3290c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " default value: "; 3300c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mDefaultValue, buffer); 331df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3320c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood if (deviceProp) { 3330c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " current value: "; 3340c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mCurrentValue, buffer); 335df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3360c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 3370c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood switch (mFormFlag) { 3380c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormNone: 3390c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3400c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormRange: 3410c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " Range ("; 3420c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mMinimumValue, buffer); 3430c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += ", "; 3440c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mMaximumValue, buffer); 3450c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += ", "; 3460c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mStepSize, buffer); 347fd34626771a63d3a835863e1b4bf71dcb26e28d8Mike Lockwood buffer += ")"; 348df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3490c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3500c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormEnum: 3510c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " Enum { "; 3520c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood for (int i = 0; i < mEnumLength; i++) { 3530c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mEnumValues[i], buffer); 3540c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += " "; 3550c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 3560c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += "}"; 357df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3580c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3590c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormDateTime: 360df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" DateTime\n"); 3610c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3620c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood default: 363df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" form %d\n", mFormFlag); 3640c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3650c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 3660c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood} 3670c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood 3680c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwoodvoid MtpProperty::print(MtpPropertyValue& value, MtpString& buffer) { 3690c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood switch (mType) { 3700c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT8: 3710c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.i8); 3720c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3730c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT8: 3740c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.u8); 3750c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3760c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT16: 3770c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.i16); 3780c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3790c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT16: 3800c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.u16); 3810c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3820c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT32: 3830c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.i32); 3840c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3850c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT32: 3860c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.u32); 3870c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3880c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT64: 389377b2ec9a2885f9b6405b07ba900a9e3f4349c38Kévin PETIT buffer.appendFormat("%" PRId64, value.u.i64); 3900c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3910c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT64: 392377b2ec9a2885f9b6405b07ba900a9e3f4349c38Kévin PETIT buffer.appendFormat("%" PRIu64, value.u.u64); 3930c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3940c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT128: 3950c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%08X%08X%08X%08X", value.u.i128[0], value.u.i128[1], 3960c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood value.u.i128[2], value.u.i128[3]); 3970c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3980c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT128: 3990c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%08X%08X%08X%08X", value.u.u128[0], value.u.u128[1], 4000c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood value.u.u128[2], value.u.u128[3]); 4010c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 4020c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_STR: 4030c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%s", value.str); 4040c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 4050c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood default: 40629357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unsupported type for MtpProperty::print\n"); 4070c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 4080c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 409a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 410a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 411a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::readValue(MtpDataPacket& packet, MtpPropertyValue& value) { 4125cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 4135cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 414a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 415a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT8: 4165cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 417dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i8 = packet.getInt8(); 418a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 419a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT8: 4205cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 421dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u8 = packet.getUInt8(); 422a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 423a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT16: 4245cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 425dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i16 = packet.getInt16(); 426a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 427a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT16: 4285cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 429dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u16 = packet.getUInt16(); 430a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 431a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT32: 4325cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 433dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i32 = packet.getInt32(); 434a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 435a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT32: 4365cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 437dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u32 = packet.getUInt32(); 438a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 439a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT64: 4405cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 441dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i64 = packet.getInt64(); 442a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 443a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT64: 4445cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 445dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u64 = packet.getUInt64(); 446a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 447a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT128: 4485cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 449dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.getInt128(value.u.i128); 450a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 451a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT128: 4525cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 453dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.getUInt128(value.u.u128); 454a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 4555cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 4565cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.getString(stringBuffer); 4575cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood value.str = strdup(stringBuffer); 4585cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 459a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 46029357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unknown type %04X in MtpProperty::readValue", mType); 461a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 462a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 463a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 46421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeValue(MtpDataPacket& packet, MtpPropertyValue& value) { 4655cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 4665cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 46721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 46821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 4695cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 470dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt8(value.u.i8); 47121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 47221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 4735cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 474dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt8(value.u.u8); 47521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 47621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 4775cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 478dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt16(value.u.i16); 47921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 48021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 4815cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 482dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt16(value.u.u16); 48321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 48421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 4855cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 486dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt32(value.u.i32); 48721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 48821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 4895cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 490dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt32(value.u.u32); 49121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 49221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 4935cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 494dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt64(value.u.i64); 49521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 49621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 4975cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 498dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt64(value.u.u64); 49921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 50021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT128: 5015cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 502dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt128(value.u.i128); 50321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 50421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT128: 5055cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 506dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt128(value.u.u128); 50721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 5085cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 5095cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood if (value.str) 5105cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putString(value.str); 5115cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood else 5125cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putEmptyString(); 5135cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 51421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 51529357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unknown type %04X in MtpProperty::writeValue", mType); 51621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 51721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 51821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 519a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpPropertyValue* MtpProperty::readArrayValues(MtpDataPacket& packet, int& length) { 520a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood length = packet.getUInt32(); 521a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (length == 0) 522a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return NULL; 523a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood MtpPropertyValue* result = new MtpPropertyValue[length]; 524a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < length; i++) 525a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, result[i]); 526a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return result; 527a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 528a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 52921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeArrayValues(MtpDataPacket& packet, MtpPropertyValue* values, int length) { 53021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt32(length); 53121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < length; i++) 53221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, values[i]); 53321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 53421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 535a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} // namespace android 536