summaryrefslogtreecommitdiff
authorharlekin <harlekin>2003-01-16 19:50:06 (UTC)
committer harlekin <harlekin>2003-01-16 19:50:06 (UTC)
commit7957a2f100eb687e63cd3593097c5914539c7406 (patch) (side-by-side diff)
tree323aaf6d34669f523532d41385560c3894ed5c59
parenteac64456fb43afe2200e4e545e1e4be3b4eb1bc8 (diff)
downloadopie-7957a2f100eb687e63cd3593097c5914539c7406.zip
opie-7957a2f100eb687e63cd3593097c5914539c7406.tar.gz
opie-7957a2f100eb687e63cd3593097c5914539c7406.tar.bz2
lib a bit more flexible for hciattach arguments
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opietooth/lib/device.cc12
-rw-r--r--noncore/net/opietooth/lib/device.h9
2 files changed, 13 insertions, 8 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,149 +1,151 @@
#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 )
- : QObject(0, "device" ) {
+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;
m_process = 0;
}else if(proc== m_hci ){
qWarning("M HCI exited" );
if( m_hci->normalExit() ){
qWarning("normal exit" );
int ret = m_hci->exitStatus();
if( ret == 0 ){
qWarning("attached really really attached" );
m_attached = true;
emit device("hci0", true );
}else{
qWarning( "failed" );
emit device("hci0", false );
m_attached = false;
}
}// normal exit
delete m_hci;
m_hci = 0;
}
}
void Device::slotStdOut(OProcess* proc, char* chars, int len)
{
qWarning("std out" );
if( len <1 ){
qWarning( "len < 1 " );
- return;
+ return;
}
if(proc == m_process ){
QCString string( chars, len+1 ); // \0 == +1
qWarning("output: %s", string.data() );
m_output.append( string.data() );
}
}
void Device::slotStdErr(OProcess* proc, char* chars, int len)
{
qWarning("std err" );
slotStdOut( proc, chars, len );
}
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
+ * Device takes care of attaching serial
* devices to the blueZ stack.
* After attaching it hciconfig ups it
*/
class Device : public QObject {
- Q_OBJECT
+
+ 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