Subversion Repositories freemyipod

Rev

Rev 587 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 587 Rev 588
Line 279... Line 279...
279
        addr = self.malloc(len(data))
279
        addr = self.malloc(len(data))
280
        self.write(addr, data)
280
        self.write(addr, data)
281
        return addr
281
        return addr
282
    
282
    
283
    @command()
283
    @command()
284
    def readstring(self, addr, maxlength = 256):
284
    def readstring(self, addr, maxlength = 256, replacement = "."):
285
        """ Reads a zero terminated string from memory 
285
        """ Reads a zero terminated string from memory 
286
            Reads only a maximum of 'maxlength' chars.
286
            Reads only a maximum of 'maxlength' chars.
287
        """
287
        """
-
 
288
	if addr == 0: return "<NULL>"
288
        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
289
        cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
289
        string = ""
290
        string = ""
-
 
291
	done = False
290
        while (len(string) < maxlength or maxlength < 0):
292
        while not done and (len(string) < maxlength or maxlength < 0):
291
            data = self._readmem(addr, min(maxlength - len(string), cin_maxsize))
293
            data = self._readmem(addr, min(maxlength - len(string), cin_maxsize))
292
            length = data.find(b"\0")
294
            length = data.find(b"\0")
293
            if length >= 0:
295
            if length >= 0:
294
                string += data[:length].decode("latin_1")
296
	        data = data[:length]
-
 
297
		done = True
295
                break
298
	    for i in range(len(data)):
296
            else:
299
	        byte = ord(data[i : i + 1])
-
 
300
	        if byte < 0x20: string = string + replacement
297
                string += data.decode("latin_1")
301
                else: string = string + chr(byte)
298
            addr += cin_maxsize
302
            addr += cin_maxsize
299
        return string
303
        return string
300
    
304
    
301
    @command()
305
    @command()
302
    def i2cread(self, index, slaveaddr, startaddr, size):
306
    def i2cread(self, index, slaveaddr, startaddr, size):