summaryrefslogtreecommitdiff
path: root/libopie2
Side-by-side diff
Diffstat (limited to 'libopie2') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opienet/omanufacturerdb.cpp13
-rwxr-xr-xlibopie2/tools/regen.py198
2 files changed, 198 insertions, 13 deletions
diff --git a/libopie2/opienet/omanufacturerdb.cpp b/libopie2/opienet/omanufacturerdb.cpp
index 595633d..f61270b 100644
--- a/libopie2/opienet/omanufacturerdb.cpp
+++ b/libopie2/opienet/omanufacturerdb.cpp
@@ -79,25 +79,34 @@ OManufacturerDB::OManufacturerDB()
{
odebug << "OManufacturerDB: found manufacturer list in " << filename << oendl;
QTextStream s( &file );
QString addr;
QString manu;
QString extManu;
+ #ifdef OPIE_IMPROVE_GUI_LATENCY
+ int counter = 0;
+ #endif
while (!s.atEnd())
{
s >> addr;
s >> manu;
s >> extManu;
manufacturers.insert( addr, manu );
manufacturersExt.insert( addr, extManu );
- odebug << "OmanufacturerDB: parse '" << addr << "' as '" << manu << "' (" << extManu << ")" << oendl;
+ // odebug << "OmanufacturerDB: parse '" << addr << "' as '" << manu << "' (" << extManu << ")" << oendl;
#ifdef OPIE_IMPROVE_GUI_LATENCY
- if ( qApp ) qApp->processEvents();
+ counter++;
+ if ( counter == 50 )
+ {
+ qApp->processEvents();
+ counter = 0;
+ }
#endif
}
+ odebug << "OManufacturerDB: manufacturer list completed." << oendl;
}
}
OManufacturerDB::~OManufacturerDB()
{
diff --git a/libopie2/tools/regen.py b/libopie2/tools/regen.py
index 3779896..89385e1 100755
--- a/libopie2/tools/regen.py
+++ b/libopie2/tools/regen.py
@@ -1,29 +1,34 @@
#!/usr/bin/env python
-#
-# regenerate ioctl_table.h
-#
+"""Regenerate C++ mapping classes"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+def regenDebugMapper( basename ):
+ """
+ Debug Mapper - maps ioctl numbers to names, e.g. 0x4x5a -> SIOCGIWNAME
+ """
-import sys
-import os
result = os.popen( 'find /usr/include -name "*.h" |xargs grep -h SIOC|grep 0x' ).readlines()
try:
- tablehfile = file( sys.argv[1]+".h", "w" )
+ tablehfile = file( basename+".h", "w" )
except:
tablehfile = sys.stdout
try:
- tablecfile = file( sys.argv[1]+".cpp", "w" )
+ tablecfile = file( basename+".cpp", "w" )
except:
tablecfile = sys.stdout
print >>tablehfile,"""
/*
- * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
+ * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
*/
#ifndef DEBUGMAPPER_H
#define DEBUGMAPPER_H
#include <qstring.h>
@@ -40,28 +45,28 @@ class DebugMapper
const QString& map( int value ) const;
private:
IntStringMap _map;
};
#endif
-"""
+""" % sys.argv[0]
print >>tablecfile,"""
/*
- * debug value mapper - generated by regen.py - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
+ * debug value mapper - generated by %s - (C) Michael 'Mickey' Lauer <mickey@vanille.de>
*/
#include <opie2/odebug.h>
#include "%s"
DebugMapper::DebugMapper()
{
odebug << "DebugMapper::DebugMapper()" << oendl;
-""" % (tablehfile.name)
+""" % ( sys.argv[0], tablehfile.name )
for line in result:
l = line.split()
if not l[0].startswith( "#define" ) or not l[2].startswith( "0x" ):
print >>sys.stderr, "can't parse line: %s" % l
continue
@@ -91,6 +96,177 @@ const QString& DebugMapper::map( int value ) const
{
return *result;
}
}
"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+def regenManufacturerDB( basename ):
+
+ try:
+ h = file( basename+".h", "w" )
+ except:
+ h = sys.stdout
+
+ try:
+ cpp = file( basename+".cpp", "w" )
+ except:
+ cpp = sys.stdout
+
+ print >>h,"""
+#ifndef OMANUFACTURERDB_H
+#define OMANUFACTURERDB_H
+
+#include <qmap.h>
+
+/**
+ * @brief A Ethernet card vendor database.
+ *
+ * This class encapsulates the lookup of Ethernet vendor given a
+ * certain Mac Address. Only the first three bytes define the vendor.
+ */
+class OManufacturerDB
+{
+ public:
+ /**
+ * @returns the one-and-only @ref OManufacturerDB instance.
+ */
+ static OManufacturerDB* instance();
+ /**
+ * @returns the short manufacturer string given a @a macaddr.
+ */
+ const QString& lookup( const QString& macaddr ) const;
+ /**
+ * @returns the enhanced manufacturer string given a @a macaddr.
+ */
+ const QString& lookupExt( const QString& macaddr ) const;
+
+ protected:
+ OManufacturerDB();
+ virtual ~OManufacturerDB();
+
+ private:
+ QMap<QString, QString> manufacturers;
+ QMap<QString, QString> manufacturersExt;
+ static OManufacturerDB* _instance;
+};
+
+#endif
+"""
+
+ print >>cpp,"""
+#include "%s.h"
+
+/* OPIE CORE */
+#include <opie2/odebug.h>
+
+/* QT */
+#include <qapplication.h>
+#include <qstring.h>
+
+#define OPIE_IMPROVE_GUI_LATENCY 1
+
+OManufacturerDB* OManufacturerDB::_instance = 0;
+
+OManufacturerDB* OManufacturerDB::instance()
+{
+ if ( !OManufacturerDB::_instance )
+ {
+ odebug << "OManufacturerDB::instance(): creating OManufacturerDB..." << oendl;
+ _instance = new OManufacturerDB();
+ }
+ return _instance;
+}
+
+
+OManufacturerDB::OManufacturerDB()
+{
+""" % basename
+
+ count = 0
+ for line in sys.stdin:
+ if line[0] == "#": # skip comments
+ continue
+ #print line.strip()
+ entries = line.strip().split()
+ #print "number of entries =", len( entries )
+ #print entries
+ if len( entries ) < 2:
+ continue
+ elif len( entries ) == 2:
+ count += 1
+ print "2-line detected."
+ print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] )
+ print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], entries[1] )
+ elif len( entries ) > 2:
+ count += 1
+ print "3-line detected."
+ print >>cpp, ' manufacturers.insert( "%s", "%s" );' % ( entries[0], entries[1] )
+ print >>cpp, ' manufacturersExt.insert( "%s", "%s" );' % ( entries[0], "_".join( entries[3:] ) )
+ else:
+ assert( false )
+ if not (count % 1000):
+ print >>cpp,"""
+#ifdef OPIE_IMPROVE_GUI_LATENCY
+ if (qApp) qApp->processEvents();
+#endif
+"""
+ print "successfully parsed", count, "manufacturer lines"
+ print >>cpp,"""
+}
+
+
+OManufacturerDB::~OManufacturerDB()
+{
+}
+
+
+const QString& OManufacturerDB::lookup( const QString& macaddr ) const
+{
+ return manufacturers[macaddr.upper().left(8)];
+}
+
+
+const QString& OManufacturerDB::lookupExt( const QString& macaddr ) const
+{
+ QMap<QString,QString>::ConstIterator it = manufacturersExt.find( macaddr.upper().left(8) );
+ return it == manufacturersExt.end() ? lookup( macaddr ) : *it;
+}
+"""
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+#---------------------------------------------------------------------------#
+# #
+#---------------------------------------------------------------------------#
+
+import sys
+import os
+import copy
+
+if __name__ == "__main__":
+ if len( sys.argv ) != 3:
+ print """
+Usage: %s <table> <basename>
+
+Available tables: %s
+""" % ( sys.argv[0], [ str(k)[5:] for k in copy.copy( locals() ) if k.startswith( "regen" ) ] )
+ sys.exit( -1 )
+
+ try:
+ func = locals()["regen%s" % sys.argv[1]]
+ except KeyError:
+ print "Table '%s' unknown." % sys.argv[1]
+ sys.exit( -1 )
+ else:
+ func( sys.argv[2] )
+ sys.exit( 0 ) \ No newline at end of file