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