1
0
Fork 0

Allow encoder config from info.json (#17295)

This commit is contained in:
Joel Challis 2022-06-21 04:15:06 +01:00 committed by GitHub
parent 4c39bad2e6
commit 1a400d8644
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 159 additions and 0 deletions

View file

@ -218,6 +218,62 @@ def _extract_audio(info_data, config_c):
info_data['audio'] = {'pins': audio_pins}
def _extract_encoders_values(config_c, postfix=''):
"""Common encoder extraction logic
"""
a_pad = config_c.get(f'ENCODERS_PAD_A{postfix}', '').replace(' ', '')[1:-1]
b_pad = config_c.get(f'ENCODERS_PAD_B{postfix}', '').replace(' ', '')[1:-1]
resolutions = config_c.get(f'ENCODER_RESOLUTIONS{postfix}', '').replace(' ', '')[1:-1]
default_resolution = config_c.get('ENCODER_RESOLUTION', '4')
if a_pad and b_pad:
a_pad = list(filter(None, a_pad.split(',')))
b_pad = list(filter(None, b_pad.split(',')))
resolutions = list(filter(None, resolutions.split(',')))
resolutions += [default_resolution] * (len(a_pad) - len(resolutions))
encoders = []
for index in range(len(a_pad)):
encoders.append({'pin_a': a_pad[index], 'pin_b': b_pad[index], "resolution": int(resolutions[index])})
return encoders
def _extract_encoders(info_data, config_c):
"""Populate data about encoder pins
"""
encoders = _extract_encoders_values(config_c)
if encoders:
if 'encoder' not in info_data:
info_data['encoder'] = {}
if 'rotary' in info_data['encoder']:
_log_warning(info_data, 'Encoder config is specified in both config.h and info.json (encoder.rotary) (Value: %s), the config.h value wins.' % info_data['encoder']['rotary'])
info_data['encoder']['rotary'] = encoders
def _extract_split_encoders(info_data, config_c):
"""Populate data about split encoder pins
"""
encoders = _extract_encoders_values(config_c, '_RIGHT')
if encoders:
if 'split' not in info_data:
info_data['split'] = {}
if 'encoder' not in info_data['split']:
info_data['split']['encoder'] = {}
if 'right' not in info_data['split']['encoder']:
info_data['split']['encoder']['right'] = {}
if 'rotary' in info_data['split']['encoder']['right']:
_log_warning(info_data, 'Encoder config is specified in both config.h and info.json (encoder.rotary) (Value: %s), the config.h value wins.' % info_data['split']['encoder']['right']['rotary'])
info_data['split']['encoder']['right']['rotary'] = encoders
def _extract_secure_unlock(info_data, config_c):
"""Populate data about the secure unlock sequence
"""
@ -506,6 +562,8 @@ def _extract_config_h(info_data, config_c):
_extract_split_main(info_data, config_c)
_extract_split_transport(info_data, config_c)
_extract_split_right_pins(info_data, config_c)
_extract_encoders(info_data, config_c)
_extract_split_encoders(info_data, config_c)
_extract_device_version(info_data)
return info_data