ob.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/usr/bin/env python3
  2. import logging
  3. import argparse
  4. import subprocess
  5. import sys
  6. import os
  7. from flipper.app import App
  8. from flipper.cube import CubeProgrammer
  9. class Main(App):
  10. def init(self):
  11. self.subparsers = self.parser.add_subparsers(help="sub-command help")
  12. self.parser_check = self.subparsers.add_parser(
  13. "check", help="Check Option Bytes"
  14. )
  15. self.parser_check.add_argument(
  16. "--port", type=str, help="Port to connect: swd or usb1", default="swd"
  17. )
  18. self.parser_check.set_defaults(func=self.check)
  19. # Set command
  20. self.parser_set = self.subparsers.add_parser("set", help="Set Option Bytes")
  21. self.parser_set.add_argument(
  22. "--port", type=str, help="Port to connect: swd or usb1", default="swd"
  23. )
  24. self.parser_set.set_defaults(func=self.set)
  25. # OB
  26. self.ob = {}
  27. def before(self):
  28. self.logger.info(f"Loading Option Bytes data")
  29. file_path = os.path.join(os.path.dirname(sys.argv[0]), "ob.data")
  30. file = open(file_path, "r")
  31. for line in file.readlines():
  32. k, v, o = line.split(":")
  33. self.ob[k.strip()] = v.strip(), o.strip()
  34. def check(self):
  35. self.logger.info(f"Checking Option Bytes")
  36. cp = CubeProgrammer(self.args.port)
  37. if cp.checkOptionBytes(self.ob):
  38. self.logger.info(f"OB Check OK")
  39. return 0
  40. else:
  41. self.logger.error(f"OB Check FAIL")
  42. return 255
  43. def set(self):
  44. self.logger.info(f"Setting Option Bytes")
  45. cp = CubeProgrammer(self.args.port)
  46. if cp.setOptionBytes(self.ob):
  47. self.logger.info(f"OB Set OK")
  48. return 0
  49. else:
  50. self.logger.error(f"OB Set FAIL")
  51. return 255
  52. if __name__ == "__main__":
  53. Main()()