Changeset 8020
- Timestamp:
- 12/31/12 00:41:44 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/io_serial.c
r8011 r8020 611 611 bool IO_Serial_WaitToRead (struct s_reader * reader, uint32_t delay_us, uint32_t timeout_us) 612 612 { 613 struct pollfd ufds; 614 int32_t ret_val; 615 int32_t in_fd; 616 if (delay_us > 0) cs_sleepus (delay_us); // wait in us 617 in_fd=reader->handle; 618 ufds.fd = in_fd; 619 ufds.events = POLLIN; 620 ufds.revents = 0x0000; 621 ret_val = poll(&ufds, 1, timeout_us/1000); 622 if (ret_val != 1) 623 return ERROR; 624 if (((ufds.revents) & POLLIN) == POLLIN) 625 return OK; 626 else 627 return ERROR; 613 struct pollfd ufds; 614 int32_t ret_val; 615 int32_t in_fd; 616 617 if (delay_us > 0) 618 cs_sleepus (delay_us); // wait in us 619 in_fd = reader->handle; 620 621 ufds.fd = in_fd; 622 ufds.events = POLLIN; 623 ufds.revents = 0x0000; 624 625 while (1){ 626 ret_val = poll(&ufds, 1, timeout_us / 1000); 627 switch (ret_val){ 628 case -1: 629 if (errno == EINTR || errno == EAGAIN) continue; 630 rdr_log(reader, "ERROR: %s: timeout=%d us (errno=%d %s)", 631 __func__, timeout_us, errno, strerror(errno)); 632 return ERROR; 633 default: 634 if (((ufds.revents) & POLLIN) == POLLIN) 635 return OK; 636 else 637 return ERROR; 638 } 639 } 628 640 } 629 641 630 642 static bool IO_Serial_WaitToWrite (struct s_reader * reader, uint32_t delay_us, uint32_t timeout_us) 631 643 { 632 633 634 644 struct pollfd ufds; 645 int32_t ret_val; 646 int32_t out_fd; 635 647 636 648 #if !defined(WITH_COOLAPI) && !defined(WITH_AZBOX) 637 if(reader->typ == R_INTERNAL) return OK; // needed for internal readers, otherwise error! 638 #endif 639 if (delay_us > 0) 640 cs_sleepus (delay_us); // wait in us 641 out_fd=reader->handle; 642 ufds.fd = out_fd; 643 ufds.events = POLLOUT; 644 ufds.revents = 0x0000; 645 ret_val = poll(&ufds, 1, timeout_us/1000); 646 if (ret_val != 1) 647 return ERROR; 648 if (((ufds.revents) & POLLOUT) == POLLOUT) 649 return OK; 650 else 651 return ERROR; 649 if(reader->typ == R_INTERNAL) return OK; // needed for internal readers, otherwise error! 650 #endif 651 if (delay_us > 0) 652 cs_sleepus (delay_us); // wait in us 653 out_fd = reader->handle; 654 655 ufds.fd = out_fd; 656 ufds.events = POLLOUT; 657 ufds.revents = 0x0000; 658 659 while (1){ 660 ret_val = poll(&ufds, 1, timeout_us / 1000); 661 switch (ret_val){ 662 case 0: 663 return ERROR; 664 case -1: 665 if (errno == EINTR || errno == EAGAIN) continue; 666 rdr_log(reader, "ERROR: %s: timeout=%d us (errno=%d %s)", 667 __func__, timeout_us, errno, strerror(errno)); 668 return ERROR; 669 default: 670 if (((ufds.revents) & POLLOUT) == POLLOUT) 671 return OK; 672 else 673 return ERROR; 674 } 675 } 652 676 } 653 677
Note:
See TracChangeset
for help on using the changeset viewer.