| Index: embios/trunk/tools/embios.py | 
| — | — | @@ -264,19 +264,19 @@ | 
| 265 | 265 |              <infotype> may be either of 'version', 'packetsize', 'usermemrange'.
 | 
| 266 | 266 |          """
 | 
| 267 | 267 |          if infotype == "version":
 | 
| 268 |   | -            resp = self.embios.getversioninfo()
 | 
| 269 | 268 |              try:
 | 
| 270 |   | -                hwtype = libembiosdata.hwtypes[resp.hwtypeid]
 | 
|   | 269 | +                hwtype = libembiosdata.hwtypes[self.embios.lib.dev.hwtypeid]
 | 
| 271 | 270 |              except KeyError:
 | 
| 272 |   | -                hwtype = "UNKNOWN (ID = " + self._hex(resp.hwtypeid) + ")"
 | 
| 273 |   | -            self.logger.info("Connected to "+libembiosdata.swtypes[resp.swtypeid] + " v" + str(resp.majorv) + "." + str(resp.minorv) +
 | 
| 274 |   | -                             "." + str(resp.patchv) + " r" + str(resp.revision) + " running on " + hwtype + "\n")
 | 
|   | 271 | +                hwtype = "UNKNOWN (ID = " + self._hex(self.embios.lib.dev.hwtypeid) + ")"
 | 
|   | 272 | +            self.logger.info("Connected to "+libembiosdata.swtypes[self.embios.lib.dev.swtypeid] + " v" + str(self.embios.lib.dev.version.majorv) + "." + str(self.embios.lib.dev.version.minorv) +
 | 
|   | 273 | +                             "." + str(self.embios.lib.dev.version.patchv) + " r" + str(self.embios.lib.dev.version.revision) + " running on " + hwtype + "\n")
 | 
|   | 274 | +        
 | 
| 275 | 275 |          elif infotype == "packetsize":
 | 
| 276 |   | -            resp = self.embios.getpacketsizeinfo()
 | 
| 277 |   | -            self.logger.info("Maximum packet sizes: "+str(resp))
 | 
|   | 276 | +            self.logger.info("Maximum packet sizes: \n command out: " + str(self.embios.lib.dev.packetsizelimit.cout) + "\n command in: " + str(self.embios.lib.dev.packetsizelimit.cin) + "\n data in: " + str(self.embios.lib.dev.packetsizelimit.din) + "\n data out: " + str(self.embios.lib.dev.packetsizelimit.dout))
 | 
|   | 277 | +        
 | 
| 278 | 278 |          elif infotype == "usermemrange":
 | 
| 279 | 279 |              resp = self.embios.getusermemrange()
 | 
| 280 |   | -            self.logger.info("The user memory range is "+self._hex(resp.lower)+" - "+self._hex(resp.upper-1))
 | 
|   | 280 | +            self.logger.info("The user memory range is "+self._hex(self.embios.lib.dev.usermem.lower)+" - "+self._hex(self.embios.lib.dev.usermem.upper - 1))
 | 
| 281 | 281 |          else:
 | 
| 282 | 282 |              raise ArgumentTypeError("one out of 'version', 'packetsize', 'usermemrange'", infotype)
 | 
| 283 | 283 |      
 | 
| Index: embios/trunk/tools/libembios.py | 
| — | — | @@ -72,7 +72,10 @@ | 
| 73 | 73 |      """
 | 
| 74 | 74 |      def __init__(self):
 | 
| 75 | 75 |          self.lib = Lib()
 | 
|   | 76 | +        
 | 
|   | 77 | +        self.getversioninfo()
 | 
| 76 | 78 |          self.getpacketsizeinfo()
 | 
|   | 79 | +        self.getusermemrange()
 | 
| 77 | 80 |      
 | 
| 78 | 81 |      @staticmethod
 | 
| 79 | 82 |      def _alignsplit(addr, size, blksize, align):
 | 
| — | — | @@ -131,10 +134,10 @@ | 
| 132 | 135 |              It also sets the properties of the device object accordingly.
 | 
| 133 | 136 |          """
 | 
| 134 | 137 |          resp = self.lib.monitorcommand(struct.pack("IIII", 1, 1, 0, 0), "HHII", ("coutmax", "cinmax", "doutmax", "dinmax"))
 | 
| 135 |   | -        self.lib.dev.packetsizelimit['cout'] = resp.coutmax
 | 
| 136 |   | -        self.lib.dev.packetsizelimit['cin'] = resp.cinmax
 | 
| 137 |   | -        self.lib.dev.packetsizelimit['din'] = resp.dinmax
 | 
| 138 |   | -        self.lib.dev.packetsizelimit['dout'] = resp.doutmax
 | 
|   | 138 | +        self.lib.dev.packetsizelimit.cout = resp.coutmax
 | 
|   | 139 | +        self.lib.dev.packetsizelimit.cin = resp.cinmax
 | 
|   | 140 | +        self.lib.dev.packetsizelimit.din = resp.dinmax
 | 
|   | 141 | +        self.lib.dev.packetsizelimit.dout = resp.doutmax
 | 
| 139 | 142 |          return resp
 | 
| 140 | 143 |      
 | 
| 141 | 144 |      def getusermemrange(self):
 | 
| — | — | @@ -163,8 +166,8 @@ | 
| 164 | 167 |              from the device. This cares about too long packages
 | 
| 165 | 168 |              and decides whether to use DMA or not.
 | 
| 166 | 169 |          """
 | 
| 167 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
| 168 |   | -        din_maxsize = self.lib.dev.packetsizelimit["din"]
 | 
|   | 170 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
|   | 171 | +        din_maxsize = self.lib.dev.packetsizelimit.din
 | 
| 169 | 172 |          data = ""
 | 
| 170 | 173 |          (headsize, bodysize, tailsize) = self._alignsplit(addr, size, cin_maxsize, 16)
 | 
| 171 | 174 |          if headsize != 0:
 | 
| — | — | @@ -188,8 +191,8 @@ | 
| 189 | 192 |              in the memory of the device. This cares about too long packages
 | 
| 190 | 193 |              and decides whether to use DMA or not.
 | 
| 191 | 194 |          """
 | 
| 192 |   | -        cout_maxsize = self.lib.dev.packetsizelimit["cout"] - self.lib.headersize
 | 
| 193 |   | -        dout_maxsize = self.lib.dev.packetsizelimit["dout"]
 | 
|   | 195 | +        cout_maxsize = self.lib.dev.packetsizelimit.cout - self.lib.headersize
 | 
|   | 196 | +        dout_maxsize = self.lib.dev.packetsizelimit.dout
 | 
| 194 | 197 |          (headsize, bodysize, tailsize) = self._alignsplit(addr, len(data), cout_maxsize, 16)
 | 
| 195 | 198 |          offset = 0
 | 
| 196 | 199 |          if headsize != 0:
 | 
| — | — | @@ -214,7 +217,7 @@ | 
| 215 | 218 |          """ Reads a zero terminated string from memory 
 | 
| 216 | 219 |              Reads only a maximum of 'maxlength' chars.
 | 
| 217 | 220 |          """
 | 
| 218 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
|   | 221 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
| 219 | 222 |          string = ""
 | 
| 220 | 223 |          while (len(string) < maxlength or maxlength < 0):
 | 
| 221 | 224 |              data = self._readmem(addr, min(maxlength - len(string), cin_maxsize))
 | 
| — | — | @@ -246,7 +249,7 @@ | 
| 247 | 250 |      
 | 
| 248 | 251 |      def usbcread(self):
 | 
| 249 | 252 |          """ Reads one packet with the maximal cin size """
 | 
| 250 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
|   | 253 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
| 251 | 254 |          resp = self.lib.monitorcommand(struct.pack("IIII", 10, cin_maxsize, 0, 0), "III%ds" % cin_maxsize, ("validsize", "buffersize", "queuesize", "data"))
 | 
| 252 | 255 |          resp.data = resp.data[:resp.validsize]
 | 
| 253 | 256 |          resp.maxsize = cin_maxsize
 | 
| — | — | @@ -254,7 +257,7 @@ | 
| 255 | 258 |      
 | 
| 256 | 259 |      def usbcwrite(self, data):
 | 
| 257 | 260 |          """ Writes data to the USB console """
 | 
| 258 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
|   | 261 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
| 259 | 262 |          size = len(data)
 | 
| 260 | 263 |          while len(data) > 0:
 | 
| 261 | 264 |              writesize = min(cin_maxsize, len(data))
 | 
| — | — | @@ -266,7 +269,7 @@ | 
| 267 | 270 |          """ Reads one packet with the maximal cin size from the device consoles
 | 
| 268 | 271 |              identified with the specified bitmask
 | 
| 269 | 272 |          """
 | 
| 270 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
|   | 273 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
| 271 | 274 |          resp = self.lib.monitorcommand(struct.pack("IIII", 13, bitmask, cin_maxsize, 0), "III%ds" % cin_maxsize, ("size", None, None))
 | 
| 272 | 275 |          resp.data = resp.data[size:]
 | 
| 273 | 276 |          resp.maxsize = cin_maxsize
 | 
| — | — | @@ -276,7 +279,7 @@ | 
| 277 | 280 |          """ Writes data to the device consoles 
 | 
| 278 | 281 |              identified with the specified bitmask.
 | 
| 279 | 282 |          """
 | 
| 280 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
|   | 283 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
| 281 | 284 |          size = len(data)
 | 
| 282 | 285 |          while len(data) > 0:
 | 
| 283 | 286 |              writesize = min(cin_maxsize, len(data))
 | 
| — | — | @@ -290,7 +293,7 @@ | 
| 291 | 294 |      
 | 
| 292 | 295 |      def getprocinfo(self):
 | 
| 293 | 296 |          """ Gets current state of the scheduler """
 | 
| 294 |   | -        cin_maxsize = self.lib.dev.packetsizelimit["cin"] - self.lib.headersize
 | 
|   | 297 | +        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
 | 
| 295 | 298 |          # Get the size
 | 
| 296 | 299 |          schedulerstate = self.lockscheduler()
 | 
| 297 | 300 |          resp = self.lib.monitorcommand(struct.pack("IIII", 15, 0, 0, 0), "III", ("structver", "tablesize", None))
 | 
| — | — | @@ -543,12 +546,13 @@ | 
| 544 | 547 |          
 | 
| 545 | 548 |          
 | 
| 546 | 549 |          # Device properties
 | 
| 547 |   | -        self.packetsizelimit = {}
 | 
| 548 |   | -        self.packetsizelimit['cout'] = None
 | 
| 549 |   | -        self.packetsizelimit['cin'] = None
 | 
| 550 |   | -        self.packetsizelimit['dout'] = None
 | 
| 551 |   | -        self.packetsizelimit['din'] = None
 | 
|   | 550 | +        self.packetsizelimit = Bunch()
 | 
|   | 551 | +        self.packetsizelimit.cout = None
 | 
|   | 552 | +        self.packetsizelimit.cin = None
 | 
|   | 553 | +        self.packetsizelimit.dout = None
 | 
|   | 554 | +        self.packetsizelimit.din = None
 | 
| 552 | 555 |          
 | 
|   | 556 | +        self.version = Bunch()
 | 
| 553 | 557 |          self.version.revision = None
 | 
| 554 | 558 |          self.version.majorv = None
 | 
| 555 | 559 |          self.version.minorv = None
 | 
| — | — | @@ -556,6 +560,7 @@ | 
| 557 | 561 |          self.swtypeid = None
 | 
| 558 | 562 |          self.hwtypeid = None
 | 
| 559 | 563 |          
 | 
|   | 564 | +        self.usermem = Bunch()
 | 
| 560 | 565 |          self.usermem.lower = None
 | 
| 561 | 566 |          self.usermem.upper = None
 | 
| 562 | 567 |      
 | 
| — | — | @@ -564,18 +569,18 @@ | 
| 565 | 570 |      
 | 
| 566 | 571 |      def findEndpoints(self):
 | 
| 567 | 572 |          epcounter = 0
 | 
| 568 |   | -        self.endpoint = {}
 | 
|   | 573 | +        self.endpoint = Bunch()
 | 
| 569 | 574 |          for cfg in self.dev:
 | 
| 570 | 575 |              for intf in cfg:
 | 
| 571 | 576 |                  for ep in intf:
 | 
| 572 | 577 |                      if epcounter == 0:
 | 
| 573 |   | -                        self.endpoint['cout'] = ep.bEndpointAddress
 | 
|   | 578 | +                        self.endpoint.cout = ep.bEndpointAddress
 | 
| 574 | 579 |                      elif epcounter == 1:
 | 
| 575 |   | -                        self.endpoint['cin'] = ep.bEndpointAddress
 | 
|   | 580 | +                        self.endpoint.cin = ep.bEndpointAddress
 | 
| 576 | 581 |                      elif epcounter == 2:
 | 
| 577 |   | -                        self.endpoint['dout'] = ep.bEndpointAddress
 | 
|   | 582 | +                        self.endpoint.dout = ep.bEndpointAddress
 | 
| 578 | 583 |                      elif epcounter == 3:
 | 
| 579 |   | -                        self.endpoint['din'] = ep.bEndpointAddress
 | 
|   | 584 | +                        self.endpoint.din = ep.bEndpointAddress
 | 
| 580 | 585 |                      epcounter += 1
 | 
| 581 | 586 |          if epcounter <= 3:
 | 
| 582 | 587 |              raise DeviceError("Not all endpoints found in the descriptor. Only "+str(epcounter)+" found, we need 4")
 | 
| — | — | @@ -602,24 +607,24 @@ | 
| 603 | 608 |          return read
 | 
| 604 | 609 |      
 | 
| 605 | 610 |      def cout(self, data):
 | 
| 606 |   | -        if self.packetsizelimit['cout'] and len(data) > self.packetsizelimit['cout']:
 | 
|   | 611 | +        if self.packetsizelimit.cout and len(data) > self.packetsizelimit.cout:
 | 
| 607 | 612 |              raise SendError("Packet too big")
 | 
| 608 |   | -        return self.send(self.endpoint['cout'], data)
 | 
|   | 613 | +        return self.send(self.endpoint.cout, data)
 | 
| 609 | 614 |      
 | 
| 610 | 615 |      def cin(self, size):
 | 
| 611 |   | -        if self.packetsizelimit['cin'] and size > self.packetsizelimit['cin']:
 | 
|   | 616 | +        if self.packetsizelimit.cin and size > self.packetsizelimit.cin:
 | 
| 612 | 617 |              raise ReceiveError("Packet too big")
 | 
| 613 |   | -        return self.receive(self.endpoint['cin'], size)
 | 
|   | 618 | +        return self.receive(self.endpoint.cin, size)
 | 
| 614 | 619 |      
 | 
| 615 | 620 |      def dout(self, data):
 | 
| 616 |   | -        if self.packetsizelimit['dout'] and len(data) > self.packetsizelimit['dout']:
 | 
|   | 621 | +        if self.packetsizelimit.dout and len(data) > self.packetsizelimit.dout:
 | 
| 617 | 622 |              raise SendError("Packet too big")
 | 
| 618 |   | -        return self.send(self.endpoint['dout'], data)
 | 
|   | 623 | +        return self.send(self.endpoint.dout, data)
 | 
| 619 | 624 |      
 | 
| 620 | 625 |      def din(self, size):
 | 
| 621 |   | -        if self.packetsizelimit['din'] and size > self.packetsizelimit['din']:
 | 
|   | 626 | +        if self.packetsizelimit.din and size > self.packetsizelimit.din:
 | 
| 622 | 627 |              raise ReceiveError("Packet too big")
 | 
| 623 |   | -        return self.receive(self.endpoint['din'], size)
 | 
|   | 628 | +        return self.receive(self.endpoint.din, size)
 | 
| 624 | 629 |  
 | 
| 625 | 630 |  
 | 
| 626 | 631 |  if __name__ == "__main__":
 |