From 7cee5d3c3673d9a325d8096eea0ba48258fc656c Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Sat, 25 Sep 2010 08:37:59 -0400 Subject: MTP: Fix reading and writing device property descriptors Change-Id: I8d9653ceedfed688addd6c4194c097d7090c3468 Signed-off-by: Mike Lockwood --- media/mtp/MtpProperty.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'media/mtp/MtpProperty.cpp') diff --git a/media/mtp/MtpProperty.cpp b/media/mtp/MtpProperty.cpp index c7a91d6..995f589 100644 --- a/media/mtp/MtpProperty.cpp +++ b/media/mtp/MtpProperty.cpp @@ -121,6 +121,7 @@ MtpProperty::~MtpProperty() { } void MtpProperty::read(MtpDataPacket& packet) { + bool deviceProp = isDeviceProperty(); mCode = packet.getUInt16(); mType = packet.getUInt16(); @@ -137,14 +138,16 @@ void MtpProperty::read(MtpDataPacket& packet) { case MTP_TYPE_AINT128: case MTP_TYPE_AUINT128: mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); - mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); + if (deviceProp) + mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); break; default: readValue(packet, mDefaultValue); - if (isDeviceProperty()) + if (deviceProp) readValue(packet, mCurrentValue); } - mGroupCode = packet.getUInt32(); + if (!deviceProp) + mGroupCode = packet.getUInt32(); mFormFlag = packet.getUInt8(); if (mFormFlag == kFormRange) { @@ -160,6 +163,8 @@ void MtpProperty::read(MtpDataPacket& packet) { } void MtpProperty::write(MtpDataPacket& packet) { + bool deviceProp = isDeviceProperty(); + packet.putUInt16(mCode); packet.putUInt16(mType); packet.putUInt8(mWriteable ? 1 : 0); @@ -176,12 +181,17 @@ void MtpProperty::write(MtpDataPacket& packet) { case MTP_TYPE_AINT128: case MTP_TYPE_AUINT128: writeArrayValues(packet, mDefaultArrayValues, mDefaultArrayLength); + if (deviceProp) + writeArrayValues(packet, mCurrentArrayValues, mCurrentArrayLength); break; default: writeValue(packet, mDefaultValue); + if (deviceProp) + writeValue(packet, mCurrentValue); } packet.putUInt32(mGroupCode); - packet.putUInt8(mFormFlag); + if (!deviceProp) + packet.putUInt8(mFormFlag); if (mFormFlag == kFormRange) { writeValue(packet, mMinimumValue); writeValue(packet, mMaximumValue); -- cgit v1.1