📄 halusbhost.lst
字号:
C51 COMPILER V8.01 HALUSBHOST 04/17/2008 09:46:30 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE HALUSBHOST
OBJECT MODULE PLACED IN .\Debug\halusbhost.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE usbhost\halusbhost.c LARGE OPTIMIZE(9,SIZE) NOINTPROMOTE INCDIR(.\common;.\
-e2prom;.\file;.\fmtx;.\ir;.\keyboard;.\lcm;.\led;.\main;.\matrixkey;.\mp3ctrl;.\sd;.\usbhost;.\include;.\lib) DEBUG OBJE
-CTEXTEND PRINT(.\Debug\halusbhost.lst) OBJECT(.\Debug\halusbhost.obj)
line level source
1 /****************************************************************
2 * Viaon Technology (Suzhou) Co.,Ltd
3 *
4 * Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
5 * All rights reserved.
6 *
7 *
8 * Filename: halusbhost.c
9 *
10 * Programmer: Greg
11 *
12 * Created: 1/2/2008
13 *
14 * Description: public functions
15 *
16 *
17 * Change History (most recent first): 2008.1.2
18 ****************************************************************/
19 //#include "string.h"
20
21 #include "utiltypedef.h"
22 #include "va4010reg.h"
23 #include "common.h"
24 #include "halusbhost.h"
25 #include "halscsi.h"
26 #include "timer.h"
27
28 #define MAX_NAK_CNT 2000
29 //static WORD ConsecutiveNAKCount = 0;
30 XXGFLAGS bdata bXXGFlags; //union XXGFLAGS is defined in common.h
31 XXGPKG usbstack; //struct XXGPKG is defined in usb.h
32 //usbstack holds parameters to be passed to low-level functions
33 USBDEV uDev;
34 extern BYTE DBUF[SECT_LEN];
35 #if 0
void usbBufRead(BYTE *s, BYTE c)
{
BYTE i;
BYTE *addr;
addr = s;
for(i=0;i<c;i++){
ACC = BufAddr;
*addr = ACC;
addr++;
}
return;
}
#else
51 void usbBufRead(BYTE *s, BYTE c)
52 {
53 1 BYTE i, tmp;
C51 COMPILER V8.01 HALUSBHOST 04/17/2008 09:46:30 PAGE 2
54 1 BYTE *addr;
55 1
56 1 if(usbstack.bRdFlag == RD_FLAG_BUF){
57 2 addr = s;
58 2 for(i=0;i<c;i++){
59 3 ACC = BufAddr;
60 3 *addr = ACC;
61 3 addr++;
62 3 }
63 2 }else{ //RD_FLAG_TEMP
64 2 for(i=0;i<c;i++){
65 3 ACC = BufAddr;
66 3 tmp = ACC;
67 3 }
68 2 }
69 1
70 1 return;
71 1 }
72 #endif
73
74 void usbBufWrite(BYTE *s, BYTE c)
75 {
76 1 BYTE *addr;
77 1 addr = s;
78 1
79 1 #if 0
if(BufStatusAddr&0x02) //bufstatus[1]=1:full
return;
else {
while(c){
ACC = *addr;
BufAddr = ACC;
addr++;
c--;
}
}
#else
91 1 while(BufStatusAddr&0x02){
92 2 UartOutText("USB Buffer Full \r\n");
93 2 }
94 1
95 1 while(c){
96 2 ACC = *addr;
97 2 BufAddr = ACC;
98 2 addr++;
99 2 c--;
100 2 }
101 1 #endif
102 1
103 1 return;
104 1 }
105
106 //*****************************************************************************************
107 // USB variables initialization
108 //*****************************************************************************************
109 void _halUsbReset(void)
110 {
111 1 BYTE data temp;
112 1
113 1 temp = SieCtrl;
114 1 SieCtrl = temp|0x04; // SE0 reset
115 1 DelayMs(250);
C51 COMPILER V8.01 HALUSBHOST 04/17/2008 09:46:30 PAGE 3
116 1 DelayMs(250);
117 1 SieCtrl = temp;
118 1 DelayMs(250); // reset recovery
119 1 DelayMs(250);
120 1 SieStat0 = 0xff; // clear status regs
121 1 SieStat1 = 0xff;
122 1
123 1 memclr(&bXXGFlags, sizeof(bXXGFlags));
124 1 memclr(&uDev, sizeof(uDev));
125 1 memclr(&usbstack, sizeof(usbstack));
126 1 //ConsecutiveNAKCount = 0;
127 1
128 1 return;
129 1 }
130
131 BYTE epBulkSend(BYTE *pBuffer,WORD len)
132 {
133 1 // usbstack.endpoint=usbstack.epbulkout;
134 1 usbstack.pid = PID_OUT;
135 1 TxEpnum = uDev.bEPAddr[usbstack.epbulkout];
136 1
137 1 usbstack.wPayload = uDev.wPayLoad[usbstack.epbulkin]; //64
138 1 usbstack.wLen = len;
139 1 usbstack.buffer = pBuffer;
140 1 bXXGFlags.bToggle = uDev.bData1[usbstack.epbulkout];
141 1
142 1 #if 0
while(len>0)
{
if (len > usbstack.wPayload)
usbstack.wLen = usbstack.wPayload;
else
usbstack.wLen = len;
//if(!usbXfer(TxEpnum)) return FALSE;
_halOutTrans();
bXXGFlags.bToggle=~bXXGFlags.bToggle;
len-=usbstack.wLen;
usbstack.buffer=usbstack.buffer+usbstack.wLen;
}
#else
159 1 _halOutTrans();
160 1 #endif
161 1 uDev.bData1[usbstack.epbulkout]=bXXGFlags.bToggle; // save toggle status back to associated EP
162 1 return TRUE;
163 1 }
164
165 BYTE epBulkRcv(BYTE *pBuffer,WORD len)
166 {
167 1 // usbstack.endpoint=usbstack.epbulkin;
168 1 usbstack.pid=PID_IN;
169 1 TxEpnum = uDev.bEPAddr[usbstack.epbulkin];
170 1
171 1 usbstack.wPayload=uDev.wPayLoad[usbstack.epbulkin]; // 64; //????
172 1 usbstack.wLen=len;
173 1 usbstack.buffer=pBuffer;
174 1 #if 0
if(usbstack.wLen)
{
bXXGFlags.bToggle = uDev.bData1[usbstack.epbulkin]; // restore toggle state
C51 COMPILER V8.01 HALUSBHOST 04/17/2008 09:46:30 PAGE 4
//if(!usbXfer(TxEpnum)) return FALSE;
_halInTrans();
uDev.bData1[usbstack.epbulkin] = bXXGFlags.bToggle; // save toggle state
}
#else
184 1 bXXGFlags.bToggle = uDev.bData1[usbstack.epbulkin]; // restore toggle state
185 1 //if(!usbXfer(TxEpnum)) return FALSE;
186 1 _halInTrans();
187 1
188 1 uDev.bData1[usbstack.epbulkin] = bXXGFlags.bToggle; // save toggle state
189 1 #endif
190 1
191 1 return TRUE;
192 1 }
193
194 ////////////////////
195 BYTE _halStdDevReq(BYTE bmReq, BYTE bReq, WORD wVal, WORD wIdx, WORD wLen)
196 {
197 1 usbstack.setup.bmRequest = bmReq;
198 1 usbstack.setup.bRequest = bReq;
199 1 usbstack.setup.wValue = wVal;
200 1 usbstack.setup.wIndex = wIdx;
201 1 usbstack.setup.wLength = wLen;
202 1
203 1 return _halHostEp0Xfer();
204 1 }
205
206 BYTE halUsbDevEnum(void)
207 {
208 1 BYTE data i; // always reset USB transfer address
209 1 BYTE data epLen;
210 1
211 1 // pointers to descriptor data structures
212 1 pDevDesc pDev; // device descriptor
213 1 pCfgDesc pCfg; // configuration descriptor
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -