]> Pileus Git - ~andy/csm213a-hw/blobdiff - vis/config.py
Save control options
[~andy/csm213a-hw] / vis / config.py
index 652ad648c02a068a7959acbd2a19c6f4fe17c463..08cc4eaa61ad981050bc3b7b9389a71d568a9c42 100644 (file)
@@ -1,3 +1,89 @@
+from configparser import ConfigParser
+
 class Config:
+       # Attributes
+       filename = "settings.cfg"
+
+       defaults = {
+               'serial': {
+                       'device':   '/dev/ttyACM0',
+                       'baudrate': '9600',
+                       'parity':   'N',
+                       'databits': '8',
+                       'stopbits': '1',
+               },
+               'xively': {
+                       'feedid':   '<feedid>',
+                       'apikey':   '<apikey>',
+                       'maxrate':  '10',
+               },
+               'enable': {
+                       'acc':      True,
+                       'mag':      True,
+                       'touch':    True,
+                       'light':    True,
+                       'a2d':      True,
+               },
+               'rate': {
+                       'acc':      1,
+                       'mag':      1,
+                       'touch':    1,
+                       'light':    1,
+                       'a2d':      1,
+               },
+       }
+
+       # Constructor
        def __init__(self):
-               pass
+               self.enable = {}
+               self.rate   = {}
+               self.parser = ConfigParser()
+               self.parser.add_section('serial')
+               self.parser.add_section('xively')
+               self.parser.add_section('enable')
+               self.parser.add_section('rate')
+               self.load()
+
+       # Methods
+       def load(self):
+               def get(sect, name):
+                       if self.parser.has_option(sect, name):
+                               return self.parser.get(sect, name)
+                       else:
+                               return self.defaults[sect][name]
+               def bin(val):
+                       return val == True or val == 'True'
+
+               self.parser.read(self.filename)
+
+               self.device   =     get('serial', 'device')
+               self.baudrate = int(get('serial', 'baudrate'))
+               self.parity   =     get('serial', 'parity')
+               self.databits = int(get('serial', 'databits'))
+               self.stopbits = int(get('serial', 'stopbits'))
+                                                                
+               self.feedid   =     get('xively', 'feedid')
+               self.apikey   =     get('xively', 'apikey')
+               self.maxrate  = int(get('xively', 'maxrate'))
+
+               for key in list(self.defaults['enable'].keys()):
+                       self.enable[key] = bin(get('enable', key))
+                       self.rate[key]   = int(get('rate',   key))
+
+       def save(self):
+               self.parser.set('serial', 'device',           self.device)
+               self.parser.set('serial', 'baudrate', str(int(self.baudrate)))
+               self.parser.set('serial', 'parity',           self.parity)
+               self.parser.set('serial', 'databits', str(int(self.databits)))
+               self.parser.set('serial', 'stopbits', str(int(self.stopbits)))
+
+               self.parser.set('xively', 'feedid',           self.feedid)
+               self.parser.set('xively', 'apikey',           self.apikey)
+               self.parser.set('xively', 'maxrate',  str(int(self.maxrate)))
+
+               for key in self.defaults['enable'].keys():
+                       self.parser.set('enable', key, str(bool(self.enable[key])))
+                       self.parser.set('rate',   key, str( int(self.rate[key])))
+
+               with open(self.filename, 'w') as fd:
+                       self.parser.write(fd)