⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tpbulk.lst

📁 D12 USB源代码 硬盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -