Subversion Repositories freemyipod

Rev

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

Rev 775 Rev 776
Line 839... Line 839...
839
            datafile = open(filenameprefix+"_data.bin", 'rb')
839
            datafile = open(filenameprefix+"_data.bin", 'rb')
840
            sparefile = open(filenameprefix+"_spare.bin", 'rb')
840
            sparefile = open(filenameprefix+"_spare.bin", 'rb')
841
        except IOError:
841
        except IOError:
842
            raise ArgumentError("Can not open input files!")
842
            raise ArgumentError("Can not open input files!")
843
        try:
843
        try:
844
            buf = self.emcore.memalign(0x10, banks * ppb * 0x844)
844
            buf = self.emcore.memalign(0x10, 0x844)
845
            for block in range(info["blocks"]):
845
            for block in range(info["blocks"]):
846
                for bank in range(info["banks"]):
846
                for bank in range(info["banks"]):
847
                    self.logger.info("\r    Erasing block %d bank %d" % (block, bank))
847
                    self.logger.info("\r    Erasing block %d bank %d         " % (block, bank))
848
                    self.emcore.ipodnano2g_nanderase(buf, block * banks + bank, 1)
848
                    self.emcore.ipodnano2g_nanderase(buf, block * banks + bank, 1)
849
                    rc = struct.unpack("<I", self.emcore.read(buf, 4))[0]
849
                    rc = struct.unpack("<I", self.emcore.read(buf, 4))[0]
850
                    if rc != 0: self.logger.info("\rBlock %d bank %d erase failed with RC %08X\n" % (block, bank, rc))
850
                    if rc != 0: self.logger.info("\rBlock %d bank %d erase failed with RC %08X\n" % (block, bank, rc))
851
                self.logger.info("\r  Uploading block %d data  " % block)
-
 
852
                self.emcore.write(buf, datafile.read(banks * ppb * 2048))
-
 
853
                self.emcore.write(buf + banks * ppb * 2048, sparefile.read(banks * ppb * 64))
-
 
854
                self.logger.info("\rProgramming block %d       " % block)
-
 
855
                self.emcore.ipodnano2g_nandwrite(buf, block * banks * ppb, banks * ppb, 0)
-
 
856
                rc = struct.unpack("<%dI" % (banks * ppb), self.emcore.read(buf + banks * ppb * 2112, banks * ppb * 4))
-
 
857
                for page in range(ppb):
851
                for page in range(ppb):
858
                  for bank in range(banks):
852
                    for bank in range(banks):
-
 
853
                        data = datafile.read(2048) + sparefile.read(64)
859
                      if rc[banks * page + bank] != 0:
854
                        if data == "\xff" * 2112: continue
-
 
855
                        self.emcore.write(buf, data)
-
 
856
                        self.logger.info("\rProgramming block %d page %d bank %d" % (block, page, bank))
-
 
857
                        self.emcore.ipodnano2g_nandwrite(buf, ((block * ppb) + page) * banks + bank, 1, 0)
-
 
858
                        rc = struct.unpack("<I", self.emcore.read(buf + 2112, 4))[0]
860
                          self.logger.info("\rBlock %d bank %d page %d programming failed with RC %08X\n" % (block, bank, page, rc[banks * page + bank]))
859
                        if rc != 0: self.logger.info("\rBlock %d bank %d page %d programming failed with RC %08X\n" % (block, bank, page, rc))
861
        finally:
860
        finally:
862
            self.emcore.free(buf)
861
            self.emcore.free(buf)
863
        datafile.close()
862
        datafile.close()
864
        sparefile.close()
863
        sparefile.close()
865
        self.logger.info("\rdone\n")
864
        self.logger.info("\ndone\n")
866
    
865
    
867
    @command
866
    @command
868
    def ipodnano2g_wipenand(self, filename, force=False):
867
    def ipodnano2g_wipenand(self, filename, force=False):
869
        """
868
        """
870
            Target-specific function: ipodnano2g
869
            Target-specific function: ipodnano2g