Teacup_Firmware/configtool/settings.py

138 lines
3.9 KiB
Python

from __future__ import print_function
from six import iteritems
import time
import sys
try:
import configparser
except ImportError:
print(
"ImportError: No module named configparser\n\n"
"configparser is not installed. This program requires configparser to run.\n"
"Your package manager may help you."
)
time.sleep(10)
sys.exit(-1)
import os
from configtool.data import BSIZESMALL, offsetTcLabel
INIFILE = "configtool.ini"
DEFAULT_INIFILE = "configtool.default.ini"
class Settings:
def __init__(self, app, folder, ini=None):
self.app = app
self.folder = folder
self.inifile = os.path.join(folder, INIFILE)
self.section = "configtool"
self.arduinodir = ""
self.cflags = ""
self.ldflags = ""
self.objcopyflags = ""
self.programmer = "wiring"
self.programflags = ""
self.port = "/dev/ttyACM0"
self.uploadspeed = 38400
self.t0 = 25
self.r1 = 0
self.numTemps = 25
self.maxAdc = 1023
self.minAdc = 1
# Runtime settings
self.verbose = 0
self.cfg = configparser.ConfigParser()
self.cfg.optionxform = str
self.loaded = self.readConfig(ini)
def readConfig(self, ini):
if ini:
if not self.cfg.read(ini):
return False
else:
if not self.cfg.read(self.inifile):
if not self.cfg.read(os.path.join(self.folder, DEFAULT_INIFILE)):
print(
"Neither of settings files %s or %s exist. Using default values."
% (INIFILE, DEFAULT_INIFILE)
)
return False
if self.cfg.has_section(self.section):
cfg = self.cfg[self.section]
values = self.getValues()
def cfg_get(key):
val = cfg.get(key, values[key])
val = val.replace("\n", " ")
return val
self.arduinodir = cfg_get("arduinodir")
self.cflags = cfg_get("cflags")
self.ldflags = cfg_get("ldflags")
self.objcopyflags = cfg_get("objcopyflags")
self.programflags = cfg_get("programflags")
self.programmer = cfg_get("programmer")
self.port = cfg_get("port")
self.t0 = cfg_get("t0")
self.r1 = cfg_get("r1")
self.numTemps = cfg_get("numtemps")
self.maxAdc = cfg_get("maxadc")
self.minAdc = cfg_get("minadc")
self.uploadspeed = cfg_get("uploadspeed")
else:
print("Missing %s section - assuming defaults." % self.section)
return False
return True
def getValues(self):
return {
"arduinodir": str(self.arduinodir),
"cflags": str(self.cflags),
"ldflags": str(self.ldflags),
"objcopyflags": str(self.objcopyflags),
"programflags": str(self.programflags),
"programmer": str(self.programmer),
"port": str(self.port),
"t0": str(self.t0),
"r1": str(self.r1),
"numtemps": str(self.numTemps),
"maxadc": str(self.maxAdc),
"minadc": str(self.minAdc),
"uploadspeed": str(self.uploadspeed),
}
def saveSettings(self, inifile=None):
if not inifile:
inifile = self.inifile
self.section = "configtool"
try:
self.cfg.add_section(self.section)
except configparser.DuplicateSectionError:
pass
values = self.getValues()
for k, v in iteritems(values):
self.cfg[self.section][k] = v.replace("%", "%%")
try:
cfp = open(inifile, "w")
except:
print("Unable to open settings file %s for writing." % inifile)
return False
self.cfg.write(cfp)
cfp.close()
return True