generate_qmk.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. """This script generates the XAP protocol generated sources to be compiled into QMK firmware.
  2. """
  3. from milc import cli
  4. from qmk.path import normpath
  5. from qmk.keyboard import keyboard_completer, keyboard_folder
  6. from qmk.xap.common import render_xap_output, merge_xap_defs
  7. from qmk.xap.gen_firmware.blob_generator import generate_blob
  8. from qmk.xap.gen_firmware.inline_generator import generate_inline
  9. @cli.argument('-o', '--output', type=normpath, help='File to write to')
  10. @cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Name of the keyboard')
  11. @cli.argument('-km', '--keymap', help='The keymap\'s name')
  12. @cli.subcommand('Generates the XAP protocol include.', hidden=False if cli.config.user.developer else True)
  13. def xap_generate_qmk_inc(cli):
  14. """Generates the XAP protocol inline codegen file, generated during normal build.
  15. """
  16. # Determine our keyboard/keymap
  17. if not cli.args.keyboard:
  18. cli.log.error('Missing parameter: --keyboard')
  19. cli.subcommands['xap-generate-qmk-inc'].print_help()
  20. return False
  21. if not cli.args.keymap:
  22. cli.log.error('Missing parameter: --keymap')
  23. cli.subcommands['xap-generate-qmk-inc'].print_help()
  24. return False
  25. generate_inline(cli.args.output, cli.args.keyboard, cli.args.keymap)
  26. defs = merge_xap_defs(cli.args.keyboard, cli.args.keymap)
  27. with open(normpath(str(cli.args.output.resolve()) + '.generated.j2'), 'w', encoding='utf-8') as out_file:
  28. r = render_xap_output('firmware', 'xap_generated.inl.j2', defs, keyboard=cli.args.keyboard, keymap=cli.args.keymap)
  29. while r.find('\n\n\n') != -1:
  30. r = r.replace('\n\n\n', '\n\n')
  31. out_file.write(r)
  32. @cli.argument('-o', '--output', type=normpath, help='File to write to')
  33. @cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Name of the keyboard')
  34. @cli.argument('-km', '--keymap', help='The keymap\'s name')
  35. @cli.subcommand('Generates the XAP protocol include.', hidden=False if cli.config.user.developer else True)
  36. def xap_generate_qmk_h(cli):
  37. """Generates the XAP protocol header file, generated during normal build.
  38. """
  39. # Determine our keyboard/keymap
  40. if not cli.args.keyboard:
  41. cli.log.error('Missing parameter: --keyboard')
  42. cli.subcommands['xap-generate-qmk-h'].print_help()
  43. return False
  44. if not cli.args.keymap:
  45. cli.log.error('Missing parameter: --keymap')
  46. cli.subcommands['xap-generate-qmk-h'].print_help()
  47. return False
  48. defs = merge_xap_defs(cli.args.keyboard, cli.args.keymap)
  49. with open(cli.args.output, 'w', encoding='utf-8') as out_file:
  50. r = render_xap_output('firmware', 'xap_generated.h.j2', defs, keyboard=cli.args.keyboard, keymap=cli.args.keymap)
  51. while r.find('\n\n\n') != -1:
  52. r = r.replace('\n\n\n', '\n\n')
  53. out_file.write(r)
  54. @cli.argument('-o', '--output', type=normpath, help='File to write to')
  55. @cli.argument('-kb', '--keyboard', type=keyboard_folder, completer=keyboard_completer, help='Name of the keyboard')
  56. @cli.argument('-km', '--keymap', help='The keymap\'s name')
  57. @cli.subcommand('Generates the XAP config payload include.', hidden=False if cli.config.user.developer else True)
  58. def xap_generate_qmk_blob_h(cli):
  59. """Generates the XAP config payload header file, generated during normal build.
  60. """
  61. # Determine our keyboard/keymap
  62. if not cli.args.keyboard:
  63. cli.log.error('Missing parameter: --keyboard')
  64. cli.subcommands['xap-generate-qmk-blob-h'].print_help()
  65. return False
  66. if not cli.args.keymap:
  67. cli.log.error('Missing parameter: --keymap')
  68. cli.subcommands['xap-generate-qmk-blob-h'].print_help()
  69. return False
  70. generate_blob(cli.args.output, cli.args.keyboard, cli.args.keymap)