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" 200c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood#include "MtpDebug.h" 21a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpProperty.h" 22a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpStringBuffer.h" 23a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#include "MtpUtils.h" 24a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 25a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodnamespace android { 26a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 27a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::MtpProperty() 28a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood : mCode(0), 29a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType(0), 30a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable(false), 31a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayLength(0), 32a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues(NULL), 33a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayLength(0), 34a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCurrentArrayValues(NULL), 352bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood mGroupCode(0), 36a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag(kFormNone), 37a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength(0), 38a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues(NULL) 39a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood{ 40dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mDefaultValue, 0, sizeof(mDefaultValue)); 41dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mCurrentValue, 0, sizeof(mCurrentValue)); 42dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mMinimumValue, 0, sizeof(mMinimumValue)); 43dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood memset(&mMaximumValue, 0, sizeof(mMaximumValue)); 44a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 45a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 4621ef7d0e70c5ad599bc2602cb484f8cd647055caMike LockwoodMtpProperty::MtpProperty(MtpPropertyCode propCode, 4721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood MtpDataType type, 4821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood bool writeable, 4921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood int defaultValue) 5021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood : mCode(propCode), 5121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mType(type), 5221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mWriteable(writeable), 5321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayLength(0), 5421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mDefaultArrayValues(NULL), 5521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayLength(0), 5621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mCurrentArrayValues(NULL), 5740ce1f262cc4edbc8b7c470830325466263acaecMike Lockwood mGroupCode(0), 5821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mFormFlag(kFormNone), 5921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumLength(0), 6021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood mEnumValues(NULL) 6121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood{ 6221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mDefaultValue, 0, sizeof(mDefaultValue)); 6321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mCurrentValue, 0, sizeof(mCurrentValue)); 6421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMinimumValue, 0, sizeof(mMinimumValue)); 6521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood memset(&mMaximumValue, 0, sizeof(mMaximumValue)); 6621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 6721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (defaultValue) { 6821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (type) { 6921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 70dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i8 = defaultValue; 7121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 73dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u8 = defaultValue; 7421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 76dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i16 = defaultValue; 7721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 7821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 79dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u16 = defaultValue; 8021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 82dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i32 = defaultValue; 8321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 85dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u32 = defaultValue; 8621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 8721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 88dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.i64 = defaultValue; 8921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 9021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 91dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.u.u64 = defaultValue; 9221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 9321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 9429357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unknown type %04X in MtpProperty::MtpProperty", type); 9521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 9721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 9821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 99a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpProperty::~MtpProperty() { 100a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mType == MTP_TYPE_STR) { 101a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood // free all strings 102a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultValue.str); 103a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentValue.str); 104a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMinimumValue.str); 105a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mMaximumValue.str); 106a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mDefaultArrayValues) { 107a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mDefaultArrayLength; i++) 108a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mDefaultArrayValues[i].str); 109a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 110a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mCurrentArrayValues) { 111a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mCurrentArrayLength; i++) 112a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mCurrentArrayValues[i].str); 113a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 114a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mEnumValues) { 115a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 116a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood free(mEnumValues[i].str); 117a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 118a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 119a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mDefaultArrayValues; 120a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mCurrentArrayValues; 121a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood delete[] mEnumValues; 122a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 123a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 124e3e76c456baee122de6715ae280130abaddc906cMike Lockwoodvoid MtpProperty::read(MtpDataPacket& packet) { 125a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mCode = packet.getUInt16(); 1265da864845e024833c4c7f641acd7c88187a6bc1eMike Lockwood bool deviceProp = isDeviceProperty(); 127a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mType = packet.getUInt16(); 128a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mWriteable = (packet.getUInt8() == 1); 129a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 130a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT8: 131a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT8: 132a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT16: 133a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT16: 134a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT32: 135a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT32: 136a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT64: 137a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT64: 138a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AINT128: 139a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_AUINT128: 140a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); 1417cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 1427cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); 143a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 144a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 145a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mDefaultValue); 1467cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 14721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood readValue(packet, mCurrentValue); 148a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 1497cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (!deviceProp) 1507cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood mGroupCode = packet.getUInt32(); 151a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mFormFlag = packet.getUInt8(); 152a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 153a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (mFormFlag == kFormRange) { 154a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMinimumValue); 155a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mMaximumValue); 156a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mStepSize); 157a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } else if (mFormFlag == kFormEnum) { 158a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumLength = packet.getUInt16(); 159a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood mEnumValues = new MtpPropertyValue[mEnumLength]; 160a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < mEnumLength; i++) 161a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, mEnumValues[i]); 162a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 163a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 164a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 16521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::write(MtpDataPacket& packet) { 1667cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood bool deviceProp = isDeviceProperty(); 1677cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood 16821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mCode); 16921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mType); 17021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt8(mWriteable ? 1 : 0); 17121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 17221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 17321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT8: 17421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT8: 17521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT16: 17621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT16: 17721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT32: 17821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT32: 17921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT64: 18021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT64: 18121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AINT128: 18221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_AUINT128: 18321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeArrayValues(packet, mDefaultArrayValues, mDefaultArrayLength); 1847cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 1857cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood writeArrayValues(packet, mCurrentArrayValues, mCurrentArrayLength); 18621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 18721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 18821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mDefaultValue); 1897cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (deviceProp) 1907cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood writeValue(packet, mCurrentValue); 19121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 1922bb8c0e7c4e4093f4161ff5e98cef51c87193859Mike Lockwood packet.putUInt32(mGroupCode); 1937cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood if (!deviceProp) 1947cee5d3c3673d9a325d8096eea0ba48258fc656cMike Lockwood packet.putUInt8(mFormFlag); 19521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood if (mFormFlag == kFormRange) { 19621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMinimumValue); 19721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mMaximumValue); 19821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mStepSize); 19921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } else if (mFormFlag == kFormEnum) { 20021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt16(mEnumLength); 20121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < mEnumLength; i++) 20221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, mEnumValues[i]); 20321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 20421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 20521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 206dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwoodvoid MtpProperty::setDefaultValue(const uint16_t* string) { 207dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood free(mDefaultValue.str); 208dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood if (string) { 209dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood MtpStringBuffer buffer(string); 210dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.str = strdup(buffer); 211dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood } 212dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood else 213dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mDefaultValue.str = NULL; 214dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood} 215dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood 216dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwoodvoid MtpProperty::setCurrentValue(const uint16_t* string) { 217dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood free(mCurrentValue.str); 218dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood if (string) { 219dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood MtpStringBuffer buffer(string); 220dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mCurrentValue.str = strdup(buffer); 221dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood } 222dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood else 223dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood mCurrentValue.str = NULL; 224dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood} 225dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood 2260181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwoodvoid MtpProperty::setFormRange(int min, int max, int step) { 2270181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mFormFlag = kFormRange; 2280181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood switch (mType) { 2290181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT8: 2300181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i8 = min; 2310181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i8 = max; 2320181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i8 = step; 2330181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2340181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT8: 2350181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u8 = min; 2360181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u8 = max; 2370181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u8 = step; 2380181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2390181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT16: 2400181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i16 = min; 2410181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i16 = max; 2420181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i16 = step; 2430181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2440181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT16: 2450181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u16 = min; 2460181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u16 = max; 2470181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u16 = step; 2480181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2490181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT32: 2500181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i32 = min; 2510181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i32 = max; 2520181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i32 = step; 2530181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2540181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT32: 2550181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u32 = min; 2560181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u32 = max; 2570181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u32 = step; 2580181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2590181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT64: 2600181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.i64 = min; 2610181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.i64 = max; 2620181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.i64 = step; 2630181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2640181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT64: 2650181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMinimumValue.u.u64 = min; 2660181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mMaximumValue.u.u64 = max; 2670181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mStepSize.u.u64 = step; 2680181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2690181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood default: 27029357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unsupported type for MtpProperty::setRange"); 2710181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2720181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood } 2730181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood} 2740181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood 2750181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwoodvoid MtpProperty::setFormEnum(const int* values, int count) { 2760181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mFormFlag = kFormEnum; 2770181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood delete[] mEnumValues; 2780181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues = new MtpPropertyValue[count]; 2790181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumLength = count; 2800181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood 2810181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood for (int i = 0; i < count; i++) { 2820181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood int value = *values++; 2830181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood switch (mType) { 2840181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT8: 2850181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i8 = value; 2860181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2870181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT8: 2880181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u8 = value; 2890181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2900181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT16: 2910181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i16 = value; 2920181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2930181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT16: 2940181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u16 = value; 2950181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2960181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT32: 2970181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i32 = value; 2980181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 2990181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT32: 3000181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u32 = value; 3010181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3020181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_INT64: 3030181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.i64 = value; 3040181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3050181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood case MTP_TYPE_UINT64: 3060181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood mEnumValues[i].u.u64 = value; 3070181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3080181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood default: 30929357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unsupported type for MtpProperty::setEnum"); 3100181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood break; 3110181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood } 3120181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood } 3130181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood} 3140181726d0cc2d0fc6f6a53b6479dcf0fc41b9499Mike Lockwood 315b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwoodvoid MtpProperty::setFormDateTime() { 316b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwood mFormFlag = kFormDateTime; 317b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwood} 318b892d0e5556ed6ded3e0548f75ab16fc2e3d92c3Mike Lockwood 319a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::print() { 3200c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood MtpString buffer; 3210c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood bool deviceProp = isDeviceProperty(); 3220c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood if (deviceProp) 323df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" %s (%04X)", MtpDebug::getDevicePropCodeName(mCode), mCode); 3240c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood else 325df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" %s (%04X)", MtpDebug::getObjectPropCodeName(mCode), mCode); 326df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" type %04X", mType); 327df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" writeable %s", (mWriteable ? "true" : "false")); 3280c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " default value: "; 3290c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mDefaultValue, buffer); 330df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3310c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood if (deviceProp) { 3320c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " current value: "; 3330c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mCurrentValue, buffer); 334df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3350c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 3360c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood switch (mFormFlag) { 3370c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormNone: 3380c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3390c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormRange: 3400c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " Range ("; 3410c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mMinimumValue, buffer); 3420c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += ", "; 3430c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mMaximumValue, buffer); 3440c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += ", "; 3450c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mStepSize, buffer); 346fd34626771a63d3a835863e1b4bf71dcb26e28d8Mike Lockwood buffer += ")"; 347df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3480c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3490c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormEnum: 3500c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer = " Enum { "; 3510c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood for (int i = 0; i < mEnumLength; i++) { 3520c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood print(mEnumValues[i], buffer); 3530c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += " "; 3540c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 3550c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer += "}"; 356df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI("%s", (const char *)buffer); 3570c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3580c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case kFormDateTime: 359df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" DateTime\n"); 3600c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3610c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood default: 362df64d15042bbd5e0e4933ac49bf3c177dd94752cSteve Block ALOGI(" form %d\n", mFormFlag); 3630c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3640c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 3650c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood} 3660c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood 3670c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwoodvoid MtpProperty::print(MtpPropertyValue& value, MtpString& buffer) { 3680c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood switch (mType) { 3690c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT8: 3700c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.i8); 3710c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3720c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT8: 3730c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.u8); 3740c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3750c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT16: 3760c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.i16); 3770c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3780c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT16: 3790c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.u16); 3800c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3810c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT32: 3820c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.i32); 3830c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3840c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT32: 3850c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%d", value.u.u32); 3860c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3870c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT64: 3880c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%lld", value.u.i64); 3890c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3900c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT64: 3910c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%lld", value.u.u64); 3920c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3930c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_INT128: 3940c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%08X%08X%08X%08X", value.u.i128[0], value.u.i128[1], 3950c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood value.u.i128[2], value.u.i128[3]); 3960c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 3970c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_UINT128: 3980c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%08X%08X%08X%08X", value.u.u128[0], value.u.u128[1], 3990c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood value.u.u128[2], value.u.u128[3]); 4000c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 4010c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood case MTP_TYPE_STR: 4020c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood buffer.appendFormat("%s", value.str); 4030c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 4040c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood default: 40529357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unsupported type for MtpProperty::print\n"); 4060c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood break; 4070c7c7c76a96a82ec728a2d5c091941c4057ffb25Mike Lockwood } 408a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 409a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 410a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwoodvoid MtpProperty::readValue(MtpDataPacket& packet, MtpPropertyValue& value) { 4115cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 4125cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 413a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood switch (mType) { 414a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT8: 4155cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 416dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i8 = packet.getInt8(); 417a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 418a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT8: 4195cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 420dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u8 = packet.getUInt8(); 421a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 422a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT16: 4235cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 424dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i16 = packet.getInt16(); 425a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 426a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT16: 4275cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 428dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u16 = packet.getUInt16(); 429a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 430a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT32: 4315cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 432dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i32 = packet.getInt32(); 433a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 434a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT32: 4355cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 436dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u32 = packet.getUInt32(); 437a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 438a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT64: 4395cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 440dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.i64 = packet.getInt64(); 441a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 442a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT64: 4435cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 444dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood value.u.u64 = packet.getUInt64(); 445a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 446a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_INT128: 4475cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 448dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.getInt128(value.u.i128); 449a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 450a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood case MTP_TYPE_UINT128: 4515cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 452dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.getUInt128(value.u.u128); 453a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood break; 4545cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 4555cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.getString(stringBuffer); 4565cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood value.str = strdup(stringBuffer); 4575cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 458a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood default: 45929357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unknown type %04X in MtpProperty::readValue", mType); 460a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood } 461a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 462a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 46321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeValue(MtpDataPacket& packet, MtpPropertyValue& value) { 4645cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood MtpStringBuffer stringBuffer; 4655cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood 46621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood switch (mType) { 46721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT8: 4685cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT8: 469dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt8(value.u.i8); 47021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 47121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT8: 4725cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT8: 473dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt8(value.u.u8); 47421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 47521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT16: 4765cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT16: 477dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt16(value.u.i16); 47821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 47921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT16: 4805cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT16: 481dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt16(value.u.u16); 48221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 48321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT32: 4845cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT32: 485dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt32(value.u.i32); 48621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 48721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT32: 4885cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT32: 489dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt32(value.u.u32); 49021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 49121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT64: 4925cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT64: 493dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt64(value.u.i64); 49421ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 49521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT64: 4965cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT64: 497dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt64(value.u.u64); 49821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 49921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_INT128: 5005cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AINT128: 501dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putInt128(value.u.i128); 50221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 50321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood case MTP_TYPE_UINT128: 5045cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_AUINT128: 505dde372033b4da75ebde7ea2afdec1c1b86ab5a42Mike Lockwood packet.putUInt128(value.u.u128); 50621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood break; 5075cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood case MTP_TYPE_STR: 5085cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood if (value.str) 5095cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putString(value.str); 5105cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood else 5115cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood packet.putEmptyString(); 5125cdceca217319bf6a22caf1acadc38c8dc259316Mike Lockwood break; 51321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood default: 51429357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47Steve Block ALOGE("unknown type %04X in MtpProperty::writeValue", mType); 51521ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood } 51621ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 51721ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 518a6c490b8b2d96ebaab632286029463f932ae3b6bMike LockwoodMtpPropertyValue* MtpProperty::readArrayValues(MtpDataPacket& packet, int& length) { 519a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood length = packet.getUInt32(); 520a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood if (length == 0) 521a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return NULL; 522a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood MtpPropertyValue* result = new MtpPropertyValue[length]; 523a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood for (int i = 0; i < length; i++) 524a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood readValue(packet, result[i]); 525a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood return result; 526a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} 527a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood 52821ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwoodvoid MtpProperty::writeArrayValues(MtpDataPacket& packet, MtpPropertyValue* values, int length) { 52921ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood packet.putUInt32(length); 53021ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood for (int i = 0; i < length; i++) 53121ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood writeValue(packet, values[i]); 53221ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood} 53321ef7d0e70c5ad599bc2602cb484f8cd647055caMike Lockwood 534a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood} // namespace android 535