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 ¶m, 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 ¶m, const UsbCtlSetUp &ctlSetup); 274 void UsbCtrlTransferChange(HDI::Usb::V1_2::UsbCtrlTransferParams ¶m, 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 ¶m); 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