• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 "delayed_sp_singleton.h"
22 #include "iremote_object.h"
23 #include "iusb_srv.h"
24 #include "system_ability.h"
25 #include "usb_function_manager.h"
26 #include "usb_host_manager.h"
27 #include "usb_port_manager.h"
28 #include "usb_right_manager.h"
29 #include "usb_server_event_handler.h"
30 #include "usb_server_stub.h"
31 #include "usb_service_subscriber.h"
32 #include "usbd_client.h"
33 #include "usbd_subscriber.h"
34 #include "usbd_type.h"
35 
36 namespace OHOS {
37 namespace USB {
38 class UsbService : public SystemAbility, public UsbServerStub {
39     DECLARE_SYSTEM_ABILITY(UsbService)
40     DECLARE_DELAYED_SP_SINGLETON(UsbService);
41 
42 public:
43     virtual void OnStart() override;
44     virtual void OnStop() override;
45 
IsServiceReady()46     bool IsServiceReady() const
47     {
48         return ready_;
49     }
GetHandler()50     std::shared_ptr<UsbServerEventHandler> GetHandler() const
51     {
52         return handler_;
53     }
54 
55     int32_t OpenDevice(uint8_t busNum, uint8_t devAddr) override;
56     int32_t HasRight(std::string deviceName) override;
57     int32_t RequestRight(std::string deviceName) override;
58     int32_t RemoveRight(std::string deviceName) override;
59     int32_t GetDevices(std::vector<UsbDevice> &deviceList) override;
60     int32_t GetCurrentFunctions(int32_t &funcs) override;
61     int32_t SetCurrentFunctions(int32_t funcs) override;
62     int32_t UsbFunctionsFromString(std::string funcs) override;
63     std::string UsbFunctionsToString(int32_t funcs) override;
64     int32_t GetPorts(std::vector<UsbPort> &ports) override;
65     int32_t GetSupportedModes(int32_t portId, int32_t &result) override;
66     int32_t SetPortRole(int32_t portId, int32_t powerRole, int32_t dataRole) override;
67 
68     int32_t ClaimInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t force) override;
69     int32_t ReleaseInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid) override;
70     int32_t BulkTransferRead(const UsbDev &dev, const UsbPipe &pipe, std::vector<uint8_t> &bufferData,
71         int32_t timeOut) override;
72     int32_t BulkTransferWrite(const UsbDev &dev, const UsbPipe &pipe, const std::vector<uint8_t> &bufferData,
73         int32_t timeOut) override;
74     int32_t ControlTransfer(const UsbDev &dev, const UsbCtrlTransfer &ctrl, std::vector<uint8_t> &bufferData) override;
75     int32_t SetActiveConfig(uint8_t busNum, uint8_t devAddr, uint8_t configIndex) override;
76     int32_t GetActiveConfig(uint8_t busNum, uint8_t devAddr, uint8_t &configIndex) override;
77     int32_t SetInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t altIndex) override;
78     int32_t GetRawDescriptor(uint8_t busNum, uint8_t devAddr, std::vector<uint8_t> &bufferData) override;
79     int32_t GetFileDescriptor(uint8_t busNum, uint8_t devAddr, int32_t &fd) override;
80     int32_t RequestQueue(const UsbDev &dev, const UsbPipe &pipe, const std::vector<uint8_t> &clientData,
81         const std::vector<uint8_t> &bufferData) override;
82     int32_t RequestWait(const UsbDev &dev, int32_t timeOut, std::vector<uint8_t> &clientData,
83         std::vector<uint8_t> &bufferData) override;
84     int32_t RequestCancel(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t endpointId) override;
85     int32_t Close(uint8_t busNum, uint8_t devAddr) override;
86     bool AddDevice(uint8_t busNum, uint8_t devAddr);
87     bool DelDevice(uint8_t busNum, uint8_t devAddr);
88     void UpdateUsbPort(int32_t portId, int32_t powerRole, int32_t dataRole, int32_t mode);
89     int32_t GetDeviceInfo(uint8_t busNum, uint8_t devAddr, UsbDevice &dev);
90     int32_t GetDeviceInfoDescriptor(const UsbDev &uDev, std::vector<uint8_t> &decriptor, UsbDevice &dev);
91     int32_t GetConfigDescriptor(UsbDevice &dev, std::vector<uint8_t> &decriptor);
92 
93     int32_t RegBulkCallback(const UsbDev &devInfo, const UsbPipe &pipe, const sptr<IRemoteObject> &cb) override;
94     int32_t UnRegBulkCallback(const UsbDev &devInfo, const UsbPipe &pipe) override;
95     int32_t BulkRead(const UsbDev &devInfo, const UsbPipe &pipe, sptr<Ashmem> &ashmem) override;
96     int32_t BulkWrite(const UsbDev &devInfo, const UsbPipe &pipe, sptr<Ashmem> &ashmem) override;
97     int32_t BulkCancel(const UsbDev &devInfo, const UsbPipe &pipe) override;
98 
99 private:
100     bool Init();
101     bool InitUsbd();
102     bool IsCommonEventServiceAbilityExist();
103     bool GetBundleName(std::string &bundleName);
104     bool ready_ = false;
105     int32_t commEventRetryTimes_ = 0;
106     std::mutex mutex_;
107     std::shared_ptr<UsbHostManager> usbHostManger_;
108     std::shared_ptr<UsbRightManager> usbRightManager_;
109     std::shared_ptr<UsbPortManager> usbPortManager_;
110     std::shared_ptr<AppExecFwk::EventRunner> eventRunner_;
111     std::shared_ptr<UsbServerEventHandler> handler_;
112     sptr<UsbServiceSubscriber> usbdSubscriber_;
113     std::map<std::string, PortInfo> portMap;
114 };
115 } // namespace USB
116 } // namespace OHOS
117 #endif // USBMGR_USB_SERVICE_H
118