1 /*
2 * Copyright (C) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "payload_data/get_device_info_data.h"
16 #include "media_log.h"
17 #include "media_mtp_utils.h"
18 #include "mtp_constants.h"
19 #include "mtp_operation_utils.h"
20 #include "mtp_packet_tools.h"
21
22 using namespace std;
23
24 namespace OHOS {
25 namespace Media {
26 static const char *EXTENSION_DESC = "microsoft.com: 1.0; openharmony: 1.0;";
27
28 static const uint16_t CaptureFormats[] = {};
29 static const uint16_t PlaybackFormats[] = {
30 MTP_FORMAT_UNDEFINED_CODE,
31 MTP_FORMAT_ASSOCIATION_CODE,
32 MTP_FORMAT_TEXT_CODE,
33 MTP_FORMAT_HTML_CODE,
34 MTP_FORMAT_WAV_CODE,
35 MTP_FORMAT_MP3_CODE,
36 MTP_FORMAT_MPEG_CODE,
37 MTP_FORMAT_EXIF_JPEG_CODE,
38 MTP_FORMAT_TIFF_EP_CODE,
39 MTP_FORMAT_BMP_CODE,
40 MTP_FORMAT_GIF_CODE,
41 MTP_FORMAT_JFIF_CODE,
42 MTP_FORMAT_PNG_CODE,
43 MTP_FORMAT_TIFF_CODE,
44 MTP_FORMAT_WMA_CODE,
45 MTP_FORMAT_OGG_CODE,
46 MTP_FORMAT_AAC_CODE,
47 MTP_FORMAT_MP4_CONTAINER_CODE,
48 MTP_FORMAT_MP2_CODE,
49 MTP_FORMAT_3GP_CONTAINER_CODE,
50 MTP_FORMAT_ABSTRACT_AUDIO_VIDEO_PLAYLIST_CODE,
51 MTP_FORMAT_WPL_PLAYLIST_CODE,
52 MTP_FORMAT_M3U_PLAYLIST_CODE,
53 MTP_FORMAT_PLS_PLAYLIST_CODE,
54 MTP_FORMAT_XML_DOCUMENT_CODE,
55 MTP_FORMAT_FLAC_CODE,
56 };
57
58 static const uint16_t DeviceProperties[] = {
59 MTP_DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER_CODE,
60 MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME_CODE,
61 MTP_DEVICE_PROPERTY_IMAGE_SIZE_CODE,
62 MTP_DEVICE_PROPERTY_BATTERY_LEVEL_CODE,
63 MTP_DEVICE_PROPERTY_PERCEIVED_DEVICE_TYPE_CODE,
64 MTP_DEVICE_PROPERTY_SESSION_INITIATOR_VERSION_INFO_CODE,
65 };
66
67 static const uint16_t Events[] = {
68 MTP_EVENT_OBJECT_ADDED_CODE,
69 MTP_EVENT_OBJECT_REMOVED_CODE,
70 MTP_EVENT_STORE_ADDED_CODE,
71 MTP_EVENT_STORE_REMOVED_CODE,
72 MTP_EVENT_DEVICE_PROP_CHANGED_CODE,
73 MTP_EVENT_OBJECT_INFO_CHANGED_CODE,
74 };
75
76 static const uint16_t Operations[] = {
77 MTP_OPERATION_GET_DEVICE_INFO_CODE,
78 MTP_OPERATION_OPEN_SESSION_CODE,
79 MTP_OPERATION_CLOSE_SESSION_CODE,
80 MTP_OPERATION_GET_STORAGE_IDS_CODE,
81 MTP_OPERATION_GET_STORAGE_INFO_CODE,
82 MTP_OPERATION_GET_NUM_OBJECTS_CODE,
83 MTP_OPERATION_GET_OBJECT_HANDLES_CODE,
84 MTP_OPERATION_GET_OBJECT_INFO_CODE,
85 MTP_OPERATION_GET_OBJECT_CODE,
86 MTP_OPERATION_GET_THUMB_CODE,
87 MTP_OPERATION_DELETE_OBJECT_CODE,
88 MTP_OPERATION_SEND_OBJECT_INFO_CODE,
89 MTP_OPERATION_SEND_OBJECT_CODE,
90 MTP_OPERATION_RESET_DEVICE_CODE,
91 MTP_OPERATION_GET_DEVICE_PROP_DESC_CODE,
92 MTP_OPERATION_GET_DEVICE_PROP_VALUE_CODE,
93 MTP_OPERATION_SET_DEVICE_PROP_VALUE_CODE,
94 MTP_OPERATION_RESET_DEVICE_PROP_VALUE_CODE,
95 MTP_OPERATION_MOVE_OBJECT_CODE,
96 MTP_OPERATION_COPY_OBJECT_CODE,
97 MTP_OPERATION_GET_PARTIAL_OBJECT_CODE,
98 MTP_OPERATION_GET_OBJECT_PROPS_SUPPORTED_CODE,
99 MTP_OPERATION_GET_OBJECT_PROP_DESC_CODE,
100 MTP_OPERATION_GET_OBJECT_PROP_VALUE_CODE,
101 MTP_OPERATION_SET_OBJECT_PROP_VALUE_CODE,
102 MTP_OPERATION_GET_OBJECT_PROP_LIST_CODE,
103 MTP_OPERATION_GET_OBJECT_REFERENCES_CODE,
104 MTP_OPERATION_SET_OBJECT_REFERENCES_CODE,
105 };
106
107 const int EXTENSION_ID = 6;
GetDeviceInfoData(std::shared_ptr<MtpOperationContext> & context)108 GetDeviceInfoData::GetDeviceInfoData(std::shared_ptr<MtpOperationContext> &context)
109 : PayloadData(context), functionalMode_(0), serialNum_("0")
110 {
111 standardVersion_ = MTP_STANDARD_VERSION;
112 vendorExtensionID_ = EXTENSION_ID;
113 vendorExtensionVersion_ = MTP_STANDARD_VERSION;
114 vendorExtensionDesc_ = EXTENSION_DESC;
115 manufacturer_ = DEFAULT_PRODUCT_MANUFACTURER;
116 model_ = DEFAULT_PRODUCT_MODEL;
117 version_ = DEFAULT_PRODUCT_SOFTWARE_VERSION;
118 Maker(mOutBuffer);
119 }
120
GetDeviceInfoData()121 GetDeviceInfoData::GetDeviceInfoData()
122 {
123 standardVersion_ = MTP_STANDARD_VERSION;
124 vendorExtensionID_ = EXTENSION_ID;
125 vendorExtensionVersion_ = MTP_STANDARD_VERSION;
126 vendorExtensionDesc_ = EXTENSION_DESC;
127 functionalMode_ = 0;
128 manufacturer_ = DEFAULT_PRODUCT_MANUFACTURER;
129 model_ = DEFAULT_PRODUCT_MODEL;
130 version_ = DEFAULT_PRODUCT_SOFTWARE_VERSION;
131 serialNum_ = "0";
132 Maker(mOutBuffer);
133 }
134
~GetDeviceInfoData()135 GetDeviceInfoData::~GetDeviceInfoData()
136 {
137 }
138
Parser(const std::vector<uint8_t> & buffer,int32_t readSize)139 int GetDeviceInfoData::Parser(const std::vector<uint8_t> &buffer, int32_t readSize)
140 {
141 return MTP_SUCCESS;
142 }
143
Maker(std::vector<uint8_t> & outBuffer)144 int GetDeviceInfoData::Maker(std::vector<uint8_t> &outBuffer)
145 {
146 MtpPacketTool::PutUInt16(outBuffer, standardVersion_);
147 MtpPacketTool::PutUInt32(outBuffer, vendorExtensionID_);
148 MtpPacketTool::PutUInt16(outBuffer, vendorExtensionVersion_);
149 MtpPacketTool::PutString(outBuffer, vendorExtensionDesc_);
150 MtpPacketTool::PutUInt16(outBuffer, functionalMode_);
151 MtpPacketTool::PutAUInt16(outBuffer, Operations, sizeof(Operations) / sizeof(uint16_t));
152 MtpPacketTool::PutAUInt16(outBuffer, Events, sizeof(Events) / sizeof(uint16_t));
153 MtpPacketTool::PutAUInt16(outBuffer, DeviceProperties, sizeof(DeviceProperties) / sizeof(uint16_t));
154 MtpPacketTool::PutAUInt16(outBuffer, CaptureFormats, sizeof(CaptureFormats) / sizeof(uint16_t));
155 MtpPacketTool::PutAUInt16(outBuffer, PlaybackFormats, sizeof(PlaybackFormats) / sizeof(uint16_t));
156 MtpPacketTool::PutString(outBuffer, manufacturer_);
157 MtpPacketTool::PutString(outBuffer, model_);
158 MtpPacketTool::PutString(outBuffer, version_);
159 MtpPacketTool::PutString(outBuffer, serialNum_);
160 return MTP_SUCCESS;
161 }
162
CalculateSize()163 uint32_t GetDeviceInfoData::CalculateSize()
164 {
165 std::vector<uint8_t> tmpVar;
166
167 int res = Maker(tmpVar);
168 if (res != MTP_SUCCESS) {
169 return res;
170 }
171
172 return tmpVar.size();
173 }
174
SetManufacturer(const std::string & manufacturer)175 void GetDeviceInfoData::SetManufacturer(const std::string &manufacturer)
176 {
177 manufacturer_ = manufacturer;
178 }
179
SetModel(const std::string & model)180 void GetDeviceInfoData::SetModel(const std::string &model)
181 {
182 model_ = model;
183 }
184
SetVersion(const std::string & version)185 void GetDeviceInfoData::SetVersion(const std::string &version)
186 {
187 version_ = version;
188 }
189
SetSerialNum(const std::string & serialNum)190 void GetDeviceInfoData::SetSerialNum(const std::string &serialNum)
191 {
192 serialNum_ = serialNum;
193 }
194 } // namespace Media
195 } // namespace OHOS