📄 msptp.c
字号:
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 + -