code: def watchpoint_info(self, handle=0, index=-1):
          
          if index < 0 and handle == 0:
              raise ValueError('Handle must be provided if index is not set.')
  
          wp = structs.JLinkWatchpointInfo()
          res = self._dll.JLINKARM_GetWPInfoEx(index, ctypes.byref(wp))
          if res < 0:
              raise errors.JLinkException('Failed to get watchpoint info.')
  
          for i in range(res):
              res = self._dll.JLINKARM_GetWPInfoEx(i, ctypes.byref(wp))
              if res < 0:
                  raise errors.JLinkException('Failed to get watchpoint info.')
              elif wp.Handle == handle or wp.WPUnit == index:
                  return wp
  
          return None
docs: Returns information about the specified watchpoint.
  
          Note:
            Either ``handle`` or ``index`` can be specified.  If the ``index``
            is not provided, the ``handle`` must be set, and vice-versa.  If
            both ``index`` and ``handle`` are provided, the ``index`` overrides
            the provided ``handle``.
  
          Args:
            self (JLink): the ``JLink`` instance
            handle (int): optional handle of a valid watchpoint.
            index (int): optional index of a watchpoint.
  
          Returns:
            An instance of ``JLinkWatchpointInfo`` specifying information about
            the watchpoint if the watchpoint was found, otherwise ``None``.
  
          Raises:
            JLinkException: on error.
            ValueError: if both handle and index are invalid.