usbh_fatfs.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright (c) 2024, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #include "ff.h"
  7. #include "diskio.h"
  8. #include "usbh_core.h"
  9. #include "usbh_msc.h"
  10. struct usbh_msc *active_msc_class;
  11. int USB_disk_status(void)
  12. {
  13. return 0;
  14. }
  15. int USB_disk_initialize(void)
  16. {
  17. active_msc_class = (struct usbh_msc *)usbh_find_class_instance("/dev/sda");
  18. if (active_msc_class == NULL) {
  19. printf("do not find /dev/sda\r\n");
  20. return RES_NOTRDY;
  21. }
  22. return RES_OK;
  23. }
  24. int USB_disk_read(BYTE *buff, LBA_t sector, UINT count)
  25. {
  26. return usbh_msc_scsi_read10(active_msc_class, sector, buff, count);
  27. }
  28. int USB_disk_write(const BYTE *buff, LBA_t sector, UINT count)
  29. {
  30. return usbh_msc_scsi_write10(active_msc_class, sector, buff, count);
  31. }
  32. int USB_disk_ioctl(BYTE cmd, void *buff)
  33. {
  34. int result = 0;
  35. switch (cmd) {
  36. case CTRL_SYNC:
  37. result = RES_OK;
  38. break;
  39. case GET_SECTOR_SIZE:
  40. *(WORD *)buff = active_msc_class->blocksize;
  41. result = RES_OK;
  42. break;
  43. case GET_BLOCK_SIZE:
  44. *(DWORD *)buff = 1;
  45. result = RES_OK;
  46. break;
  47. case GET_SECTOR_COUNT:
  48. *(DWORD *)buff = active_msc_class->blocknum;
  49. result = RES_OK;
  50. break;
  51. default:
  52. result = RES_PARERR;
  53. break;
  54. }
  55. return result;
  56. }