Subversion Repositories HomeAutomation

Rev

Rev 749 | Rev 751 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 749 Rev 750
Line 12... Line 12...
12
from ConfigParser import ConfigParser
12
from ConfigParser import ConfigParser
13
import filters
13
import filters
14
import statespaces
14
import statespaces
15
from CanPktHandlerBase import CanPktHandlerBase
15
from CanPktHandlerBase import CanPktHandlerBase
16
from CanPktHandler1 import CanPktHandler1
16
from CanPktHandler1 import CanPktHandler1
-
 
17
 
-
 
18
from NodeIfSerial import NodeIfSerial
-
 
19
from NodeIfTCP import NodeIfTCP
-
 
20
from NodeIfUDP import NodeIfUDP
-
 
21
from NodeIfTCPTLS import NodeIfTCPTLS
-
 
22
from NodeIfCanStim import NodeIfCanStim
17
 
23
 
18
class DynamicModuleCfg:
24
class DynamicModuleCfg:
19
    """Dynamic module manager"""
25
    """Dynamic module manager"""
20
 
26
 
21
    modSubDir = None
27
    modSubDir = None
Line 125... Line 131...
125
class FilterCfg:
131
class FilterCfg:
126
    """Filter resource manager"""
132
    """Filter resource manager"""
127
   
133
   
128
    REQUIRED_ATTRIBUTES = ['ASSOCIATED_SPACES', 'DESCRIPTIVE_NAME',
134
    REQUIRED_ATTRIBUTES = ['ASSOCIATED_SPACES', 'DESCRIPTIVE_NAME',
129
                           'attach', 'detach', 'filter']
135
                           'attach', 'detach', 'filter']
130
   
136
   
131
    dynamicModuleCfg = None
137
    dynamicModuleCfg = None
132
    FILTER_SUBDIR = 'filters'
138
    FILTER_SUBDIR = 'filters'
133
    filterModules = {}
139
    filterModules = {}
134
   
140
   
135
    def __init__(self):
141
    def __init__(self):
Line 180... Line 186...
180
   
186
   
181
    def loadSpace(self, name):
187
    def loadSpace(self, name):
182
        newSpace = self.dynamicModuleCfg.loadModule(name)
188
        newSpace = self.dynamicModuleCfg.loadModule(name)
183
        if newSpace is not None:
189
        if newSpace is not None:
184
            self.spaceModules[name] = newFilt
190
            self.spaceModules[name] = newFilt
185
            return True
191
            return True
186
        else:
192
        else:
187
            return False
193
            return False
188
 
194
 
189
    def loadSpaces(self, config = None):
195
    def loadSpaces(self, config = None):
190
        self.spaceModules = self.dynamicModuleCfg.loadModules()
196
        self.spaceModules = self.dynamicModuleCfg.loadModules()
191
        for sM in self.spaceModules:
197
        for sM in self.spaceModules:
192
            log.debug(sM)
198
            log.debug(sM)
Line 210... Line 216...
210
class DaemonConfig:
216
class DaemonConfig:
211
   
217
   
212
    stateSpaceCfg = None
218
    stateSpaceCfg = None
213
    filterCfg = None
219
    filterCfg = None
214
    pktHandler = None
220
    pktHandler = None
215
   
221
   
216
    filterChain = []
222
    filterChain = []
217
    nodeInterfaces = []
223
    nodeInterfaces = []
218
    nodeInterfaceMap = {}
224
    nodeInterfaceMap = {}
219
   
225
   
-
 
226
    INTERFACE_TYPES = {'serial' : NodeIfSerial, 'tcp' : NodeIfTCP,
-
 
227
                       'udp' : NodeIfUDP, 'sim' : NodeIfCanStim,
-
 
228
                       'tcptls' : NodeIfTCPTLS}
-
 
229
 
220
    def __init__ (self):
230
    def __init__ (self):
221
        self.filterCfg = FilterCfg()
231
        self.filterCfg = FilterCfg()
222
        self.stateSpaceCfg = StateSpaceCfg()
232
        self.stateSpaceCfg = StateSpaceCfg()
223
        self.pktHandler = CanPktHandler1()
233
        self.pktHandler = CanPktHandler1(self)
224
       
234
       
225
    def load(self):
235
    def load(self):
226
        self.stateSpaceCfg.loadSpaces()
236
        self.stateSpaceCfg.loadSpaces()
227
        self.stateSpaceCfg.loadFilters()
237
        self.filterCfg.loadFilters()
228
        __setupFilterBindings()
238
        self.__setupFilterBindings()
-
 
239
        self.__setupStateSpaceRelations()
229
        __setupFilterChain()
240
        self.__setupFilterChain()
230
   
241
 
231
    def save(self):
242
    def save(self):
232
        self.stateSpaceCfg.saveSpaces()
243
        self.stateSpaceCfg.saveSpaces()
233
        self.filterCfg.saveFilters()
244
        self.filterCfg.saveFilters()
-
 
245
       
-
 
246
    def addInterface(self, type, cfg = None):
-
 
247
        """ addInterface
-
 
248
        type - a valid interface type name
-
 
249
        cfg - interface configuration
-
 
250
        returns: True on success, False otherwise """
-
 
251
       
-
 
252
        if not self.INTERFACE_TYPES.has_key(type):
-
 
253
            log.debug('addInterface called with invalid interface type')
-
 
254
            return False
-
 
255
       
-
 
256
        cfg = self.INTERFACE_TYPES[type].DEFAULT_CONFIG
-
 
257
        print cfg
-
 
258
        nodeIf = self.INTERFACE_TYPES[type](self.pktHandler, cfg)
-
 
259
        print nodeIf
-
 
260
        self.nodeInterfaces.append(nodeIf)
-
 
261
   
-
 
262
    def remInterface(self, name):
-
 
263
        pass
234
       
264
       
235
    def __setupFilterChain(self):
265
    def __setupFilterChain(self):
236
        self.filterChain = ['DefaultFilter']
266
        self.filterChain = ['DefaultFilter']
237
   
267
   
238
    def __setupFilterBindings(self):
268
    def __setupFilterBindings(self):
Line 243... Line 273...
243
                    assocSpaces.append(self.stateSpaceCfg.spaceModules[s])
273
                    assocSpaces.append(self.stateSpaceCfg.spaceModules[s])
244
                else:
274
                else:
245
                    print 'WARNING: Reference to undefined state space: ' + s
275
                    print 'WARNING: Reference to undefined state space: ' + s
246
            setattr(f, '__ASSOCIATED_SPACES__', assocSpaces)
276
            setattr(f, '__ASSOCIATED_SPACES__', assocSpaces)
247
   
277
 
248
 
-
 
249
    def setupStateSpaceRelations(self):
278
    def __setupStateSpaceRelations(self):
250
        for sm in self.stateSpaceCfg.spaceModules:
279
        for sm in self.stateSpaceCfg.spaceModules:
251
            relatedSpaceNames = self.stateSpaceCfg.spaceModules[sm].RELATED_SPACES
280
            relatedSpaceNames = self.stateSpaceCfg.spaceModules[sm].RELATED_SPACES
252
            relatedSpaces = {}
281
            relatedSpaces = {}
253
            for rsname in relatedSpaceNames:
282
            for rsname in relatedSpaceNames:
254
                relatedSpaces[rsname] = self.stateSpaceCfg.spaceModules[rsname]
283
                relatedSpaces[rsname] = self.stateSpaceCfg.spaceModules[rsname]
255
            setattr(sm, '__RELATED_SPACES__', relatedSpaces)
284
            setattr(self.stateSpaceCfg.spaceModules[sm], '__RELATED_SPACES__', relatedSpaces)
256
           
285