3333#endif
3434
3535#include <string.h>
36+ #include "py/objproperty.h"
3637#include "py/runtime.h"
3738#include "py/mperrno.h"
3839#include "lib/oofatfs/ff.h"
@@ -317,6 +318,39 @@ STATIC mp_obj_t vfs_fat_umount(mp_obj_t self_in) {
317318}
318319STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_umount_obj , vfs_fat_umount );
319320
321+ #if MICROPY_FATFS_USE_LABEL
322+ STATIC mp_obj_t vfs_fat_getlabel (mp_obj_t self_in ) {
323+ fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
324+ char working_buf [12 ];
325+ FRESULT res = f_getlabel (& self -> fatfs , working_buf , NULL );
326+ if (res != FR_OK ) {
327+ mp_raise_OSError (fresult_to_errno_table [res ]);
328+ }
329+ return mp_obj_new_str (working_buf , strlen (working_buf ), false);
330+ }
331+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_getlabel_obj , vfs_fat_getlabel );
332+
333+ static mp_obj_t vfs_fat_setlabel (mp_obj_t self_in , mp_obj_t label_in ) {
334+ fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
335+ const char * label_str = mp_obj_str_get_str (label_in );
336+ FRESULT res = f_setlabel (& self -> fatfs , label_str );
337+ if (res != FR_OK ) {
338+ if (res == FR_WRITE_PROTECTED ) {
339+ mp_raise_msg (& mp_type_OSError , "Read-only filesystem" );
340+ }
341+ mp_raise_OSError (fresult_to_errno_table [res ]);
342+ }
343+ return mp_const_none ;
344+ }
345+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (fat_vfs_setlabel_obj , vfs_fat_setlabel );
346+ STATIC const mp_obj_property_t fat_vfs_label_obj = {
347+ .base .type = & mp_type_property ,
348+ .proxy = {(mp_obj_t )& fat_vfs_getlabel_obj ,
349+ (mp_obj_t )& fat_vfs_setlabel_obj ,
350+ (mp_obj_t )& mp_const_none_obj },
351+ };
352+ #endif
353+
320354STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table [] = {
321355 { MP_ROM_QSTR (MP_QSTR_mkfs ), MP_ROM_PTR (& fat_vfs_mkfs_obj ) },
322356 { MP_ROM_QSTR (MP_QSTR_open ), MP_ROM_PTR (& fat_vfs_open_obj ) },
@@ -331,6 +365,9 @@ STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table[] = {
331365 { MP_ROM_QSTR (MP_QSTR_statvfs ), MP_ROM_PTR (& fat_vfs_statvfs_obj ) },
332366 { MP_ROM_QSTR (MP_QSTR_mount ), MP_ROM_PTR (& vfs_fat_mount_obj ) },
333367 { MP_ROM_QSTR (MP_QSTR_umount ), MP_ROM_PTR (& fat_vfs_umount_obj ) },
368+ #if MICROPY_FATFS_USE_LABEL
369+ { MP_ROM_QSTR (MP_QSTR_label ), MP_ROM_PTR (& fat_vfs_label_obj ) },
370+ #endif
334371};
335372STATIC MP_DEFINE_CONST_DICT (fat_vfs_locals_dict , fat_vfs_locals_dict_table );
336373
0 commit comments