Files
littlefs/scripts/dbgerr.py
Christopher Haster 7cfcc1af1d scripts: Renamed summary.py -> csv.py
This seems like a more fitting name now that this script has evolved
into more of a general purpose high-level CSV tool.

Unfortunately this does conflict with the standard csv module in Python,
breaking every script that imports csv (which is most of them).
Fortunately, Python is flexible enough to let us remove the current
directory before imports with a bit of an ugly hack:

  # prevent local imports
  __import__('sys').path.pop(0)

These scripts are intended to be standalone anyways, so this is probably
a good pattern to adopt.
2024-11-09 12:31:16 -06:00

101 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python3
# prevent local imports
__import__('sys').path.pop(0)
ERRS = [
('OK', 0, "No error" ),
('UNKNOWN', -1, "Unknown error" ),
('INVAL', -22, "Invalid parameter" ),
('NOTSUP', -95, "Operation not supported" ),
('IO', -5, "Error during device operation" ),
('CORRUPT', -84, "Corrupted" ),
('NOENT', -2, "No directory entry" ),
('EXIST', -17, "Entry already exists" ),
('NOTDIR', -20, "Entry is not a dir" ),
('ISDIR', -21, "Entry is a dir" ),
('NOTEMPTY', -39, "Dir is not empty" ),
('FBIG', -27, "File too large" ),
('NOSPC', -28, "No space left on device" ),
('NOMEM', -12, "No more memory available" ),
('NOATTR', -61, "No data/attr available" ),
('NAMETOOLONG', -36, "File name too long" ),
('RANGE', -34, "Result out of range" ),
]
def main(errs, *,
list=False):
list_, list = list, __builtins__.list
# list all known error codes
if list_:
# first find the widths
w = [0, 0]
for n, e, h in ERRS:
w[0] = max(w[0], len('LFS_ERR_')+len(n))
w[1] = max(w[1], len(str(e)))
# print
for n, e, h in ERRS:
print('%-*s %-*s %s' % (
w[0], 'LFS_ERR_'+n,
w[1], e,
h))
# find these errors
else:
def find_err(err):
# find by LFS_ERR_+name
for n, e, h in ERRS:
if 'LFS_ERR_'+n == err:
return n, e, h
# find by name
for n, e, h in ERRS:
if n == err:
return n, e, h
# find by E+name
for n, e, h in ERRS:
if 'E'+n == err:
return n, e, h
try:
# find by err code
for n, e, h in ERRS:
if e == int(err, 0):
return n, e, h
# find by negated err code
for n, e, h in ERRS:
if e == -int(err, 0):
return n, e, h
except ValueError:
pass
# not found
raise KeyError(err)
for err in errs:
try:
n, e, h = find_err(err)
print('%s %s %s' % ('LFS_ERR_'+n, e, h))
except KeyError:
print('%s ?' % err)
if __name__ == "__main__":
import argparse
import sys
parser = argparse.ArgumentParser(
description="Decode littlefs error codes.",
allow_abbrev=False)
parser.add_argument(
'errs',
nargs='*',
help="Error codes or error names to decode.")
parser.add_argument(
'-l', '--list',
action='store_true',
help="List all known error codes.")
sys.exit(main(**{k: v
for k, v in vars(parser.parse_intermixed_args()).items()
if v is not None}))