📄 burn.cpp
字号:
udf_file.F_Lengh=(RMuint32)length; udf_file.Attribute=0x04; RMMemcpy(tmp_ptr+20+numofItems*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } //Write ALBUM.PVM RMMemset(&udf_file,0x00,60); RMCopyAscii(fullpath,"/tmp/itri_tmp.txt"); //RMMemset(udf_file.F_name,0x00,sizeof(typeUdfPath)); RMCopyAscii(udf_file.F_name,"ALBUM.PVM"); udf_file.FileAddr=itri_NWA; length=Write_ALBUM_PVM(tmp_ptr+20,numofItems+6);//FileNum); udf_file.F_Lengh=(RMuint32)length; udf_file.Attribute=0x04; RMMemcpy(tmp_ptr+20+(numofItems+1)*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } RMMemset(&udf_file,0x00,60); RMCopyAscii(fullpath,"/tmp/itri_tmp.txt"); RMCopyAscii(udf_file.F_name,"ASSET_LIST.PVM"); udf_file.FileAddr=itri_NWA; length=Write_AssetList_PVM(); udf_file.F_Lengh=(RMuint32)length; udf_file.Attribute=0x04; RMMemcpy(tmp_ptr+20+(numofItems+2)*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } //Write_PASS_PICTURES.PVM ICB=37 RMMemset(&udf_file,0x00,60); RMCopyAscii(fullpath,"/tmp/itri_tmp.txt"); RMCopyAscii(udf_file.F_name,"PASS_PICTURES.PVM"); udf_file.FileAddr=itri_NWA; length=Write_Pictures_PVM(tmp_ptr+20,numofItems+6);//AssetList_PVM();Write_AssetList_PVM( udf_file.F_Lengh=(RMuint32)length; udf_file.Attribute=0x04; RMMemcpy(tmp_ptr+20+(numofItems+3)*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } //Write_PASS_AUDIO.PVM ICB=38 RMMemset(&udf_file,0x00,60); RMCopyAscii(fullpath,"/tmp/itri_tmp.txt"); // RMMemset(udf_file.F_name,0x00,sizeof(typeUdfPath)); RMCopyAscii(udf_file.F_name,"PASS_AUDIO.PVM"); udf_file.FileAddr=itri_NWA; length=Write_Audio_PVM(tmp_ptr+20,numofItems+6);//AssetList_PVM();Write_AssetList_PVM( udf_file.F_Lengh=(RMuint32)length; udf_file.Attribute=0x04; RMMemcpy(tmp_ptr+20+(numofItems+4)*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } //Write_PASS_MOVIES.PVM ICB=39 RMMemset(&udf_file,0x00,60); RMCopyAscii(fullpath,"/tmp/itri_tmp.txt"); //RMMemset(udf_file.F_name,0x00,sizeof(typeUdfPath)); RMCopyAscii(udf_file.F_name,"PASS_MOVIES.PVM"); udf_file.FileAddr=itri_NWA; length=Write_Movies_PVM(tmp_ptr+20,numofItems+6);//AssetList_PVM();Write_AssetList_PVM( udf_file.F_Lengh=(RMuint32)length; udf_file.Attribute=0x04; RMMemcpy(tmp_ptr+20+(numofItems+5)*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } RMMemset(&udf_file,0x00,60); printf("1 @@@@@@@@ Test PASS PVM NWA @@@@@@@@@@@@\n"); for (RMuint16 i=numofItems;i<numofItems+6;i++) { RMMemcpy(&udf_file,tmp_ptr+20+i*60,60); printf("F_name=%s ,NWA=%ld,length=%ld \n",udf_file.F_name,udf_file.FileAddr,udf_file.F_Lengh); } return RM_OK;}RMstatus Type2WriteDisc(RMuint16 numofItems,RMuint8 type){ RMstatus status; typeUdfFile udf_file; RMbool itri_pattern=FALSE; //RMuint32 tmp_blks; RMuint16 i,FileNum; RMuint8 isMultiFlag=0; RMascii fullpath[80]; RMuint32 FileBlks,total_blk,Vol_Blocks; RMuint8 *ptr1=NULL,*tmp_ptr=NULL; ptr1=buf_ptr; tmp_ptr=CurPtr; //struct timespec usleep_req={0,300000000}; RMMemset(ptr1,0x00,2048*6);RMMemset(tmp_ptr,0x00,2048*12); //璩囷拷妾旓拷濮嬶拷? itri_NWA PrevITRINWA=0;//NextWriteAddr; CurrentITRINWA=NextWriteAddr; itri_NWA=NextWriteAddr+700; //?PASS PVM 6?? FileNum=numofItems+6; global_blks=0; ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfilefirst; for (i=0;i<numofItems;i++)//tmp_nwa { RMMemset(&udf_file,0x00,60); RMCopyAscii(udf_file.F_name,ITRI_pnav->MyFavorfiletemp->name); udf_file.FileAddr=itri_NWA; //udf_file.FileAddr,udf_file.F_Lengh udf_file.F_Lengh=(RMuint32)ITRI_pnav->MyFavorfiletemp->size; udf_file.Attribute=type; RMMemcpy(tmp_ptr+20+i*60,&udf_file,60); if ((udf_file.F_Lengh)%2048==0) { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048; FileBlks=(udf_file.F_Lengh)/2048; //tmp_blks=tmp_blks+(udf_file.F_Lengh)/2048; global_blks=global_blks+(udf_file.F_Lengh)/2048; } else { itri_NWA=itri_NWA+(udf_file.F_Lengh)/2048+1; FileBlks=(udf_file.F_Lengh)/2048+1; global_blks=global_blks+(udf_file.F_Lengh)/2048+1; } printf("++++%d File=%s ,NWA=%ld ,Length=%ld(Blks)\n",i,udf_file.F_name,udf_file.FileAddr,FileBlks); ITRI_pnav->MyFavorfiletemp1 = ITRI_pnav->MyFavorfiletemp->next; ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfiletemp1; } WriteKODAKPVMFile(itri_pattern,tmp_ptr,numofItems); Vol_Blocks=1299+global_blks; total_blk=(20+ (FileNum)*60)/2048+1; RMMemcpy(tmp_ptr,ITRI_ID,10); RMMemcpy(tmp_ptr+10,&FileNum,2); RMMemcpy(tmp_ptr+12,&itri_NWA,4); RMMemcpy(tmp_ptr+16,&Vol_Blocks,4); isMultiFlag=0x01; UDF102_FS_Create(isMultiFlag,tmp_ptr,0); RMMemcpy(udf_ptr+120*2048,tmp_ptr,20+ FileNum*60); //UDF Start Addr=> itri_NWA=NextWriteAddr; printf("++++ Write 0~300 sectors UDF FileSystem ++++ \n"); itri_NWA=NextWriteAddr; for (i=0;i<10;i++) { //ITRI_WriteCommand(RMuint8 *itri_buf,RMuint32 NWA,RMuint16 transferLen) status=ITRI_WriteCommand(udf_ptr+61440*i,itri_NWA,30); if (status==RM_OK) itri_NWA+=30; } UDF102_File_ICB_Create(tmp_ptr); printf("++++ Write 300~700 UDF ICB Sectors +++++++\n"); for (i=0;i<13;i++) { status=ITRI_WriteCommand(udf_ptr+61440*i,itri_NWA,30); if (status==RM_OK) itri_NWA+=30; } status=ITRI_WriteCommand(udf_ptr+390*2048,itri_NWA,10); if (status==RM_OK) { itri_NWA+=10; printf("ITRI_WriteCommand() successfully\n"); } else {printf("ITRI_WriteCommand() FAIL\n");} //itri_NWA=NextWriteAddr+700;//UDF102_Reserved; //tmp_nwa=next_lba; ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfilefirst; for (i=0;i<numofItems;i++)//tmp_nwa { RMMemset(fullpath,0x00,80);RMMemset(&udf_file,0x00,60); RMCopyAscii(fullpath,ITRI_pnav->MyFavorfiletemp->path); RMAppendAscii(fullpath,ITRI_pnav->MyFavorfiletemp->name); RMMemcpy(&udf_file,tmp_ptr+20+i*60,60); FileBlks= ( (udf_file.F_Lengh%2048==0)?udf_file.F_Lengh/2048:udf_file.F_Lengh/2048+1); printf("%d Write AVP FIle:%s ,NWA=%ld ,Blks=%ld \n",i,udf_file.F_name,udf_file.FileAddr,FileBlks ); WriteSingleFile(fullpath,udf_file.FileAddr,udf_file.F_Lengh); ITRI_pnav->MyFavorfiletemp1 = ITRI_pnav->MyFavorfiletemp->next; ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfiletemp1; } WriteKODAKPVMFile2(tmp_ptr,numofItems); CloseDisc(); return RM_OK;}RMstatus ITRI_WriteCommand(RMuint8 *itri_buf,RMuint32 NWA,RMuint16 transferLen){ RMstatus status; struct READ_BUF_CAPA bc; RMbool isDiscReady; RMuint8 b3,b2,b1,b0; RMuint32 BlankBufLen; struct timespec usleep_req={0,300000000}; status=FVD_Write10(ITRI_context->disc,itri_buf,NWA,transferLen); while (status!=RM_OK) { status = RMFDiscIsReady (ITRI_context->disc, &isDiscReady); while ((status!=RM_OK)||(!isDiscReady)) status = RMFDiscIsReady (ITRI_context->disc, &isDiscReady); FVD_ReadBufCapacity(ITRI_context->disc,(RMuint8 *)&bc,sizeof(struct READ_BUF_CAPA)); b3=bc.BlankBufLen[0];b2=bc.BlankBufLen[1];b1=bc.BlankBufLen[2];b0=bc.BlankBufLen[3]; BlankBufLen=b3*16777216+b2*65536+b1*256+b0; while (BlankBufLen<128*2048) { RMFDiscIsReady (ITRI_context->disc, &isDiscReady); //FVD_SyncCache(ITRI_context->disc,0,0); nanosleep(&usleep_req,0); FVD_ReadBufCapacity(ITRI_context->disc,(RMuint8 *)&bc,sizeof(struct READ_BUF_CAPA)); b3=bc.BlankBufLen[0];b2=bc.BlankBufLen[1];b1=bc.BlankBufLen[2];b0=bc.BlankBufLen[3]; BlankBufLen=b3*16777216+b2*65536+b1*256+b0; } status=FVD_Write10(ITRI_context->disc,itri_buf,NWA,transferLen); //printf("@@@ Loop:%d ,retry=%ld @@@@\n",i,retry); } printf("ITRI_WriteCommand() ENTRY \n"); return status;}RMstatus Type4WriteDisc(RMuint16 numofItems,RMuint8 type){ RMuint8 b3,b2,b1,b0; RMuint8 itri_id[12],buf[128]; RMuint32 next_lba; RMMemset(pattern,0x00,2048*3); RMMemset(buf,0x00,128); FVD_ReadTrackInfo(ITRI_context->disc,0x01,numofSessions-1,buf); b3=buf[8];b2=buf[8];b1=buf[10];b0=buf[11]; next_lba=b3*16777216+b2*65536+b1*256+b0; printf("Prev. Session Next Writable Address=%ld \n",next_lba); PrevITRINWA=CurrentITRINWA; CurrentITRINWA=NextWriteAddr; RMFDiscReadSector(ITRI_context->disc,(120+PrevITRINWA),3,2048,pattern); RMMemset(itri_id,0x00,12); RMMemcpy(itri_id,pattern,10); if (strcmp((char *)itri_id,ITRI_ID)==0) { ITRI_PatternedWriteSequence(numofItems,type); } else { ITRI_NO_PatternedWriteSequence(numofItems,type); } CloseDisc(); return RM_OK;}RMstatus ITRI_NO_PatternedWriteSequence(RMuint16 numofItems,RMuint8 type){ Type2WriteDisc(numofItems,type); return RM_OK;}RMstatus ITRI_PatternedWriteSequence(RMuint16 numofItems,RMuint8 type){ RMstatus status; RMuint16 i,PrevNum,FileNum; RMuint8 isMultiFlag=0; RMascii fullpath[80]; RMbool itri_pattern=TRUE; //struct timespec usleep_req={0,300000000}; typeUdfFile udf_file; RMuint32 Vol_Blocks,FileBlks; RMuint8 *ptr1=NULL,*tmp_ptr=NULL; ptr1=buf_ptr; tmp_ptr=CurPtr; RMMemset(ptr1,0x00,2048*6);RMMemset(tmp_ptr,0x00,2048*12); RMMemcpy(&FileNum,pattern+10,2);//NextWriteAddr //RMMemcpy(&next_lba,pattern+12,4); RMMemcpy(&Vol_Blocks,pattern+16,4); global_blks=Vol_Blocks; PrevNum=FileNum-6;// FileNum=PrevNum+numofItems+6; //tmp_nwa=NextWriteAddr+700;//next_lba; itri_NWA=NextWriteAddr+700;//UDF102_Reserved; ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfilefirst; //RMMemset(ptr1,0x00,numofItems*sizeof(typeUdfFile)); for (i=0;i<numofItems;i++)//tmp_nwa { RMMemset(&udf_file,0x00,60); RMCopyAscii(udf_file.F_name,ITRI_pnav->MyFavorfiletemp->name); udf_file.FileAddr=itri_NWA;// udf_file.F_Lengh=(RMuint32)ITRI_pnav->MyFavorfiletemp->size; (udf_file.F_Lengh%2048==0)?(itri_NWA+=(udf_file.F_Lengh/2048)):(itri_NWA+=(udf_file.F_Lengh/2048+1)); FileBlks=((udf_file.F_Lengh%2048==0)?(udf_file.F_Lengh/2048):(udf_file.F_Lengh/2048+1)); udf_file.Attribute=type; global_blks+=FileBlks; RMMemcpy(tmp_ptr+20+(PrevNum+i)*60,&udf_file,60); printf("%d th File=%s,NWA=%ld ,Length(Blks)=%ld \n",i,udf_file.F_name,udf_file.FileAddr,udf_file.F_Lengh); ITRI_pnav->MyFavorfiletemp1 = ITRI_pnav->MyFavorfiletemp->next; ITRI_pnav->MyFavorfiletemp = ITRI_pnav->MyFavorfiletemp1; } //???锟藉凡锟?锟斤拷 RMMemcpy(tmp_ptr+20,pattern+20,PrevNum*60); WriteKODAKPVMFile(itri_pattern,tmp_ptr,FileNum-6); RMMemcpy(tmp_ptr,ITRI_ID,10); RMMemcpy(tmp_ptr+10,&FileNum,2); RMMemcpy(tmp_ptr+12,&itri_NWA,4); RMMemcpy(tmp_ptr+16,&global_blks,4); isMultiFlag=0x01; UDF102_FS_Create(isMultiFlag,tmp_ptr,NextWriteAddr); RMMemcpy(udf_ptr+120*2048,tmp_ptr,20+FileNum*60); //?瀵
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -