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.cpp | 9 |
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 | ||
7 | IOSerial::IOSerial(const Config &config) : IOLayer(config) { | 7 | IOSerial::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 | ||
13 | IOSerial::~IOSerial() { | 13 | IOSerial::~IOSerial() { |
14 | if (m_fd) { | 14 | if (m_fd) { |
15 | close(); | 15 | close(); |
16 | } | 16 | } |
17 | } | 17 | } |
18 | 18 | ||
19 | void IOSerial::send(const QByteArray &data) { | 19 | void IOSerial::send(const QByteArray &data) { |
@@ -37,42 +37,43 @@ void IOSerial::close() { | |||
37 | 37 | ||
38 | bool IOSerial::open() { | 38 | bool 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 | ||
118 | void IOSerial::reload(const Config &config) { | 119 | void 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 | ||
127 | int IOSerial::getBaud(int baud) const { | 128 | int 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 | } |