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. |
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 |
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 | ||