Commit fa2079859d82965c5be417cc3985df141d720e0a
1 parent
dd45f19a
Remove constraints on baud rate values
Showing
1 changed file
with
3 additions
and
177 deletions
src/modbus-rtu.c
| ... | ... | @@ -392,7 +392,6 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 392 | 392 | DCB dcb; |
| 393 | 393 | #else |
| 394 | 394 | struct termios tios; |
| 395 | - speed_t speed; | |
| 396 | 395 | int flags; |
| 397 | 396 | #endif |
| 398 | 397 | modbus_rtu_t *ctx_rtu = ctx->backend_data; |
| ... | ... | @@ -445,74 +444,7 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 445 | 444 | dcb = ctx_rtu->old_dcb; |
| 446 | 445 | |
| 447 | 446 | /* Speed setting */ |
| 448 | - switch (ctx_rtu->baud) { | |
| 449 | - case 110: | |
| 450 | - dcb.BaudRate = CBR_110; | |
| 451 | - break; | |
| 452 | - case 300: | |
| 453 | - dcb.BaudRate = CBR_300; | |
| 454 | - break; | |
| 455 | - case 600: | |
| 456 | - dcb.BaudRate = CBR_600; | |
| 457 | - break; | |
| 458 | - case 1200: | |
| 459 | - dcb.BaudRate = CBR_1200; | |
| 460 | - break; | |
| 461 | - case 2400: | |
| 462 | - dcb.BaudRate = CBR_2400; | |
| 463 | - break; | |
| 464 | - case 4800: | |
| 465 | - dcb.BaudRate = CBR_4800; | |
| 466 | - break; | |
| 467 | - case 9600: | |
| 468 | - dcb.BaudRate = CBR_9600; | |
| 469 | - break; | |
| 470 | - case 14400: | |
| 471 | - dcb.BaudRate = CBR_14400; | |
| 472 | - break; | |
| 473 | - case 19200: | |
| 474 | - dcb.BaudRate = CBR_19200; | |
| 475 | - break; | |
| 476 | - case 38400: | |
| 477 | - dcb.BaudRate = CBR_38400; | |
| 478 | - break; | |
| 479 | - case 57600: | |
| 480 | - dcb.BaudRate = CBR_57600; | |
| 481 | - break; | |
| 482 | - case 115200: | |
| 483 | - dcb.BaudRate = CBR_115200; | |
| 484 | - break; | |
| 485 | - case 230400: | |
| 486 | - /* CBR_230400 - not defined */ | |
| 487 | - dcb.BaudRate = 230400; | |
| 488 | - break; | |
| 489 | - case 250000: | |
| 490 | - dcb.BaudRate = 250000; | |
| 491 | - break; | |
| 492 | - case 256000: | |
| 493 | - dcb.BaudRate = 256000; | |
| 494 | - break; | |
| 495 | - case 460800: | |
| 496 | - dcb.BaudRate = 460800; | |
| 497 | - break; | |
| 498 | - case 500000: | |
| 499 | - dcb.BaudRate = 500000; | |
| 500 | - break; | |
| 501 | - case 921600: | |
| 502 | - dcb.BaudRate = 921600; | |
| 503 | - break; | |
| 504 | - case 1000000: | |
| 505 | - dcb.BaudRate = 1000000; | |
| 506 | - break; | |
| 507 | - default: | |
| 508 | - dcb.BaudRate = CBR_9600; | |
| 509 | - if (ctx->debug) { | |
| 510 | - fprintf(stderr, | |
| 511 | - "WARNING Unknown baud rate %d for %s (B9600 used)\n", | |
| 512 | - ctx_rtu->baud, | |
| 513 | - ctx_rtu->device); | |
| 514 | - } | |
| 515 | - } | |
| 447 | + dcb.BaudRate = ctx_rtu->baud; | |
| 516 | 448 | |
| 517 | 449 | /* Data bits */ |
| 518 | 450 | switch (ctx_rtu->data_bit) { |
| ... | ... | @@ -606,116 +538,10 @@ static int _modbus_rtu_connect(modbus_t *ctx) |
| 606 | 538 | /* C_ISPEED Input baud (new interface) |
| 607 | 539 | C_OSPEED Output baud (new interface) |
| 608 | 540 | */ |
| 609 | - switch (ctx_rtu->baud) { | |
| 610 | - case 110: | |
| 611 | - speed = B110; | |
| 612 | - break; | |
| 613 | - case 300: | |
| 614 | - speed = B300; | |
| 615 | - break; | |
| 616 | - case 600: | |
| 617 | - speed = B600; | |
| 618 | - break; | |
| 619 | - case 1200: | |
| 620 | - speed = B1200; | |
| 621 | - break; | |
| 622 | - case 2400: | |
| 623 | - speed = B2400; | |
| 624 | - break; | |
| 625 | - case 4800: | |
| 626 | - speed = B4800; | |
| 627 | - break; | |
| 628 | - case 9600: | |
| 629 | - speed = B9600; | |
| 630 | - break; | |
| 631 | - case 19200: | |
| 632 | - speed = B19200; | |
| 633 | - break; | |
| 634 | - case 38400: | |
| 635 | - speed = B38400; | |
| 636 | - break; | |
| 637 | -#ifdef B57600 | |
| 638 | - case 57600: | |
| 639 | - speed = B57600; | |
| 640 | - break; | |
| 641 | -#endif | |
| 642 | -#ifdef B115200 | |
| 643 | - case 115200: | |
| 644 | - speed = B115200; | |
| 645 | - break; | |
| 646 | -#endif | |
| 647 | -#ifdef B230400 | |
| 648 | - case 230400: | |
| 649 | - speed = B230400; | |
| 650 | - break; | |
| 651 | -#endif | |
| 652 | -#ifdef B460800 | |
| 653 | - case 460800: | |
| 654 | - speed = B460800; | |
| 655 | - break; | |
| 656 | -#endif | |
| 657 | -#ifdef B500000 | |
| 658 | - case 500000: | |
| 659 | - speed = B500000; | |
| 660 | - break; | |
| 661 | -#endif | |
| 662 | -#ifdef B576000 | |
| 663 | - case 576000: | |
| 664 | - speed = B576000; | |
| 665 | - break; | |
| 666 | -#endif | |
| 667 | -#ifdef B921600 | |
| 668 | - case 921600: | |
| 669 | - speed = B921600; | |
| 670 | - break; | |
| 671 | -#endif | |
| 672 | -#ifdef B1000000 | |
| 673 | - case 1000000: | |
| 674 | - speed = B1000000; | |
| 675 | - break; | |
| 676 | -#endif | |
| 677 | -#ifdef B1152000 | |
| 678 | - case 1152000: | |
| 679 | - speed = B1152000; | |
| 680 | - break; | |
| 681 | -#endif | |
| 682 | -#ifdef B1500000 | |
| 683 | - case 1500000: | |
| 684 | - speed = B1500000; | |
| 685 | - break; | |
| 686 | -#endif | |
| 687 | -#ifdef B2500000 | |
| 688 | - case 2500000: | |
| 689 | - speed = B2500000; | |
| 690 | - break; | |
| 691 | -#endif | |
| 692 | -#ifdef B3000000 | |
| 693 | - case 3000000: | |
| 694 | - speed = B3000000; | |
| 695 | - break; | |
| 696 | -#endif | |
| 697 | -#ifdef B3500000 | |
| 698 | - case 3500000: | |
| 699 | - speed = B3500000; | |
| 700 | - break; | |
| 701 | -#endif | |
| 702 | -#ifdef B4000000 | |
| 703 | - case 4000000: | |
| 704 | - speed = B4000000; | |
| 705 | - break; | |
| 706 | -#endif | |
| 707 | - default: | |
| 708 | - speed = B9600; | |
| 709 | - if (ctx->debug) { | |
| 710 | - fprintf(stderr, | |
| 711 | - "WARNING Unknown baud rate %d for %s (B9600 used)\n", | |
| 712 | - ctx_rtu->baud, | |
| 713 | - ctx_rtu->device); | |
| 714 | - } | |
| 715 | - } | |
| 716 | 541 | |
| 717 | 542 | /* Set the baud rate */ |
| 718 | - if ((cfsetispeed(&tios, speed) < 0) || (cfsetospeed(&tios, speed) < 0)) { | |
| 543 | + if ((cfsetispeed(&tios, ctx_rtu->baud) < 0) || | |
| 544 | + (cfsetospeed(&tios, ctx_rtu->baud) < 0)) { | |
| 719 | 545 | close(ctx->s); |
| 720 | 546 | ctx->s = -1; |
| 721 | 547 | return -1; | ... | ... |