author | zecke <zecke> | 2002-10-14 20:36:48 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-10-14 20:36:48 (UTC) |
commit | 8140420efa133ea59310d3f8de721950fd1d13af (patch) (unidiff) | |
tree | 9279c8e786f1a4476b598f112fd0a8541355d1ba | |
parent | 0547ecc794209a0824fd7662e434706ac625dbb2 (diff) | |
download | opie-8140420efa133ea59310d3f8de721950fd1d13af.zip opie-8140420efa133ea59310d3f8de721950fd1d13af.tar.gz opie-8140420efa133ea59310d3f8de721950fd1d13af.tar.bz2 |
the BAud Value is called Speed not baud
-rw-r--r-- | noncore/apps/opie-console/io_serial.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/noncore/apps/opie-console/io_serial.cpp b/noncore/apps/opie-console/io_serial.cpp index 4129d64..03f1b1a 100644 --- a/noncore/apps/opie-console/io_serial.cpp +++ b/noncore/apps/opie-console/io_serial.cpp | |||
@@ -1,196 +1,197 @@ | |||
1 | #include <fcntl.h> | 1 | #include <fcntl.h> |
2 | #include <termios.h> | 2 | #include <termios.h> |
3 | #include <errno.h> | 3 | #include <errno.h> |
4 | #include <unistd.h> | 4 | #include <unistd.h> |
5 | #include "io_serial.h" | 5 | #include "io_serial.h" |
6 | 6 | ||
7 | IOSerial::IOSerial(const Profile &config) : IOLayer(config) { | 7 | IOSerial::IOSerial(const Profile &config) : IOLayer(config) { |
8 | m_read = 0l; | 8 | m_read = 0l; |
9 | m_error = 0l; | 9 | m_error = 0l; |
10 | m_fd = 0; | 10 | m_fd = 0; |
11 | reload(config); | 11 | reload(config); |
12 | } | 12 | } |
13 | 13 | ||
14 | 14 | ||
15 | IOSerial::~IOSerial() { | 15 | IOSerial::~IOSerial() { |
16 | if (m_fd) { | 16 | if (m_fd) { |
17 | close(); | 17 | close(); |
18 | } | 18 | } |
19 | } | 19 | } |
20 | 20 | ||
21 | void IOSerial::send(const QByteArray &data) { | 21 | void IOSerial::send(const QByteArray &data) { |
22 | if (m_fd) { | 22 | if (m_fd) { |
23 | write(m_fd, data.data(), data.size()); | 23 | write(m_fd, data.data(), data.size()); |
24 | } else { | 24 | } else { |
25 | emit error(Refuse, tr("Not connected")); | 25 | emit error(Refuse, tr("Not connected")); |
26 | } | 26 | } |
27 | } | 27 | } |
28 | 28 | ||
29 | void IOSerial::close() { | 29 | void IOSerial::close() { |
30 | qWarning("closing!"); | 30 | qWarning("closing!"); |
31 | if (m_fd) { | 31 | if (m_fd) { |
32 | delete m_read; | 32 | delete m_read; |
33 | delete m_error; | 33 | delete m_error; |
34 | ::close(m_fd); | 34 | ::close(m_fd); |
35 | m_fd = 0; | 35 | m_fd = 0; |
36 | } else { | 36 | } else { |
37 | emit error(Refuse, tr("Not connected")); | 37 | emit error(Refuse, tr("Not connected")); |
38 | } | 38 | } |
39 | } | 39 | } |
40 | 40 | ||
41 | bool IOSerial::open() { | 41 | bool IOSerial::open() { |
42 | qWarning("open"); | 42 | qWarning("open"); |
43 | if (!m_fd) { | 43 | if (!m_fd) { |
44 | qWarning("going to open %s", m_device.latin1()); | 44 | qWarning("going to open %s", m_device.latin1()); |
45 | struct termios tty; | 45 | struct termios tty; |
46 | m_fd = ::open(m_device, O_RDWR | O_NOCTTY | O_NONBLOCK); | 46 | m_fd = ::open(m_device, O_RDWR | O_NOCTTY | O_NONBLOCK); |
47 | if (m_fd < 0) { | 47 | if (m_fd < 0) { |
48 | qWarning(" fd < 0 "); | 48 | qWarning(" fd < 0 "); |
49 | emit error(CouldNotOpen, strerror(errno)); | 49 | emit error(CouldNotOpen, strerror(errno)); |
50 | return FALSE; | 50 | return FALSE; |
51 | } | 51 | } |
52 | tcgetattr(m_fd, &tty); | 52 | tcgetattr(m_fd, &tty); |
53 | 53 | ||
54 | /* Baud rate */ | 54 | /* Baud rate */ |
55 | int speed = baud(m_baud); | 55 | int speed = baud(m_baud); |
56 | if (speed == -1) { | 56 | if (speed == -1) { |
57 | qWarning("speed -1"); | 57 | qWarning("speed -1"); |
58 | emit error(Refuse, tr("Invalid baud rate")); | 58 | emit error(Refuse, tr("Invalid baud rate")); |
59 | } | 59 | } |
60 | cfsetospeed(&tty, speed); | 60 | cfsetospeed(&tty, speed); |
61 | cfsetispeed(&tty, speed); | 61 | cfsetispeed(&tty, speed); |
62 | 62 | ||
63 | /* Take care of Space / Mark parity */ | 63 | /* Take care of Space / Mark parity */ |
64 | if (m_dbits == 7 && (m_parity == ParitySpace || m_parity == ParityMark)) { | 64 | if (m_dbits == 7 && (m_parity == ParitySpace || m_parity == ParityMark)) { |
65 | m_dbits = 8; | 65 | m_dbits = 8; |
66 | } | 66 | } |
67 | 67 | ||
68 | /* Data bits */ | 68 | /* Data bits */ |
69 | switch (m_dbits) { | 69 | switch (m_dbits) { |
70 | case 5: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5; break; | 70 | case 5: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5; break; |
71 | case 6: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6; break; | 71 | case 6: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6; break; |
72 | case 7: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7; break; | 72 | case 7: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7; break; |
73 | case 8: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; break; | 73 | case 8: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; break; |
74 | default: break; | 74 | default: break; |
75 | } | 75 | } |
76 | 76 | ||
77 | /* Raw, no echo mode */ | 77 | /* Raw, no echo mode */ |
78 | tty.c_iflag = IGNBRK; | 78 | tty.c_iflag = IGNBRK; |
79 | tty.c_lflag = 0; | 79 | tty.c_lflag = 0; |
80 | tty.c_oflag = 0; | 80 | tty.c_oflag = 0; |
81 | tty.c_cflag |= CLOCAL | CREAD; | 81 | tty.c_cflag |= CLOCAL | CREAD; |
82 | 82 | ||
83 | /* Stop bits */ | 83 | /* Stop bits */ |
84 | if (m_sbits == 2) { | 84 | if (m_sbits == 2) { |
85 | tty.c_cflag |= CSTOPB; | 85 | tty.c_cflag |= CSTOPB; |
86 | } else { | 86 | } else { |
87 | tty.c_cflag &= ~CSTOPB; | 87 | tty.c_cflag &= ~CSTOPB; |
88 | } | 88 | } |
89 | 89 | ||
90 | tty.c_cc[VMIN] = 1; | 90 | tty.c_cc[VMIN] = 1; |
91 | tty.c_cc[VTIME] = 5; | 91 | tty.c_cc[VTIME] = 5; |
92 | 92 | ||
93 | /* Flow control */ | 93 | /* Flow control */ |
94 | if (m_flow & FlowSW) | 94 | if (m_flow & FlowSW) |
95 | tty.c_iflag |= IXON | IXOFF; | 95 | tty.c_iflag |= IXON | IXOFF; |
96 | else | 96 | else |
97 | tty.c_iflag &= ~(IXON|IXOFF|IXANY); | 97 | tty.c_iflag &= ~(IXON|IXOFF|IXANY); |
98 | 98 | ||
99 | if (m_flow & FlowHW) | 99 | if (m_flow & FlowHW) |
100 | tty.c_cflag |= CRTSCTS; | 100 | tty.c_cflag |= CRTSCTS; |
101 | else | 101 | else |
102 | tty.c_cflag &= ~CRTSCTS; | 102 | tty.c_cflag &= ~CRTSCTS; |
103 | 103 | ||
104 | /* Parity */ | 104 | /* Parity */ |
105 | tty.c_cflag &= ~(PARENB | PARODD); | 105 | tty.c_cflag &= ~(PARENB | PARODD); |
106 | if (m_parity & ParityEven) | 106 | if (m_parity & ParityEven) |
107 | tty.c_cflag |= PARENB; | 107 | tty.c_cflag |= PARENB; |
108 | else if (m_parity & ParityOdd) | 108 | else if (m_parity & ParityOdd) |
109 | tty.c_cflag |= (PARENB | PARODD); | 109 | tty.c_cflag |= (PARENB | PARODD); |
110 | 110 | ||
111 | /* Set the changes */ | 111 | /* Set the changes */ |
112 | tcsetattr(m_fd, TCSANOW, &tty); | 112 | tcsetattr(m_fd, TCSANOW, &tty); |
113 | 113 | ||
114 | /* Notifications on read & errors */ | 114 | /* Notifications on read & errors */ |
115 | m_read = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); | 115 | m_read = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); |
116 | m_error = new QSocketNotifier(m_fd, QSocketNotifier::Exception, this); | 116 | m_error = new QSocketNotifier(m_fd, QSocketNotifier::Exception, this); |
117 | connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); | 117 | connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); |
118 | connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); | 118 | connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); |
119 | return TRUE; | 119 | return TRUE; |
120 | } else { | 120 | } else { |
121 | qWarning(" already opened"); | 121 | qWarning(" already opened"); |
122 | emit error(Refuse, tr("Device is already connected")); | 122 | emit error(Refuse, tr("Device is already connected")); |
123 | m_fd = 0; | 123 | m_fd = 0; |
124 | return FALSE; | 124 | return FALSE; |
125 | } | 125 | } |
126 | } | 126 | } |
127 | 127 | ||
128 | void IOSerial::reload(const Profile &config) { | 128 | void IOSerial::reload(const Profile &config) { |
129 | m_device = config.readEntry("Device", SERIAL_DEFAULT_DEVICE); | 129 | m_device = config.readEntry("Device", SERIAL_DEFAULT_DEVICE); |
130 | qWarning( "Dev" +m_device ); | 130 | qWarning( "Dev" +m_device ); |
131 | qWarning( "Conf:" +config.readEntry("Device") ); | 131 | qWarning( "Conf:" +config.readEntry("Device") ); |
132 | m_baud = config.readNumEntry("Baud", SERIAL_DEFAULT_BAUD); | 132 | m_baud = config.readNumEntry("Speed", SERIAL_DEFAULT_BAUD); |
133 | m_parity = config.readNumEntry("Parity", SERIAL_DEFAULT_PARITY); | 133 | m_parity = config.readNumEntry("Parity", SERIAL_DEFAULT_PARITY); |
134 | m_dbits = config.readNumEntry("DataBits", SERIAL_DEFAULT_DBITS); | 134 | m_dbits = config.readNumEntry("DataBits", SERIAL_DEFAULT_DBITS); |
135 | m_sbits = config.readNumEntry("StopBits", SERIAL_DEFAULT_SBITS); | 135 | m_sbits = config.readNumEntry("StopBits", SERIAL_DEFAULT_SBITS); |
136 | m_flow = config.readNumEntry("Flow", SERIAL_DEFAULT_FLOW); | 136 | m_flow = config.readNumEntry("Flow", SERIAL_DEFAULT_FLOW); |
137 | |||
137 | } | 138 | } |
138 | 139 | ||
139 | int IOSerial::baud(int baud) const { | 140 | int IOSerial::baud(int baud) const { |
140 | switch (baud) { | 141 | switch (baud) { |
141 | case 300: return B300; break; | 142 | case 300: return B300; break; |
142 | case 600: return B600; break; | 143 | case 600: return B600; break; |
143 | case 1200: return B1200; break; | 144 | case 1200: return B1200; break; |
144 | case 2400: return B2400; break; | 145 | case 2400: return B2400; break; |
145 | case 4800: return B4800; break; | 146 | case 4800: return B4800; break; |
146 | case 9600: return B9600; break; | 147 | case 9600: return B9600; break; |
147 | case 19200: return B19200; break; | 148 | case 19200: return B19200; break; |
148 | case 38400: return B38400; break; | 149 | case 38400: return B38400; break; |
149 | case 57600: return B57600; break; | 150 | case 57600: return B57600; break; |
150 | case 115200: return B115200; break; | 151 | case 115200: return B115200; break; |
151 | } | 152 | } |
152 | return -1; | 153 | return -1; |
153 | } | 154 | } |
154 | 155 | ||
155 | void IOSerial::errorOccured() { | 156 | void IOSerial::errorOccured() { |
156 | emit error(ClosedUnexpected, strerror(errno)); | 157 | emit error(ClosedUnexpected, strerror(errno)); |
157 | close(); | 158 | close(); |
158 | } | 159 | } |
159 | 160 | ||
160 | void IOSerial::dataArrived() { | 161 | void IOSerial::dataArrived() { |
161 | QByteArray array(4097); | 162 | QByteArray array(4097); |
162 | 163 | ||
163 | int len = read(m_fd, array.data(), 4096); | 164 | int len = read(m_fd, array.data(), 4096); |
164 | if (len == 0) | 165 | if (len == 0) |
165 | close(); | 166 | close(); |
166 | if (len < 0) | 167 | if (len < 0) |
167 | return; | 168 | return; |
168 | array.resize( len ); | 169 | array.resize( len ); |
169 | emit received(array); | 170 | emit received(array); |
170 | } | 171 | } |
171 | 172 | ||
172 | QString IOSerial::identifier() const { | 173 | QString IOSerial::identifier() const { |
173 | return "serial"; | 174 | return "serial"; |
174 | } | 175 | } |
175 | 176 | ||
176 | QString IOSerial::name() const { | 177 | QString IOSerial::name() const { |
177 | return "RS232 Serial IO Layer"; | 178 | return "RS232 Serial IO Layer"; |
178 | } | 179 | } |
179 | int IOSerial::rawIO()const { | 180 | int IOSerial::rawIO()const { |
180 | if (m_read ) | 181 | if (m_read ) |
181 | disconnect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); | 182 | disconnect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); |
182 | if (m_error ) | 183 | if (m_error ) |
183 | disconnect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); | 184 | disconnect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); |
184 | 185 | ||
185 | int fd = ::open(m_device, O_RDWR ); | 186 | int fd = ::open(m_device, O_RDWR ); |
186 | 187 | ||
187 | return fd; | 188 | return fd; |
188 | }; | 189 | }; |
189 | void IOSerial::closeRawIO(int fd) { | 190 | void IOSerial::closeRawIO(int fd) { |
190 | if (m_read ) | 191 | if (m_read ) |
191 | connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); | 192 | connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); |
192 | if (m_error ) | 193 | if (m_error ) |
193 | connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); | 194 | connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); |
194 | 195 | ||
195 | ::close( fd ); | 196 | ::close( fd ); |
196 | } | 197 | } |