stmhal/diskio: Add provision for default returns for ioctl INIT/SEC_SIZE.
If None was returned for such requests (which likely means that user simply didn't handle them), it means successful init and default sector size of 512 bytes respectively. This makes only BP_IOCTL_SEC_COUNT a mandatory request, and thus re-establishes parity with old interface, where only .count() is mandatory().
This commit is contained in:
parent
0ee1d0f407
commit
9e0478a902
@ -63,7 +63,7 @@ DSTATUS disk_initialize (
|
|||||||
vfs->u.ioctl[2] = MP_OBJ_NEW_SMALL_INT(BP_IOCTL_INIT);
|
vfs->u.ioctl[2] = MP_OBJ_NEW_SMALL_INT(BP_IOCTL_INIT);
|
||||||
vfs->u.ioctl[3] = MP_OBJ_NEW_SMALL_INT(0); // unused
|
vfs->u.ioctl[3] = MP_OBJ_NEW_SMALL_INT(0); // unused
|
||||||
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->u.ioctl);
|
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->u.ioctl);
|
||||||
if (MP_OBJ_SMALL_INT_VALUE(ret) != 0) {
|
if (ret != mp_const_none && MP_OBJ_SMALL_INT_VALUE(ret) != 0) {
|
||||||
// error initialising
|
// error initialising
|
||||||
return STA_NOINIT;
|
return STA_NOINIT;
|
||||||
}
|
}
|
||||||
@ -203,7 +203,12 @@ DRESULT disk_ioctl (
|
|||||||
vfs->u.ioctl[2] = MP_OBJ_NEW_SMALL_INT(BP_IOCTL_SEC_SIZE);
|
vfs->u.ioctl[2] = MP_OBJ_NEW_SMALL_INT(BP_IOCTL_SEC_SIZE);
|
||||||
vfs->u.ioctl[3] = MP_OBJ_NEW_SMALL_INT(0); // unused
|
vfs->u.ioctl[3] = MP_OBJ_NEW_SMALL_INT(0); // unused
|
||||||
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->u.ioctl);
|
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->u.ioctl);
|
||||||
|
if (ret == mp_const_none) {
|
||||||
|
// Default sector size
|
||||||
|
*((WORD*)buff) = 512;
|
||||||
|
} else {
|
||||||
*((WORD*)buff) = mp_obj_get_int(ret);
|
*((WORD*)buff) = mp_obj_get_int(ret);
|
||||||
|
}
|
||||||
return RES_OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user