source: azure_iot_hub_f767zi/trunk/asp_baseplatform/usb/host/tusbh_base.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: 10.3 KB
Line 
1/*
2 * TOPPERS BASE PLATFORM MIDDLEWARE
3 *
4 * Copyright (C) 2017-2018 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 BASE部定義
40 */
41
42#ifndef _HUSBH_BASE_H_
43#define _HUSBH_BASE_H_
44
45#include "tusb_rtos.h"
46#include "tusb_types.h"
47
48#ifdef __cplusplus
49 extern "C" {
50#endif
51
52#ifndef TUSBH_MAX_NUM_ENDPOINTS
53#define TUSBH_MAX_NUM_ENDPOINTS 3
54#endif
55#ifndef TUSBH_MAX_NUM_INTERFACES
56#define TUSBH_MAX_NUM_INTERFACES 2
57#endif
58#ifndef TUSBH_MAX_DATA_BUFFER
59#define TUSBH_MAX_DATA_BUFFER 0x200
60#endif
61
62/*
63 * STMユーザーイベント
64 */
65#define HOST_USER_SELECT_CONFIGURATION 1
66#define HOST_USER_CLASS_ACTIVE 2
67#define HOST_USER_CLASS_SELECTED 3
68#define HOST_USER_CONNECTION 4
69#define HOST_USER_DISCONNECTION 5
70#define HOST_USER_UNRECOVERED_ERROR 6
71
72/*Standard Feature Selector for clear feature command*/
73#define FEATURE_SELECTOR_ENDPOINT 0X00
74#define FEATURE_SELECTOR_DEVICE 0X01
75
76/*
77 * SUBMITタイプ
78 */
79#define SUBMIT_SETUP ((0<<8) | USB_PID_SETUP)
80#define SUBMIT_WRITE ((0<<8) | USB_PID_DATA)
81#define SUBMIT_READ ((1<<8) | USB_PID_DATA)
82
83/*
84 * パイプ属性定義
85 */
86#define PIPE_ACTIVATE 0x8000
87#define PIPE_ADDRESS 0x00FF
88
89
90#define NO_INTERFACE 0xFF
91
92
93/*
94 * URBステート定義
95 */
96typedef enum {
97 TUSBH_URB_IDLE = 0,
98 TUSBH_URB_DONE,
99 TUSBH_URB_NOTREADY,
100 TUSBH_URB_NYET,
101 TUSBH_URB_ERROR,
102 TUSBH_URB_STALL
103} TUSBH_URBState_t;
104
105/*
106 * プロセスイベント
107 */
108enum {
109 TUSBH_PORT_EVENT = 1,
110 TUSBH_URB_EVENT,
111 TUSBH_TIME_EVENT,
112 TUSBH_CLASS_EVENT,
113 TUSBH_RESET_EVENT
114};
115
116enum {
117 TUSBH_CONNECT_EVENT = 1,
118 TUSBH_DISCONNECT_EVENT,
119 TUSBH_IDCHANGE_EVENT,
120};
121
122/*
123 * デバイス状態定義
124 */
125enum {
126 DEVICE_IDLE = 0,
127 DEVICE_ATTACHED,
128 DEVICE_DISCONNECTED,
129 DEVICE_CHECK_CLASS,
130 DEVICE_CLASS,
131 DEVICE_SUSPENDED,
132 DEVICE_ABORT_STATE,
133};
134
135/*
136 * CONTROL通信状態
137 */
138enum {
139 CONTROL_IDLE = 0,
140 CONTROL_SETUP,
141 CONTROL_SETUP_WAIT,
142 CONTROL_DATA_IN_WAIT,
143 CONTROL_DATA_OUT_WAIT,
144 CONTROL_STATUS_IN_WAIT,
145 CONTROL_STATUS_OUT_WAIT,
146 CONTROL_ERROR
147};
148
149
150#define USBH_HandleTypeDef TUSBH_Handle_t
151typedef struct _TUSBH_Handle_t TUSBH_Handle_t;
152typedef struct _TUSBH_Class_t TUSBH_Class_t;
153typedef struct _TUSBH_Device_t TUSBH_Device_t;
154
155typedef struct
156{
157 uint16_t attribute;
158 uint8_t index;
159 uint8_t type;
160} USBH_Pipe_t;
161
162/*
163 * USBホストクラス定義
164 */
165struct _TUSBH_Class_t
166{
167 TUSBH_Class_t *pNext;
168 const char *Name;
169 uint32_t classCode;
170 TUSBH_ERCODE (*Init)(TUSBH_Device_t *pdevice);
171 TUSBH_ERCODE (*DeInit)(TUSBH_Device_t *pdevice);
172 TUSBH_ERCODE (*Process)(TUSBH_Device_t *pdevice, uint8_t *mes);
173 void *subfunc;
174};
175
176/*
177 * USBホストデバイスハンドラ
178 */
179struct _TUSBH_Device_t
180{
181 TUSBH_Device_t *pNext;
182 TUSBH_Handle_t *pHost;
183 TUSBH_Class_t *pClass;
184 uint8_t activate;
185 uint8_t address;
186 uint8_t speed;
187 volatile uint8_t is_connected;
188 uint8_t pre_connected;
189 uint8_t sel_interface;
190 uint8_t hub;
191 uint8_t port;
192 uint8_t idx;
193 volatile uint8_t dstate;
194 uint16_t timeid;
195 uint32_t timecount;
196
197 uint8_t cntl_pipe_in;
198 uint8_t cntl_pipe_out;
199 uint8_t cntl_pipe_size;
200 uint8_t cntl_errcount;
201 uint8_t setupPacket[8];
202 uint32_t dummy[6]; /* dummy for cache */
203 uint8_t Data[TUSBH_MAX_DATA_BUFFER];
204 DeviceDescriptor DevDesc;
205 ConfigurationDescriptor CfgDesc;
206 InterfaceDescriptor ItfDesc[TUSBH_MAX_NUM_INTERFACES];
207 EndpointDescriptor EpDesc[TUSBH_MAX_NUM_INTERFACES][TUSBH_MAX_NUM_ENDPOINTS];
208
209 uint8_t type;
210 uint8_t hubid;
211 volatile uint8_t cstate;
212 uint8_t numUnit;
213 void *pData;
214 uint8_t *cbuff;
215 char Manufacturer[TUSBH_STR_LENGTH];
216 char Prodeuct[TUSBH_STR_LENGTH];
217 char Serial[TUSBH_STR_LENGTH];
218};
219
220/*
221 * USBホストハンドラ
222 */
223struct _TUSBH_Handle_t
224{
225 TUSBH_Device_t *pDevice;
226 TUSBH_Class_t *pClass;
227 USBH_Pipe_t pipes[MAX_EPS_PIPES];
228 uint32_t numPipes;
229 void *pSysData;
230 uint8_t *pCfgData;
231 void (*usrcallback)(TUSBH_Handle_t *pHandle, TUSBH_Device_t *pdevice, uint8_t id);
232
233 uint8_t id;
234 uint8_t numDevice;
235 uint8_t numClass;
236 uint8_t numHub;
237 ID processTaskID;
238 ID eventTaskID;
239 ID process_event;
240 ID connect_event;
241};
242
243#include "tusbh_conf.h"
244
245/*
246 * 関数プロトタイプ宣言
247 */
248TUSBH_ERCODE tusbhInit(TUSBH_Handle_t *phost, void (*pufunc)(TUSBH_Handle_t*, TUSBH_Device_t *, uint8_t ), uint8_t id);
249TUSBH_ERCODE tusbhDeInit(TUSBH_Handle_t *phost);
250TUSBH_ERCODE tusbhLinkClass(TUSBH_Handle_t *phost, TUSBH_Class_t *pclass);
251TUSBH_ERCODE tusbhStart(TUSBH_Handle_t *phost);
252TUSBH_ERCODE tusbhStop(TUSBH_Handle_t *phost);
253
254TUSBH_ERCODE tusbhResetHub(TUSBH_Device_t *pdevice);
255TUSBH_ERCODE tusbhSelectInterface(TUSBH_Device_t *pdevice, uint8_t interface);
256uint8_t tusbhFindInterface(TUSBH_Device_t *pdevice, uint8_t Class, uint8_t SubClass, uint8_t Protocol);
257uint8_t tusbhGetActiveClass(TUSBH_Device_t *pdevice);
258uint8_t tusbhFindInterfacebynumber(TUSBH_Device_t *pdevice, uint8_t interface, uint8_t altsetno);
259
260TUSBH_ERCODE tusbhControlRequest(TUSBH_Device_t *pdevice, uint8_t *buff, uint8_t type, uint8_t request, uint16_t value, uint16_t index, uint16_t length);
261TUSBH_ERCODE tusbhControlWait(TUSBH_Device_t *pdevice, uint8_t *mes);
262TUSBH_ERCODE tusbhGetDescriptor(TUSBH_Device_t *pdevice, uint8_t req_type, uint16_t value, uint8_t* buff, uint16_t length);
263TUSBH_ERCODE tusbhSetInterface(TUSBH_Device_t *pdevice, uint8_t ep_num, uint8_t interface);
264TUSBH_ERCODE tusbhClearFeature(TUSBH_Device_t *pdevice, uint8_t ep_num);
265
266TUSBH_ERCODE tusbhOpenPipe(TUSBH_Device_t *, uint8_t, uint8_t, uint8_t, uint16_t);
267TUSBH_ERCODE tusbhClosePipe(TUSBH_Device_t *, uint8_t pipe);
268TUSBH_ERCODE tusbhSubmitURB(TUSBH_Device_t *pdevice, uint8_t, uint16_t, uint8_t, uint8_t*, uint16_t);
269TUSBH_ERCODE tusbhControlSendSetup(TUSBH_Device_t *pdevice, uint8_t *buff, uint8_t pipe_num);
270TUSBH_ERCODE tusbhControlSendData(TUSBH_Device_t *pdevice, uint8_t *buff, uint16_t length, uint8_t pipe_num);
271TUSBH_ERCODE tusbhControlReceiveData(TUSBH_Device_t *pdevice, uint8_t* buff, uint16_t length, uint8_t pipe_num);
272TUSBH_ERCODE tusbhBulkWrite(TUSBH_Device_t *pdevice, uint8_t *buff, uint16_t length, uint8_t pipe_num);
273TUSBH_ERCODE tusbhBulkRead(TUSBH_Device_t *pdevice, uint8_t *buff, uint16_t length, uint8_t pipe_num);
274TUSBH_ERCODE tusbhInterruptWrite(TUSBH_Device_t *pdevice, uint8_t *buff, uint8_t length, uint8_t pipe_num);
275TUSBH_ERCODE tusbhInterruptRead(TUSBH_Device_t *pdevice, uint8_t *buff, uint8_t length, uint8_t pipe_num);
276TUSBH_ERCODE tusbhIsocWrite(TUSBH_Device_t *pdevice, uint8_t *buff, uint32_t length, uint8_t pipe_num);
277TUSBH_ERCODE tusbhIsocRead(TUSBH_Device_t *pdevice, uint8_t *buff, uint32_t length, uint8_t pipe_num);
278
279void tusbhProcessTask(intptr_t exinf);
280void tusbhEventTask(intptr_t exinf);
281void tusbhCyclicHandler(intptr_t exinf);
282
283TUSBH_Device_t *tusbhSearchDevice(TUSBH_Handle_t *phost, uint8_t classCode, uint8_t *plun);
284uint8_t tusbhAllocPipe(TUSBH_Handle_t *phost, uint8_t ep_addr);
285TUSBH_ERCODE tusbFreePipe(TUSBH_Handle_t *phost, uint8_t no);
286
287
288#ifdef __cplusplus
289}
290#endif
291
292#endif /* _HUSBH_BASE_H_ */
293
Note: See TracBrowser for help on using the repository browser.