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

📄 msxml.c

📁 MSTAR03的数码相框的代码
💻 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 + -