Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1702 - 1
#include "pseventparser.h"
2
 
3
void PSEventParser::Parse(const uint16_t len, const uint8_t *pbuf, const uint32_t &offset)
4
{
5
        uint16_t        cntdn   = (uint16_t)len;
6
        uint8_t         *p              = (uint8_t*)pbuf;
7
 
8
        switch (nStage)
9
        {
10
        case 0:
11
                p               += 12;
12
                cntdn   -= 12;
13
 
14
                if (!cntdn)
15
                        return;
16
                nStage  ++;
17
 
18
        case 1:
19
                //Notify(PSTR("\r\nEvent Block Size:\t"));
20
                theBuffer.valueSize = 4;
21
                valueParser.Initialize(&theBuffer);
22
                nStage ++;
23
        case 2:
24
                if (!valueParser.Parse(&p, &cntdn))
25
                        return;
26
 
27
                //PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
28
                nStage ++;
29
        case 3:
30
                //Notify(PSTR("\r\nNumber of Fields:\t"));
31
                theBuffer.valueSize = 2;
32
                valueParser.Initialize(&theBuffer);
33
                nStage ++;
34
        case 4:
35
                if (!valueParser.Parse(&p, &cntdn))
36
                        return;
37
 
38
                //PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
39
                nStage ++;
40
        case 5:
41
                //Notify(PSTR("\r\nEvent Code:\t"));
42
                theBuffer.valueSize = 2;
43
                valueParser.Initialize(&theBuffer);
44
                nStage ++;
45
        case 6:
46
                if (!valueParser.Parse(&p, &cntdn))
47
                        return;
48
 
49
        eventCode = *((uint16_t*)theBuffer.pValue);
50
                //PrintHex<uint16_t>(*((uint16_t*)theBuffer.pValue));
51
                nStage ++;
52
        case 7:
53
                //Notify(PSTR("\r\nTransaction ID:\t"));
54
                theBuffer.valueSize = 4;
55
                valueParser.Initialize(&theBuffer);
56
                nStage ++;
57
        case 8:
58
                if (!valueParser.Parse(&p, &cntdn))
59
                        return;
60
 
61
                //PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
62
                nStage ++;
63
    case 9:
64
        if (eventCode == PTP_EC_ObjectAdded)
65
                        Notify(PSTR("\r\nObject Added:\t\t"));
66
 
67
                theBuffer.valueSize = 4;
68
                valueParser.Initialize(&theBuffer);
69
                nStage ++;
70
    case 10:
71
        if (eventCode == PTP_EC_ObjectAdded)
72
        {
73
                        if (!valueParser.Parse(&p, &cntdn))
74
                                return;
75
 
76
                        objHandle = *((uint32_t*)theBuffer.pValue);
77
                        PrintHex<uint32_t>(*((uint32_t*)theBuffer.pValue));
78
                        Notify(PSTR("\r\n"));
79
        }
80
                if (eventCode == PTP_EC_CaptureComplete)
81
                        Notify(PSTR("\r\nCapture complete.\r\n"));
82
                nStage ++;
83
    case 11:
84
                nStage = 0;
85
        }
86
}