author | harlekin <harlekin> | 2003-01-16 19:50:06 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2003-01-16 19:50:06 (UTC) |
commit | 7957a2f100eb687e63cd3593097c5914539c7406 (patch) (side-by-side diff) | |
tree | 323aaf6d34669f523532d41385560c3894ed5c59 | |
parent | eac64456fb43afe2200e4e545e1e4be3b4eb1bc8 (diff) | |
download | opie-7957a2f100eb687e63cd3593097c5914539c7406.zip opie-7957a2f100eb687e63cd3593097c5914539c7406.tar.gz opie-7957a2f100eb687e63cd3593097c5914539c7406.tar.bz2 |
lib a bit more flexible for hciattach arguments
-rw-r--r-- | noncore/net/opietooth/lib/device.cc | 8 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/device.h | 5 |
2 files changed, 9 insertions, 4 deletions
diff --git a/noncore/net/opietooth/lib/device.cc b/noncore/net/opietooth/lib/device.cc index 5edfc03..bae1c47 100644 --- a/noncore/net/opietooth/lib/device.cc +++ b/noncore/net/opietooth/lib/device.cc @@ -1,111 +1,113 @@ #include <signal.h> #include <opie/oprocess.h> #include "device.h" using namespace OpieTooth; namespace { int parsePid( const QCString& par ){ int id=0; QString string( par ); QStringList list = QStringList::split( '\n', string ); for( QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ qWarning("parsePID: %s", (*it).latin1() ); if( !(*it).startsWith("CSR") ){ id = (*it).toInt(); break; } } return id; } } -Device::Device(const QString &device, const QString &mode ) +Device::Device(const QString &device, const QString &mode, const QString &speed ) : QObject(0, "device" ) { + qWarning("OpieTooth::Device create" ); m_hci = 0; m_process = 0; m_attached = false; m_device = device; m_mode = mode; + m_speed = speed; attach(); } Device::~Device(){ detach(); } void Device::attach(){ - qWarning("attaching %s %s", m_device.latin1(), m_mode.latin1() ); + qWarning("attaching %s %s %s", m_device.latin1(), m_mode.latin1(), m_speed.latin1() ); if(m_process == 0 ){ m_output.resize(0); qWarning("new process to create" ); m_process = new OProcess(); *m_process << "hciattach"; *m_process << "-p"; - *m_process << m_device << m_mode; + *m_process << m_device << m_mode << m_speed; connect(m_process, SIGNAL( processExited(OProcess*) ), this, SLOT( slotExited(OProcess* ) ) ); connect(m_process, SIGNAL( receivedStdout(OProcess*, char*, int) ), this, SLOT(slotStdOut(OProcess*,char*,int ) ) ); connect(m_process, SIGNAL(receivedStderr(OProcess*, char*, int ) ), this, SLOT(slotStdErr(OProcess*,char*,int) ) ); if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ){ qWarning("Could not start" ); delete m_process; m_process = 0; } }; } void Device::detach(){ delete m_hci; delete m_process; // kill the pid we got if(m_attached ){ //kill the pid qWarning( "killing" ); kill(pid, 9); } qWarning("detached" ); } bool Device::isLoaded()const{ return m_attached; } QString Device::devName()const { return QString::fromLatin1("hci0"); }; void Device::slotExited( OProcess* proc) { qWarning("prcess exited" ); if(proc== m_process ){ qWarning("proc == m_process" ); if( m_process->normalExit() ){ // normal exit qWarning("normalExit" ); int ret = m_process->exitStatus(); if( ret == 0 ){ // attached qWarning("attached" ); qWarning("Output: %s", m_output.data() ); pid = parsePid( m_output ); qWarning("Pid = %d", pid ); // now hciconfig hci0 up ( determine hciX FIXME) // and call hciconfig hci0 up // FIXME hardcoded to hci0 now :( m_hci = new OProcess( ); *m_hci << "hciconfig"; *m_hci << "hci0 up"; connect(m_hci, SIGNAL( processExited(OProcess*) ), this, SLOT( slotExited(OProcess* ) ) ); if(!m_hci->start() ){ qWarning("could not start" ); m_attached = false; emit device("hci0", false ); } }else{ qWarning("crass" ); m_attached = false; emit device("hci0", false ); } } delete m_process; diff --git a/noncore/net/opietooth/lib/device.h b/noncore/net/opietooth/lib/device.h index c0e2658..ce7fccc 100644 --- a/noncore/net/opietooth/lib/device.h +++ b/noncore/net/opietooth/lib/device.h @@ -1,85 +1,88 @@ #ifndef OpieToothDevice_H #define OpieToothDevice_H #include <qobject.h> #include <qstring.h> #include <qvaluelist.h> #include <sys/types.h> class OProcess; namespace OpieTooth { /** * Device takes care of attaching serial * devices to the blueZ stack. * After attaching it hciconfig ups it */ class Device : public QObject { + Q_OBJECT public: /** * Brings up an device. * Usage example: new Device(/dev/ttySB0, csr) * * @param &device QString the device name * @param &mode QString the mode + * @param &speed QString the speed of the device, can be left blank */ - Device(const QString &device, const QString& mode); + Device(const QString &device, const QString& mode, const QString& speed); /** * unloads the device */ ~Device(); /** * attach the device */ void attach(); /** * detach the device */ void detach(); /** * Is the device loaded? * @return bool, if the device is loaded */ bool isLoaded()const; /** * Returns the device name * @return QString, the device name */ QString devName()const ; // hci0 signals: /** * Signals devicename and up status * @return &device QString, Devicename * @return up bool, if the device is up or not. */ void device(const QString& device, bool up ); private slots: virtual void slotExited( OProcess* ); virtual void slotStdOut(OProcess*, char*, int ); virtual void slotStdErr(OProcess*, char*, int ); private: class Private; Private *d; QString m_device; bool m_attached:1; OProcess* m_hci; OProcess* m_process; QString m_devId; QString m_mode; + QString m_speed; pid_t pid; QCString m_output; }; }; #endif |