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