📄 tpbulk.lst
字号:
178 1 TPBulksup_ErrorHandler(CASECBW,0); //无效CBW,错误处理
179 1 TPBulk_CSWHandler();// Goto USBFSM4BOT_CSWPROC;
C51 COMPILER V7.06 TPBULK 02/17/2004 14:42:23 PAGE 4
180 1 }
181
182
183 void
184 TPBulksup_ErrorHandler(INT8 HostDevCase,INT16 wByteCounterDevWillXfer)
185 {
186 1 TPBulk_CSW.dCSW_DataResidue = TPBulk_CBW.dCBW_DataXferLen - wByteCounterDevWillXfer;
187 1
188 1 switch(HostDevCase)
189 1 {
190 2 case CASEOK:
191 2 case CASE1: /* Hn=Dn*/
192 2 case CASE6: /* Hi=Di*/
193 2 TPBulk_CSW.bCSW_Status = CSW_GOOD;
194 2 break;
195 2
196 2 case CASE12: /* Ho=Do*/
197 2 TPBulk_CSW.bCSW_Status = CSW_GOOD;
198 2 break;
199 2
200 2 case CASE2: /* Hn<Di*/
201 2 case CASE3: /* Hn<Do*/
202 2 //BOTBF_StallAtBulkIn = 1; // may or may-not
203 2 TPBulk_CSW.bCSW_Status = CSW_PHASE_ERROR;
204 2 break;
205 2
206 2 case CASE4: /* Hi>Dn*/
207 2 case CASE5: /* Hi>Di*/
208 2 BOTBF_StallAtBulkIn = 1;
209 2 TPBulk_CSW.bCSW_Status = CSW_FAIL;//CSW_GOOD or CSW_FAIL
210 2 break;
211 2
212 2
213 2 case CASE7: /* Hi<Di*/
214 2 case CASE8: /* Hi<>Do */
215 2 //BOTBF_StallAtBulkIn = 1; // may or may-not
216 2 TPBulk_CSW.bCSW_Status = CSW_PHASE_ERROR;
217 2 break;
218 2
219 2 case CASE9: /* Ho>Dn*/
220 2 case CASE11: /* Ho>Do*/
221 2 //BOTBF_StallAtBulkOut = 1; // may or may-not
222 2 TPBulk_CSW.bCSW_Status = CSW_FAIL;//CSW_GOOD or CSW_FAIL
223 2 break;
224 2
225 2 case CASE10: /* Ho<>Di */
226 2 case CASE13: /* Ho<Do*/
227 2 //TBF_StallAtBulkIn = 1;// may or may-not
228 2 //TBF_StallAtBulkOut = 1;// may or may-not
229 2 TPBulk_CSW.bCSW_Status = CSW_PHASE_ERROR;
230 2 break;
231 2
232 2 case CASECBW: /* invalid CBW */
233 2 //BOTBF_StallAtBulkIn = 1; //
234 2 //BOTBF_StallAtBulkOut = 1;
235 2 TPBulk_CSW.bCSW_Status = CSW_PHASE_ERROR;
236 2 break;
237 2
238 2 case CASECMDFAIL:
239 2 BOTBF_StallAtBulkIn = 1;
240 2 TPBulk_CSW.bCSW_Status = CSW_FAIL;
241 2 break;
C51 COMPILER V7.06 TPBULK 02/17/2004 14:42:23 PAGE 5
242 2
243 2 default:
244 2 break;
245 2 }
246 1
247 1 TPBulk_CSW.dCSW_Signature = CSW_SIGNATURE; //0x55534253 CSW后固有的特征码
248 1 }
249
250
251 void TPBulk_CSWHandler( void ) //CSW处于理
252 {
253 1 if(BOTBF_StallAtBulkIn)
254 1 {
255 2 Hal4D12_SetEndpointStatus(5,1); //Bulk-In设置端点5状态为停止
256 2 TPBulk_CSW.dCSW_DataResidue += BOTXfer_wResidue;
257 2 TPBulk_CSW.dCSW_DataResidue = Hal4Sys_SwapINT32(TPBulk_CSW.dCSW_DataResidue);
258 2
259 2 Xfer_Space &= BOTXFERSPACE_MASK;
260 2 BOTXfer_atRAM = 1;
261 2 BOTXfer_pData = (PINT8) &TPBulk_CSW; // CSW数据指针
262 2 BOTXfer_wResidue = sizeof(CSW); // CSW包的数据长度
263 2 BOTFSMstate = USBFSM4BOT_CSW; // 设置CSW包传输标志位
264 2 }
265 1
266 1 else if(BOTBF_StallAtBulkOut)
267 1 {
268 2 Hal4D12_SetEndpointStatus(4,1); //Bulk-Out设置端点4状态为停止
269 2 BOTFSMstate = USBFSM4BOT_STALL; // 设置端点4空闲标志位
270 2 }
271 1 else
272 1 {
273 2 TPBulk_CSW.dCSW_DataResidue += BOTXfer_wResidue;
274 2 TPBulk_CSW.dCSW_DataResidue = Hal4Sys_SwapINT32(TPBulk_CSW.dCSW_DataResidue); // 转换数据格式
275 2
276 2 Xfer_Space &= BOTXFERSPACE_MASK; // 清各传输地址标志位
277 2 BOTXfer_atRAM = 1; // 从RAM传输数据
278 2 BOTXfer_pData = (PINT8) &TPBulk_CSW; // 设置CSW包数据指针
279 2 BOTXfer_wResidue = sizeof(CSW); // CSW包数据长度
280 2 BOTFSMstate = USBFSM4BOT_CSW; // 设置CSW包传输标志位
281 2 }
282 1 }
283
284
285 /*
286 //*************************************************************************
287 //Bulk-Only TP - Class Request Handler
288 //*************************************************************************
289 */
290 void TPBulk_ResetATA(void)
291 {
292 1 Hal4ATA_IdeHardReset(); //IDE硬件复位
293 1 Chap9sup_SingleTransmitEP0(0,0);
294 1 }
295
296
297 void TPBulk_GetMaxLUN(void) //
298 {
299 1 // INT8 c = 0;
300 1 // Chap9sup_SingleTransmitEP0(&c,1);
301 1 Hal4D12_StallEP0(); //设端点0 停止
302 1 }
303
C51 COMPILER V7.06 TPBULK 02/17/2004 14:42:23 PAGE 6
304
305 /*
306 //*************************************************************************
307 //Bulk Only Transport support functions
308 //*************************************************************************
309 */
310 INT8 TPBulksup_ReadFrBOEP(INT8 Length) //批量读取数据
311 {
312 1 if(Length>EP2_PACKET_SIZE)
313 1 Length = EP2_PACKET_SIZE;
314 1 if( BOTXfer_atROM )
315 1 Length = Hal4D12_ReadEPAtCode(4,Length); //读取数据到ROM(实际丢弃)
316 1 else if(BOTXfer_atRAM)
317 1 Length = Hal4D12_ReadEndpoint(4,Length,BOTXfer_pData);
318 1 return Length; //返回已读数据长度
319 1 }
320
321
322 INT8 TPBulksup_WriteToBIEP(INT8 Length) //批量发送数据
323 {
324 1 if(Length > EP2_PACKET_SIZE)
325 1 Length = EP2_PACKET_SIZE;
326 1
327 1 if( BOTXfer_atROM )
328 1 Length = Hal4D12_WriteEPAtCode(5,Length,BOTXfer_pData);
329 1 else if(BOTXfer_atRAM)
330 1 Length = Hal4D12_WriteEndpoint(5,Length,BOTXfer_pData );
331 1 return Length; //返回已写数据长度
332 1 }
333
334
335 BOOLEAN TPBulksup_IsCBWValid( void) //CBW是否有效,效检
336 {
337 1 TPBulk_CBW.dCBW_DataXferLen = Hal4Sys_SwapINT32(TPBulk_CBW.dCBW_DataXferLen);
338 1
339 1 if( TPBulk_CBW.dCBW_Signature == CBW_SIGNATURE \
340 1 && TPBulk_CBW.bCBW_LUN <= 1 \
341 1 && TPBulk_CBW.bCBW_CDBLen <= MAX_CDBLEN )
342 1 return(1); //有效返回1
343 1 else
344 1 return(0); //无效返回0
345 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 412 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -