bool MtpProperty::read(MtpDataPacket& packet) { uint8_t temp8; if (!packet.getUInt16(mCode)) return false; bool deviceProp = isDeviceProperty(); if (!packet.getUInt16(mType)) return false; if (!packet.getUInt8(temp8)) return false; mWriteable = (temp8 == 1); switch (mType) { case MTP_TYPE_AINT8: case MTP_TYPE_AUINT8: case MTP_TYPE_AINT16: case MTP_TYPE_AUINT16: case MTP_TYPE_AINT32: case MTP_TYPE_AUINT32: case MTP_TYPE_AINT64: case MTP_TYPE_AUINT64: case MTP_TYPE_AINT128: case MTP_TYPE_AUINT128: mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); if (!mDefaultArrayValues) return false; if (deviceProp) { mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); if (!mCurrentArrayValues) return false; } break; default: if (!readValue(packet, mDefaultValue)) return false; if (deviceProp) { if (!readValue(packet, mCurrentValue)) return false; } } if (!deviceProp) { if (!packet.getUInt32(mGroupCode)) return false; } if (!packet.getUInt8(mFormFlag)) return false; if (mFormFlag == kFormRange) { if (!readValue(packet, mMinimumValue)) return false; if (!readValue(packet, mMaximumValue)) return false; if (!readValue(packet, mStepSize)) return false; } else if (mFormFlag == kFormEnum) { if (!packet.getUInt16(mEnumLength)) return false; mEnumValues = new MtpPropertyValue[mEnumLength]; for (int i = 0; i < mEnumLength; i++) { if (!readValue(packet, mEnumValues[i])) return false; } } return true; }
void MtpProperty::print() { MtpString buffer; bool deviceProp = isDeviceProperty(); if (deviceProp) VLOG(2) << MtpDebug::getDevicePropCodeName(mCode) << " (" << std::hex << mCode << std::dec << ")"; else VLOG(2) << MtpDebug::getObjectPropCodeName(mCode) << " (" << std::hex << mCode << std::dec << ")"; VLOG(2) << mType; VLOG(2) << "writeable " << (mWriteable ? "true" : "false"); buffer = "default value: "; print(mDefaultValue, buffer); VLOG(2) << buffer.c_str(); if (deviceProp) { buffer = "current value: "; print(mCurrentValue, buffer); VLOG(2) << buffer.c_str(); } switch (mFormFlag) { case kFormNone: break; case kFormRange: buffer = "Range ("; print(mMinimumValue, buffer); buffer += ", "; print(mMaximumValue, buffer); buffer += ", "; print(mStepSize, buffer); buffer += ")"; VLOG(2) << buffer.c_str(); break; case kFormEnum: buffer = "Enum { "; for (int i = 0; i < mEnumLength; i++) { print(mEnumValues[i], buffer); buffer += " "; } buffer += "}"; VLOG(2) << buffer.c_str(); break; case kFormDateTime: VLOG(2) << "DateTime"; break; default: VLOG(2) << "form " << mFormFlag; break; } }
void MtpProperty::print() { MtpString buffer; bool deviceProp = isDeviceProperty(); if (deviceProp) ALOGI(" %s (%04X)", MtpDebug::getDevicePropCodeName(mCode), mCode); else ALOGI(" %s (%04X)", MtpDebug::getObjectPropCodeName(mCode), mCode); ALOGI(" type %04X", mType); ALOGI(" writeable %s", (mWriteable ? "true" : "false")); buffer = " default value: "; print(mDefaultValue, buffer); ALOGI("%s", (const char *)buffer); if (deviceProp) { buffer = " current value: "; print(mCurrentValue, buffer); ALOGI("%s", (const char *)buffer); } switch (mFormFlag) { case kFormNone: break; case kFormRange: buffer = " Range ("; print(mMinimumValue, buffer); buffer += ", "; print(mMaximumValue, buffer); buffer += ", "; print(mStepSize, buffer); buffer += ")"; ALOGI("%s", (const char *)buffer); break; case kFormEnum: buffer = " Enum { "; for (int i = 0; i < mEnumLength; i++) { print(mEnumValues[i], buffer); buffer += " "; } buffer += "}"; ALOGI("%s", (const char *)buffer); break; case kFormDateTime: ALOGI(" DateTime\n"); break; default: ALOGI(" form %d\n", mFormFlag); break; } }
void MtpProperty::write(MtpDataPacket& packet) { bool deviceProp = isDeviceProperty(); packet.putUInt16(mCode); packet.putUInt16(mType); packet.putUInt8(mWriteable ? 1 : 0); switch (mType) { case MTP_TYPE_AINT8: case MTP_TYPE_AUINT8: case MTP_TYPE_AINT16: case MTP_TYPE_AUINT16: case MTP_TYPE_AINT32: case MTP_TYPE_AUINT32: case MTP_TYPE_AINT64: case MTP_TYPE_AUINT64: case MTP_TYPE_AINT128: case MTP_TYPE_AUINT128: writeArrayValues(packet, mDefaultArrayValues, mDefaultArrayLength); if (deviceProp) writeArrayValues(packet, mCurrentArrayValues, mCurrentArrayLength); break; default: writeValue(packet, mDefaultValue); if (deviceProp) writeValue(packet, mCurrentValue); } packet.putUInt32(mGroupCode); if (!deviceProp) packet.putUInt8(mFormFlag); if (mFormFlag == kFormRange) { writeValue(packet, mMinimumValue); writeValue(packet, mMaximumValue); writeValue(packet, mStepSize); } else if (mFormFlag == kFormEnum) { packet.putUInt16(mEnumLength); for (int i = 0; i < mEnumLength; i++) writeValue(packet, mEnumValues[i]); } }
void MtpProperty::read(MtpDataPacket& packet) { mCode = packet.getUInt16(); bool deviceProp = isDeviceProperty(); mType = packet.getUInt16(); mWriteable = (packet.getUInt8() == 1); switch (mType) { case MTP_TYPE_AINT8: case MTP_TYPE_AUINT8: case MTP_TYPE_AINT16: case MTP_TYPE_AUINT16: case MTP_TYPE_AINT32: case MTP_TYPE_AUINT32: case MTP_TYPE_AINT64: case MTP_TYPE_AUINT64: case MTP_TYPE_AINT128: case MTP_TYPE_AUINT128: mDefaultArrayValues = readArrayValues(packet, mDefaultArrayLength); if (deviceProp) mCurrentArrayValues = readArrayValues(packet, mCurrentArrayLength); break; default: readValue(packet, mDefaultValue); if (deviceProp) readValue(packet, mCurrentValue); } if (!deviceProp) mGroupCode = packet.getUInt32(); mFormFlag = packet.getUInt8(); if (mFormFlag == kFormRange) { readValue(packet, mMinimumValue); readValue(packet, mMaximumValue); readValue(packet, mStepSize); } else if (mFormFlag == kFormEnum) { mEnumLength = packet.getUInt16(); mEnumValues = new MtpPropertyValue[mEnumLength]; for (int i = 0; i < mEnumLength; i++) readValue(packet, mEnumValues[i]); } }