/[rdesktop]/sourceforge.net/trunk/rdesktop/serial.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/serial.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 434 by matthewc, Tue Jul 1 09:31:25 2003 UTC revision 435 by astrand, Wed Jul 9 09:18:20 2003 UTC
# Line 72  get_termios(void) Line 72  get_termios(void)
72          speed = cfgetispeed(&termios);          speed = cfgetispeed(&termios);
73          switch (speed)          switch (speed)
74          {          {
75                  case B75:       baud_rate = 75; break;                  case B75:
76                  case B110:      baud_rate = 110; break;                          baud_rate = 75;
77                  case B134:      baud_rate = 134; break;                          break;
78                  case B150:      baud_rate = 150; break;                  case B110:
79                  case B300:      baud_rate = 300; break;                          baud_rate = 110;
80                  case B600:      baud_rate = 600; break;                          break;
81                  case B1200:     baud_rate = 1200; break;                  case B134:
82                  case B1800:     baud_rate = 1800; break;                          baud_rate = 134;
83                  case B2400:     baud_rate = 2400; break;                          break;
84                  case B4800:     baud_rate = 4800; break;                  case B150:
85                  case B9600:     baud_rate = 9600; break;                          baud_rate = 150;
86                  case B19200:    baud_rate = 19200; break;                          break;
87                  case B38400:    baud_rate = 38400; break;                  case B300:
88                  case B57600:    baud_rate = 57600; break;                          baud_rate = 300;
89                  case B115200:   baud_rate = 115200; break;                          break;
90                  default:        baud_rate = 0; break;                  case B600:
91                            baud_rate = 600;
92                            break;
93                    case B1200:
94                            baud_rate = 1200;
95                            break;
96                    case B1800:
97                            baud_rate = 1800;
98                            break;
99                    case B2400:
100                            baud_rate = 2400;
101                            break;
102                    case B4800:
103                            baud_rate = 4800;
104                            break;
105                    case B9600:
106                            baud_rate = 9600;
107                            break;
108                    case B19200:
109                            baud_rate = 19200;
110                            break;
111                    case B38400:
112                            baud_rate = 38400;
113                            break;
114                    case B57600:
115                            baud_rate = 57600;
116                            break;
117                    case B115200:
118                            baud_rate = 115200;
119                            break;
120                    default:
121                            baud_rate = 0;
122                            break;
123          }          }
124    
125          speed = cfgetospeed(&termios);          speed = cfgetospeed(&termios);
126          dtr = (speed == B0) ? 0 : 1;          dtr = (speed == B0) ? 0 : 1;
127    
128          stop_bits = (termios.c_cflag & CSTOPB) ? STOP_BITS_2 : STOP_BITS_1;          stop_bits = (termios.c_cflag & CSTOPB) ? STOP_BITS_2 : STOP_BITS_1;
129          parity = (termios.c_cflag & PARENB) ? ((termios.c_cflag & PARODD) ? ODD_PARITY : EVEN_PARITY) : NO_PARITY;          parity = (termios.
130                      c_cflag & PARENB) ? ((termios.
131                                            c_cflag & PARODD) ? ODD_PARITY : EVEN_PARITY) : NO_PARITY;
132          switch (termios.c_cflag & CSIZE)          switch (termios.c_cflag & CSIZE)
133          {          {
134                  case CS5: word_length = 5; break;                  case CS5:
135                  case CS6: word_length = 6; break;                          word_length = 5;
136                  case CS7: word_length = 7; break;                          break;
137                  default:  word_length = 8; break;                  case CS6:
138                            word_length = 6;
139                            break;
140                    case CS7:
141                            word_length = 7;
142                            break;
143                    default:
144                            word_length = 8;
145                            break;
146          }          }
147    
148          return True;          return True;
# Line 113  set_termios(void) Line 155  set_termios(void)
155    
156          switch (baud_rate)          switch (baud_rate)
157          {          {
158                  case 75:        speed = B75; break;                  case 75:
159                  case 110:       speed = B110; break;                          speed = B75;
160                  case 134:       speed = B134; break;                          break;
161                  case 150:       speed = B150; break;                  case 110:
162                  case 300:       speed = B300; break;                          speed = B110;
163                  case 600:       speed = B600; break;                          break;
164                  case 1200:      speed = B1200; break;                  case 134:
165                  case 1800:      speed = B1800; break;                          speed = B134;
166                  case 2400:      speed = B2400; break;                          break;
167                  case 4800:      speed = B4800; break;                  case 150:
168                  case 9600:      speed = B9600; break;                          speed = B150;
169                  case 19200:     speed = B19200; break;                          break;
170                  case 38400:     speed = B38400; break;                  case 300:
171                  case 57600:     speed = B57600; break;                          speed = B300;
172                  case 115200:    speed = B115200; break;                          break;
173                  default:        speed = B0; break;                  case 600:
174                            speed = B600;
175                            break;
176                    case 1200:
177                            speed = B1200;
178                            break;
179                    case 1800:
180                            speed = B1800;
181                            break;
182                    case 2400:
183                            speed = B2400;
184                            break;
185                    case 4800:
186                            speed = B4800;
187                            break;
188                    case 9600:
189                            speed = B9600;
190                            break;
191                    case 19200:
192                            speed = B19200;
193                            break;
194                    case 38400:
195                            speed = B38400;
196                            break;
197                    case 57600:
198                            speed = B57600;
199                            break;
200                    case 115200:
201                            speed = B115200;
202                            break;
203                    default:
204                            speed = B0;
205                            break;
206          }          }
207    
208          /* on systems with separate ispeed and ospeed, we can remember the speed          /* on systems with separate ispeed and ospeed, we can remember the speed
# Line 136  set_termios(void) Line 210  set_termios(void)
210          cfsetispeed(&termios, speed);          cfsetispeed(&termios, speed);
211          cfsetospeed(&termios, dtr ? speed : 0);          cfsetospeed(&termios, dtr ? speed : 0);
212    
213          termios.c_cflag &= ~(CSTOPB|PARENB|PARODD|CSIZE);          termios.c_cflag &= ~(CSTOPB | PARENB | PARODD | CSIZE);
214          switch (stop_bits)          switch (stop_bits)
215          {          {
216                  case STOP_BITS_2:                  case STOP_BITS_2:
# Line 149  set_termios(void) Line 223  set_termios(void)
223                          termios.c_cflag |= PARENB;                          termios.c_cflag |= PARENB;
224                          break;                          break;
225                  case ODD_PARITY:                  case ODD_PARITY:
226                          termios.c_cflag |= PARENB|PARODD;                          termios.c_cflag |= PARENB | PARODD;
227                          break;                          break;
228          }          }
229          switch (word_length)          switch (word_length)
230          {          {
231                  case 5:  termios.c_cflag |= CS5; break;                  case 5:
232                  case 6:  termios.c_cflag |= CS6; break;                          termios.c_cflag |= CS5;
233                  case 7:  termios.c_cflag |= CS7; break;                          break;
234                  default: termios.c_cflag |= CS8; break;                  case 6:
235                            termios.c_cflag |= CS6;
236                            break;
237                    case 7:
238                            termios.c_cflag |= CS7;
239                            break;
240                    default:
241                            termios.c_cflag |= CS8;
242                            break;
243          }          }
244    
245          tcsetattr(serial_fd, TCSANOW, &termios);          tcsetattr(serial_fd, TCSANOW, &termios);
246  }  }
247    
248  static NTSTATUS  static NTSTATUS
249  serial_create(HANDLE *handle)  serial_create(HANDLE * handle)
250  {  {
251          /* XXX do we have to handle concurrent open attempts? */          /* XXX do we have to handle concurrent open attempts? */
252          serial_fd = open("/dev/ttyS0", O_RDWR);          serial_fd = open("/dev/ttyS0", O_RDWR);
# Line 186  serial_close(HANDLE handle) Line 268  serial_close(HANDLE handle)
268  }  }
269    
270  static NTSTATUS  static NTSTATUS
271  serial_read(HANDLE handle, uint8 *data, uint32 length, uint32 *result)  serial_read(HANDLE handle, uint8 * data, uint32 length, uint32 * result)
272  {  {
273          *result = read(serial_fd, data, length);          *result = read(serial_fd, data, length);
274          return STATUS_SUCCESS;          return STATUS_SUCCESS;
275  }  }
276    
277  static NTSTATUS  static NTSTATUS
278  serial_write(HANDLE handle, uint8 *data, uint32 length, uint32 *result)  serial_write(HANDLE handle, uint8 * data, uint32 length, uint32 * result)
279  {  {
280          *result = write(serial_fd, data, length);          *result = write(serial_fd, data, length);
281          return STATUS_SUCCESS;          return STATUS_SUCCESS;
# Line 253  serial_device_control(HANDLE handle, uin Line 335  serial_device_control(HANDLE handle, uin
335                          break;                          break;
336                  case SERIAL_GET_HANDFLOW:                  case SERIAL_GET_HANDFLOW:
337                          out_uint32_le(out, 0);                          out_uint32_le(out, 0);
338                          out_uint32_le(out, 3); /* Xon/Xoff */                          out_uint32_le(out, 3);  /* Xon/Xoff */
339                          out_uint32_le(out, 0);                          out_uint32_le(out, 0);
340                          out_uint32_le(out, 0);                          out_uint32_le(out, 0);
341                          break;                          break;
# Line 309  serial_device_control(HANDLE handle, uin Line 391  serial_device_control(HANDLE handle, uin
391          return STATUS_SUCCESS;          return STATUS_SUCCESS;
392  }  }
393    
394  DEVICE_FNS serial_fns =  DEVICE_FNS serial_fns = {
 {  
395          serial_create,          serial_create,
396          serial_close,          serial_close,
397          serial_read,          serial_read,
398          serial_write,          serial_write,
399          serial_device_control          serial_device_control
400  };  };
   

Legend:
Removed from v.434  
changed lines
  Added in v.435

  ViewVC Help
Powered by ViewVC 1.1.26