0,0 → 1,73 |
/* Copyright (C) 2010-2011 Circuits At Home, LTD. All rights reserved. |
|
This software may be distributed and modified under the terms of the GNU |
General Public License version 2 (GPL2) as published by the Free Software |
Foundation and appearing in the file GPL2.TXT included in the packaging of |
this file. Please note that GPL2 Section 2[b] requires that all works based |
on this software must also be made publicly available under the terms of |
the GPL2 ("Copyleft"). |
|
Contact information |
------------------- |
|
Circuits At Home, LTD |
Web : http://www.circuitsathome.com |
e-mail : support@circuitsathome.com |
*/ |
#include "ptpcallback.h" |
#include "ptpdebug.h" |
|
bool MultiByteValueParser::Parse(uint8_t **pp, uint16_t *pcntdn) |
{ |
if (!pBuf) |
{ |
Notify(PSTR("Buffer pointer is NULL!\r\n")); |
return false; |
} |
for (; countDown && (*pcntdn); countDown--, (*pcntdn)--, (*pp)++) |
pBuf[valueSize-countDown] = (**pp); |
|
if (countDown) |
return false; |
|
countDown = valueSize; |
return true; |
} |
|
bool PTPListParser::Parse(uint8_t **pp, uint16_t *pcntdn, PTP_ARRAY_EL_FUNC pf, const void *me) |
{ |
switch (nStage) |
{ |
case 0: |
pBuf->valueSize = lenSize; |
theParser.Initialize(pBuf); |
nStage = 1; |
|
case 1: |
if (!theParser.Parse(pp, pcntdn)) |
return false; |
|
arLen = 0; |
arLen = (pBuf->valueSize >= 4) ? *((uint32_t*)pBuf->pValue) : (uint32_t)(*((uint16_t*)pBuf->pValue)); |
arLenCntdn = arLen; |
nStage = 2; |
|
case 2: |
pBuf->valueSize = valSize; |
theParser.Initialize(pBuf); |
nStage = 3; |
|
case 3: |
for (; arLenCntdn; arLenCntdn--) |
{ |
if (!theParser.Parse(pp, pcntdn)) |
return false; |
|
if (pf) |
pf(pBuf, (arLen - arLenCntdn), me); |
} |
|
nStage = 0; |
} |
return true; |
} |