⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tos.py

📁 tinyos2.0版本驱动
💻 PY
📖 第 1 页 / 共 2 页
字号:
                r.append(b)        return r        def _escape(self, packet):        r = []        for b in packet:            if b == self.HDLC_FLAG_BYTE or b == self.HDLC_CTLESC_BYTE:                r.append(self.HDLC_CTLESC_BYTE)                r.append(b ^ 0x20)            else:                r.append(b)        return r        def debug(self, debug):        self._debug = debugclass SFClient:    def __init__(self, host, port, qsize=10):        self._in_queue = Queue(qsize)        self._s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        self._s.connect((host, port))        data = self._s.recv(2)        if data != 'U ':            print "Wrong handshake"        self._s.send("U ")        print "Connected"        thread.start_new_thread(self.run, ())    def run(self):        while True:            length = ord(self._s.recv(1))            data = self._s.recv(length)            data = [ord(c) for c in data][1:]            #print "Recv %d bytes" % (length), ActiveMessage(data)            if self._in_queue.full():                print "Warning: Buffer overflow"                self._in_queue.get()            p = RawPacket()            p.crc = 1            p.data = data            self._in_queue.put(p, block=False)    def read(self, timeout=0):        return self._in_queue.get()    def write(self, payload):        print "SFClient: write:", payload        if type(payload) != type([]):            # Assume this will be derived from Packet            payload = payload.payload()        payload = [0] + payload        self._s.send(chr(len(payload)))        self._s.send(''.join([chr(c) for c in payload]))        return Trueclass AM:    def __init__(self, s):        self._s = s    def read(self, timeout=0):        return ActiveMessage(self._s.read().data)    def write(self, packet, amid):        return self._s.write(ActiveMessage(packet, amid=amid))class Packet:    """    The Packet class offers a handy way to build pack and unpack    binary data based on a given pattern.    """    def _decode(self, v):        r = long(0)        for i in v:            r = (r << 8) + i        return r        def _encode(self, val, dim):        output = []        for i in range(dim):            output.append(int(val & 0xFF))            val = val >> 8        output.reverse()        return output        def __init__(self, desc, packet = None):        offset = 0        boffset = 0        sum = 0        for i in range(len(desc)-1, -1, -1):            (n, t, s) = desc[i]            if s == None:                if sum > 0:                    desc[i] = (n, t, -sum)                break            sum += s        self.__dict__['_schema'] = [(t, s) for (n, t, s) in desc]        self.__dict__['_names'] = [n for (n, t, s) in desc]        self.__dict__['_values'] = []        if type(packet) == type([]):            for (t, s) in self._schema:                if t == 'int':                    self._values.append(self._decode(packet[offset:offset + s]))                    offset += s                elif t == 'bint':                    doffset = 8 - (boffset + s)                    self._values.append((packet[offset] >> doffset) & ((1<<s) - 1))                    boffset += s                    if boffset == 8:                        offset += 1                        boffset = 0                elif t == 'string':                    self._values.append(''.join([chr(i) for i in packet[offset:offset + s]]))                    offset += s                elif t == 'blob':                    if s:                        if s > 0:                            self._values.append(packet[offset:offset + s])                            offset += s                        else:                            self._values.append(packet[offset:s])                            offset = len(packet) + s                    else:                        self._values.append(packet[offset:])        elif type(packet) == type(()):            for i in packet:                self._values.append(i)        else:            for v in self._schema:                self._values.append(None)    def __repr__(self):        return self._values.__repr__()    def __str__(self):        r = ""        for i in range(len(self._names)):            r += "%s: %s " % (self._names[i], self._values[i])        for i in range(len(self._names), len(self._values)):            r += "%s" % self._values[i]        return r#        return self._values.__str__()    # Implement the map behavior    def __getitem__(self, key):        return self.__getattr__(key)    def __setitem__(self, key, value):        self.__setattr__(key, value)    def __len__(self):        return len(self._values)    def keys(self):        return self._names    def values(self):        return self._names    # Implement the struct behavior    def __getattr__(self, name):        #print "DEBUG: __getattr__", name        if type(name) == type(0):            return self._names[name]        else:            return self._values[self._names.index(name)]    def __setattr__(self, name, value):        if type(name) == type(0):            self._values[name] = value        else:            self._values[self._names.index(name)] = value    def __ne__(self, other):        if other.__class__ == self.__class__:            return self._values != other._values        else:            return True    def __eq__(self, other):        if other.__class__ == self.__class__:            return self._values == other._values        else:            return False    def __nonzero__(self):        return True;    # Custom    def names(self):        return self._names    def sizes(self):        return self._schema    def payload(self):        r = []        boffset = 0        for i in range(len(self._schema)):            (t, s) = self._schema[i]            if t == 'int':                r += self._encode(self._values[i], s)                boffset = 0            elif t == 'bint':                doffset = 8 - (boffset + s)                if boffset == 0:                    r += [self._values[i] << doffset]                else:                    r[-1] |= self._values[i] << doffset                boffset += s                if boffset == 8:                    boffset = 0            elif self._values[i] != []:                r += self._values[i]        for i in self._values[len(self._schema):]:            r += i        return rclass RawPacket(Packet):    def __init__(self, ts = None, data = None, crc = None):        Packet.__init__(self,                        [('ts' ,  'int', 4),                         ('crc',  'int', 1),                         ('data', 'blob', None)],                        None)        self.ts = ts;        self.data = data        self.crc = crc        class AckFrame(Packet):    def __init__(self, payload = None):        Packet.__init__(self,                        [('protocol', 'int', 1),                         ('seqno',    'int', 1)],                        payload)class DataFrame(Packet):    def __init__(self, payload = None):        if payload != None and type(payload) != type([]):            # Assume is a Packet            payload = payload.payload()        Packet.__init__(self,                        [('protocol',  'int', 1),                         ('seqno',     'int', 1),                         ('dispatch',  'int', 1),                         ('data',      'blob', None)],                        payload)class NoAckDataFrame(Packet):    def __init__(self, payload = None):        if payload != None and type(payload) != type([]):            # Assume is a Packet            payload = payload.payload()        Packet.__init__(self,                        [('protocol',  'int', 1),                         ('dispatch',  'int', 1),                         ('data',      'blob', None)],                        payload)class ActiveMessage(Packet):    def __init__(self, gpacket = None, amid = 0x00, dest = 0xFFFF):        if type(gpacket) == type([]):            payload = gpacket        else:            # Assume this will be derived from Packet            payload = None        Packet.__init__(self,                        [('destination', 'int', 2),                         ('source',   'int', 2),                         ('length',   'int', 1),                         ('group',    'int', 1),                         ('type',     'int', 1),                         ('data',     'blob', None)],                        payload)        if payload == None:            self.destination = dest            self.source = 0x0000            self.group = 0x00            self.type = amid            self.data = []            if gpacket:                self.data = gpacket.payload()            self.length = len(self.data)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -