configfile: Support config.getchoice() with integer keys
If the choice mapping uses integer keys then lookup the config option using self.getint(). This simplifies the callers and improves the encoding of the printer.configfile.settings export. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
75183bfb86
commit
84ac5b0146
|
@ -69,7 +69,10 @@ class ConfigWrapper:
|
||||||
return self._get_wrapper(self.fileconfig.getboolean, option, default,
|
return self._get_wrapper(self.fileconfig.getboolean, option, default,
|
||||||
note_valid=note_valid)
|
note_valid=note_valid)
|
||||||
def getchoice(self, option, choices, default=sentinel, note_valid=True):
|
def getchoice(self, option, choices, default=sentinel, note_valid=True):
|
||||||
c = self.get(option, default, note_valid=note_valid)
|
if choices and type(list(choices.keys())[0]) == int:
|
||||||
|
c = self.getint(option, default, note_valid=note_valid)
|
||||||
|
else:
|
||||||
|
c = self.get(option, default, note_valid=note_valid)
|
||||||
if c not in choices:
|
if c not in choices:
|
||||||
raise error("Choice '%s' for option '%s' in section '%s'"
|
raise error("Choice '%s' for option '%s' in section '%s'"
|
||||||
" is not a valid choice" % (c, option, self.section))
|
" is not a valid choice" % (c, option, self.section))
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
BACKGROUND_PRIORITY_CLOCK = 0x7fffffff00000000
|
BACKGROUND_PRIORITY_CLOCK = 0x7fffffff00000000
|
||||||
LINE_LENGTH_DEFAULT="20"
|
LINE_LENGTH_DEFAULT=20
|
||||||
LINE_LENGTH_OPTIONS={"16":16, "20":20}
|
LINE_LENGTH_OPTIONS={16:16, 20:20}
|
||||||
|
|
||||||
TextGlyphs = { 'right_arrow': '\x7e' }
|
TextGlyphs = { 'right_arrow': '\x7e' }
|
||||||
|
|
||||||
|
@ -22,9 +22,9 @@ class HD44780:
|
||||||
pins = [ppins.lookup_pin(config.get(name + '_pin'))
|
pins = [ppins.lookup_pin(config.get(name + '_pin'))
|
||||||
for name in ['rs', 'e', 'd4', 'd5', 'd6', 'd7']]
|
for name in ['rs', 'e', 'd4', 'd5', 'd6', 'd7']]
|
||||||
self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init',
|
self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init',
|
||||||
True)
|
True)
|
||||||
self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS,
|
self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS,
|
||||||
LINE_LENGTH_DEFAULT)
|
LINE_LENGTH_DEFAULT)
|
||||||
mcu = None
|
mcu = None
|
||||||
for pin_params in pins:
|
for pin_params in pins:
|
||||||
if mcu is not None and pin_params['chip'] != mcu:
|
if mcu is not None and pin_params['chip'] != mcu:
|
||||||
|
@ -43,9 +43,9 @@ class HD44780:
|
||||||
self.all_framebuffers = [
|
self.all_framebuffers = [
|
||||||
# Text framebuffers
|
# Text framebuffers
|
||||||
(self.text_framebuffers[0], bytearray('~'*2*self.line_length),
|
(self.text_framebuffers[0], bytearray('~'*2*self.line_length),
|
||||||
0x80),
|
0x80),
|
||||||
(self.text_framebuffers[1], bytearray('~'*2*self.line_length),
|
(self.text_framebuffers[1], bytearray('~'*2*self.line_length),
|
||||||
0xc0),
|
0xc0),
|
||||||
# Glyph framebuffer
|
# Glyph framebuffer
|
||||||
(self.glyph_framebuffer, bytearray('~'*64), 0x40) ]
|
(self.glyph_framebuffer, bytearray('~'*64), 0x40) ]
|
||||||
def build_config(self):
|
def build_config(self):
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
import logging
|
import logging
|
||||||
from .. import bus
|
from .. import bus
|
||||||
|
|
||||||
LINE_LENGTH_DEFAULT="20"
|
LINE_LENGTH_DEFAULT=20
|
||||||
LINE_LENGTH_OPTIONS={"16":16, "20":20}
|
LINE_LENGTH_OPTIONS={16:16, 20:20}
|
||||||
|
|
||||||
TextGlyphs = { 'right_arrow': '\x7e' }
|
TextGlyphs = { 'right_arrow': '\x7e' }
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class hd44780_spi:
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.printer = config.get_printer()
|
self.printer = config.get_printer()
|
||||||
self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init',
|
self.hd44780_protocol_init = config.getboolean('hd44780_protocol_init',
|
||||||
True)
|
True)
|
||||||
# spi config
|
# spi config
|
||||||
self.spi = bus.MCU_SPI_from_config(
|
self.spi = bus.MCU_SPI_from_config(
|
||||||
config, 0x00, pin_option="latch_pin")
|
config, 0x00, pin_option="latch_pin")
|
||||||
|
@ -31,7 +31,7 @@ class hd44780_spi:
|
||||||
|
|
||||||
self.icons = {}
|
self.icons = {}
|
||||||
self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS,
|
self.line_length = config.getchoice('line_length', LINE_LENGTH_OPTIONS,
|
||||||
LINE_LENGTH_DEFAULT)
|
LINE_LENGTH_DEFAULT)
|
||||||
|
|
||||||
# framebuffers
|
# framebuffers
|
||||||
self.text_framebuffers = [bytearray(' '*2*self.line_length),
|
self.text_framebuffers = [bytearray(' '*2*self.line_length),
|
||||||
|
@ -40,9 +40,9 @@ class hd44780_spi:
|
||||||
self.all_framebuffers = [
|
self.all_framebuffers = [
|
||||||
# Text framebuffers
|
# Text framebuffers
|
||||||
(self.text_framebuffers[0], bytearray('~'*2*self.line_length),
|
(self.text_framebuffers[0], bytearray('~'*2*self.line_length),
|
||||||
0x80),
|
0x80),
|
||||||
(self.text_framebuffers[1], bytearray('~'*2*self.line_length),
|
(self.text_framebuffers[1], bytearray('~'*2*self.line_length),
|
||||||
0xc0),
|
0xc0),
|
||||||
# Glyph framebuffer
|
# Glyph framebuffer
|
||||||
(self.glyph_framebuffer, bytearray('~'*64), 0x40) ]
|
(self.glyph_framebuffer, bytearray('~'*64), 0x40) ]
|
||||||
def send_4_bits(self, cmd, is_data, minclock):
|
def send_4_bits(self, cmd, is_data, minclock):
|
||||||
|
|
|
@ -167,13 +167,13 @@ class MAX31856(SensorBase):
|
||||||
}
|
}
|
||||||
value = config.getchoice('tc_type', types, default="K")
|
value = config.getchoice('tc_type', types, default="K")
|
||||||
averages = {
|
averages = {
|
||||||
"1" : MAX31856_CR1_AVGSEL1,
|
1 : MAX31856_CR1_AVGSEL1,
|
||||||
"2" : MAX31856_CR1_AVGSEL2,
|
2 : MAX31856_CR1_AVGSEL2,
|
||||||
"4" : MAX31856_CR1_AVGSEL4,
|
4 : MAX31856_CR1_AVGSEL4,
|
||||||
"8" : MAX31856_CR1_AVGSEL8,
|
8 : MAX31856_CR1_AVGSEL8,
|
||||||
"16" : MAX31856_CR1_AVGSEL16
|
16 : MAX31856_CR1_AVGSEL16
|
||||||
}
|
}
|
||||||
value |= config.getchoice('tc_averaging_count', averages, "1")
|
value |= config.getchoice('tc_averaging_count', averages, 1)
|
||||||
cmds.append(value)
|
cmds.append(value)
|
||||||
|
|
||||||
value = (MAX31856_MASK_VOLTAGE_UNDER_OVER_FAULT |
|
value = (MAX31856_MASK_VOLTAGE_UNDER_OVER_FAULT |
|
||||||
|
|
|
@ -472,11 +472,8 @@ def TMCMicrostepHelper(config, mcu_tmc):
|
||||||
and config.get('microsteps', None, note_valid=False) is not None):
|
and config.get('microsteps', None, note_valid=False) is not None):
|
||||||
# Older config format with microsteps in tmc config section
|
# Older config format with microsteps in tmc config section
|
||||||
ms_config = config
|
ms_config = config
|
||||||
ms = ms_config.getint('microsteps')
|
steps = {256: 0, 128: 1, 64: 2, 32: 3, 16: 4, 8: 5, 4: 6, 2: 7, 1: 8}
|
||||||
mres = {256: 0, 128: 1, 64: 2, 32: 3, 16: 4, 8: 5, 4: 6, 2: 7, 1: 8}.get(ms)
|
mres = ms_config.getchoice('microsteps', steps)
|
||||||
if mres is None:
|
|
||||||
raise config.error("Invalid '%s' microstep setting (%d)"
|
|
||||||
% (config.get_name(), ms))
|
|
||||||
fields.set_field("mres", mres)
|
fields.set_field("mres", mres)
|
||||||
fields.set_field("intpol", config.getboolean("interpolate", True))
|
fields.set_field("intpol", config.getboolean("interpolate", True))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue