예제 #1
0
    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
예제 #2
0
  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
예제 #3
0
    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
예제 #4
0
    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()
예제 #5
0
  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()
예제 #6
0
  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