138 lines
3.9 KiB
Python
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
|