• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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