info_generator.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. """This script generates the XAP info.json payload header to be compiled into QMK.
  2. """
  3. import json
  4. import gzip
  5. from qmk.info import keymap_json
  6. from qmk.commands import get_chunks, dump_lines
  7. from qmk.constants import GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE
  8. def generate_info(output_file, keyboard, keymap):
  9. # Build the info.json file
  10. km_info_json = keymap_json(keyboard, keymap)
  11. # TODO: Munge to XAP requirements
  12. del km_info_json['config_h_features']
  13. # Minify
  14. str_data = json.dumps(km_info_json, separators=(',', ':'))
  15. # Compress
  16. compressed = gzip.compress(str_data.encode("utf-8"), compresslevel=9)
  17. # split into lines to match xxd output
  18. hex_array = ["0x{:02X}".format(b) for b in compressed]
  19. data_len = len(hex_array)
  20. data = ""
  21. for chunk in get_chunks(hex_array, 12):
  22. data += f' {", ".join(chunk)},\n'
  23. lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once', '']
  24. # Gen output file
  25. lines.append('static const unsigned char info_json_gz[] PROGMEM = {')
  26. lines.append(data)
  27. lines.append('};')
  28. lines.append(f'#define INFO_JSON_GZ_LEN {data_len}')
  29. dump_lines(output_file, lines)