-rw-r--r-- | noncore/net/opietooth/lib/connection.cpp | 90 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/connection.h | 150 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/lib.pro | 4 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/manager.h | 231 |
4 files changed, 366 insertions, 109 deletions
diff --git a/noncore/net/opietooth/lib/connection.cpp b/noncore/net/opietooth/lib/connection.cpp new file mode 100644 index 0000000..1f9baaf --- a/dev/null +++ b/noncore/net/opietooth/lib/connection.cpp @@ -0,0 +1,90 @@ + +#include "connection.h" + +using namespace OpieTooth; + +Connection::Connection() { + m_direction = Incoming; + m_handle = -1; + m_state = -1; + m_linkMode = -1; +}; + +Connection::Connection( const Connection& con1 ) { + (*this) = con1; +} + + +Connection::Connection( bool in, + const QString& conType, + const QString& mac, + int handle, + int state, + int linkMode ) { + m_direction = in; + m_contype = conType; + m_mac = mac; + m_handle = handle; + m_state = state; + m_linkMode = linkMode; + +} + +void Connection::setDirection( bool incoming ) { + m_direction = incoming; +} + +bool Connection::direction() const { + return m_direction; +} + +void Connection::setConnectionMode( const QString& conType ) { + m_contype = conType; +} + +QString Connection::connectionMode() const { + return m_contype; +} + +void Connection::setMac( const QString& mac ) { + m_mac = mac; +} + +QString Connection::mac() const{ + return m_mac; +} + +void Connection::setHandle( int handle ) { + m_handle = handle; +} + +int Connection::handle() const{ + return m_handle; +} + +void Connection::setState( int state ) { + m_state = state; +} + +int Connection::state()const { + return m_state; +} + +void Connection::setLinkMode( int linkMode ) { + m_linkMode = linkMode; +} + +int Connection::linkMode()const{ + return m_linkMode; +} + +Connection &Connection::operator=( const Connection& con1 ) { + m_direction = con1.m_direction; + m_contype = con1.m_contype; + m_mac = con1.m_mac; + m_handle = con1.m_handle; + m_state = con1.m_state; + m_linkMode = con1.m_linkMode; + + return (*this); +} diff --git a/noncore/net/opietooth/lib/connection.h b/noncore/net/opietooth/lib/connection.h new file mode 100644 index 0000000..37090ce --- a/dev/null +++ b/noncore/net/opietooth/lib/connection.h @@ -0,0 +1,150 @@ + +#ifndef OpieTooth_Connection_H +#define OpieTooth_Connection_H + +#include <qstring.h> +#include <qvaluelist.h> + +namespace OpieTooth { + + enum LinkDirection { Incoming= true, Outgoing = false }; + enum LinkMode { Master =0, Client }; + + + /** + * The Connection class stores + * the output of hcitool con + * in a OO way + */ + + class Connection { + public: + /** + * typedef for a list of + * Connections + */ + typedef QValueList<Connection> ValueList; + + /** + * Copy c'tor. + */ + Connection( const Connection& ); + + /** + * Main c'tor + * Basicly it holds all values + * a blueZ connections can have + * @param in If the connection is either incoming or outgoing + * @param conType Either ACL or SCO for connection type + * @param mac The BD Address( mac ) of the peer + * @param handle the blueZ handle + * @param state the State of the connection + * @param linkMode the linkmode of the connection MASTER or not + * + * < ACL 00:02:C7:09:2B:53 handle 1 state 1 lm MASTER + * + */ + Connection( bool in, + const QString& conType, + const QString& mac, + int handle, + int state, + int linkMode ); + + /** + * C'tor for compability with QValueList + * QValueList needs this c'tor. + */ + Connection(); + + /** + * Set if the connection is incoming or + * outgoing + * @param in Whether or not the connection is ingoing or not. + * for param use either Incoming or Outgoing + * + */ + void setDirection( bool incoming = Incoming ); + + /** + * direction() will return Incoming( true ) + * if the direction is incomoning or Outgoing( false) + * if outgoing + */ + bool direction() const; + + /** + * sets the ConnectionMode + * @param comMode I know that SCO and ACL exists so far + */ + void setConnectionMode( const QString& comMode ); + + /** + * linkMode returns the linkMode + * MASTER for example + */ + QString connectionMode() const; + + /** + * The Bluetooth Address or mac + * is set by this function + * @param mac the BluetoothAddress( mac) + */ + void setMac( const QString& mac); + + /** + * returns the mac + */ + QString mac() const; + + + /** + * Set the handle of the bt connection + */ + void setHandle(int handle ); + + /** + * @return the handle of the connection + */ + int handle() const; + + /** + * sets the state + */ + void setState( int state ); + + /** + * return the state + */ + int state() const; + + /** + * Sets the link mode of the Connection + */ + void setLinkMode( int linkMode = Master ); + + /** + * returns the linkMode + */ + int linkMode()const; + + /** + * copy c'tor + */ + Connection &operator=( const Connection& ); + + private: + class ConnectionPrivate; + ConnectionPrivate *d; + bool m_direction : 1; + QString m_contype; + QString m_mac; + int m_handle; + int m_state; + int m_linkMode; + + }; +}; + + +#endif diff --git a/noncore/net/opietooth/lib/lib.pro b/noncore/net/opietooth/lib/lib.pro index ecf2e6c..dde6c2a 100644 --- a/noncore/net/opietooth/lib/lib.pro +++ b/noncore/net/opietooth/lib/lib.pro @@ -2,4 +2,4 @@ TEMPLATE = lib CONFIG += qte warn_on release -HEADERS = parser.h device.h manager.h remotedevice.h services.h -SOURCES = parser.cc device.cc manager.cc remotedevice.cc services.cc +HEADERS = connection.h parser.h device.h manager.h remotedevice.h services.h +SOURCES = connection.cpp parser.cc device.cc manager.cc remotedevice.cc services.cc TARGET = opietooth diff --git a/noncore/net/opietooth/lib/manager.h b/noncore/net/opietooth/lib/manager.h index 415ec72..2589e9b 100644 --- a/noncore/net/opietooth/lib/manager.h +++ b/noncore/net/opietooth/lib/manager.h @@ -14,116 +14,133 @@ class OProcess; namespace OpieTooth { - class Device; - /** Manager manages a blueZ device (hci0 for example) - * with Manager you can control the things you - * could do from command line in a OO and asynchronus - * way. - */ - class Manager : public QObject { -Q_OBJECT - public: - /** c'tor whichs create a new Manager - * @param device is the device to use. Either a mac or blueZ device name - * + class Device; + /** Manager manages a blueZ device (hci0 for example) + * without Manager you can control the things you + * could do from command line in a OO and asynchronus + * way. */ - Manager( const QString &device ); - /** c'tor - * @param dev The Device to be managed - * We don't care of Device so you need to delete it - */ - Manager( Device* dev ); - /** - * c'tor - */ - Manager(); - ~Manager(); + class Manager : public QObject { + Q_OBJECT + public: + /** c'tor whichs create a new Manager + * @param device is the device to use. Either a mac or blueZ device name + * + */ + Manager( const QString &device ); - /** Set the manager to control a new device - * @param device the new device to control (hci0 ) - */ - void setDevice( const QString& device ); - /** - * Convience functions for setting a new device - */ - void setDevice( Device *dev ); - /** - * Wether or not a device is connected. The function - * is asynchron - * If device is empty it will take the currently managed - * device and see if it's up - * for Remote devices it will ping and see. - * @param either mac or hciX - */ - void isAvailable(const QString& device= QString::null ); - /** - * same as above - */ - void isAvailable(Device *dev ); + /** c'tor + * @param dev The Device to be managed + * We don't care of Device so you need to delete it + */ + Manager( Device* dev ); - /** this searchs for devices reachable from the - * currently managed device - * or from device if @param device is not empty - */ - void searchDevices(const QString& device= QString::null ); - /** same as above - * - */ - void searchDevices(Device *d ); + /** + * c'tor + */ + Manager(); - /** - * This will add the service @param name - * to the sdpd daemon - * It will start the daemon if necessary - */ - void addService(const QString &name ); - /** - * This will add the services @param names - * to the sdpd daemon - * It will start the daemon if necessary - */ - void addServices( const QStringList& names ); - /** - * This removes a service from the sdps - */ - void removeService(const QString &name ); - /** - * Removes a list from the sdpd - */ - void removeServices(const QStringList& ); + ~Manager(); - /** - * search for services on a remote device - * - */ - void searchServices( const QString& remDevice ); - /** - * search for services on a remote device - */ - void searchServices( const RemoteDevice& ); - /*static*/ QString toDevice( const QString& mac ); - /*static*/ QString toMac( const QString &device ); - - signals: - // device either mac or dev name - // the first device is the device which you access - void available( const QString& device, bool connected ); - void addedService( const QString& service, bool added ); - void removedService( const QString& service, bool removed ); - void foundServices( const QString& device, Services::ValueList ); - void foundDevices( const QString& device, RemoteDevice::ValueList ); + /** Set the manager to control a new device + * @param device the new device to control (hci0 ) + */ + void setDevice( const QString& device ); + + /** + * Convience functions for setting a new device + */ + void setDevice( Device *dev ); + + /** + * Wether or not a device is connected. The function + * is asynchron + * If device is empty it will take the currently managed + * device and see if it's up + * for Remote devices it will ping and see. + * @param either mac or hciX + */ + void isAvailable(const QString& device= QString::null ); + + /** + * same as above + */ + void isAvailable(Device *dev ); + + /** this searchs for devices reachable from the + * currently managed device + * or from device if @param device is not empty + */ + void searchDevices(const QString& device= QString::null ); + /** same as above + * + */ + void searchDevices(Device *d ); + + /** + * This will add the service @param name + * to the sdpd daemon + * It will start the daemon if necessary + */ + void addService(const QString &name ); + + /** + * This will add the services @param names + * to the sdpd daemon + * It will start the daemon if necessary + */ + void addServices( const QStringList& names ); + + /** + * This removes a service from the sdps + */ + void removeService(const QString &name ); + + /** + * Removes a list from the sdpd + */ + void removeServices(const QStringList& ); + + /** + * search for services on a remote device + * + */ + void searchServices( const QString& remDevice ); + + /** + * search for services on a remote device + */ + void searchServices( const RemoteDevice& ); + /*static*/ QString toDevice( const QString& mac ); + /*static*/ QString toMac( const QString &device ); + + signals: + // device either mac or dev name + // the first device is the device which you access + void available( const QString& device, bool connected ); + void addedService( const QString& service, bool added ); + void removedService( const QString& service, bool removed ); + void foundServices( const QString& device, Services::ValueList ); + void foundDevices( const QString& device, RemoteDevice::ValueList ); + void connections( Connection::ValueList ); private slots: - void slotProcessExited(OProcess* ); - void slotSDPExited(OProcess*); - void slotSDPOut(OProcess*, char*, int); - void slotHCIExited(OProcess* ); - void slotHCIOut(OProcess*, char*, int ); - private: - Services::ValueList parseSDPOutput( const QString& ); - RemoteDevice::ValueList parseHCIOutput( const QString& ); - OProcess *m_hcitool; - OProcess *m_sdp; // not only one - QString m_device; - QMap<QString, QString> m_out; - QMap<QString, QString> m_devices; - }; + void slotProcessExited(OProcess* ); + + void slotSDPExited(OProcess*); + void slotSDPOut(OProcess*, char*, int); + + void slotHCIExited(OProcess* ); + void slotHCIOut(OProcess*, char*, int ); + + void slotConnectionExited(OProcess* ); + void slotConnectionOutput(OProcess*, char*, int ); + private: + Services::ValueList parseSDPOutput( const QString& ); + RemoteDevice::ValueList parseHCIOutput( const QString& ); + OProcess *m_hcitool; + OProcess *m_sdp; // not only one + QString m_device; + QMap<QString, QString> m_out; + QMap<QString, QString> m_devices; + QString m_hcitoolCon; + }; }; |