KT24-1110_65E-HA-651B/apps/common/usb/host/usb_storage.h
2024-11-10 18:44:17 +08:00

85 lines
1.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __USB_STORAGE_H__
#define __USB_STORAGE_H__
#include "system/task.h"
#include "device/device.h"
#include "usb/scsi.h"
#include "usb_bulk_transfer.h"
#include "usb/host/usb_host.h"
#define UDISK_READ_AHEAD_ENABLE 1 //使能U盘预读功能
#define UDISK_READ_AHEAD_BLOCK_NUM 16 //U盘预读扇区数量
#define check_usb_read_ahead(ret) \
if(ret < 0) {\
log_error("func:%s,line:%d,lba:%d,ret:%d\n", __func__, __LINE__, lba, ret);\
goto __exit;\
} //检查函数返回值0:正确 非0:错误
/**@enum usb_sta
* @brief USB设备当前状态
*/
typedef enum usb_sta {
DEV_IDLE = 0,
DEV_INIT,
DEV_OPEN,
DEV_READ,
DEV_WRITE,
DEV_CLOSE,
DEV_SUSPEND,
} USB_STA ;
struct udisk_end_desc {
u8 host_epout;
u8 target_epout;
u8 host_epin;
u8 target_epin;
#if HUSB_MODE
u16 rxmaxp;
u16 txmaxp;
#endif
};
#define ENABLE_DISK_HOTPLUG 0
struct mass_storage {
OS_MUTEX mutex;
struct usb_scsi_cbw cbw;
struct usb_scsi_csw csw;
struct request_sense_data sense;
char *name;
struct read_capacity_data capacity[2];
u8 lun;
u8 curlun;
u8 dev_status;
u8 suspend_cnt;
u8 read_only;
u32 remain_len;
u32 prev_lba;
#if UDISK_READ_AHEAD_ENABLE
u8 udisk_read_ahead_en;
u8 *udisk_read_ahead_buf; ///<U盘512byte大小BUFFER指针
u32 udisk_read_ahead_lba_last; ///<异步模式上一次地址
#endif
#if ENABLE_DISK_HOTPLUG
u8 media_sta_cur; //for card reader, card removable
u8 media_sta_prev;
int test_unit_ready_tick;
#endif
};
enum usb_async_mode {
BULK_ASYNC_MODE_EXIT = 0, //取消异步模式
BULK_ASYNC_MODE_SEM_PEND, //异步预读等待信号量
};
#define MASS_LBA_INIT (-2)
int usb_msd_parser(struct usb_host_device *host_dev, u8 interface_num, const u8 *pBuf);
int _usb_stor_async_wait_sem(struct usb_host_device *host_dev);
#endif