@@ -64,7 +64,7 @@ class EthernetDriver {
6464#define ETHER_FRAME_TRANSFER_COMPLETED (1UL << 21 )
6565#define ETHER_MAGIC_PACKET_DETECTED_MASK (1UL << 1 )
6666
67- static volatile bool frame_transmitted_flag = false ;
67+ static volatile bool frame_being_transmitted = false ;
6868static EthernetDriver eth_driver;
6969
7070static uint8_t eth_tx_buffer[ETH_BUFF_DIM];
@@ -230,7 +230,7 @@ void EthernetDriver::irq_callback(ether_callback_args_t * p_args) {
230230 if (ETHER_FRAME_TRANSFER_COMPLETED == (reg_eesr & ETHER_FRAME_TRANSFER_COMPLETED)) {
231231
232232
233- frame_transmitted_flag = true ;
233+ frame_being_transmitted = false ;
234234 /* FRAME TRANSMISSION COMPLETED */
235235 if (frame_transmitted != nullptr ) {
236236 frame_transmitted ();
@@ -341,18 +341,23 @@ void eth_release_rx_buffer() {
341341
342342
343343bool eth_output (uint8_t *buf, uint16_t dim) {
344- frame_transmitted_flag = false ;
345- fsp_err_t err = R_ETHER_Write ( eth_driver.get_ctrl (), buf, dim);
346- if (err == FSP_SUCCESS) {
347-
348- while (!frame_transmitted_flag) {
344+ bool retval = true ;
349345
350- }
351- return true ;
346+ fsp_err_t err = R_ETHER_Write (eth_driver.get_ctrl (), buf, dim);
347+ if (err == FSP_SUCCESS) {
348+ frame_being_transmitted = true ;
349+ retval = true ;
352350 }
353351 else {
354- return false ;
352+ retval = false ;
355353 }
354+
355+ return retval;
356+ }
357+
358+ // this function return true if the tx buffer is not being used for the transmission of another frame
359+ bool eth_output_can_transimit () {
360+ return !frame_being_transmitted;
356361}
357362
358363uint8_t *eth_input (volatile uint32_t *dim) {
0 commit comments