diff options
-rw-r--r-- | media/mtp/MtpDevice.cpp | 2 | ||||
-rw-r--r-- | media/mtp/MtpProperty.cpp | 5 | ||||
-rw-r--r-- | media/mtp/MtpProperty.h | 10 | ||||
-rw-r--r-- | media/mtp/MtpServer.cpp | 5 |
4 files changed, 15 insertions, 7 deletions
diff --git a/media/mtp/MtpDevice.cpp b/media/mtp/MtpDevice.cpp index bd68f75..fca0142 100644 --- a/media/mtp/MtpDevice.cpp +++ b/media/mtp/MtpDevice.cpp @@ -342,7 +342,7 @@ MtpProperty* MtpDevice::getDevicePropDesc(MtpDeviceProperty code) { MtpResponseCode ret = readResponse(); if (ret == MTP_RESPONSE_OK) { MtpProperty* property = new MtpProperty; - property->read(mData, true); + property->read(mData); return property; } return NULL; diff --git a/media/mtp/MtpProperty.cpp b/media/mtp/MtpProperty.cpp index 932ad6a..c7a91d6 100644 --- a/media/mtp/MtpProperty.cpp +++ b/media/mtp/MtpProperty.cpp @@ -120,7 +120,7 @@ MtpProperty::~MtpProperty() { delete[] mEnumValues; } -void MtpProperty::read(MtpDataPacket& packet, bool deviceProp) { +void MtpProperty::read(MtpDataPacket& packet) { mCode = packet.getUInt16(); mType = packet.getUInt16(); @@ -141,7 +141,7 @@ void MtpProperty::read(MtpDataPacket& packet, bool deviceProp) { break; default: readValue(packet, mDefaultValue); - if (deviceProp) + if (isDeviceProperty()) readValue(packet, mCurrentValue); } mGroupCode = packet.getUInt32(); @@ -159,7 +159,6 @@ void MtpProperty::read(MtpDataPacket& packet, bool deviceProp) { } } -// FIXME - only works for object properties void MtpProperty::write(MtpDataPacket& packet) { packet.putUInt16(mCode); packet.putUInt16(mType); diff --git a/media/mtp/MtpProperty.h b/media/mtp/MtpProperty.h index c5b4e28..64cfb93 100644 --- a/media/mtp/MtpProperty.h +++ b/media/mtp/MtpProperty.h @@ -65,16 +65,22 @@ public: inline MtpPropertyCode getPropertyCode() const { return mCode; } - void read(MtpDataPacket& packet, bool deviceProp); + void read(MtpDataPacket& packet); void write(MtpDataPacket& packet); void print(); + inline bool isDeviceProperty() const { + return ( ((mCode & 0xF000) == 0x5000) + || ((mCode & 0xF800) == 0xD000)); + } + private: void readValue(MtpDataPacket& packet, MtpPropertyValue& value); void writeValue(MtpDataPacket& packet, MtpPropertyValue& value); MtpPropertyValue* readArrayValues(MtpDataPacket& packet, int& length); - void writeArrayValues(MtpDataPacket& packet, MtpPropertyValue* values, int length); + void writeArrayValues(MtpDataPacket& packet, + MtpPropertyValue* values, int length); }; }; // namespace android diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp index c982114..3d3bd62 100644 --- a/media/mtp/MtpServer.cpp +++ b/media/mtp/MtpServer.cpp @@ -55,7 +55,7 @@ static const MtpOperationCode kSupportedOperationCodes[] = { // MTP_OPERATION_SELF_TEST, // MTP_OPERATION_SET_OBJECT_PROTECTION, // MTP_OPERATION_POWER_DOWN, -// MTP_OPERATION_GET_DEVICE_PROP_DESC, + MTP_OPERATION_GET_DEVICE_PROP_DESC, MTP_OPERATION_GET_DEVICE_PROP_VALUE, MTP_OPERATION_SET_DEVICE_PROP_VALUE, MTP_OPERATION_RESET_DEVICE_PROP_VALUE, @@ -288,6 +288,9 @@ bool MtpServer::handleRequest() { case MTP_OPERATION_GET_OBJECT_PROP_DESC: response = doGetObjectPropDesc(); break; + case MTP_OPERATION_GET_DEVICE_PROP_DESC: + response = doGetDevicePropDesc(); + break; default: response = MTP_RESPONSE_OPERATION_NOT_SUPPORTED; break; |