mirror of https://github.com/Desuuuu/klipper.git
mcu: Raise config_error (not protocol error) on pin enumeration errors
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
31fcd491fd
commit
ecbfa76242
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
import sys, os, zlib, logging, math
|
||||
import serialhdl, pins, chelper, clocksync
|
||||
import serialhdl, msgproto, pins, chelper, clocksync
|
||||
|
||||
class error(Exception):
|
||||
pass
|
||||
|
@ -548,6 +548,7 @@ class MCU:
|
|||
raise error("MCU '%s' CRC does not match config" % (self._name,))
|
||||
# Transmit config messages (if needed)
|
||||
self.register_response(self._handle_starting, 'starting')
|
||||
try:
|
||||
if prev_crc is None:
|
||||
logging.info("Sending MCU '%s' printer configuration...",
|
||||
self._name)
|
||||
|
@ -559,6 +560,14 @@ class MCU:
|
|||
# Transmit init messages
|
||||
for c in self._init_cmds:
|
||||
self._serial.send(c)
|
||||
except msgproto.enumeration_error as e:
|
||||
enum_name, enum_value = e.get_enum_params()
|
||||
if enum_name == 'pin':
|
||||
# Raise pin name errors as a config error (not a protocol error)
|
||||
raise self._printer.config_error(
|
||||
"Pin '%s' is not a valid pin name on mcu '%s'"
|
||||
% (enum_value, self._name))
|
||||
raise
|
||||
def _send_get_config(self):
|
||||
get_config_cmd = self.lookup_query_command(
|
||||
"get_config",
|
||||
|
|
|
@ -86,12 +86,14 @@ class PT_progmem_buffer(PT_string):
|
|||
class PT_buffer(PT_string):
|
||||
pass
|
||||
|
||||
MessageTypes = {
|
||||
'%u': PT_uint32(), '%i': PT_int32(),
|
||||
'%hu': PT_uint16(), '%hi': PT_int16(),
|
||||
'%c': PT_byte(),
|
||||
'%s': PT_string(), '%.*s': PT_progmem_buffer(), '%*s': PT_buffer(),
|
||||
}
|
||||
class enumeration_error(error):
|
||||
def __init__(self, enum_name, value):
|
||||
self.enum_name = enum_name
|
||||
self.value = value
|
||||
error.__init__(self, "Unknown value '%s' in enumeration '%s'"
|
||||
% (value, enum_name))
|
||||
def get_enum_params(self):
|
||||
return self.enum_name, self.value
|
||||
|
||||
class Enumeration:
|
||||
is_int = False
|
||||
|
@ -105,8 +107,7 @@ class Enumeration:
|
|||
def encode(self, out, v):
|
||||
tv = self.enums.get(v)
|
||||
if tv is None:
|
||||
raise error("Unknown value '%s' in enumeration '%s'"
|
||||
% (v, self.enum_name))
|
||||
raise enumeration_error(self.enum_name, v)
|
||||
self.pt.encode(out, tv)
|
||||
def parse(self, s, pos):
|
||||
v, pos = self.pt.parse(s, pos)
|
||||
|
@ -115,6 +116,13 @@ class Enumeration:
|
|||
tv = "?%d" % (v,)
|
||||
return tv, pos
|
||||
|
||||
MessageTypes = {
|
||||
'%u': PT_uint32(), '%i': PT_int32(),
|
||||
'%hu': PT_uint16(), '%hi': PT_int16(),
|
||||
'%c': PT_byte(),
|
||||
'%s': PT_string(), '%.*s': PT_progmem_buffer(), '%*s': PT_buffer(),
|
||||
}
|
||||
|
||||
# Lookup the message types for a format string
|
||||
def lookup_params(msgformat, enumerations={}):
|
||||
out = []
|
||||
|
|
Loading…
Reference in New Issue