The Smart Card Detective (SCD)
scd_logger.h
Go to the documentation of this file.
00001 
00037 #ifndef _SCD_LOGGER_H_
00038 #define _SCD_LOGGER_H_
00039 
00040 #include <stdint.h>
00041 
00042 #define LOG_BUFFER_SIZE 3000    // static for simplicity
00043                                 // we are restricted here by the memory capacity
00044 
00046 struct log_struct {
00047   uint8_t log_buffer[LOG_BUFFER_SIZE];
00048   uint32_t position;
00049 };
00050 typedef struct log_struct log_struct_t;
00051 
00052 
00061 typedef enum {
00062   // EMV/ISO-7816 data bytes
00063   LOG_BYTE_ATR_FROM_ICC = (0x00 << 2 | 0x00),             // 0x00
00064   LOG_BYTE_ATR_TO_TERMINAL = (0x01 << 2 | 0x00),          // 0x04
00065   LOG_BYTE_TO_TERMINAL = (0x02 << 2 | 0x00),              // 0x08
00066   LOG_BYTE_FROM_TERMINAL = (0x03 << 2 | 0x00),            // 0x0C
00067   LOG_BYTE_TO_ICC = (0x04 << 2 | 0x00),                   // 0x10
00068   LOG_BYTE_FROM_ICC = (0x05 << 2 | 0x00),                 // 0x14
00069 
00070   // Terminal events
00071   LOG_TERMINAL_CLK_ACTIVE = (0x10 << 2 | 0x00),           // 0x40
00072   LOG_TERMINAL_RST_LOW = (0x11 << 2 | 0x00),              // 0x44
00073   LOG_TERMINAL_TIME_OUT = (0x12 << 2 | 0x00),             // 0x48
00074   LOG_TERMINAL_ERROR_RECEIVE = (0x13 << 2 | 0x00),        // 0x4C
00075   LOG_TERMINAL_ERROR_SEND = (0x14 << 2 | 0x00),           // 0x50
00076   LOG_TERMINAL_NO_CLOCK = (0x15 << 2 | 0x00),             // 0x54
00077 
00078   // ICC events
00079   LOG_ICC_ACTIVATED = (0x20 << 2 | 0x00),                 // 0x80
00080   LOG_ICC_DEACTIVATED = (0x21 << 2 | 0x00),               // 0x84
00081   LOG_ICC_RST_HIGH = (0x22 << 2 | 0x00),                  // 0x88
00082   LOG_ICC_ERROR_RECEIVE = (0x23 << 2 | 0x00),             // 0x8C
00083   LOG_ICC_ERROR_SEND = (0x24 << 2 | 0x00),                // 0x90
00084   LOG_ICC_INSERTED = (0x25 << 2 | 0x00),                  // 0x94
00085 
00086   // General events
00087   // The time should be saved as little endian using 4 bytes
00088   LOG_TIME_DATA_TO_ICC = (0x30 << 2 | 0x03),              // 0xC3
00089   LOG_TIME_GENERAL = (0x31 << 2 | 0x03),                  // 0xC7
00090   // Error events
00091   LOG_ERROR_MEMORY = (0x32 << 2 | 0x00),                  // 0xC8
00092   LOG_WDT_RESET = (0x33 << 2 | 0x00),                     // 0xCC
00093 
00094 }SCD_LOG_BYTE;
00095 
00100 typedef enum{
00101   LOG_COM_SIDE_ICC = 0,
00102   LOG_COM_SIDE_TERMINAL = 1,
00103   LOG_COM_SIDE_BOTH = 2,
00104 }LOG_COM_SIDE;
00105 
00107 void ResetLogger(log_struct_t *logger);
00108 
00110 uint8_t LogByte1(log_struct_t *logger, SCD_LOG_BYTE type, uint8_t byte_a);
00111 
00113 uint8_t LogByte2(log_struct_t *logger, SCD_LOG_BYTE type, uint8_t byte_a,
00114         uint8_t byte_b);
00115 
00117 uint8_t LogByte3(log_struct_t *logger, SCD_LOG_BYTE type, uint8_t byte_a,
00118         uint8_t byte_b, uint8_t byte_c);
00119 
00121 uint8_t LogByte4(log_struct_t *logger, SCD_LOG_BYTE type, uint8_t byte_a,
00122         uint8_t byte_b, uint8_t byte_c, uint8_t byte_d);
00123 
00124 
00125 #endif // _SCD_LOGGER_H_
00126 
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines