source: azure_iot_hub_f767zi/trunk/asp_baseplatform/usb/host/MSC/tusbh_msc.h@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 7.4 KB
Line 
1/*
2 * TOPPERS BASE PLATFORM MIDDLEWARE
3 *
4 * Copyright (C) 2017-2017 by TOPPERS PROJECT
5 * Educational Working Group.
6 *
7 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12 * スコード中に含まれていること.
13 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16 * の無保証規定を掲載すること.
17 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19 * と.
20 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
22 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23 * 報告すること.
24 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28 * 免責すること.
29 *
30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34 * の責任を負わない.
35 *
36 * @(#) $Id$
37 */
38/*
39 * USB Host Middleware MSC部定義
40 */
41
42#ifndef _HUSBH_MSC_H_
43#define _HUSBH_MSC_H_
44
45#include "tusbh_base.h"
46
47#ifdef __cplusplus
48 extern "C" {
49#endif
50
51
52#ifndef NUM_MAX_MSC_UNIT
53#define NUM_MAX_MSC_UNIT 2
54#endif
55
56/*
57 * MSCインターフェイス定義
58 */
59#define MSC_TRANSPARENT_SUBCLASS 0x06
60#define MSC_BOT_PROTOCOL 0x50
61
62/*
63 * BOT通信パケット定義
64 */
65#define OPCODE_TEST_UNIT_READY 0x00
66#define OPCODE_READ_CAPACITY10 0x25
67#define OPCODE_READ10 0x28
68#define OPCODE_WRITE10 0x2A
69#define OPCODE_REQUEST_SENSE 0x03
70#define OPCODE_INQUIRY 0x12
71
72#define DATA_LEN_MODE_TEST_UNIT_READY 0
73#define DATA_LEN_READ_CAPACITY10 8
74#define DATA_LEN_INQUIRY 36
75#define DATA_LEN_REQUEST_SENSE 14
76
77#define CBW_CB_LENGTH 16
78#define CBW_LENGTH 10
79
80/*
81 * SENSE KEY定義
82 */
83#define SCSI_SENSE_KEY_NO_SENSE 0x00
84#define SCSI_SENSE_KEY_RECOVERED_ERROR 0x01
85#define SCSI_SENSE_KEY_NOT_READY 0x02
86#define SCSI_SENSE_KEY_MEDIUM_ERROR 0x03
87#define SCSI_SENSE_KEY_HARDWARE_ERROR 0x04
88#define SCSI_SENSE_KEY_ILLEGAL_REQUEST 0x05
89#define SCSI_SENSE_KEY_UNIT_ATTENTION 0x06
90#define SCSI_SENSE_KEY_DATA_PROTECT 0x07
91#define SCSI_SENSE_KEY_BLANK_CHECK 0x08
92#define SCSI_SENSE_KEY_VENDOR_SPECIFIC 0x09
93#define SCSI_SENSE_KEY_COPY_ABORTED 0x0A
94#define SCSI_SENSE_KEY_ABORTED_COMMAND 0x0B
95#define SCSI_SENSE_KEY_VOLUME_OVERFLOW 0x0D
96#define SCSI_SENSE_KEY_MISCOMPARE 0x0E
97
98/*
99 * MSCコントロール通信定義
100 */
101#define USB_REQ_BOT_RESET 0xFF
102#define USB_REQ_GET_MAX_LUN 0xFE
103
104#define BOT_REQUEST_GETMAXLUN_TYPE (USB_DEVICE_TO_HOST | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE)
105#define BOT_REQUEST_RESET_TYPE (USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS | USB_RECIPIENT_INTERFACE)
106
107/*
108 * MSCプロセスの状態定義
109 */
110enum
111{
112 MSC_PROCESS_INIT = 0,
113 MSC_PROCESS_IDLE,
114 MSC_PROCESS_READ_WAIT,
115 MSC_PROCESS_WRITE_WAIT,
116 MSC_PROCESS_REQUEST_SENSE_WAIT
117};
118
119/*
120 * MSCユニットの状態定義
121 */
122typedef enum
123{
124 MSC_UNIT_INIT = 0,
125 MSC_UNIT_TEST_UNIT_READY_WAIT,
126 MSC_UNIT_READ_CAPACITY_WAIT,
127 MSC_UNIT_READ_INQUIRY_WAIT,
128 MSC_UNIT_REQUEST_SENSE_WAIT,
129 MSC_UNIT_ERROR,
130 MSC_UNIT_IDLE,
131 MSC_UNIT_READ_WAIT,
132 MSC_UNIT_WRITE_WAIT,
133} MSC_UNIT_STATE_t;
134
135/*
136 * BOT状態定義
137 */
138typedef enum {
139 BOT_SEND_CBW = 1,
140 BOT_SEND_CBW_WAIT,
141 BOT_DATA_IN_WAIT,
142 BOT_DATA_OUT_WAIT,
143 BOT_RECEIVE_CSW_WAIT,
144 BOT_STATE_ERROR,
145 BOT_STATE_ERROR_WAIT
146} BOT_STATE_t;
147
148typedef struct
149{
150 uint32_t Signature;
151 uint32_t Tag;
152 uint32_t DataTransferLength;
153 uint8_t Flags;
154 uint8_t LUN;
155 uint8_t CBLength;
156 uint8_t CB[CBW_CB_LENGTH];
157} BOT_CBW_t;
158
159typedef struct
160{
161 uint32_t Signature;
162 uint32_t Tag;
163 uint32_t DataResidue;
164 uint8_t Status;
165} BOT_CSW_t;
166
167/*
168 * BOTハンドラ型定義
169 */
170typedef struct
171{
172 uint32_t data[32];
173 BOT_CBW_t cbw;
174 uint32_t dummy2[8];
175 BOT_CSW_t csw;
176 uint8_t dummy3[12];
177 uint8_t *pbuf;
178 BOT_STATE_t state;
179} BOT_Handle_t;
180
181/*
182 * MSC ユニット定義
183 */
184typedef struct
185{
186 MSC_UNIT_STATE_t state;
187 MSC_UNIT_STATE_t pre_state;
188 uint32_t num_block;
189 uint32_t block_size;
190 uint8_t DeviceType;
191 uint8_t PeripheralQualifier;
192 uint8_t RemovableMedia;
193 uint8_t vendor_id[12];
194 uint8_t product_id[20];
195 uint8_t revision_id[8];
196 TUSBH_ERCODE rw_status;
197 int32_t rw_taskid;
198} MSC_Unit_t;
199
200/*
201 * MSCハンドラ定義
202 */
203typedef struct
204{
205 TUSBH_Device_t *pDev;
206 uint8_t state;
207 uint8_t max_lun;
208 uint8_t lun;
209 uint8_t dymmy1;
210
211 uint8_t InPipe;
212 uint8_t OutPipe;
213 uint8_t OutEp;
214 uint8_t InEp;
215 uint16_t OutEpSize;
216 uint16_t InEpSize;
217 uint32_t timer;
218 uint32_t urb_wait;
219 uint32_t dummy[2];
220 BOT_Handle_t hbot;
221 MSC_Unit_t unit[NUM_MAX_MSC_UNIT];
222} MSC_Handle_t;
223
224
225void tusbhLinkMSC(TUSBH_Handle_t *phost);
226uint8_t tusbhMscUnitIsReady(TUSBH_Handle_t *phost, uint8_t lun);
227TUSBH_ERCODE tusbhMscGetLUNInfo(TUSBH_Handle_t *phost, uint8_t lun, MSC_Unit_t *info);
228TUSBH_ERCODE tusbhMscRead(TUSBH_Handle_t *phost, uint8_t lun, uint32_t address, uint8_t *pbuf, uint32_t num);
229TUSBH_ERCODE tusbhMscWrite(TUSBH_Handle_t *phost, uint8_t lun, uint32_t address, uint8_t *pbuf, uint32_t num);
230
231
232
233#ifdef __cplusplus
234}
235#endif
236
237#endif /* _HUSBH_MSC_H_ */
238
Note: See TracBrowser for help on using the repository browser.