예제 #1
0
파일: hmi.py 프로젝트: EQ4/mod-ui
    def checker(self, data=None):
        if data is not None:
            logging.info('[hmi] received <- %s' % repr(data))
            try:
                msg = Protocol(data.decode())
            except ProtocolError as e:
                logging.error('[hmi] error parsing msg %s' % repr(data))
                self.reply_protocol_error(e.error_code())
            else:
                if msg.is_resp():
                    try:
                        original_msg, callback, datatype = self.queue.pop(0)
                    except IndexError:
                        # something is wrong / not synced!!
                        logging.error("[hmi] NOT SYNCED")
                    else:
                        if callback is not None:
                            logging.info("[hmi] calling callback for %s" % original_msg)
                            callback(msg.process_resp(datatype))
                        self.process_queue()
                else:
                    def _callback(resp, resp_args=None):
                        if resp_args is None:
                            self.send("resp %d" % (0 if resp else -1))
                        else:
                            self.send("resp %d %s" % (0 if resp else -1, resp_args))

                    msg.run_cmd(_callback)
        try:
            self.sp.read_until(b'\0', self.checker)
        except serial.SerialException as e:
            logging.error("[hmi] error while reading %s" % e)
예제 #2
0
파일: hmi.py 프로젝트: unbracketed/mod-ui
    def checker(self, data=None):
        if data is not None:
            logging.info('[hmi] received <- %s' % repr(data))
            try:
                msg = Protocol(data.decode("utf-8", errors="ignore"))
            except ProtocolError as e:
                logging.error('[hmi] error parsing msg %s' % repr(data))
                self.reply_protocol_error(e.error_code())
            else:
                if msg.is_resp():
                    try:
                        original_msg, callback, datatype = self.queue.pop(0)
                    except IndexError:
                        # something is wrong / not synced!!
                        logging.error("[hmi] NOT SYNCED")
                    else:
                        if callback is not None:
                            logging.info("[hmi] calling callback for %s" % original_msg)
                            callback(msg.process_resp(datatype))
                        self.process_queue()
                else:
                    def _callback(resp, resp_args=None):
                        if resp_args is None:
                            self.send("resp %d" % (0 if resp else -1))
                        else:
                            self.send("resp %d %s" % (0 if resp else -1, resp_args))

                    msg.run_cmd(_callback)
        try:
            self.sp.read_until(b'\0', self.checker)
        except serial.SerialException as e:
            logging.error("[hmi] error while reading %s" % e)
예제 #3
0
    def checker(self, data=None):
        ioloop = IOLoop.instance()

        if data is not None and data != b'\0':
            self.last_write_time = 0
            logging.debug('[hmi] received <- %s', data)
            try:
                msg = Protocol(data.decode("utf-8", errors="ignore"))
            except ProtocolError as e:
                logging.error('[hmi] error parsing msg %s', data)
                logging.error('[hmi]   error code %s', e.error_code())
                self.reply_protocol_error(e.error_code())
            else:
                # reset timeout checks when a message is received
                self.need_flush = 0
                if self.flush_io is not None:
                    ioloop.remove_timeout(self.flush_io)
                    self.flush_io = None

                if msg.is_resp():
                    try:
                        original_msg, callback, datatype = self.queue.pop(0)
                        logging.debug("[hmi] popped from queue: %s", original_msg)
                    except IndexError:
                        # something is wrong / not synced!!
                        logging.error("[hmi] NOT SYNCED")
                    else:
                        if callback is not None:
                            logging.debug("[hmi] calling callback for %s", original_msg)
                            callback(msg.process_resp(datatype))
                        self.process_queue()
                else:
                    def _callback(resp, resp_args=None):
                        resp = 0 if resp else -1
                        if resp_args is None:
                            self.send_reply("%s %d" % (CMD_RESPONSE, resp))
                            logging.debug('[hmi]     sent "resp %s"', resp)

                        else:
                            self.send_reply("%s %d %s" % (CMD_RESPONSE, resp, resp_args))
                            logging.debug('[hmi]     sent "resp %s %s"', resp, resp_args)

                        self.handling_response = False
                        if self.queue_idle:
                            self.process_queue()

                    self.handling_response = True
                    msg.run_cmd(_callback)

        if self.need_flush != 0:
            if self.flush_io is not None:
                ioloop.remove_timeout(self.flush_io)
            self.flush_io = ioloop.call_later(self.timeout/2, self.flush)

        try:
            self.sp.read_until(b'\0', self.checker)
        except serial.SerialException as e:
            logging.error("[hmi] error while reading %s", e)
예제 #4
0
    def checker(self, data=None):
        if data is not None:
            self.last_write_time = 0
            logging.debug('[hmi] received <- %s', data)
            try:
                msg = Protocol(data.decode("utf-8", errors="ignore"))
            except ProtocolError as e:
                logging.error('[hmi] error parsing msg %s', data)
                logging.error('[hmi]   error code %s', e.error_code())
                self.reply_protocol_error(e.error_code())
            else:
                if msg.is_resp():
                    try:
                        original_msg, callback, datatype = self.queue.pop(0)
                        logging.debug("[hmi] popped from queue: %s",
                                      original_msg)
                    except IndexError:
                        # something is wrong / not synced!!
                        logging.error("[hmi] NOT SYNCED")
                    else:
                        if callback is not None:
                            logging.debug("[hmi] calling callback for %s",
                                          original_msg)
                            callback(msg.process_resp(datatype))
                        self.process_queue()
                else:

                    def _callback(resp, resp_args=None):
                        resp = 0 if resp else -1
                        if resp_args is None:
                            self.send("resp %d" % resp, None)
                            logging.debug('[hmi]     sent "resp %s"', resp)

                        else:
                            self.send("resp %d %s" % (resp, resp_args), None)
                            logging.debug('[hmi]     sent "resp %s %s"', resp,
                                          resp_args)

                    msg.run_cmd(_callback)

        if self.need_flush != 0:
            if self.flush_io is not None:
                self.ioloop.remove_timeout(self.flush_io)
            self.flush_io = self.ioloop.call_later(2, self.flush)

        try:
            self.sp.read_until(b'\0', self.checker)
        except serial.SerialException as e:
            logging.error("[hmi] error while reading %s", e)