Esempio n. 1
0
 def send(self, name, packet, *args):
     if self._symmetrical:
         namedArgs = dict()
         names = list(packet['args'])
         for i in range(len(args)):
             namedArgs[names[i]] = args[i]
         symmetrical(self._proto_name, name, namedArgs)
         args = list(map(lambda x: namedArgs[x], namedArgs))
     formats = list(map(lambda x: packet['args'][x], list(packet['args'])))
     encode(self._stream, packet['id'], list(zip(args, formats)))
Esempio n. 2
0
 def recv(id, args):
     if id == -1:
         callback(None, args)
         return
     if self._proto == None:
         if id == 255:
             if len(args) != 1:
                 self._logger.warning("invalid arguments count for id %d" %id)
                 return
             board = args[0]
             for proto_name in self._protos:
                 proto = self._protos[proto_name]
                 if proto["id"] == board:
                     self._proto = proto
                     self._proto_name = proto_name.lower()
                     self.logger.info("Loading proto '%s'" %proto_name)
                     recv(id, args)
             if self._proto == None:
                 self._logger.warning("unknow board %d" %board)
         else:
             self._logger.info("no protocol loaded, can't decode id %d" %id)
     else:
         know_packet = False
         for packet_name in self._proto['packets']:
             packet = self._proto['packets'][packet_name]
             if packet['id'] == id:
                 know_packet = True
                 break
         if not know_packet:
             self._logger.warning("unknow packet id %d" %id)
             return
         if packet['transmitter'] == transmitter and packet['transmitter'] != 'both' and transmitter != 'both':
             self._logger.info("ignoring %s message" %packet['transmitter'])
             return
         if len(packet['args']) != len(args) \
                 and len(packet['args']) + 2 != len(args):
             self._logger.warning("packet with id %d expected " \
                     "%d arguments, %d was given"
                     %(id, len(packet['args']), len(args)))
             return
         arguments = dict(zip(packet['args'], args))
         if len(args) == len(packet['args']) + 2:
             arguments['timestamp'] = args[-2]
             arguments['microseconds'] = args[-1]
         if self._symmetrical:
             symmetrical(self._proto_name, packet_name, arguments)
         callback(packet_name, arguments)