@@ -64,7 +64,7 @@ class EthernetDriver {
64
64
#define ETHER_FRAME_TRANSFER_COMPLETED (1UL << 21 )
65
65
#define ETHER_MAGIC_PACKET_DETECTED_MASK (1UL << 1 )
66
66
67
- static volatile bool frame_transmitted_flag = false ;
67
+ static volatile bool frame_being_transmitted = false ;
68
68
static EthernetDriver eth_driver;
69
69
70
70
static uint8_t eth_tx_buffer[ETH_BUFF_DIM];
@@ -230,7 +230,7 @@ void EthernetDriver::irq_callback(ether_callback_args_t * p_args) {
230
230
if (ETHER_FRAME_TRANSFER_COMPLETED == (reg_eesr & ETHER_FRAME_TRANSFER_COMPLETED)) {
231
231
232
232
233
- frame_transmitted_flag = true ;
233
+ frame_being_transmitted = false ;
234
234
/* FRAME TRANSMISSION COMPLETED */
235
235
if (frame_transmitted != nullptr ) {
236
236
frame_transmitted ();
@@ -341,18 +341,23 @@ void eth_release_rx_buffer() {
341
341
342
342
343
343
bool 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 ;
349
345
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 ;
352
350
}
353
351
else {
354
- return false ;
352
+ retval = false ;
355
353
}
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;
356
361
}
357
362
358
363
uint8_t *eth_input (volatile uint32_t *dim) {
0 commit comments