usbmsc.h
3.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#ifndef _USB_MSC_H_
#define _USB_MSC_H_
#ifdef IPOD_USB_AUDIO
#include "ipod.h"
#else
//#define IPOD_USB_AUDIO_CHARGE_ONLY
#endif
#define DEVINFO_MAX_STRING_LEN 20
#define MSC_VID_LEN 8
#define MSC_PDI_LEN 16
#ifdef IPOD_MEM_SIZE_DOWN
#define USB_HOST_MAX_SUPPORT_LUNS 4
#else
#define USB_HOST_MAX_SUPPORT_LUNS 8
#endif
typedef struct {
U8 valid;
U16 usbVid;
U16 usbPid;
U16 usbProduct[DEVINFO_MAX_STRING_LEN];
U16 usbManufacture[DEVINFO_MAX_STRING_LEN];
U8 mscVid[USB_HOST_MAX_SUPPORT_LUNS][MSC_VID_LEN];
U8 mscPid[USB_HOST_MAX_SUPPORT_LUNS][MSC_PDI_LEN];
U8 totLUNs;
U8 validLuns;
U32 capacity[USB_HOST_MAX_SUPPORT_LUNS];
U32 sectorSize[USB_HOST_MAX_SUPPORT_LUNS];
U8 lunOpen[USB_HOST_MAX_SUPPORT_LUNS];
U8 lunWriteProtect[USB_HOST_MAX_SUPPORT_LUNS];
} DEVICE_INFO;
typedef enum {
enUSB_FSMSG_CONNECT,
enUSB_FSMSG_DISCONNECT,
enUSB_FSMSG_MEDIUM_INSERT,
enUSB_FSMSG_MEDIUM_REMOVE,
enUSB_FSMSG_OVER_CURRENT,
enUSB_FSMSG_FATAL_ERR,
enFSMSG_MTP_FILE_SEARCH,
enFSMSG_MTP_FILE_READ,
enFSMSG_MTP_FILE_WRITE
} enum_USB_MSG;
typedef enum {
enMSC_UNKOWN,
enMSC_SUCCESS,
enMSC_FAIL,
enMSC_CANCLE,
enMSC_DEV_DISCONNECT
} enum_MSC_RESULT;
BOOL usbmsc_init( void );
BOOL usbmsc_open( void );
BOOL usbmsc_close( void );
BOOL usbmsc_fini( void );
typedef enum {
enUSB_HSTK_ATTR_MSC = (1 << 0),
enUSB_HSTK_ATTR_IAP1_DEV = (1 << 1),
enUSB_HSTK_ATTR_AOA_AUDIO = (1 << 2),
enUSB_HSTK_ATTR_AOA_APPS = (1 << 3),
enUSB_HSTK_ATTR_MTP = (1 << 4),
enUSB_HSTK_ATTR_IAP1_DEV_CHARGE_ONLY = (1 << 5),
//for USB_HOST_AUDIO_ENABLE
enUSB_HSTK_ATTR_HOST_AUDIO = (1 << 6)
} enum_USB_HOST_STACK_ATTR;
#if defined AOA_USB_AUDIO
#define USB_HSTK_ATTR_DEFAULT ( enUSB_HSTK_ATTR_MSC | enUSB_HSTK_ATTR_IAP1_DEV | enUSB_HSTK_ATTR_AOA_AUDIO)
#elif defined IPOD_USB_AUDIO_CHARGE_ONLY
#define USB_HSTK_ATTR_DEFAULT ( enUSB_HSTK_ATTR_MSC | enUSB_HSTK_ATTR_IAP1_DEV_CHARGE_ONLY )
#else
#define USB_HSTK_ATTR_DEFAULT ( enUSB_HSTK_ATTR_MSC )
#endif
//#define USB_HSTK_ATTR_AOA_ADDED ( USB_HSTK_ATTR_DEFAULT | enUSB_HSTK_ATTR_AOA_AUDIO )
#if defined USB_HOST_AUDIO_ENABLE
#define USB_HSTK_ATTR_HOST_ADDED ( USB_HSTK_ATTR_DEFAULT | enUSB_HSTK_ATTR_HOST_AUDIO )
#else
#define USB_HSTK_ATTR_HOST_ADDED ( USB_HSTK_ATTR_DEFAULT )
#endif
U8 usbmsc_startUSBhostEx( enum_USB_HOST_STACK_ATTR attr );
U8 usbmsc_USBhostOpenEx( enum_USB_HOST_STACK_ATTR attr );
U8 usbmsc_startUSBhost( void );
U8 usbmsc_stopUSBhost( void );
U8 usbmsc_USBhostOpen( void );
U8 usbmsc_USBhostClose( void );
//U16 usbmsc_sectorRead(U8 lun, U8 * buf, U32 lba, U16 sectorCount);
//U16 usbmsc_sectorWrite(U8 lun, U8 * buf, U32 lba, U16 sectorCount);
//U32 usbmsc_getCapacity (U8 lun);
//U16 usbmsc_getSectorSize (U8 lun);
U16 usbmsc_sectorRead(U8 * buf, U32 lba, U16 sectorCount);
U16 usbmsc_sectorWrite(U8 * buf, U32 lba, U16 sectorCount);
U32 usbmsc_getCapacity(void);
U16 usbmsc_getSectorSize (void);
U8 usbmsc_LUNopen( U8 lun );
U8 usbmsc_LUNclose( U8 lun );
//return enum_MSC_RESULT
U8 usbmsc_getLastErr(void);
U8 usbmsc_getDevInfo( DEVICE_INFO **devInfo );
U8 usbmsc_isLunWriteProtect( U8 lun );
U8 usbmsc_setLunWriteProtect( U8 lun, U8 wp );
WORD usbmsc_Get_Media (void);
BOOL usbmsc_Erase (DWORD sector_addr, DWORD len);
BOOL usbmsc_Media_Active (void);
BOOL usbmsc_Format_Unit (void);
BOOL usbmsc_Get_Format_Propgress (BYTE *format_progress);
WORD _ATA_Read (BYTE *buf, DWORD lba, WORD sector_count);
void SetWRDeviceIndex(U8 index);
void SetWRDeviceIndexInit(void);
U16 getDeviceVID (void);
#ifdef USB_HOST_ENABLE
#define ATA_MASTER usbmsc_init, \
usbmsc_fini, \
usbmsc_open, \
usbmsc_close, \
usbmsc_sectorWrite, \
usbmsc_sectorRead, \
usbmsc_getCapacity, \
usbmsc_Get_Media, \
usbmsc_Erase, \
usbmsc_Format_Unit, \
usbmsc_Get_Format_Propgress,\
usbmsc_getSectorSize, \
usbmsc_Media_Active
#endif
#define USB_DEVICE_NO_LUN_OPEN 0xFF
extern U8 wrUSBDevIndex;
#endif //_USB_MSC_H_