• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2010 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  #ifndef _MTP_PROPERTY_H
18  #define _MTP_PROPERTY_H
19  
20  #include "MtpTypes.h"
21  
22  namespace android {
23  
24  class MtpDataPacket;
25  
26  struct MtpPropertyValue {
27      union {
28          int8_t          i8;
29          uint8_t         u8;
30          int16_t         i16;
31          uint16_t        u16;
32          int32_t         i32;
33          uint32_t        u32;
34          int64_t         i64;
35          uint64_t        u64;
36          int128_t        i128;
37          uint128_t       u128;
38      } u;
39      // string in UTF8 format
40      char*               str;
41  };
42  
43  class MtpProperty {
44  public:
45      MtpPropertyCode     mCode;
46      MtpDataType         mType;
47      bool                mWriteable;
48      MtpPropertyValue    mDefaultValue;
49      MtpPropertyValue    mCurrentValue;
50  
51      // for array types
52      uint32_t            mDefaultArrayLength;
53      MtpPropertyValue*   mDefaultArrayValues;
54      uint32_t            mCurrentArrayLength;
55      MtpPropertyValue*   mCurrentArrayValues;
56  
57      enum {
58          kFormNone = 0,
59          kFormRange = 1,
60          kFormEnum = 2,
61          kFormDateTime = 3,
62      };
63  
64      uint32_t            mGroupCode;
65      uint8_t             mFormFlag;
66  
67      // for range form
68      MtpPropertyValue    mMinimumValue;
69      MtpPropertyValue    mMaximumValue;
70      MtpPropertyValue    mStepSize;
71  
72      // for enum form
73      uint16_t            mEnumLength;
74      MtpPropertyValue*   mEnumValues;
75  
76  public:
77                          MtpProperty();
78                          MtpProperty(MtpPropertyCode propCode,
79                                       MtpDataType type,
80                                       bool writeable = false,
81                                       int defaultValue = 0);
82      virtual             ~MtpProperty();
83  
getPropertyCode()84      inline MtpPropertyCode getPropertyCode() const { return mCode; }
85  
86      bool                read(MtpDataPacket& packet);
87      void                write(MtpDataPacket& packet);
88  
89      void                setDefaultValue(const uint16_t* string);
90      void                setCurrentValue(const uint16_t* string);
91  
92      void                setFormRange(int min, int max, int step);
93      void                setFormEnum(const int* values, int count);
94      void                setFormDateTime();
95  
96      void                print();
97      void                print(MtpPropertyValue& value, MtpString& buffer);
98  
isDeviceProperty()99      inline bool         isDeviceProperty() const {
100                              return (   ((mCode & 0xF000) == 0x5000)
101                                      || ((mCode & 0xF800) == 0xD000));
102                          }
103  
104  private:
105      bool                readValue(MtpDataPacket& packet, MtpPropertyValue& value);
106      void                writeValue(MtpDataPacket& packet, MtpPropertyValue& value);
107      MtpPropertyValue*   readArrayValues(MtpDataPacket& packet, uint32_t& length);
108      void                writeArrayValues(MtpDataPacket& packet,
109                                              MtpPropertyValue* values, uint32_t length);
110  };
111  
112  }; // namespace android
113  
114  #endif // _MTP_PROPERTY_H
115