📄 msdps.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 + -