00001 /*------------------------------------------------------- 00002 | | 00003 | FEDM_ISCReaderDiagnostic.h | 00004 | | 00005 --------------------------------------------------------- 00006 00007 Copyright © 2008-2014 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 : 08.12.2008 00018 00019 Version : 04.06.10 / 10.12.2014 / M. Hultsch 00020 - new mode 0x08 00021 00022 04.06.01 / 03.03.2014 / M. Hultsch 00023 - new mode 0x07 00024 00025 04.03.01 / 05.11.2012 / M. Hultsch 00026 - new mode 0x21 00027 00028 03.03.00 / 10.02.2011 / M. Hultsch 00029 00030 Operation Systems : independent 00031 00032 Function : class for collecting all reader diagnostic status 00033 00034 00035 Trademarks: 00036 ----------- 00037 OBID®, OBID i-scan® and OBID myAXXESS® are registered Trademarks of FEIG ELECTRONIC GmbH 00038 Other Trademarks: see FEDM.h 00039 */ 00040 00041 #if !defined(_FEDM_ISC_READER_DIAGNOSTIC_) 00042 #define _FEDM_ISC_READER_DIAGNOSTIC_ 00043 00044 00045 00046 00047 00048 //##################################################################################### 00049 // structure 00050 //##################################################################################### 00051 00053 typedef struct _FEDM_ISC_READER_DIAGNOSTIC 00054 { 00055 // Reader and Antenna Status 00056 // [0x6E] and Mode=0x01 00057 union 00058 { 00059 unsigned char ucFlagsA; 00060 struct 00061 { 00062 unsigned char bRfHardware: 1; 00063 unsigned char bRfNoise: 1; 00064 unsigned char bRfPhaseError_Less: 1; 00065 unsigned char bRfPhaseError_More: 1; 00066 unsigned char bRfPowerAmp: 1; 00067 unsigned char bTempWarning: 1; 00068 unsigned char bSyncTimeout: 1; 00069 unsigned char bTempAlarm: 1; 00070 }; 00071 struct 00072 { 00073 unsigned char bDummy1: 5; 00074 unsigned char bChannelAlloc: 1; 00075 unsigned char bDummy2: 2; 00076 }; 00077 }; 00078 00079 union 00080 { 00081 unsigned char ucFlagsB; 00082 struct 00083 { 00084 unsigned char bRfPhaseError_Ant1: 1; 00085 unsigned char bRfPhaseError_Ant2: 1; 00086 unsigned char bRfPhaseError_Ant3: 1; 00087 unsigned char bRfPhaseError_Ant4: 1; 00088 unsigned char bDummy3: 4; 00089 }; 00090 struct 00091 { 00092 unsigned char bMuxStatus: 1; 00093 unsigned char bDatStatus: 1; 00094 unsigned char bDCAntError: 1; 00095 unsigned char bDummy4: 5; 00096 }; 00097 00098 }; 00099 00100 // RF Power Amplifier Status 00101 // [0x6E] and Mode=0x02 00102 // only ISC.LR200, ISC.LR2000 and ISC.MR200 00103 union 00104 { 00105 struct 00106 { 00107 unsigned short int uiImpedance; 00108 }; 00109 00110 struct 00111 { 00112 unsigned char ucRfPower; 00113 unsigned char ucRfModulation; 00114 unsigned char ucAmpTemp; 00115 }; 00116 }; 00117 00118 // Multiplexer Status 00119 // [0x6E] and Mode=0x03 00120 unsigned char ucMuxStatusCh1; 00121 unsigned char ucMuxStatusCh2; 00122 unsigned char ucMuxStatusCh3; 00123 unsigned char ucMuxStatusCh4; 00124 unsigned char ucMuxStatusCh5; 00125 unsigned char ucMuxStatusCh6; 00126 unsigned char ucMuxStatusCh7; 00127 unsigned char ucMuxStatusCh8; 00128 00129 // EEPROM and FPGA Status 00130 // [0x6E] and Mode=0x04 00131 unsigned char ucIntErrorA; 00132 00133 union 00134 { 00135 unsigned char ucIntErrorB; 00136 struct 00137 { 00138 unsigned char bEepromDevice1: 1; 00139 unsigned char bEepromDevice2: 1; 00140 unsigned char bHwFilter: 1; 00141 unsigned char bRfDecoder: 1; 00142 unsigned char bParaMismatch: 1; 00143 unsigned char bDummy5: 3; 00144 }; 00145 }; 00146 00147 // Multiplexer Impedance Status 00149 #if defined(__BORLANDC__) 00150 union _CNTRL_OUT1 00151 #else 00152 union CNTRL_OUT1 00153 #endif 00154 { 00156 unsigned char ucMux_PowerAmp; 00157 struct 00158 { 00161 unsigned char bMuxCh1_PowerAmp: 1; 00164 unsigned char bMuxCh2_PowerAmp: 1; 00167 unsigned char bMuxCh3_PowerAmp: 1; 00170 unsigned char bMuxCh4_PowerAmp: 1; 00173 unsigned char bMuxCh5_PowerAmp: 1; 00176 unsigned char bMuxCh6_PowerAmp: 1; 00179 unsigned char bMuxCh7_PowerAmp: 1; 00182 unsigned char bMuxCh8_PowerAmp: 1; 00183 }; 00184 } CNTRL_OUT1; 00185 00187 #if defined(__BORLANDC__) 00188 union _PHASE_LT50_OUT1 00189 #else 00190 union PHASE_LT50_OUT1 00191 #endif 00192 { 00194 unsigned char ucMux_PhaseError_Less; 00195 struct 00196 { 00198 unsigned char bMuxCh1_PhaseError_Less: 1; 00200 unsigned char bMuxCh2_PhaseError_Less: 1; 00202 unsigned char bMuxCh3_PhaseError_Less: 1; 00204 unsigned char bMuxCh4_PhaseError_Less: 1; 00206 unsigned char bMuxCh5_PhaseError_Less: 1; 00208 unsigned char bMuxCh6_PhaseError_Less: 1; 00210 unsigned char bMuxCh7_PhaseError_Less: 1; 00212 unsigned char bMuxCh8_PhaseError_Less: 1; 00213 }; 00214 } PHASE_LT50_OUT1; 00215 00217 #if defined(__BORLANDC__) 00218 union _PHASE_GT50_OUT1 00219 #else 00220 union PHASE_GT50_OUT1 00221 #endif 00222 { 00224 unsigned char ucMux_PhaseError_More; 00225 struct 00226 { 00228 unsigned char bMuxCh1_PhaseError_More: 1; 00230 unsigned char bMuxCh2_PhaseError_More: 1; 00232 unsigned char bMuxCh3_PhaseError_More: 1; 00234 unsigned char bMuxCh4_PhaseError_More: 1; 00236 unsigned char bMuxCh5_PhaseError_More: 1; 00238 unsigned char bMuxCh6_PhaseError_More: 1; 00240 unsigned char bMuxCh7_PhaseError_More: 1; 00242 unsigned char bMuxCh8_PhaseError_More: 1; 00243 }; 00244 } PHASE_GT50_OUT1; 00245 00247 #if defined(__BORLANDC__) 00248 union _CNTRL_OUT2 00249 #else 00250 union CNTRL_OUT2 00251 #endif 00252 { 00254 unsigned char ucMux_PowerAmp; 00255 struct 00256 { 00259 unsigned char bMuxCh1_PowerAmp: 1; 00262 unsigned char bMuxCh2_PowerAmp: 1; 00265 unsigned char bMuxCh3_PowerAmp: 1; 00268 unsigned char bMuxCh4_PowerAmp: 1; 00271 unsigned char bMuxCh5_PowerAmp: 1; 00274 unsigned char bMuxCh6_PowerAmp: 1; 00277 unsigned char bMuxCh7_PowerAmp: 1; 00280 unsigned char bMuxCh8_PowerAmp: 1; 00281 }; 00282 } CNTRL_OUT2; 00283 00285 #if defined(__BORLANDC__) 00286 union _PHASE_LT50_OUT2 00287 #else 00288 union PHASE_LT50_OUT2 00289 #endif 00290 { 00292 unsigned char ucMux_PhaseError_Less; 00293 struct 00294 { 00296 unsigned char bMuxCh1_PhaseError_Less: 1; 00298 unsigned char bMuxCh2_PhaseError_Less: 1; 00300 unsigned char bMuxCh3_PhaseError_Less: 1; 00302 unsigned char bMuxCh4_PhaseError_Less: 1; 00304 unsigned char bMuxCh5_PhaseError_Less: 1; 00306 unsigned char bMuxCh6_PhaseError_Less: 1; 00308 unsigned char bMuxCh7_PhaseError_Less: 1; 00310 unsigned char bMuxCh8_PhaseError_Less: 1; 00311 }; 00312 } PHASE_LT50_OUT2; 00313 00315 #if defined(__BORLANDC__) 00316 union _PHASE_GT50_OUT2 00317 #else 00318 union PHASE_GT50_OUT2 00319 #endif 00320 { 00322 unsigned char ucMux_PhaseError_More; 00323 struct 00324 { 00326 unsigned char bMuxCh1_PhaseError_More: 1; 00328 unsigned char bMuxCh2_PhaseError_More: 1; 00330 unsigned char bMuxCh3_PhaseError_More: 1; 00332 unsigned char bMuxCh4_PhaseError_More: 1; 00334 unsigned char bMuxCh5_PhaseError_More: 1; 00336 unsigned char bMuxCh6_PhaseError_More: 1; 00338 unsigned char bMuxCh7_PhaseError_More: 1; 00340 unsigned char bMuxCh8_PhaseError_More: 1; 00341 }; 00342 } PHASE_GT50_OUT2; 00343 00345 #if defined(__BORLANDC__) 00346 union _CNTRL_OUT3 00347 #else 00348 union CNTRL_OUT3 00349 #endif 00350 { 00352 unsigned char ucMux_PowerAmp; 00353 struct 00354 { 00357 unsigned char bMuxCh1_PowerAmp: 1; 00360 unsigned char bMuxCh2_PowerAmp: 1; 00363 unsigned char bMuxCh3_PowerAmp: 1; 00366 unsigned char bMuxCh4_PowerAmp: 1; 00369 unsigned char bMuxCh5_PowerAmp: 1; 00372 unsigned char bMuxCh6_PowerAmp: 1; 00375 unsigned char bMuxCh7_PowerAmp: 1; 00378 unsigned char bMuxCh8_PowerAmp: 1; 00379 }; 00380 } CNTRL_OUT3; 00381 00383 #if defined(__BORLANDC__) 00384 union _PHASE_LT50_OUT3 00385 #else 00386 union PHASE_LT50_OUT3 00387 #endif 00388 { 00390 unsigned char ucMux_PhaseError_Less; 00391 struct 00392 { 00394 unsigned char bMuxCh1_PhaseError_Less: 1; 00396 unsigned char bMuxCh2_PhaseError_Less: 1; 00398 unsigned char bMuxCh3_PhaseError_Less: 1; 00400 unsigned char bMuxCh4_PhaseError_Less: 1; 00402 unsigned char bMuxCh5_PhaseError_Less: 1; 00404 unsigned char bMuxCh6_PhaseError_Less: 1; 00406 unsigned char bMuxCh7_PhaseError_Less: 1; 00408 unsigned char bMuxCh8_PhaseError_Less: 1; 00409 }; 00410 } PHASE_LT50_OUT3; 00411 00413 #if defined(__BORLANDC__) 00414 union _PHASE_GT50_OUT3 00415 #else 00416 union PHASE_GT50_OUT3 00417 #endif 00418 { 00420 unsigned char ucMux_PhaseError_More; 00421 struct 00422 { 00424 unsigned char bMuxCh1_PhaseError_More: 1; 00426 unsigned char bMuxCh2_PhaseError_More: 1; 00428 unsigned char bMuxCh3_PhaseError_More: 1; 00430 unsigned char bMuxCh4_PhaseError_More: 1; 00432 unsigned char bMuxCh5_PhaseError_More: 1; 00434 unsigned char bMuxCh6_PhaseError_More: 1; 00436 unsigned char bMuxCh7_PhaseError_More: 1; 00438 unsigned char bMuxCh8_PhaseError_More: 1; 00439 }; 00440 } PHASE_GT50_OUT3; 00441 00443 #if defined(__BORLANDC__) 00444 union _CNTRL_OUT4 00445 #else 00446 union CNTRL_OUT4 00447 #endif 00448 { 00450 unsigned char ucMux_PowerAmp; 00451 struct 00452 { 00455 unsigned char bMuxCh1_PowerAmp: 1; 00458 unsigned char bMuxCh2_PowerAmp: 1; 00461 unsigned char bMuxCh3_PowerAmp: 1; 00464 unsigned char bMuxCh4_PowerAmp: 1; 00467 unsigned char bMuxCh5_PowerAmp: 1; 00470 unsigned char bMuxCh6_PowerAmp: 1; 00473 unsigned char bMuxCh7_PowerAmp: 1; 00476 unsigned char bMuxCh8_PowerAmp: 1; 00477 }; 00478 } CNTRL_OUT4; 00479 00481 #if defined(__BORLANDC__) 00482 union _PHASE_LT50_OUT4 00483 #else 00484 union PHASE_LT50_OUT4 00485 #endif 00486 { 00488 unsigned char ucMux_PhaseError_Less; 00489 struct 00490 { 00492 unsigned char bMuxCh1_PhaseError_Less: 1; 00494 unsigned char bMuxCh2_PhaseError_Less: 1; 00496 unsigned char bMuxCh3_PhaseError_Less: 1; 00498 unsigned char bMuxCh4_PhaseError_Less: 1; 00500 unsigned char bMuxCh5_PhaseError_Less: 1; 00502 unsigned char bMuxCh6_PhaseError_Less: 1; 00504 unsigned char bMuxCh7_PhaseError_Less: 1; 00506 unsigned char bMuxCh8_PhaseError_Less: 1; 00507 }; 00508 } PHASE_LT50_OUT4; 00509 00511 #if defined(__BORLANDC__) 00512 union _PHASE_GT50_OUT4 00513 #else 00514 union PHASE_GT50_OUT4 00515 #endif 00516 { 00518 unsigned char ucMux_PhaseError_More; 00519 struct 00520 { 00522 unsigned char bMuxCh1_PhaseError_More: 1; 00524 unsigned char bMuxCh2_PhaseError_More: 1; 00526 unsigned char bMuxCh3_PhaseError_More: 1; 00528 unsigned char bMuxCh4_PhaseError_More: 1; 00530 unsigned char bMuxCh5_PhaseError_More: 1; 00532 unsigned char bMuxCh6_PhaseError_More: 1; 00534 unsigned char bMuxCh7_PhaseError_More: 1; 00536 unsigned char bMuxCh8_PhaseError_More: 1; 00537 }; 00538 } PHASE_GT50_OUT4; 00539 00540 // MAX Status 00541 // [0x6E] and Mode=0x06 00542 union 00543 { 00544 unsigned short int usErrorFlags; 00545 struct 00546 { 00547 unsigned short int bRTC: 1; 00548 unsigned short int bMetadata: 1; 00549 unsigned short int bTimezoneTable: 1; 00550 unsigned short int bHolidayTable: 1; 00551 unsigned short int bAccessTable: 1; 00552 unsigned short int bRes1: 1; 00553 unsigned short int bReaderConfig: 1; 00554 unsigned short int bTableUpdate: 1; 00555 unsigned short int bRes2: 8; 00556 }; 00557 }; 00558 00559 unsigned short int usEventTableSize; 00560 unsigned short int usEventTableLength; 00561 00562 // ID ISC.PRH200 LED Status 00563 // [0x6E] and Mode=0x07 00564 unsigned char ucNoOfLEDs; 00565 unsigned char ucLEDStatus[29]; 00566 00567 00568 // ID ISC.LR2500-B Antenna Tuning Status 00569 // [0x6E] and Mode=0x08 00570 unsigned short int usRes1; 00571 unsigned short int usVoltage; 00572 unsigned short int usRes2; 00573 unsigned short int usCurrent; 00574 unsigned short int usPhase; 00575 short int iPhase; 00576 unsigned char ucRes1; 00577 unsigned char ucRes2; 00578 unsigned char ucRes3; 00579 00580 // Firmware Status 00581 // [0x6E] and Mode=0x20 00582 unsigned char ucFirmwareStatus[32]; 00583 00584 // Config-Para Change 00585 // [0x6E] and Mode=0x21 00586 unsigned char ucConfigParaChange; 00587 00588 00589 bool bIsDiagnosticRead; 00590 bool bIsMode0x01Read; 00591 bool bIsMode0x02Read; 00592 bool bIsMode0x03Read; 00593 bool bIsMode0x04Read; 00594 bool bIsMode0x05Read; 00595 bool bIsMode0x06Read; 00596 bool bIsMode0x07Read; 00597 bool bIsMode0x08Read; 00598 bool bIsMode0x20Read; 00599 bool bIsMode0x21Read; 00600 00601 // Reader information, only when Diagnostic Data sent with notification protocol 00602 union 00603 { 00604 unsigned char ucReaderType; 00605 unsigned char ucReaderClass; 00606 }; 00607 unsigned char ucReaderClassGen; 00608 unsigned char ucReaderTypeOfClass; 00609 unsigned char ucReserved3; 00610 00612 void Init() 00613 { 00614 memset(&ucFlagsA, 0, sizeof(_FEDM_ISC_READER_DIAGNOSTIC)); 00615 } 00616 00617 00620 unsigned int GetReaderType() 00621 { 00622 if(ucReaderType & 0x80) 00623 { 00624 // class information 00625 return ((unsigned int)ucReserved3<<24) + 00626 ((unsigned int)ucReaderTypeOfClass<<16) + 00627 ((unsigned int)ucReaderClassGen<<8) + 00628 (unsigned int)ucReaderClass; 00629 } 00630 else 00631 { 00632 // single type number 00633 return (unsigned int)ucReaderClass; 00634 } 00635 } 00636 00637 } FEDM_ISC_READER_DIAGNOSTIC; 00638 00639 00640 #endif // !defined(_FEDM_ISC_READER_DIAGNOSTIC_)