@@ -400,6 +400,35 @@ STATIC mp_obj_t vfs_fat_umount(mp_obj_t self_in) {
400
400
}
401
401
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_umount_obj , vfs_fat_umount );
402
402
403
+ STATIC mp_obj_t vfs_fat_utime (mp_obj_t vfs_in , mp_obj_t path_in , mp_obj_t times_in ) {
404
+ mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
405
+ const char * path = mp_obj_str_get_str (path_in );
406
+ if (!mp_obj_is_tuple_compatible (times_in )) {
407
+ mp_raise_type_arg (& mp_type_TypeError , times_in );
408
+ }
409
+
410
+ mp_obj_t * otimes ;
411
+ mp_obj_get_array_fixed_n (times_in , 2 , & otimes );
412
+
413
+ // Validate that both elements of the tuple are int and discard the second one
414
+ int time [2 ];
415
+ time [0 ] = mp_obj_get_int (otimes [0 ]);
416
+ time [1 ] = mp_obj_get_int (otimes [1 ]);
417
+ timeutils_struct_time_t tm ;
418
+ timeutils_seconds_since_epoch_to_struct_time (time [0 ], & tm );
419
+
420
+ FILINFO fno ;
421
+ fno .fdate = (WORD )(((tm .tm_year - 1980 ) * 512U ) | tm .tm_mon * 32U | tm .tm_mday );
422
+ fno .ftime = (WORD )(tm .tm_hour * 2048U | tm .tm_min * 32U | tm .tm_sec / 2U );
423
+ FRESULT res = f_utime (& self -> fatfs , path , & fno );
424
+ if (res != FR_OK ) {
425
+ mp_raise_OSError_fresult (res );
426
+ }
427
+
428
+ return mp_const_none ;
429
+ }
430
+ STATIC MP_DEFINE_CONST_FUN_OBJ_3 (fat_vfs_utime_obj , vfs_fat_utime );
431
+
403
432
#if MICROPY_FATFS_USE_LABEL
404
433
STATIC mp_obj_t vfs_fat_getlabel (mp_obj_t self_in ) {
405
434
fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
@@ -451,6 +480,7 @@ STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table[] = {
451
480
{ MP_ROM_QSTR (MP_QSTR_statvfs ), MP_ROM_PTR (& fat_vfs_statvfs_obj ) },
452
481
{ MP_ROM_QSTR (MP_QSTR_mount ), MP_ROM_PTR (& vfs_fat_mount_obj ) },
453
482
{ MP_ROM_QSTR (MP_QSTR_umount ), MP_ROM_PTR (& fat_vfs_umount_obj ) },
483
+ { MP_ROM_QSTR (MP_QSTR_utime ), MP_ROM_PTR (& fat_vfs_utime_obj ) },
454
484
#if MICROPY_FATFS_USE_LABEL
455
485
{ MP_ROM_QSTR (MP_QSTR_label ), MP_ROM_PTR (& fat_vfs_label_obj ) },
456
486
#endif
0 commit comments