@@ -415,6 +415,27 @@ STATIC mp_obj_t vfs_fat_umount(mp_obj_t self_in) {
415
415
}
416
416
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_umount_obj , vfs_fat_umount );
417
417
418
+ STATIC mp_obj_t vfs_fat_utime (mp_obj_t vfs_in , mp_obj_t path_in , mp_obj_t time_in ) {
419
+ mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
420
+ const char * path = mp_obj_str_get_str (path_in );
421
+ const int time = mp_obj_get_int (time_in );
422
+
423
+ timeutils_struct_time_t tm ;
424
+ timeutils_seconds_since_epoch_to_struct_time (time , & tm );
425
+
426
+ FILINFO fno ;
427
+ fno .fdate = (WORD )(((tm .tm_year - 1980 ) * 512U ) | tm .tm_mon * 32U | tm .tm_mday );
428
+ fno .ftime = (WORD )(tm .tm_hour * 2048U | tm .tm_min * 32U | tm .tm_sec / 2U );
429
+
430
+ FRESULT res = f_utime (& self -> fatfs , path , & fno );
431
+ if (res != FR_OK ) {
432
+ mp_raise_OSError_fresult (res );
433
+ }
434
+
435
+ return mp_const_none ;
436
+ }
437
+ STATIC MP_DEFINE_CONST_FUN_OBJ_3 (fat_vfs_utime_obj , vfs_fat_utime );
438
+
418
439
#if MICROPY_FATFS_USE_LABEL
419
440
STATIC mp_obj_t vfs_fat_getlabel (mp_obj_t self_in ) {
420
441
fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
@@ -466,6 +487,7 @@ STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table[] = {
466
487
{ MP_ROM_QSTR (MP_QSTR_statvfs ), MP_ROM_PTR (& fat_vfs_statvfs_obj ) },
467
488
{ MP_ROM_QSTR (MP_QSTR_mount ), MP_ROM_PTR (& vfs_fat_mount_obj ) },
468
489
{ MP_ROM_QSTR (MP_QSTR_umount ), MP_ROM_PTR (& fat_vfs_umount_obj ) },
490
+ { MP_ROM_QSTR (MP_QSTR_utime ), MP_ROM_PTR (& fat_vfs_utime_obj ) },
469
491
#if MICROPY_FATFS_USE_LABEL
470
492
{ MP_ROM_QSTR (MP_QSTR_label ), MP_ROM_PTR (& fat_vfs_label_obj ) },
471
493
#endif
0 commit comments