Skip to content

Commit 5e9060d

Browse files
Merge pull request #497 from brianesquilona/dev_fixes
Size can zero in browser download, any size transferred can be a file optional finish
2 parents 0ca7d55 + e9d18f4 commit 5e9060d

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

source/daplink/drag-n-drop/vfs_manager.c

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ typedef enum {
7676

7777
typedef struct {
7878
vfs_file_t file_to_program; // A pointer to the directory entry of the file being programmed
79-
vfs_sector_t start_sector; // Start sector of the file being programmed
79+
vfs_sector_t start_sector; // Start sector of the file being programmed by stream
80+
vfs_sector_t file_start_sector; // Start sector of the file being programmed by vfs
8081
vfs_sector_t file_next_sector; // Expected next sector of the file
8182
vfs_sector_t last_ooo_sector; // Last out of order sector within the file
8283
uint32_t size_processed; // The number of bytes processed by the stream
@@ -103,6 +104,7 @@ static const file_transfer_state_t default_transfer_state = {
103104
VFS_INVALID_SECTOR,
104105
VFS_INVALID_SECTOR,
105106
VFS_INVALID_SECTOR,
107+
VFS_INVALID_SECTOR,
106108
0,
107109
0,
108110
0,
@@ -566,8 +568,8 @@ static void transfer_update_file_info(vfs_file_t file, uint32_t start_sector, ui
566568
}
567569

568570
// Initialize the starting sector if it has not been set
569-
if (VFS_INVALID_SECTOR == file_transfer_state.start_sector) {
570-
file_transfer_state.start_sector = start_sector;
571+
if (VFS_INVALID_SECTOR == file_transfer_state.file_start_sector) {
572+
file_transfer_state.file_start_sector = start_sector;
571573

572574
if (start_sector != VFS_INVALID_SECTOR) {
573575
vfs_mngr_printf(" start_sector=%i\r\n", start_sector);
@@ -591,8 +593,8 @@ static void transfer_update_file_info(vfs_file_t file, uint32_t start_sector, ui
591593
}
592594

593595
// Check - Starting sector must be the same - this is optional for file info since it may not be present initially
594-
if ((VFS_INVALID_SECTOR != start_sector) && (start_sector != file_transfer_state.start_sector)) {
595-
vfs_mngr_printf(" error: starting sector changed from %i to %i\r\n", file_transfer_state.start_sector, start_sector);
596+
if ((VFS_INVALID_SECTOR != start_sector) && (start_sector != file_transfer_state.file_start_sector)) {
597+
vfs_mngr_printf(" error: starting sector changed from %i to %i\r\n", file_transfer_state.file_start_sector, start_sector);
596598
transfer_update_state(ERROR_ERROR_DURING_TRANSFER);
597599
return;
598600
}
@@ -615,12 +617,17 @@ static void transfer_update_file_info(vfs_file_t file, uint32_t start_sector, ui
615617
static void transfer_reset_file_info()
616618
{
617619
vfs_mngr_printf("vfs_manager transfer_reset_file_info()\r\n");
618-
if (file_transfer_state.stream_open) {
619-
transfer_update_state(ERROR_ERROR_DURING_TRANSFER);
620-
} else {
621-
file_transfer_state = default_transfer_state;
622-
abort_remount();
623-
}
620+
//check if the data started streaming; size can be updated on matching start sector and stream type
621+
if(file_transfer_state.stream_started){
622+
//file, start sector and size has to be updated
623+
file_transfer_state.file_to_program = VFS_FILE_INVALID;
624+
file_transfer_state.file_start_sector = VFS_INVALID_SECTOR;
625+
file_transfer_state.file_size = 0;
626+
}else{
627+
file_transfer_state = default_transfer_state;
628+
abort_remount();
629+
}
630+
624631
}
625632

626633
// Update the tranfer state with new information
@@ -737,10 +744,12 @@ static void transfer_update_state(error_t status)
737744
// 1. A file has been detected
738745
// 2. The size of the file indicated in the root dir has been transferred
739746
// 3. The file size is greater than zero
747+
// 4. Matching start sector set by stream and vfs changes
740748
file_transfer_state.file_info_optional_finish =
741749
(file_transfer_state.file_to_program != VFS_FILE_INVALID) &&
742750
(file_transfer_state.size_transferred >= file_transfer_state.file_size) &&
743-
(file_transfer_state.file_size > 0);
751+
(file_transfer_state.file_size > 0) &&
752+
(file_transfer_state.start_sector == file_transfer_state.file_start_sector);
744753
transfer_timeout = file_transfer_state.transfer_timeout;
745754
transfer_started = (VFS_FILE_INVALID != file_transfer_state.file_to_program) ||
746755
(STREAM_TYPE_NONE != file_transfer_state.stream);
@@ -791,9 +800,9 @@ static void transfer_update_state(error_t status)
791800

792801
if (TRASNFER_FINISHED == file_transfer_state.transfer_state) {
793802
vfs_mngr_printf("vfs_manager transfer_update_state(status=%i)\r\n", status);
794-
vfs_mngr_printf(" file=%p, start_sect= %i, size=%i\r\n",
803+
vfs_mngr_printf(" file=%p, start_sect= %i %i, size=%i\r\n",
795804
file_transfer_state.file_to_program, file_transfer_state.start_sector,
796-
file_transfer_state.file_size);
805+
file_transfer_state.file_start_sector, file_transfer_state.file_size);
797806
vfs_mngr_printf(" stream=%i, size_processed=%i, opt_finish=%i, timeout=%i\r\n",
798807
file_transfer_state.stream, file_transfer_state.size_processed,
799808
file_transfer_state.file_info_optional_finish, transfer_timeout);

0 commit comments

Comments
 (0)