1335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood/* 2335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * Copyright (C) 2010 The Android Open Source Project 3335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * 4335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 5335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * you may not use this file except in compliance with the License. 6335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * You may obtain a copy of the License at 7335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * 8335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * 10335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * Unless required by applicable law or agreed to in writing, software 11335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 12335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * See the License for the specific language governing permissions and 14335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood * limitations under the License. 15335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood */ 16335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 17a6c490b8b2d96ebaab632286029463f932ae3b6bMike Lockwood#define LOG_TAG "MtpDeviceInfo" 18335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 19b14e588bec4d5e39e61b020b5b575f2ce555d316Mike Lockwood#include "MtpDebug.h" 20335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood#include "MtpDataPacket.h" 21335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood#include "MtpDeviceInfo.h" 22335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood#include "MtpStringBuffer.h" 23335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 24335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwoodnamespace android { 25335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 26335dd2be955607f2632eabc25045857f2cc8b674Mike LockwoodMtpDeviceInfo::MtpDeviceInfo() 27335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood : mStandardVersion(0), 28335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mVendorExtensionID(0), 29335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mVendorExtensionVersion(0), 30335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mVendorExtensionDesc(NULL), 31ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood mFunctionalMode(0), 32335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mOperations(NULL), 33335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mEvents(NULL), 34335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mDeviceProperties(NULL), 35335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mCaptureFormats(NULL), 36335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mPlaybackFormats(NULL), 37335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mManufacturer(NULL), 38335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mModel(NULL), 39335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mVersion(NULL), 40335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mSerial(NULL) 41335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood{ 42335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood} 43335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 44335dd2be955607f2632eabc25045857f2cc8b674Mike LockwoodMtpDeviceInfo::~MtpDeviceInfo() { 45335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood if (mVendorExtensionDesc) 46335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood free(mVendorExtensionDesc); 47335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood delete mOperations; 48335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood delete mEvents; 49335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood delete mDeviceProperties; 50335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood delete mCaptureFormats; 51335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood delete mPlaybackFormats; 52335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood if (mManufacturer) 53335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood free(mManufacturer); 54335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood if (mModel) 55335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood free(mModel); 56335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood if (mVersion) 57335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood free(mVersion); 58335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood if (mSerial) 59335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood free(mSerial); 60335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood} 61335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 62ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwoodbool MtpDeviceInfo::read(MtpDataPacket& packet) { 63335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood MtpStringBuffer string; 64335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 65335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood // read the device info 66ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getUInt16(mStandardVersion)) return false; 67ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getUInt32(mVendorExtensionID)) return false; 68ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getUInt16(mVendorExtensionVersion)) return false; 69335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 70ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getString(string)) return false; 71335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mVendorExtensionDesc = strdup((const char *)string); 7296a84081d31a1a854f2026fcf507e60c15022db6Daichi Hirono if (!mVendorExtensionDesc) return false; 73335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 74ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getUInt16(mFunctionalMode)) return false; 75335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mOperations = packet.getAUInt16(); 76ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!mOperations) return false; 77335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mEvents = packet.getAUInt16(); 78ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!mEvents) return false; 79335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mDeviceProperties = packet.getAUInt16(); 80ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!mDeviceProperties) return false; 81335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mCaptureFormats = packet.getAUInt16(); 82ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!mCaptureFormats) return false; 83335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mPlaybackFormats = packet.getAUInt16(); 84ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!mCaptureFormats) return false; 85335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 86ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getString(string)) return false; 87335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mManufacturer = strdup((const char *)string); 8896a84081d31a1a854f2026fcf507e60c15022db6Daichi Hirono if (!mManufacturer) return false; 89ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getString(string)) return false; 90335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mModel = strdup((const char *)string); 9196a84081d31a1a854f2026fcf507e60c15022db6Daichi Hirono if (!mModel) return false; 92ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getString(string)) return false; 93335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mVersion = strdup((const char *)string); 9496a84081d31a1a854f2026fcf507e60c15022db6Daichi Hirono if (!mVersion) return false; 95ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood if (!packet.getString(string)) return false; 96335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mSerial = strdup((const char *)string); 9796a84081d31a1a854f2026fcf507e60c15022db6Daichi Hirono if (!mSerial) return false; 98ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood 99ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood return true; 100335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood} 101335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 102335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwoodvoid MtpDeviceInfo::print() { 1033856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("Device Info:\n\tmStandardVersion: %d\n\tmVendorExtensionID: %d\n\tmVendorExtensionVersiony: %d\n", 104335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood mStandardVersion, mVendorExtensionID, mVendorExtensionVersion); 105ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood ALOGV("\tmVendorExtensionDesc: %s\n\tmFunctionalMode: %d\n\tmManufacturer: %s\n\tmModel: %s\n\tmVersion: %s\n\tmSerial: %s\n", 106ab063847e6e893740749029a04cce1f6b7345ed5Mike Lockwood mVendorExtensionDesc, mFunctionalMode, mManufacturer, mModel, mVersion, mSerial); 107335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood} 108335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood 109335dd2be955607f2632eabc25045857f2cc8b674Mike Lockwood} // namespace android 110