def close(self):
        """
        Closes the connection to the NDI Tracker and
        deletes the tracker device.

        :raises Exception: ValueError
        """
        if not self._device:
            raise ValueError('close called with no NDI device')

        if self._state == "tracking":
            self.stop_tracking()

        if self._tracker_type == "vega":
            ndicapy.ndiCloseNetwork(self._device)

        if self._tracker_type in ("aurora", "polaris"):
            ndicapy.ndiClose(self._device)

        self._device = None
        self._state = None
 def _check_for_errors(self, message):
     errnum = ndicapy.ndiGetError(self._device)
     if errnum != ndicapy.NDI_OKAY:
         ndicapy.ndiClose(self._device)
         raise IOError('error when {}. the error was: {}'.format(
             message, ndicapy.ndiErrorString(errnum)))
            break
    if result != NDI_OKAY:
        raise IOError(
            'Could not find any NDI device in '
            '{} serial port candidates checked. '
            'Please check the following:\n'
            '\t1) Is an NDI device connected to your computer?\n'
            '\t2) Is the NDI device switched on?\n'
            '\t3) Do you have sufficient privilege to connect to '
            'the device? (e.g. on Linux are you part of the "dialout" '
            'group?)'.format(MAX_SERIAL_PORTS))

    device = ndiOpen(name)
    if not device:
        raise IOError('Could not connect to NDI device found on '
                      '{}'.format(name))

    reply = ndiCommand(device, 'INIT:')
    error = ndiGetError(device)
    if reply.startswith('ERROR') or error != NDI_OKAY:
        raise IOError('Error when sending command: '
                      '{}'.format(ndiErrorString(error)))

    reply = ndiCommand(
        device, 'COMM:{:d}{:03d}{:d}'.format(NDI_115200, NDI_8N1,
                                             NDI_NOHANDSHAKE))

    # Add your own commands here!!!

    ndiClose(device)