def _serial_poller(self):
        while True:
            _next = dict(self._poller.poll(POLLING_FREQUENCY_MS))
            if self._halt_read_file.fileno() in _next:
                log.debug("Poller [{}]: halt".format(hash(self)))
                self._halt_read_file.read()
                break
            elif self._connection.fileno() in _next:
                log.debug("Poller [{}]: interrupt".format(hash(self)))
                res = self._connection.read_until(SERIAL_ACK)
                self._interrupt_callback(res)
            elif self._send_read_file.fileno() in _next:
                self._send_read_file.read(1)
                command, callback = self._command_queue.get()
                log.debug("Poller [{}]: send {}".format(hash(self), command))
                res = self._send_command(command)
                callback(res)
            else:
                log.debug("Poller [{}]: updating temp".format(hash(self)))
                res = self._send_command(GCODES['GET_PLATE_TEMP'])
                self._status_callback(res)
        log.info("Exiting TC poller loop [{}]".format(hash(self)))