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