|
|
|
@ -11,9 +11,9 @@ |
|
|
|
#include "eblapp.h" |
|
|
|
#include "eblapp.h" |
|
|
|
#include "ring_buffer.h" |
|
|
|
#include "ring_buffer.h" |
|
|
|
|
|
|
|
|
|
|
|
#define BUFFER_SIZE 65536 |
|
|
|
#define BUFFER_SIZE 20000 |
|
|
|
#define PORT 1069 |
|
|
|
#define PORT 1069 |
|
|
|
#define MAX_PACKET_SIZE 1024 |
|
|
|
#define MAX_PACKET_SIZE 1400 |
|
|
|
#define TIMEOUT 5 |
|
|
|
#define TIMEOUT 5 |
|
|
|
|
|
|
|
|
|
|
|
void error(const char* msg) |
|
|
|
void error(const char* msg) |
|
|
|
@ -90,12 +90,10 @@ int main() |
|
|
|
size_t space_left = 0; |
|
|
|
size_t space_left = 0; |
|
|
|
size_t bytes_left = 0; |
|
|
|
size_t bytes_left = 0; |
|
|
|
ring_buffer__get_free_bytes(ring_buffer, &space_left); |
|
|
|
ring_buffer__get_free_bytes(ring_buffer, &space_left); |
|
|
|
printf("space_left: %zu\n", space_left); |
|
|
|
|
|
|
|
while(space_left) |
|
|
|
while(space_left) |
|
|
|
{ |
|
|
|
{ |
|
|
|
size_t toread = space_left > MAX_PACKET_SIZE ? MAX_PACKET_SIZE : space_left; |
|
|
|
size_t toread = space_left > MAX_PACKET_SIZE ? MAX_PACKET_SIZE : space_left; |
|
|
|
int bytes_read = read(fd, buffer, toread); |
|
|
|
int bytes_read = read(fd, buffer, toread); |
|
|
|
printf("bytes_read: %d\n", bytes_read); |
|
|
|
|
|
|
|
if(bytes_read <= 0) |
|
|
|
if(bytes_read <= 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
break; |
|
|
|
break; |
|
|
|
@ -107,11 +105,9 @@ int main() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ring_buffer__get_free_bytes(ring_buffer, &space_left); |
|
|
|
ring_buffer__get_free_bytes(ring_buffer, &space_left); |
|
|
|
printf("space_left: %zu\n", space_left); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ring_buffer__get_unread_bytes(ring_buffer, &bytes_left); |
|
|
|
ring_buffer__get_unread_bytes(ring_buffer, &bytes_left); |
|
|
|
printf("bytes_left: %zu\n", bytes_left); |
|
|
|
|
|
|
|
while(bytes_left) |
|
|
|
while(bytes_left) |
|
|
|
{ |
|
|
|
{ |
|
|
|
struct Eblapp_transfer_data* data = (struct Eblapp_transfer_data*)buffer; |
|
|
|
struct Eblapp_transfer_data* data = (struct Eblapp_transfer_data*)buffer; |
|
|
|
@ -120,6 +116,13 @@ int main() |
|
|
|
{ |
|
|
|
{ |
|
|
|
toread = MAX_PACKET_SIZE - 8; |
|
|
|
toread = MAX_PACKET_SIZE - 8; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (st.st_size - current_offset > 256) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// Keep destination nice and aligned
|
|
|
|
|
|
|
|
toread &= ~(0x0f); |
|
|
|
|
|
|
|
if (toread == 0) |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
if(ring_buffer__read(ring_buffer, buffer + 8, &toread) < 0) |
|
|
|
if(ring_buffer__read(ring_buffer, buffer + 8, &toread) < 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
perror("ring_buffer__read() failed"); |
|
|
|
perror("ring_buffer__read() failed"); |
|
|
|
@ -135,7 +138,6 @@ int main() |
|
|
|
|
|
|
|
|
|
|
|
current_offset += (n - 8); |
|
|
|
current_offset += (n - 8); |
|
|
|
ring_buffer__get_unread_bytes(ring_buffer, &bytes_left); |
|
|
|
ring_buffer__get_unread_bytes(ring_buffer, &bytes_left); |
|
|
|
printf("bytes_left: %zu (sent: %d)\n", bytes_left, current_offset); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Wait for ACKs
|
|
|
|
// Wait for ACKs
|
|
|
|
@ -158,7 +160,6 @@ int main() |
|
|
|
if(ack_packet->opcode == EBLAPP_ACK) |
|
|
|
if(ack_packet->opcode == EBLAPP_ACK) |
|
|
|
{ |
|
|
|
{ |
|
|
|
uint32_t acked_byte = ack_packet->ack_byte; |
|
|
|
uint32_t acked_byte = ack_packet->ack_byte; |
|
|
|
printf("ack %d/%zu\n", acked_byte, st.st_size); |
|
|
|
|
|
|
|
if(acked_byte >= st.st_size) |
|
|
|
if(acked_byte >= st.st_size) |
|
|
|
{ |
|
|
|
{ |
|
|
|
printf("Transfer done\n"); |
|
|
|
printf("Transfer done\n"); |
|
|
|
|