📄 msptp.c
字号:
printf("\r\n Data10=%x",pbReadb(pbCmd_Addr+16));
}
#else
pbDPSGCS.Length=pbReadw((__u16)&pbCmdBlock[0]);
pbDPSGCS.Type=pbReadhw((__u16)&pbCmdBlock[0]+4);
pbDPSGCS.OPCode=pbReadhw((__u16)&pbCmdBlock[0]+6);
pbDPSGCS.TransactionID=pbReadw((__u16)&pbCmdBlock[0]+8);
#endif
#ifdef USB_DEBUG
// printf("\r\npbCmd_Addr = %x ",pbCmd_Addr);
// printf("\r\n[0] = %x ",pbReadb(pbCmd_Addr));
// printf("\r\n[1] = %x ",pbReadb(pbCmd_Addr+1));
// printf("\r\n[2] = %x ",pbReadb(pbCmd_Addr+2));
// printf("\r\n[3] = %x ",pbReadb(pbCmd_Addr+3));
// printf("\r\n[12] = %x ",pbReadhw(pbCmd_Addr));
// printf("\r\n[1234] = %x ",pbReadw(pbCmd_Addr));
// printf("\r\nLength = %x ",pbDPSGCS.Length);
// printf("\r\nType = %x ",pbDPSGCS.Type);
// printf("\r\nOPCode = %x ",pbDPSGCS.OPCode);
// printf("\r\nTransactionID = %x ",pbDPSGCS.TransactionID);
#endif
pbDPSGCS.Length=pbDPSGCS.Length-12;
if (pbDPSGCS.Type==0x01) //cmd_blk
{
if (pbDPSGCS.Length>0)
{
pbDPSGCS.Param1=pbReadw(pbCmd_Addr+12);
pbDPSGCS.Length=pbDPSGCS.Length-4;
}
if (pbDPSGCS.Length>0)
{
pbDPSGCS.Param2=pbReadw(pbCmd_Addr+16);
pbDPSGCS.Length=pbDPSGCS.Length-4;
}
if (pbDPSGCS.Length>0)
{
pbDPSGCS.Param3=pbReadw(pbCmd_Addr+20);
pbDPSGCS.Length=pbDPSGCS.Length-4;
}
}
// if (!usbEP[2].FifoRemain)
// usbREG_WRITE8(USB_REG_RXCSR1, 0);
}
void pbDPSRespBlock(__u16 Response_Type,__u16 Response_Sts)
{
__u32 pbPTPRespStorID;
__u32 pbPTPRespPaObjHdle;
__u32 pbPTPRespObjHdle;
pbPTPRespStorID=0;
pbPTPRespPaObjHdle=0;
pbPTPRespObjHdle=0;
pbWritehw(pbResp_Addr+4,0x0003);
pbWritehw(pbResp_Addr+6,Response_Sts);
if (Response_Type==PTP_OP_GetNumObjects)//getobjnum
{
pbWritew(pbResp_Addr,0x00000010);
pbWritew(pbResp_Addr+8,pbDPSGCS.TransactionID);
if (DPS_ObjectInfo.ObjectFormat==0x00003002)
pbWritew(pbResp_Addr+12,0x00000001);
SDRAM2USB_Bulk(pbResp_Addr,0x10);
}else if (Response_Type==PTP_OP_SendObjectInfo)
{
pbWritew(pbResp_Addr,0x00000018);
pbWritew(pbResp_Addr+8,pbDPSGCS.TransactionID);
pbWritew(pbResp_Addr+12,pbPTPRespStorID);
pbWritew(pbResp_Addr+16,pbPTPRespPaObjHdle);
pbWritew(pbResp_Addr+20,pbPTPRespObjHdle);
SDRAM2USB_Bulk(pbResp_Addr,0x18);
}else if (Response_Type==PTP_OP_GetPartialObject)
{
pbWritew(pbResp_Addr,0x00000010);
pbWritew(pbResp_Addr+8,pbDPSGCS.TransactionID);
pbWritew(pbResp_Addr+12,pbPTPObjMaxBytes);
SDRAM2USB_Bulk(pbResp_Addr,0x10);
}
else
{
pbWritew(pbResp_Addr,0x0000000C);
pbWritew(pbResp_Addr+8,pbDPSGCS.TransactionID);
SDRAM2USB_Bulk(pbResp_Addr,0x0C);
}
}
void pbDPSGetDevInfoCmd(void)
{
__u8 i;
pbWritew(pbData_Addr,(sizeof(pbDPSDeviceInfo)+12));
pbWritew(pbData_Addr+4,0x10010002);
pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
for(i=0;i<sizeof(pbDPSDeviceInfo);i++)
{
pbWriteb(pbData_Addr+i+12,pbDPSDeviceInfo[i]);
}
#if 0
SDRAM2USB_Bulk(pbData_Addr,(sizeof(pbDPSDeviceInfo)+12));
#else
//printf("\r\n ck_0",0);
SDRAM2USB_Bulk(pbData_Addr,128);
//printf("\r\n ck_2",0);
SDRAM2USB_Bulk(pbData_Addr+128,23);
#endif
}
void pbDPSOpenSessCmd(void)
{
pbPTPSessionID=pbDPSGCS.Param1;
}
void pbDPSGetNumObjCmd(void)
{
DPS_ObjectInfo.StorageID=pbDPSGCS.Param1;
DPS_ObjectInfo.ObjectFormat=pbDPSGCS.Param2;
pbPTPHdleAssoc=pbDPSGCS.Param3;
}
void pbDPSGetObjHdlCmd(void)
{
pbPTPObjHdle=0x00000001;
DPS_ObjectInfo.StorageID=pbDPSGCS.Param1;
DPS_ObjectInfo.ObjectFormat=pbDPSGCS.Param2;
pbPTPHdleAssoc=pbDPSGCS.Param3;
pbWritew(pbData_Addr,20);
pbWritew(pbData_Addr+4,0x10070002);
pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
pbWritew(pbData_Addr+12,0x01);
pbWritew(pbData_Addr+16,pbPTPObjHdle);
SDRAM2USB_Bulk(pbData_Addr,20);
}
void pbDPSGetObjInfoCmd(__u8 Objtype,__u32 Objsize,__u32 StorID)
{
__u8 i;
pbPTPObjHdle=pbDPSGCS.Param1;
pbWritew(pbData_Addr,94);
pbWritew(pbData_Addr+4,0x10080002);
pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
pbWritew(pbData_Addr+12,StorID);
pbWritew(pbData_Addr+16,DPS_ObjectInfo.ObjectFormat);
pbWritew(pbData_Addr+20,Objsize);
for(i=0;i<40;i++)
pbWriteb(pbData_Addr+i+24,0);
pbWriteb(pbData_Addr+64,0x0D);
if (Objtype==DPS_OBJ_DDISCVRY)
{
for(i=0;i<26;i++)
pbWriteb(pbData_Addr+i+65,pbDPSDDISCVRY[i]);
}else if (Objtype==DPS_OBJ_DREQUEST)
{
for(i=0;i<26;i++)
pbWriteb(pbData_Addr+i+65,pbDPSDREQUEST[i]);
}else if (Objtype==DPS_OBJ_DRSPONSE)
{
for(i=0;i<26;i++)
pbWriteb(pbData_Addr+i+65,pbDPSDRSPONSE[i]);
}
for(i=0;i<3;i++)
pbWriteb(pbData_Addr+i+91,0);
#if 0
SDRAM2USB_Bulk(pbData_Addr,94);
#else
SDRAM2USB_Bulk(pbData_Addr,64);
SDRAM2USB_Bulk(pbData_Addr+64,30);
#endif
}
int pbDPSGetObjInfoFileCmd(void)
{
int nStatus;
__u32 tmpstrlength;
__u32 mmaxcnt;
__u8 rem;
tmpstrlength=0;
pbPTPObjHdle=pbDPSGCS.Param1;
nStatus=PTP_Rep_OK;
if (pbPTPObjHdle!=pbDPSGCS.Param1)
nStatus = PTP_Rep_InvalidObjHandle;
tmpstrlength=tmpstrlength+4;
pbWritew(pbData_Addr+4,0x10080002);
tmpstrlength=tmpstrlength+4;
pbWritew(pbData_Addr+8,pbDPSGCS.TransactionID);
tmpstrlength=tmpstrlength+4;
pbWritew(pbData_Addr+12,0x00010001);
tmpstrlength=tmpstrlength+4;
if (pbPntFile.ImgIsExif==1)
pbWritew(pbData_Addr+16,0x00003801);
else
pbWritew(pbData_Addr+16,0x00003808);
tmpstrlength=tmpstrlength+4;
pbWritew(pbData_Addr+20,pbPntFile.ImageCompressSize);
tmpstrlength=tmpstrlength+4;
if (pbPntFile.ImgIsExif==1)
pbWritehw(pbData_Addr+24,0x3808);
else
pbWritehw(pbData_Addr+24,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+26,(__u16)pbPntFile.ThmbCompressSize);
//pbWritehw(pbData_Addr+26,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+28,(__u16)(pbPntFile.ThmbCompressSize>>16));
//pbWritehw(pbData_Addr+28,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+30,(__u16)pbPntFile.ThmbPixWidth);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+32,(__u16)(pbPntFile.ThmbPixWidth>>16));
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+34,(__u16)pbPntFile.ThmbPixHeight);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+36,(__u16)(pbPntFile.ThmbPixHeight>>16));
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+38,(__u16)pbPntFile.ImgPixWidth);
//pbWritehw(pbData_Addr+38,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+40,(__u16)(pbPntFile.ImgPixWidth>>16));
//pbWritehw(pbData_Addr+40,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+42,(__u16)pbPntFile.ImgPixHeight);
//pbWritehw(pbData_Addr+42,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+44,(__u16)(pbPntFile.ImgPixHeight>>16));
//pbWritehw(pbData_Addr+44,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+46,0x0000);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+48,0x0000);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+50,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+52,0);
tmpstrlength=tmpstrlength+2;
pbWritehw(pbData_Addr+54,0);
tmpstrlength=tmpstrlength+2;
pbWritew(pbData_Addr+56,0);
tmpstrlength=tmpstrlength+4;
pbWritew(pbData_Addr+60,0);
tmpstrlength=tmpstrlength+4;
pbWriteb(pbData_Addr+tmpstrlength,0);
tmpstrlength=tmpstrlength+1;
pbWritehw(pbData_Addr+tmpstrlength,0);
tmpstrlength=tmpstrlength+2;
pbWriteb(pbData_Addr+tmpstrlength,0);
tmpstrlength=tmpstrlength+1;
pbWritehw(pbData_Addr+tmpstrlength,0);
tmpstrlength=tmpstrlength+2;
pbWritew(pbData_Addr,tmpstrlength);
#if 0
printf("\r\nGetOBJInfosize = %x ",pbReadw(pbData_Addr));
#endif
//SDRAM2USB_Bulk(pbData_Addr,tmpstrlength);
mmaxcnt=tmpstrlength;
rem=mmaxcnt%64;
mmaxcnt=mmaxcnt-rem;
if (mmaxcnt>0)
SDRAM2USB_Bulk(pbData_Addr,mmaxcnt);
if (rem>0)
SDRAM2USB_Bulk(pbData_Addr+mmaxcnt,rem);
return nStatus;
}
int pbDPSSndObjInfoCmd(__u8 Objtype)
{
__u8 i;
int nStatus;
__u32 tmpLength,tmpLength1,tmpaddr;
DPS_ObjectInfo.StorageID=pbDPSGCS.Param1;
pbPTPPaObjHdle=pbDPSGCS.Param2;
nStatus=PTP_Rep_OK;
/////// USB2SDRAM_Bulk(pbData_Addr,PTP_DAT_BUFFER_SIZE);
#if 0
USB2SDRAM_Bulk(pbData_Addr,0x5E);
#else
USB2SDRAM_Bulk(pbData_Addr,0x40);
tmpLength=pbReadw(pbData_Addr);
tmpLength1=tmpLength;
if (tmpLength1>=0x40)
{
tmpaddr=pbData_Addr+0x40;
tmpLength1=tmpLength1-0x40;
while(tmpLength1>0x40)
{
USB2SDRAM_Bulk(tmpaddr,0x40);
tmpLength1=tmpLength1-0x40;
tmpaddr=tmpaddr+0x40;
}
if (tmpLength1>0)
USB2SDRAM_Bulk(tmpaddr,tmpLength1);
}
#endif
// if (pbReadw(pbData_Addr)!=0x5E)
// nStatus= PTP_Rep_InvalidParameter;
if (pbReadw(pbData_Addr+4)!=0x100C0002)
{
nStatus= PTP_Rep_InvalidCodeFormat;
#ifdef USB_DEBUG
// printf("\r\nStsH = %x ",pbReadhw(pbData_Addr+4));
// printf("\r\nStsL = %x ",pbReadhw(pbData_Addr+6));
#endif
}
if (pbDPSGCS.TransactionID!=pbReadw(pbData_Addr+8))
nStatus= PTP_Rep_InvalidTransID;
if (DPS_ObjectInfo.StorageID!=pbReadw(pbData_Addr+12))
nStatus= PTP_Rep_InvalidStorID;
for(i=0;i<26;i++)
{
if (Objtype==DPS_OBJ_HDISCVRY)
{
if (pbReadb(pbData_Addr+i+65)!=pbDPSHDISCVRY[i])
nStatus= PTP_Rep_NoValidObjInfo;
}else if (Objtype==DPS_OBJ_HREQUEST)
{
if (pbReadb(pbData_Addr+i+65)!=pbDPSHREQUEST[i])
nStatus= PTP_Rep_NoValidObjInfo;
}else if (Objtype==DPS_OBJ_HRSPONSE)
{
if (pbReadb(pbData_Addr+i+65)!=pbDPSHRSPONSE[i])
nStatus= PTP_Rep_NoValidObjInfo;
}
}
return nStatus;
}
int pbDPSSndObjInCmd(void)
{
__u32 tmpLength,tmpLength1,tmpaddr;
int nStatus;
nStatus=PTP_Rep_OK;
//////// USB2SDRAM_Bulk(pbData_Addr,PTP_DAT_BUFFER_SIZE);
USB2SDRAM_Bulk(pbData_Addr,0x40);
tmpLength=pbReadw(pbData_Addr);
tmpLength1=tmpLength;
if (tmpLength1>=0x40)
{
tmpaddr=pbData_Addr+0x40;
tmpLength1=tmpLength1-0x40;
while(tmpLength1>0x40)
{
USB2SDRAM_Bulk(tmpaddr,0x40);
tmpLength1=tmpLength1-0x40;
tmpaddr=tmpaddr+0x40;
}
if (tmpLength1>0)
USB2SDRAM_Bulk(tmpaddr,tmpLength1);
}
if (pbReadw(pbData_Addr+4)!=0x100D0002)
nStatus= PTP_Rep_InvalidCodeFormat;
if (pbDPSGCS.TransactionID!=pbReadw(pbData_Addr+8))
nStatus= PTP_Rep_InvalidTransID;
tmpLength=tmpLength-12;
#ifdef USB_DEBUG
// printf("\r\nsize = %x ",tmpLength);
// printf("\r\naddr = %x ",pbData_Addr);
// printf("\r\n",0);
// while(tmpLength>0)
// {
// printf("%x ",pbReadb(pbData_Addr));
// tmpLength--;
// pbData_Addr++;
// }
// while(1);
#endif
pbDPSNotifyStsParser(tmpLength,(char *)pbData_Addr);
return nStatus;
}
int pbDPSSndObjOutCmd(__u8 DPS_Type)
{
__u32 tmpLength,tmpLength1,tmpaddr;
int nStatus;
nStatus=PTP_Rep_OK;
////// USB2SDRAM_Bulk(pbData_Addr,PTP_DAT_BUFFER_SIZE);
USB2SDRAM_Bulk(pbData_Addr,0x40);
tmpLength=pbReadw(pbData_Addr);
tmpLength1=tmpLength;
if (tmpLength1>=0x40)
{
tmpaddr=pbData_Addr+0x40;
tmpLength1=tmpLength1-0x40;
while(tmpLength1>0x40)
{
USB2SDRAM_Bulk(tmpaddr,0x40);
tmpLength1=tmpLength1-0x40;
tmpaddr=tmpaddr+0x40;
}
if (tmpLength1>0)
USB2SDRAM_Bulk(tmpaddr,tmpLength1);
}
if (pbReadw(pbData_Addr+4)!=0x100D0002)
nStatus=PTP_Rep_InvalidCodeFormat;
if (pbDPSGCS.TransactionID!=pbReadw(pbData_Addr+8))
nStatus=PTP_Rep_InvalidTransID;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -