📄 msxml.c
字号:
#include "DrvOTGMain.h"
#include <string.h>
#include <stdlib.h>
//#include "uart.h"
__u8 volatile pbPntSevNonErrFlag;
__u8 volatile pbPntSevWarningFlag;
__u8 volatile pbPntSevErrFlag;
__u8 volatile pbPntSrvAvailFlag;
__u8 volatile pbPntSevEndedOtherFlag;
__u8 volatile pbNotifyJobStsFlag;
__u8 volatile pbNotifyDevStsFlag;
__u8 volatile pbDevStsTfCheckFlag;
__u8 volatile pbPTPGetPFileFlag;
__u16 volatile pbDPSCurPage;
__u16 volatile pbDPSTotPage;
__u16 volatile pbDPSImgPrinted;
__u8 volatile pbDPSActRltOKFlag;
__u8 volatile pbDPSActRltNoExeFlag;
__u8 volatile pbDPSActRltOPNotSuptFlag;
__u8 volatile pbDPSActRltOPNotRecogFlag;
int pbDPSGetConfPntSevParser(__u32 ParserLength,char* ParBuffer);
int pbDPSGetDevStsParser(__u32 ParserLength,char* ParBuffer);
__u8 pbGetJobProgress(char* pbuffer,__u16 bsize,__u16 *usCurpage,__u16 *usTotpage);
__u8 pbGetJobImgPrinted(char* pbuffer,__u16 bsize,__u16 *usImgPrinted);
int pbDPSNotifyStsParser(__u32 ParserLength,char* ParBuffer)
{
//printf("\r\n !notify", 0);
pbNotifyJobStsFlag=0;
pbNotifyDevStsFlag=0;
if (pbGetTagAttr("<notifyDeviceStatus>",20,ParBuffer,ParserLength)!=0)
{
//pbNotifyDevStsFlag=0;
pbDevStsTfCheckFlag=0;
if (pbGetTagAttr("<dpsPrintServiceStatus>",23,ParBuffer,ParserLength)!=0)
{
pbPntSevNonErrFlag=0;
pbPntSevWarningFlag=0;
pbPntSevErrFlag=0;
pbDPSSevSts=0x00;
pbDPSJobErrReason=0x00;
pbPntSevEndedOtherFlag=0;
if (pbGetTagAttr("70010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_IDLE;
if (pbGetTagAttr("70000000",8,ParBuffer,ParserLength)!=0)
{
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_PRINTING;
pbPTPGetPFileFlag=1;
}
if (pbGetTagAttr("70020000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_PAUSED;
if (pbGetTagAttr("<jobEndReason>",14,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("71000000",8,ParBuffer,ParserLength)!=0)
{
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_NOTENDED;
pbDPSSevSts=pbDPSSevSts&~PB_JOBRLT_ENDED;
}
else
{
if (pbPTPGetPFileFlag==1)
{
pbPTPGetPFileFlag=0;
pbDPSSevSts=pbDPSSevSts&~PB_JOBRLT_NOTENDED;
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
}
}
if (pbGetTagAttr("71010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
if (pbGetTagAttr("71020000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
if (pbGetTagAttr("71030000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
if (pbGetTagAttr("71040000",8,ParBuffer,ParserLength)!=0)
{
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
pbPntSevEndedOtherFlag=1;
}
}
if (pbGetTagAttr("<errorStatus>",13,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("72000000",8,ParBuffer,ParserLength)!=0)
pbPntSevNonErrFlag=1;
if (pbGetTagAttr("72010000",8,ParBuffer,ParserLength)!=0)
{
pbPntSevWarningFlag=1;
pbDPSSevSts=pbDPSSevSts|PB_JOBSEV_ERROR;
}
if (pbGetTagAttr("72020000",8,ParBuffer,ParserLength)!=0)
{
pbPntSevErrFlag=1;
pbDPSSevSts=pbDPSSevSts|PB_JOBSEV_ERROR;
}
}
if (pbGetTagAttr("<errorReason>",13,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("7300",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_NOREASON;
if (pbGetTagAttr("7301",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_PAPER;
if (pbGetTagAttr("7302",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_INK;
if (pbGetTagAttr("7303",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_HARDWARE;
if (pbGetTagAttr("7304",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_FILE;
}
if (pbGetTagAttr("<disconnectEnable>",18,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("74010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBLIM_DISCONNECT;
else
pbDPSSevSts=pbDPSSevSts&0xbf;
}
if (pbGetTagAttr("<newJobOK>",10,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("76010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_ACEPTNEWJOB;
}
pbNotifyDevStsFlag=1;
pbDevStsTfCheckFlag=1;
}
}
else if (pbGetTagAttr("<notifyJobStatus>",17,ParBuffer,ParserLength)!=0)
{
//printf("\r\n artemis", 0);
//pbNotifyJobStsFlag=0;
pbDPSCurPage=0;
pbDPSTotPage=0;
pbDPSImgPrinted=0;
if (pbGetTagAttr("<progress>",10,ParBuffer,ParserLength)!=0)
pbGetJobProgress(ParBuffer,ParserLength,&pbDPSCurPage,&pbDPSTotPage);
if (pbGetTagAttr("<imagesPrinted>",15,ParBuffer,ParserLength)!=0)
pbGetJobImgPrinted(ParBuffer,ParserLength,&pbDPSImgPrinted);
pbNotifyJobStsFlag=1;
//printf("\r\n pbDPSCurPage=%x", pbDPSCurPage);
//printf("\r\n pbDPSTotPage=%x", pbDPSTotPage);
//printf("\r\n pbDPSImgPrinted=%x", pbDPSImgPrinted);
}
#ifdef USB_DEBUG
// printf("\r\nSer_Sts = %x ",pbDPSSevSts);
// printf("\r\nJobErr = %x ",pbDPSJobErrReason);
#endif
//printf("\r\n Ser_Sts = %x ",pbDPSSevSts);
//printf("\r\n JobErr = %x ",pbDPSJobErrReason);
//printf("\r\n JobStsFlag = %x ",pbNotifyJobStsFlag);
//printf("\r\n DevStsFlag = %x ",pbNotifyDevStsFlag);
//printf("\r\n DStsTfCkFlag = %x ",pbDevStsTfCheckFlag);
/*
if(pbNotifyDevStsFlag==1)
{
//printf("\r\n box[1]=%x", mailbox[MBR_DATA1]);
//while(((__u8)(mailbox[MBR_DATA1])&0x01)!=0);
counter1=0;
counter2=0;
pbTTXSendCommand(USB_REQUEST_CMD,STS_USB_REQ_DEVSTS,pbDPSSevSts);
}
else
{
printf("\r\n jobn",0);
mailbox[MBR_DATA1]=1;
printf("\r\n t1=%x", mailbox[MBR_STATUS]);
printf("\r\n t2=%x", mailbox[MBR_DATA0]);
printf("\r\n t3=%x", mailbox[MBR_NUMBER]);
printf("\r\n t4=%x", mailbox[MBR_COMMAND]);
mailbox[MBR_DATA1]=0;
}*/
return PTP_Rep_OK;
}
int pbDPSGetInfoParser(__u8 DPS_Type,__u32 ParserLength,char* ParBuffer)
{
pbDPSActRltOKFlag=0;
pbDPSActRltNoExeFlag=0;
pbDPSActRltOPNotSuptFlag=0;
pbDPSActRltOPNotRecogFlag=0;
if (pbGetTagAttr("<result>",8,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("10000000",8,ParBuffer,ParserLength)!=0)
{
if (DPS_Type==DPS_configurePrintService)
pbDPSGetConfPntSevParser(ParserLength,ParBuffer);
else if (DPS_Type==DPS_Device_Sts)
pbDPSGetDevStsParser(ParserLength,ParBuffer);
pbDPSActRltOKFlag=1;
}
else
{
if (pbGetTagAttr("10010000",8,ParBuffer,ParserLength)!=0)
pbDPSActRltNoExeFlag=1;
else if (pbGetTagAttr("10020000",8,ParBuffer,ParserLength)!=0)
pbDPSActRltOPNotSuptFlag=1;
else if (pbGetTagAttr("10030000",8,ParBuffer,ParserLength)!=0)
pbDPSActRltOPNotRecogFlag=1;
pbDPSActRltOKFlag=0;
}
}
return PTP_Rep_OK;
}
int pbDPSGetConfPntSevParser(__u32 ParserLength,char* ParBuffer)
{
pbPntSrvAvailFlag=0;
if (pbGetTagAttr("<printServiceAvailable>",23,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("30010000",8,ParBuffer,ParserLength)==0)
pbPntSrvAvailFlag=0;
if (pbGetTagAttr("30000000",8,ParBuffer,ParserLength)==0)
pbPntSrvAvailFlag=1;
}
return PTP_Rep_OK;
}
int pbDPSGetDevStsParser(__u32 ParserLength,char* ParBuffer)
{
pbPntSevNonErrFlag=0;
pbPntSevWarningFlag=0;
pbPntSevErrFlag=0;
pbDPSSevSts=0x00;
pbPntSevEndedOtherFlag=0;
pbDPSJobErrReason=0x00;
if (pbGetTagAttr("<dpsPrintServiceStatus>",23,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("70010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_IDLE;
if (pbGetTagAttr("70000000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_PRINTING;
if (pbGetTagAttr("70020000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_PAUSED;
if (pbGetTagAttr("<jobEndReason>",14,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("71000000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_NOTENDED;
if (pbGetTagAttr("71010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
if (pbGetTagAttr("71020000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
if (pbGetTagAttr("71030000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
if (pbGetTagAttr("71040000",8,ParBuffer,ParserLength)!=0)
{
pbDPSSevSts=pbDPSSevSts|PB_JOBRLT_ENDED;
pbPntSevEndedOtherFlag=1;
}
}
if (pbGetTagAttr("<errorStatus>",13,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("72000000",8,ParBuffer,ParserLength)!=0)
pbPntSevNonErrFlag=1;
if (pbGetTagAttr("72010000",8,ParBuffer,ParserLength)!=0)
pbPntSevWarningFlag=1;
if (pbGetTagAttr("72020000",8,ParBuffer,ParserLength)!=0)
pbPntSevErrFlag=1;
}
if (pbGetTagAttr("<errorReason>",13,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("7300",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_NOREASON;
if (pbGetTagAttr("7301",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_PAPER;
if (pbGetTagAttr("7302",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_INK;
if (pbGetTagAttr("7303",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_HARDWARE;
if (pbGetTagAttr("7304",4,ParBuffer,ParserLength)!=0)
pbDPSJobErrReason=pbDPSJobErrReason|PB_JOBERR_FILE;
}
if (pbGetTagAttr("<disconnectEnable>",18,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("74010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBLIM_DISCONNECT;
}
if (pbGetTagAttr("<newJobOK>",10,ParBuffer,ParserLength)!=0)
{
if (pbGetTagAttr("76010000",8,ParBuffer,ParserLength)!=0)
pbDPSSevSts=pbDPSSevSts|PB_JOBSTS_ACEPTNEWJOB;
}
}
return PTP_Rep_OK;
}
__u8 pbGetTagAttr(char *TTag_Name,__u8 TName_Length,char* pbuffer,__u16 bsize)
{
__u8 volatile xdata * tbuffer;
tbuffer=pbuffer;
while(bsize>0)
{
if (strncmp(tbuffer,TTag_Name, TName_Length) == 0)
{
return 1;
}else
{
bsize--;
tbuffer++;
}
}
return 0;
}
__u8 pbGetJobProgress(char* pbuffer,__u16 bsize,__u16 *usCurpage,__u16 *usTotpage)
{
__u8 volatile xdata * tbuffer;
__u32 strpos=0;
tbuffer=pbuffer;
*usCurpage=0;
*usTotpage=0;
while(bsize>0)
{
if (strncmp(tbuffer,"<progress>",10) == 0)
{
strpos=strpos+10;
*usCurpage=((tbuffer[strpos]-0x30)*100)+((tbuffer[strpos+1]-0x30)*10)+(tbuffer[strpos+2]-0x30);
*usTotpage=((tbuffer[strpos+4]-0x30)*100)+((tbuffer[strpos+5]-0x30)*10)+(tbuffer[strpos+6]-0x30);
return 1;
}else
{
bsize--;
tbuffer++;
}
}
return 0;
}
__u8 pbGetJobImgPrinted(char* pbuffer,__u16 bsize,__u16 *usImgPrinted)
{
__u32 strpos=0;
__u8 volatile xdata * tbuffer;
tbuffer=pbuffer;
*usImgPrinted=0;
while(bsize>0)
{
if (strncmp(tbuffer,"<imagesPrinted>",15) == 0)
{
strpos=strpos+15;
*usImgPrinted=((tbuffer[strpos]-0x30)*100)+((tbuffer[strpos+1]-0x30)*10)+(tbuffer[strpos+2]-0x30);
return 1;
}else
{
bsize--;
tbuffer++;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -