
    7j"                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZmZ d-dZd Zd Zd.dZd Zd Zd.dZd Z d Z! ejD                  ddd ed       ed      d       ejD                  ddded        ejD                  d!d"dd#d$%       ejD                  d&d'deed()       ejF                  d*d+      d,                                    Z$y)/zBUsed by the make system to generate info_config.h from info.json.
    )Path)dotty)FilesCompleter)cli)	info_json)	json_load)keyboard_completerkeyboard_folder)
dump_linesparse_configurator_json)normpathFileType)GPL2_HEADER_C_LIKEGENERATED_HEADER_C_LIKENc                 z    t         j                  j                  }|d| nd}|r
d|  d|  | S d|  d|  | d|  S )N  z
#undef z	
#define z	
#ifndef z
#    define z
#endif // )r   argsfilename)definevalue	is_keymaps      R/home/hanthebot/chat/keyboard/qmk_firmware/lib/python/qmk/cli/generate/config_h.pygenerate_definer      st    !!I ,awK"Ex 		 			 HUG (     c                     g }| D ]J  }dj                  t        t        |D cg c]  }|xs d
 c}            }|j                  d|z   dz          L t	        d| ddj                  |       d      S c c}w )	z8Return the config.h lines that set the direct pins.
    ,NO_PIN{}DIRECT_PINS{ ,  })joinmapstrappendr   )direct_pinspostfixrowsrowcolcolss         r   r)   r)      s     D &xxCS!Ac#//!ABCC$J$%& [	2c$))D/9J#4NOO "Bs   A4c           
          dj                  t        t        |D cg c]  }|xs d
 c}            }t        |  d| d| d      S c c}w )z4Return the config.h lines that set a pin array.
    r#   r   _PINSr"   r$   )r%   r&   r'   r   )r   pinsr*   pin	pin_arrays        r   r3   r3   *   sQ     		#ct#DCO8O#DEFIfXU7)4I;c6JKK $Es   Ac                     g }d| v r|j                  t        | d   |             d| v r|j                  t        d| d   |             d| v r|j                  t        d| d   |             dj                  |      S )z+Add the matrix config to the config.h.
    directr.   
MATRIX_COLr+   
MATRIX_ROW
)r(   r)   r3   r%   )matrix_pinsr*   r1   s      r   r9   r9   2   s{     D;KH 5w?@IlK,?IJIlK,?IJ99T?r   c                     d| v rC|j                  t        d| d   d                |j                  t        d| d   d                yy)z)Add the matrix size to the config.h.
    matrix_sizeMATRIX_COLSr.   MATRIX_ROWSr+   N)r(   r   )kb_info_jsonconfig_h_liness     r   generate_matrix_sizer@   C   sQ     $om\-=XY_=`abom\-=XY_=`ab %r   c                    t        t        d            }|j                         D ]6  \  }}|d   }|j                  dd      }|j                  dd      }|s3	 | |   }|j                  d      ri|j                  t        |dd	j                  |D 	cg c]0  }	d
dj                  t        t        t        |	                  z   dz   2 c}	       d             |j                  d      r>|j                  t        |dd	j                  t        t        |             d             |dk(  r!|j                  t        ||rdnd             (|dk(  r |s1|j                  t        |             M|dk(  r5|j                         D ]   \  }
}|j                  t        |
|             " |dk(  rC|j                  dd      j                  dd      }|j                  t        |d| d             |dk(  rH|j                  d      \  }}}|j                  t        |d|j                  d       | |              |j                  t        ||             9 y# t        $ r Y Gw xY wc c}	w )zIIterate through the info_config map to generate basic config values.
    zdata/mappings/info_config.hjsoninfo_key
value_typerawto_cTzarray.arrayr"   r#   r   r   r    r$   arraybooltruefalseflagmappingr'   \z\\"z\"bcd_version.0x   N)r   r   itemsgetKeyError
startswithr(   r   r%   listr&   r'   replacesplitzfill)r>   r?   info_config_map
config_key	info_dictrB   key_typerE   config_valuexkeyr   escaped_strmajorminorrevisions                   r   generate_config_itemsre   K   s     %F GHO!0!6!6!8  M
IZ(==u5}}VT*	'1L }-!!/*DII  AM  ON{|sUXU]U]^bcfgjlmcn^oUpOpsvOv  ON  EO  DP  PS  ?T  #U  V  )!!/*DIIcRUWcNdDeCffi>j"kl!!/*fZa"bc%%oj&AB"*002 C
U%%oc5&ABC&..tV<DDS%PK!!/*+a>P"QR&'3'9'9#'>$UE8!!/*5;;q>BRSXRYZbYc>d"ef!!/*l"KLA M  		 ONs   I 5I0 	I-,I-c                 <   g }g }g }| j                  dg       D ]K  }|j                  |d          |j                  |d          |j                  |j                  dd             M |j                  t        d| ddj                  |       d	             |j                  t        d
| ddj                  |       d	             t	        |      dk(  st        d |D              r$t        j                  j                  d| d       y|D cg c]  }|dn|
 }}t	        t        |            dk(  r"|j                  t        d| |d                y|j                  t        d| ddj                  t        t        |             d	             yc c}w )z)Generate the config.h lines for encoders.rotarypin_apin_b
resolutionNENCODER_A_PINSr"   r#   r$   ENCODER_B_PINSr   c              3   $   K   | ]  }|d u  
 y wN ).0rs     r   	<genexpr>z*generate_encoder_config.<locals>.<genexpr>   s     #C!AI#Cs   zSkipping ENCODER_RESOLUTIONz configuration      ENCODER_RESOLUTIONENCODER_RESOLUTIONS)rS   r(   r   r%   lenallr   logdebugsetr&   r'   )encoder_jsonr?   r*   a_padsb_padsresolutionsencoderrq   s           r   generate_encoder_configr   s   s   FFK##Hb1 <gg&'gg&'7;;|T:;<
 /N7)*DDIIV\L]K^^aFbcd/N7)*DDIIV\L]K^^aFbcd
;1#C{#C C3G9NKL2=>Q	1q(>K>
3{!o0B7).LkZ[n]^o0CG9.MQTUYU^U^_bcfgr_sUtTuuxOyz{	 ?s   Fc           	         d| d   v r9| d   d   }d|v r-|j                  t        ddj                  |d                      d| d   j                  di       v r(| d   d   d   dk(  r|j                  t        d	             d
| d   j                  di       v r$|j                  t	        | d   d   d
   d             d
| d   j                  di       v rt        | d   d   d
   |d       yy)z-Generate the config.h lines for split boards.
handednessrX   matrix_gridSPLIT_HAND_MATRIX_GRIDr#   protocol	transporti2cUSE_I2Crightr9   _RIGHTr   N)r(   r   r%   rS   r9   r   )r>   r?   r   s      r   generate_split_configr      s
   |G,,!'*<8
J&!!/2JDIIV`anVoLp"qr\'*..{B?? -j9UB!!/)"<=,w'++M2>>k,w*?*Nw*WYabc,w'++Ir::W 5i @ I>[cd ;r   c                 L   d|j                  di       v rD|j                  t        | j                          d| |d   d   j                                       |j                  di       D ]7  }|d   |   s|j                  t        | |j                                       9 y )N	animationdefault_DEFAULT_MODE
animations)rS   r(   r   upper)featureled_feature_jsonr?   enable_prefixanimation_prefixr   s         r   generate_led_animations_configr      s    &**9b99o0A.OTdSefv  xA  gB  CN  gO  gU  gU  gW  fX  RY  Z  	[%)),; Z	L))4!!/]OIOODUCV2W"XYZr   r   ?Trq   z.jsonzuA configurator export JSON to be compiled and flashed or a pre-compiled binary firmware file (bin/hex) to be flashed.)nargsarg_onlytype	completerhelpz-oz--outputzFile to write to)r   r   r   z-qz--quiet
store_truez&Quiet mode, only output error messages)r   actionr   z-kbz
--keyboardz"Keyboard to generate config.h for.)r   r   r   r   z@Used by the make system to generate info_config.h from info.json)hiddenc                 V   | j                   j                  r;t        | j                   j                        }t        |j	                  di             }nx| j                   j
                  r)t        t        | j                   j
                              }n9| j                  j                  d       | j                  d   j                          yt        t        dg}t        ||       t        ||       d|v r|j                  t!        |d                d|v rt#        |d   |       d|v rt%        ||       d	|v rt'        d	|d	   |d
d       d|v rt'        d|d   |dd       d|v rt'        d|d   |dd       t)        | j                   j*                  || j                   j,                         y)z&Generates the info_config.h file.
    configz6You must supply a configurator export or `--keyboard`.zgenerate-config-hFz#pragma oncer9   r   rX   
led_matrixENABLE_LED_MATRIX_LED_MATRIX_
rgb_matrixENABLE_RGB_MATRIX_RGB_MATRIX_rgblightRGBLIGHT_EFFECT_RGBLIGHT_MODE_N)r   r   r   r   rS   keyboardr   ry   errorsubcommands
print_helpr   r   re   r@   r(   r9   r   r   r   r   outputquiet)r   user_keymapr>   r?   s       r   generate_config_hr      s    xx-chh.?.?@[__Xr:;			Ysxx'8'89:NO+,779 )*A>RN,7~6$k,}*EFGL Y 7H,lN;|#&|\,5OQ_au  xE  	F|#&|\,5OQ_au  xE  	F\!&z<
3K^]o  rB  	C sxx?r   rn   )r   )%__doc__pathlibr   
dotty_dictr   argcomplete.completersr   milcr   qmk.infor   qmk.json_schemar   qmk.keyboardr	   r
   qmk.commandsr   r   qmk.pathr   r   qmk.constantsr   r   r   r)   r3   r9   r@   re   r   r   r   argument
subcommandr   ro   r   r   <module>r      s     1   % < < ' E
	PL"c%MP|0e&Z jd#R`ahRi  qh  idJHCUVdI\Hpqe\DRd  lP  QR[_`(@ a Q r W i
(@r   