power.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python3
  2. from flipper.app import App
  3. from flipper.storage import FlipperStorage
  4. from flipper.utils.cdc import resolve_port
  5. class Main(App):
  6. # this is basic use without sub-commands, simply to reboot flipper / power it off, not meant as a full CLI wrapper
  7. def init(self):
  8. self.parser.add_argument("-p", "--port", help="CDC Port", default="auto")
  9. self.subparsers = self.parser.add_subparsers(help="sub-command help")
  10. self.parser_power_off = self.subparsers.add_parser(
  11. "power_off", help="Power off command, won't return to CLI"
  12. )
  13. self.parser_power_off.set_defaults(func=self.power_off)
  14. self.parser_reboot = self.subparsers.add_parser(
  15. "reboot", help="Reboot command help"
  16. )
  17. self.parser_reboot.set_defaults(func=self.reboot)
  18. self.parser_reboot2dfu = self.subparsers.add_parser(
  19. "reboot2dfu", help="Reboot to DFU, won't return to CLI"
  20. )
  21. self.parser_reboot2dfu.set_defaults(func=self.reboot2dfu)
  22. def _get_flipper(self):
  23. if not (port := resolve_port(self.logger, self.args.port)):
  24. return None
  25. flipper = FlipperStorage(port)
  26. flipper.start()
  27. return flipper
  28. def power_off(self):
  29. if not (flipper := self._get_flipper()):
  30. return 1
  31. self.logger.debug("Powering off")
  32. flipper.send("power off" + "\r")
  33. flipper.stop()
  34. return 0
  35. def reboot(self):
  36. if not (flipper := self._get_flipper()):
  37. return 1
  38. self.logger.debug("Rebooting")
  39. flipper.send("power reboot" + "\r")
  40. flipper.stop()
  41. return 0
  42. def reboot2dfu(self):
  43. if not (flipper := self._get_flipper()):
  44. return 1
  45. self.logger.debug("Rebooting to DFU")
  46. flipper.send("power reboot2dfu" + "\r")
  47. flipper.stop()
  48. return 0
  49. if __name__ == "__main__":
  50. Main()()