5.2.1 - Updated I2C files
Dependents: mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510
tools/arm_pack_manager/pack_manager.py@1:f30bdcd2b33b, 2017-02-27 (annotated)
- Committer:
- jacobjohnson
- Date:
- Mon Feb 27 17:45:05 2017 +0000
- Revision:
- 1:f30bdcd2b33b
- Parent:
- 0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c. This will need to be changed later, and accessed from the main level, but for now this allows the adc to read a value from 0 to 3.7V, instead of just up to 1V.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
group-onsemi | 0:098463de4c5d | 1 | import argparse |
group-onsemi | 0:098463de4c5d | 2 | from os.path import basename |
group-onsemi | 0:098463de4c5d | 3 | from tools.arm_pack_manager import Cache |
group-onsemi | 0:098463de4c5d | 4 | from os.path import basename, join, dirname, exists |
group-onsemi | 0:098463de4c5d | 5 | from os import makedirs |
group-onsemi | 0:098463de4c5d | 6 | from itertools import takewhile |
group-onsemi | 0:098463de4c5d | 7 | from fuzzywuzzy import process |
group-onsemi | 0:098463de4c5d | 8 | from tools.arm_pack_manager import Cache |
group-onsemi | 0:098463de4c5d | 9 | |
group-onsemi | 0:098463de4c5d | 10 | parser = argparse.ArgumentParser(description='A Handy little utility for keeping your cache of pack files up to date.') |
group-onsemi | 0:098463de4c5d | 11 | subparsers = parser.add_subparsers(title="Commands") |
group-onsemi | 0:098463de4c5d | 12 | |
group-onsemi | 0:098463de4c5d | 13 | def subcommand(name, *args, **kwargs): |
group-onsemi | 0:098463de4c5d | 14 | def subcommand(command): |
group-onsemi | 0:098463de4c5d | 15 | subparser = subparsers.add_parser(name, **kwargs) |
group-onsemi | 0:098463de4c5d | 16 | |
group-onsemi | 0:098463de4c5d | 17 | for arg in args: |
group-onsemi | 0:098463de4c5d | 18 | arg = dict(arg) |
group-onsemi | 0:098463de4c5d | 19 | opt = arg['name'] |
group-onsemi | 0:098463de4c5d | 20 | del arg['name'] |
group-onsemi | 0:098463de4c5d | 21 | |
group-onsemi | 0:098463de4c5d | 22 | if isinstance(opt, basestring): |
group-onsemi | 0:098463de4c5d | 23 | subparser.add_argument(opt, **arg) |
group-onsemi | 0:098463de4c5d | 24 | else: |
group-onsemi | 0:098463de4c5d | 25 | subparser.add_argument(*opt, **arg) |
group-onsemi | 0:098463de4c5d | 26 | |
group-onsemi | 0:098463de4c5d | 27 | subparser.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="Verbose diagnostic output") |
group-onsemi | 0:098463de4c5d | 28 | subparser.add_argument("-vv", "--very_verbose", action="store_true", dest="very_verbose", help="Very verbose diagnostic output") |
group-onsemi | 0:098463de4c5d | 29 | subparser.add_argument("--no-timeouts", action="store_true", help="Remove all timeouts and try to download unconditionally") |
group-onsemi | 0:098463de4c5d | 30 | subparser.add_argument("--and", action="store_true", dest="intersection", help="combine search terms as if with an and") |
group-onsemi | 0:098463de4c5d | 31 | subparser.add_argument("--or", action="store_false", dest="intersection", help="combine search terms as if with an or") |
group-onsemi | 0:098463de4c5d | 32 | subparser.add_argument("--union", action="store_false", dest="intersection", help="combine search terms as if with a set union") |
group-onsemi | 0:098463de4c5d | 33 | subparser.add_argument("--intersection", action="store_true", dest="intersection", help="combine search terms as if with a set intersection") |
group-onsemi | 0:098463de4c5d | 34 | |
group-onsemi | 0:098463de4c5d | 35 | def thunk(parsed_args): |
group-onsemi | 0:098463de4c5d | 36 | cache = Cache(not parsed_args.verbose, parsed_args.no_timeouts) |
group-onsemi | 0:098463de4c5d | 37 | argv = [arg['dest'] if 'dest' in arg else arg['name'] for arg in args] |
group-onsemi | 0:098463de4c5d | 38 | argv = [(arg if isinstance(arg, basestring) else arg[-1]).strip('-') |
group-onsemi | 0:098463de4c5d | 39 | for arg in argv] |
group-onsemi | 0:098463de4c5d | 40 | argv = {arg: vars(parsed_args)[arg] for arg in argv |
group-onsemi | 0:098463de4c5d | 41 | if vars(parsed_args)[arg] is not None} |
group-onsemi | 0:098463de4c5d | 42 | |
group-onsemi | 0:098463de4c5d | 43 | return command(cache, **argv) |
group-onsemi | 0:098463de4c5d | 44 | |
group-onsemi | 0:098463de4c5d | 45 | subparser.set_defaults(command=thunk) |
group-onsemi | 0:098463de4c5d | 46 | return command |
group-onsemi | 0:098463de4c5d | 47 | return subcommand |
group-onsemi | 0:098463de4c5d | 48 | |
group-onsemi | 0:098463de4c5d | 49 | def user_selection (message, options) : |
group-onsemi | 0:098463de4c5d | 50 | print(message) |
group-onsemi | 0:098463de4c5d | 51 | for choice, index in zip(options, range(len(options))) : |
group-onsemi | 0:098463de4c5d | 52 | print("({}) {}".format(index, choice)) |
group-onsemi | 0:098463de4c5d | 53 | pick = None |
group-onsemi | 0:098463de4c5d | 54 | while pick is None : |
group-onsemi | 0:098463de4c5d | 55 | stdout.write("please select an integer from 0 to {} or \"all\"".format(len(options)-1)) |
group-onsemi | 0:098463de4c5d | 56 | input = raw_input() |
group-onsemi | 0:098463de4c5d | 57 | try : |
group-onsemi | 0:098463de4c5d | 58 | if input == "all" : |
group-onsemi | 0:098463de4c5d | 59 | pick = options |
group-onsemi | 0:098463de4c5d | 60 | else : |
group-onsemi | 0:098463de4c5d | 61 | pick = [options[int(input)]] |
group-onsemi | 0:098463de4c5d | 62 | except ValueError : |
group-onsemi | 0:098463de4c5d | 63 | print("I did not understand your input") |
group-onsemi | 0:098463de4c5d | 64 | return pick |
group-onsemi | 0:098463de4c5d | 65 | |
group-onsemi | 0:098463de4c5d | 66 | def fuzzy_find(matches, urls) : |
group-onsemi | 0:098463de4c5d | 67 | choices = {} |
group-onsemi | 0:098463de4c5d | 68 | for match in matches : |
group-onsemi | 0:098463de4c5d | 69 | for key, value in process.extract(match, urls, limit=None) : |
group-onsemi | 0:098463de4c5d | 70 | choices.setdefault(key, 0) |
group-onsemi | 0:098463de4c5d | 71 | choices[key] += value |
group-onsemi | 0:098463de4c5d | 72 | choices = sorted([(v, k) for k, v in choices.iteritems()], reverse=True) |
group-onsemi | 0:098463de4c5d | 73 | if not choices : return [] |
group-onsemi | 0:098463de4c5d | 74 | elif len(choices) == 1 : return [choices[0][1]] |
group-onsemi | 0:098463de4c5d | 75 | elif choices[0][0] > choices[1][0] : choices = choices[:1] |
group-onsemi | 0:098463de4c5d | 76 | else : choices = list(takewhile(lambda t: t[0] == choices[0][0], choices)) |
group-onsemi | 0:098463de4c5d | 77 | return [v for k,v in choices] |
group-onsemi | 0:098463de4c5d | 78 | |
group-onsemi | 0:098463de4c5d | 79 | @subcommand('cache', |
group-onsemi | 0:098463de4c5d | 80 | dict(name='matches', nargs="*", |
group-onsemi | 0:098463de4c5d | 81 | help="a bunch of things to search for in part names"), |
group-onsemi | 0:098463de4c5d | 82 | dict(name=['-e','--everything'], action="store_true", |
group-onsemi | 0:098463de4c5d | 83 | help="download everything possible"), |
group-onsemi | 0:098463de4c5d | 84 | dict(name=['-d','--descriptors'], action="store_true", |
group-onsemi | 0:098463de4c5d | 85 | help="download all descriptors"), |
group-onsemi | 0:098463de4c5d | 86 | dict(name=["-b","--batch"], action="store_true", |
group-onsemi | 0:098463de4c5d | 87 | help="don't ask for user input and assume download all"), |
group-onsemi | 0:098463de4c5d | 88 | help="Cache a group of PACK or PDSC files") |
group-onsemi | 0:098463de4c5d | 89 | def command_cache (cache, matches, everything=False, descriptors=False, batch=False, verbose= False, intersection=True) : |
group-onsemi | 0:098463de4c5d | 90 | if everything : |
group-onsemi | 0:098463de4c5d | 91 | cache.cache_everything() |
group-onsemi | 0:098463de4c5d | 92 | return True |
group-onsemi | 0:098463de4c5d | 93 | if descriptors : |
group-onsemi | 0:098463de4c5d | 94 | cache.cache_descriptors() |
group-onsemi | 0:098463de4c5d | 95 | return True |
group-onsemi | 0:098463de4c5d | 96 | if not matches : |
group-onsemi | 0:098463de4c5d | 97 | print("No action specified nothing to do") |
group-onsemi | 0:098463de4c5d | 98 | else : |
group-onsemi | 0:098463de4c5d | 99 | urls = cache.get_urls() |
group-onsemi | 0:098463de4c5d | 100 | if intersection : |
group-onsemi | 0:098463de4c5d | 101 | choices = fuzzy_find(matches, map(basename, urls)) |
group-onsemi | 0:098463de4c5d | 102 | else : |
group-onsemi | 0:098463de4c5d | 103 | choices = sum([fuzzy_find([m], map(basename, urls)) for m in matches], []) |
group-onsemi | 0:098463de4c5d | 104 | if not batch and len(choices) > 1 : |
group-onsemi | 0:098463de4c5d | 105 | choices = user_selection("Please select a file to cache", choices) |
group-onsemi | 0:098463de4c5d | 106 | to_download = [] |
group-onsemi | 0:098463de4c5d | 107 | for choice in choices : |
group-onsemi | 0:098463de4c5d | 108 | for url in urls : |
group-onsemi | 0:098463de4c5d | 109 | if choice in url : |
group-onsemi | 0:098463de4c5d | 110 | to_download.append(url) |
group-onsemi | 0:098463de4c5d | 111 | cache.cache_pack_list(to_download) |
group-onsemi | 0:098463de4c5d | 112 | return True |
group-onsemi | 0:098463de4c5d | 113 | |
group-onsemi | 0:098463de4c5d | 114 | |
group-onsemi | 0:098463de4c5d | 115 | @subcommand('find-part', |
group-onsemi | 0:098463de4c5d | 116 | dict(name='matches', nargs="+", help="words to match to processors"), |
group-onsemi | 0:098463de4c5d | 117 | dict(name=['-l',"--long"], action="store_true", |
group-onsemi | 0:098463de4c5d | 118 | help="print out part details with part"), |
group-onsemi | 0:098463de4c5d | 119 | dict(name=['-p', '--parts-only'], action="store_false", dest="print_aliases"), |
group-onsemi | 0:098463de4c5d | 120 | dict(name=['-a', '--aliases-only'], action="store_false", dest="print_parts"), |
group-onsemi | 0:098463de4c5d | 121 | help="Find a Part and it's description within the cache") |
group-onsemi | 0:098463de4c5d | 122 | def command_find_part (cache, matches, long=False, intersection=True, |
group-onsemi | 0:098463de4c5d | 123 | print_aliases=True, print_parts=True) : |
group-onsemi | 0:098463de4c5d | 124 | if long : |
group-onsemi | 0:098463de4c5d | 125 | import pprint |
group-onsemi | 0:098463de4c5d | 126 | pp = pprint.PrettyPrinter() |
group-onsemi | 0:098463de4c5d | 127 | parts = cache.index |
group-onsemi | 0:098463de4c5d | 128 | if intersection : |
group-onsemi | 0:098463de4c5d | 129 | choices = fuzzy_find(matches, parts.keys()) |
group-onsemi | 0:098463de4c5d | 130 | aliases = fuzzy_find(matches, cache.aliases.keys()) |
group-onsemi | 0:098463de4c5d | 131 | else : |
group-onsemi | 0:098463de4c5d | 132 | choices = sum([fuzzy_find([m], parts.keys()) for m in matches], []) |
group-onsemi | 0:098463de4c5d | 133 | aliases = sum([fuzzy_find([m], cache.aliases.keys()) for m in matches], []) |
group-onsemi | 0:098463de4c5d | 134 | if print_parts: |
group-onsemi | 0:098463de4c5d | 135 | for part in choices : |
group-onsemi | 0:098463de4c5d | 136 | print part |
group-onsemi | 0:098463de4c5d | 137 | if long : |
group-onsemi | 0:098463de4c5d | 138 | pp.pprint(cache.index[part]) |
group-onsemi | 0:098463de4c5d | 139 | if print_aliases: |
group-onsemi | 0:098463de4c5d | 140 | for alias in aliases : |
group-onsemi | 0:098463de4c5d | 141 | print alias |
group-onsemi | 0:098463de4c5d | 142 | if long : |
group-onsemi | 0:098463de4c5d | 143 | pp.pprint(cache.index[cache.aliases[alias]]) |
group-onsemi | 0:098463de4c5d | 144 | |
group-onsemi | 0:098463de4c5d | 145 | @subcommand('dump-parts', |
group-onsemi | 0:098463de4c5d | 146 | dict(name='out', help='directory to dump to'), |
group-onsemi | 0:098463de4c5d | 147 | dict(name='parts', nargs='+', help='parts to dump'), |
group-onsemi | 0:098463de4c5d | 148 | help='Create a directory with an index.json describing the part and all of their associated flashing algorithms.' |
group-onsemi | 0:098463de4c5d | 149 | ) |
group-onsemi | 0:098463de4c5d | 150 | def command_dump_parts (cache, out, parts, intersection=False) : |
group-onsemi | 0:098463de4c5d | 151 | index = {} |
group-onsemi | 0:098463de4c5d | 152 | if intersection : |
group-onsemi | 0:098463de4c5d | 153 | for part in fuzzy_find(parts, cache.index): |
group-onsemi | 0:098463de4c5d | 154 | index.update(cache.index[part]) |
group-onsemi | 0:098463de4c5d | 155 | else : |
group-onsemi | 0:098463de4c5d | 156 | for part in parts : |
group-onsemi | 0:098463de4c5d | 157 | index.update(dict(cache.find_device(part))) |
group-onsemi | 0:098463de4c5d | 158 | for n, p in index.iteritems() : |
group-onsemi | 0:098463de4c5d | 159 | try : |
group-onsemi | 0:098463de4c5d | 160 | if not exists(join(out, dirname(p['algorithm']['file']))) : |
group-onsemi | 0:098463de4c5d | 161 | makedirs(join(out, dirname(p['algorithm']['file']))) |
group-onsemi | 0:098463de4c5d | 162 | with open(join(out, p['algorithm']['file']), "wb+") as fd : |
group-onsemi | 0:098463de4c5d | 163 | fd.write(cache.get_flash_algorthim_binary(n).read()) |
group-onsemi | 0:098463de4c5d | 164 | except KeyError: |
group-onsemi | 0:098463de4c5d | 165 | print("[Warning] {} does not have an associated flashing algorithm".format(n)) |
group-onsemi | 0:098463de4c5d | 166 | with open(join(out, "index.json"), "wb+") as fd : |
group-onsemi | 0:098463de4c5d | 167 | dump(index,fd) |
group-onsemi | 0:098463de4c5d | 168 | |
group-onsemi | 0:098463de4c5d | 169 | |
group-onsemi | 0:098463de4c5d | 170 | @subcommand('cache-part', |
group-onsemi | 0:098463de4c5d | 171 | dict(name='matches', nargs="+", help="words to match to devices"), |
group-onsemi | 0:098463de4c5d | 172 | help='Cache PACK files associated with the parts matching the provided words') |
group-onsemi | 0:098463de4c5d | 173 | def command_cache_part (cache, matches, intersection=True) : |
group-onsemi | 0:098463de4c5d | 174 | index = cache.index |
group-onsemi | 0:098463de4c5d | 175 | if intersection : |
group-onsemi | 0:098463de4c5d | 176 | choices = fuzzy_find(matches, index.keys()) |
group-onsemi | 0:098463de4c5d | 177 | aliases = fuzzy_find(matches, cache.aliases.keys()) |
group-onsemi | 0:098463de4c5d | 178 | else : |
group-onsemi | 0:098463de4c5d | 179 | choices = sum([fuzzy_find([m], index.keys()) for m in matches], []) |
group-onsemi | 0:098463de4c5d | 180 | aliases = sum([fuzzy_find([m], cache.aliases.keys()) for m in matches], []) |
group-onsemi | 0:098463de4c5d | 181 | urls = set([index[c]['pdsc_file'] for c in choices]) |
group-onsemi | 0:098463de4c5d | 182 | urls += set([index[cache.aliasse[a]] for a in aliases]) |
group-onsemi | 0:098463de4c5d | 183 | cache.cache_pack_list(list(urls)) |
group-onsemi | 0:098463de4c5d | 184 | |
group-onsemi | 0:098463de4c5d | 185 | def get_argparse() : |
group-onsemi | 0:098463de4c5d | 186 | return parser |
group-onsemi | 0:098463de4c5d | 187 | |
group-onsemi | 0:098463de4c5d | 188 | def main() : |
group-onsemi | 0:098463de4c5d | 189 | args = parser.parse_args() |
group-onsemi | 0:098463de4c5d | 190 | args.command(args) |
group-onsemi | 0:098463de4c5d | 191 |