usbh_fatfs.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 RES_OK;
  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. if (usbh_msc_scsi_init(active_msc_class) < 0) {
  23. return RES_NOTRDY;
  24. }
  25. return RES_OK;
  26. }
  27. int USB_disk_read(BYTE *buff, LBA_t sector, UINT count)
  28. {
  29. return usbh_msc_scsi_read10(active_msc_class, sector, buff, count);
  30. }
  31. int USB_disk_write(const BYTE *buff, LBA_t sector, UINT count)
  32. {
  33. return usbh_msc_scsi_write10(active_msc_class, sector, buff, count);
  34. }
  35. int USB_disk_ioctl(BYTE cmd, void *buff)
  36. {
  37. int result = 0;
  38. switch (cmd) {
  39. case CTRL_SYNC:
  40. result = RES_OK;
  41. break;
  42. case GET_SECTOR_SIZE:
  43. *(WORD *)buff = active_msc_class->blocksize;
  44. result = RES_OK;
  45. break;
  46. case GET_BLOCK_SIZE:
  47. *(DWORD *)buff = 1;
  48. result = RES_OK;
  49. break;
  50. case GET_SECTOR_COUNT:
  51. *(DWORD *)buff = active_msc_class->blocknum;
  52. result = RES_OK;
  53. break;
  54. default:
  55. result = RES_PARERR;
  56. break;
  57. }
  58. return result;
  59. }