Changeset 372 for branches/merlin/csctapi
- Timestamp:
- 09/03/09 12:35:57 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/merlin/csctapi/io_serial.c
r371 r372 246 246 struct serial_struct s; 247 247 if (ioctl(io->fd, TIOCGSERIAL, &s) >= 0) { 248 if ((s.flags & ASYNC_SPD_CUST) != 0 ) {248 if ((s.flags & ASYNC_SPD_CUST) != 0 && s.custom_divisor > 0) { 249 249 unsigned long effective_bitrate = (unsigned long) s.baud_base / s.custom_divisor; 250 250 props->input_bitrate = effective_bitrate; … … 336 336 /* Special bitrate : these structures are only available on linux as fas as we know so limit this code to OS_LINUX */ 337 337 unsigned long standard_bitrate = props->output_bitrate; 338 unsigned long effective_bitrate ;338 unsigned long effective_bitrate = IO_Serial_Bitrate_from_Speed(IO_Serial_Bitrate_to_Speed(standard_bitrate)); 339 339 340 340 struct serial_struct s; … … 342 342 unsigned long wanted_bitrate = props->output_bitrate; 343 343 unsigned long custom_divisor = ((unsigned long) s.baud_base + (wanted_bitrate / 2)) / wanted_bitrate; 344 effective_bitrate = (unsigned long) s.baud_base / custom_divisor; 345 346 /* Check if a custom_divisor is needed */ 347 if (effective_bitrate == 230400 || effective_bitrate == 115200 || effective_bitrate == 57600 || effective_bitrate == 38400 || effective_bitrate == 19200 || effective_bitrate == 9600 || effective_bitrate == 4800 || effective_bitrate == 2400 || effective_bitrate == 1800 || effective_bitrate == 1200 || effective_bitrate == 600 || effective_bitrate == 300 || effective_bitrate == 200 || effective_bitrate == 150 || effective_bitrate == 134 || effective_bitrate == 110 || effective_bitrate == 75 || effective_bitrate == 50 || effective_bitrate == 0) { 348 /* Use standard bitrate value */ 349 if ((s.flags & ASYNC_SPD_CUST) != 0) { 350 s.flags |= ASYNC_SPD_MASK; 351 s.flags &= ~ASYNC_SPD_CUST; 352 ioctl(io->fd, TIOCSSERIAL, &s); 344 /* Check if custom_divisor is greater than zero */ 345 if (custom_divisor > 0) { 346 effective_bitrate = (unsigned long) s.baud_base / custom_divisor; 347 348 /* Check if a custom_divisor is needed */ 349 if (effective_bitrate == 230400 || effective_bitrate == 115200 || effective_bitrate == 57600 || effective_bitrate == 38400 || effective_bitrate == 19200 || effective_bitrate == 9600 || effective_bitrate == 4800 || effective_bitrate == 2400 || effective_bitrate == 1800 || effective_bitrate == 1200 || effective_bitrate == 600 || effective_bitrate == 300 || effective_bitrate == 200 || effective_bitrate == 150 || effective_bitrate == 134 || effective_bitrate == 110 || effective_bitrate == 75 || effective_bitrate == 50 || effective_bitrate == 0) { 350 /* Use standard bitrate value */ 351 if ((s.flags & ASYNC_SPD_CUST) != 0) { 352 s.flags |= ASYNC_SPD_MASK; 353 s.flags &= ~ASYNC_SPD_CUST; 354 ioctl(io->fd, TIOCSSERIAL, &s); 355 } 356 standard_bitrate = effective_bitrate; 357 #ifdef DEBUG_IO 358 printf("IO: Using standard bitrate of %lu (baud_base too small)\n", standard_bitrate); 359 #endif 360 } else { 361 /* Use custom divisor */ 362 s.custom_divisor = custom_divisor; 363 s.flags &= ~ASYNC_SPD_MASK; 364 s.flags |= ASYNC_SPD_CUST; 365 if (ioctl(io->fd, TIOCSSERIAL, &s) >= 0) { 366 standard_bitrate = 38400; 367 } 368 #ifdef DEBUG_IO 369 printf("IO: Using special bitrate of = %lu (%+.2f%% off)\n", effective_bitrate, ((double) (effective_bitrate - wanted_bitrate)) / wanted_bitrate * 100); 370 #endif 353 371 } 354 standard_bitrate = effective_bitrate;355 #ifdef DEBUG_IO356 printf("IO: Using standard bitrate of %lu (baud_base too small)\n", standard_bitrate);357 #endif358 } else {359 /* Use custom divisor */360 s.custom_divisor = custom_divisor;361 s.flags &= ~ASYNC_SPD_MASK;362 s.flags |= ASYNC_SPD_CUST;363 if (ioctl(io->fd, TIOCSSERIAL, &s) >= 0) {364 standard_bitrate = 38400;365 }366 #ifdef DEBUG_IO367 printf("IO: Using special bitrate of = %lu (%+.2f%% off)\n", effective_bitrate, ((double) (effective_bitrate - wanted_bitrate)) / wanted_bitrate * 100);368 #endif369 372 } 370 } else {371 effective_bitrate = IO_Serial_Bitrate_from_Speed(IO_Serial_Bitrate_to_Speed(standard_bitrate));372 373 } 373 374
Note:
See TracChangeset
for help on using the changeset viewer.