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

📄 msptp.c

📁 MSTAR03的数码相框的代码
💻 C
📖 第 1 页 / 共 3 页
字号:

	  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 + -