def parseCandidateValues(self, ln): m = reCandThermPins.match(ln) if m: t = m.groups() if len(t) == 1: self.candThermPins.append(t[0]) return True m = reCandHeatPins.match(ln) if m: t = m.groups() if len(t) == 1: self.candHeatPins.append(t[0]) return True m = reCandProcessors.match(ln) if m: t = m.groups() if len(t) == 1: self.candProcessors.append(t[0]) return True m = reCandCPUClocks.match(ln) if m: t = m.groups() if len(t) == 1: self.candClocks.append(t[0]) return True m = reDefTT.match(ln) if m: t = m.groups() if len(t) == 2: s = self.parseTempTable(t[1]) if s: self.tempTables[t[0]] = s return True return False
def saveConfigFile(self, path, values): if not values: values = self.cfgValues if self.settings.verbose >= 1: print("Saving board: %s." % path) if self.settings.verbose >= 2: print(values) fp = open(path, "w") self.configFile = path skipToSensorEnd = False skipToHeaterEnd = False candThermPinsWritten = False candHeatPinsWritten = False candProcessorsWritten = False candCPUClocksWritten = False for ln in self.cfgBuffer: m = reStartSensors.match(ln) if m: fp.write(ln) fp.write( "// name type pin " "additional\n" ) ttString = "\n" ttString += "// Beta algorithm r0 beta r2 vadc\n" ttString += "// Steinhart-Hart rp t0 r0 t1 " ttString += "r1 t2 r2\n" for s in self.sensors: sstr = "%-10s%-15s%-7s" % ((s[0] + ","), (s[1] + ","), (s[2] + ",")) if s[3] is None: sstr += "0" else: sstr += "THERMISTOR_%s" % s[0].upper() tt = s[3] if len(tt) == 4: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-6s%s)\n" % ( s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), tt[3], ) else: ttString += ( "//TEMP_TABLE %-8s (%-8s%-6s%-8s%-6s%-8s%-6s%s)\n" % ( s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), (tt[3] + ","), (tt[4] + ","), (tt[5] + ","), tt[6], ) ) fp.write("DEFINE_TEMP_SENSOR(%s)\n" % sstr) fp.write(ttString) skipToSensorEnd = True continue if skipToSensorEnd: m = reEndSensors.match(ln) if m: fp.write(ln) skipToSensorEnd = False continue m = reStartHeaters.match(ln) if m: fp.write(ln) fp.write("// name pin invert pwm max_pwm\n") for s in self.heaters: sstr = "%-10s%-9s%-8s%-7s%s" % ( (s[0] + ","), (s[1] + ","), (s[2] + ","), s[3] + ",", s[4], ) fp.write("DEFINE_HEATER(%s)\n" % sstr) fp.write("\n") for s in self.heaters: fp.write(defineHeaterFormat % (s[0].upper(), s[0])) skipToHeaterEnd = True continue if skipToHeaterEnd: m = reEndHeaters.match(ln) if m: fp.write(ln) skipToHeaterEnd = False continue if reCandThermPins.match(ln): if not candThermPinsWritten: for pin in self.candThermPins: fp.write("//#define TEMP_SENSOR_PIN " + pin + "\n") candThermPinsWritten = True continue if reCandHeatPins.match(ln): if not candHeatPinsWritten: for pin in self.candHeatPins: fp.write("//#define HEATER_PIN " + pin + "\n") candHeatPinsWritten = True continue if reCandProcessors.match(ln): if not candProcessorsWritten: for pin in self.candProcessors: fp.write("//#define CPU_TYPE " + pin + "\n") candProcessorsWritten = True continue if reCandCPUClocks.match(ln): if not candCPUClocksWritten: for pin in self.candClocks: fp.write("//#define F_CPU_OPT " + pin + "\n") candCPUClocksWritten = True continue m = reDefine.match(ln) if m: t = m.groups() if len(t) == 2 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v[1] == False: fp.write("//") fp.write(defineValueFormat % (t[0], v[0])) else: if t[0] == "RX_ENABLE_PIN" or t[0] == "TX_ENABLE_PIN": # Known to be absent in the GUI, also won't be added anytime soon. fp.write(ln) else: print("Value key " + t[0] + " not found in GUI.") continue m = reDefBoolBL.match(ln) if m: t = m.groups() if len(t) == 1 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v == "" or v == False: fp.write("//") fp.write(defineBoolFormat % t[0]) else: if t[0] == "MOTHERBOARD": # Known to be absent in the GUI, also won't be added anytime soon. fp.write(ln) else: print("Boolean key " + t[0] + " not found in GUI.") continue fp.write(ln) fp.close() return True
def saveConfigFile(self, path): if os.path.basename(path) in protectedFiles: dlg = wx.MessageDialog( self, "It's not allowed to overwrite files " "distributed by Teacup. Choose another name.", "Protected file error", wx.OK + wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False if not os.path.basename(path).startswith("board."): dlg = wx.MessageDialog( self, "Illegal file name: %s.\n" "File name must begin with \"board.\"" % path, "Illegal file name", wx.OK + wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False ext = os.path.splitext(os.path.basename(path))[1] self.dir = os.path.dirname(path) if ext == "": path += ".h" try: fp = file(path, 'w') except: dlg = wx.MessageDialog(self, "Unable to write to file %s." % path, "File error", wx.OK + wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False self.configFile = path values = {} for pg in self.pages: v1 = pg.getValues() for k in v1.keys(): values[k] = v1[k] skipToSensorEnd = False skipToHeaterEnd = False candThermPinsWritten = False candHeatPinsWritten = False candProcessorsWritten = False candCPUClocksWritten = False for ln in self.cfgBuffer: m = reStartSensors.match(ln) if m: fp.write(ln) fp.write("// name type pin " "additional\n") ttString = "\n" ttString += "// Beta algorithm r0 beta r2 vadc\n" ttString += "// Steinhart-Hart rp t0 r0 t1 " ttString += "r1 t2 r2\n" for s in self.sensors: sstr = "%-10s%-15s%-7s" % ((s[0] + ","), (s[1] + ","), (s[2] + ",")) if s[3] is None: sstr += "0" else: sstr += "THERMISTOR_%s" % s[0].upper() tt = s[3] if len(tt) == 4: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-6s%s)\n" % \ (s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), tt[3]) else: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-8s%-6s%-8s%-6s%s)\n" % \ (s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), (tt[3] + ","), (tt[4] + ","), (tt[5] + ","), tt[6]) fp.write("DEFINE_TEMP_SENSOR(%s)\n" % sstr) fp.write(ttString) skipToSensorEnd = True continue if skipToSensorEnd: m = reEndSensors.match(ln) if m: fp.write(ln) skipToSensorEnd = False continue m = reStartHeaters.match(ln) if m: fp.write(ln) fp.write("// name pin invert pwm\n") for s in self.heaters: sstr = "%-10s%-9s%-8s%s" % ((s[0] + ","), (s[1] + ","), (s[2] + ","), s[3]) fp.write("DEFINE_HEATER(%s)\n" % sstr) fp.write("\n") for s in self.heaters: fp.write(defineHeaterFormat % (s[0].upper(), s[0])) skipToHeaterEnd = True continue if skipToHeaterEnd: m = reEndHeaters.match(ln) if m: fp.write(ln) skipToHeaterEnd = False continue if reCandThermPins.match(ln): if not candThermPinsWritten: for pin in self.candThermPins: fp.write("//#define TEMP_SENSOR_PIN " + pin + "\n") candThermPinsWritten = True continue if reCandHeatPins.match(ln): if not candHeatPinsWritten: for pin in self.candHeatPins: fp.write("//#define HEATER_PIN " + pin + "\n") candHeatPinsWritten = True continue if reCandProcessors.match(ln): if not candProcessorsWritten: for pin in self.candProcessors: fp.write("//#define CPU_TYPE " + pin + "\n") candProcessorsWritten = True continue if reCandCPUClocks.match(ln): if not candCPUClocksWritten: for pin in self.candClocks: fp.write("//#define F_CPU_OPT " + pin + "\n") candCPUClocksWritten = True continue m = reDefine.match(ln) if m: t = m.groups() if len(t) == 2 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v[1] == False: fp.write("//") fp.write(defineValueFormat % (t[0], v[0])) else: print "Value key " + t[0] + " not found in GUI." continue m = reDefBoolBL.match(ln) if m: t = m.groups() if len(t) == 1 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v == "" or v == False: fp.write("//") fp.write(defineBoolFormat % t[0]) else: if t[0] == 'MOTHERBOARD': # Known to be absent in the GUI, also won't be added anytime soon. fp.write(ln) else: print "Boolean key " + t[0] + " not found in GUI." continue fp.write(ln) fp.close() return self.generateTempTables()
def saveConfigFile(self, path): if os.path.basename(path) in protectedFiles: dlg = wx.MessageDialog(self, "It's not allowed to overwrite files " "distributed by Teacup. Choose another name.", "Protected file error", wx.OK + wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False if not os.path.basename(path).startswith("board."): dlg = wx.MessageDialog(self, "Illegal file name: %s.\n" "File name must begin with \"board.\"" % path, "Illegal file name", wx.OK + wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False ext = os.path.splitext(os.path.basename(path))[1] self.dir = os.path.dirname(path) if ext == "": path += ".h" try: fp = file(path, 'w') except: dlg = wx.MessageDialog(self, "Unable to write to file %s." % path, "File error", wx.OK + wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() return False self.configFile = path values = {} for pg in self.pages: v1 = pg.getValues() for k in v1.keys(): values[k] = v1[k] skipToSensorEnd = False skipToHeaterEnd = False tempTables = {} candThermPinsWritten = False candHeatPinsWritten = False candProcessorsWritten = False candCPUClocksWritten = False for ln in self.cfgBuffer: m = reStartSensors.match(ln) if m: fp.write(ln) fp.write("// name type pin " "additional\n"); ttString = "\n" ttString += "// Beta algorithm r0 beta r2 vadc\n" ttString += "// Steinhart-Hart rp t0 r0 t1 " ttString += "r1 t2 r2\n" for s in self.sensors: sstr = "%-10s%-15s%-7s" % ((s[0] + ","), (s[1] + ","), (s[2] + ",")) if s[3] is None: sstr += "0" else: sstr += "THERMISTOR_%s" % s[0].upper() tt = s[3] if len(tt) == 4: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-6s%s)\n" % \ (s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), tt[3]) else: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-8s%-6s%-8s%-6s%s)\n" % \ (s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), (tt[3] + ","), (tt[4] + ","), (tt[5] + ","), tt[6]) fp.write("DEFINE_TEMP_SENSOR(%s)\n" % sstr) fp.write(ttString) skipToSensorEnd = True continue if skipToSensorEnd: m = reEndSensors.match(ln) if m: fp.write(ln) skipToSensorEnd = False continue m = reStartHeaters.match(ln) if m: fp.write(ln) fp.write("// name port pwm\n") for s in self.heaters: sstr = "%-10s%-7s%s" % ((s[0] + ","), (s[1] + ","), s[2]) fp.write("DEFINE_HEATER(%s)\n" % sstr) fp.write("\n") for s in self.heaters: fp.write(defineHeaterFormat % (s[0].upper(), s[0])) skipToHeaterEnd = True continue if skipToHeaterEnd: m = reEndHeaters.match(ln) if m: fp.write(ln) skipToHeaterEnd = False continue if reCandThermPins.match(ln): if not candThermPinsWritten: for pin in self.candThermPins: fp.write("//#define TEMP_SENSOR_PIN " + pin + "\n") candThermPinsWritten = True continue if reCandHeatPins.match(ln): if not candHeatPinsWritten: for pin in self.candHeatPins: fp.write("//#define HEATER_PIN " + pin + "\n") candHeatPinsWritten = True continue if reCandProcessors.match(ln): if not candProcessorsWritten: for pin in self.candProcessors: fp.write("//#define CPU_TYPE " + pin + "\n") candProcessorsWritten = True continue if reCandCPUClocks.match(ln): if not candCPUClocksWritten: for pin in self.candClocks: fp.write("//#define F_CPU_OPT " + pin + "\n") candCPUClocksWritten = True continue m = reDefine.match(ln) if m: t = m.groups() if len(t) == 2 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v[1] == False: fp.write("//") fp.write(defineValueFormat % (t[0], v[0])) else: if t[0] == 'TX_ENABLE_PIN' or t[0] == 'RX_ENABLE_PIN': # Known to be absent in the GUI, probably won't be added anytime soon. fp.write(ln) else: print "Value key " + t[0] + " not found in GUI." continue m = reDefBoolBL.match(ln) if m: t = m.groups() if len(t) == 1 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v == "" or v == False: fp.write("//") fp.write(defineBoolFormat % t[0]) else: if t[0] == 'MOTHERBOARD': # Known to be absent in the GUI, also won't be added anytime soon. fp.write(ln) else: print "Boolean key " + t[0] + " not found in GUI." continue fp.write(ln) fp.close() return self.generateTempTables()
def saveConfigFile(self, path, values): if not values: values = self.cfgValues if self.settings.verbose >= 1: print("Saving board: %s." % path) if self.settings.verbose >= 2: print values fp = file(path, 'w') self.configFile = path skipToSensorEnd = False skipToHeaterEnd = False candThermPinsWritten = False candHeatPinsWritten = False candProcessorsWritten = False candCPUClocksWritten = False for ln in self.cfgBuffer: m = reStartSensors.match(ln) if m: fp.write(ln) fp.write("// name type pin " "additional\n"); ttString = "\n" ttString += "// Beta algorithm r0 beta r2 vadc\n" ttString += "// Steinhart-Hart rp t0 r0 t1 " ttString += "r1 t2 r2\n" for s in self.sensors: sstr = "%-10s%-15s%-7s" % ((s[0] + ","), (s[1] + ","), (s[2] + ",")) if s[3] is None: sstr += "0" else: sstr += "THERMISTOR_%s" % s[0].upper() tt = s[3] if len(tt) == 4: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-6s%s)\n" % \ (s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), tt[3]) else: ttString += "//TEMP_TABLE %-8s (%-8s%-6s%-8s%-6s%-8s%-6s%s)\n" % \ (s[0].upper(), (tt[0] + ","), (tt[1] + ","), (tt[2] + ","), (tt[3] + ","), (tt[4] + ","), (tt[5] + ","), tt[6]) fp.write("DEFINE_TEMP_SENSOR(%s)\n" % sstr) fp.write(ttString) skipToSensorEnd = True continue if skipToSensorEnd: m = reEndSensors.match(ln) if m: fp.write(ln) skipToSensorEnd = False continue m = reStartHeaters.match(ln) if m: fp.write(ln) fp.write("// name pin invert pwm max_pwm\n") for s in self.heaters: sstr = "%-10s%-9s%-8s%-7s%s" % ((s[0] + ","), (s[1] + ","), (s[2] + ","), s[3] + ",", s[4]) fp.write("DEFINE_HEATER(%s)\n" % sstr) fp.write("\n") for s in self.heaters: fp.write(defineHeaterFormat % (s[0].upper(), s[0])) skipToHeaterEnd = True continue if skipToHeaterEnd: m = reEndHeaters.match(ln) if m: fp.write(ln) skipToHeaterEnd = False continue if reCandThermPins.match(ln): if not candThermPinsWritten: for pin in self.candThermPins: fp.write("//#define TEMP_SENSOR_PIN " + pin + "\n") candThermPinsWritten = True continue if reCandHeatPins.match(ln): if not candHeatPinsWritten: for pin in self.candHeatPins: fp.write("//#define HEATER_PIN " + pin + "\n") candHeatPinsWritten = True continue if reCandProcessors.match(ln): if not candProcessorsWritten: for pin in self.candProcessors: fp.write("//#define CPU_TYPE " + pin + "\n") candProcessorsWritten = True continue if reCandCPUClocks.match(ln): if not candCPUClocksWritten: for pin in self.candClocks: fp.write("//#define F_CPU_OPT " + pin + "\n") candCPUClocksWritten = True continue m = reDefine.match(ln) if m: t = m.groups() if len(t) == 2 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v[1] == False: fp.write("//") fp.write(defineValueFormat % (t[0], v[0])) else: if t[0] == 'RX_ENABLE_PIN' or t[0] == 'TX_ENABLE_PIN': # Known to be absent in the GUI, also won't be added anytime soon. fp.write(ln) else: print("Value key " + t[0] + " not found in GUI.") continue m = reDefBoolBL.match(ln) if m: t = m.groups() if len(t) == 1 and t[0] in values.keys(): v = values[t[0]] self.cfgValues[t[0]] = v if v == "" or v == False: fp.write("//") fp.write(defineBoolFormat % t[0]) else: if t[0] == 'MOTHERBOARD': # Known to be absent in the GUI, also won't be added anytime soon. fp.write(ln) else: print "Boolean key " + t[0] + " not found in GUI." continue fp.write(ln) fp.close() return True
def loadConfigFile(self, fn): try: self.cfgBuffer = list(open(fn)) except: return False self.configFile = fn self.processors = [] self.sensors = [] self.heaters = [] self.candHeatPins = [] self.candThermPins = [] self.candProcessors = [] self.candClocks = [] tempTables = {} gatheringHelpText = False helpTextString = "" helpKey = None self.cfgValues = {} self.helpText = {} prevLines = "" for ln in self.cfgBuffer: if gatheringHelpText: if reHelpTextEnd.match(ln): gatheringHelpText = False helpTextString = helpTextString.strip() # Keep paragraphs with double-newline. helpTextString = helpTextString.replace("\n\n ", "\n\n") # Keep indented lines, typically a list. helpTextString = helpTextString.replace("\n\n ", "\n\n ") helpTextString = helpTextString.replace("\n ", "\n\n ") # Remove all other newlines and indents. helpTextString = helpTextString.replace("\n ", " ") hk = helpKey.split() for k in hk: self.helpText[k] = helpTextString helpTextString = "" helpKey = None continue else: helpTextString += ln continue m = reHelpTextStart.match(ln) if m: t = m.groups() gatheringHelpText = True helpKey = t[0] continue if ln.rstrip().endswith("\\"): prevLines += ln.rstrip()[:-1] continue if prevLines != "": ln = prevLines + ln prevLines = "" if ln.lstrip().startswith("//"): m = reCandThermPins.match(ln) if m: t = m.groups() if len(t) == 1: self.candThermPins.append(t[0]) continue m = reCandHeatPins.match(ln) if m: t = m.groups() if len(t) == 1: self.candHeatPins.append(t[0]) continue m = reCandProcessors.match(ln) if m: t = m.groups() if len(t) == 1: self.candProcessors.append(t[0]) continue m = reCandCPUClocks.match(ln) if m: t = m.groups() if len(t) == 1: self.candClocks.append(t[0]) continue m = reDefTT.match(ln) if m: t = m.groups() if len(t) == 2: s = self.parseTempTable(t[1]) if s: tempTables[t[0]] = s continue continue if ln.lstrip().startswith("#define"): m = reDefQS.search(ln) if m: t = m.groups() if len(t) == 2: m = reDefQSm.search(ln) if m: t = m.groups() tt = re.findall(reDefQSm2, t[1]) if len(tt) == 1: self.cfgValues[t[0]] = tt[0] continue elif len(tt) > 1: self.cfgValues[t[0]] = tt continue m = reDefine.search(ln) if m: t = m.groups() if len(t) == 2: self.cfgValues[t[0]] = t[1] if reFloatAttr.search(ln): pass continue m = reDefBool.search(ln) if m: t = m.groups() if len(t) == 1: self.cfgValues[t[0]] = True else: m = reDefTS.search(ln) if m: t = m.groups() if len(t) == 1: s = self.parseSensor(t[0]) if s: self.sensors.append(s) continue m = reDefHT.search(ln) if m: t = m.groups() if len(t) == 1: s = self.parseHeater(t[0]) if s: self.heaters.append(s) continue for k in range(len(self.sensors)): tn = self.sensors[k][0].upper() if tn in tempTables.keys(): self.sensors[k][3] = tempTables[tn] else: self.sensors[k][3] = None if os.path.basename(fn) in protectedFiles: self.parent.enableSaveBoard(False, True) self.protFileLoaded = True else: self.protFileLoaded = False self.parent.enableSaveBoard(True, True) self.parent.setBoardTabFile(os.path.basename(fn)) self.pgHeaters.setCandidatePins(self.candHeatPins) self.pgSensors.setCandidatePins(self.candThermPins) self.pgCpu.setCandidateProcessors(self.candProcessors) self.pgCpu.setCandidateClocks(self.candClocks) for pg in self.pages: pg.insertValues(self.cfgValues) pg.setHelpText(self.helpText) self.pgSensors.setSensors(self.sensors) self.pgHeaters.setHeaters(self.heaters) return True