Commit 13a8bfcad02121087b9d7f830f360c936aa6d32e

Authored by Antonio Carlos Domínguez Brito
1 parent 2618ea45

available_for_write() now in a camelCase version availableForWrite(), and write(…

…) now waits idle until there is space enough in the transmission buffer
Showing 2 changed files with 29 additions and 1 deletions   Show diff stats
@@ -72,6 +72,8 @@ namespace arduino_due @@ -72,6 +72,8 @@ namespace arduino_due
72 72
73 int items() { return _items_; } 73 int items() { return _items_; }
74 74
  75 + int available() { return LENGTH-_items_; }
  76 +
75 void reset() { _init_(); } 77 void reset() { _init_(); }
76 78
77 private: 79 private:
@@ -413,6 +413,17 @@ namespace arduino_due @@ -413,6 +413,17 @@ namespace arduino_due
413 ); 413 );
414 } 414 }
415 415
  416 + // is TX buffer full?
  417 + bool available_for_write()
  418 + {
  419 + return (
  420 + (
  421 + (_mode_==mode_codes::FULL_DUPLEX) ||
  422 + (_mode_==mode_codes::TX_MODE)
  423 + )? _ctx_.available_for_write(): 0
  424 + );
  425 + }
  426 +
416 // NOTE: data is 5, 6, 7, 8 or 9 bits length 427 // NOTE: data is 5, 6, 7, 8 or 9 bits length
417 bool set_tx_data(uint32_t data) 428 bool set_tx_data(uint32_t data)
418 { 429 {
@@ -512,6 +523,14 @@ namespace arduino_due @@ -512,6 +523,14 @@ namespace arduino_due
512 return full; 523 return full;
513 } 524 }
514 525
  526 + int available_for_write()
  527 + {
  528 + disable_tc_interrupts();
  529 + auto items=tx_buffer.available();
  530 + enable_tc_interrupts();
  531 + return items;
  532 + }
  533 +
515 // NOTE: only the 5, 6, 7, 8 or 9 lowest significant bits 534 // NOTE: only the 5, 6, 7, 8 or 9 lowest significant bits
516 // of data are send 535 // of data are send
517 bool set_tx_data(uint32_t data); 536 bool set_tx_data(uint32_t data);
@@ -746,8 +765,11 @@ namespace arduino_due @@ -746,8 +765,11 @@ namespace arduino_due
746 765
747 int available(void) { return _tc_uart_.available(); } 766 int available(void) { return _tc_uart_.available(); }
748 767
  768 + int availableForWrite(void)
  769 + { return available_for_write(); }
  770 +
749 int available_for_write(void) 771 int available_for_write(void)
750 - { return _tc_uart_.is_tx_full(); } 772 + { return _tc_uart_.available_for_write(); }
751 773
752 int peek(void) 774 int peek(void)
753 { 775 {
@@ -795,6 +817,8 @@ namespace arduino_due @@ -795,6 +817,8 @@ namespace arduino_due
795 817
796 size_t write(uint8_t data) 818 size_t write(uint8_t data)
797 { 819 {
  820 + while(!available_for_write()) { /* nothing */ }
  821 +
798 return ( 822 return (
799 (_tc_uart_.set_tx_data(static_cast<uint32_t>(data)))? 823 (_tc_uart_.set_tx_data(static_cast<uint32_t>(data)))?
800 1: 0 824 1: 0
@@ -803,6 +827,8 @@ namespace arduino_due @@ -803,6 +827,8 @@ namespace arduino_due
803 827
804 size_t write(uint32_t data) 828 size_t write(uint32_t data)
805 { 829 {
  830 + while(!available_for_write()) { /* nothing */ }
  831 +
806 return ( 832 return (
807 (_tc_uart_.set_tx_data(data))? 833 (_tc_uart_.set_tx_data(data))?
808 1: 0 834 1: 0