summaryrefslogtreecommitdiffstats
path: root/mtp/ffs/MtpDeviceInfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--mtp/ffs/MtpDeviceInfo.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/mtp/ffs/MtpDeviceInfo.cpp b/mtp/ffs/MtpDeviceInfo.cpp
new file mode 100644
index 000000000..fa2f95b2d
--- /dev/null
+++ b/mtp/ffs/MtpDeviceInfo.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "MtpDeviceInfo"
+
+#include "MtpDebug.h"
+#include "MtpDataPacket.h"
+#include "MtpDeviceInfo.h"
+#include "MtpStringBuffer.h"
+
+MtpDeviceInfo::MtpDeviceInfo()
+ : mStandardVersion(0),
+ mVendorExtensionID(0),
+ mVendorExtensionVersion(0),
+ mVendorExtensionDesc(NULL),
+ mFunctionalMode(0),
+ mOperations(NULL),
+ mEvents(NULL),
+ mDeviceProperties(NULL),
+ mCaptureFormats(NULL),
+ mPlaybackFormats(NULL),
+ mManufacturer(NULL),
+ mModel(NULL),
+ mVersion(NULL),
+ mSerial(NULL)
+{
+}
+
+MtpDeviceInfo::~MtpDeviceInfo() {
+ if (mVendorExtensionDesc)
+ free(mVendorExtensionDesc);
+ delete mOperations;
+ delete mEvents;
+ delete mDeviceProperties;
+ delete mCaptureFormats;
+ delete mPlaybackFormats;
+ if (mManufacturer)
+ free(mManufacturer);
+ if (mModel)
+ free(mModel);
+ if (mVersion)
+ free(mVersion);
+ if (mSerial)
+ free(mSerial);
+}
+
+bool MtpDeviceInfo::read(MtpDataPacket& packet) {
+ MtpStringBuffer string;
+
+ // read the device info
+ if (!packet.getUInt16(mStandardVersion)) return false;
+ if (!packet.getUInt32(mVendorExtensionID)) return false;
+ if (!packet.getUInt16(mVendorExtensionVersion)) return false;
+
+ if (!packet.getString(string)) return false;
+ mVendorExtensionDesc = strdup((const char *)string);
+ if (!mVendorExtensionDesc) return false;
+
+ if (!packet.getUInt16(mFunctionalMode)) return false;
+ mOperations = packet.getAUInt16();
+ if (!mOperations) return false;
+ mEvents = packet.getAUInt16();
+ if (!mEvents) return false;
+ mDeviceProperties = packet.getAUInt16();
+ if (!mDeviceProperties) return false;
+ mCaptureFormats = packet.getAUInt16();
+ if (!mCaptureFormats) return false;
+ mPlaybackFormats = packet.getAUInt16();
+ if (!mCaptureFormats) return false;
+
+ if (!packet.getString(string)) return false;
+ mManufacturer = strdup((const char *)string);
+ if (!mManufacturer) return false;
+ if (!packet.getString(string)) return false;
+ mModel = strdup((const char *)string);
+ if (!mModel) return false;
+ if (!packet.getString(string)) return false;
+ mVersion = strdup((const char *)string);
+ if (!mVersion) return false;
+ if (!packet.getString(string)) return false;
+ mSerial = strdup((const char *)string);
+ if (!mSerial) return false;
+
+ return true;
+}
+
+void MtpDeviceInfo::print() {
+ ALOGV("Device Info:\n\tmStandardVersion: %d\n\tmVendorExtensionID: %d\n\tmVendorExtensionVersiony: %d\n",
+ mStandardVersion, mVendorExtensionID, mVendorExtensionVersion);
+ ALOGV("\tmVendorExtensionDesc: %s\n\tmFunctionalMode: %d\n\tmManufacturer: %s\n\tmModel: %s\n\tmVersion: %s\n\tmSerial: %s\n",
+ mVendorExtensionDesc, mFunctionalMode, mManufacturer, mModel, mVersion, mSerial);
+}