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

📄 halscsi.lst

📁 威望公司MP3 + USB MCU 的参考软件
💻 LST
📖 第 1 页 / 共 2 页
字号:
 210   1              //////////////////////////////////////
 211   1      //      if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 212   1              epBulkSend((BYTE *)&TPBulk_CBW,31);
 213   1      
 214   1              CSWRcv();
 215   1      
 216   1      //      return TRUE;
 217   1      #undef cdbTestUnit
 218   1      ////////////////////////////
 219   1      }
 220          
 221          /*
 222          unsigned char SPC_LockMedia(void)
 223          {
 224          #define cdbLockSPC RBC_CDB.SpcCdb_Remove        
 225                  //unsigned char retStatus=FALSE;
 226                  TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 227                  TPBulk_CBW.dCBW_Tag=0x60a624de;
 228                  TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 229                  TPBulk_CBW.bCBW_Flag=0x00;
 230                  TPBulk_CBW.bCBW_LUN=0;
 231                  TPBulk_CBW.bCBW_CDBLen=sizeof(MEDIA_REMOVAL_SPC);
 232                  ///////////////////////////////////////////
 233                  cdbLockSPC.OperationCode=SPC_CMD_PRVENTALLOWMEDIUMREMOVAL;
 234                  cdbLockSPC.Prevent=1;
 235                  ///////////////////////////////////////////
 236          //      if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 237                  if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
 238                          return FALSE;
 239                  DelayUs(5);
C51 COMPILER V8.01   HALSCSI                                                               04/17/2008 09:46:26 PAGE 5   

 240                  
 241                  if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 242                          return FALSE;
 243          #undef cdbLockSPC
 244          /////////////////////////////
 245                  return TRUE;
 246          }
 247          */
 248          void RBC_ReadCapacity(void)
 249          {
 250   1              DWORD blksize;
 251   1      
 252   1      #define cdbReadCap RBC_CDB.RbcCdb_ReadCapacity  
 253   1              //unsigned char retStatus=FALSE;
 254   1              CBWSetup(0x80, sizeof(READ_CAPACITY_RBC), 0x08000000 ); 
 255   1              /////////////////////////////////////
 256   1              memclr(&cdbReadCap, sizeof(READ_CAPACITY_RBC));
 257   1              cdbReadCap.OperationCode=RBC_CMD_READCAPACITY;
 258   1              /////////////////////////////////////
 259   1              epBulkSend((BYTE *)&TPBulk_CBW,31);
 260   1              
 261   1      
 262   1              usbstack.bRdFlag = RD_FLAG_BUF;
 263   1              epBulkRcv(DBUF,8);
 264   1      
 265   1              blksize = *((DWORD *)(&DBUF[4]));//(DBUF[4]<<24)|(DBUF[5]<<16)|(DBUF[6]<<8)|(DBUF[7]<<0);
 266   1              UartOutText("bulk size:"); UartOutValue(blksize, 8);
 267   1              halUsbPhyBlksize(blksize);
 268   1      #if (UART_DEBUG == UART_DEBUG_ENABLE)
              {
                      DWORD maxlba;
                      maxlba = *((DWORD *)(&DBUF[0])); //(DBUF[0]<<24)|(DBUF[1]<<16)|(DBUF[2]<<8)|(DBUF[3]<<0);
                      UartOutText("ReadCapacity_MaxLba: "); UartOutValue(maxlba, 8);  
                      UartOutText("ReadCapacity_BlkSize: "); UartOutValue(blksize, 8);                
              }
              #endif
 276   1      
 277   1              CSWRcv();
 278   1      
 279   1      //      return TRUE;
 280   1      #undef cdbReadCap
 281   1      }
 282          
 283          //lba, offset: Figure out the data to be read. The usb device will transfer the whole sector(maybe > 512B)
             - according lba.
 284          //                But only 512B in this sector will be used accroding offset.
 285          //flag: read to buffer, or read to mp3 decode buffer(HW) 
 286          BYTE RBC_ReadOneSec(DWORD lba, BYTE *pBuffer, BYTE flag, BYTE offset)
 287          {
 288   1      #define cdbRead RBC_CDB.RbcCdb_Read     
 289   1              BYTE cnt, i;
 290   1              bXXGFlags.bIN_ISR = 0x0;
 291   1              //usbstack.dwLba = lba;
 292   1      
 293   1              //unsigned char retStatus=FALSE;
 294   1              CBWSetup(0x80, sizeof(READ_RBC), SwapINT32(usbstack.wPhyBlkSize) );             
 295   1              /////////////////////////////////////
 296   1              cdbRead.OperationCode=RBC_CMD_READ10;
 297   1              cdbRead.VendorSpecific=0;
 298   1              cdbRead.LBA.LBA_W32=lba; 
 299   1              cdbRead.XferLength=0x1;
 300   1              //cdbRead.Reserved1[0]=0;
C51 COMPILER V8.01   HALSCSI                                                               04/17/2008 09:46:26 PAGE 6   

 301   1              //cdbRead.Reserved1[1]=0; 
 302   1              //cdbRead.Reserved1[2]=0x40;
 303   1              //////////////////////////////////////
 304   1      if(flag == RBC_READ_BUF){
 305   2              //UartOutText("-I-: /*-FAT-*/");
 306   2              //UartOutText("-I-: offset=");UartOutValue(offset, 2);
 307   2              //UartOutText("-I-: lba=");UartOutValue(lba, 2);
 308   2              epBulkSend((BYTE *)&TPBulk_CBW,31);
 309   2      
 310   2              //cnt = 1<<(usbstack.bPhyBlkSizeExp - BLKSIZE_512_EXP);
 311   2              cnt = usbstack.bMaxOffset;
 312   2              for(i=0; i<=cnt; i++){ 
 313   3                      if(i==offset){
 314   4                              usbstack.bRdFlag = RD_FLAG_BUF;
 315   4                      }else{
 316   4                              usbstack.bRdFlag = RD_FLAG_TEMP;
 317   4                              bXXGFlags.bIN_ISR = 0x0;
 318   4                      }
 319   3                      epBulkRcv(pBuffer,512);
 320   3              }       
 321   2      
 322   2              CSWRcv();
 323   2      }else{//RBC_READ_MP3
 324   2              //UartOutText("-I-: /*-MP3-*/");
 325   2              //UartOutText("-I-: offset=");UartOutValue(offset, 2);
 326   2              //UartOutText("-I-: lba=");UartOutValue(lba, 2);
 327   2              //UartOutText("-I-: bPhyBlkSizeExp=");UartOutValue(usbstack.bPhyBlkSizeExp, 2); 
 328   2              usbstack.bOffset = offset;
 329   2              if(offset == 0){
 330   3                      epBulkSend((BYTE *)&TPBulk_CBW,31);
 331   3              }
 332   2      
 333   2              bXXGFlags.bIN_ISR = 0x1;
 334   2              epBulkRcv(pBuffer,512);
 335   2      
 336   2              if(offset == usbstack.bMaxOffset) // the last 512B block in this physical sector.
 337   2                      CSWRcv();
 338   2      }
 339   1      
 340   1              return TRUE;
 341   1      #undef cdbRead
 342   1      /////////////////////////////
 343   1      }
 344          
 345          BYTE RBC_ReadFlush(BOOL bSkip)
 346          {
 347   1      #if 0
                      BYTE i;
              
                      bXXGFlags.bIN_ISR = 0x0;
                      usbstack.bRdFlag = RD_FLAG_TEMP;
              
                      if(usbstack.bOffset != usbstack.bMaxOffset){ // there are some 512B block in physical sector should be fl
             -ushed.
                              for(i=usbstack.bOffset; i<usbstack.bMaxOffset; i++){
                                      epBulkRcv(DBUF,512);
                              }               
                              CSWRcv();       
                      }
                      usbstack.bOffset = usbstack.bMaxOffset;
                      
                      return TRUE;
C51 COMPILER V8.01   HALSCSI                                                               04/17/2008 09:46:26 PAGE 7   

              #else
 363   1              BYTE byRet = TRUE;
 364   1              BYTE i;
 365   1              if(usbstack.bOffset != usbstack.bMaxOffset){ // there are some 512B block in physical sector should be fl
             -ushed.
 366   2                      if(bSkip){
 367   3                              bXXGFlags.bIN_ISR = 0x0;
 368   3                              usbstack.bRdFlag = RD_FLAG_TEMP;
 369   3                              for(i=usbstack.bOffset; i<usbstack.bMaxOffset; i++){
 370   4                                      epBulkRcv(DBUF,512);
 371   4                              }               
 372   3                              CSWRcv();
 373   3                      }
 374   2                      else
 375   2                              byRet = FALSE;
 376   2              }
 377   1      
 378   1              return byRet;
 379   1      #endif
 380   1      }
 381          
 382          #ifdef WRITE_ENABLE_FLAG
              BYTE RBC_WriteOneSec(DWORD lba, BYTE *pBuffer)
              {
              #define cdbWrite RBC_CDB.RbcCdb_Write   
                      BYTE i;
                      //bXXGFlags.bIN_ISR = 0x0;
              
                      CBWSetup(0x0, sizeof(WRITE_RBC), SwapINT32(512) );                              
                      /////////////////////////////////////
                      cdbWrite.OperationCode=RBC_CMD_WRITE10;
                      cdbWrite.VendorSpecific=0;
                      cdbWrite.LBA.LBA_W32=lba;
                      cdbWrite.XferLength=0x01; // One sector
                      cdbWrite.Reserved2=0;
                      cdbWrite.Control=0;
                      //////////////////////////////////////
                      epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW));
                      
                      for(i=0; i<=usbstack.bMaxOffset; i++)
                              epBulkSend(pBuffer, 512);
                      
                      epBulkRcv((unsigned char *)&TPBulk_CSW,13);
                      
              #undef cdbWrite
              /////////////////////////////
                      return TRUE;
              }  
              #endif
 410          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    616    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     31      19
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -