@@ -76,7 +76,8 @@ typedef enum {
76
76
77
77
typedef struct {
78
78
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
80
81
vfs_sector_t file_next_sector ; // Expected next sector of the file
81
82
vfs_sector_t last_ooo_sector ; // Last out of order sector within the file
82
83
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 = {
103
104
VFS_INVALID_SECTOR ,
104
105
VFS_INVALID_SECTOR ,
105
106
VFS_INVALID_SECTOR ,
107
+ VFS_INVALID_SECTOR ,
106
108
0 ,
107
109
0 ,
108
110
0 ,
@@ -566,8 +568,8 @@ static void transfer_update_file_info(vfs_file_t file, uint32_t start_sector, ui
566
568
}
567
569
568
570
// 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 ;
571
573
572
574
if (start_sector != VFS_INVALID_SECTOR ) {
573
575
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
591
593
}
592
594
593
595
// 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 );
596
598
transfer_update_state (ERROR_ERROR_DURING_TRANSFER );
597
599
return ;
598
600
}
@@ -615,12 +617,17 @@ static void transfer_update_file_info(vfs_file_t file, uint32_t start_sector, ui
615
617
static void transfer_reset_file_info ()
616
618
{
617
619
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
+
624
631
}
625
632
626
633
// Update the tranfer state with new information
@@ -737,10 +744,12 @@ static void transfer_update_state(error_t status)
737
744
// 1. A file has been detected
738
745
// 2. The size of the file indicated in the root dir has been transferred
739
746
// 3. The file size is greater than zero
747
+ // 4. Matching start sector set by stream and vfs changes
740
748
file_transfer_state .file_info_optional_finish =
741
749
(file_transfer_state .file_to_program != VFS_FILE_INVALID ) &&
742
750
(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 );
744
753
transfer_timeout = file_transfer_state .transfer_timeout ;
745
754
transfer_started = (VFS_FILE_INVALID != file_transfer_state .file_to_program ) ||
746
755
(STREAM_TYPE_NONE != file_transfer_state .stream );
@@ -791,9 +800,9 @@ static void transfer_update_state(error_t status)
791
800
792
801
if (TRASNFER_FINISHED == file_transfer_state .transfer_state ) {
793
802
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" ,
795
804
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 );
797
806
vfs_mngr_printf (" stream=%i, size_processed=%i, opt_finish=%i, timeout=%i\r\n" ,
798
807
file_transfer_state .stream , file_transfer_state .size_processed ,
799
808
file_transfer_state .file_info_optional_finish , transfer_timeout );
0 commit comments