Changeset 1252 for trunk/csctapi/io_serial.c
- Timestamp:
- 01/16/10 17:09:51 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/io_serial.c
r1249 r1252 180 180 } 181 181 182 bool IO_Serial_GetPropertiesOld (IO_Serial * io) 183 { 184 struct termios currtio; 185 speed_t i_speed, o_speed; 186 unsigned int mctl; 187 188 #ifdef SCI_DEV 189 if(reader[ridx].typ == R_INTERNAL) 190 return FALSE; 191 #endif 192 193 if (io->input_bitrate != 0 && io->output_bitrate != 0) //properties are already filled 194 return TRUE; 195 196 if (tcgetattr (reader[ridx].handle, &currtio) != 0) 197 return FALSE; 198 199 o_speed = cfgetospeed (&currtio); 200 201 switch (o_speed) 202 { 203 #ifdef B0 204 case B0: 205 io->output_bitrate = 0; 206 break; 207 #endif 208 #ifdef B50 209 case B50: 210 io->output_bitrate = 50; 211 break; 212 #endif 213 #ifdef B75 214 case B75: 215 io->output_bitrate = 75; 216 break; 217 #endif 218 #ifdef B110 219 case B110: 220 io->output_bitrate = 110; 221 break; 222 #endif 223 #ifdef B134 224 case B134: 225 io->output_bitrate = 134; 226 break; 227 #endif 228 #ifdef B150 229 case B150: 230 io->output_bitrate = 150; 231 break; 232 #endif 233 #ifdef B200 234 case B200: 235 io->output_bitrate = 200; 236 break; 237 #endif 238 #ifdef B300 239 case B300: 240 io->output_bitrate = 300; 241 break; 242 #endif 243 #ifdef B600 244 case B600: 245 io->output_bitrate = 600; 246 break; 247 #endif 248 #ifdef B1200 249 case B1200: 250 io->output_bitrate = 1200; 251 break; 252 #endif 253 #ifdef B1800 254 case B1800: 255 io->output_bitrate = 1800; 256 break; 257 #endif 258 #ifdef B2400 259 case B2400: 260 io->output_bitrate = 2400; 261 break; 262 #endif 263 #ifdef B4800 264 case B4800: 265 io->output_bitrate = 4800; 266 break; 267 #endif 268 #ifdef B9600 269 case B9600: 270 io->output_bitrate = 9600; 271 break; 272 #endif 273 #ifdef B19200 274 case B19200: 275 io->output_bitrate = 19200; 276 break; 277 #endif 278 #ifdef B38400 279 case B38400: 280 io->output_bitrate = 38400; 281 break; 282 #endif 283 #ifdef B57600 284 case B57600: 285 io->output_bitrate = 57600; 286 break; 287 #endif 288 #ifdef B115200 289 case B115200: 290 io->output_bitrate = 115200; 291 break; 292 #endif 293 #ifdef B230400 294 case B230400: 295 io->output_bitrate = 230400; 296 break; 297 #endif 298 default: 299 io->output_bitrate = 1200; 300 break; 301 } 302 303 i_speed = cfgetispeed (&currtio); 304 305 switch (i_speed) 306 { 307 #ifdef B0 308 case B0: 309 io->input_bitrate = 0; 310 break; 311 #endif 312 #ifdef B50 313 case B50: 314 io->input_bitrate = 50; 315 break; 316 #endif 317 #ifdef B75 318 case B75: 319 io->input_bitrate = 75; 320 break; 321 #endif 322 #ifdef B110 323 case B110: 324 io->input_bitrate = 110; 325 break; 326 #endif 327 #ifdef B134 328 case B134: 329 io->input_bitrate = 134; 330 break; 331 #endif 332 #ifdef B150 333 case B150: 334 io->input_bitrate = 150; 335 break; 336 #endif 337 #ifdef B200 338 case B200: 339 io->input_bitrate = 200; 340 break; 341 #endif 342 #ifdef B300 343 case B300: 344 io->input_bitrate = 300; 345 break; 346 #endif 347 #ifdef B600 348 case B600: 349 io->input_bitrate = 600; 350 break; 351 #endif 352 #ifdef B1200 353 case B1200: 354 io->input_bitrate = 1200; 355 break; 356 #endif 357 #ifdef B1800 358 case B1800: 359 io->input_bitrate = 1800; 360 break; 361 #endif 362 #ifdef B2400 363 case B2400: 364 io->input_bitrate = 2400; 365 break; 366 #endif 367 #ifdef B4800 368 case B4800: 369 io->input_bitrate = 4800; 370 break; 371 #endif 372 #ifdef B9600 373 case B9600: 374 io->input_bitrate = 9600; 375 break; 376 #endif 377 #ifdef B19200 378 case B19200: 379 io->input_bitrate = 19200; 380 break; 381 #endif 382 #ifdef B38400 383 case B38400: 384 io->input_bitrate = 38400; 385 break; 386 #endif 387 #ifdef B57600 388 case B57600: 389 io->input_bitrate = 57600; 390 break; 391 #endif 392 #ifdef B115200 393 case B115200: 394 io->input_bitrate = 115200; 395 break; 396 #endif 397 #ifdef B230400 398 case B230400: 399 io->input_bitrate = 230400; 400 break; 401 #endif 402 default: 403 io->input_bitrate = 1200; 404 break; 405 } 406 407 switch (currtio.c_cflag & CSIZE) 408 { 409 case CS5: 410 io->bits = 5; 411 break; 412 case CS6: 413 io->bits = 6; 414 break; 415 case CS7: 416 io->bits = 7; 417 break; 418 case CS8: 419 io->bits = 8; 420 break; 421 } 422 423 if (((currtio.c_cflag) & PARENB) == PARENB) 424 { 425 if (((currtio.c_cflag) & PARODD) == PARODD) 426 io->parity = PARITY_ODD; 427 else 428 io->parity = PARITY_EVEN; 429 } 430 else 431 { 432 io->parity = PARITY_NONE; 433 } 434 435 if (((currtio.c_cflag) & CSTOPB) == CSTOPB) 436 io->stopbits = 2; 437 else 438 io->stopbits = 1; 439 440 if (ioctl (reader[ridx].handle, TIOCMGET, &mctl) < 0) 441 return FALSE; 442 443 io->dtr = ((mctl & TIOCM_DTR) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 444 io->rts = ((mctl & TIOCM_RTS) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 445 446 #ifdef DEBUG_IO 447 printf("IO: Getting properties: %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", io->input_bitrate, io->bits, io->parity == PARITY_EVEN ? "Even" : io->parity == PARITY_ODD ? "Odd" : "None", io->stopbits, io->dtr, io->rts); 448 #endif 449 450 return TRUE; 451 } 452 453 bool IO_Serial_SetPropertiesOld (IO_Serial * io) 454 { 455 struct termios newtio; 456 457 #ifdef SCI_DEV 458 if(reader[ridx].typ == R_INTERNAL) 459 return FALSE; 460 #endif 461 462 // printf("IO: Setting properties: reader_type%d, %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", reader[ridx].typ, io->input_bitrate, io->bits, io->parity == PARITY_EVEN ? "Even" : io->parity == PARITY_ODD ? "Odd" : "None", io->stopbits, io->dtr, io->rts); 463 memset (&newtio, 0, sizeof (newtio)); 464 465 182 bool IO_Serial_SetBitrate (unsigned long bitrate, struct termios * tio) 183 { 466 184 /* Set the bitrate */ 467 185 #ifdef OS_LINUX 468 186 if (reader[ridx].mhz == reader[ridx].cardmhz) 469 187 #endif 470 { //no overclo cking471 cfsetospeed( &newtio, IO_Serial_Bitrate(io->output_bitrate));472 cfsetispeed( &newtio, IO_Serial_Bitrate(io->input_bitrate));473 cs_debug("standard baudrate: cardmhz=%d mhz=%d -> effective baudrate %lu", reader[ridx].cardmhz, reader[ridx].mhz, io->output_bitrate);188 { //no overcloking 189 cfsetospeed(tio, IO_Serial_Bitrate(bitrate)); 190 cfsetispeed(tio, IO_Serial_Bitrate(bitrate)); 191 cs_debug("standard baudrate: cardmhz=%d mhz=%d -> effective baudrate %lu", reader[ridx].cardmhz, reader[ridx].mhz, bitrate); 474 192 } 475 193 #ifdef OS_LINUX … … 478 196 struct serial_struct nuts; 479 197 ioctl(reader[ridx].handle, TIOCGSERIAL, &nuts); 480 int custom_baud = io->output_bitrate * reader[ridx].mhz / reader[ridx].cardmhz;198 int custom_baud = bitrate * reader[ridx].mhz / reader[ridx].cardmhz; 481 199 nuts.custom_divisor = (nuts.baud_base + (custom_baud/2))/ custom_baud; 482 200 cs_debug("custom baudrate: cardmhz=%d mhz=%d custom_baud=%d baud_base=%d divisor=%d -> effective baudrate %d", … … 485 203 nuts.flags |= ASYNC_SPD_CUST; 486 204 ioctl(reader[ridx].handle, TIOCSSERIAL, &nuts); 487 cfsetospeed( &newtio, IO_Serial_Bitrate(38400));488 cfsetispeed( &newtio, IO_Serial_Bitrate(38400));205 cfsetospeed(tio, IO_Serial_Bitrate(38400)); 206 cfsetispeed(tio, IO_Serial_Bitrate(38400)); 489 207 } 490 208 #endif 491 492 /* Set the character size */ 493 switch (io->bits) 494 { 209 return TRUE; 210 } 211 212 bool IO_Serial_SetParams (unsigned long bitrate, unsigned bits, int parity, unsigned stopbits, int dtr, int rts) 213 { 214 struct termios newtio; 215 216 if(reader[ridx].typ == R_INTERNAL) 217 return FALSE; 218 219 // printf("IO: Setting properties: reader_type%d, %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", reader[ridx].typ, bitrate, bits, parity == PARITY_EVEN ? "Even" : parity == PARITY_ODD ? "Odd" : "None", stopbits, dtr, rts); 220 memset (&newtio, 0, sizeof (newtio)); 221 222 if (!IO_Serial_SetBitrate (bitrate, & newtio)) 223 return FALSE; 224 225 /* Set the character size */ 226 switch (bits) 227 { 495 228 case 5: 496 229 newtio.c_cflag |= CS5; … … 511 244 512 245 /* Set the parity */ 513 switch ( io->parity)246 switch (parity) 514 247 { 515 248 case PARITY_ODD: … … 529 262 530 263 /* Set the number of stop bits */ 531 switch ( io->stopbits)264 switch (stopbits) 532 265 { 533 266 case 1: … … 553 286 newtio.c_cc[VTIME] = 0; 554 287 555 // tcdrain(reader[ridx].handle); 556 if (tcsetattr (reader[ridx].handle, TCSANOW, &newtio) < 0) 557 return FALSE; 558 // tcflush(reader[ridx].handle, TCIOFLUSH); 559 // if (tcsetattr (reader[ridx].handle, TCSAFLUSH, &newtio) < 0) 560 // return FALSE; 561 562 IO_Serial_Ioctl_Lock(1); 563 IO_Serial_DTR_RTS(0, io->rts == IO_SERIAL_HIGH); 564 IO_Serial_DTR_RTS(1, io->dtr == IO_SERIAL_HIGH); 565 IO_Serial_Ioctl_Lock(0); 566 567 #ifdef DEBUG_IO 568 printf("IO: Setting properties: reader_type%d, %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", reader[ridx].typ, io->input_bitrate, io->bits, io->parity == PARITY_EVEN ? "Even" : io->parity == PARITY_ODD ? "Odd" : "None", io->stopbits, io->dtr, io->rts); 569 #endif 570 return TRUE; 571 } 572 573 bool IO_Serial_SetProperties (struct termios newtio) 574 { 575 if(reader[ridx].typ == R_INTERNAL) 576 return FALSE; 577 578 if (tcsetattr (reader[ridx].handle, TCSANOW, &newtio) < 0) 579 return FALSE; 580 // tcflush(reader[ridx].handle, TCIOFLUSH); 581 // if (tcsetattr (reader[ridx].handle, TCSAFLUSH, &newtio) < 0) 582 // return FALSE; 583 584 unsigned int mctl; 585 if (ioctl (reader[ridx].handle, TIOCMGET, &mctl) < 0) 586 return FALSE; 587 588 int dtr = ((mctl & TIOCM_DTR) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 589 int rts = ((mctl & TIOCM_RTS) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 288 if (!IO_Serial_SetProperties(newtio)) 289 return FALSE; 290 291 reader[ridx].baudrate = bitrate; 590 292 591 293 IO_Serial_Ioctl_Lock(1); … … 594 296 IO_Serial_Ioctl_Lock(0); 595 297 298 return TRUE; 299 } 300 301 bool IO_Serial_SetProperties (struct termios newtio) 302 { 303 if(reader[ridx].typ == R_INTERNAL) 304 return FALSE; 305 306 if (tcsetattr (reader[ridx].handle, TCSANOW, &newtio) < 0) 307 return FALSE; 308 // tcflush(reader[ridx].handle, TCIOFLUSH); 309 // if (tcsetattr (reader[ridx].handle, TCSAFLUSH, &newtio) < 0) 310 // return FALSE; 311 312 unsigned int mctl; 313 if (ioctl (reader[ridx].handle, TIOCMGET, &mctl) < 0) 314 return FALSE; 315 596 316 #ifdef DEBUG_IO 597 317 printf("IO: Setting properties\n"); … … 1048 768 { 1049 769 int i = 0; 1050 io->input_bitrate = 1200; 1051 io->output_bitrate = 1200; 1052 io->parity = PARITY_NONE; 1053 io->bits = 7; 1054 io->stopbits = 1; 1055 io->dtr = IO_SERIAL_HIGH; 1056 io->rts = IO_SERIAL_LOW; 1057 1058 if (!IO_Serial_SetPropertiesOld (io)) 770 if (!IO_Serial_SetParams (1200, 7, PARITY_NONE, 1, IO_SERIAL_HIGH, IO_SERIAL_LOW)) 1059 771 return FALSE; 1060 772
Note:
See TracChangeset
for help on using the changeset viewer.