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().
pull/1845/head
Paul Sokolovsky 2016-02-14 20:34:30 +02:00
rodzic 0ee1d0f407
commit 9e0478a902
1 zmienionych plików z 7 dodań i 2 usunięć

Wyświetl plik

@ -63,7 +63,7 @@ DSTATUS disk_initialize (
vfs->u.ioctl[2] = MP_OBJ_NEW_SMALL_INT(BP_IOCTL_INIT);
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);
if (MP_OBJ_SMALL_INT_VALUE(ret) != 0) {
if (ret != mp_const_none && MP_OBJ_SMALL_INT_VALUE(ret) != 0) {
// error initialising
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[3] = MP_OBJ_NEW_SMALL_INT(0); // unused
mp_obj_t ret = mp_call_method_n_kw(2, 0, vfs->u.ioctl);
*((WORD*)buff) = mp_obj_get_int(ret);
if (ret == mp_const_none) {
// Default sector size
*((WORD*)buff) = 512;
} else {
*((WORD*)buff) = mp_obj_get_int(ret);
}
return RES_OK;
}