• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 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 
16 #ifndef USBMGR_USB_SERVICE_H
17 #define USBMGR_USB_SERVICE_H
18 
19 #include <map>
20 #include <vector>
21 #include <unordered_map>
22 #include <iostream>
23 #include <chrono>
24 #include <mutex>
25 #include <thread>
26 
27 #include "delayed_sp_singleton.h"
28 #include "iremote_object.h"
29 #include "iusb_srv.h"
30 #include "usb_interface_type.h"
31 #include "system_ability.h"
32 #include "system_ability_status_change_stub.h"
33 #include "timer.h"
34 #include "usb_device_manager.h"
35 #include "usb_accessory_manager.h"
36 #include "usb_host_manager.h"
37 #include "usb_port_manager.h"
38 #include "usb_right_manager.h"
39 #include "usb_server_stub.h"
40 #include "usb_service_subscriber.h"
41 #include "usbd_type.h"
42 #include "usb_serial_type.h"
43 #include "v1_2/iusb_interface.h"
44 #include "v1_0/iusbd_bulk_callback.h"
45 #include "v1_0/iusbd_subscriber.h"
46 #include "v1_1/usb_types.h"
47 #include "serial_manager.h"
48 #include "v1_2/usb_types.h"
49 #include "usbd_bulkcallback_impl.h"
50 #include "usb_bulk_trans_data.h"
51 #ifdef USB_MANAGER_PASS_THROUGH
52 #include "v2_0/iusb_host_interface.h"
53 #endif // USB_MANAGER_PASS_THROUGH
54 
55 namespace OHOS {
56 namespace USB {
57 const std::string USB_HOST = "usb_host";
58 const std::string USB_DEVICE = "usb_device";
59 const std::string USB_PORT = "usb_port";
60 const std::string USB_HELP = "-h";
61 const std::string USB_LIST = "-l";
62 const std::string USB_GETT = "-g";
63 const int32_t ERRCODE_NEGATIVE_ONE = -1;
64 const int32_t ERRCODE_NEGATIVE_TWO = -2;
65 const int32_t ERRCODE_NEGATIVE_FOUR = -4;
66 const int32_t ERRCODE_NEGATIVE_ELEVEN = -11;
67 const int32_t ERRCODE_NEGATIVE_TWELVE = -12;
68 const int32_t IO_ERROR = -1;
69 const int32_t INVALID_PARAM = -2;
70 const int32_t NO_DEVICE = -4;
71 const int32_t NO_MEM = -11;
72 const int32_t NOT_SUPPORT = -12;
73 class UsbService : public SystemAbility, public UsbServerStub {
74     DECLARE_SYSTEM_ABILITY(UsbService)
75     DECLARE_DELAYED_SP_SINGLETON(UsbService);
76 
77 public:
78     enum UnLoadSaType { UNLOAD_SA_DELAY, UNLOAD_SA_IMMEDIATELY };
79     void OnStart() override;
80     void OnStop() override;
81     int Dump(int fd, const std::vector<std::u16string> &args) override;
82 
IsServiceReady()83     bool IsServiceReady() const
84     {
85         return ready_;
86     }
87     static sptr<UsbService> GetGlobalInstance();
88 #ifndef USB_MANAGER_PASS_THROUGH
89     int32_t SetUsbd(const sptr<HDI::Usb::V1_2::IUsbInterface> &usbd);
90 #endif // USB_MANAGER_PASS_THROUGH
91     int32_t CheckSysApiPermission();
92     int32_t GetHapApiVersion();
93     void UnLoadSelf(UnLoadSaType type);
94     int32_t DeviceEvent(const HDI::Usb::V1_0::USBDeviceInfo &info);
95 #ifdef USB_MANAGER_FEATURE_HOST
96     int32_t OpenDevice(uint8_t busNum, uint8_t devAddr) override;
97     int32_t Close(uint8_t busNum, uint8_t devAddr) override;
98     int32_t ResetDevice(uint8_t busNum, uint8_t devAddr) override;
99     int32_t ClaimInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t force) override;
100     int32_t SetInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t altIndex) override;
101     int32_t ReleaseInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid) override;
102     int32_t SetActiveConfig(uint8_t busNum, uint8_t devAddr, uint8_t configIndex) override;
103     int32_t ManageGlobalInterface(bool disable) override;
104     int32_t ManageDevice(int32_t vendorId, int32_t productId, bool disable) override;
105     int32_t ManageInterfaceType(const std::vector<UsbDeviceTypeInfo> &devTypeInfo, bool disable) override;
106     int32_t UsbAttachKernelDriver(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid) override;
107     int32_t UsbDetachKernelDriver(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid) override;
108     int32_t ClearHalt(uint8_t busNum, uint8_t devAddr, uint8_t interfaceId, uint8_t endpointId) override;
109 
110     bool AddDevice(uint8_t busNum, uint8_t devAddr);
111     bool DelDevice(uint8_t busNum, uint8_t devAddr);
112     int32_t GetDevices(std::vector<UsbDevice> &deviceList) override;
113     int32_t GetDeviceInfo(uint8_t busNum, uint8_t devAddr, UsbDevice &dev);
114     int32_t GetDeviceInfoDescriptor(
115         const HDI::Usb::V1_0::UsbDev &uDev, std::vector<uint8_t> &descriptor, UsbDevice &dev);
116     int32_t GetConfigDescriptor(UsbDevice &dev, std::vector<uint8_t> &descriptor);
117     int32_t GetActiveConfig(uint8_t busNum, uint8_t devAddr, uint8_t &configIndex) override;
118     int32_t GetRawDescriptor(uint8_t busNum, uint8_t devAddr, std::vector<uint8_t> &bufferData) override;
119     int32_t GetFileDescriptor(uint8_t busNum, uint8_t devAddr, int32_t &fd) override;
120     int32_t GetDeviceSpeed(uint8_t busNum, uint8_t devAddr, uint8_t &speed) override;
121     int32_t GetInterfaceActiveStatus(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, bool &unactivated) override;
122     bool GetDeviceProductName(const std::string &deviceName, std::string &productName);
123 
124     int32_t BulkTransferRead(uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep,
125         UsbBulkTransData &bufferData, int32_t timeOut) override;
126     int32_t BulkTransferReadwithLength(uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep,
127         int32_t length, UsbBulkTransData &bufferData, int32_t timeOut) override;
128     int32_t BulkTransferWrite(uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep,
129         const UsbBulkTransData &bufferData, int32_t timeOut) override;
130     int32_t ControlTransfer(uint8_t busNum, uint8_t devAddr, const UsbCtlSetUp& ctrlParams,
131         std::vector<uint8_t> &bufferData) override;
132     int32_t UsbControlTransfer(uint8_t busNum, uint8_t devAddr,
133         const UsbCtlSetUp& ctrlParams, std::vector<uint8_t> &bufferData) override;
134     int32_t RequestQueue(uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep,
135         const std::vector<uint8_t> &clientData, const std::vector<uint8_t> &bufferData) override;
136     int32_t RequestWait(uint8_t busNum, uint8_t devAddr, int32_t timeOut, std::vector<uint8_t> &clientData,
137         std::vector<uint8_t> &bufferData) override;
138     int32_t RequestCancel(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t endpointId) override;
139     int32_t UsbCancelTransfer(uint8_t busNum, uint8_t devAddr, int32_t endpoint) override;
140     int32_t UsbSubmitTransfer(uint8_t busNum, uint8_t devAddr, const UsbTransInfo &param,
141         const sptr<IRemoteObject> &cb, int32_t fd, int32_t memSize) override;
142     int32_t RegBulkCallback(uint8_t busNum, uint8_t devAddr, const USBEndpoint& ep,
143             const sptr<IRemoteObject> &cb) override;
144     int32_t UnRegBulkCallback(uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep) override;
145     int32_t BulkRead(
146         uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep, int32_t fd, int32_t memSize) override;
147     int32_t BulkWrite(
148         uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep, int32_t fd, int32_t memSize) override;
149     int32_t BulkCancel(uint8_t busNum, uint8_t devAddr, const USBEndpoint &ep) override;
150 
151     bool CheckDevicePermission(uint8_t busNum, uint8_t devAddr);
152     bool HasRight(const std::string &deviceName);
153     int32_t HasRight(const std::string &deviceName, bool &hasRight) override;
154     int32_t RequestRight(const std::string &deviceName) override;
155     int32_t RemoveRight(const std::string &deviceName) override;
156     int32_t AddRight(const std::string &bundleName, const std::string &deviceName) override;
157     int32_t AddAccessRight(const std::string &tokenId, const std::string &deviceName) override;
158 #endif // USB_MANAGER_FEATURE_HOST
159 #ifdef USB_MANAGER_FEATURE_DEVICE
160     int32_t GetCurrentFunctions(int32_t &funcs) override;
161     int32_t SetCurrentFunctions(int32_t funcs) override;
162     int32_t UsbFunctionsFromString(const std::string &funcs, int32_t &funcResult) override;
163     int32_t UsbFunctionsToString(int32_t funcs, std::string& funcResult) override;
164     void UpdateDeviceState(int32_t status);
165 
166     int32_t UserChangeProcess();
167     int32_t GetAccessoryList(std::vector<USBAccessory> &accessList) override;
168     int32_t OpenAccessory(const USBAccessory &access, int32_t &fd) override;
169     int32_t CloseAccessory(int32_t fd) override;
170     int32_t AddAccessoryRight(const uint32_t tokenId, const USBAccessory &access) override;
171     int32_t HasAccessoryRight(const USBAccessory &access, bool &result) override;
172     int32_t RequestAccessoryRight(const USBAccessory &access, bool &result) override;
173     int32_t CancelAccessoryRight(const USBAccessory &access) override;
174     bool InitSettingsDataHdcStatus();
175     bool SetSettingsDataHdcStatus(int32_t func_uint);
176 #endif // USB_MANAGER_FEATURE_DEVICE
177 #ifdef USB_MANAGER_FEATURE_PORT
178     int32_t GetPorts(std::vector<UsbPort> &ports) override;
179     int32_t GetSupportedModes(int32_t portId, int32_t &result) override;
180     int32_t SetPortRole(int32_t portId, int32_t powerRole, int32_t dataRole) override;
181     void UpdateUsbPort(int32_t portId, int32_t powerRole, int32_t dataRole, int32_t mode);
182     void UpdateUsbPort(int32_t portId, int32_t powerRole, int32_t dataRole, int32_t mode, int32_t supportedModes);
183 #endif // USB_MANAGER_FEATURE_PORT
184 
185     int32_t SerialOpen(int32_t portId, const sptr<IRemoteObject> &serialRemote) override;
186     int32_t SerialClose(int32_t portId) override;
187     int32_t SerialRead(int32_t portId, std::vector<uint8_t>& data, uint32_t size,
188         uint32_t &actualSize, uint32_t timeout) override;
189     int32_t SerialWrite(int32_t portId, const std::vector<uint8_t>& data, uint32_t size,
190         uint32_t &actualSize, uint32_t timeout) override;
191     int32_t SerialGetAttribute(int32_t portId, UsbSerialAttr& attribute) override;
192     int32_t SerialSetAttribute(int32_t portId, const UsbSerialAttr& attribute) override;
193     int32_t SerialGetPortList(std::vector<UsbSerialPort>& serialPortList) override;
194     int32_t HasSerialRight(int32_t portId, bool &hasRight) override;
195     int32_t AddSerialRight(uint32_t tokenId, int32_t portId) override;
196     int32_t CancelSerialRight(int32_t portId) override;
197     int32_t RequestSerialRight(int32_t portId, bool &hasRight) override;
198 
199 private:
200     void SerialAttributeChange(const UsbSerialAttr &serialAttr,
201         OHOS::HDI::Usb::Serial::V1_0::SerialAttribute& attribute);
202     void SerialAttributeChange(UsbSerialAttr &serialAttr,
203         OHOS::HDI::Usb::Serial::V1_0::SerialAttribute& attribute);
204     void SerialPortChange(std::vector<UsbSerialPort> &serialInfoList,
205         std::vector<OHOS::HDI::Usb::Serial::V1_0::SerialPort>& serialPortLis);
206 #ifdef USB_MANAGER_PASS_THROUGH
207     class SystemAbilityStatusChangeListener : public SystemAbilityStatusChangeStub {
208     public:
209         explicit SystemAbilityStatusChangeListener(sptr<UsbManagerSubscriber> usbManagerSubscriber);
210         ~SystemAbilityStatusChangeListener() = default;
211         void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override;
212         void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override;
213 
214     private:
215         sptr<UsbManagerSubscriber> usbManagerSubscriber_;
216     };
217 #else
218     class SystemAbilityStatusChangeListener : public SystemAbilityStatusChangeStub {
219     public:
220         explicit SystemAbilityStatusChangeListener(sptr<UsbServiceSubscriber> usbdSubscriber);
221         ~SystemAbilityStatusChangeListener() = default;
222         void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override;
223         void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override;
224 
225     private:
226         sptr<UsbServiceSubscriber> usbdSubscriber_;
227     };
228 #endif // USB_MANAGER_PASS_THROUGH
229 
230     class UsbdDeathRecipient : public IRemoteObject::DeathRecipient {
231     public:
232         void OnRemoteDied(const wptr<IRemoteObject> &object) override;
233     };
234 
235     class SerialDeathRecipient : public IRemoteObject::DeathRecipient {
236     public:
SerialDeathRecipient(UsbService * service,int32_t portId,uint32_t tokenId)237         SerialDeathRecipient(UsbService *service, int32_t portId, uint32_t tokenId)
238             : service_(service), portId_(portId), tokenId_(tokenId){};
~SerialDeathRecipient()239         ~SerialDeathRecipient() {};
240         void OnRemoteDied(const wptr<IRemoteObject> &object) override;
241     private:
242         UsbService *service_;
243         int32_t portId_;
244         uint32_t tokenId_;
245     };
246 
247 private:
248     bool Init();
249     bool InitUsbd();
250     bool IsCommonEventServiceAbilityExist();
251     bool GetBundleName(std::string &bundleName);
252     bool IsNotNeedUnload();
253     void WaitUsbdService();
254     int32_t PreCallFunction();
255     int32_t InitUsbRight();
256     bool IsCallerValid();
257     void DumpHelp(int32_t fd);
258     void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override;
259     bool InitSerial();
260     int32_t GetDeviceVidPidSerialNumber(int32_t portId, std::string& deviceName, std::string& strDesc);
261     void UpdateDeviceVidPidMap(std::vector<OHOS::HDI::Usb::Serial::V1_0::SerialPort>& serialPortList);
262     bool DoDump(int fd, const std::vector<std::string> &argList);
263     void FreeTokenId(int32_t portId, uint32_t tokenId);
264     int32_t ValidateUsbSerialManagerAndPort(int32_t portId);
265     int32_t CheckDbAbility(int32_t portId);
266     void ReportUsbOperationFaultSysEvent(const std::string &operationType, int32_t failReason,
267         const std::string &failDescription);
268     void ReportUsbSerialOperationSysEvent(int32_t portId, const std::string &operationType);
269     void ReportUsbSerialOperationFaultSysEvent(int32_t portId, const std::string &operationType, int32_t failReason,
270         const std::string &failDescription);
271 #ifdef USB_MANAGER_FEATURE_HOST
272     bool GetBundleInfo(std::string &tokenId, int32_t &userId);
273     void UsbCtrlTransferChange(HDI::Usb::V1_0::UsbCtrlTransfer &param, const UsbCtlSetUp &ctlSetup);
274     void UsbCtrlTransferChange(HDI::Usb::V1_2::UsbCtrlTransferParams &param, const UsbCtlSetUp &ctlSetup);
275     void UsbDeviceTypeChange(std::vector<UsbDeviceType> &disableType,
276         const std::vector<UsbDeviceTypeInfo> &deviceTypes);
277     void UsbTransInfoChange(HDI::Usb::V1_2::USBTransferInfo &info, const UsbTransInfo &param);
278     std::string GetDeviceVidPidSerialNumber(const std::string &deviceName);
279     int32_t GetDeviceVidPidSerialNumber(const std::string &deviceName, std::string& strDesc);
280 #endif // USB_MANAGER_FEATURE_HOST
281 #if defined(USB_MANAGER_FEATURE_HOST) || defined(USB_MANAGER_FEATURE_DEVICE)
282     bool GetCallingInfo(std::string &bundleName, std::string &tokenId, int32_t &userId);
283 #endif // USB_MANAGER_FEATURE_HOST || USB_MANAGER_FEATURE_DEVICE
284     bool ready_ = false;
285     int32_t commEventRetryTimes_ = 0;
286     std::mutex mutex_;
287     std::mutex serialPidVidMapMutex_;
288 #ifdef USB_MANAGER_FEATURE_HOST
289     std::shared_ptr<UsbHostManager> usbHostManager_;
290 #endif // USB_MANAGER_FEATURE_HOST
291 #ifdef USB_MANAGER_FEATURE_DEVICE
292     std::shared_ptr<UsbDeviceManager> usbDeviceManager_;
293     std::shared_ptr<UsbAccessoryManager> usbAccessoryManager_;
294 #endif // USB_MANAGER_FEATURE_DEVICE
295 #ifdef USB_MANAGER_FEATURE_PORT
296     std::shared_ptr<UsbPortManager> usbPortManager_;
297 #endif // USB_MANAGER_FEATURE_PORT
298     std::shared_ptr<UsbRightManager> usbRightManager_;
299     sptr<UsbServiceSubscriber> usbdSubscriber_;
300 #ifdef USB_MANAGER_PASS_THROUGH
301     sptr<UsbManagerSubscriber> usbManagerSubscriber_;
302 #endif // USB_MANAGER_PASS_THROUGH
303     std::shared_ptr<SERIAL::SerialManager> usbSerialManager_;
304     sptr<HDI::Usb::V1_2::IUsbInterface> usbd_ = nullptr;
305     std::map<std::string, std::string> deviceVidPidMap_;
306     std::map<int32_t, std::pair<std::string, std::string>> serialVidPidMap_;
307     sptr<OHOS::HDI::Usb::Serial::V1_0::ISerialInterface> seriald_ = nullptr;
308     Utils::Timer unloadSelfTimer_ {"unLoadTimer"};
309     uint32_t unloadSelfTimerId_ {UINT32_MAX};
310     sptr<IRemoteObject::DeathRecipient> recipient_;
311 };
312 } // namespace USB
313 } // namespace OHOS
314 #endif // USBMGR_USB_SERVICE_H
315