00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "FEDM_XmlParser_Base.h"
00032 #include "FEDM_XmlParser_TinyReader.h"
00033 #include "FEDM_XmlParser_FedmReader.h"
00034 #include "FEDM_XmlParser_FedmWriter.h"
00035
00036
00037
00038
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
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
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
00101
00102
00103
00104
00105
00106
00107
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
00121
00122
00123
00124
00125
00126
00127
00128
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
00148
00149
00150
00151
00152
00153
00154
00155
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
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
00202 int FEDM_XmlParser_Base::CloseDoc()
00203 {
00204 return m_pXmlWriter->CloseDoc();
00205 }
00206
00207
00208 int FEDM_XmlParser_Base::LoadDoc()
00209 {
00210 return m_pXmlReader->LoadDoc();
00211 }
00212
00213
00214 int FEDM_XmlParser_Base::LoadDoc(const char* szOemRootTag)
00215 {
00216 return m_pXmlReader->LoadDoc(szOemRootTag);
00217 }
00218
00219
00220 int FEDM_XmlParser_Base::LoadStream(wstring sXmlStream)
00221 {
00222 return m_pXmlReader->LoadStream(sXmlStream);
00223 }
00224
00225
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
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
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 }