106 lines
2.2 KiB
C
106 lines
2.2 KiB
C
/*
|
|
(c) 2017 night_ghost@ykoctpa.ru
|
|
|
|
|
|
*/
|
|
|
|
#include "StorageMode.h"
|
|
|
|
|
|
// defines of disk status
|
|
#include "../sd/FatFs/diskio.h"
|
|
|
|
|
|
extern USB_OTG_CORE_HANDLE USB_OTG_dev;
|
|
|
|
|
|
const int8_t STORAGE_Inquirydata[] =
|
|
{
|
|
0x00, 0x80, 0x02, 0x02,
|
|
(USBD_STD_INQUIRY_LENGTH - 5),
|
|
0x00, 0x00, 0x00,
|
|
'R', 'E', 'V', 'O', ' ', '@', 'N', 'G', // Manufacturer : 8 bytes
|
|
'S', 'D', ' ', 'C', 'a', 'r', 'd', ' ', // Product : 16 Bytes
|
|
'R', 'e', 'a', 'd', 'e', 'r', ' ', ' ', //
|
|
'1', '.', '0' ,'0', // Version : 4 Bytes
|
|
};
|
|
|
|
int8_t STORAGE_Init(uint8_t lun)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
int8_t STORAGE_GetCapacity(uint8_t lun, uint32_t *block_num, uint32_t *block_size)
|
|
{
|
|
if(lun>0) return 1;
|
|
|
|
*block_size = MAL_massBlockSize[lun];
|
|
*block_num = MAL_massBlockCount[lun];
|
|
return 0;
|
|
}
|
|
|
|
int8_t STORAGE_IsReady(uint8_t lun)
|
|
{
|
|
return usb_mass_mal_get_status(lun) & (STA_NODISK | STA_NOINIT);
|
|
}
|
|
|
|
int8_t STORAGE_IsWriteProtected(uint8_t lun)
|
|
{
|
|
return usb_mass_mal_get_status(lun) & STA_PROTECT;
|
|
|
|
}
|
|
|
|
int8_t STORAGE_Read(
|
|
uint8_t lun, // logical unit number
|
|
uint8_t *buf, // Pointer to the buffer to save data
|
|
uint32_t blk_addr, // address of 1st block to be read
|
|
uint16_t blk_len) // nmber of blocks to be read
|
|
{
|
|
return usb_mass_mal_read_memory(lun, buf, blk_addr, blk_len);
|
|
}
|
|
|
|
int8_t STORAGE_Write(uint8_t lun,
|
|
uint8_t *buf,
|
|
uint32_t blk_addr,
|
|
uint16_t blk_len)
|
|
{
|
|
return usb_mass_mal_write_memory(lun, buf, blk_addr, blk_len);
|
|
}
|
|
|
|
inline int8_t STORAGE_GetMaxLun(void)
|
|
{
|
|
return (STORAGE_LUN_NBR - 1);
|
|
}
|
|
|
|
|
|
#ifdef USE_USB_OTG_FS
|
|
extern void systemInit(uint8_t oc);
|
|
|
|
void OTG_FS_WKUP_IRQHandler(void)
|
|
{
|
|
if(USB_OTG_dev.cfg.low_power)
|
|
{
|
|
*(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ; // SCB_SCR reset bits 0x6, SLEEPDEEP & SLEEPONEXIT
|
|
systemInit(0);
|
|
USB_OTG_UngateClock(&USB_OTG_dev);
|
|
}
|
|
EXTI_ClearITPendingBit(EXTI_Line18);
|
|
}
|
|
#endif
|
|
|
|
|
|
const USBD_STORAGE_cb_TypeDef STORAGE_fops =
|
|
{
|
|
STORAGE_Init,
|
|
STORAGE_GetCapacity,
|
|
STORAGE_IsReady,
|
|
STORAGE_IsWriteProtected,
|
|
STORAGE_Read,
|
|
STORAGE_Write,
|
|
STORAGE_GetMaxLun,
|
|
(int8_t *)STORAGE_Inquirydata,
|
|
};
|
|
|
|
const USBD_STORAGE_cb_TypeDef * const USBD_STORAGE_fops = &STORAGE_fops;
|