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 #if defined(_FEDM_MYAXXESS_XML_SUPPORT)
00028
00029
00030
00031
00032 #include "FedmIscMyAxxess_XmlParser.h"
00033 #include "FEDM_XmlParser_IWriter.h"
00034 #include "FEDM_XmlParser_Types.h"
00035 #include "FedmIscCore.h"
00036 #include "FedmIscMyAxxess_Xml.h"
00037
00038
00039
00040
00041
00042 FedmIscMyAxxess_XmlParser::FedmIscMyAxxess_XmlParser(FedmIscMyAxxessReader* pAxxessReader)
00043 : FEDM_XmlParser_Base(FEDM_XML_PARSER_TYPE_FEDM, FEDM_XML_PARSER_TYPE_FEDM)
00044 {
00045 m_pAxxessReader = pAxxessReader;
00046
00047 SetComment();
00048 }
00049
00050
00051 FedmIscMyAxxess_XmlParser::~FedmIscMyAxxess_XmlParser(void)
00052 {
00053 }
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 int FedmIscMyAxxess_XmlParser::SerializeIn( char* szXmlFileName,
00072 char* szAccessCode,
00073 unsigned int uiAccessCodeLen)
00074 {
00075 if(strlen(szXmlFileName) == 0)
00076 return FEDM_ERROR_STRING_LENGTH;
00077
00078 int iBack = 0;
00079 unsigned int uiCrc = 0;
00080 FEDM_XML_TREEITEM* root = NULL;
00081
00082
00083 m_XmlHeader.Init();
00084
00085
00086 iBack = OpenDoc(szXmlFileName, "r");
00087 if(iBack)
00088 FEDM_RETURN(iBack);
00089
00090
00091 iBack = LoadDoc();
00092 if(iBack)
00093 FEDM_RETURN(iBack);
00094
00095
00096
00097 m_bWriteMode = false;
00098 m_bIsParsed = false;
00099
00100
00101
00102
00103 root = FindTag(FEDM_XML_TAG_OBID_UC, (unsigned int)0);
00104 if(root == NULL)
00105 {
00106 return m_iLastError;
00107 }
00108 AddTagItem(NULL, root);
00109
00110
00111
00112 FEDM_CHK2(iBack, SerializeHeaderIn(root));
00113
00114 if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE) == 0)
00115 {
00116 iBack = SerializeIn_AccessTable(root);
00117 }
00118 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE) == 0)
00119 {
00120 iBack = SerializeIn_TimezoneTable(root);
00121 }
00122 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE) == 0)
00123 {
00124 iBack = SerializeIn_HolidayTable(root);
00125 }
00126 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE) == 0)
00127 {
00128 iBack = SerializeIn_EventTable(root);
00129 }
00130 else
00131 {
00132 DeleteXmlTree();
00133 FEDM_RETURN(FEDM_XML_ERROR_DOC_FILE_TYPE);
00134 }
00135
00136 if(iBack)
00137 {
00138 DeleteXmlTree();
00139 FEDM_RETURN(iBack);
00140 }
00141
00142
00143
00144 DeleteXmlTree();
00145
00146
00147
00148 if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE) == 0)
00149 {
00150 uiCrc = CalcChecksum_AccessTable();
00151 }
00152 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE) == 0)
00153 {
00154 uiCrc = CalcChecksum_TimezoneTable();
00155 }
00156 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE) == 0)
00157 {
00158 uiCrc = CalcChecksum_HolidayTable();
00159 }
00160 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE) == 0)
00161 {
00162 FEDM_RETURN(FEDM_ERROR_UNSUPPORTED);
00163 }
00164
00165 if(uiAccessCodeLen > 0)
00166 {
00167 uiCrc = CalcCRC16CheckSum( uiCrc,
00168 (unsigned char*)szAccessCode,
00169 uiAccessCodeLen );
00170 }
00171
00172
00173 if(uiCrc != m_XmlHeader.uiCrc)
00174 {
00175 if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE) == 0)
00176 {
00177 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_ACCESS_TABLE);
00178 }
00179 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE) == 0)
00180 {
00181 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00182 }
00183 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE) == 0)
00184 {
00185 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_HOLIDAY_TABLE);
00186 }
00187 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE) == 0)
00188 {
00189 FEDM_RETURN(FEDM_ERROR_UNSUPPORTED);
00190 }
00191
00192 FEDM_RETURN(FEDM_ERROR_CRC);
00193 }
00194
00195 m_bIsParsed = true;
00196
00197 FEDM_RETURN(FEDM_OK);
00198 }
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214 int FedmIscMyAxxess_XmlParser::SerializeOut(unsigned int uiTableID,
00215 char* szXmlFileName,
00216 char* szAccessCode,
00217 unsigned int uiAccessCodeLen)
00218 {
00219 if(strlen(szXmlFileName) == 0)
00220 return FEDM_ERROR_STRING_LENGTH;
00221
00222 wchar_t wcTmp[128];
00223 int iBack = 0;
00224 int iTmp[2];
00225 unsigned int uiCrc = FEDM_CRC16_PRESET;
00226 FEDM_XML_TREEITEM* root = NULL;
00227
00228
00229
00230 m_bWriteMode = true;
00231
00232
00233
00234 if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE) == 0)
00235 {
00236 strcpy(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE);
00237 }
00238 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE) == 0)
00239 {
00240 strcpy(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE);
00241 }
00242 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE) == 0)
00243 {
00244 strcpy(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE);
00245 }
00246 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE) == 0)
00247 {
00248 strcpy(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE);
00249 }
00250 else
00251 {
00252 FEDM_RETURN(FEDM_XML_ERROR_DOC_FILE_TYPE);
00253 }
00254
00255
00256 sscanf(FEDM_XML_STRING_MAX_DOC_VERSION, "%d.%d", &iTmp[1], &iTmp[0]);
00257 m_XmlHeader.uiDocVersion = (((unsigned char)iTmp[1]) << 8) + (unsigned char)iTmp[0];
00258
00259
00260
00261 root = BuildTag(FEDM_XML_TAG_OBID_UC);
00262 if(root == NULL)
00263 {
00264 return m_iLastError;
00265 }
00266 AddTagItem(NULL, root);
00267
00268
00269
00270
00271 FEDM_CHK2(iBack, SerializeHeaderOut(root));
00272
00273
00274 if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE) == 0)
00275 {
00276 iBack = SerializeOut_AccessTable(root);
00277 }
00278 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE) == 0)
00279 {
00280 iBack = SerializeOut_TimezoneTable(root);
00281 }
00282 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE) == 0)
00283 {
00284 iBack = SerializeOut_HolidayTable(root);
00285 }
00286 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE) == 0)
00287 {
00288 iBack = SerializeOut_EventTable(root, uiCrc);
00289 }
00290 else
00291 {
00292 DeleteXmlTree();
00293 FEDM_RETURN(FEDM_XML_ERROR_DOC_FILE_TYPE);
00294 }
00295
00296 if(iBack)
00297 {
00298 DeleteXmlTree();
00299 FEDM_RETURN(iBack);
00300 }
00301
00302
00303
00304 if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_AT_DOC_TYPE) == 0)
00305 {
00306 m_XmlHeader.uiCrc = CalcChecksum_AccessTable();
00307 }
00308 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_TT_DOC_TYPE) == 0)
00309 {
00310 m_XmlHeader.uiCrc = CalcChecksum_TimezoneTable();
00311 }
00312 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_HT_DOC_TYPE) == 0)
00313 {
00314 m_XmlHeader.uiCrc = CalcChecksum_HolidayTable();
00315 }
00316 else if(strcmp(m_XmlHeader.szDocType, FEDM_XML_STRING_MAX_ET_DOC_TYPE) == 0)
00317 {
00318
00319 m_XmlHeader.uiCrc = uiCrc;
00320 }
00321
00322 if(uiAccessCodeLen > 0)
00323 {
00324 m_XmlHeader.uiCrc = CalcCRC16CheckSum( m_XmlHeader.uiCrc,
00325 (unsigned char*)szAccessCode,
00326 uiAccessCodeLen );
00327 }
00328 #if defined(__BORLANDC__) || defined(_MSC_VER)
00329 #if _MSC_VER <= 1200
00330 swprintf(wcTmp, L"%d", m_XmlHeader.uiCrc);
00331 #else
00332 swprintf(wcTmp, 128, L"%d", m_XmlHeader.uiCrc);
00333 #endif
00334 #else
00335 swprintf(wcTmp, 128, L"%d", m_XmlHeader.uiCrc);
00336 #endif
00337 root->aChildList[0]->aChildList[7]->sValue = wcTmp;
00338
00339
00340
00341
00342 iBack = OpenDoc(szXmlFileName, "w");
00343 if(iBack)
00344 {
00345 DeleteXmlTree();
00346 return iBack;
00347 }
00348 else
00349 {
00350 WriteDoc();
00351 }
00352
00353
00354 CloseDoc();
00355
00356 DeleteXmlTree();
00357
00358 FEDM_RETURN(FEDM_OK);
00359 }
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371 int FedmIscMyAxxess_XmlParser::SerializeIn_AccessTable(FEDM_XML_TREEITEM* root)
00372 {
00373 char cValue[256];
00374 unsigned char ucCnt = 0;
00375 unsigned int uiBit = 0;
00376 unsigned int uiValue = 0;
00377 unsigned __int64 ui64Value = 0;
00378 FEDM_XML_TREEITEM* access_table = NULL;
00379 FEDM_XML_TREEITEM* access_data = NULL;
00380 FEDM_XML_TREEITEM* timezones = NULL;
00381 FEDM_XML_TREEITEM* child = NULL;
00382
00383 FEDM_ISC_MYAXXESS_METADATA metadata;
00384 FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM item;
00385
00386 metadata.Init();
00387 item.Init();
00388
00389
00390
00391 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_ACCESS_TABLE);
00392
00393
00394
00395
00396
00397
00398
00399
00400 child = FindTag(FEDM_XML_TAG_ACCESS_TABLE_UC, (unsigned int)1, true);
00401 if(child == NULL)
00402 {
00403 DeleteXmlTree();
00404 return m_iLastError;
00405 }
00406 AddTagItem(root, child);
00407 access_table = child;
00408
00409
00410 child = FindTag(FEDM_XML_TAG_IDD_FORMAT_UC, (unsigned int)2, true);
00411 if(child != NULL)
00412 {
00413 AddTagItem(access_table, child);
00414 FEDM_SWSCANF(child->sValue, cValue);
00415 sscanf(cValue, "%u", &metadata.ucIDDFormat);
00416 switch(metadata.ucIDDFormat)
00417 {
00418 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
00419 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
00420 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
00421 break;
00422 default:
00423 DeleteXmlTree();
00424 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00425 }
00426 }
00427 else
00428 {
00429 DeleteXmlTree();
00430 return m_iLastError;
00431 }
00432
00433
00434 child = FindTag(FEDM_XML_TAG_IDD_LENGTH_UC, (unsigned int)2, true);
00435 if(child != NULL)
00436 {
00437 AddTagItem(access_table, child);
00438 FEDM_SWSCANF(child->sValue, cValue);
00439 sscanf(cValue, "%u", &metadata.ucIDDLength);
00440 switch(metadata.ucIDDFormat)
00441 {
00442 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
00443 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
00444 if(metadata.ucIDDLength < 1 || metadata.ucIDDLength > 64)
00445 {
00446 DeleteXmlTree();
00447 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00448 }
00449 break;
00450
00451 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
00452 if(metadata.ucIDDLength < 1 || metadata.ucIDDLength > 8)
00453 {
00454 DeleteXmlTree();
00455 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00456 }
00457 break;
00458 }
00459 }
00460 else
00461 {
00462 DeleteXmlTree();
00463 return m_iLastError;
00464 }
00465
00466
00467
00468 child = FindTag(FEDM_XML_TAG_ACCESS_DATA_UC, (unsigned int)2, true);
00469 while(child)
00470 {
00471 item.Init();
00472
00473 AddTagItem(access_table, child);
00474 access_data = child;
00475
00476
00477 child = FindTag(FEDM_XML_TAG_IDD_UC, (unsigned int)3, true);
00478 if(child != NULL)
00479 {
00480 AddTagItem(access_data, child);
00481 FEDM_SWSCANF(child->sValue, cValue);
00482 switch(metadata.ucIDDFormat)
00483 {
00484 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
00485 if(strlen(cValue) != metadata.ucIDDLength)
00486 {
00487 DeleteXmlTree();
00488 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_ACCESS_TABLE);
00489 FEDM_RETURN(FEDM_ERROR_STRING_LENGTH);
00490 }
00491
00492 memcpy(item.ucIDD, cValue, metadata.ucIDDLength);
00493 break;
00494
00495 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
00496 if(strlen(cValue) > 20)
00497 {
00498 DeleteXmlTree();
00499 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_ACCESS_TABLE);
00500 FEDM_RETURN(FEDM_ERROR_STRING_LENGTH);
00501 }
00502
00503 sscanf(cValue, "%lld", &ui64Value);
00504 for(ucCnt=0; ucCnt<metadata.ucIDDLength; ucCnt++)
00505 {
00506
00507 item.ucIDD[metadata.ucIDDLength-ucCnt-1] = *( ((unsigned char*)&ui64Value) + ucCnt );
00508 }
00509 if ((ucCnt < 8) && (*( ((unsigned char*)&ui64Value) + ucCnt ) != 0))
00510 {
00511 DeleteXmlTree();
00512 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_ACCESS_TABLE);
00513 FEDM_RETURN(FEDM_ERROR_STRING_LENGTH);
00514 }
00515
00516
00517 memset(&item.ucIDD[metadata.ucIDDLength], 0, 128-metadata.ucIDDLength);
00518 break;
00519
00520 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
00521 if(strlen(cValue) != (metadata.ucIDDLength<<1))
00522 {
00523 DeleteXmlTree();
00524 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_ACCESS_TABLE);
00525 FEDM_RETURN(FEDM_ERROR_STRING_LENGTH);
00526 }
00527
00528 FEDM_ConvHexCharToHexUChar(cValue, (metadata.ucIDDLength<<1), item.ucIDD, 128);
00529 break;
00530 }
00531 }
00532
00533
00534 child = FindTag(FEDM_XML_TAG_TIMEZONES_UC, (unsigned int)3, true);
00535 if(child != NULL)
00536 {
00537 AddTagItem(access_data, child);
00538 timezones = child;
00539
00540
00541 child = FindTag(FEDM_XML_TAG_TIMEZONE_UC, (unsigned int)4, true);
00542 while(child)
00543 {
00544 AddTagItem(timezones, child);
00545 AddTagItem(access_data, child);
00546 FEDM_SWSCANF(child->sValue, cValue);
00547 sscanf(cValue, "%u", &uiValue);
00548 if(uiValue >= 1 && uiValue <= 16)
00549 {
00550 uiBit = 1;
00551 uiBit <<= (uiValue-1);
00552 item.uiTimezones |= uiBit;
00553 }
00554 else
00555 {
00556 DeleteXmlTree();
00557 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00558 }
00559
00560 child = FindTag(FEDM_XML_TAG_TIMEZONE_UC, (unsigned int)4, true);
00561 }
00562 }
00563
00564
00565
00566
00567 FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM* pItem = new FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM;
00568 memcpy(pItem, &item, sizeof(FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM));
00569 m_pAxxessReader->m_AccessTable.push_back(pItem);
00570
00571 child = FindTag(FEDM_XML_TAG_ACCESS_DATA_UC, (unsigned int)2, true);
00572 }
00573
00574
00575 m_pAxxessReader->SetIDDFormat(metadata.ucIDDFormat);
00576 m_pAxxessReader->SetIDDLength(metadata.ucIDDLength);
00577
00578
00579
00580 FEDM_RETURN(FEDM_OK);
00581 }
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593 int FedmIscMyAxxess_XmlParser::SerializeIn_HolidayTable(FEDM_XML_TREEITEM* root)
00594 {
00595 char cValue[128];
00596 unsigned int uiYear = 0;
00597 unsigned int uiMonth = 0;
00598 unsigned int uiDay = 0;
00599 FEDM_XML_TREEITEM* table = NULL;
00600 FEDM_XML_TREEITEM* child = NULL;
00601
00602 FEDM_ISC_MYAXXESS_HOLIDAY_TABLE_ITEM* pItem = NULL;
00603
00604
00605
00606 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_HOLIDAY_TABLE);
00607
00608
00609
00610
00611
00612
00613
00614
00615 child = FindTag(FEDM_XML_TAG_HOLIDAY_TABLE_UC, (unsigned int)1, true);
00616 if(child == NULL)
00617 {
00618 DeleteXmlTree();
00619 return m_iLastError;
00620 }
00621 AddTagItem(root, child);
00622 table = child;
00623
00624
00625 child = FindTag(FEDM_XML_TAG_HOLIDAY_UC, (unsigned int)2, true);
00626 while(child != NULL)
00627 {
00628 AddTagItem(table, child);
00629
00630
00631
00632
00633
00634
00635
00636 FEDM_SWSCANF(child->sValue, cValue);
00637 sscanf(cValue, "%u-%u-%u", &uiYear, &uiMonth, &uiDay);
00638 if(uiYear < 2000 || uiYear > 2099 || uiMonth < 1 || uiMonth > 12 || uiDay < 1 || uiDay > 31)
00639 {
00640 DeleteXmlTree();
00641 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_HOLIDAY_TABLE);
00642 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00643 }
00644
00645
00646 pItem = new FEDM_ISC_MYAXXESS_HOLIDAY_TABLE_ITEM;
00647 pItem->Init();
00648 pItem->ucHoliday_Year = (unsigned char)(uiYear - 2000);
00649 pItem->ucHoliday_Month = (unsigned char)uiMonth;
00650 pItem->ucHoliday_Day = (unsigned char)uiDay;
00651 m_pAxxessReader->m_HolidayTable.push_back(pItem);
00652
00653 child = FindTag(FEDM_XML_TAG_HOLIDAY_UC, (unsigned int)2, true);
00654 }
00655
00656
00657
00658 FEDM_RETURN(FEDM_OK);
00659 }
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671 int FedmIscMyAxxess_XmlParser::SerializeIn_TimezoneTable(FEDM_XML_TREEITEM* root)
00672 {
00673 char cValue[128];
00674 unsigned int uiYear = 0;
00675 unsigned int uiMonth = 0;
00676 unsigned int uiDay = 0;
00677 unsigned int uiHour = 0;
00678 unsigned int uiMinute = 0;
00679 unsigned int uiSecond = 0;
00680 FEDM_XML_TREEITEM* table = NULL;
00681 FEDM_XML_TREEITEM* zone = NULL;
00682 FEDM_XML_TREEITEM* days = NULL;
00683 FEDM_XML_TREEITEM* child = NULL;
00684
00685 FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM* pItem = NULL;
00686 FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM item;
00687
00688 item.Init();
00689
00690
00691 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00692
00693
00694
00695
00696
00697
00698
00699
00700 child = FindTag(FEDM_XML_TAG_TIMEZONE_TABLE_UC, (unsigned int)1, true);
00701 if(child == NULL)
00702 {
00703 DeleteXmlTree();
00704 return m_iLastError;
00705 }
00706 AddTagItem(root, child);
00707 table = child;
00708
00709
00710 child = FindTag(FEDM_XML_TAG_TIMEZONE_UC, (unsigned int)2, true);
00711 while(child != NULL)
00712 {
00713 item.Init();
00714
00715 AddTagItem(table, child);
00716 zone = child;
00717
00718
00719 child = FindTag(FEDM_XML_TAG_DAYS_UC, (unsigned int)3, true);
00720 if(child == NULL)
00721 {
00722 DeleteXmlTree();
00723 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00724 return m_iLastError;
00725 }
00726 AddTagItem(zone, child);
00727 days = child;
00728
00729
00730 child = FindTag(FEDM_XML_TAG_MONDAY_UC, (unsigned int)4, true);
00731 if(child == NULL)
00732 {
00733 DeleteXmlTree();
00734 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00735 return m_iLastError;
00736 }
00737 AddTagItem(days, child);
00738 FEDM_SWSCANF(child->sValue, cValue);
00739 sscanf(cValue, "%u", &uiDay);
00740 if(uiDay > 0)
00741 item.ucDays |= 0x02;
00742
00743
00744 child = FindTag(FEDM_XML_TAG_TUESDAY_UC, (unsigned int)4, true);
00745 if(child == NULL)
00746 {
00747 DeleteXmlTree();
00748 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00749 return m_iLastError;
00750 }
00751 AddTagItem(days, child);
00752 FEDM_SWSCANF(child->sValue, cValue);
00753 sscanf(cValue, "%u", &uiDay);
00754 if(uiDay > 0)
00755 item.ucDays |= 0x04;
00756
00757
00758 child = FindTag(FEDM_XML_TAG_WEDNESDAY_UC, (unsigned int)4, true);
00759 if(child == NULL)
00760 {
00761 DeleteXmlTree();
00762 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00763 return m_iLastError;
00764 }
00765 AddTagItem(days, child);
00766 FEDM_SWSCANF(child->sValue, cValue);
00767 sscanf(cValue, "%u", &uiDay);
00768 if(uiDay > 0)
00769 item.ucDays |= 0x08;
00770
00771
00772 child = FindTag(FEDM_XML_TAG_THURSDAY_UC, (unsigned int)4, true);
00773 if(child == NULL)
00774 {
00775 DeleteXmlTree();
00776 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00777 return m_iLastError;
00778 }
00779 AddTagItem(days, child);
00780 FEDM_SWSCANF(child->sValue, cValue);
00781 sscanf(cValue, "%u", &uiDay);
00782 if(uiDay > 0)
00783 item.ucDays |= 0x10;
00784
00785
00786 child = FindTag(FEDM_XML_TAG_FRIDAY_UC, (unsigned int)4, true);
00787 if(child == NULL)
00788 {
00789 DeleteXmlTree();
00790 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00791 return m_iLastError;
00792 }
00793 AddTagItem(days, child);
00794 FEDM_SWSCANF(child->sValue, cValue);
00795 sscanf(cValue, "%u", &uiDay);
00796 if(uiDay > 0)
00797 item.ucDays |= 0x20;
00798
00799
00800 child = FindTag(FEDM_XML_TAG_SATURDAY_UC, (unsigned int)4, true);
00801 if(child == NULL)
00802 {
00803 DeleteXmlTree();
00804 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00805 return m_iLastError;
00806 }
00807 AddTagItem(days, child);
00808 FEDM_SWSCANF(child->sValue, cValue);
00809 sscanf(cValue, "%u", &uiDay);
00810 if(uiDay > 0)
00811 item.ucDays |= 0x40;
00812
00813
00814 child = FindTag(FEDM_XML_TAG_SUNDAY_UC, (unsigned int)4, true);
00815 if(child == NULL)
00816 {
00817 DeleteXmlTree();
00818 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00819 return m_iLastError;
00820 }
00821 AddTagItem(days, child);
00822 FEDM_SWSCANF(child->sValue, cValue);
00823 sscanf(cValue, "%u", &uiDay);
00824 if(uiDay > 0)
00825 item.ucDays |= 0x01;
00826
00827
00828 child = FindTag(FEDM_XML_TAG_DATE_FROM_UC, (unsigned int)3, true);
00829 if(child == NULL)
00830 {
00831 DeleteXmlTree();
00832 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00833 return m_iLastError;
00834 }
00835 AddTagItem(days, child);
00836
00837
00838
00839
00840
00841
00842
00843 FEDM_SWSCANF(child->sValue, cValue);
00844 sscanf(cValue, "%u-%u-%u", &uiYear, &uiMonth, &uiDay);
00845 if(uiYear < 2000 || uiYear > 2099 || uiMonth < 1 || uiMonth > 12 || uiDay < 1 || uiDay > 31)
00846 {
00847 DeleteXmlTree();
00848 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00849 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00850 }
00851 item.ucStartDate_Year = (unsigned char)(uiYear - 2000);
00852 item.ucStartDate_Month = (unsigned char)uiMonth;
00853 item.ucStartDate_Day = (unsigned char)uiDay;
00854
00855
00856 child = FindTag(FEDM_XML_TAG_DATE_TO_UC, (unsigned int)3, true);
00857 if(child == NULL)
00858 {
00859 DeleteXmlTree();
00860 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00861 return m_iLastError;
00862 }
00863 AddTagItem(days, child);
00864
00865
00866
00867
00868
00869
00870
00871 FEDM_SWSCANF(child->sValue, cValue);
00872 sscanf(cValue, "%u-%u-%u", &uiYear, &uiMonth, &uiDay);
00873 if(uiYear < 2000 || uiYear > 2099 || uiMonth < 1 || uiMonth > 12 || uiDay < 1 || uiDay > 31)
00874 {
00875 DeleteXmlTree();
00876 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00877 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00878 }
00879 item.ucEndDate_Year = (unsigned char)(uiYear - 2000);
00880 item.ucEndDate_Month = (unsigned char)uiMonth;
00881 item.ucEndDate_Day = (unsigned char)uiDay;
00882
00883
00884 child = FindTag(FEDM_XML_TAG_TIME_FROM_UC, (unsigned int)3, true);
00885 if(child == NULL)
00886 {
00887 DeleteXmlTree();
00888 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00889 return m_iLastError;
00890 }
00891 AddTagItem(days, child);
00892
00893
00894
00895
00896
00897
00898
00899 FEDM_SWSCANF(child->sValue, cValue);
00900 sscanf(cValue, "%u:%u:%u", &uiHour, &uiMinute, &uiSecond);
00901 if(uiHour > 23 || uiMinute > 59)
00902 {
00903 DeleteXmlTree();
00904 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00905 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00906 }
00907 item.ucStartTime_Hour = (unsigned char)uiHour;
00908 item.ucStartTime_Minute = (unsigned char)uiMinute;
00909
00910
00911 child = FindTag(FEDM_XML_TAG_TIME_TO_UC, (unsigned int)3, true);
00912 if(child == NULL)
00913 {
00914 DeleteXmlTree();
00915 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00916 return m_iLastError;
00917 }
00918 AddTagItem(days, child);
00919
00920
00921
00922
00923
00924
00925
00926 FEDM_SWSCANF(child->sValue, cValue);
00927 sscanf(cValue, "%u:%u:%u", &uiHour, &uiMinute, &uiSecond);
00928 if(uiHour > 23 || uiMinute > 59)
00929 {
00930 DeleteXmlTree();
00931 m_pAxxessReader->ClearTable(FEDM_MYAXXESS_TIMEZONE_TABLE);
00932 FEDM_RETURN(FEDM_ERROR_PARAMETER);
00933 }
00934 item.ucEndTime_Hour = (unsigned char)uiHour;
00935 item.ucEndTime_Minute = (unsigned char)uiMinute;
00936
00937
00938
00939 pItem = new FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM;
00940 memcpy(pItem, &item, sizeof(FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM));
00941 m_pAxxessReader->m_TimezoneTable.push_back(pItem);
00942
00943 child = FindTag(FEDM_XML_TAG_TIMEZONE_UC, (unsigned int)2, true);
00944 }
00945
00946
00947
00948 FEDM_RETURN(FEDM_OK);
00949 }
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961 int FedmIscMyAxxess_XmlParser::SerializeIn_EventTable(FEDM_XML_TREEITEM* root)
00962 {
00963 FEDM_RETURN(FEDM_ERROR_UNSUPPORTED);
00964 }
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977 int FedmIscMyAxxess_XmlParser::SerializeOut_AccessTable(FEDM_XML_TREEITEM* root)
00978 {
00979 char szValue[256];
00980 int iBack = 0;
00981 unsigned int uiBit = 0;
00982 unsigned __int64 ui64Value = 0;
00983 wchar_t wcTmp[256];
00984 FEDM_XML_TREEITEM* table = NULL;
00985 FEDM_XML_TREEITEM* access_data = NULL;
00986 FEDM_XML_TREEITEM* timezones = NULL;
00987 FEDM_XML_TREEITEM* child = NULL;
00988 FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM* pItem = NULL;
00989 vector<FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM*>::iterator itor;
00990
00991
00992
00993
00994
00995
00996
00997
00998 child = BuildTag(FEDM_XML_TAG_ACCESS_TABLE_UC);
00999 if(child == NULL)
01000 {
01001 DeleteXmlTree();
01002 return m_iLastError;
01003 }
01004 AddTagItem(root, child);
01005 table = child;
01006
01007
01008 child = BuildTag(FEDM_XML_TAG_IDD_FORMAT_UC, false);
01009 if(child == NULL)
01010 {
01011 DeleteXmlTree();
01012 return GetLastError();
01013 }
01014 AddTagItem(table, child);
01015
01016 switch(m_pAxxessReader->m_Metadata.ucIDDFormat)
01017 {
01018 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
01019 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
01020 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
01021 break;
01022 default:
01023 DeleteXmlTree();
01024 FEDM_RETURN(FEDM_ERROR_PARAMETER);
01025 }
01026 #if defined(__BORLANDC__) || defined(_MSC_VER)
01027 #if _MSC_VER <= 1200
01028 swprintf(wcTmp, L"%d", m_pAxxessReader->m_Metadata.ucIDDFormat);
01029 #else
01030 swprintf(wcTmp, 256, L"%d", m_pAxxessReader->m_Metadata.ucIDDFormat);
01031 #endif
01032 #else
01033 swprintf(wcTmp, 256, L"%d", m_pAxxessReader->m_Metadata.ucIDDFormat);
01034 #endif
01035 AddTagValue(child, wcTmp);
01036
01037
01038 child = BuildTag(FEDM_XML_TAG_IDD_LENGTH_UC, false);
01039 if(child == NULL)
01040 {
01041 DeleteXmlTree();
01042 return GetLastError();
01043 }
01044 #if defined(__BORLANDC__) || defined(_MSC_VER)
01045 #if _MSC_VER <= 1200
01046 swprintf(wcTmp, L"%d", m_pAxxessReader->m_Metadata.ucIDDLength);
01047 #else
01048 swprintf(wcTmp, 256, L"%d", m_pAxxessReader->m_Metadata.ucIDDLength);
01049 #endif
01050 #else
01051 swprintf(wcTmp, 256, L"%d", m_pAxxessReader->m_Metadata.ucIDDLength);
01052 #endif
01053 AddTagValue(child, wcTmp);
01054 AddTagItem(table, child);
01055
01056
01057 child = BuildTag(FEDM_XML_TAG_ACCESS_DATA_UC, false);
01058 if(child == NULL)
01059 {
01060 DeleteXmlTree();
01061 return GetLastError();
01062 }
01063 AddTagItem(table, child);
01064 access_data = child;
01065
01066
01067 for(itor = m_pAxxessReader->m_AccessTable.begin();
01068 itor != m_pAxxessReader->m_AccessTable.end();
01069 itor++)
01070 {
01071 pItem = *itor;
01072 if(pItem == NULL)
01073 continue;
01074
01075
01076 child = BuildTag(FEDM_XML_TAG_IDD_UC, false);
01077 if(child == NULL)
01078 {
01079 DeleteXmlTree();
01080 return GetLastError();
01081 }
01082
01083 switch(m_pAxxessReader->m_Metadata.ucIDDFormat)
01084 {
01085 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
01086 memcpy(szValue, pItem->ucIDD, m_pAxxessReader->m_Metadata.ucIDDLength);
01087 szValue[m_pAxxessReader->m_Metadata.ucIDDLength] = '\0';
01088 break;
01089
01090 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
01091 if(strlen((char*)pItem->ucIDD) > 20)
01092 {
01093 DeleteXmlTree();
01094 FEDM_RETURN(FEDM_ERROR_STRING_LENGTH);
01095 }
01096 ui64Value = 0;
01097 for(unsigned char ucCnt=0; ucCnt<m_pAxxessReader->m_Metadata.ucIDDLength; ucCnt++ )
01098 {
01099
01100 ui64Value += ( (unsigned __int64)pItem->ucIDD[m_pAxxessReader->m_Metadata.ucIDDLength-ucCnt-1] << (8*ucCnt) );
01101 }
01102 break;
01103
01104 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
01105 FEDM_ConvHexUCharToHexChar(pItem->ucIDD, m_pAxxessReader->m_Metadata.ucIDDLength, szValue, 256);
01106 break;
01107 }
01108
01109 #if defined(__BORLANDC__) || defined(_MSC_VER)
01110 #if _MSC_VER <= 1200
01111 swprintf(wcTmp, L"%S", szValue);
01112 #else
01113 swprintf(wcTmp, 256, L"%S", szValue);
01114 #endif
01115 #else
01116 swprintf(wcTmp, 256, L"%S", szValue);
01117 #endif
01118 AddTagValue(child, wcTmp);
01119 AddTagItem(access_data, child);
01120
01121
01122 child = BuildTag(FEDM_XML_TAG_TIMEZONES_UC, false);
01123 if(child == NULL)
01124 {
01125 DeleteXmlTree();
01126 return GetLastError();
01127 }
01128 AddTagItem(access_data, child);
01129 timezones = child;
01130
01131 uiBit = 1;
01132 for(int iCnt=1; iCnt<=16; iCnt++)
01133 {
01134 if(pItem->uiTimezones & uiBit)
01135 {
01136
01137 child = BuildTag(FEDM_XML_TAG_TIMEZONE_UC, false);
01138 if(child == NULL)
01139 {
01140 DeleteXmlTree();
01141 return GetLastError();
01142 }
01143 #if defined(__BORLANDC__) || defined(_MSC_VER)
01144 #if _MSC_VER <= 1200
01145 swprintf(wcTmp, L"%d", iCnt);
01146 #else
01147 swprintf(wcTmp, 256, L"%d", iCnt);
01148 #endif
01149 #else
01150 swprintf(wcTmp, 256, L"%d", iCnt);
01151 #endif
01152 AddTagValue(child, wcTmp);
01153 AddTagItem(timezones, child);
01154
01155 uiBit <<= 1;
01156 }
01157 }
01158
01159
01160 }
01161
01162
01163 FEDM_RETURN(FEDM_OK);
01164 }
01165
01166
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176 int FedmIscMyAxxess_XmlParser::SerializeOut_HolidayTable(FEDM_XML_TREEITEM* root)
01177 {
01178 int iBack = 0;
01179 wchar_t wcTmp[128];
01180 FEDM_XML_TREEITEM* table = NULL;
01181 FEDM_XML_TREEITEM* child = NULL;
01182 FEDM_ISC_MYAXXESS_HOLIDAY_TABLE_ITEM* pItem = NULL;
01183 vector<FEDM_ISC_MYAXXESS_HOLIDAY_TABLE_ITEM*>::iterator itor;
01184
01185
01186
01187
01188
01189
01190
01191
01192 child = BuildTag(FEDM_XML_TAG_HOLIDAY_TABLE_UC);
01193 if(child == NULL)
01194 {
01195 DeleteXmlTree();
01196 return m_iLastError;
01197 }
01198 AddTagItem(root, child);
01199 table = child;
01200
01201
01202 for(itor = m_pAxxessReader->m_HolidayTable.begin();
01203 itor != m_pAxxessReader->m_HolidayTable.end();
01204 itor++ )
01205 {
01206 pItem = *itor;
01207 if(pItem == NULL)
01208 continue;
01209
01210
01211 child = BuildTag(FEDM_XML_TAG_HOLIDAY_UC, false);
01212 if(child == NULL)
01213 {
01214 DeleteXmlTree();
01215 return GetLastError();
01216 }
01217
01218 #if defined(__BORLANDC__) || defined(_MSC_VER)
01219 #if _MSC_VER <= 1200
01220 swprintf(wcTmp, L"%d-%02d-%02d", ((int)(pItem->ucHoliday_Year)+2000), pItem->ucHoliday_Month, pItem->ucHoliday_Day);
01221 #else
01222 swprintf(wcTmp, 128, L"%d-%02d-%02d", ((int)(pItem->ucHoliday_Year)+2000), pItem->ucHoliday_Month, pItem->ucHoliday_Day);
01223 #endif
01224 #else
01225 swprintf(wcTmp, 128, L"%d-%02d-%02d", ((int)(pItem->ucHoliday_Year)+2000), pItem->ucHoliday_Month, pItem->ucHoliday_Day);
01226 #endif
01227 AddTagValue(child, wcTmp);
01228 AddTagItem(table, child);
01229 }
01230
01231
01232 FEDM_RETURN(FEDM_OK);
01233 }
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245 int FedmIscMyAxxess_XmlParser::SerializeOut_TimezoneTable(FEDM_XML_TREEITEM* root)
01246 {
01247 int iBack = 0;
01248 wchar_t wcTmp[128];
01249 FEDM_XML_TREEITEM* table = NULL;
01250 FEDM_XML_TREEITEM* zone = NULL;
01251 FEDM_XML_TREEITEM* days = NULL;
01252 FEDM_XML_TREEITEM* child = NULL;
01253 FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM* pItem = NULL;
01254 vector<FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM*>::iterator itor;
01255
01256
01257
01258
01259
01260
01261
01262
01263 child = BuildTag(FEDM_XML_TAG_TIMEZONE_TABLE_UC);
01264 if(child == NULL)
01265 {
01266 DeleteXmlTree();
01267 return m_iLastError;
01268 }
01269 AddTagItem(root, child);
01270 table = child;
01271
01272
01273 for(itor = m_pAxxessReader->m_TimezoneTable.begin();
01274 itor != m_pAxxessReader->m_TimezoneTable.end();
01275 itor++ )
01276 {
01277 pItem = *itor;
01278 if(pItem == NULL)
01279 continue;
01280
01281
01282 child = BuildTag(FEDM_XML_TAG_TIMEZONE_UC, false);
01283 if(child == NULL)
01284 {
01285 DeleteXmlTree();
01286 return GetLastError();
01287 }
01288 AddTagItem(table, child);
01289 zone = child;
01290
01291
01292 child = BuildTag(FEDM_XML_TAG_DAYS_UC, false);
01293 if(child == NULL)
01294 {
01295 DeleteXmlTree();
01296 return GetLastError();
01297 }
01298 AddTagItem(zone, child);
01299 days = child;
01300
01301
01302 child = BuildTag(FEDM_XML_TAG_MONDAY_UC, false);
01303 if(child == NULL)
01304 {
01305 DeleteXmlTree();
01306 return GetLastError();
01307 }
01308 if(pItem->ucDays & 0x02) AddTagValue(child, L"1");
01309 else AddTagValue(child, L"0");
01310 AddTagItem(days, child);
01311
01312
01313 child = BuildTag(FEDM_XML_TAG_TUESDAY_UC, false);
01314 if(child == NULL)
01315 {
01316 DeleteXmlTree();
01317 return GetLastError();
01318 }
01319 if(pItem->ucDays & 0x04) AddTagValue(child, L"1");
01320 else AddTagValue(child, L"0");
01321 AddTagItem(days, child);
01322
01323
01324 child = BuildTag(FEDM_XML_TAG_WEDNESDAY_UC, false);
01325 if(child == NULL)
01326 {
01327 DeleteXmlTree();
01328 return GetLastError();
01329 }
01330 if(pItem->ucDays & 0x08) AddTagValue(child, L"1");
01331 else AddTagValue(child, L"0");
01332 AddTagItem(days, child);
01333
01334
01335 child = BuildTag(FEDM_XML_TAG_THURSDAY_UC, false);
01336 if(child == NULL)
01337 {
01338 DeleteXmlTree();
01339 return GetLastError();
01340 }
01341 if(pItem->ucDays & 0x10) AddTagValue(child, L"1");
01342 else AddTagValue(child, L"0");
01343 AddTagItem(days, child);
01344
01345
01346 child = BuildTag(FEDM_XML_TAG_FRIDAY_UC, false);
01347 if(child == NULL)
01348 {
01349 DeleteXmlTree();
01350 return GetLastError();
01351 }
01352 if(pItem->ucDays & 0x20) AddTagValue(child, L"1");
01353 else AddTagValue(child, L"0");
01354 AddTagItem(days, child);
01355
01356
01357 child = BuildTag(FEDM_XML_TAG_SATURDAY_UC, false);
01358 if(child == NULL)
01359 {
01360 DeleteXmlTree();
01361 return GetLastError();
01362 }
01363 if(pItem->ucDays & 0x40) AddTagValue(child, L"1");
01364 else AddTagValue(child, L"0");
01365 AddTagItem(days, child);
01366
01367
01368 child = BuildTag(FEDM_XML_TAG_SUNDAY_UC, false);
01369 if(child == NULL)
01370 {
01371 DeleteXmlTree();
01372 return GetLastError();
01373 }
01374 if(pItem->ucDays & 0x01) AddTagValue(child, L"1");
01375 else AddTagValue(child, L"0");
01376 AddTagItem(days, child);
01377
01378
01379 child = BuildTag(FEDM_XML_TAG_DATE_FROM_UC, false);
01380 if(child == NULL)
01381 {
01382 DeleteXmlTree();
01383 return GetLastError();
01384 }
01385 #if defined(__BORLANDC__) || defined(_MSC_VER)
01386 #if _MSC_VER <= 1200
01387 swprintf(wcTmp, L"%d-%02d-%02d", ((int)(pItem->ucStartDate_Year)+2000), pItem->ucStartDate_Month, pItem->ucStartDate_Day);
01388 #else
01389 swprintf(wcTmp, 128, L"%d-%02d-%02d", ((int)(pItem->ucStartDate_Year)+2000), pItem->ucStartDate_Month, pItem->ucStartDate_Day);
01390 #endif
01391 #else
01392 swprintf(wcTmp, 128, L"%d-%02d-%02d", ((int)(pItem->ucStartDate_Year)+2000), pItem->ucStartDate_Month, pItem->ucStartDate_Day);
01393 #endif
01394 AddTagValue(child, wcTmp);
01395 AddTagItem(zone, child);
01396
01397
01398 child = BuildTag(FEDM_XML_TAG_DATE_TO_UC, false);
01399 if(child == NULL)
01400 {
01401 DeleteXmlTree();
01402 return GetLastError();
01403 }
01404 #if defined(__BORLANDC__) || defined(_MSC_VER)
01405 #if _MSC_VER <= 1200
01406 swprintf(wcTmp, L"%d-%02d-%02d", ((int)(pItem->ucEndDate_Year)+2000), pItem->ucEndDate_Month, pItem->ucEndDate_Day);
01407 #else
01408 swprintf(wcTmp, 128, L"%d-%02d-%02d", ((int)(pItem->ucEndDate_Year)+2000), pItem->ucEndDate_Month, pItem->ucEndDate_Day);
01409 #endif
01410 #else
01411 swprintf(wcTmp, 128, L"%d-%02d-%02d", ((int)(pItem->ucEndDate_Year)+2000), pItem->ucEndDate_Month, pItem->ucEndDate_Day);
01412 #endif
01413 AddTagValue(child, wcTmp);
01414 AddTagItem(zone, child);
01415
01416
01417 child = BuildTag(FEDM_XML_TAG_TIME_FROM_UC, false);
01418 if(child == NULL)
01419 {
01420 DeleteXmlTree();
01421 return GetLastError();
01422 }
01423 #if defined(__BORLANDC__) || defined(_MSC_VER)
01424 #if _MSC_VER <= 1200
01425 swprintf(wcTmp, L"%02d:%02d:00", pItem->ucStartTime_Hour, pItem->ucStartTime_Minute);
01426 #else
01427 swprintf(wcTmp, 128, L"%02d:%02d:00", pItem->ucStartTime_Hour, pItem->ucStartTime_Minute);
01428 #endif
01429 #else
01430 swprintf(wcTmp, 128, L"%02d:%02d:00", pItem->ucStartTime_Hour, pItem->ucStartTime_Minute);
01431 #endif
01432 AddTagValue(child, wcTmp);
01433 AddTagItem(zone, child);
01434
01435
01436 child = BuildTag(FEDM_XML_TAG_TIME_TO_UC, false);
01437 if(child == NULL)
01438 {
01439 DeleteXmlTree();
01440 return GetLastError();
01441 }
01442 #if defined(__BORLANDC__) || defined(_MSC_VER)
01443 #if _MSC_VER <= 1200
01444 swprintf(wcTmp, L"%02d:%02d:00", pItem->ucEndTime_Hour, pItem->ucEndTime_Minute);
01445 #else
01446 swprintf(wcTmp, 128, L"%02d:%02d:00", pItem->ucEndTime_Hour, pItem->ucEndTime_Minute);
01447 #endif
01448 #else
01449 swprintf(wcTmp, 128, L"%02d:%02d:00", pItem->ucEndTime_Hour, pItem->ucEndTime_Minute);
01450 #endif
01451 AddTagValue(child, wcTmp);
01452 AddTagItem(zone, child);
01453 }
01454
01455
01456 FEDM_RETURN(FEDM_OK);
01457 }
01458
01459
01460
01461
01462
01463
01464
01465
01466
01467
01468
01469
01470 int FedmIscMyAxxess_XmlParser::SerializeOut_EventTable(FEDM_XML_TREEITEM* root, unsigned int& uiCrc)
01471 {
01472 char szValue[256];
01473 int iBack = 0;
01474 wchar_t wcTmp[256];
01475 unsigned __int64 ui64Value = 0;
01476 FEDM_XML_TREEITEM* table = NULL;
01477 FEDM_XML_TREEITEM* ev = NULL;
01478 FEDM_XML_TREEITEM* child = NULL;
01479 FEDM_ISC_MYAXXESS_EVENT_TABLE_ITEM* pItem = NULL;
01480
01481
01482
01483 switch(m_pAxxessReader->m_Metadata.ucIDDFormat)
01484 {
01485 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
01486 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
01487 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
01488 break;
01489 default:
01490 FEDM_RETURN(FEDM_ERROR_PARAMETER);
01491 }
01492
01493
01494
01495 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)m_XmlHeader.szDocType, (unsigned int)strlen(m_XmlHeader.szDocType));
01496 uiCrc = CalcCRC16CheckSum(uiCrc, m_XmlHeader.uiDocVersion);
01497
01498
01499
01500
01501
01502
01503
01504
01505 child = BuildTag(FEDM_XML_TAG_EVENT_TABLE_UC);
01506 if(child == NULL)
01507 {
01508 DeleteXmlTree();
01509 return m_iLastError;
01510 }
01511 AddTagItem(root, child);
01512 table = child;
01513
01514 while(! m_pAxxessReader->m_EventTable.empty())
01515 {
01516 pItem = m_pAxxessReader->m_EventTable.front();
01517 if(pItem == NULL)
01518 continue;
01519
01520
01521 child = BuildTag(FEDM_XML_TAG_EVENT_UC, false);
01522 if(child == NULL)
01523 {
01524 DeleteXmlTree();
01525 return GetLastError();
01526 }
01527 AddTagItem(table, child);
01528 ev = child;
01529
01530
01531 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucEventID);
01532 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)pItem->ucIDD, (unsigned int)m_pAxxessReader->m_Metadata.ucIDDLength);
01533 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucYear);
01534 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucMonth);
01535 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucDay);
01536 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucHour);
01537 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucMinute);
01538 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucSecond);
01539 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucInput);
01540 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucAction);
01541 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->uiError);
01542 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)pItem->sSourceIP.c_str(), (unsigned int)pItem->sSourceIP.length());
01543
01544
01545 child = BuildTag(FEDM_XML_TAG_EVENT_ID_UC, false);
01546 if(child == NULL)
01547 {
01548 delete pItem;
01549 DeleteXmlTree();
01550 return GetLastError();
01551 }
01552 #if defined(__BORLANDC__) || defined(_MSC_VER)
01553 #if _MSC_VER <= 1200
01554 swprintf(wcTmp, L"%d", pItem->ucEventID);
01555 #else
01556 swprintf(wcTmp, 256, L"%d", pItem->ucEventID);
01557 #endif
01558 #else
01559 swprintf(wcTmp, 256, L"%d", pItem->ucEventID);
01560 #endif
01561 AddTagValue(child, wcTmp);
01562 AddTagItem(ev, child);
01563
01564
01565 child = BuildTag(FEDM_XML_TAG_IDD_UC, false);
01566 if(child == NULL)
01567 {
01568 delete pItem;
01569 DeleteXmlTree();
01570 return GetLastError();
01571 }
01572
01573 switch(m_pAxxessReader->m_Metadata.ucIDDFormat)
01574 {
01575 case FEDM_MYAXXESS_IDD_FORMAT_ASCII:
01576 memcpy(szValue, pItem->ucIDD, pItem->ucIDDLength);
01577 szValue[pItem->ucIDDLength] = '\0';
01578 break;
01579
01580 case FEDM_MYAXXESS_IDD_FORMAT_NUM:
01581 if(strlen((char*)pItem->ucIDD) > 20)
01582 {
01583 delete pItem;
01584 DeleteXmlTree();
01585 FEDM_RETURN(FEDM_ERROR_STRING_LENGTH);
01586 }
01587 ui64Value = 0;
01588 for(unsigned char ucCnt=0; ucCnt<pItem->ucIDDLength; ucCnt++ )
01589 {
01590
01591 ui64Value += ( (unsigned __int64)pItem->ucIDD[pItem->ucIDDLength-ucCnt-1] << (8*ucCnt) );
01592 }
01593 break;
01594
01595 case FEDM_MYAXXESS_IDD_FORMAT_HEX:
01596 FEDM_ConvHexUCharToHexChar(pItem->ucIDD, pItem->ucIDDLength, szValue, 256);
01597 break;
01598 }
01599
01600 #if defined(__BORLANDC__) || defined(_MSC_VER)
01601 #if _MSC_VER <= 1200
01602 swprintf(wcTmp, L"%S", szValue);
01603 #else
01604 swprintf(wcTmp, 256, L"%S", szValue);
01605 #endif
01606 #else
01607 swprintf(wcTmp, 256, L"%S", szValue);
01608 #endif
01609 AddTagValue(child, wcTmp);
01610 AddTagItem(ev, child);
01611
01612
01613 child = BuildTag(FEDM_XML_TAG_DATE_UC, false);
01614 if(child == NULL)
01615 {
01616 delete pItem;
01617 DeleteXmlTree();
01618 return GetLastError();
01619 }
01620 #if defined(__BORLANDC__) || defined(_MSC_VER)
01621 #if _MSC_VER <= 1200
01622 swprintf(wcTmp, L"%d-%02d-%02d", ((int)(pItem->ucYear)+2000), pItem->ucMonth, pItem->ucDay);
01623 #else
01624 swprintf(wcTmp, 256, L"%d-%02d-%02d", ((int)(pItem->ucYear)+2000), pItem->ucMonth, pItem->ucDay);
01625 #endif
01626 #else
01627 swprintf(wcTmp, 256, L"%d-%02d-%02d", ((int)(pItem->ucYear)+2000), pItem->ucMonth, pItem->ucDay);
01628 #endif
01629 AddTagValue(child, wcTmp);
01630 AddTagItem(ev, child);
01631
01632
01633 child = BuildTag(FEDM_XML_TAG_TIME_UC, false);
01634 if(child == NULL)
01635 {
01636 delete pItem;
01637 DeleteXmlTree();
01638 return GetLastError();
01639 }
01640 #if defined(__BORLANDC__) || defined(_MSC_VER)
01641 #if _MSC_VER <= 1200
01642 swprintf(wcTmp, L"%02d:%02d:%02d", pItem->ucHour, pItem->ucMinute, pItem->ucSecond);
01643 #else
01644 swprintf(wcTmp, 256, L"%02d:%02d:%02d", pItem->ucHour, pItem->ucMinute, pItem->ucSecond);
01645 #endif
01646 #else
01647 swprintf(wcTmp, 256, L"%02d:%02d:%02d", pItem->ucHour, pItem->ucMinute, pItem->ucSecond);
01648 #endif
01649 AddTagValue(child, wcTmp);
01650 AddTagItem(ev, child);
01651
01652
01653 child = BuildTag(FEDM_XML_TAG_INPUT_UC, false);
01654 if(child == NULL)
01655 {
01656 delete pItem;
01657 DeleteXmlTree();
01658 return GetLastError();
01659 }
01660 #if defined(__BORLANDC__) || defined(_MSC_VER)
01661 #if _MSC_VER <= 1200
01662 swprintf(wcTmp, L"%d", pItem->ucInput);
01663 #else
01664 swprintf(wcTmp, 256, L"%d", pItem->ucInput);
01665 #endif
01666 #else
01667 swprintf(wcTmp, 256, L"%d", pItem->ucInput);
01668 #endif
01669 AddTagValue(child, wcTmp);
01670 AddTagItem(ev, child);
01671
01672
01673 child = BuildTag(FEDM_XML_TAG_ACTION_UC, false);
01674 if(child == NULL)
01675 {
01676 delete pItem;
01677 DeleteXmlTree();
01678 return GetLastError();
01679 }
01680 #if defined(__BORLANDC__) || defined(_MSC_VER)
01681 #if _MSC_VER <= 1200
01682 swprintf(wcTmp, L"%d", pItem->ucAction);
01683 #else
01684 swprintf(wcTmp, 256, L"%d", pItem->ucAction);
01685 #endif
01686 #else
01687 swprintf(wcTmp, 256, L"%d", pItem->ucAction);
01688 #endif
01689 AddTagValue(child, wcTmp);
01690 AddTagItem(ev, child);
01691
01692
01693 child = BuildTag(FEDM_XML_TAG_ERROR_UC, false);
01694 if(child == NULL)
01695 {
01696 delete pItem;
01697 DeleteXmlTree();
01698 return GetLastError();
01699 }
01700 #if defined(__BORLANDC__) || defined(_MSC_VER)
01701 #if _MSC_VER <= 1200
01702 swprintf(wcTmp, L"%d", pItem->uiError);
01703 #else
01704 swprintf(wcTmp, 256, L"%i", pItem->uiError);
01705 #endif
01706 #else
01707 swprintf(wcTmp, 256, L"%i", pItem->uiError);
01708 #endif
01709 AddTagValue(child, wcTmp);
01710 AddTagItem(ev, child);
01711
01712
01713 child = BuildTag(FEDM_XML_TAG_SOURCE_UC, false);
01714 if(child == NULL)
01715 {
01716 delete pItem;
01717 DeleteXmlTree();
01718 return GetLastError();
01719 }
01720 #if defined(__BORLANDC__) || defined(_MSC_VER)
01721 #if _MSC_VER <= 1200
01722 swprintf(wcTmp, L"%S", pItem->sSourceIP.c_str());
01723 #else
01724 swprintf(wcTmp, 256, L"%S", pItem->sSourceIP.c_str());
01725 #endif
01726 #else
01727 swprintf(wcTmp, 256, L"%S", pItem->sSourceIP.c_str());
01728 #endif
01729 AddTagValue(child, wcTmp);
01730 AddTagItem(ev, child);
01731
01732
01733 delete pItem;
01734 m_pAxxessReader->m_EventTable.pop();
01735
01736 }
01737
01738 FEDM_RETURN(FEDM_OK);
01739 }
01740
01741
01742
01743
01744
01745
01746
01747
01748
01749
01750
01751
01752 unsigned int FedmIscMyAxxess_XmlParser::CalcChecksum_AccessTable()
01753 {
01754 unsigned int uiCrc = FEDM_CRC16_PRESET;
01755 FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM* pItem = NULL;
01756 vector<FEDM_ISC_MYAXXESS_ACCESS_TABLE_ITEM*>::iterator itor;
01757
01758
01759 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)m_XmlHeader.szDocType, (unsigned int)strlen(m_XmlHeader.szDocType));
01760 uiCrc = CalcCRC16CheckSum(uiCrc, m_XmlHeader.uiDocVersion);
01761
01762
01763 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)m_pAxxessReader->m_Metadata.ucIDDFormat);
01764 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)m_pAxxessReader->m_Metadata.ucIDDLength);
01765
01766 for(itor = m_pAxxessReader->m_AccessTable.begin();
01767 itor != m_pAxxessReader->m_AccessTable.end();
01768 itor++ )
01769 {
01770 pItem = *itor;
01771 if(pItem == NULL)
01772 continue;
01773
01774 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)pItem->ucIDD, (unsigned int)m_pAxxessReader->m_Metadata.ucIDDLength);
01775 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->uiTimezones);
01776
01777 }
01778
01779 return uiCrc;
01780 }
01781
01782
01783
01784
01785
01786
01787
01788
01789
01790
01791
01792
01793 unsigned int FedmIscMyAxxess_XmlParser::CalcChecksum_HolidayTable()
01794 {
01795 unsigned int uiCrc = FEDM_CRC16_PRESET;
01796 FEDM_ISC_MYAXXESS_HOLIDAY_TABLE_ITEM* pItem = NULL;
01797 vector<FEDM_ISC_MYAXXESS_HOLIDAY_TABLE_ITEM*>::iterator itor;
01798
01799
01800 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)m_XmlHeader.szDocType, (unsigned int)strlen(m_XmlHeader.szDocType));
01801 uiCrc = CalcCRC16CheckSum(uiCrc, m_XmlHeader.uiDocVersion);
01802
01803
01804 for(itor = m_pAxxessReader->m_HolidayTable.begin();
01805 itor != m_pAxxessReader->m_HolidayTable.end();
01806 itor++ )
01807 {
01808 pItem = *itor;
01809 if(pItem == NULL)
01810 continue;
01811
01812 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucHoliday_Year);
01813 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucHoliday_Month);
01814 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucHoliday_Day);
01815 }
01816
01817 return uiCrc;
01818 }
01819
01820
01821
01822
01823
01824
01825
01826
01827
01828
01829
01830
01831 unsigned int FedmIscMyAxxess_XmlParser::CalcChecksum_TimezoneTable()
01832 {
01833 unsigned int uiCrc = FEDM_CRC16_PRESET;
01834 FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM* pItem = NULL;
01835 vector<FEDM_ISC_MYAXXESS_TIMEZONE_TABLE_ITEM*>::iterator itor;
01836
01837
01838 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned char*)m_XmlHeader.szDocType, (unsigned int)strlen(m_XmlHeader.szDocType));
01839 uiCrc = CalcCRC16CheckSum(uiCrc, m_XmlHeader.uiDocVersion);
01840
01841
01842 for(itor = m_pAxxessReader->m_TimezoneTable.begin();
01843 itor != m_pAxxessReader->m_TimezoneTable.end();
01844 itor++ )
01845 {
01846 pItem = *itor;
01847 if(pItem == NULL)
01848 continue;
01849
01850 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucDays);
01851 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucStartDate_Year);
01852 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucStartDate_Month);
01853 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucStartDate_Day);
01854 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucEndDate_Year);
01855 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucEndDate_Month);
01856 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucEndDate_Day);
01857 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucStartTime_Hour);
01858 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucStartTime_Minute);
01859 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucEndTime_Hour);
01860 uiCrc = CalcCRC16CheckSum(uiCrc, (unsigned int)pItem->ucEndTime_Minute);
01861 }
01862
01863 return uiCrc;
01864 }
01865
01866
01867 void FedmIscMyAxxess_XmlParser::SetComment()
01868 {
01869 wstring sXmlComment;
01870
01871 sXmlComment = L"\n\n";
01872 sXmlComment += L"<!-- Copyright © 2009 -->\n";
01873 sXmlComment += L"<!-- FEIG ELECTRONIC GmbH, All Rights Reserved. -->\n";
01874 sXmlComment += L"<!-- Lange Strasse 4 -->\n";
01875 sXmlComment += L"<!-- D-35781 Weilburg -->\n";
01876 sXmlComment += L"<!-- Federal Republic of Germany -->\n";
01877 sXmlComment += L"<!-- phone : +49 6471 31090 -->\n";
01878 sXmlComment += L"<!-- fax : +49 6471 310999 -->\n";
01879 sXmlComment += L"<!-- e-mail : obid-support@feig.de -->\n";
01880 sXmlComment += L"<!-- Internet : http://www.feig.de -->\n";
01881 sXmlComment += L"<!-- OBID® and OBID i-scan® are registered Trademarks of FEIG ELECTRONIC GmbH -->\n";
01882 sXmlComment += L"\n";
01883 sXmlComment += L"<!-- This file contains a myAxxess-Reader file for one OBID i-scan® or OBID® classic-pro reader -->\n";
01884 sXmlComment += L"\n\n";
01885
01886 FEDM_XmlParser_Base::SetComment(sXmlComment);
01887 }
01888
01889 #endif // #if defined(_FEDM_MYAXXESS_XML_SUPPORT)