def add_usb_controller(self, name, type_p):
        """Adds a new USB controller to the machine and returns it as an instance of
        :py:class:`IUSBController` .

        in name of type str

        in type_p of type :class:`USBControllerType`

        return controller of type :class:`IUSBController`

        raises :class:`VBoxErrorObjectInUse`
            A USB controller with given type exists already.
        
        raises :class:`OleErrorInvalidarg`
            Invalid @a controllerType.
        
        """
        if not isinstance(name, basestring):
            raise TypeError("name can only be an instance of type basestring")
        if not isinstance(type_p, USBControllerType):
            raise TypeError("type_p can only be an instance of type USBControllerType")
        controller = self._call("addUSBController",
                     in_p=[name, type_p])
        controller = IUSBController(controller)
        return controller
Adds a new USB controller to the machine and returns it as an instance of
        :py:class:`IUSBController` .

        in name of type str

        in type_p of type :class:`USBControllerType`

        return controller of type :class:`IUSBController`

        raises :class:`VBoxErrorObjectInUse`
            A USB controller with given type exists already.
        
        raises :class:`OleErrorInvalidarg`
            Invalid @a controllerType.