summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-console/io_serial.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-console/io_serial.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-console/io_serial.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/noncore/apps/opie-console/io_serial.cpp b/noncore/apps/opie-console/io_serial.cpp
index c9155d1..b495f39 100644
--- a/noncore/apps/opie-console/io_serial.cpp
+++ b/noncore/apps/opie-console/io_serial.cpp
@@ -1,19 +1,19 @@
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
7IOSerial::IOSerial(const Config &config) : IOLayer(config) { 7IOSerial::IOSerial(const Profile &config) : IOLayer(config) {
8 m_fd = 0; 8 m_fd = 0;
9 reload(config); 9 reload(config);
10} 10}
11 11
12 12
13IOSerial::~IOSerial() { 13IOSerial::~IOSerial() {
14 if (m_fd) { 14 if (m_fd) {
15 close(); 15 close();
16 } 16 }
17} 17}
18 18
19void IOSerial::send(const QByteArray &data) { 19void IOSerial::send(const QByteArray &data) {
@@ -37,42 +37,43 @@ void IOSerial::close() {
37 37
38bool IOSerial::open() { 38bool IOSerial::open() {
39 if (!m_fd) { 39 if (!m_fd) {
40 struct termios tty; 40 struct termios tty;
41 m_fd = ::open(m_device, O_RDWR | O_NOCTTY | O_NONBLOCK); 41 m_fd = ::open(m_device, O_RDWR | O_NOCTTY | O_NONBLOCK);
42 if (m_fd < 0) { 42 if (m_fd < 0) {
43 emit error(CouldNotOpen, strerror(errno)); 43 emit error(CouldNotOpen, strerror(errno));
44 return FALSE; 44 return FALSE;
45 } 45 }
46 tcgetattr(m_fd, &tty); 46 tcgetattr(m_fd, &tty);
47 47
48 /* Baud rate */ 48 /* Baud rate */
49 int speed = getBaud(m_baud); 49 int speed = baud(m_baud);
50 if (speed == -1) { 50 if (speed == -1) {
51 emit error(Refuse, tr("Invalid baud rate")); 51 emit error(Refuse, tr("Invalid baud rate"));
52 } 52 }
53 cfsetospeed(&tty, speed); 53 cfsetospeed(&tty, speed);
54 cfsetispeed(&tty, speed); 54 cfsetispeed(&tty, speed);
55 55
56 /* Take care of Space / Mark parity */ 56 /* Take care of Space / Mark parity */
57 if (m_dbits == 7 && (m_parity == ParitySpace || m_parity == ParityMark)) { 57 if (m_dbits == 7 && (m_parity == ParitySpace || m_parity == ParityMark)) {
58 m_dbits = 8; 58 m_dbits = 8;
59 } 59 }
60 60
61 /* Data bits */ 61 /* Data bits */
62 switch (m_dbits) { 62 switch (m_dbits) {
63 case 5: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5; break; 63 case 5: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5; break;
64 case 6: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6; break; 64 case 6: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6; break;
65 case 7: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7; break; 65 case 7: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7; break;
66 case 8: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; break; 66 case 8: tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; break;
67 default: break;
67 } 68 }
68 69
69 /* Raw, no echo mode */ 70 /* Raw, no echo mode */
70 tty.c_iflag = IGNBRK; 71 tty.c_iflag = IGNBRK;
71 tty.c_lflag = 0; 72 tty.c_lflag = 0;
72 tty.c_oflag = 0; 73 tty.c_oflag = 0;
73 tty.c_cflag |= CLOCAL | CREAD; 74 tty.c_cflag |= CLOCAL | CREAD;
74 75
75 /* Stop bits */ 76 /* Stop bits */
76 if (m_sbits == 2) { 77 if (m_sbits == 2) {
77 tty.c_cflag |= CSTOPB; 78 tty.c_cflag |= CSTOPB;
78 } else { 79 } else {
@@ -106,34 +107,34 @@ bool IOSerial::open() {
106 /* Notifications on read & errors */ 107 /* Notifications on read & errors */
107 m_read = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); 108 m_read = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
108 m_error = new QSocketNotifier(m_fd, QSocketNotifier::Exception, this); 109 m_error = new QSocketNotifier(m_fd, QSocketNotifier::Exception, this);
109 connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); 110 connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived()));
110 connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); 111 connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured()));
111 return TRUE; 112 return TRUE;
112 } else { 113 } else {
113 emit error(Refuse, tr("Device is already connected")); 114 emit error(Refuse, tr("Device is already connected"));
114 return FALSE; 115 return FALSE;
115 } 116 }
116} 117}
117 118
118void IOSerial::reload(const Config &config) { 119void IOSerial::reload(const Profile &config) {
119 m_device = config.readEntry("Device", SERIAL_DEFAULT_DEVICE); 120 m_device = config.readEntry("Device", SERIAL_DEFAULT_DEVICE);
120 m_baud = config.readNumEntry("Baud", SERIAL_DEFAULT_BAUD); 121 m_baud = config.readNumEntry("Baud", SERIAL_DEFAULT_BAUD);
121 m_parity = config.readNumEntry("Parity", SERIAL_DEFAULT_PARITY); 122 m_parity = config.readNumEntry("Parity", SERIAL_DEFAULT_PARITY);
122 m_dbits = config.readNumEntry("DataBits", SERIAL_DEFAULT_DBITS); 123 m_dbits = config.readNumEntry("DataBits", SERIAL_DEFAULT_DBITS);
123 m_sbits = config.readNumEntry("StopBits", SERIAL_DEFAULT_SBITS); 124 m_sbits = config.readNumEntry("StopBits", SERIAL_DEFAULT_SBITS);
124 m_flow = config.readNumEntry("Flow", SERIAL_DEFAULT_FLOW); 125 m_flow = config.readNumEntry("Flow", SERIAL_DEFAULT_FLOW);
125} 126}
126 127
127int IOSerial::getBaud(int baud) const { 128int IOSerial::baud(int baud) const {
128 switch (baud) { 129 switch (baud) {
129 case 300: return B300; break; 130 case 300: return B300; break;
130 case 600: return B600; break; 131 case 600: return B600; break;
131 case 1200: return B1200; break; 132 case 1200: return B1200; break;
132 case 2400: return B2400; break; 133 case 2400: return B2400; break;
133 case 4800: return B4800; break; 134 case 4800: return B4800; break;
134 case 9600: return B9600; break; 135 case 9600: return B9600; break;
135 case 19200: return B19200; break; 136 case 19200: return B19200; break;
136 case 38400: return B38400; break; 137 case 38400: return B38400; break;
137 case 57600: return B57600; break; 138 case 57600: return B57600; break;
138 case 115200: return B115200; break; 139 case 115200: return B115200; break;
139 } 140 }