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_SERVER_PROXY_H
17 #define USBMGR_USB_SERVER_PROXY_H
18 
19 #include <map>
20 #include <string>
21 #include "iremote_proxy.h"
22 #include "iusb_srv.h"
23 #include "nocopyable.h"
24 #include "usb_device.h"
25 #include "usb_interface_type.h"
26 #include "usb_service_ipc_interface_code.h"
27 
28 namespace OHOS {
29 namespace USB {
30 class UsbServerProxy : public IRemoteProxy<IUsbSrv> {
31 public:
UsbServerProxy(const sptr<IRemoteObject> & impl)32     explicit UsbServerProxy(const sptr<IRemoteObject> &impl) : IRemoteProxy<IUsbSrv>(impl) {}
33     ~UsbServerProxy() = default;
34     DISALLOW_COPY_AND_MOVE(UsbServerProxy);
35 
36     int32_t GetDevices(std::vector<UsbDevice> &deviceList) override;
37     int32_t OpenDevice(uint8_t busNum, uint8_t devAddr) override;
38     bool HasRight(std::string deviceName) override;
39     int32_t RequestRight(std::string deviceName) override;
40     int32_t RemoveRight(std::string deviceName) override;
41     int32_t GetCurrentFunctions(int32_t &funcs) override;
42     int32_t SetCurrentFunctions(int32_t funcs) override;
43     int32_t UsbFunctionsFromString(std::string_view funcs) override;
44     std::string UsbFunctionsToString(int32_t funcs) override;
45     int32_t GetPorts(std::vector<UsbPort> &ports) override;
46     int32_t GetSupportedModes(int32_t portId, int32_t &supportedModes) override;
47     int32_t SetPortRole(int32_t portId, int32_t powerRole, int32_t dataRole) override;
48 
49     int32_t ClaimInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t force) override;
50     int32_t ReleaseInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid) override;
51     int32_t BulkTransferRead(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
52         std::vector<uint8_t> &bufferData, int32_t timeOut) override;
53     int32_t BulkTransferReadwithLength(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
54         int32_t length, std::vector<uint8_t> &bufferData, int32_t timeOut) override;
55     int32_t BulkTransferWrite(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
56         const std::vector<uint8_t> &bufferData, int32_t timeOut) override;
57 
58     int32_t ControlTransfer(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbCtrlTransfer &ctrl,
59         std::vector<uint8_t> &bufferData) override;
60     int32_t UsbControlTransfer(const HDI::Usb::V1_0::UsbDev &dev,
61         const HDI::Usb::V1_1::UsbCtrlTransferParams &ctrlParams, std::vector<uint8_t> &bufferData) override;
62     int32_t SetActiveConfig(uint8_t busNum, uint8_t devAddr, uint8_t configIndex) override;
63     int32_t GetActiveConfig(uint8_t busNum, uint8_t devAddr, uint8_t &configIndex) override;
64     int32_t SetInterface(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t altIndex) override;
65     int32_t GetRawDescriptor(uint8_t busNum, uint8_t devAddr, std::vector<uint8_t> &bufferData) override;
66     int32_t GetFileDescriptor(uint8_t busNum, uint8_t devAddr, int32_t &fd) override;
67     int32_t RequestQueue(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
68         const std::vector<uint8_t> &clientData, const std::vector<uint8_t> &bufferData) override;
69     int32_t RequestWait(const HDI::Usb::V1_0::UsbDev &dev, int32_t timeOut, std::vector<uint8_t> &clientData,
70         std::vector<uint8_t> &bufferData) override;
71     int32_t RequestCancel(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, uint8_t endpointId) override;
72     int32_t Close(uint8_t busNum, uint8_t devAddr) override;
73 
74     int32_t RegBulkCallback(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
75         const sptr<IRemoteObject> &cb) override;
76     int32_t UnRegBulkCallback(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe) override;
77     int32_t BulkRead(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
78         sptr<Ashmem> &ashmem) override;
79     int32_t BulkWrite(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe,
80         sptr<Ashmem> &ashmem) override;
81     int32_t BulkCancel(const HDI::Usb::V1_0::UsbDev &dev, const HDI::Usb::V1_0::UsbPipe &pipe) override;
82     int32_t AddRight(const std::string &bundleName, const std::string &deviceName) override;
83     int32_t AddAccessRight(const std::string &tokenId, const std::string &deviceName) override;
84     int32_t ManageGlobalInterface(bool disable) override;
85     int32_t ManageDevice(int32_t vendorId, int32_t productId, bool disable) override;
86     int32_t ManageInterfaceType(const std::vector<UsbDeviceType> &disableType, bool disable) override;
87     int32_t GetDeviceSpeed(uint8_t busNum, uint8_t devAddr, uint8_t &speed) override;
88     int32_t GetInterfaceActiveStatus(uint8_t busNum, uint8_t devAddr, uint8_t interfaceid, bool &unactivated) override;
89     int32_t AddAccessoryRight(const uint32_t tokenId, const USBAccessory &access) override;
90     int32_t HasAccessoryRight(const USBAccessory &access, bool &result) override;
91     int32_t RequestAccessoryRight(const USBAccessory &access, bool &result) override;
92     int32_t CancelAccessoryRight(const USBAccessory &access) override;
93     int32_t GetAccessoryList(std::vector<USBAccessory> &accessList) override;
94     int32_t OpenAccessory(const USBAccessory &access, int32_t &fd) override;
95     int32_t CloseAccessory(int32_t fd) override;
96 private:
97     static inline BrokerDelegator<UsbServerProxy> delegator_;
98     int32_t ParseUsbPort(MessageParcel &reply, std::vector<UsbPort> &result);
99     int32_t SetDeviceMessage(MessageParcel &data, uint8_t busNum, uint8_t devAddr);
100     int32_t SetBufferMessage(MessageParcel &data, const std::vector<uint8_t> &bufferData);
101     int32_t GetBufferMessage(MessageParcel &data, std::vector<uint8_t> &bufferData);
102     int32_t GetDeviceListMessageParcel(MessageParcel &data, std::vector<UsbDevice> &deviceList);
103     int32_t GetDeviceMessageParcel(MessageParcel &data, UsbDevice &devInfo);
104     int32_t GetDeviceConfigsMessageParcel(MessageParcel &data, std::vector<USBConfig> &configs);
105     int32_t GetDeviceInterfacesMessageParcel(MessageParcel &data, std::vector<UsbInterface> &interfaces);
106     int32_t GetDeviceEndpointsMessageParcel(MessageParcel &data, std::vector<USBEndpoint> &eps);
107     int32_t GetAccessoryListMessageParcel(MessageParcel &data, std::vector<USBAccessory> &accessoryList);
108     int32_t GetAccessoryMessageParcel(MessageParcel &data, USBAccessory &accessoryInfo);
109     int32_t SetAccessoryMessageParcel(const USBAccessory &accessoryInfo, MessageParcel &data);
110     bool ReadFileDescriptor(MessageParcel &data, int &fd);
111 };
112 } // namespace USB
113 } // namespace OHOS
114 
115 #endif // USBMGR_USB_SERVER_PROXY_H
116