FEDM_XmlParser_Base.cpp
Go to the documentation of this file.
00001 /*-------------------------------------------------------
00002 |                                                       |
00003 |       FEDM_XmlParser_Base.cpp                                                         |
00004 |                                                       |
00005 ---------------------------------------------------------
00006 
00007 Copyright � 2008-2011 FEIG ELECTRONIC GmbH, All Rights Reserved.
00008                                                 Lange Strasse 4
00009                                                 D-35781 Weilburg
00010                                                 Federal Republic of Germany
00011                                                 phone    : +49 6471 31090
00012                                                 fax      : +49 6471 310999
00013                                                 e-mail   : obid-support@feig.de
00014                                                 Internet : http://www.feig.de
00015                                         
00016 Author                  :       Markus Hultsch
00017 Begin                   :       23.01.2008
00018 Version                 :       04.00.02 / 22.08.2011 / M. Hultsch
00019 Operation Systems       :       independent
00020 Function                        :       abstract class for basic parser API
00021 
00022 OBID� and OBID i-scan� are registered Trademarks of FEIG ELECTRONIC GmbH.
00023 Linux� is a registered trademark of Linus Torvalds.
00024 Microsoft� and Windows� are registered trademarks of Microsoft Corporation.
00025 */
00026 
00027 
00028 //#############################
00029 //      I N C L U D E S
00030 //#############################
00031 #include "FEDM_XmlParser_Base.h"                                // public include file of library
00032 #include "FEDM_XmlParser_TinyReader.h"
00033 #include "FEDM_XmlParser_FedmReader.h"
00034 #include "FEDM_XmlParser_FedmWriter.h"
00035 
00036 
00037 //#######################################################################################
00038 //      class FEDM_XmlParser_Base
00039 //#######################################################################################
00040 FEDM_XmlParser_Base::FEDM_XmlParser_Base(unsigned int uiReaderType, unsigned int uiWriterType)
00041 {
00042         m_bIsParsed             = false;
00043         m_bWriteMode    = false;
00044 
00045         m_pXmlReader    = NULL;
00046         m_pXmlWriter    = NULL;
00047 
00048         memset(m_szAccessCode, 0, FEDM_MAX_NAME_SIZE);
00049         m_uiAccessCodeLen = 0;
00050 
00051         m_XmlHeader.Init();
00052 
00053         if(uiReaderType == FEDM_XML_PARSER_TYPE_TINY)
00054                 m_pXmlReader = (FEDM_XmlParser_Reader*)new FEDM_XmlParser_TinyReader;
00055         else if(uiReaderType == FEDM_XML_PARSER_TYPE_FEDM)
00056                 m_pXmlReader = (FEDM_XmlParser_Reader*)new FEDM_XmlParser_FedmReader;
00057 
00058         m_pXmlWriter = (FEDM_XmlParser_Writer*)new FEDM_XmlParser_FedmWriter;
00059 
00060         if(m_pXmlReader != NULL)
00061                 m_pXmlReader->m_pXmlParser = this;
00062 
00063         if(m_pXmlWriter != NULL)
00064                 m_pXmlWriter->m_pXmlParser = this;
00065 }
00066 
00067 
00068 FEDM_XmlParser_Base::~FEDM_XmlParser_Base(void)
00069 {
00070         if(m_pXmlReader != NULL)
00071                 delete m_pXmlReader;
00072 
00073         if(m_pXmlWriter != NULL)
00074                 delete m_pXmlWriter;
00075 }
00076 
00077 
00078 //#####################################################################################
00079 // serialization functions
00080 //#####################################################################################
00081 
00082 /***************************************************************************
00083   Begin         :       23.01.2008
00084   Version       :       04.00.02 / 22.08.2011 / M. Hultsch
00085 
00086   Function              :       read xml file-header
00087 
00088   Parameters    :       FEDM_XML_TREEITEM* root parent element
00089 
00090   Return value  :       FEDM_OK or error code (<0)
00091 
00092 ***************************************************************************/
00093 int FEDM_XmlParser_Base::SerializeHeaderIn(FEDM_XML_TREEITEM* root, const char* szVendor)
00094 {
00095         return m_pXmlReader->SerializeHeaderIn(root, szVendor);
00096 }
00097 
00098 
00099 /***************************************************************************
00100   Begin         :       23.01.2008
00101   Version       :       04.00.02 / 22.08.2011 / M. Hultsch
00102 
00103   Function              :       write file-header
00104 
00105   Parameters    :       FEDM_XML_TREEITEM* root parent element
00106 
00107   Return value  :       FEDM_OK or error code (<0)
00108 
00109 ***************************************************************************/
00110 int FEDM_XmlParser_Base::SerializeHeaderOut(FEDM_XML_TREEITEM* root, const char* szVendor)
00111 {
00112         int iBack = m_pXmlWriter->SerializeHeaderOut(root, szVendor);
00113         if(iBack)
00114                 SetLastError(iBack);
00115 
00116         return iBack;
00117 }
00118 
00119 /***************************************************************************
00120   Begin         :       23.01.2008
00121   Version       :       03.00.00 / 23.01.2008 / M. Hultsch
00122 
00123   Description   :       calculation of CRC16 checksum (same algorithm as for protocol frame)
00124 
00125   Parameters    :       unsigned char* cBuffer                  - pointer to protocol buffer
00126                                         int    cBufLen                  - number of chars to build the checksum
00127 
00128   Return Value  : unsigned int   CRC16 checksum
00129 ***************************************************************************/
00130 unsigned int FEDM_XmlParser_Base::CalcCRC16CheckSum(unsigned int uiCrcPreset,
00131                                                                                                         unsigned int uiData)
00132 {
00133         unsigned int uiCrc = uiCrcPreset;
00134         unsigned char ucBuffer[4];
00135 
00136         ucBuffer[0] =  (uiData & 0x000000FF);
00137         ucBuffer[1] = ((uiData & 0x0000FF00) >>  8);
00138         ucBuffer[2] = ((uiData & 0x00FF0000) >> 16);
00139         ucBuffer[3] = ((uiData & 0xFF000000) >> 24);
00140 
00141         uiCrc = CalcCRC16CheckSum(uiCrc, ucBuffer, 4);
00142 
00143         return uiCrc;
00144 }
00145 
00146 /***************************************************************************
00147   Begin         :       23.01.2008
00148   Version       :       03.00.00 / 23.01.2008 / M. Hultsch
00149 
00150   Description   :       calculation of CRC16 checksum (same algorithm as for protocol frame)
00151 
00152   Parameters    :       unsigned char* cBuffer                  - pointer to protocol buffer
00153                                         int    cBufLen                  - number of chars to build the checksum
00154 
00155   Return Value  : unsigned int   CRC16 checksum
00156 ***************************************************************************/
00157 unsigned int FEDM_XmlParser_Base::CalcCRC16CheckSum(unsigned int uiCrcPreset,
00158                                                                                                         unsigned char* ucBuffer, 
00159                                                                                                         unsigned int uiBufLen)
00160 {
00161         unsigned int i, j;
00162         unsigned int uiCrc = uiCrcPreset;
00163 
00164         for(i=0;i<uiBufLen;i++)
00165         {
00166                 uiCrc ^= ucBuffer[i];
00167 
00168                 for(j=0; j<8; j++)
00169                 {
00170                         if(uiCrc & 0x0001)
00171                         {
00172                                 uiCrc = (unsigned int)((uiCrc >> 1) ^ (unsigned int)FEDM_CRC16_POLYNOM);
00173                         }
00174                         else
00175                         {
00176                                 uiCrc = (unsigned int)(uiCrc >> 1);
00177                         }
00178                 }
00179         }
00180 
00181         return uiCrc;
00182 }
00183 
00184 
00185 
00186 // open a xml document
00187 int FEDM_XmlParser_Base::OpenDoc(char* sFileName, char* sMode)
00188 {
00189         if(strcmp(sMode, "w")==0)
00190         {
00191                 return m_pXmlWriter->OpenDoc(sFileName);
00192         }
00193         else if(strcmp(sMode, "r")==0)
00194         {
00195                 return m_pXmlReader->OpenDoc(sFileName);
00196         }
00197 
00198         FEDM_RETURN(FEDM_ERROR_UNSUPPORTED);
00199 }
00200 
00201 // close xml document
00202 int FEDM_XmlParser_Base::CloseDoc()
00203 {
00204         return m_pXmlWriter->CloseDoc();
00205 }
00206 
00207 // read the xml text from file
00208 int FEDM_XmlParser_Base::LoadDoc()
00209 {
00210         return m_pXmlReader->LoadDoc();
00211 }
00212 
00213 // read the xml text from file
00214 int FEDM_XmlParser_Base::LoadDoc(const char* szOemRootTag)
00215 {
00216         return m_pXmlReader->LoadDoc(szOemRootTag);
00217 }
00218 
00219 // read the xml text from stream
00220 int FEDM_XmlParser_Base::LoadStream(wstring sXmlStream)
00221 {
00222         return m_pXmlReader->LoadStream(sXmlStream);
00223 }
00224 
00225 // write the xml text into file
00226 int FEDM_XmlParser_Base::WriteDoc()
00227 {
00228         return m_pXmlWriter->WriteDoc();
00229 }
00230 wstring FEDM_XmlParser_Base::WriteStream()
00231 {
00232         return m_pXmlWriter->WriteStream();
00233 }
00234 
00235 void FEDM_XmlParser_Base::DeleteXmlTree()
00236 {
00237         if(m_bWriteMode)
00238                 m_pXmlWriter->DeleteXmlTree();
00239         else
00240                 m_pXmlReader->DeleteXmlTree();
00241 }
00242 
00243 int FEDM_XmlParser_Base::AddTagItem(FEDM_XML_TREEITEM* pParent, FEDM_XML_TREEITEM* pChild)
00244 {
00245         if(m_bWriteMode)
00246                 return m_pXmlWriter->AddTagItem(pParent, pChild);
00247         else
00248                 return m_pXmlReader->AddTagItem(pParent, pChild);
00249 }
00250 
00251 
00252 // ##################################################################################
00253 // interface for reader class
00254 // ##################################################################################
00255 
00256 FEDM_XML_TREEITEM* FEDM_XmlParser_Base::FindTag(        wstring sTag,
00257                                                                                                         unsigned int uiTagLevel,
00258                                                                                                         bool bNext)
00259 {
00260         return m_pXmlReader->FindTag(sTag, uiTagLevel, bNext);
00261 }
00262 
00263 FEDM_XML_TREEITEM* FEDM_XmlParser_Base::FindTag(        wstring sTag,
00264                                                                                                         wstring sAttribute,
00265                                                                                                         unsigned int uiTagLevel,
00266                                                                                                         bool bNext)
00267 {
00268         return m_pXmlReader->FindTag(sTag, sAttribute, uiTagLevel, bNext);
00269 }
00270 
00271 int     FEDM_XmlParser_Base::GetTagAttrib(      FEDM_XML_TREEITEM* item,
00272                                                                                 int iIndex, 
00273                                                                                 string& sAttrib, 
00274                                                                                 string& sValue )
00275 {
00276         return m_pXmlReader->GetTagAttrib(item, iIndex, sAttrib, sValue);
00277 }
00278 
00279 
00280 // ##################################################################################
00281 // interface for writer class
00282 // ##################################################################################
00283 
00284 FEDM_XML_TREEITEM* FEDM_XmlParser_Base::BuildTag(wstring sTag, bool bNewLine, bool bEmpty)
00285 {
00286         return m_pXmlWriter->BuildTag(sTag, bNewLine, bEmpty);
00287 }
00288 
00289 int FEDM_XmlParser_Base::AddTagValue(FEDM_XML_TREEITEM* item, wstring sValue)
00290 {
00291         return m_pXmlWriter->AddTagValue(item, sValue);
00292 }
00293 
00294 int FEDM_XmlParser_Base::AddTagAttrib(FEDM_XML_TREEITEM* item, wstring sAttrib, wstring sValue)
00295 {
00296         return m_pXmlWriter->AddTagAttrib(item, sAttrib, sValue);
00297 }
00298 
00299 void FEDM_XmlParser_Base::SetComment(wstring sComment)
00300 {
00301         m_pXmlWriter->SetComment(sComment);
00302 }


rfid_drivers
Author(s): Raul Perula-Martinez
autogenerated on Thu Apr 2 2015 03:06:13