示例#1
0
文件: ws.py 项目: Wolfrax/WS1080
    def read(self):
        data_def = self.E2PROM.read(E2PROM_START_ADDRESS, E2PROM_OFFSET)
        if data_def is None:
            self.logger.warning("read: data_def is None, returning None")
            return None

        fixed_data = util.parse_data_def(data_def)

        if fixed_data is None:
            self.logger.warning("read: wrong fixed data, length: %d, [0]: %x [1]: %x, returning None",
                                len(data_def), data_def[0], data_def[1])
            return None

        if ((fixed_data['state']['current_pos'] > E2PROM_END_ADDRESS) or
                (fixed_data['state']['current_pos'] < E2PROM_START_VARIABLE) or
                (fixed_data['state']['current_pos'] % E2PROM_CHUNK_HALF != 0)):
            self.logger.warning("read: wrong cursor value %d, returning None", fixed_data['state']['current_pos'])
            self.logger.warning("read: previous cursor value %d", self.fixedPar['state']['current_pos'])
            return None

        if self.fixedPar['state']['current_pos'] != fixed_data['state']['current_pos']:
            old_pos = self.fixedPar['state']['current_pos']
            self.dataDef = data_def
            self.fixedPar = fixed_data

            if ((fixed_data['state']['current_pos'] - old_pos > E2PROM_CHUNK_HALF) or
                (fixed_data['state']['current_pos'] == E2PROM_START_VARIABLE and
                 old_pos != E2PROM_END_ADDRESS - E2PROM_CHUNK_HALF)):
                self.logger.warning('New pos (%d) distance not correct, previous pos (%d)',
                                    fixed_data['state']['current_pos'],
                                    self.fixedPar['state']['current_pos'])
                return None

        cursor = self.fixedPar['state']['current_pos']

        if cursor < (E2PROM_END_ADDRESS - E2PROM_CHUNK_HALF):
            buf1, buf2 = self._get(cursor)
            if buf1 is None or buf2 is None:
                self.logger.warning("read: _get (1) returned None, cursor: %d, returning None", cursor)
                return None
            rec = util.parse_ws_record(buf1)
        else:
            cursor -= E2PROM_CHUNK_HALF
            self.logger.info('get_current_record: buffer end (%d)', cursor)
            buf1, buf2 = self._get(cursor)
            if buf1 is None or buf2 is None:
                self.logger.warning("read: _get (2) returned None, cursor: %d, returning None", cursor)
                return None
            rec = util.parse_ws_record(buf2)

        ts = datetime.now()
        rec['time_str'] = ts.isoformat()
        rec['time'] = util.msecs(ts)
        rec['cursor'] = cursor

        return rec
示例#2
0
文件: ws.py 项目: Wolfrax/WS1080
    def __init__(self):
        self.logger = logging.getLogger('WS1080.WS')
        self.logger.debug('init')

        self.E2PROM = E2PROM()
        self.dataDef = self.E2PROM.read(E2PROM_START_ADDRESS, E2PROM_OFFSET)
        if self.dataDef is None:
            self.logger.warning("WS init: dataDef is None, terminating...")
            sys.exit(1)
        self.fixedPar = util.parse_data_def(self.dataDef)
        if self.fixedPar is None:
            self.logger.warning("WS init: fixedPar is None, Length: %d, [0]: %x [1]: %x, terminating...",
                                len(self.dataDef), self.dataDef[0], self.dataDef[1])
            sys.exit(1)
示例#3
0
文件: ws.py 项目: twicejr/WS1080
    def __init__(self):
        self.logger = logging.getLogger('WS1080.WS')
        self.logger.debug('init')

        self.E2PROM = E2PROM()
        self.dataDef = self.E2PROM.read(E2PROM_START_ADDRESS, E2PROM_OFFSET)
        if self.dataDef is None:
            self.logger.warning("WS init: dataDef is None, terminating...")
            sys.exit(1)
        self.fixedPar = util.parse_data_def(self.dataDef)
        if self.fixedPar is None:
            self.logger.warning(
                "WS init: fixedPar is None, Length: %d, [0]: %x [1]: %x, terminating...",
                len(self.dataDef), self.dataDef[0], self.dataDef[1])
            sys.exit(1)
示例#4
0
文件: ws.py 项目: twicejr/WS1080
    def read(self):
        data_def = self.E2PROM.read(E2PROM_START_ADDRESS, E2PROM_OFFSET)
        if data_def is None:
            self.logger.warning("read: data_def is None, returning None")
            return None

        fixed_data = util.parse_data_def(data_def)

        if fixed_data is None:
            self.logger.warning(
                "read: wrong fixed data, length: %d, [0]: %x [1]: %x, returning None",
                len(data_def), data_def[0], data_def[1])
            return None

        if ((fixed_data['state']['current_pos'] > E2PROM_END_ADDRESS)
                or (fixed_data['state']['current_pos'] < E2PROM_START_VARIABLE)
                or
            (fixed_data['state']['current_pos'] % E2PROM_CHUNK_HALF != 0)):
            self.logger.warning("read: wrong cursor value %d, returning None",
                                fixed_data['state']['current_pos'])
            self.logger.warning("read: previous cursor value %d",
                                self.fixedPar['state']['current_pos'])
            return None

        if self.fixedPar['state']['current_pos'] != fixed_data['state'][
                'current_pos']:
            old_pos = self.fixedPar['state']['current_pos']
            self.dataDef = data_def
            self.fixedPar = fixed_data

            if ((fixed_data['state']['current_pos'] - old_pos >
                 E2PROM_CHUNK_HALF) or
                (fixed_data['state']['current_pos'] == E2PROM_START_VARIABLE
                 and old_pos != E2PROM_END_ADDRESS - E2PROM_CHUNK_HALF)):
                self.logger.warning(
                    'New pos (%d) distance not correct, previous pos (%d)',
                    fixed_data['state']['current_pos'],
                    self.fixedPar['state']['current_pos'])
                return None

        cursor = self.fixedPar['state']['current_pos']

        if cursor < (E2PROM_END_ADDRESS - E2PROM_CHUNK_HALF):
            buf1, buf2 = self._get(cursor)
            if buf1 is None or buf2 is None:
                self.logger.warning(
                    "read: _get (1) returned None, cursor: %d, returning None",
                    cursor)
                return None
            rec = util.parse_ws_record(buf1)
        else:
            cursor -= E2PROM_CHUNK_HALF
            self.logger.info('get_current_record: buffer end (%d)', cursor)
            buf1, buf2 = self._get(cursor)
            if buf1 is None or buf2 is None:
                self.logger.warning(
                    "read: _get (2) returned None, cursor: %d, returning None",
                    cursor)
                return None
            rec = util.parse_ws_record(buf2)

        ts = datetime.now()
        rec['time_str'] = ts.isoformat()
        rec['time'] = util.msecs(ts)
        rec['cursor'] = cursor

        return rec