author | harlekin <harlekin> | 2003-01-16 19:50:06 (UTC) |
---|---|---|
committer | harlekin <harlekin> | 2003-01-16 19:50:06 (UTC) |
commit | 7957a2f100eb687e63cd3593097c5914539c7406 (patch) (unidiff) | |
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 | 12 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/device.h | 9 |
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 @@ | |||
1 | 1 | ||
2 | #include <signal.h> | 2 | #include <signal.h> |
3 | 3 | ||
4 | #include <opie/oprocess.h> | 4 | #include <opie/oprocess.h> |
5 | 5 | ||
6 | #include "device.h" | 6 | #include "device.h" |
7 | 7 | ||
8 | using namespace OpieTooth; | 8 | using namespace OpieTooth; |
9 | 9 | ||
10 | namespace { | 10 | namespace { |
11 | int parsePid( const QCString& par ){ | 11 | int parsePid( const QCString& par ){ |
12 | int id=0; | 12 | int id=0; |
13 | QString string( par ); | 13 | QString string( par ); |
14 | QStringList list = QStringList::split( '\n', string ); | 14 | QStringList list = QStringList::split( '\n', string ); |
15 | for( QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ | 15 | for( QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ |
16 | qWarning("parsePID: %s", (*it).latin1() ); | 16 | qWarning("parsePID: %s", (*it).latin1() ); |
17 | if( !(*it).startsWith("CSR") ){ | 17 | if( !(*it).startsWith("CSR") ){ |
18 | id = (*it).toInt(); | 18 | id = (*it).toInt(); |
19 | break; | 19 | break; |
20 | } | 20 | } |
21 | } | 21 | } |
22 | return id; | 22 | return id; |
23 | } | 23 | } |
24 | } | 24 | } |
25 | 25 | ||
26 | Device::Device(const QString &device, const QString &mode ) | 26 | Device::Device(const QString &device, const QString &mode, const QString &speed ) |
27 | : QObject(0, "device" ) { | 27 | : QObject(0, "device") { |
28 | |||
28 | qWarning("OpieTooth::Device create" ); | 29 | qWarning("OpieTooth::Device create" ); |
29 | m_hci = 0; | 30 | m_hci = 0; |
30 | m_process = 0; | 31 | m_process = 0; |
31 | m_attached = false; | 32 | m_attached = false; |
32 | m_device = device; | 33 | m_device = device; |
33 | m_mode = mode; | 34 | m_mode = mode; |
35 | m_speed = speed; | ||
34 | attach(); | 36 | attach(); |
35 | } | 37 | } |
36 | Device::~Device(){ | 38 | Device::~Device(){ |
37 | detach(); | 39 | detach(); |
38 | } | 40 | } |
39 | void Device::attach(){ | 41 | void Device::attach(){ |
40 | qWarning("attaching %s %s", m_device.latin1(), m_mode.latin1() ); | 42 | qWarning("attaching %s %s %s", m_device.latin1(), m_mode.latin1(), m_speed.latin1() ); |
41 | if(m_process == 0 ){ | 43 | if(m_process == 0 ){ |
42 | m_output.resize(0); | 44 | m_output.resize(0); |
43 | qWarning("new process to create" ); | 45 | qWarning("new process to create" ); |
44 | m_process = new OProcess(); | 46 | m_process = new OProcess(); |
45 | *m_process << "hciattach"; | 47 | *m_process << "hciattach"; |
46 | *m_process << "-p"; | 48 | *m_process << "-p"; |
47 | *m_process << m_device << m_mode; | 49 | *m_process << m_device << m_mode << m_speed; |
48 | connect(m_process, SIGNAL( processExited(OProcess*) ), | 50 | connect(m_process, SIGNAL( processExited(OProcess*) ), |
49 | this, SLOT( slotExited(OProcess* ) ) ); | 51 | this, SLOT( slotExited(OProcess* ) ) ); |
50 | connect(m_process, SIGNAL( receivedStdout(OProcess*, char*, int) ), | 52 | connect(m_process, SIGNAL( receivedStdout(OProcess*, char*, int) ), |
51 | this, SLOT(slotStdOut(OProcess*,char*,int ) ) ); | 53 | this, SLOT(slotStdOut(OProcess*,char*,int ) ) ); |
52 | connect(m_process, SIGNAL(receivedStderr(OProcess*, char*, int ) ), | 54 | connect(m_process, SIGNAL(receivedStderr(OProcess*, char*, int ) ), |
53 | this, SLOT(slotStdErr(OProcess*,char*,int) ) ); | 55 | this, SLOT(slotStdErr(OProcess*,char*,int) ) ); |
54 | if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ){ | 56 | if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ){ |
55 | qWarning("Could not start" ); | 57 | qWarning("Could not start" ); |
56 | delete m_process; | 58 | delete m_process; |
57 | m_process = 0; | 59 | m_process = 0; |
58 | } | 60 | } |
59 | }; | 61 | }; |
60 | } | 62 | } |
61 | void Device::detach(){ | 63 | void Device::detach(){ |
62 | delete m_hci; | 64 | delete m_hci; |
63 | delete m_process; | 65 | delete m_process; |
64 | // kill the pid we got | 66 | // kill the pid we got |
65 | if(m_attached ){ | 67 | if(m_attached ){ |
66 | //kill the pid | 68 | //kill the pid |
67 | qWarning( "killing" ); | 69 | qWarning( "killing" ); |
68 | kill(pid, 9); | 70 | kill(pid, 9); |
69 | } | 71 | } |
70 | qWarning("detached" ); | 72 | qWarning("detached" ); |
71 | } | 73 | } |
72 | bool Device::isLoaded()const{ | 74 | bool Device::isLoaded()const{ |
73 | return m_attached; | 75 | return m_attached; |
74 | } | 76 | } |
75 | QString Device::devName()const { | 77 | QString Device::devName()const { |
76 | return QString::fromLatin1("hci0"); | 78 | return QString::fromLatin1("hci0"); |
77 | }; | 79 | }; |
78 | void Device::slotExited( OProcess* proc) | 80 | void Device::slotExited( OProcess* proc) |
79 | { | 81 | { |
80 | qWarning("prcess exited" ); | 82 | qWarning("prcess exited" ); |
81 | if(proc== m_process ){ | 83 | if(proc== m_process ){ |
82 | qWarning("proc == m_process" ); | 84 | qWarning("proc == m_process" ); |
83 | if( m_process->normalExit() ){ // normal exit | 85 | if( m_process->normalExit() ){ // normal exit |
84 | qWarning("normalExit" ); | 86 | qWarning("normalExit" ); |
85 | int ret = m_process->exitStatus(); | 87 | int ret = m_process->exitStatus(); |
86 | if( ret == 0 ){ // attached | 88 | if( ret == 0 ){ // attached |
87 | qWarning("attached" ); | 89 | qWarning("attached" ); |
88 | qWarning("Output: %s", m_output.data() ); | 90 | qWarning("Output: %s", m_output.data() ); |
89 | pid = parsePid( m_output ); | 91 | pid = parsePid( m_output ); |
90 | qWarning("Pid = %d", pid ); | 92 | qWarning("Pid = %d", pid ); |
91 | // now hciconfig hci0 up ( determine hciX FIXME) | 93 | // now hciconfig hci0 up ( determine hciX FIXME) |
92 | // and call hciconfig hci0 up | 94 | // and call hciconfig hci0 up |
93 | // FIXME hardcoded to hci0 now :( | 95 | // FIXME hardcoded to hci0 now :( |
94 | m_hci = new OProcess( ); | 96 | m_hci = new OProcess( ); |
95 | *m_hci << "hciconfig"; | 97 | *m_hci << "hciconfig"; |
96 | *m_hci << "hci0 up"; | 98 | *m_hci << "hci0 up"; |
97 | connect(m_hci, SIGNAL( processExited(OProcess*) ), | 99 | connect(m_hci, SIGNAL( processExited(OProcess*) ), |
98 | this, SLOT( slotExited(OProcess* ) ) ); | 100 | this, SLOT( slotExited(OProcess* ) ) ); |
99 | if(!m_hci->start() ){ | 101 | if(!m_hci->start() ){ |
100 | qWarning("could not start" ); | 102 | qWarning("could not start" ); |
101 | m_attached = false; | 103 | m_attached = false; |
102 | emit device("hci0", false ); | 104 | emit device("hci0", false ); |
103 | } | 105 | } |
104 | }else{ | 106 | }else{ |
105 | qWarning("crass" ); | 107 | qWarning("crass" ); |
106 | m_attached = false; | 108 | m_attached = false; |
107 | emit device("hci0", false ); | 109 | emit device("hci0", false ); |
108 | 110 | ||
109 | } | 111 | } |
110 | } | 112 | } |
111 | delete m_process; | 113 | delete m_process; |
112 | m_process = 0; | 114 | m_process = 0; |
113 | }else if(proc== m_hci ){ | 115 | }else if(proc== m_hci ){ |
114 | qWarning("M HCI exited" ); | 116 | qWarning("M HCI exited" ); |
115 | if( m_hci->normalExit() ){ | 117 | if( m_hci->normalExit() ){ |
116 | qWarning("normal exit" ); | 118 | qWarning("normal exit" ); |
117 | int ret = m_hci->exitStatus(); | 119 | int ret = m_hci->exitStatus(); |
118 | if( ret == 0 ){ | 120 | if( ret == 0 ){ |
119 | qWarning("attached really really attached" ); | 121 | qWarning("attached really really attached" ); |
120 | m_attached = true; | 122 | m_attached = true; |
121 | emit device("hci0", true ); | 123 | emit device("hci0", true ); |
122 | }else{ | 124 | }else{ |
123 | qWarning( "failed" ); | 125 | qWarning( "failed" ); |
124 | emit device("hci0", false ); | 126 | emit device("hci0", false ); |
125 | m_attached = false; | 127 | m_attached = false; |
126 | } | 128 | } |
127 | }// normal exit | 129 | }// normal exit |
128 | delete m_hci; | 130 | delete m_hci; |
129 | m_hci = 0; | 131 | m_hci = 0; |
130 | } | 132 | } |
131 | } | 133 | } |
132 | void Device::slotStdOut(OProcess* proc, char* chars, int len) | 134 | void Device::slotStdOut(OProcess* proc, char* chars, int len) |
133 | { | 135 | { |
134 | qWarning("std out" ); | 136 | qWarning("std out" ); |
135 | if( len <1 ){ | 137 | if( len <1 ){ |
136 | qWarning( "len < 1 " ); | 138 | qWarning( "len < 1 " ); |
137 | return; | 139 | return; |
138 | } | 140 | } |
139 | if(proc == m_process ){ | 141 | if(proc == m_process ){ |
140 | QCString string( chars, len+1 ); // \0 == +1 | 142 | QCString string( chars, len+1 ); // \0 == +1 |
141 | qWarning("output: %s", string.data() ); | 143 | qWarning("output: %s", string.data() ); |
142 | m_output.append( string.data() ); | 144 | m_output.append( string.data() ); |
143 | } | 145 | } |
144 | } | 146 | } |
145 | void Device::slotStdErr(OProcess* proc, char* chars, int len) | 147 | void Device::slotStdErr(OProcess* proc, char* chars, int len) |
146 | { | 148 | { |
147 | qWarning("std err" ); | 149 | qWarning("std err" ); |
148 | slotStdOut( proc, chars, len ); | 150 | slotStdOut( proc, chars, len ); |
149 | } | 151 | } |
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 @@ | |||
1 | 1 | ||
2 | #ifndef OpieToothDevice_H | 2 | #ifndef OpieToothDevice_H |
3 | #define OpieToothDevice_H | 3 | #define OpieToothDevice_H |
4 | 4 | ||
5 | #include <qobject.h> | 5 | #include <qobject.h> |
6 | #include <qstring.h> | 6 | #include <qstring.h> |
7 | #include <qvaluelist.h> | 7 | #include <qvaluelist.h> |
8 | 8 | ||
9 | #include <sys/types.h> | 9 | #include <sys/types.h> |
10 | 10 | ||
11 | class OProcess; | 11 | class OProcess; |
12 | namespace OpieTooth { | 12 | namespace OpieTooth { |
13 | /** | 13 | /** |
14 | * Device takes care of attaching serial | 14 | * Device takes care of attaching serial |
15 | * devices to the blueZ stack. | 15 | * devices to the blueZ stack. |
16 | * After attaching it hciconfig ups it | 16 | * After attaching it hciconfig ups it |
17 | */ | 17 | */ |
18 | class Device : public QObject { | 18 | class Device : public QObject { |
19 | Q_OBJECT | 19 | |
20 | Q_OBJECT | ||
20 | 21 | ||
21 | public: | 22 | public: |
22 | 23 | ||
23 | /** | 24 | /** |
24 | * Brings up an device. | 25 | * Brings up an device. |
25 | * Usage example: new Device(/dev/ttySB0, csr) | 26 | * Usage example: new Device(/dev/ttySB0, csr) |
26 | * | 27 | * |
27 | * @param &device QString the device name | 28 | * @param &device QString the device name |
28 | * @param &mode QString the mode | 29 | * @param &mode QString the mode |
30 | * @param &speed QString the speed of the device, can be left blank | ||
29 | */ | 31 | */ |
30 | Device(const QString &device, const QString& mode); | 32 | Device(const QString &device, const QString& mode, const QString& speed); |
31 | 33 | ||
32 | /** | 34 | /** |
33 | * unloads the device | 35 | * unloads the device |
34 | */ | 36 | */ |
35 | ~Device(); | 37 | ~Device(); |
36 | 38 | ||
37 | /** | 39 | /** |
38 | * attach the device | 40 | * attach the device |
39 | */ | 41 | */ |
40 | void attach(); | 42 | void attach(); |
41 | 43 | ||
42 | /** | 44 | /** |
43 | * detach the device | 45 | * detach the device |
44 | */ | 46 | */ |
45 | void detach(); | 47 | void detach(); |
46 | 48 | ||
47 | /** | 49 | /** |
48 | * Is the device loaded? | 50 | * Is the device loaded? |
49 | * @return bool, if the device is loaded | 51 | * @return bool, if the device is loaded |
50 | */ | 52 | */ |
51 | bool isLoaded()const; | 53 | bool isLoaded()const; |
52 | 54 | ||
53 | /** | 55 | /** |
54 | * Returns the device name | 56 | * Returns the device name |
55 | * @return QString, the device name | 57 | * @return QString, the device name |
56 | */ | 58 | */ |
57 | QString devName()const ; // hci0 | 59 | QString devName()const ; // hci0 |
58 | 60 | ||
59 | signals: | 61 | signals: |
60 | 62 | ||
61 | /** | 63 | /** |
62 | * Signals devicename and up status | 64 | * Signals devicename and up status |
63 | * @return &device QString, Devicename | 65 | * @return &device QString, Devicename |
64 | * @return up bool, if the device is up or not. | 66 | * @return up bool, if the device is up or not. |
65 | */ | 67 | */ |
66 | void device(const QString& device, bool up ); | 68 | void device(const QString& device, bool up ); |
67 | private slots: | 69 | private slots: |
68 | virtual void slotExited( OProcess* ); | 70 | virtual void slotExited( OProcess* ); |
69 | virtual void slotStdOut(OProcess*, char*, int ); | 71 | virtual void slotStdOut(OProcess*, char*, int ); |
70 | virtual void slotStdErr(OProcess*, char*, int ); | 72 | virtual void slotStdErr(OProcess*, char*, int ); |
71 | private: | 73 | private: |
72 | class Private; | 74 | class Private; |
73 | Private *d; | 75 | Private *d; |
74 | QString m_device; | 76 | QString m_device; |
75 | bool m_attached:1; | 77 | bool m_attached:1; |
76 | OProcess* m_hci; | 78 | OProcess* m_hci; |
77 | OProcess* m_process; | 79 | OProcess* m_process; |
78 | QString m_devId; | 80 | QString m_devId; |
79 | QString m_mode; | 81 | QString m_mode; |
82 | QString m_speed; | ||
80 | pid_t pid; | 83 | pid_t pid; |
81 | QCString m_output; | 84 | QCString m_output; |
82 | }; | 85 | }; |
83 | }; | 86 | }; |
84 | 87 | ||
85 | #endif | 88 | #endif |