summaryrefslogtreecommitdiff
authorerik <erik>2007-02-08 01:43:09 (UTC)
committer erik <erik>2007-02-08 01:43:09 (UTC)
commit853b61f97e718359bef95147ab3c7beb0705acda (patch) (unidiff)
tree7b374511f636951a2ab9ff0f9fec7ec2d64abd2a
parentc36a2e25a8875a31957968482ba8a0831a8b0aba (diff)
downloadopie-853b61f97e718359bef95147ab3c7beb0705acda.zip
opie-853b61f97e718359bef95147ab3c7beb0705acda.tar.gz
opie-853b61f97e718359bef95147ab3c7beb0705acda.tar.bz2
This commit adds support for the HTC Universal bluetooth device to
bluezapplet. This commit is based on a patch submitted by GoXbox Live <goxboxlive at gmail dot com> to the opie-devel mailing list. Thanks GoXbox Live!
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opietooth/applet/bluezapplet.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/noncore/net/opietooth/applet/bluezapplet.cpp b/noncore/net/opietooth/applet/bluezapplet.cpp
index 8498afc..787abc6 100644
--- a/noncore/net/opietooth/applet/bluezapplet.cpp
+++ b/noncore/net/opietooth/applet/bluezapplet.cpp
@@ -45,192 +45,196 @@ using namespace Opie::Core;
45#include <qapplication.h> 45#include <qapplication.h>
46#include <qpoint.h> 46#include <qpoint.h>
47#include <qpainter.h> 47#include <qpainter.h>
48#include <qlayout.h> 48#include <qlayout.h>
49#include <qframe.h> 49#include <qframe.h>
50#include <qpixmap.h> 50#include <qpixmap.h>
51#include <qstring.h> 51#include <qstring.h>
52#include <qtimer.h> 52#include <qtimer.h>
53#include <qpopupmenu.h> 53#include <qpopupmenu.h>
54#include <qmessagebox.h> 54#include <qmessagebox.h>
55 55
56/* STD */ 56/* STD */
57#include <device.h> 57#include <device.h>
58 58
59namespace OpieTooth { 59namespace OpieTooth {
60 BluezApplet::BluezApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) { 60 BluezApplet::BluezApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) {
61 setFixedHeight( AppLnk::smallIconSize() ); 61 setFixedHeight( AppLnk::smallIconSize() );
62 setFixedWidth( AppLnk::smallIconSize() ); 62 setFixedWidth( AppLnk::smallIconSize() );
63#if OPIE_VERSION < 102010 63#if OPIE_VERSION < 102010
64 bluezOnPixmap = Resource::loadPixmap( "bluetoothapplet/bluezon" ); 64 bluezOnPixmap = Resource::loadPixmap( "bluetoothapplet/bluezon" );
65 bluezOffPixmap = Resource::loadPixmap( "bluetoothapplet/bluezoff" ); 65 bluezOffPixmap = Resource::loadPixmap( "bluetoothapplet/bluezoff" );
66 bluezDiscoveryOnPixmap = Resource::loadPixmap( "bluetoothapplet/magglass.png" ); 66 bluezDiscoveryOnPixmap = Resource::loadPixmap( "bluetoothapplet/magglass.png" );
67 bluezReceiveOnPixmap = Resource::loadPixmap( "bluetoothapplet/receive.png" ); 67 bluezReceiveOnPixmap = Resource::loadPixmap( "bluetoothapplet/receive.png" );
68#else 68#else
69 bluezOnPixmap = OResource::loadImage( "bluetoothapplet/bluezon", OResource::SmallIcon ); 69 bluezOnPixmap = OResource::loadImage( "bluetoothapplet/bluezon", OResource::SmallIcon );
70 bluezOffPixmap = OResource::loadImage( "bluetoothapplet/bluezoff", Opie::Core::OResource::SmallIcon ); 70 bluezOffPixmap = OResource::loadImage( "bluetoothapplet/bluezoff", Opie::Core::OResource::SmallIcon );
71 bluezDiscoveryOnPixmap = OResource::loadImage( "bluetoothapplet/bluezondiscovery", Opie::Core::OResource::SmallIcon ); 71 bluezDiscoveryOnPixmap = OResource::loadImage( "bluetoothapplet/bluezondiscovery", Opie::Core::OResource::SmallIcon );
72 bluezReceiveOnPixmap = OResource::loadImage( "bluetoothapplet/bluezonreceive", Opie::Core::OResource::SmallIcon ); 72 bluezReceiveOnPixmap = OResource::loadImage( "bluetoothapplet/bluezonreceive", Opie::Core::OResource::SmallIcon );
73#endif 73#endif
74 startTimer(2000); 74 startTimer(2000);
75 btDevice = 0; 75 btDevice = 0;
76 btManager = 0; 76 btManager = 0;
77 bluezactive = false; 77 bluezactive = false;
78 bluezDiscoveryActive = false; 78 bluezDiscoveryActive = false;
79 bluezReceiveActive = false; 79 bluezReceiveActive = false;
80 bluezReceiveChanged = false; 80 bluezReceiveChanged = false;
81 doListDevice = false; 81 doListDevice = false;
82 isScanning = false; 82 isScanning = false;
83 m_wasOn = false; 83 m_wasOn = false;
84 m_sync = false; 84 m_sync = false;
85 85
86 // TODO: determine whether this channel has to be closed at destruction time. 86 // TODO: determine whether this channel has to be closed at destruction time.
87 QCopChannel* chan = new QCopChannel("QPE/Bluetooth", this ); 87 QCopChannel* chan = new QCopChannel("QPE/Bluetooth", this );
88 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ), 88 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
89 this, SLOT(slotMessage(const QCString&,const QByteArray&) ) ); 89 this, SLOT(slotMessage(const QCString&,const QByteArray&) ) );
90 ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null"); 90 ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null");
91 } 91 }
92 92
93 BluezApplet::~BluezApplet() { 93 BluezApplet::~BluezApplet() {
94 if ( btDevice ) { 94 if ( btDevice ) {
95 ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null"); 95 ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null");
96 delete btDevice; 96 delete btDevice;
97 } 97 }
98 if ( btManager ) { 98 if ( btManager ) {
99 delete btManager; 99 delete btManager;
100 } 100 }
101 } 101 }
102 102
103 int BluezApplet::position() 103 int BluezApplet::position()
104 { 104 {
105 return 6; 105 return 6;
106 } 106 }
107 107
108 108
109 bool BluezApplet::checkBluezStatus() { 109 bool BluezApplet::checkBluezStatus() {
110 if (btDevice) { 110 if (btDevice) {
111 if (btDevice->isLoaded() ) { 111 if (btDevice->isLoaded() ) {
112 odebug << "btDevice isLoaded" << oendl; 112 odebug << "btDevice isLoaded" << oendl;
113 return true; 113 return true;
114 } else { 114 } else {
115 odebug << "btDevice is NOT loaded" << oendl; 115 odebug << "btDevice is NOT loaded" << oendl;
116 return false; 116 return false;
117 } 117 }
118 } else { 118 } else {
119 odebug << "btDevice is ZERO" << oendl; 119 odebug << "btDevice is ZERO" << oendl;
120 return false; 120 return false;
121 } 121 }
122 } 122 }
123 123
124 int BluezApplet::setBluezStatus(int c, bool sync) { 124 int BluezApplet::setBluezStatus(int c, bool sync) {
125 125
126 if ( c == 1 ) { 126 if ( c == 1 ) {
127 switch ( ODevice::inst()->model() ) { 127 switch ( ODevice::inst()->model() ) {
128 case Model_iPAQ_H39xx: 128 case Model_iPAQ_H39xx:
129 btDevice = new Device( "/dev/tts/1", "bcsp", "921600" ); 129 btDevice = new Device( "/dev/tts/1", "bcsp", "921600" );
130 break; 130 break;
131 131
132 case Model_iPAQ_H5xxx: 132 case Model_iPAQ_H5xxx:
133 btDevice = new Device( "/dev/tts/1", "any", "921600" ); 133 btDevice = new Device( "/dev/tts/1", "any", "921600" );
134 break; 134 break;
135 135
136#if OPIE_VERSION >= 102010 136#if OPIE_VERSION >= 102010
137 case Model_MyPal_716: 137 case Model_MyPal_716:
138 btDevice = new Device( "/dev/ttyS1", "bcsp", "921600" ); 138 btDevice = new Device( "/dev/ttyS1", "bcsp", "921600" );
139 break; 139 break;
140#endif 140#endif
141 case Model_HTC_Universal:
142 btDevice = new Device( "/dev/ttyS1", "texas", "115200" );
143 break;
144
141 case Model_iPAQ_H22xx: 145 case Model_iPAQ_H22xx:
142 btDevice = new Device( "/dev/tts/3", "any", "921600" ); 146 btDevice = new Device( "/dev/tts/3", "any", "921600" );
143 break; 147 break;
144 148
145 default: 149 default:
146 btDevice = new Device( "/dev/ttySB0", "bcsp", "230400" ); 150 btDevice = new Device( "/dev/ttySB0", "bcsp", "230400" );
147 break; 151 break;
148 } 152 }
149 m_sync = sync; 153 m_sync = sync;
150 connect(btDevice, SIGNAL(device(const QString&, bool)), 154 connect(btDevice, SIGNAL(device(const QString&, bool)),
151 this, SLOT(slotDevice(const QString&, bool))); 155 this, SLOT(slotDevice(const QString&, bool)));
152 156
153 } else { 157 } else {
154 setObexRecieveStatus(0); 158 setObexRecieveStatus(0);
155 ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null"); 159 ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null");
156 if ( btManager ) { 160 if ( btManager ) {
157 delete btManager; 161 delete btManager;
158 btManager = 0; 162 btManager = 0;
159 } 163 }
160 if ( btDevice ) { 164 if ( btDevice ) {
161 delete btDevice; 165 delete btDevice;
162 btDevice = 0; 166 btDevice = 0;
163 } 167 }
164 } 168 }
165 return 0; 169 return 0;
166 } 170 }
167 171
168 int BluezApplet::checkBluezDiscoveryStatus() { 172 int BluezApplet::checkBluezDiscoveryStatus() {
169 return isScanning; 173 return isScanning;
170 } 174 }
171 175
172 int BluezApplet::setBluezDiscoveryStatus(int d) { 176 int BluezApplet::setBluezDiscoveryStatus(int d) {
173 return bluezDiscoveryActive = d; 177 return bluezDiscoveryActive = d;
174 } 178 }
175 179
176 int BluezApplet::setObexRecieveStatus(int d) { 180 int BluezApplet::setObexRecieveStatus(int d) {
177 { 181 {
178 QCopEnvelope e ( "QPE/Obex", "btreceive(int)" ); 182 QCopEnvelope e ( "QPE/Obex", "btreceive(int)" );
179 e << ( d ? 1 : 0 ); 183 e << ( d ? 1 : 0 );
180 } 184 }
181 bluezReceiveActive = (bool)(d != 0); 185 bluezReceiveActive = (bool)(d != 0);
182 bluezReceiveChanged = true; 186 bluezReceiveChanged = true;
183 return d; 187 return d;
184 } 188 }
185 189
186 // FIXME mbhaynie 190 // FIXME mbhaynie
187 // receiver for QCopChannel("QPE/Bluetooth") messages. 191 // receiver for QCopChannel("QPE/Bluetooth") messages.
188 void BluezApplet::slotMessage( const QCString& str, const QByteArray& ) 192 void BluezApplet::slotMessage( const QCString& str, const QByteArray& )
189 { 193 {
190 if ( str == "enableBluetooth()") { 194 if ( str == "enableBluetooth()") {
191 m_wasOn = checkBluezStatus(); 195 m_wasOn = checkBluezStatus();
192 if (!m_wasOn) { 196 if (!m_wasOn) {
193 setBluezStatus(1, true); 197 setBluezStatus(1, true);
194 sleep(2); 198 sleep(2);
195 } 199 }
196 } 200 }
197 else if ( str == "disableBluetooth()") { 201 else if ( str == "disableBluetooth()") {
198 /* 202 /*
199 * We can down BT only if it was started by qcop. We don't want 203 * We can down BT only if it was started by qcop. We don't want
200 * to down BT started from menu an break our networking connection 204 * to down BT started from menu an break our networking connection
201 */ 205 */
202 if (checkBluezStatus() && !m_wasOn) 206 if (checkBluezStatus() && !m_wasOn)
203 setBluezStatus(0); 207 setBluezStatus(0);
204 doListDevice = false; 208 doListDevice = false;
205 } 209 }
206 else if ( str == "listDevices()") { 210 else if ( str == "listDevices()") {
207 if (checkBluezStatus()) { 211 if (checkBluezStatus()) {
208 doListDevice = false; 212 doListDevice = false;
209 timerEvent(0); 213 timerEvent(0);
210 if (!btManager) { 214 if (!btManager) {
211 btManager = new Manager("hci0"); 215 btManager = new Manager("hci0");
212 connect( btManager, 216 connect( btManager,
213 SIGNAL( foundDevices(const QString&, RemoteDevice::ValueList) ), 217 SIGNAL( foundDevices(const QString&, RemoteDevice::ValueList) ),
214 this, SLOT( fillList(const QString&, RemoteDevice::ValueList) ) ) ; 218 this, SLOT( fillList(const QString&, RemoteDevice::ValueList) ) ) ;
215 } 219 }
216 btManager->searchDevices(); 220 btManager->searchDevices();
217 isScanning = true; 221 isScanning = true;
218 } else 222 } else
219 doListDevice = true; 223 doListDevice = true;
220 } 224 }
221 } 225 }
222 226
223 // Once the hcitool scan is complete, report back. 227 // Once the hcitool scan is complete, report back.
224 void BluezApplet::fillList(const QString&, RemoteDevice::ValueList deviceList) 228 void BluezApplet::fillList(const QString&, RemoteDevice::ValueList deviceList)
225 { 229 {
226 QCopEnvelope e("QPE/BluetoothBack", "devices(QStringMap)"); 230 QCopEnvelope e("QPE/BluetoothBack", "devices(QStringMap)");
227 231
228 QMap<QString, QString> btmap; 232 QMap<QString, QString> btmap;
229 233
230 RemoteDevice::ValueList::Iterator it; 234 RemoteDevice::ValueList::Iterator it;
231 for( it = deviceList.begin(); it != deviceList.end(); ++it ) 235 for( it = deviceList.begin(); it != deviceList.end(); ++it )
232 btmap[(*it).name()] = (*it).mac(); 236 btmap[(*it).name()] = (*it).mac();
233 237
234 e << btmap; 238 e << btmap;
235 isScanning = false; 239 isScanning = false;
236 timerEvent( 0 ); 240 timerEvent( 0 );