summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/irdaapplet/irda.cpp438
-rw-r--r--core/applets/irdaapplet/irda.h70
2 files changed, 273 insertions, 235 deletions
diff --git a/core/applets/irdaapplet/irda.cpp b/core/applets/irdaapplet/irda.cpp
index cea836e..d57104b 100644
--- a/core/applets/irdaapplet/irda.cpp
+++ b/core/applets/irdaapplet/irda.cpp
@@ -38,308 +38,347 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
//===========================================================================
-IrdaApplet::IrdaApplet ( QWidget *parent, const char *name )
- : QWidget ( parent, name )
+IrdaApplet::IrdaApplet ( QWidget *parent, const char *name ) :
+ QWidget ( parent, name ),
+ m_irda_active( false ),
+ m_irda_discovery_active( false ),
+ m_receive_active( false ),
+ m_receive_state_changed( false ),
+ m_popup( 0 ),
+ m_wasOn( false ),
+ m_wasDiscover( false )
{
setFixedHeight( AppLnk::smallIconSize() );
setFixedWidth( AppLnk::smallIconSize() );
- m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP );
-
- m_irdaOnPixmap = Opie::Core::OResource::loadPixmap( "irdaapplet/irdaon", Opie::Core::OResource::SmallIcon );
- m_irdaOffPixmap = Opie::Core::OResource::loadPixmap( "irdaapplet/irdaoff", Opie::Core::OResource::SmallIcon );
- m_irdaDiscoveryOnPixmap = Opie::Core::OResource::loadPixmap( "irdaapplet/magglass", Opie::Core::OResource::SmallIcon );
- m_receiveActivePixmap = Opie::Core::OResource::loadPixmap( "irdaapplet/receive", Opie::Core::OResource::SmallIcon );
-
- m_irda_active = false;
- m_irda_discovery_active = false;
- m_receive_active = false;
- m_receive_state_changed = false;
- m_popup = 0;
- m_wasOn = false;
- m_wasDiscover = false;
-
- QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this );
- connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
- this, SLOT(slotMessage(const QCString&,const QByteArray&) ) );
+ if (m_sockfd = ::socket ( PF_INET, SOCK_DGRAM, IPPROTO_IP ) == -1)
+ perror ( "failed grabbing IrDA socket" );
+
+ m_irdaOnPixmap =
+ Opie::Core::OResource::loadPixmap( "irdaapplet/irdaon",
+ Opie::Core::OResource::SmallIcon );
+ m_irdaOffPixmap =
+ Opie::Core::OResource::loadPixmap( "irdaapplet/irdaoff",
+ Opie::Core::OResource::SmallIcon );
+ m_irdaDiscoveryOnPixmap =
+ Opie::Core::OResource::loadPixmap( "irdaapplet/magglass",
+ Opie::Core::OResource::SmallIcon );
+ m_receiveActivePixmap =
+ Opie::Core::OResource::loadPixmap( "irdaapplet/receive",
+ Opie::Core::OResource::SmallIcon );
+
+ QCopChannel* chan = new QCopChannel("QPE/IrDaApplet", this );
+ connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), this,
+ SLOT(slotMessage(const QCString&,const QByteArray&) ) );
}
int IrdaApplet::position()
{
- return 6;
+ return 6;
}
void IrdaApplet::show()
{
- QWidget::show ( );
- startTimer ( 2000 );
+ QWidget::show ( );
+ startTimer ( 2000 );
}
IrdaApplet::~IrdaApplet()
{
- if ( m_sockfd >= 0 )
- ::close ( m_sockfd );
+ if ( m_sockfd >= 0 )
+ ::close ( m_sockfd );
}
void IrdaApplet::popup ( QString message, QString icon )
{
- if ( !m_popup )
- m_popup = new QPopupMenu ( this );
-
- m_popup-> clear ( );
-
- if ( icon. isEmpty ( ))
- m_popup-> insertItem ( message, 0 );
- else
- m_popup-> insertItem ( QIconSet ( Opie::Core::OResource::loadPixmap ( icon, Opie::Core::OResource::SmallIcon )),
- message, 0 );
-
- QPoint p = mapToGlobal ( QPoint ( 0, 0 ));
- QSize s = m_popup-> sizeHint ( );
- m_popup-> popup ( QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ),
- p. y ( ) - s. height ( )));
-
- QTimer::singleShot ( 2000, this, SLOT( popupTimeout()));
+ if ( !m_popup )
+ m_popup = new QPopupMenu ( this );
+
+ m_popup-> clear ( );
+
+ if ( icon. isEmpty ( ))
+ m_popup-> insertItem ( message, 0 );
+ else
+ m_popup-> insertItem ( QIconSet (
+ Opie::Core::OResource::loadPixmap (
+ icon,
+ Opie::Core::OResource::SmallIcon
+ )
+ ),
+ message, 0
+ );
+
+ QPoint p = mapToGlobal ( QPoint ( 0, 0 ));
+ QSize s = m_popup-> sizeHint ( );
+ m_popup-> popup ( QPoint (
+ p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ),
+ p. y ( ) - s. height ( )
+ )
+ );
+
+ QTimer::singleShot ( 2000, this, SLOT( popupTimeout()));
}
void IrdaApplet::popupTimeout ( )
{
- m_popup-> hide ( );
+ m_popup-> hide ( );
}
bool IrdaApplet::checkIrdaStatus ( )
{
- struct ifreq ifr;
- strcpy ( ifr. ifr_name, "irda0" );
+ struct ifreq ifr;
+ strcpy ( ifr. ifr_name, "irda0" );
- if ( ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 )
- return false;
+ if ( m_sockfd < 0 || ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 )
+ return false;
- return ( ifr. ifr_flags & IFF_UP );
+ return ( ifr. ifr_flags & IFF_UP );
}
bool IrdaApplet::setIrdaStatus ( bool b )
{
- struct ifreq ifr;
- strcpy ( ifr. ifr_name, "irda0" );
-
- if ( ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 )
- return false;
-
- if ( b ) {
- ifr. ifr_flags |= IFF_UP;
- }
- else {
- setIrdaDiscoveryStatus ( 0 );
- setIrdaReceiveStatus ( 0 );
- ifr. ifr_flags &= ~IFF_UP;
- }
+ struct ifreq ifr;
+ strcpy ( ifr. ifr_name, "irda0" );
+
+ if ( m_sockfd < 0 || ::ioctl ( m_sockfd, SIOCGIFFLAGS, &ifr ) < 0 )
+ return false;
+
+ if ( b )
+ ifr. ifr_flags |= IFF_UP;
+ else {
+ setIrdaDiscoveryStatus ( 0 );
+ setIrdaReceiveStatus ( 0 );
+ ifr. ifr_flags &= ~IFF_UP;
+ }
- if ( ::ioctl ( m_sockfd, SIOCSIFFLAGS, &ifr ) < 0 )
- return false;
+ if ( m_sockfd < 0 || ::ioctl ( m_sockfd, SIOCSIFFLAGS, &ifr ) < 0 )
+ return false;
- return true;
+ return true;
}
bool IrdaApplet::checkIrdaDiscoveryStatus ( )
{
- QFile discovery ( "/proc/sys/net/irda/discovery" );
+ QFile discovery ( "/proc/sys/net/irda/discovery" );
- QString streamIn = "0";
+ QString streamIn = "0";
- if ( discovery. open ( IO_ReadOnly )) {
- QTextStream stream ( &discovery );
- streamIn = stream. read ( );
- }
+ if ( discovery. open ( IO_ReadOnly )) {
+ QTextStream stream ( &discovery );
+ streamIn = stream. read ( );
+ }
- return streamIn. toInt ( ) > 0;
+ return streamIn. toInt ( ) > 0;
}
bool IrdaApplet::setIrdaDiscoveryStatus ( bool d )
{
- QFile discovery ( "/proc/sys/net/irda/discovery" );
+ QFile discovery ( "/proc/sys/net/irda/discovery" );
- if ( discovery. open ( IO_WriteOnly | IO_Raw )) {
- discovery.putch ( d ? '1' : '0' );
- return true;
- }
- return false;
+ if ( discovery. open ( IO_WriteOnly | IO_Raw )) {
+ discovery.putch ( d ? '1' : '0' );
+ return true;
+ }
+ return false;
}
bool IrdaApplet::setIrdaReceiveStatus ( bool d )
{
- QCopEnvelope e ( "QPE/Obex", "receive(int)" );
- e << ( d ? 1 : 0 );
+ QCopEnvelope e ( "QPE/Obex", "receive(int)" );
+ e << ( d ? 1 : 0 );
- m_receive_active = d;
- m_receive_state_changed = true;
+ m_receive_active = d;
+ m_receive_state_changed = true;
- return true;
+ return true;
}
void IrdaApplet::showDiscovered ( )
{
// static Sound snd_found ( "irdaapplet/irdaon" );
// static Sound snd_lost ( "irdaapplet/irdaoff" );
- QFile discovery ( "/proc/net/irda/discovery" );
+ QFile discovery ( "/proc/net/irda/discovery" );
- if ( discovery. open ( IO_ReadOnly )) {
- bool qcopsend = false;
+ if ( discovery. open ( IO_ReadOnly )) {
+ bool qcopsend = false;
- QString discoveredDevice;
- QString deviceAddr;
+ QString discoveredDevice;
+ QString deviceAddr;
- // since it is /proc we _must_ use QTextStream
- QStringList list = QStringList::split ( "\n", QTextStream ( &discovery ). read ( ));
+ /*!
+ * @note To read /proc, it makes more sense to use QTextStream.
+ */
+ QStringList list =
+ QStringList::split ( "\n", QTextStream ( &discovery ). read ( ));
- QMap <QString, QString>::Iterator it;
+ QMap <QString, QString>::Iterator it;
- for ( it = m_devices. begin ( ); it != m_devices. end ( ); ++it )
- it. data ( ). prepend ( "+++" );
+ for ( it = m_devices. begin ( ); it != m_devices. end ( ); ++it )
+ it. data ( ). prepend ( "+++" );
- for ( QStringList::Iterator lit = list. begin ( ); lit != list. end ( ); ++lit ) {
- const QString &line = *lit;
+ for ( QStringList::Iterator lit = list. begin ( );
+ lit != list. end ( ); ++lit
+ )
+ {
+ const QString &line = *lit;
- if ( line. startsWith ( "nickname:" )) {
- discoveredDevice = line. mid ( line. find ( ':' ) + 2, line. find ( ',' ) - line. find ( ':' ) - 2 );
- deviceAddr = line. mid ( line. find ( "daddr:" ) + 9, 8 );
+ if ( line. startsWith ( "nickname:" )) {
+ discoveredDevice =
+ line. mid ( line. find ( ':' ) + 2, line. find ( ',' ) -
+ line. find ( ':' ) - 2 );
+ deviceAddr = line. mid ( line. find ( "daddr:" ) + 9, 8 );
- // odebug << discoveredDevice + "(" + deviceAddr + ")" << oendl;
+ // odebug << discoveredDevice + "(" + deviceAddr + ")" << oendl;
- if ( !m_devices. contains ( deviceAddr )) {
- popup ( tr( "Found:" ) + " " + discoveredDevice );
- //snd_found. play ( );
- qcopsend = true;
- }
- m_devices. replace ( deviceAddr, discoveredDevice );
- }
- }
+ if ( !m_devices. contains ( deviceAddr )) {
+ popup ( tr( "Found:" ) + " " + discoveredDevice );
+ //snd_found. play ( );
+ qcopsend = true;
+ }
+ m_devices. replace ( deviceAddr, discoveredDevice );
+ }
+ }
- for ( it = m_devices. begin ( ); it != m_devices. end ( ); ) {
- // odebug << "IrdaMon: delete " + it.currentKey() + "=" + *devicesAvailable[it.currentKey()] + "?" << oendl;
+ for ( it = m_devices. begin ( ); it != m_devices. end ( ); ) {
+ // odebug << "IrdaMon: delete " + it.currentKey() + "=" +
+ // *devicesAvailable[it.currentKey()] + "?" << oendl;
- if ( it. data ( ). left ( 3 ) == "+++" ) {
- popup ( tr( "Lost:" ) + " " + it. data ( ). mid ( 3 ));
- //snd_lost. play ( );
+ if ( it. data ( ). left ( 3 ) == "+++" ) {
+ popup ( tr( "Lost:" ) + " " + it. data ( ). mid ( 3 ));
+ //snd_lost. play ( );
- QMap <QString, QString>::Iterator tmp = it;
- tmp++;
- m_devices. remove ( it ); // in contrast to QValueListIterator this remove doesn't return the next Iterator
- it = tmp;
+ QMap <QString, QString>::Iterator tmp = it;
+ tmp++;
+ m_devices. remove ( it );
+ ///< @note In contrast to QValueListIterator this remove doesn't
+ ///< return the next Iterator
- qcopsend = true;
- }
- else
- it++;
- }
- // XXX if( qcopsend ) {
- QCopEnvelope e ( "QPE/Network", "irdaSend(bool)" );
- e << ( m_devices. count ( ) > 0 );
- // }
- }
+ it = tmp;
+ qcopsend = true;
+ } else
+ it++;
+ }
+ // XXX if( qcopsend ) {
+ QCopEnvelope e ( "QPE/Network", "irdaSend(bool)" );
+ e << ( m_devices. count ( ) > 0 );
+ // }
+ }
}
void IrdaApplet::mousePressEvent ( QMouseEvent * )
{
- QPopupMenu *menu = new QPopupMenu ( this );
- QString cmd;
-
- /* Refresh active state */
- timerEvent ( 0 );
-
- // menu->insertItem( tr("More..."), 4 );
-
- if ( m_irda_active && !m_devices. isEmpty ( )) {
- menu-> insertItem ( tr( "Discovered Device:" ), 9 );
-
- for ( QMap<QString, QString>::Iterator it = m_devices. begin ( ); it != m_devices. end ( ); ++it )
- menu-> insertItem ( *it );
-
- menu-> insertSeparator ( );
- }
-
- menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 );
-
- if ( m_irda_active ) {
- menu-> insertItem ( m_irda_discovery_active ? tr( "Disable Discovery" ) : tr( "Enable Discovery" ), 1 );
-
- /* Only Receive if OBEX is installed */
- if( Ir::supported() )
- menu-> insertItem ( m_receive_active ? tr( "Disable Receive" ) : tr( "Enable Receive" ), 2 );
- }
-
- QPoint p = mapToGlobal ( QPoint ( 0, 0 ) );
- QSize s = menu-> sizeHint ( );
-
- p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( ));
-
- switch ( menu-> exec ( p )) {
- case 0:
- setIrdaStatus ( !m_irda_active );
- timerEvent ( 0 );
- break;
- case 1:
- setIrdaDiscoveryStatus ( !m_irda_discovery_active );
- timerEvent ( 0 );
- break;
- case 2:
- setIrdaReceiveStatus ( !m_receive_active );
- timerEvent( 0 );
- break;
- }
-
- delete menu;
+ QPopupMenu *menu = new QPopupMenu ( this );
+ QString cmd;
+
+ /* Refresh active state */
+ timerEvent ( 0 );
+
+ //menu->insertItem( tr("More..."), 4 );
+
+ if ( m_irda_active && !m_devices. isEmpty ( )) {
+ menu-> insertItem ( tr( "Discovered Device:" ), 9 );
+
+ for ( QMap<QString, QString>::Iterator it = m_devices. begin ( );
+ it != m_devices. end ( ); ++it )
+ {
+ menu-> insertItem ( *it );
+ }
+
+ menu-> insertSeparator ( );
+ }
+
+ menu-> insertItem ( m_irda_active ? tr( "Disable IrDA" ) : tr( "Enable IrDA" ), 0 );
+
+ if ( m_irda_active ) {
+ menu-> insertItem (
+ m_irda_discovery_active ? tr( "Disable Discovery" ) :
+ tr( "Enable Discovery" ), 1
+ );
+
+ /* Only Receive if OBEX is installed */
+ if( Ir::supported() )
+ menu-> insertItem (
+ m_receive_active ? tr( "Disable Receive" ) :
+ tr( "Enable Receive" ), 2
+ );
+ }
+
+ QPoint p = mapToGlobal ( QPoint ( 0, 0 ) );
+ QSize s = menu-> sizeHint ( );
+
+ p = QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) -
+ s. height ( ));
+
+ switch ( menu-> exec ( p )) {
+ case 0:
+ setIrdaStatus ( !m_irda_active );
+ timerEvent ( 0 );
+ break;
+ case 1:
+ setIrdaDiscoveryStatus ( !m_irda_discovery_active );
+ timerEvent ( 0 );
+ break;
+ case 2:
+ setIrdaReceiveStatus ( !m_receive_active );
+ timerEvent( 0 );
+ break;
+ }
+
+ delete menu;
}
void IrdaApplet::timerEvent ( QTimerEvent * )
{
- bool oldactive = m_irda_active;
- bool olddiscovery = m_irda_discovery_active;
- bool receiveUpdate = false;
+ bool oldactive = m_irda_active;
+ bool olddiscovery = m_irda_discovery_active;
+ bool receiveUpdate = false;
- if ( m_receive_state_changed ) {
- receiveUpdate = true;
- m_receive_state_changed = false;
- }
+ if ( m_receive_state_changed ) {
+ receiveUpdate = true;
+ m_receive_state_changed = false;
+ }
- m_irda_active = checkIrdaStatus ( );
- m_irda_discovery_active = checkIrdaDiscoveryStatus ( );
+ m_irda_active = checkIrdaStatus ( );
+ m_irda_discovery_active = checkIrdaDiscoveryStatus ( );
- if ( m_irda_discovery_active )
- showDiscovered ( );
+ if ( m_irda_discovery_active )
+ showDiscovered ( );
- if (( m_irda_active != oldactive ) || ( m_irda_discovery_active != olddiscovery ) || receiveUpdate )
- update ( );
+ if (( m_irda_active != oldactive ) ||
+ ( m_irda_discovery_active != olddiscovery ) || receiveUpdate )
+ {
+ update ( );
+ }
}
void IrdaApplet::paintEvent ( QPaintEvent * )
{
- QPainter p( this );
+ QPainter p( this );
- p.drawPixmap( 0, 1, m_irda_active ? m_irdaOnPixmap : m_irdaOffPixmap );
+ p.drawPixmap( 0, 1, m_irda_active ? m_irdaOnPixmap : m_irdaOffPixmap );
- if ( m_irda_discovery_active )
- p.drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap );
+ if ( m_irda_discovery_active )
+ p.drawPixmap( 0, 1, m_irdaDiscoveryOnPixmap );
- if ( m_receive_active )
- p.drawPixmap( 0, 1, m_receiveActivePixmap );
+ if ( m_receive_active )
+ p.drawPixmap( 0, 1, m_receiveActivePixmap );
}
-/*
- * We know 3 calls
- * a) enable
- * b) disable
- * a and b will temp enable the IrDa device and disable will disable it again if it wasn't on
- * c) listDevices: We will return a list of known devices
+
+/*!
+ * We recognize 3 events:
+ * - enable: Attempt to enable the IrDA device
+ * - disable: Attempt to disable the IrDA device if it was already enabled
+ * - listDevices: Returns a list of known IrDA devices
*/
void IrdaApplet::slotMessage( const QCString& str, const QByteArray& ) {
if ( str == "enableIrda()") {
m_wasOn = checkIrdaStatus();
m_wasDiscover = checkIrdaDiscoveryStatus();
if (!m_wasOn) {
@@ -365,6 +404,7 @@ void IrdaApplet::slotMessage( const QCString& str, const QByteArray& ) {
e << list;
}
}
EXPORT_OPIE_APPLET_v1( IrdaApplet )
+
diff --git a/core/applets/irdaapplet/irda.h b/core/applets/irdaapplet/irda.h
index f713bbe..2cbf4f7 100644
--- a/core/applets/irdaapplet/irda.h
+++ b/core/applets/irdaapplet/irda.h
@@ -20,58 +20,56 @@
#include <qpixmap.h>
#include <qpopupmenu.h>
#include <qmap.h>
class IrdaApplet : public QWidget
{
- Q_OBJECT
+ Q_OBJECT
-public:
- IrdaApplet( QWidget *parent = 0, const char *name = 0 );
- ~IrdaApplet();
- static int position();
+ public:
+ IrdaApplet( QWidget *parent = 0, const char *name = 0 );
+ ~IrdaApplet();
+ static int position();
- virtual void show ( );
+ virtual void show ( );
-protected:
- virtual void timerEvent ( QTimerEvent * );
- virtual void mousePressEvent ( QMouseEvent * );
- virtual void paintEvent ( QPaintEvent* );
+ protected:
+ virtual void timerEvent ( QTimerEvent * );
+ virtual void mousePressEvent ( QMouseEvent * );
+ virtual void paintEvent ( QPaintEvent* );
-private slots:
- void popupTimeout ( );
+ private slots:
+ void popupTimeout ( );
void slotMessage( const QCString& , const QByteArray& );
-private:
- void popup( QString message, QString icon = QString::null );
+ private:
+ void popup( QString message, QString icon = QString::null );
- bool checkIrdaStatus ( );
- bool setIrdaStatus ( bool );
- bool checkIrdaDiscoveryStatus ();
- bool setIrdaDiscoveryStatus ( bool );
- bool setIrdaReceiveStatus ( bool );
+ bool checkIrdaStatus ( );
+ bool setIrdaStatus ( bool );
+ bool checkIrdaDiscoveryStatus ();
+ bool setIrdaDiscoveryStatus ( bool );
+ bool setIrdaReceiveStatus ( bool );
- void showDiscovered();
+ void showDiscovered();
-private:
- QPixmap m_irdaOnPixmap;
- QPixmap m_irdaOffPixmap;
- QPixmap m_irdaDiscoveryOnPixmap;
- QPixmap m_receiveActivePixmap;
+ QPixmap m_irdaOnPixmap;
+ QPixmap m_irdaOffPixmap;
+ QPixmap m_irdaDiscoveryOnPixmap;
+ QPixmap m_receiveActivePixmap;
- bool m_irda_active;
- bool m_irda_discovery_active;
- bool m_receive_active;
- bool m_receive_state_changed;
+ bool m_irda_active;
+ bool m_irda_discovery_active;
+ bool m_receive_active;
+ bool m_receive_state_changed;
- QPopupMenu *m_popup;
+ QPopupMenu *m_popup;
- int m_sockfd;
+ int m_sockfd;
- QMap <QString, QString> m_devices;
+ QMap <QString, QString> m_devices;
- bool m_wasOn; // if IrDa was enabled
- bool m_wasDiscover;
+ bool m_wasOn; ///< If IrDA was enabled this is true
+ bool m_wasDiscover;
};
-
-
#endif // __OPIE_IRDA_APPLET_H__
+