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

📄 msptp.c

📁 MSTAR03的数码相框的代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    tmpLength=tmpLength-12;
    pbDPSGetInfoParser(DPS_Type,tmpLength,(char *)pbData_Addr);
    return nStatus;
}

void pbDPSObjAdded(void)
{
    pbWritew(pbEvent_Addr,0x10);
    pbWritew(pbEvent_Addr+4,0x40020004);
    pbWritew(pbEvent_Addr+8,pbPTPEventTranID);
    pbWritew(pbEvent_Addr+12,pbPTPEventObjHdle);
    SDRAM2USB_Int(pbEvent_Addr,0x10);
}

void pbDPSReqObjTran(void)
{
    pbWritew(pbEvent_Addr,0x10);
    pbWritew(pbEvent_Addr+4,0x40090004);
    pbWritew(pbEvent_Addr+8,pbPTPEventTranID);
    pbWritew(pbEvent_Addr+12,pbPTPEventObjHdle);
    SDRAM2USB_Int(pbEvent_Addr,0x10);
}

void pbDPSObjRem(void)
{
    pbWritew(pbEvent_Addr,0x10);
    pbWritew(pbEvent_Addr+4,0x40030004);
    pbWritew(pbEvent_Addr+8,pbPTPEventTranID);
    pbWritew(pbEvent_Addr+12,pbPTPEventObjHdle);
    SDRAM2USB_Int(pbEvent_Addr,0x10);
}

void pbDPSGetObjCmd(__u8 Optype)
{
    __u32 i;
	__u32 mmaxcnt;
	__u8 rem;

    pbPTPObjHdle=pbDPSGCS.Param1;

    pbWritew(pbData_Addr+4,0x10090002);
    pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
    if (Optype==DPS_configurePrintService)
    {
    	pbWritew(pbData_Addr,sizeof(pbDPSConfPntServ)+12);
        for(i=0;i<sizeof(pbDPSConfPntServ);i++)
            pbWriteb(pbData_Addr+i+12,pbDPSConfPntServ[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(pbDPSConfPntServ)+12);
#else
        mmaxcnt=sizeof(pbDPSConfPntServ)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }else if (Optype==DPS_GetDevice_Sts)
    {
    	pbWritew(pbData_Addr,sizeof(pbDPSGetDevStatus)+12);
        for(i=0;i<sizeof(pbDPSGetDevStatus);i++)
            pbWriteb(pbData_Addr+i+12,pbDPSGetDevStatus[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(pbDPSGetDevStatus)+12);
#else
        mmaxcnt=sizeof(pbDPSGetDevStatus)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }else if (Optype==DPS_Device_Sts)
    {
    	pbWritew(pbData_Addr,sizeof(DPSDevStatus)+12);
        for(i=0;i<sizeof(DPSDevStatus);i++)
            pbWriteb(pbData_Addr+i+12,DPSDevStatus[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(DPSDevStatus)+12);
#else
        mmaxcnt=sizeof(DPSDevStatus)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }else if (Optype==DPS_Job_Sts)
    {
    	pbWritew(pbData_Addr,sizeof(pbDPSJobStatus)+12);
        for(i=0;i<sizeof(pbDPSJobStatus);i++)
            pbWriteb(pbData_Addr+i+12,pbDPSJobStatus[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(pbDPSJobStatus)+12);
#else
        mmaxcnt=sizeof(pbDPSJobStatus)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }else if (Optype==DPS_Start_Job)
    {
    	pbWritew(pbData_Addr,sizeof(pbDPSStrJob)+12);
        for(i=0;i<sizeof(pbDPSStrJob);i++)
            pbWriteb(pbData_Addr+i+12,pbDPSStrJob[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(pbDPSStrJob)+12);
#else
        mmaxcnt=sizeof(pbDPSStrJob)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }else if (Optype==DPS_Abort_Job)
    {
    	pbWritew(pbData_Addr,sizeof(pbDPSAbtJob)+12);
        for(i=0;i<sizeof(pbDPSAbtJob);i++)
            pbWriteb(pbData_Addr+i+12,pbDPSAbtJob[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(pbDPSAbtJob)+12);
#else
        mmaxcnt=sizeof(pbDPSAbtJob)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }else if (Optype==DPS_Continue_Job)
    {
    	pbWritew(pbData_Addr,sizeof(pbDPSContJob)+12);
        for(i=0;i<sizeof(pbDPSContJob);i++)
            pbWriteb(pbData_Addr+i+12,pbDPSContJob[i]);
#if 0
        SDRAM2USB_Bulk(pbData_Addr,sizeof(pbDPSContJob)+12);
#else
        mmaxcnt=sizeof(pbDPSContJob)+12;
        rem=mmaxcnt%64;
		mmaxcnt=mmaxcnt-rem;
		if (mmaxcnt>0)
            SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
		if (rem>0)
            SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
    }
}
/*
void FillData(__u16 DstOffset,__u16 SrcOffset, __u32 len)
{
  int i;
  //printf(" \r\n TxD[%x]=",SrcOffset);
  for(i=0;i<len;i++)
    {
            //printf("  %x",XBYTE[0x5000+SrcOffset+i]);
            pbWriteb(pbData_Addr+i+DstOffset,XBYTE[0x6000+SrcOffset+i]);
    }
}*/

int pbDPSGetPartObjCmd(void)
{
    __u32 tmpLen,tmplen1,tmplen2;
    int nStatus;
	__u32 mmaxcnt;
	__u32 rem;

    pbPTPObjHdle=pbDPSGCS.Param1;
    pbPTPObjOffset=pbDPSGCS.Param2;
    pbPTPObjMaxBytes=pbDPSGCS.Param3;
    nStatus=PTP_Rep_OK;
//#ifdef USB_DEBUG
    //printf("\r\n pbDPSSevSts=%x",pbDPSSevSts);
    //printf("\r\nPic_O = %x",pbPTPObjOffset);
    //printf("\r\nPic_S = %x ",pbPTPObjMaxBytes);
//#endif
	tmplen2=0;
    if (pbPntFile.ImgSrcPlace==_BaseBand_Source_Place)
    {
        tmpLen=pbPTPObjMaxBytes;
        tmplen1=pbPTPObjOffset;
        pbWritew(pbData_Addr,pbPTPObjMaxBytes+12);
        pbWritew(pbData_Addr+4,0x101B0002);
        pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
        tmpLen=tmpLen+12;

		if(pbDPSSevSts & 0x80)//printer error happen
		  return;

        if (tmpLen>PTP_TRANSFER_SIZE0)
        {
             //printf("\r\n 1",0);
             //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
             //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
	      GetPartHeaderTransfer=0;
             usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock+12),(PTP_TRANSFER_SIZE0-12));
             //CommC2X_compare((__u8 *)(Pic_addr+tmplen2),(__u8 *)(pbDataBlock+12),(PTP_DAT_BUFFER_SIZE-12));
             SDRAM2USB_Bulk(pbData_Addr,PTP_TRANSFER_SIZE0);
             //usbSDRAMCSDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock+12),(PTP_TRANSFER_SIZE-12));
             tmpLen=tmpLen-PTP_TRANSFER_SIZE0;
             tmplen1=tmplen1+PTP_TRANSFER_SIZE0-12;
	      tmplen2=tmplen2+PTP_TRANSFER_SIZE0-12;
			 //printf("\r\n len1_1=%x",tmpLen);
			 //printf("\r\n len2_1=%x",tmplen1);
        }else
        {
             //printf("\r\n 2",0);
             //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
             //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
	      GetPartHeaderTransfer=0;
             usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock+12),tmpLen);
             //CommC2X_compare((__u8 *)(Pic_addr+tmplen2),(__u8 *)(pbDataBlock+12),pbPTPObjMaxBytes);
#if 0
             SDRAM2USB_Bulk(pbData_Addr,tmpLen);
#else
             //usbSDRAMCSDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock+12),tmpLen);
             mmaxcnt=tmpLen;
             rem=mmaxcnt%64;
	      mmaxcnt=mmaxcnt-rem;
	      if (mmaxcnt>0)
                SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
	      if (rem>0)
                SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
#endif
             tmplen1=tmplen1+tmpLen;
	      tmplen2=tmplen2+tmpLen;
             tmpLen=0;
	      //printf("\r\n len1_2=%x",tmpLen);
	     //printf("\r\n len2_2=%x",tmplen1);
        }
		while(tmpLen>0)
		{

         /* artemis mark at 0606
		 if ((pbDevStsTfCheckFlag==1) && !(mailbox[MBR_DATA1]&0x01)&& !(NotifyusbConnect))
         {
        	//printf("\r\n !pbDPSSevSts=%x", pbDPSSevSts);
            pbTTXSendCommand(USB_REQUEST_CMD,STS_USB_REQ_DEVSTS,pbDPSSevSts);

            if(mailbox[MB_COMMAND]== mailbox[MBR_COMMAND])
			{
			  //printf("\r\n MBoxOk!",0);
              pbDevStsTfCheckFlag=0;
			}
         }*/
                 if(pbDPSSevSts & 0x80)//printer error happen
		  break;
		 if(tmpLen>PTP_TRANSFER_SIZE)
		 {
            if(((pbPntFile.ImgSrcAddr+tmplen1+PTP_TRANSFER_SIZE)< Limit_Address) && (pbPntFile.ImgSrcAddr+tmplen1 > 0x188E80) && ((pbPntFile.ImgSrcAddr+tmplen1)%4 ==0) )
	     //if(((pbPntFile.ImgSrcAddr+tmplen1+PTP_TRANSFER_SIZE)<0x7FFFFF ) && ((pbPntFile.ImgSrcAddr+tmplen1)%4 ==0) )
            {
              //printf("\r\n 3",0);
              //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
              //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
		      GetPartHeaderTransfer=1;
            //printf("\r\n DL1=%x", mmaxcnt);
      	      //printf("\r\n DL1=%x", tmplen1);
			  ////usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),PTP_TRANSFER_SIZE);
              ////SDRAM2USB_Bulk(pbData_Addr,PTP_TRANSFER_SIZE);
              //usbSDRAMCSDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),PTP_TRANSFER_SIZE);
        	  SDRAM2USB_Bulk((pbPntFile.ImgSrcAddr+tmplen1),PTP_TRANSFER_SIZE);
        	  GetPartHeaderTransfer=0;
			  tmpLen=tmpLen-PTP_TRANSFER_SIZE;
			  tmplen1=tmplen1+PTP_TRANSFER_SIZE;
			  //printf("\r\n len1_3=%x",tmpLen);
			  //printf("\r\n len2_3=%x",tmplen1);
            }
            else
            {
              //printf("\r\n 4",0);
              //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
              //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
      	       //printf("\r\n DL2=%x", tmplen1);
	       GetPartHeaderTransfer=0;
              usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),PTP_TRANSFER_SIZE);
              SDRAM2USB_Bulk(pbData_Addr,PTP_TRANSFER_SIZE);
	       tmpLen=tmpLen-PTP_TRANSFER_SIZE;
		tmplen1=tmplen1+PTP_TRANSFER_SIZE;
	       //printf("\r\n len1_4=%x",tmpLen);
		//printf("\r\n len2_4=%x",tmplen1);
            }
		 }
		 else
		 {
		  mmaxcnt=tmpLen;
		  rem=mmaxcnt%64;
		  mmaxcnt=mmaxcnt-rem;
		  if(mmaxcnt>0)
		  {
            if(((pbPntFile.ImgSrcAddr+tmplen1+mmaxcnt)< Limit_Address/*0x7FFFFF*/) && ((pbPntFile.ImgSrcAddr+tmplen1)%4==0) )
            {
              //printf("\r\n 5=%x",mmaxcnt);
              //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
              //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
		      GetPartHeaderTransfer=1;
            //printf("\r\n DL3=%x", mmaxcnt);
      	    //printf("\r\n DL4=%x", tmplen1);
			  ////usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),mmaxcnt);
              ////SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
            //usbSDRAMCSDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),mmaxcnt);
        	  SDRAM2USB_Bulk((pbPntFile.ImgSrcAddr+tmplen1),mmaxcnt);
        	  GetPartHeaderTransfer=0;
              tmplen1=tmplen1+mmaxcnt;
			  tmpLen=tmpLen-mmaxcnt;
			  //printf("\r\n len1_5=%x",tmpLen);
			  //printf("\r\n len2_5=%x",tmplen1);
            }
            else
            {
             //printf("\r\n 6",0);
             //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
             //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
 	      GetPartHeaderTransfer=0;
             usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),mmaxcnt);
             SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
             tmplen1=tmplen1+mmaxcnt;
	      tmpLen=tmpLen-mmaxcnt;
 			 //printf("\r\n len1_6=%x",tmpLen);
			 //printf("\r\n len2_6=%x",tmplen1);
            }
		  }
	     if(rem>0)
	     {
            //printf("\r\n 7",0);
            //printf("\r\n addr=%x",(__u16)((pbPntFile.ImgSrcAddr+tmplen1)>>16));
            //printf(" %x",(__u16)(pbPntFile.ImgSrcAddr+tmplen1));
		    //GetPartHeaderTransfer=1;
            //printf("\r\n DL5=%x", rem);
      	     //printf("\r\n DL6=%x", tmplen1);
	     GetPartHeaderTransfer=0;
            usbSDRAM2SDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),rem);
            SDRAM2USB_Bulk(pbData_Addr,rem);
            //usbSDRAMCSDRAM(pbPntFile.ImgSrcAddr+tmplen1,(__u32)USB_TTX_FIX_XDATA_ADDR+(__u16)(pbDataBlock),rem);
        	//SDRAM2USB_Bulk(pbPntFile.ImgSrcAddr+tmplen1,rem);
        	//GetPartHeaderTransfer=0;
            tmplen1=tmplen1+rem;
			tmpLen=tmpLen-rem;
 		    //printf("\r\n len1_7=%x",tmpLen);
			//printf("\r\n len2_7=%x",tmplen1);
		  }
		 }

		}
    }
    //printf("\r\n DL7=%x", tmpLen);
    return nStatus;
}

void pbDPSGetThumbCmd(__u32 ThumbLength)
{
    pbPTPObjHdle=pbDPSGCS.Param1;

    pbWritew(pbData_Addr,ThumbLength+12);
    pbWritew(pbData_Addr+4,0x100A0002);
    pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
    SDRAM2USB_Bulk(pbData_Addr,ThumbLength+12);
}

#ifdef BIG_ENDIAN
__u16 pbReadhw(__u16 addr)
{
   __u16 tmp=0;

   *((__u8 volatile *)&tmp+0)=*((__u8 volatile xdata *)addr+1);
   *((__u8 volatile *)&tmp+1)=*((__u8 volatile xdata *)addr+0);
   return tmp;
}

void pbWritehw(__u16 addr,__u16 x)
{
   *((__u8 volatile xdata *)addr+1)=*((__u8 volatile *)&x+0);
   *((__u8 volatile xdata *)addr+0)=*((__u8 volatile *)&x+1);
}

unsigned long pbReadw(__u16 addr)
{
   unsigned long tmp=0;

   *((__u8 volatile *)&tmp+0)=*((__u8 volatile xdata *)addr+3);
   *((__u8 volatile *)&tmp+1)=*((__u8 volatile xdata *)addr+2);
   *((__u8 volatile *)&tmp+2)=*((__u8 volatile xdata *)addr+1);
   *((__u8 volatile *)&tmp+3)=*((__u8 volatile xdata *)addr+0);
   return tmp;
}

void pbWritew(__u16 addr,unsigned long x)
{
   *((__u8 volatile xdata *)addr+3)=*((__u8 volatile *)&x+0);
   *((__u8 volatile xdata *)addr+2)=*((__u8 volatile *)&x+1);
   *((__u8 volatile xdata *)addr+1)=*((__u8 volatile *)&x+2);
   *((__u8 volatile xdata *)addr+0)=*((__u8 volatile *)&x+3);
}

#endif

⌨️ 快捷键说明

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