bthci/bthci2/CommandsEvents/generator/generator.py
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bthci/bthci2/CommandsEvents/generator/generator.py	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,120 @@
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+import ConfigParser
+import getopt
+import string
+import sys
+import os
+import os.path
+
+from command import writeCommand
+from mmp import writeMMPFile
+from event import writeEvent
+from completeevent import writeCompleteEvent
+from datainput import getEntries, getTypes, getFolded
+from testserver import writeTestServer
+from teststep import writeTestSteps
+
+def printHelp():
+    print('Automatically generates source files for Bluetooth commands')
+    print('Usage: python ' + sys.argv[0] + ' -i ini-file -t type [mmp|impl|test] [template] [destination]')
+    print('Example: \"python ' + sys.argv[0] + ' -i dllmmp.ini -t mmp dllmmp.tmpl hcilib.mmp\"')
+    print('Options:\n-i\t File specifing data associated with this command. It\'s layout is type specific.')
+    print('-t\t Type of data to generate, either mmp for mmp file, impl for implementation or test for test code.')
+
+# Retrieves command line options
+def getOpts():
+    scanned = {}
+    opts, args = getopt.getopt(sys.argv[1:], 'i:t:e:')
+
+    for o, a in opts:
+        if o == '-i':
+            scanned['INI'] = a
+        elif o == '-t':
+            scanned['COMMAND'] = a.lower()
+        else:
+            printHelp()
+
+    return scanned, args
+
+opts, args = getOpts()
+
+if len(opts) < 2:
+    printHelp()
+else:
+    if opts['COMMAND'] == 'mmp': # Generate mmp file
+        writeMMPFile(opts['INI'], string.Template(file(args[0]).read()), args[1])
+    elif opts['COMMAND'] == 'impl': # Generate implementation
+        cfg = ConfigParser.ConfigParser()
+        cfg.readfp(file(opts['INI']))
+                   
+        for s in cfg.sections():
+            entries = getEntries(cfg.get(s, 'Datafile'))
+            types = getTypes(cfg.get(s, 'Typefile'))
+            headerTemplate = string.Template(file(cfg.get(s, 'HeaderTemplate')).read())
+            sourceTemplate = string.Template(file(cfg.get(s, 'SourceTemplate')).read())
+
+            typ = cfg.get(s, 'Type').lower()
+
+            if os.path.exists(cfg.get(s, 'SourcePath')) == False:
+                os.mkdir(cfg.get(s, 'SourcePath'))
+
+            if os.path.exists(cfg.get(s, 'HeaderPath')) == False:
+                os.mkdir(cfg.get(s, 'HeaderPath'))
+
+            if typ == 'command':
+                folded = getFolded(entries, types, 3)
+                print('Writing %i commands\n\theaders at %s\n\tsource at %s...'
+                      % (len(folded), cfg.get(s, 'HeaderPath'), cfg.get(s, 'SourcePath')))
+
+                for f in folded:
+                    writeCommand(f, folded[f][0], folded[f][1], headerTemplate, sourceTemplate,
+                                 cfg.get(s, 'HeaderPath'), cfg.get(s, 'SourcePath'))
+            elif typ == 'event':
+                folded = getFolded(entries, types, 2)
+                print('Writing %i events\n\theaders at %s\n\tsource at %s...'
+                      % (len(folded), cfg.get(s, 'HeaderPath'), cfg.get(s, 'SourcePath')))
+
+                for f in folded:
+                    writeEvent(f, folded[f][1], headerTemplate, sourceTemplate,
+                               cfg.get(s, 'HeaderPath'), cfg.get(s, 'SourcePath'))
+            elif typ == 'completeevent':
+                folded = getFolded(entries, types, 5)
+                print('Writing %i command complete events\n\theaders at %s\n\tsource at %s...'
+                      % (len(folded), cfg.get(s, 'HeaderPath'), cfg.get(s, 'SourcePath')))
+
+                for f in folded:
+                    writeCompleteEvent(f, folded[f][1], headerTemplate, sourceTemplate,
+                                       cfg.get(s, 'HeaderPath'), cfg.get(s, 'SourcePath'))
+    elif opts['COMMAND'] == 'test': # Generate test code
+        cfg = ConfigParser.ConfigParser()
+        cfg.readfp(file(opts['INI']))
+
+        for s in cfg.sections():
+            if os.path.exists(cfg.get(s, 'Path')) == False:
+                os.mkdir(cfg.get(s, 'Path'))
+            
+            writeTestServer(cfg.get(s, 'Name'),
+                            string.Template(file(cfg.get(s, 'HeaderTemplate')).read()),
+                            string.Template(file(cfg.get(s, 'SourceTemplate')).read()),
+                            string.Template(file(cfg.get(s, 'ScriptTemplate')).read()),
+                            cfg.get(s, 'TestSteps'),
+                            cfg.get(s, 'Path'))
+
+            writeTestSteps(cfg.get(s, 'TestSteps'), cfg.get(s, 'Path'))
+
+            
+