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

📄 msdps.c

📁 MSTAR03的数码相框的代码
💻 C
字号:
#include "DrvOTGMain.h"
#include <string.h>
#include <stdlib.h>
#include "uart.h"


__u8 volatile pbAbortJobFlag;
__u8 volatile pbContinueJobFlag;
__u8 volatile pbSendOptionComFlag;

extern __u8 volatile usbConnectFlag;

PB_FileInfo pbPntFile;
PB_JobInfo pbJobInfo;

void pbDPSDiscovery(void)
{
    int tmp_Rep_Sts;

_Discy_Step1 :
    pbDPSGetDevInfoCmd();
    pbDPSRespBlock(PTP_OP_GetDevInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if(!usbConnectFlag)
        goto EndDiscovery;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetDevInfo)
        goto _Discy_Step1;
_Discy_Step2 :
    pbDPSOpenSessCmd();
    pbDPSRespBlock(PTP_OP_OpenSession,PTP_Rep_OK);

    pbDPSSetGCS();
    if(!usbConnectFlag)
        goto EndDiscovery;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_OpenSession)
        goto _Discy_Step2;
_Discy_Step3 :
    pbDPSGetNumObjCmd();
    pbDPSRespBlock(PTP_OP_GetNumObjects,PTP_Rep_OK);

    pbDPSSetGCS();
    if(!usbConnectFlag)
        goto EndDiscovery;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetNumObjects)
        goto _Discy_Step3;
_Discy_Step4 :
    pbDPSGetObjHdlCmd();
    pbDPSRespBlock(PTP_OP_GetObjectHandles,PTP_Rep_OK);

    pbDPSSetGCS();
    if(!usbConnectFlag)
        goto EndDiscovery;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectHandles)
        goto _Discy_Step4;
_Discy_Step5 :
    pbDPSGetObjInfoCmd(DPS_OBJ_DDISCVRY,0,0);
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if(!usbConnectFlag)
        goto EndDiscovery;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _Discy_Step5;
    tmp_Rep_Sts=pbDPSSndObjInfoCmd(DPS_OBJ_HDISCVRY);
#ifdef USB_DEBUG
//            printf("\r\ntmp_Rep_Sts = %x ",tmp_Rep_Sts);
#endif
    pbDPSRespBlock(PTP_OP_SendObjectInfo,tmp_Rep_Sts);
EndDiscovery:;
}

void pbDPSConfPntSevCmd(void)
{
    int tmp_Rep_Sts;

    pbDPSObjAdded();
    pbDPSReqObjTran();

    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndConfPntSev;
_ConfPntSev_Step1 :
    pbDPSGetObjInfoCmd(DPS_OBJ_DREQUEST,pbDPSConfPntSevSize,0);
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndConfPntSev;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _ConfPntSev_Step1;
_ConfPntSev_Step2 :
    pbDPSGetObjCmd(DPS_configurePrintService);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);

    pbDPSObjRem();

    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndConfPntSev;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObject)
        goto _ConfPntSev_Step2;
_ConfPntSev_Step3 :
    pbDPSSndObjInfoCmd(DPS_OBJ_HRSPONSE);
    pbDPSRespBlock(PTP_OP_SendObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndConfPntSev;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObjectInfo)
        goto _ConfPntSev_Step3;
    tmp_Rep_Sts=pbDPSSndObjOutCmd(DPS_configurePrintService);
    pbDPSRespBlock(PTP_OP_SendObject,tmp_Rep_Sts);

    pbDPSObjRem();
EndConfPntSev:;
}

#if 0
void pbDPSGetDevStsCmd(void)
{
    int tmp_Rep_Sts;

    pbDPSObjAdded();
    pbDPSReqObjTran();

    pbDPSSetGCS();
_GetDevSts_Step1 :
    pbDPSGetObjInfoCmd(DPS_OBJ_DREQUEST,pbDPSGetDevStsSize,0);
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _GetDevSts_Step1;
_GetDevSts_Step2 :
    pbDPSGetObjCmd(DPS_GetDevice_Sts);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);

    pbDPSObjRem();

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObject)
        goto _GetDevSts_Step2;
_GetDevSts_Step3 :
    pbDPSSndObjInfoCmd(DPS_OBJ_HRSPONSE);
    pbDPSRespBlock(PTP_OP_SendObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObjectInfo)
        goto _GetDevSts_Step3;
    tmp_Rep_Sts=pbDPSSndObjOutCmd(DPS_Device_Sts);
    pbDPSRespBlock(PTP_OP_SendObject,tmp_Rep_Sts);

    pbDPSObjRem();
}
#endif

void pbDPSStartJobCmd(void)
{
    int tmp_Rep_Sts;

    pbDPSObjAdded();
    pbDPSReqObjTran();

    pbDPSSetGCS();
_StartJob_Step1 :
    pbDPSGetObjInfoCmd(DPS_OBJ_DREQUEST,pbDPSStartJobSize,0);
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _StartJob_Step1;
_StartJob_Step2 :
    pbDPSGetObjCmd(DPS_Start_Job);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);

    pbDPSObjRem();

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObject)
        goto _StartJob_Step2;
_StartJob_Step3 :
    pbDPSSndObjInfoCmd(DPS_OBJ_HRSPONSE);
    pbDPSRespBlock(PTP_OP_SendObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObjectInfo)
        goto _StartJob_Step3;
    tmp_Rep_Sts=pbDPSSndObjOutCmd(DPS_Start_Job);
    pbDPSRespBlock(PTP_OP_SendObject,tmp_Rep_Sts);

    pbDPSObjRem();
}

void pbDPSAbortJobCmd(void)
{
    int tmp_Rep_Sts;

    pbDPSObjAdded();
    pbDPSReqObjTran();

    pbDPSSetGCS();
_AbortJob_Step1 :
    pbDPSGetObjInfoCmd(DPS_OBJ_DREQUEST,pbDPSAbortJobSize,0);
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _AbortJob_Step1;
_AbortJob_Step2 :
    pbDPSGetObjCmd(DPS_Abort_Job);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);

    pbDPSObjRem();

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObject)
        goto _AbortJob_Step2;
_AbortJob_Step3 :
    pbDPSSndObjInfoCmd(DPS_OBJ_HRSPONSE);
    pbDPSRespBlock(PTP_OP_SendObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObjectInfo)
        goto _AbortJob_Step3;
    tmp_Rep_Sts=pbDPSSndObjOutCmd(DPS_Abort_Job);
    pbDPSRespBlock(PTP_OP_SendObject,tmp_Rep_Sts);

    pbDPSObjRem();
}

void pbDPSContinueJobCmd(void)
{
    int tmp_Rep_Sts;

    pbDPSObjAdded();
    pbDPSReqObjTran();

    pbDPSSetGCS();
_ContinueJob_Step1 :
    pbDPSGetObjInfoCmd(DPS_OBJ_DREQUEST,pbDPSContinueJobSize,0);
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _ContinueJob_Step1;
_ContinueJob_Step2 :
    pbDPSGetObjCmd(DPS_Continue_Job);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);

    pbDPSObjRem();

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObject)
        goto _ContinueJob_Step2;
_ContinueJob_Step3 :
    pbDPSSndObjInfoCmd(DPS_OBJ_HRSPONSE);
    pbDPSRespBlock(PTP_OP_SendObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObjectInfo)
        goto _ContinueJob_Step3;
    tmp_Rep_Sts=pbDPSSndObjOutCmd(DPS_Continue_Job);
    pbDPSRespBlock(PTP_OP_SendObject,tmp_Rep_Sts);

    pbDPSObjRem();
}

void pbDPSPnt2DSC(void)
{
    int tmp_Rep_Sts;

_Printer2DSC_Step1 :
    pbDPSSndObjInfoCmd(DPS_OBJ_HREQUEST);
    pbDPSRespBlock(PTP_OP_SendObjectInfo,PTP_Rep_OK);

    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndDPSPnt2DSC;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObjectInfo)
        goto _Printer2DSC_Step1;
_Printer2DSC_Step2 :
    tmp_Rep_Sts=pbDPSSndObjInCmd();
    //if(pbDPSSevSts&0x80)
	//{
	  //while(mailbox[MB_COMMAND]!= mailbox[MBR_COMMAND])
	//  {
	//   pbTTXSendCommand(USB_REQUEST_CMD,STS_USB_REQ_DEVSTS,pbDPSSevSts);
	//  }
    //  goto _Exit_This_Function;
	//}
    pbDPSRespBlock(PTP_OP_SendObject,tmp_Rep_Sts);

    //printf("\r\n step1", 0);

    pbDPSObjRem();

    pbDPSObjAdded();
    pbDPSReqObjTran();

	//printf("\r\n step2", 0);

    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndDPSPnt2DSC;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_SendObject)
        goto _Printer2DSC_Step2;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetPartialObject)
        pbDPSSetGCS();
_Printer2DSC_Step3 :
    if (pbReadw(pbCmd_Addr+12)==0x40191EB5)
    {
#ifdef USB_DEBUG
//            printf("\r\nPrinter2DSC ",0);
#endif
    	  pbDPSGetObjInfoFileCmd();
        pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);
    }else
    {
        if (pbNotifyJobStsFlag==1)
            pbDPSGetObjInfoCmd(DPS_OBJ_DRSPONSE,pbDPSJobStsSize,0);
        else if (pbNotifyDevStsFlag==1)
            pbDPSGetObjInfoCmd(DPS_OBJ_DRSPONSE,pbDPSDevStsSize,0);
        pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);
    }
    pbDPSSetGCS();
	if(!usbConnectFlag)
        goto EndDPSPnt2DSC;
    if (pbReadhw(pbCmd_Addr+6) == PTP_OP_GetObjectInfo)
        goto _Printer2DSC_Step3;
    if (pbNotifyJobStsFlag==1)
        pbDPSGetObjCmd(DPS_Job_Sts);
    else if (pbNotifyDevStsFlag==1)
        pbDPSGetObjCmd(DPS_Device_Sts);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);

    pbDPSObjRem();

	//printf("\r\n step3", 0);

	//printf("\r\n ans1=%x", pbIsUSBDetect());
    //printf("\r\n ans2=%x", usbPictRxDataReceived);
	//printf("\r\n ans3=%x", pbDPSDisvCompFlag);
//_Exit_This_Function:;

EndDPSPnt2DSC:;
}

void pbDPSGetFileInfo(void)
{
    int tmp_Rep_Sts;

#ifdef USB_DEBUG
//            printf("\r\nGetFileInfo ",0);
#endif
    tmp_Rep_Sts=pbDPSGetObjInfoFileCmd();
    pbDPSRespBlock(PTP_OP_GetObjectInfo,PTP_Rep_OK);
}

void pbDPSGetFile(void)
{
    pbDPSGetObjCmd(DPS_Start_Job);
    pbDPSRespBlock(PTP_OP_GetObject,PTP_Rep_OK);
}

void pbDPSGetPartFile(void)
{
    int tmp_Rep_Sts;

    tmp_Rep_Sts=pbDPSGetPartObjCmd();
    pbDPSRespBlock(PTP_OP_GetPartialObject,PTP_Rep_OK);
}

void pbDPSGetThumb(void)
{
    pbDPSGetThumbCmd(27777);
    pbDPSRespBlock(PTP_OP_GetThumb,PTP_Rep_OK);
}

void pbStartJob(__u16 ImgW,__u16 ImgH,__u32 ImageCSize,__u32 ImageSrcAddr,__u32 ThumbCSize)
{
    pbJobInfo.Paper_Sizes=Paper_Sizes_Default;
    pbJobInfo.Paper_Types=Paper_Types_Default;
    pbJobInfo.Paper_Layouts=Paper_Layout_Default;
    pbJobInfo.Paper_Copies=1;
    pbPntFile.ImgPixWidth=ImgW;
    pbPntFile.ImgPixHeight=ImgH;
    pbPntFile.ThmbCompressSize=ThumbCSize;
    if (ThumbCSize>0)
    {
        pbPntFile.ThmbPixWidth=160;
        pbPntFile.ThmbPixHeight=120;
    }else
    {
        pbPntFile.ThmbPixWidth=0;
        pbPntFile.ThmbPixHeight=0;
    }
    pbPntFile.ImgIsExif=1;
    pbPntFile.ImageCompressSize=ImageCSize;
    pbPntFile.ImgFilePtr=0;
    pbPntFile.ImgSrcAddr=ImageSrcAddr;
    pbPntFile.ImgSrcPlace=_BaseBand_Source_Place;
    pbDPSStartJobFlag=1;
	pbSendOptionComFlag=0;
}


__u8 pbIsPntSevAcpt(void)
{
    if (pbDPSSevSts&PB_JOBSTS_ACEPTNEWJOB)
        return 1;
    else
        return 0;
}

void pbAbortJob(void)
{
    pbAbortJobFlag=1;
}

void pbContinueJob(void)
{
    pbAbortJobFlag=1;
}

__u8 pbIsUSBDetect(void)
{
    return usbConnectFlag;
}

#if 0
__u8 pbIsSndOptComp(void)
{
    if (pbSendOptionComFlag==1)
        return 1;
    else
        return 0;
}
#endif

⌨️ 快捷键说明

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