ob.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env python3
  2. from os import path
  3. from flipper.app import App
  4. from flipper.utils.programmer_openocd import OpenOCDProgrammer
  5. class Main(App):
  6. def init(self):
  7. # Subparsers
  8. self.subparsers = self.parser.add_subparsers(help="sub-command help")
  9. # Check command
  10. self.parser_check = self.subparsers.add_parser(
  11. "check", help="Check Option Bytes"
  12. )
  13. self._add_args(self.parser_check)
  14. self.parser_check.set_defaults(func=self.check)
  15. # Set command
  16. self.parser_set = self.subparsers.add_parser("set", help="Set Option Bytes")
  17. self._add_args(self.parser_set)
  18. self.parser_set.set_defaults(func=self.set)
  19. def _add_args(self, parser):
  20. parser.add_argument(
  21. "--port-base", type=int, help="OpenOCD port base", default=3333
  22. )
  23. parser.add_argument(
  24. "--interface",
  25. type=str,
  26. help="OpenOCD interface",
  27. default="interface/cmsis-dap.cfg",
  28. )
  29. parser.add_argument(
  30. "--serial", type=str, help="OpenOCD interface serial number"
  31. )
  32. parser.add_argument(
  33. "--ob-path",
  34. type=str,
  35. help="Option bytes file",
  36. default=path.join(path.dirname(__file__), "ob.data"),
  37. )
  38. def check(self):
  39. self.logger.info("Checking Option Bytes")
  40. # OpenOCD
  41. openocd = OpenOCDProgrammer(
  42. self.args.interface,
  43. self.args.port_base,
  44. self.args.serial,
  45. )
  46. return_code = 1
  47. if openocd.option_bytes_validate(self.args.ob_path):
  48. return_code = 0
  49. return return_code
  50. def set(self):
  51. self.logger.info("Setting Option Bytes")
  52. # OpenOCD
  53. openocd = OpenOCDProgrammer(
  54. self.args.interface,
  55. self.args.port_base,
  56. self.args.serial,
  57. )
  58. return_code = 1
  59. if openocd.option_bytes_set(self.args.ob_path):
  60. return_code = 0
  61. return return_code
  62. if __name__ == "__main__":
  63. Main()()