1 | /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
|
---|
2 |
|
---|
3 | This software may be distributed and modified under the terms of the GNU
|
---|
4 | General Public License version 2 (GPL2) as published by the Free Software
|
---|
5 | Foundation and appearing in the file GPL2.TXT included in the packaging of
|
---|
6 | this file. Please note that GPL2 Section 2[b] requires that all works based
|
---|
7 | on this software must also be made publicly available under the terms of
|
---|
8 | the GPL2 ("Copyleft").
|
---|
9 |
|
---|
10 | Contact information
|
---|
11 | -------------------
|
---|
12 |
|
---|
13 | Circuits At Home, LTD
|
---|
14 | Web : http://www.circuitsathome.com
|
---|
15 | e-mail : support@circuitsathome.com
|
---|
16 | */
|
---|
17 |
|
---|
18 | #include "parsetools.h"
|
---|
19 |
|
---|
20 | bool MultiByteValueParser::Parse(uint8_t **pp, uint32_t *pcntdn)
|
---|
21 | {
|
---|
22 | if (!pBuf)
|
---|
23 | {
|
---|
24 | //Notify(PSTR("Buffer pointer is NULL!\r\n"));
|
---|
25 | return false;
|
---|
26 | }
|
---|
27 | for (; countDown && (*pcntdn); countDown--, (*pcntdn)--, (*pp)++)
|
---|
28 | pBuf[valueSize-countDown] = (**pp);
|
---|
29 |
|
---|
30 | if (countDown)
|
---|
31 | return false;
|
---|
32 |
|
---|
33 | countDown = valueSize;
|
---|
34 | return true;
|
---|
35 | }
|
---|
36 |
|
---|
37 | bool PTPListParser::Parse(uint8_t **pp, uint32_t *pcntdn, PTP_ARRAY_EL_FUNC pf, const void *me)
|
---|
38 | {
|
---|
39 | switch (nStage)
|
---|
40 | {
|
---|
41 | case 0:
|
---|
42 | pBuf->valueSize = lenSize;
|
---|
43 | theParser.Initialize(pBuf);
|
---|
44 | nStage = 1;
|
---|
45 |
|
---|
46 | case 1:
|
---|
47 | if (!theParser.Parse(pp, pcntdn))
|
---|
48 | return false;
|
---|
49 |
|
---|
50 | arLen = 0;
|
---|
51 | arLen = (pBuf->valueSize >= 4) ? *((uint32_t*)pBuf->pValue) : (uint32_t)(*((uint16_t*)pBuf->pValue));
|
---|
52 | arLenCntdn = arLen;
|
---|
53 | nStage = 2;
|
---|
54 |
|
---|
55 | case 2:
|
---|
56 | pBuf->valueSize = valSize;
|
---|
57 | theParser.Initialize(pBuf);
|
---|
58 | nStage = 3;
|
---|
59 |
|
---|
60 | case 3:
|
---|
61 | for (; arLenCntdn; arLenCntdn--)
|
---|
62 | {
|
---|
63 | if (!theParser.Parse(pp, pcntdn))
|
---|
64 | return false;
|
---|
65 |
|
---|
66 | if (pf)
|
---|
67 | pf(pBuf, (arLen - arLenCntdn), me);
|
---|
68 | }
|
---|
69 |
|
---|
70 | nStage = 0;
|
---|
71 | }
|
---|
72 | return true;
|
---|
73 | }
|
---|