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

📄 dpof.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 5 页
字号:

               DOS_SetCurrDir(G_DPOF_Dir0Cluster);                                

               //printf("No JOB section exist,so delete DPOF file\n");

               DPOF_DeleteFile(name);

               DOS_SetCurrDir(G_USR_Dir1Cluster);
          }
     }

     Dpof_File_Modify = 0;

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_DeleteFile
//-----------------------------------------------------------------------------
UCHAR DPOF_DeleteFile(UCHAR *name) USING_0
{
     UCHAR sts;

	G_Card_UI_Action = 0;
        
     sts = File_Delete1File(K_DOS_MatchName, (ULONG)name);

     G_Card_UI_Action = 0;
        
     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_CheckDpofJobFieldExist
//-----------------------------------------------------------------------------
UCHAR DPOF_CheckDpofJobFieldExist(USHORT ImgSrcIdx) USING_0
{
     UCHAR sts = FALSE;
     UCHAR tmp1,tmp2;

     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + (((ULONG)ImgSrcIdx) - 1) * 3),K_SDRAM_Prefetch);

     L2_DRAMReadWord(&tmp1,&tmp2);     

     if ((tmp1 == 0xff) && (tmp2 == 0xff))
     { 
          sts = TRUE;
     }

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_CheckDpofJobFileExist
//-----------------------------------------------------------------------------
UCHAR DPOF_CheckDpofJobFileExist(USHORT ImgSrcIdx) USING_0
{
     UCHAR sts = FALSE;
     UCHAR tmp1,tmp2;

     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + ((ULONG)ImgSrcIdx - 1) * 3),K_SDRAM_Prefetch);

     L2_DRAMReadWord(&tmp1,&tmp2);     

     if (tmp1 == 0xff)
     { 
          sts = TRUE;
     }

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_RecordDpofJobParameter
//-----------------------------------------------------------------------------
void DPOF_RecordDpofJobParameter(USHORT ImgSrcIdx,/*USHORT PrtPid,*/UCHAR PrtTyp,USHORT PrtQty,UCHAR ImgFmt) USING_0
{     
     //printf("Record file index %d\n",ImgSrcIdx);
     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + ((ULONG)ImgSrcIdx - 1) * 3),K_SDRAM_NoPrefetch);

     L2_DRAMWriteWord(0xff,0xff);     

     L2_DRAMWriteWord(PrtTyp,ImgFmt);     

     L2_DRAMWriteWord((UCHAR)(PrtQty & 0x00ff),(UCHAR)((PrtQty & 0xff00) >> 8));
}

//-----------------------------------------------------------------------------
//DPOF_EraseDpofJobParameter
//-----------------------------------------------------------------------------
//version4.0@ada@0513 for DPOF
void DPOF_EraseDpofJobParameter(USHORT ImgSrcIdx,UCHAR File_Still_Exist) USING_0
{
     UCHAR tmp1,tmp2;

     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + ((ULONG)ImgSrcIdx - 1) * 3 + 1),K_SDRAM_Prefetch);
     L2_DRAMReadWord(&tmp1,&tmp2);     

     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + ((ULONG)ImgSrcIdx - 1) * 3),K_SDRAM_NoPrefetch);

     if (File_Still_Exist)
     {
          L2_DRAMWriteWord(0xff,0x00);     
          L2_DRAMWriteWord(0x00,tmp2);     
     }
     else
     {
          L2_DRAMWriteWord(0x00,0x00);     
          L2_DRAMWriteWord(0x00,0x00);     
     }     

     L2_DRAMWriteWord(0x00,0x00);
}

//-----------------------------------------------------------------------------
//DPOF_ReadDpofJobParameter
//-----------------------------------------------------------------------------
UCHAR DPOF_ReadDpofJobParameter(USHORT ImgSrcIdx,/*USHORT *PrtPid,*/UCHAR *PrtTyp,USHORT *PrtQty,UCHAR *ImgFmt) USING_0
{
     UCHAR sts = FALSE;
     UCHAR tmp1,tmp2;

     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + ((ULONG)ImgSrcIdx - 1) * 3),K_SDRAM_Prefetch);

     L2_DRAMReadWord(&tmp1,&tmp2);     

     if ((tmp1 == 0xff) && (tmp2 == 0xff))
     {
          //version4.0@ada@0513 for DPOF
          L2_DRAMReadWord(&tmp1,&tmp2);     
          *PrtTyp = tmp1;
          *ImgFmt = tmp2;
          L2_DRAMReadWord(&tmp1,&tmp2);  
          *PrtQty = ((USHORT)tmp1) | (((USHORT)tmp2) << 8);
          sts = TRUE;
     }
     else
     {
          *PrtTyp = 0;
          *ImgFmt = 0;
          *PrtQty = 0;
     }

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_SelectSunplusImage
//-----------------------------------------------------------------------------
//version4.0@ada@0513 for DPOF
UCHAR DPOF_SelectSunplusImage(USHORT ImgSrcIdx,/*USHORT PrtPid,*/UCHAR PrtTyp,USHORT PrtQty/*,UCHAR ImgFmt*/) USING_0
{
     UCHAR sts = FALSE;

     UCHAR tmp1,tmp2,tmp3;
     UCHAR ImgFmt;

     //patch4.4@ada@DPOF begin
     USHORT Quantity;
     UCHAR tmp4,tmp5;
     //patch4.4@ada@DPOF end
     
     L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + (((ULONG)ImgSrcIdx) - 1) * 3),K_SDRAM_Prefetch);
     L2_DRAMReadWord(&tmp1,&tmp2);   
     L2_DRAMReadWord(&tmp3,&ImgFmt);   

     //patch4.4@ada@DPOF begin
     L2_DRAMReadWord(&tmp4,&tmp5);  
     Quantity = ((USHORT)tmp4) | (((USHORT)tmp5) << 8);
     //patch4.4@ada@DPOF begin

     if ((TotalSunplusDpofFileNumber < 999) && (DPOF_CheckDpofJobFieldExist(ImgSrcIdx) == FALSE) && (tmp1 == 0xff) && (tmp2 == 0x00))
     {
          DPOF_RecordDpofJobParameter(ImgSrcIdx,/*PrtPid,*/PrtTyp,PrtQty,ImgFmt);

          Dpof_File_Modify = 1;

          //patch4.4@ada@DPOF begin
          if (Quantity == 0)
          {
               //printf("Select file %d\n",ImgSrcIdx);
               TotalSunplusDpofFileNumber++;
          }
          //patch4.4@ada@DPOF end

          sts = TRUE;
     }

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_DeselectSunplusImage
//-----------------------------------------------------------------------------
UCHAR DPOF_DeselectSunplusImage(USHORT ImgSrcIdx,UCHAR File_Still_Exist) USING_0
{
     UCHAR sts = FALSE;

     if ((TotalSunplusDpofFileNumber > 0) && (DPOF_CheckDpofJobFieldExist(ImgSrcIdx) == TRUE))
     {
          DPOF_EraseDpofJobParameter(ImgSrcIdx,File_Still_Exist);

          TotalSunplusDpofFileNumber--;
          Dpof_File_Modify = 1;         
          sts = TRUE;
     }

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_ModifySunplusImagePRTQTY
//-----------------------------------------------------------------------------
UCHAR DPOF_ModifySunplusImagePRTQTY(USHORT ImgSrcIdx,USHORT PrtQty) USING_0
{
     UCHAR sts = FALSE;

     if ((TotalSunplusDpofFileNumber > 0) && (DPOF_CheckDpofJobFieldExist(ImgSrcIdx) == TRUE))
     {
          L2_DRAMSetStartAddr((K_SDRAM_DPOF3_BufAddr + ((ULONG)ImgSrcIdx - 1) * 3 + 2),K_SDRAM_NoPrefetch);  

          L2_DRAMWriteWord((UCHAR)(PrtQty & 0x00ff),(UCHAR)((PrtQty & 0xff00) >> 8));
          Dpof_File_Modify = 1;
          //printf("Modify PrtQty success\n");
          sts = TRUE;
     }

     return sts;
}

//-----------------------------------------------------------------------------
//DPOF_CopyJobSection
//-----------------------------------------------------------------------------
void DPOF_CopyJobSection(ULONG JobSection_StartDramAddr,ULONG JobSection_Length,ULONG ByteCount) USING_0
{
     UCHAR tmp1,tmp2,tmp3,tmp4;
     ULONG k = 0;

     Other_DpofJobSection_Exist = 1;

     if (NewDpofFileByteCount & 0x00000001)
     {
          if (ByteCount & 0x00000001)
          {        
               //Copy the first byte tmp2
               L2_DRAMSetStartAddr(JobSection_StartDramAddr,K_SDRAM_Prefetch);
               L2_DRAMReadWord(&tmp1,&tmp2);

               L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_Prefetch);
               L2_DRAMReadWord(&tmp3,&tmp4);

               L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_NoPrefetch);
               L2_DRAMWriteWord(tmp3,tmp2);

               //Next source address is wordboundary
               JobSection_StartDramAddr += 1; 
               JobSection_Length -= 1;

               //Next destination address is also wordboundary
               NewDpofFileByteCount += 1;
               NewDpofFileDramAddr = K_SDRAM_DPOF4_BufAddr + (NewDpofFileByteCount >> 1);

               //Copy the rest from wordboundary start-address area
               L2_DoDRAMDMA((JobSection_StartDramAddr * 2),(NewDpofFileDramAddr * 2),(((JobSection_Length + 1) >> 1) << 1));
               
               NewDpofFileByteCount += JobSection_Length;
               NewDpofFileDramAddr = K_SDRAM_DPOF4_BufAddr + (NewDpofFileByteCount >> 1);
          }
          else
          {
               if (JobSection_Length & 0x00000001)
               {
                    while ((JobSection_Length - 1) > 0)
                    {
                         //Copy the first byte tmp2
                         L2_DRAMSetStartAddr(JobSection_StartDramAddr,K_SDRAM_Prefetch);
                         L2_DRAMReadWord(&tmp1,&tmp2);
          
                         L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_Prefetch);
                         L2_DRAMReadWord(&tmp3,&tmp4);
          
                         L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_NoPrefetch);
                         L2_DRAMWriteWord(tmp3,tmp1);
                         L2_DRAMWriteWord(tmp2,0x00);

                         //Next source address is not wordboundary
                         JobSection_StartDramAddr += 1; 
                         JobSection_Length -= 2;

                         //Next destination address is not wordboundary
                         NewDpofFileByteCount += 2;
                         NewDpofFileDramAddr = K_SDRAM_DPOF4_BufAddr + (NewDpofFileByteCount >> 1);
                    }

                    //Copy the last byte tmp1
                    L2_DRAMSetStartAddr(JobSection_StartDramAddr,K_SDRAM_Prefetch);
                    L2_DRAMReadWord(&tmp1,&tmp2);
          
                    L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_Prefetch);
                    L2_DRAMReadWord(&tmp3,&tmp4);
         
                    L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_NoPrefetch);
                    L2_DRAMWriteWord(tmp3,tmp1);

                    //Next destination address is wordboundary
                    NewDpofFileByteCount += 1;               
                    NewDpofFileDramAddr = K_SDRAM_DPOF4_BufAddr + (NewDpofFileByteCount >> 1);
               }
               else
               {
                    while (JobSection_Length > 0)
                    {
                         //Copy the first byte tmp2
                         L2_DRAMSetStartAddr(JobSection_StartDramAddr,K_SDRAM_Prefetch);
                         L2_DRAMReadWord(&tmp1,&tmp2);
          
                         L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_Prefetch);
                         L2_DRAMReadWord(&tmp3,&tmp4);
          
                         L2_DRAMSetStartAddr(NewDpofFileDramAddr,K_SDRAM_NoPrefetch);
                         L2_DRAMWriteWord(tmp3,tmp1);
                         L2_DRAMWriteWord(tmp2,0x00);

                         //Next source address is wordboundary
                         JobSection_StartDramAddr += 1; 
                         JobSection_Length -= 2;

                         //Next destination address is not wordboundary
                         NewDpofFileByteCount += 2;
                         NewDpofFileDramAddr = K_SDRAM_DPOF4_BufAddr + (NewDpofFileByteCount >> 1);
                    }
               }
          }
     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -