#include #include using namespace Opie::Core; #include "rfcommconfhandler.h" using namespace OpieTooth; // move to lib RfCommConfObject::RfCommConfObject(int number, QString mac, int channel, QString comment, bool bind) { m_number = number; m_mac = mac; m_channel = channel; m_comment = comment; m_doBind = bind; } void RfCommConfObject::setNumber( int number ) { m_number = number; } void RfCommConfObject::setMac( QString mac ) { m_mac = mac; } void RfCommConfObject::setChannel( int channel ) { m_channel = channel; } void RfCommConfObject::setComment( QString comment ) { m_comment = comment; } RfCommConfObject::~RfCommConfObject() { } RfCommConfHandler::RfCommConfHandler( const QString & filename ) { m_filename = filename; load(); } RfCommConfHandler::~RfCommConfHandler() { } void RfCommConfHandler::save( QMap devices ) { //// For debugging purposes //// QFile rfCommConf( "/mnt/net/opie/bin/rfcomm.conf" ); QFile rfCommConf( m_filename ); QTextStream outStream( &rfCommConf ); if ( rfCommConf.open( IO_WriteOnly ) ) { QMap::Iterator it; outStream << "#\n"; outStream << "# RFCOMM configuration file.\n"; outStream << "#\n"; outStream << "# $Id$\n"; outStream << "#\n\n"; for( it = devices.begin(); it != devices.end(); ++it ) { outStream << "rfcomm" + QString("%1").arg( it.data()->number() ) + " {\n"; outStream << "\t# Automatically bind the device at startup\n"; outStream << "\tbind " << ((it.data()->isBind())? "yes": "no") << ";\n"; outStream << "\n"; outStream << "\t# Bluetooth address of the device\n"; outStream << "\tdevice " + it.data()->mac() + ";\n"; outStream << "\n"; outStream << "\t# RFCOMM channel for the connection\n"; outStream << "\tchannel\t" + QString( "%1" ).arg( it.data()->channel() ) + ";\n"; outStream << "\n"; outStream << "\t# Description of the connection\n"; outStream << "\tcomment \"" + it.data()->comment() + "\";\n"; outStream << "}\n\n"; } rfCommConf.close(); } } QMap RfCommConfHandler::foundEntries() { return m_foundEntries; } void RfCommConfHandler::load() { //Keywords QCString k_rfcomm("rfcomm"); QCString k_device("device "); QCString k_channel("channel "); QCString k_comment("comment "); QCString k_bind("bind "); m_foundEntries.clear(); QFile rfCommConf(m_filename); //File we read if (rfCommConf.open(IO_ReadOnly)) { QStringList list; QTextStream inStream( &rfCommConf ); list = QStringList::split( "\n", inStream.read() ); QString mac; QString channel; QString comment; QString bind; bool bbind; QString number; for (QStringList::Iterator line = list.begin(); line != list.end(); line++) { QString tmpLine = (*line).simplifyWhiteSpace(); if (tmpLine.startsWith(k_rfcomm)) { number = tmpLine.mid( k_rfcomm.length(), 1 ); odebug << tmpLine << oendl; odebug << "device " << number << oendl; } else if ( tmpLine.startsWith( "}" ) ) { m_foundEntries.insert(number, new RfCommConfObject(number.toInt(), mac, channel.toInt(), comment, bbind)); } else if ( tmpLine.startsWith(k_device) ) { mac = tmpLine.mid(k_device.length(), tmpLine.find(';') - k_device.length()); odebug << "mac " + mac << oendl; } else if ( tmpLine.startsWith(k_channel) ) { channel = tmpLine.mid(k_channel.length(), tmpLine.find(';') - k_channel.length()); odebug << "Channel: " << channel << oendl; } else if ( tmpLine.startsWith(k_comment) ) { comment = tmpLine.mid(k_comment.length(), tmpLine.find(';') - k_comment.length()); if (comment.left(1) == "\"") comment.remove(0, 1); if (comment.right(1) == "\"") comment.remove(comment.length() - 1, 1); odebug << "Comment: " + comment << oendl; } else if ( tmpLine.startsWith(k_bind) ) { bind = tmpLine.mid(k_bind.length(), tmpLine.find(';') - k_bind.length()); if (bind == "no") bbind = false; else if (bind == "yes") bbind = true; else bbind = true; odebug << "bind: " + bind << oendl; } } rfCommConf.close(); } save(m_foundEntries); odebug << QString( "ENTries: %1").arg( m_foundEntries.count() ) << oendl; } //eof