Ejemplo n.º 1
0
    def _get_sectors(self, device):
        """Extract sector sizes from device FLM algorithm

        Will return None if there is no algorithm, pdsc URL formatted in
        correctly

        :return: A list tuples of sector start and size
        :rtype: [list]
        """
        try:
            pack = self._cache.pack_from_cache(device)
            ret = []
            for algo in device['algorithms']:
                try:
                    flm = pack.open(algo["file_name"].replace("\\\\",
                                                              "/").replace(
                                                                  "\\", "/"))
                    flash_alg = PackFlashAlgo(flm.read())
                    sectors = [(flash_alg.flash_start + offset, size)
                               for offset, size in flash_alg.sector_sizes]
                    ret.extend(sectors)
                except Exception:
                    pass
            ret.sort(key=lambda sector: sector[0])
            return ret
        except Exception:
            return None
Ejemplo n.º 2
0
def main():
    """Generate flash algorithms"""
    parser = argparse.ArgumentParser(description='Flash generator')
    parser.add_argument("--rebuild_all",
                        action="store_true",
                        help="Rebuild entire cache")
    parser.add_argument("--rebuild_descriptors",
                        action="store_true",
                        help="Rebuild descriptors")
    parser.add_argument("--target",
                        default=None,
                        help="Name of target to generate algo for")
    parser.add_argument("--all",
                        action="store_true",
                        help="Build all flash algos for devcies")
    args = parser.parse_args()

    cache = Cache(True, True)
    if args.rebuild_all:
        cache.cache_everything()
        print("Cache rebuilt")
        return

    if args.rebuild_descriptors:
        cache.cache_descriptors()
        print("Descriptors rebuilt")
        return

    if args.target is None:
        device_and_filenames = [(target.device_name, target.name)
                                for target in TARGETS
                                if hasattr(target, "device_name")]
    else:
        device_and_filenames = [(args.target, args.target.replace("/", "-"))]

    try:
        os.mkdir("output")
    except OSError:
        # Directory already exists
        pass

    for device, filename in device_and_filenames:
        dev = cache.index[device]
        binaries = cache.get_flash_algorthim_binary(device, all=True)
        algos = [PackFlashAlgo(binary.read()) for binary in binaries]
        filtered_algos = algos if args.all else filter_algos(dev, algos)
        for idx, algo in enumerate(filtered_algos):
            file_name = ("%s_%i.c" % (filename, idx) if args.all
                         or len(filtered_algos) != 1 else "%s.c" % filename)
            output_path = join("output", file_name)
            algo.process_template(TEMPLATE_PATH, output_path)
        print("%s: %s      \r" % (device, filename))
Ejemplo n.º 3
0
    def _get_sectors(self, device):
        """Extract sector sizes from device FLM algorithm

        Will return None if there is no algorithm, pdsc URL formatted in correctly

        :return: A list tuples of sector start and size
        :rtype: [list]
        """
        try:
            pack = self.pack_from_cache(device)
            algo_itr = (pack.open(path) for path in device['algorithm'].keys())
            algo_bin = algo_itr.next()
            flm_file = algo_bin.read()
            return PackFlashAlgo(flm_file).sector_sizes
        except Exception:
            return None