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