| 210 | } |
| 211 | |
| 212 | extern "C" DRESULT disk_write(BYTE pdrv, const BYTE *buff, LBA_t sector, UINT count) |
| 213 | { |
| 214 | debug_if(FFS_DBG, "disk_write(sector %lu, count %u) on pdrv [%d]\n", sector, count, pdrv); |
| 215 | DWORD ssize = disk_get_sector_size(pdrv); |
| 216 | mbed::bd_addr_t addr = (mbed::bd_addr_t)sector * ssize; |
| 217 | mbed::bd_size_t size = (mbed::bd_size_t)count * ssize; |
| 218 | |
| 219 | int err = _ffs[pdrv]->erase(addr, size); |
| 220 | if (err) { |
| 221 | return RES_PARERR; |
| 222 | } |
| 223 | |
| 224 | err = _ffs[pdrv]->program(buff, addr, size); |
| 225 | if (err) { |
| 226 | return RES_PARERR; |
| 227 | } |
| 228 | |
| 229 | return RES_OK; |
| 230 | } |
| 231 | |
| 232 | extern "C" DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) |
| 233 | { |