Subversion Repositories freemyipod

Rev

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

Rev 452 Rev 472
Line 875... Line 875...
875
        self.logger.info("Writing %08X to volume %s sectors %X - %X..." % (addr, volume, sector, sector + count - 1))
875
        self.logger.info("Writing %08X to volume %s sectors %X - %X..." % (addr, volume, sector, sector + count - 1))
876
        self.emcore.storage_write_sectors_md(volume, sector, count, addr)
876
        self.emcore.storage_write_sectors_md(volume, sector, count, addr)
877
        self.logger.info("done\n")
877
        self.logger.info("done\n")
878
 
878
 
879
    @command
879
    @command
880
    def readrawstoragefile(self, volume, sector, count, file, buffer = False, buffsize = "100000"):
880
    def readrawstoragefile(self, volume, sector, count, file, buffsize = 100000, buffer = None):
881
        """
881
        """
882
            Reads <count> sectors starting at <sector> from storage <volume> to file <file>,
882
            Reads <count> sectors starting at <sector> from storage <volume> to file <file>,
883
            buffering them in memory at [buffer] in chunks of [buffsize] bytes (both optional).
883
            buffering them in memory at [buffer] in chunks of [buffsize] bytes (both optional).
884
        """
884
        """
885
        volume = self._hexint(volume)
885
        volume = self._hexint(volume)
886
        sector = self._hexint(sector)
886
        sector = self._hexint(sector)
887
        count = self._hexint(count)
887
        count = self._hexint(count)
888
        if buffer == False: buffer = self.emcore.lib.dev.usermem.lower
-
 
889
        else: buffer = self._hexint(buffer)
-
 
890
        buffsize = self._hexint(buffsize)
888
        buffsize = self._hexint(buffsize)
-
 
889
        if buffer is None:
-
 
890
            buffer = self.emcore.malloc(buffsize)
-
 
891
            malloc = True
-
 
892
        else:
-
 
893
            buffer = self._hexint(buffer)
-
 
894
            malloc = False
891
        try:
895
        try:
-
 
896
            try:
892
            f = open(file, 'wb')
897
                f = open(file, 'wb')
893
        except IOError:
898
            except IOError:
894
            raise ArgumentError("Could not open local file for writing.")
899
                raise ArgumentError("Could not open local file for writing.")
895
        self.logger.info("Reading volume %s sectors %X - %X to %s..." % (volume, sector, sector + count - 1, file))
900
            self.logger.info("Reading volume %s sectors %X - %X to %s..." % (volume, sector, sector + count - 1, file))
896
        storageinfo = self.emcore.storage_get_info(volume)
901
            storageinfo = self.emcore.storage_get_info(volume)
897
        while count > 0:
902
            while count > 0:
898
            sectors = min(count, int(buffsize / storageinfo.sectorsize))
903
                sectors = min(count, int(buffsize / storageinfo.sectorsize))
899
            self.emcore.storage_read_sectors_md(volume, sector, sectors, buffer)
904
                self.emcore.storage_read_sectors_md(volume, sector, sectors, buffsize, buffer)
900
            f.write(self.emcore.read(buffer, storageinfo.sectorsize * sectors))
905
                f.write(self.emcore.read(buffer, storageinfo.sectorsize * sectors))
901
            sector = sector + sectors
906
                sector = sector + sectors
902
            count = count - sectors
907
                count = count - sectors
903
        f.close()
908
            f.close()
-
 
909
        finally:
-
 
910
            if malloc == True:
-
 
911
                self.emcore.free(buffer)
904
        self.logger.info("done\n")
912
        self.logger.info("done\n")
905
 
913
 
906
    @command
914
    @command
907
    def writerawstoragefile(self, volume, sector, count, file, buffer = False, buffsize = "100000"):
915
    def writerawstoragefile(self, volume, sector, count, file, buffsize = 100000, buffer = None):
908
        """
916
        """
909
            Writes contents of <file> to <count> sectors starting at <sector> on storage <volume>,
917
            Writes contents of <file> to <count> sectors starting at <sector> on storage <volume>,
910
            buffering them in memory at [buffer] in chunks of [buffsize] bytes (both optional).
918
            buffering them in memory at [buffer] in chunks of [buffsize] bytes (both optional).
911
        """
919
        """
912
        volume = self._hexint(volume)
920
        volume = self._hexint(volume)
913
        sector = self._hexint(sector)
921
        sector = self._hexint(sector)
914
        count = self._hexint(count)
922
        count = self._hexint(count)
915
        if buffer == False: buffer = self.emcore.lib.dev.usermem.lower
-
 
916
        else: buffer = self._hexint(buffer)
-
 
917
        buffsize = self._hexint(buffsize)
923
        buffsize = self._hexint(buffsize)
-
 
924
        if buffer is None:
-
 
925
            buffer = self.emcore.malloc(buffsize)
-
 
926
            malloc = True
-
 
927
        else:
-
 
928
            buffer = self._hexint(buffer)
-
 
929
            malloc = False
918
        try:
930
        try:
-
 
931
            try:
919
            f = open(file, 'rb')
932
                f = open(file, 'rb')
920
        except IOError:
933
            except IOError:
921
            raise ArgumentError("Could not open local file for reading.")
934
                raise ArgumentError("Could not open local file for reading.")
922
        self.logger.info("Writing %s to volume %s sectors %X - %X..." % (file, volume, sector, sector + count - 1))
935
            self.logger.info("Writing %s to volume %s sectors %X - %X..." % (file, volume, sector, sector + count - 1))
923
        storageinfo = self.emcore.storage_get_info(volume)
936
            storageinfo = self.emcore.storage_get_info(volume)
924
        while count > 0:
937
            while count > 0:
925
            sectors = min(count, int(buffsize / storageinfo.sectorsize))
938
                sectors = min(count, int(buffsize / storageinfo.sectorsize))
926
            bytes = storageinfo.sectorsize * sectors
939
                bytes = storageinfo.sectorsize * sectors
927
            data = f.read(bytes)
940
                data = f.read(bytes)
928
            if len(data) == 0: break
941
                if len(data) == 0: break
929
            while len(data) < bytes: data = data + f.read(bytes - len(data))
942
                while len(data) < bytes: data = data + f.read(bytes - len(data))
930
            self.emcore.write(buffer, data)
943
                self.emcore.write(buffer, data)
931
            self.emcore.storage_write_sectors_md(volume, sector, sectors, buffer)
944
                self.emcore.storage_write_sectors_md(volume, sector, sectors, buffsize, buffer)
932
            sector = sector + sectors
945
                sector = sector + sectors
933
            count = count - sectors
946
                count = count - sectors
934
        f.close()
947
            f.close()
-
 
948
        finally:
-
 
949
            if malloc == True:
-
 
950
                self.emcore.free(buffer)
935
        self.logger.info("done\n")
951
        self.logger.info("done\n")
936
 
952
 
937
    @command
953
    @command
938
    def mkdir(self, dirname):
954
    def mkdir(self, dirname):
939
        """
955
        """
Line 987... Line 1003...
987
        self.logger.info("Renaming " + oldname + " to " + newname + "...")
1003
        self.logger.info("Renaming " + oldname + " to " + newname + "...")
988
        self.emcore.file_rename(oldname, newname)
1004
        self.emcore.file_rename(oldname, newname)
989
        self.logger.info(" done\n")
1005
        self.logger.info(" done\n")
990
 
1006
 
991
    @command
1007
    @command
992
    def get(self, remotename, localname, buffer = False, buffsize = "10000"):
1008
    def get(self, remotename, localname, buffsize = 10000, buffer = None):
993
        """
1009
        """
994
            Downloads a file
1010
            Downloads a file
995
            <remotename>: filename on the device
1011
            <remotename>: filename on the device
996
            <localname>: filename on the computer
1012
            <localname>: filename on the computer
997
            [buffer]: buffer address (optional)
-
 
998
            [buffsize]: buffer size (optional)
1013
            [buffsize]: buffer size (optional)
-
 
1014
            [buffer]: buffer address (optional)
999
        """
1015
        """
1000
        if buffer == False: buffer = self.emcore.lib.dev.usermem.lower
-
 
1001
        else: buffer = self._hexint(buffer)
-
 
1002
        buffsize = self._hexint(buffsize)
1016
        buffsize = self._hexint(buffsize)
-
 
1017
        if buffer is None:
-
 
1018
            buffer = self.emcore.malloc(buffsize)
-
 
1019
            malloc = True
-
 
1020
        else:
-
 
1021
            buffer = self._hexint(buffer)
-
 
1022
            malloc = False
1003
        try:
1023
        try:
-
 
1024
            try:
1004
            f = open(localname, 'wb')
1025
                f = open(localname, 'wb')
1005
        except IOError:
1026
            except IOError:
1006
            raise ArgumentError("Could not open local file for writing.")
1027
                raise ArgumentError("Could not open local file for writing.")
1007
        self.logger.info("Downloading file " + remotename + " to " + localname + "...")
1028
            self.logger.info("Downloading file " + remotename + " to " + localname + "...")
1008
        fd = self.emcore.file_open(remotename, 0)
1029
            fd = self.emcore.file_open(remotename, 0)
1009
        size = self.emcore.file_size(fd)
1030
            size = self.emcore.file_size(fd)
1010
        while size > 0:
1031
            while size > 0:
1011
            bytes = self.emcore.file_read(fd, buffer, buffsize)
1032
                bytes = self.emcore.file_read(fd, buffer, buffsize)
1012
            f.write(self.emcore.read(buffer, bytes))
1033
                f.write(self.emcore.read(buffer, bytes))
1013
            size = size - bytes
1034
                size = size - bytes
1014
        self.emcore.file_close(fd)
1035
            self.emcore.file_close(fd)
1015
        f.close()
1036
            f.close()
-
 
1037
        finally:
-
 
1038
            if malloc == True:
-
 
1039
                self.emcore.free(buffer)
1016
        self.logger.info(" done\n")
1040
        self.logger.info(" done\n")
1017
 
1041
 
1018
    @command
1042
    @command
1019
    def gettree(self, remotepath, localpath, buffer = False, buffsize = "10000"):
1043
    def gettree(self, remotepath, localpath, buffsize = 10000, buffer = None):
1020
        """
1044
        """
1021
            Downloads a directory tree
1045
            Downloads a directory tree
1022
            <remotepath>: path on the device
1046
            <remotepath>: path on the device
1023
            <localpath>: path on the computer
1047
            <localpath>: path on the computer
1024
            [buffer]: buffer address (optional)
-
 
1025
            [buffsize]: buffer size (optional)
1048
            [buffsize]: buffer size (optional)
-
 
1049
            [buffer]: buffer address (optional)
1026
        """
1050
        """
1027
        if buffer == False: buffer = self.emcore.lib.dev.usermem.lower
-
 
1028
        else: buffer = self._hexint(buffer)
-
 
1029
        buffsize = self._hexint(buffsize)
1051
        buffsize = self._hexint(buffsize)
-
 
1052
        if buffer is None:
-
 
1053
            buffer = self.emcore.malloc(buffsize)
-
 
1054
            malloc = True
-
 
1055
        else:
-
 
1056
            buffer = self._hexint(buffer)
-
 
1057
            malloc = False
-
 
1058
        try:
1030
        try: os.mkdir(localpath)
1059
            try: os.mkdir(localpath)
1031
        except: pass
1060
            except: pass
1032
 
1061
 
1033
        handle = self.emcore.dir_open(remotepath)
1062
            handle = self.emcore.dir_open(remotepath)
1034
        while True:
1063
            while True:
1035
            try:
1064
                try:
1036
                entry = self.emcore.dir_read(handle)
1065
                    entry = self.emcore.dir_read(handle)
1037
                if entry.name == "." or entry.name == "..": continue
1066
                    if entry.name == "." or entry.name == "..": continue
1038
                elif entry.attributes & 0x10:
1067
                    elif entry.attributes & 0x10:
1039
                    self.gettree(remotepath + "/" + entry.name, localpath + "/" + entry.name, buffer, buffsize)
1068
                        self.gettree(remotepath + "/" + entry.name, localpath + "/" + entry.name, buffer, buffsize)
1040
                else: self.get(remotepath + "/" + entry.name, localpath + "/" + entry.name, buffer, buffsize)
1069
                    else: self.get(remotepath + "/" + entry.name, localpath + "/" + entry.name, buffer, buffsize)
1041
            except: break
1070
                except: break
1042
        self.emcore.dir_close(handle)
1071
            self.emcore.dir_close(handle)
-
 
1072
        finally:
-
 
1073
            if malloc == True:
-
 
1074
                self.emcore.free(buffer)
1043
 
1075
 
1044
    @command
1076
    @command
1045
    def put(self, localname, remotename, buffer = False, buffsize = "10000"):
1077
    def put(self, localname, remotename, buffsize = 10000, buffer = None):
1046
        """
1078
        """
1047
            Uploads a file
1079
            Uploads a file
1048
            <localname>: filename on the computer
1080
            <localname>: filename on the computer
1049
            <remotename>: filename on the device
1081
            <remotename>: filename on the device
1050
            [buffer]: buffer address (optional)
-
 
1051
            [buffsize]: buffer size (optional)
1082
            [buffsize]: buffer size (optional)
-
 
1083
            [buffer]: buffer address (optional)
1052
        """
1084
        """
1053
        if buffer == False: buffer = self.emcore.lib.dev.usermem.lower
-
 
1054
        else: buffer = self._hexint(buffer)
-
 
1055
        buffsize = self._hexint(buffsize)
1085
        buffsize = self._hexint(buffsize)
-
 
1086
        if buffer is None:
-
 
1087
            buffer = self.emcore.malloc(buffsize)
-
 
1088
            malloc = True
-
 
1089
        else:
-
 
1090
            buffer = self._hexint(buffer)
-
 
1091
            malloc = False
1056
        try:
1092
        try:
-
 
1093
            try:
1057
            f = open(localname, 'rb')
1094
                f = open(localname, 'rb')
1058
        except IOError:
1095
            except IOError:
1059
            raise ArgumentError("Could not open local file for reading.")
1096
                raise ArgumentError("Could not open local file for reading.")
1060
        self.logger.info("Uploading file " + localname + " to " + remotename + "...")
1097
            self.logger.info("Uploading file " + localname + " to " + remotename + "...")
1061
        fd = self.emcore.file_open(remotename, 0x15)
1098
            fd = self.emcore.file_open(remotename, 0x15)
1062
        while True:
1099
            while True:
1063
            data = f.read(buffsize)
1100
                data = f.read(buffsize)
1064
            if len(data) == 0: break
1101
                if len(data) == 0: break
1065
            self.emcore.write(buffer, data)
1102
                self.emcore.write(buffer, data)
1066
            bytes = 0
1103
                bytes = 0
1067
            while bytes < len(data):
1104
                while bytes < len(data):
1068
                bytes = bytes + self.emcore.file_write(fd, buffer + bytes, len(data) - bytes)
1105
                    bytes = bytes + self.emcore.file_write(fd, buffer + bytes, len(data) - bytes)
1069
        self.emcore.file_close(fd)
1106
            self.emcore.file_close(fd)
1070
        f.close()
1107
            f.close()
-
 
1108
        finally:
-
 
1109
            if malloc == True:
-
 
1110
                self.emcore.free(buffer)
1071
        self.logger.info(" done\n")
1111
        self.logger.info(" done\n")
1072
 
1112
 
1073
    @command
1113
    @command
1074
    def puttree(self, localpath, remotepath, buffer = False, buffsize = "10000"):
1114
    def puttree(self, localpath, remotepath, buffsize = 10000, buffer = None):
1075
        """
1115
        """
1076
            Uploads a directory tree
1116
            Uploads a directory tree
1077
            <localpath>: path on the computer
1117
            <localpath>: path on the computer
1078
            <remotepath>: path on the device
1118
            <remotepath>: path on the device
1079
            [buffer]: buffer address (optional)
-
 
1080
            [buffsize]: buffer size (optional)
1119
            [buffsize]: buffer size (optional)
-
 
1120
            [buffer]: buffer address (optional)
1081
        """
1121
        """
1082
        if buffer == False: buffer = self.emcore.lib.dev.usermem.lower
-
 
1083
        else: buffer = self._hexint(buffer)
-
 
1084
        buffsize = self._hexint(buffsize)
1122
        buffsize = self._hexint(buffsize)
-
 
1123
        if buffer is None:
-
 
1124
            buffer = self.emcore.malloc(buffsize)
-
 
1125
            malloc = True
-
 
1126
        else:
-
 
1127
            buffer = self._hexint(buffer)
-
 
1128
            malloc = False
-
 
1129
        try:
1085
        try: self.mkdir(remotepath)
1130
            try: self.mkdir(remotepath)
1086
        except: self.logger.info(" failed\n")
1131
            except: self.logger.info(" failed\n")
1087
        pathlen = len(localpath)
1132
            pathlen = len(localpath)
1088
        for d in os.walk(localpath):
1133
            for d in os.walk(localpath):
1089
            prefix = remotepath + "/" + d[0].replace("\\", "/")[pathlen:] + "/"
1134
                prefix = remotepath + "/" + d[0].replace("\\", "/")[pathlen:] + "/"
1090
            for dir in d[1]:
1135
                for dir in d[1]:
1091
                if dir != ".svn":
1136
                    if dir != ".svn":
1092
                    try: self.mkdir(prefix + dir)
1137
                        try: self.mkdir(prefix + dir)
1093
                    except: self.logger.info(" failed\n")
1138
                        except: self.logger.info(" failed\n")
1094
            for f in d[2]:
1139
                for f in d[2]:
1095
                if not prefix.find("/.svn/") > -1:
1140
                    if not prefix.find("/.svn/") > -1:
1096
                    self.put(d[0] + "/" + f, prefix + f, buffer, buffsize)
1141
                        self.put(d[0] + "/" + f, prefix + f, buffer, buffsize)
-
 
1142
        finally:
-
 
1143
            if malloc == True:
-
 
1144
                self.emcore.free(buffer)
1097
 
1145
 
1098
    @command
1146
    @command
1099
    def ls(self, path = "/"):
1147
    def ls(self, path = "/"):
1100
        """
1148
        """
1101
            Lists all files in the specified path
1149
            Lists all files in the specified path