Commit da243f3f by developer38

v1.1 - new EMV functions added, minor bugs fixed, submodule dependencies updated

parent df2a1e71
[submodule "LINUX/apdu_credit_card_example/ufr-lib"]
path = LINUX/apdu_credit_card_example/lib
url = https://git.d-logic.net/nfc-rfid-reader-sdk/ufr-lib.git
[submodule "WINDOWS/apdu_credit_card_example/ufr-lib"]
path = WINDOWS/apdu_credit_card_example/lib
path = WINDOWS/apdu_credit_card_example/ufr-lib
url = https://git.d-logic.net/nfc-rfid-reader-sdk/ufr-lib.git
[submodule "WINDOWS/apdu_credit_card_example/lib"]
path = WINDOWS/apdu_credit_card_example/lib
[submodule "LINUX\\apdu_credit_card_example\\ufr-lib"]
path = LINUX\\apdu_credit_card_example\\ufr-lib
url = https://git.d-logic.net/nfc-rfid-reader-sdk/ufr-lib.git
......@@ -11,16 +11,17 @@
#define APDU_CREDIT_CARD_EXAMPLEMAIN_H
//(*Headers(apdu_credit_card_exampleFrame)
#include <wx/button.h>
#include <wx/frame.h>
#include <wx/grid.h>
#include <wx/notebook.h>
#include <wx/panel.h>
#include <wx/radiobut.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/statusbr.h>
#include <wx/textctrl.h>
#include <wx/checkbox.h>
#include <wx/radiobut.h>
#include <wx/panel.h>
#include <wx/grid.h>
#include <wx/button.h>
#include <wx/frame.h>
#include <wx/statusbr.h>
//*)
class apdu_credit_card_exampleFrame: public wxFrame
......@@ -54,9 +55,12 @@ class apdu_credit_card_exampleFrame: public wxFrame
void OnButton11Click(wxCommandEvent& event);
void OnButton10Click1(wxCommandEvent& event);
void OnButton11Click1(wxCommandEvent& event);
void tryEmvPseLog(const char *df_name, const char *szTitlePse);
int tryEmvPseLog(const char *df_name, const char *szTitlePse);
void OnButton10Click2(wxCommandEvent& event);
void OnButton11Click2(wxCommandEvent& event);
void OncheckAdvancedClick(wxCommandEvent& event);
void OnbtnGetPanClick(wxCommandEvent& event);
void OnbtnGetLastTranasctionClick(wxCommandEvent& event);
//*)
//(*Identifiers(apdu_credit_card_exampleFrame)
......@@ -66,13 +70,21 @@ class apdu_credit_card_exampleFrame: public wxFrame
static const long ID_STATICTEXT1;
static const long ID_STATICTEXT12;
static const long ID_TEXTCTRL9;
static const long ID_CHECKBOX1;
static const long ID_STATICTEXT6;
static const long ID_STATICTEXT7;
static const long ID_STATICTEXT8;
static const long ID_STATICTEXT9;
static const long ID_TEXTCTRL8;
static const long ID_TEXTCTRL10;
static const long ID_TEXTCTRL11;
static const long ID_TEXTCTRL12;
static const long ID_RADIOBUTTON1;
static const long ID_RADIOBUTTON2;
static const long ID_STATICTEXT5;
static const long ID_TEXTCTRL4;
static const long ID_TEXTCTRL5;
static const long ID_TEXTCTRL6;
static const long ID_TEXTCTRL7;
static const long ID_STATICTEXT10;
static const long ID_TEXTCTRL14;
static const long ID_BUTTON12;
static const long ID_BUTTON13;
static const long ID_BUTTON10;
static const long ID_BUTTON11;
static const long ID_GRID1;
......@@ -99,42 +111,50 @@ class apdu_credit_card_exampleFrame: public wxFrame
//*)
//(*Declarations(apdu_credit_card_exampleFrame)
wxButton* Button10;
wxButton* Button11;
wxButton* Button1;
wxButton* Button2;
wxButton* Button3;
wxTextCtrl* txtPortInterface;
wxStaticText* PortLabel;
wxRadioButton* RadioButton1;
wxPanel* Panel5;
wxButton* btnGetLastTranasction;
wxStaticText* labelPortInterface;
wxButton* Button4;
wxButton* Button5;
wxButton* Button6;
wxButton* Button7;
wxButton* Button8;
wxButton* Button9;
wxGrid* Transactions_Grid;
wxNotebook* Notebook1;
wxNotebook* Notebook2;
wxPanel* Panel1;
wxPanel* Panel2;
wxPanel* Panel3;
wxStaticText* StaticText2;
wxPanel* Panel4;
wxPanel* Panel5;
wxRadioButton* RadioButton1;
wxTextCtrl* txtPAN;
wxRadioButton* RadioButton2;
wxStaticText* PortLabel;
wxButton* Button1;
wxTextCtrl* txtOpenArg;
wxStaticText* StaticText11;
wxPanel* Panel1;
wxStaticText* StaticText1;
wxStaticText* StaticText2;
wxStaticText* StaticText3;
wxStaticText* StaticText4;
wxStatusBar* StatusBar1;
wxTextCtrl* CC_n1;
wxTextCtrl* CC_n2;
wxTextCtrl* CC_n3;
wxTextCtrl* CC_n4;
wxTextCtrl* Check_pse;
wxTextCtrl* DLL;
wxButton* Button2;
wxPanel* Panel3;
wxButton* Button6;
wxButton* Button10;
wxButton* Button11;
wxButton* Button5;
wxTextCtrl* EMV_CARD;
wxButton* Button3;
wxStaticText* StaticText5;
wxButton* Button7;
wxStatusBar* StatusBar1;
wxButton* Button9;
wxStaticText* labelArg;
wxStaticText* labelReaderType;
wxCheckBox* checkAdvanced;
wxGrid* Transactions_Grid;
wxPanel* Panel2;
wxTextCtrl* txtPortName;
wxButton* btnGetPan;
wxTextCtrl* EMV_LOG;
wxNotebook* Notebook2;
wxTextCtrl* txtReaderType;
wxStaticText* labelPortName;
wxTextCtrl* DLL;
wxTextCtrl* Check_pse;
wxButton* Button8;
//*)
DECLARE_EVENT_TABLE()
......
......@@ -38,19 +38,7 @@ typedef enum E_TAG_TYPE {
//-------------------
} tag_type_t;
//------------------------------------------------------------------------------
typedef enum E_EMV_STATUS {
EMV_OK,
SYS_ERR_OUT_OF_MEMORY,
EMV_ERR_WRONG_INPUT_DATA,
EMV_ERR_MAX_TAG_LEN_BYTES_EXCEEDED,
EMV_ERR_TAG_NOT_FOUND,
EMV_ERR_TAG_WRONG_SIZE,
EMV_ERR_TAG_WRONG_TYPE,
EMV_ERR_IN_CARD_READER,
EMV_ERR_READING_RECORD,
EMV_ERR_PDOL_IS_EMPTY,
EMV_ERR_LIST_FORMAT_NOT_FOUND
} EMV_STATUS;
//==============================================================================
typedef uint32_t emv_tag_t;
typedef uint8_t emv_tag_index_t;
......@@ -86,18 +74,18 @@ struct afl_list_item_s {
};
//------------------------------------------------------------------------------
// Public function prototypes:
EMV_STATUS getSfi(emv_tree_node_t *tag_node, uint8_t *sfi);
EMV_STATUS getAid(emv_tree_node_t *tag_node, uint8_t *aid, uint8_t *aid_len);
EMV_STATUS getLogEntry(emv_tree_node_t *tag_node, uint8_t *sfi, uint8_t *log_records);
EMV_STATUS getListLength(emv_tree_node_t *tag_node, uint16_t *length);
EMV_STATUS getAfl(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
EMV_STATUS getAflFromResponseMessageTemplateFormat1(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
EMV_STATUS getPdol(emv_tree_node_t *tag_node, emv_tree_node_t **pdol);
UFR_STATUS getSfi(emv_tree_node_t *tag_node, uint8_t *sfi);
UFR_STATUS getAid(emv_tree_node_t *tag_node, uint8_t *aid, uint8_t *aid_len);
UFR_STATUS getLogEntry(emv_tree_node_t *tag_node, uint8_t *sfi, uint8_t *log_records);
UFR_STATUS getListLength(emv_tree_node_t *tag_node, uint16_t *length);
UFR_STATUS getAfl(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
UFR_STATUS getAflFromResponseMessageTemplateFormat1(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
UFR_STATUS getPdol(emv_tree_node_t *tag_node, emv_tree_node_t **pdol);
// formatGetProcessingOptionsDataField()
// free() heap gpo_data_field point to when not needed any more...
EMV_STATUS formatGetProcessingOptionsDataField(emv_tree_node_t *tag_node, uint8_t **gpo_data_field, uint16_t *gpo_data_field_size);
UFR_STATUS formatGetProcessingOptionsDataField(emv_tree_node_t *tag_node, uint8_t **gpo_data_field, uint16_t *gpo_data_field_size);
void printEmvBranch(emv_tree_node_t *tag_node, int tabulator);
EMV_STATUS newEmvTag(emv_tree_node_t **head, uint8_t *input, int32_t input_bytes_left, bool is_list_format);
UFR_STATUS newEmvTag(emv_tree_node_t **head, uint8_t *input, int32_t input_bytes_left, bool is_list_format);
void emvTreeCleanup(emv_tree_node_t *head);
void emvAflListCleanup(afl_list_item_t *head);
//------------------------------------------------------------------------------
......@@ -111,7 +99,7 @@ bool isExistTerminalCountry(emv_tree_node_t *log_list_item_format, uint16_t *pos
// emvReadRecord()
// uint8_t *r_apdu - minimum of the 256 bytes have to be allocated before call
EMV_STATUS emvReadRecord(uint8_t *r_apdu, uint32_t *Ne, uint8_t sfi, uint8_t record, uint8_t sw[2]);
UFR_STATUS emvReadRecord(uint8_t *r_apdu, uint32_t *Ne, uint8_t sfi, uint8_t record, uint8_t sw[2]);
//==========================================================================
#endif /* EMV_H_ */
#ifdef __cplusplus
......
lib @ 9c62fd0f
Subproject commit 9c62fd0f46f2a5378ce261ede4c220627da2864c
......@@ -11,7 +11,7 @@
#include <windows.h>
#endif
#include <string.h>
#include "lib/include/uFCoder.h"
#include "ufr-lib/include/uFCoder.h"
#include "ini.h"
#include "utils.h"
......@@ -203,14 +203,14 @@ const char *GetDlTypeName(uint8_t dl_type_code) {
return "DL_MIFARE_CLASSIC_1K";
case DL_MIFARE_CLASSIC_4K:
return "DL_MIFARE_CLASSIC_4K";
case DL_MIFARE_PLUS_S_2K:
return "DL_MIFARE_PLUS_S_2K";
case DL_MIFARE_PLUS_S_4K:
return "DL_MIFARE_PLUS_S_4K";
case DL_MIFARE_PLUS_X_2K:
return "DL_MIFARE_PLUS_X_2K";
case DL_MIFARE_PLUS_X_4K:
return "DL_MIFARE_PLUS_X_4K";
case DL_MIFARE_PLUS_S_2K_SL0:
return "DL_MIFARE_PLUS_S_2K_SL0";
case DL_MIFARE_PLUS_S_4K_SL0:
return "DL_MIFARE_PLUS_S_4K_SL0";
case DL_MIFARE_PLUS_X_2K_SL0:
return "DL_MIFARE_PLUS_X_2K_SL0";
case DL_MIFARE_PLUS_X_4K_SL0:
return "DL_MIFARE_PLUS_X_4K_SL0";
case DL_MIFARE_DESFIRE:
return "DL_MIFARE_DESFIRE";
case DL_MIFARE_DESFIRE_EV1_2K:
......
ufr-lib @ 1c167648
Subproject commit 1c167648d4b43319fd1a25f4cc64ce4dd6544394
......@@ -85,8 +85,8 @@
<Add library="libcomctl32.a" />
<Add library="libwsock32.a" />
<Add library="libodbc32.a" />
<Add library="lib/windows/x86/uFCoder-x86.dll" />
<Add directory="lib/windows/x86" />
<Add library="ufr-lib/windows/x86/uFCoder-x86.dll" />
<Add directory="ufr-lib/windows/x86" />
</Linker>
<Unit filename="../../../apdu_credit_card_example/conio_gnu.h" />
<Unit filename="../../../apdu_credit_card_example/emv.h" />
......
......@@ -2,34 +2,54 @@
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Release" />
<File name="apdu_credit_card_exampleApp.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="wxsmith\apdu_credit_card_exampleframe.wxs" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="287" topLine="0" />
<Cursor1 position="10033" topLine="223" />
</Cursor>
</File>
<File name="uFR.c" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="215" topLine="129" />
</Cursor>
</File>
<File name="emv.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="28596" topLine="884" />
</Cursor>
</File>
<File name="apdu_credit_card_exampleApp.cpp" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="utils.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1606" topLine="44" />
</Cursor>
</File>
<File name="apdu_credit_card_exampleApp.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="0" topLine="0" />
</Cursor>
</File>
<File name="apdu_credit_card_exampleMain.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="emv.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1690" topLine="45" />
<Cursor1 position="3558" topLine="77" />
</Cursor>
</File>
<File name="apdu_credit_card_exampleMain.cpp" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="iso4217.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="22881" topLine="362" />
<Cursor1 position="146" topLine="3" />
</Cursor>
</File>
<File name="wxsmith\apdu_credit_card_exampleframe.wxs" open="0" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="apdu_credit_card_exampleApp.h" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="10033" topLine="223" />
<Cursor1 position="287" topLine="0" />
</Cursor>
</File>
<File name="apdu_credit_card_exampleMain.cpp" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="413" topLine="0" />
</Cursor>
</File>
<File name="uFR.c" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="apdu_credit_card_exampleMain.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6508" topLine="203" />
<Cursor1 position="4160" topLine="78" />
</Cursor>
</File>
</CodeBlocks_layout_file>
......@@ -59,6 +59,8 @@ class apdu_credit_card_exampleFrame: public wxFrame
void OnButton10Click2(wxCommandEvent& event);
void OnButton11Click2(wxCommandEvent& event);
void OncheckAdvancedClick(wxCommandEvent& event);
void OnbtnGetPanClick(wxCommandEvent& event);
void OnbtnGetLastTranasctionClick(wxCommandEvent& event);
//*)
//(*Identifiers(apdu_credit_card_exampleFrame)
......@@ -79,11 +81,10 @@ class apdu_credit_card_exampleFrame: public wxFrame
static const long ID_TEXTCTRL12;
static const long ID_RADIOBUTTON1;
static const long ID_RADIOBUTTON2;
static const long ID_STATICTEXT5;
static const long ID_TEXTCTRL4;
static const long ID_TEXTCTRL5;
static const long ID_TEXTCTRL6;
static const long ID_TEXTCTRL7;
static const long ID_STATICTEXT10;
static const long ID_TEXTCTRL14;
static const long ID_BUTTON12;
static const long ID_BUTTON13;
static const long ID_BUTTON10;
static const long ID_BUTTON11;
static const long ID_GRID1;
......@@ -114,14 +115,14 @@ class apdu_credit_card_exampleFrame: public wxFrame
wxStaticText* PortLabel;
wxRadioButton* RadioButton1;
wxPanel* Panel5;
wxButton* btnGetLastTranasction;
wxStaticText* labelPortInterface;
wxButton* Button4;
wxTextCtrl* CC_n3;
wxNotebook* Notebook1;
wxStaticText* StaticText2;
wxPanel* Panel4;
wxTextCtrl* txtPAN;
wxRadioButton* RadioButton2;
wxTextCtrl* CC_n4;
wxButton* Button1;
wxTextCtrl* txtOpenArg;
wxStaticText* StaticText11;
......@@ -136,8 +137,8 @@ class apdu_credit_card_exampleFrame: public wxFrame
wxButton* Button5;
wxTextCtrl* EMV_CARD;
wxButton* Button3;
wxStaticText* StaticText5;
wxButton* Button7;
wxTextCtrl* CC_n2;
wxStatusBar* StatusBar1;
wxButton* Button9;
wxStaticText* labelArg;
......@@ -146,14 +147,13 @@ class apdu_credit_card_exampleFrame: public wxFrame
wxGrid* Transactions_Grid;
wxPanel* Panel2;
wxTextCtrl* txtPortName;
wxButton* btnGetPan;
wxTextCtrl* EMV_LOG;
wxNotebook* Notebook2;
wxTextCtrl* txtReaderType;
wxStaticText* labelPortName;
wxTextCtrl* DLL;
wxTextCtrl* Check_pse;
wxStaticText* StaticText4;
wxTextCtrl* CC_n1;
wxButton* Button8;
//*)
......
......@@ -38,19 +38,7 @@ typedef enum E_TAG_TYPE {
//-------------------
} tag_type_t;
//------------------------------------------------------------------------------
typedef enum E_EMV_STATUS {
EMV_OK,
SYS_ERR_OUT_OF_MEMORY,
EMV_ERR_WRONG_INPUT_DATA,
EMV_ERR_MAX_TAG_LEN_BYTES_EXCEEDED,
EMV_ERR_TAG_NOT_FOUND,
EMV_ERR_TAG_WRONG_SIZE,
EMV_ERR_TAG_WRONG_TYPE,
EMV_ERR_IN_CARD_READER,
EMV_ERR_READING_RECORD,
EMV_ERR_PDOL_IS_EMPTY,
EMV_ERR_LIST_FORMAT_NOT_FOUND
} EMV_STATUS;
//==============================================================================
typedef uint32_t emv_tag_t;
typedef uint8_t emv_tag_index_t;
......@@ -86,18 +74,18 @@ struct afl_list_item_s {
};
//------------------------------------------------------------------------------
// Public function prototypes:
EMV_STATUS getSfi(emv_tree_node_t *tag_node, uint8_t *sfi);
EMV_STATUS getAid(emv_tree_node_t *tag_node, uint8_t *aid, uint8_t *aid_len);
EMV_STATUS getLogEntry(emv_tree_node_t *tag_node, uint8_t *sfi, uint8_t *log_records);
EMV_STATUS getListLength(emv_tree_node_t *tag_node, uint16_t *length);
EMV_STATUS getAfl(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
EMV_STATUS getAflFromResponseMessageTemplateFormat1(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
EMV_STATUS getPdol(emv_tree_node_t *tag_node, emv_tree_node_t **pdol);
UFR_STATUS getSfi(emv_tree_node_t *tag_node, uint8_t *sfi);
UFR_STATUS getAid(emv_tree_node_t *tag_node, uint8_t *aid, uint8_t *aid_len);
UFR_STATUS getLogEntry(emv_tree_node_t *tag_node, uint8_t *sfi, uint8_t *log_records);
UFR_STATUS getListLength(emv_tree_node_t *tag_node, uint16_t *length);
UFR_STATUS getAfl(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
UFR_STATUS getAflFromResponseMessageTemplateFormat1(emv_tree_node_t *tag_node, afl_list_item_t **afl_list_item, uint8_t *afl_list_count);
UFR_STATUS getPdol(emv_tree_node_t *tag_node, emv_tree_node_t **pdol);
// formatGetProcessingOptionsDataField()
// free() heap gpo_data_field point to when not needed any more...
EMV_STATUS formatGetProcessingOptionsDataField(emv_tree_node_t *tag_node, uint8_t **gpo_data_field, uint16_t *gpo_data_field_size);
UFR_STATUS formatGetProcessingOptionsDataField(emv_tree_node_t *tag_node, uint8_t **gpo_data_field, uint16_t *gpo_data_field_size);
void printEmvBranch(emv_tree_node_t *tag_node, int tabulator);
EMV_STATUS newEmvTag(emv_tree_node_t **head, uint8_t *input, int32_t input_bytes_left, bool is_list_format);
UFR_STATUS newEmvTag(emv_tree_node_t **head, uint8_t *input, int32_t input_bytes_left, bool is_list_format);
void emvTreeCleanup(emv_tree_node_t *head);
void emvAflListCleanup(afl_list_item_t *head);
//------------------------------------------------------------------------------
......@@ -111,7 +99,7 @@ bool isExistTerminalCountry(emv_tree_node_t *log_list_item_format, uint16_t *pos
// emvReadRecord()
// uint8_t *r_apdu - minimum of the 256 bytes have to be allocated before call
EMV_STATUS emvReadRecord(uint8_t *r_apdu, uint32_t *Ne, uint8_t sfi, uint8_t record, uint8_t sw[2]);
UFR_STATUS emvReadRecord(uint8_t *r_apdu, uint32_t *Ne, uint8_t sfi, uint8_t record, uint8_t sw[2]);
//==========================================================================
#endif /* EMV_H_ */
#ifdef __cplusplus
......
lib @ 9f2464bb
Subproject commit 9f2464bb97d4b665a60544b934858984fae4430c
......@@ -11,7 +11,7 @@
#include <windows.h>
#endif
#include <string.h>
#include "lib/include/uFCoder.h"
#include "ufr-lib/include/uFCoder.h"
#include "ini.h"
#include "utils.h"
......
ufr-lib @ 1c167648
Subproject commit 1c167648d4b43319fd1a25f4cc64ce4dd6544394
<?xml version="1.0" encoding="utf-8" ?>
<wxsmith>
<object class="wxFrame" name="apdu_credit_card_exampleFrame">
<size>1217,592</size>
<title>APDU Credit Card C++ Example v1.1</title>
<size>1217,768</size>
<id_arg>0</id_arg>
<object class="wxNotebook" name="ID_NOTEBOOK1" variable="Notebook1" member="yes">
<pos>192,224</pos>
......@@ -11,6 +12,7 @@
<object class="wxGridSizer" variable="GridSizer1" member="no">
<cols>2</cols>
<rows>5</rows>
<vgap>-200</vgap>
<hgap>-75d</hgap>
<object class="sizeritem">
<object class="wxStaticBoxSizer" variable="StaticBoxSizer1" member="no">
......@@ -19,6 +21,7 @@
<object class="wxFlexGridSizer" variable="FlexGridSizer1" member="no">
<cols>4</cols>
<rows>2</rows>
<hgap>5</hgap>
<object class="sizeritem">
<object class="wxButton" name="ID_BUTTON1" variable="Button1" member="yes">
<label>Reader Open</label>
......@@ -29,7 +32,7 @@
</object>
<object class="sizeritem">
<object class="wxButton" name="ID_BUTTON2" variable="Button2" member="yes">
<label>ReaderReset</label>
<label>Reader Reset</label>
<handler function="OnButton2Click" entry="EVT_BUTTON" />
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
......@@ -47,8 +50,9 @@
<object class="sizeritem">
<object class="wxStaticText" name="ID_STATICTEXT1" variable="PortLabel" member="yes">
<label></label>
<size>38,13</size>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<flag>wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
</object>
<object class="sizeritem">
......@@ -83,6 +87,8 @@
<object class="wxFlexGridSizer" variable="FlexGridSizer2" member="no">
<cols>4</cols>
<rows>2</rows>
<vgap>5</vgap>
<hgap>5</hgap>
<object class="sizeritem">
<object class="wxStaticText" name="ID_STATICTEXT6" variable="labelReaderType" member="yes">
<label>Reader type</label>
......@@ -151,7 +157,7 @@
<border>5</border>
</object>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<flag>wxALL|wxALIGN_BOTTOM</flag>
<border>5</border>
<option>1</option>
</object>
......@@ -185,6 +191,40 @@
<option>1</option>
</object>
<object class="sizeritem">
<object class="wxBoxSizer" variable="BoxSizer5" member="no">
<object class="sizeritem">
<object class="wxStaticText" name="ID_STATICTEXT10" variable="StaticText5" member="yes">
<label>PAN:</label>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
</object>
<object class="sizeritem">
<object class="wxTextCtrl" name="ID_TEXTCTRL14" variable="txtPAN" member="yes">
<size>135,21</size>
<style>wxTE_CENTRE</style>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
</object>
<object class="sizeritem">
<object class="wxButton" name="ID_BUTTON12" variable="btnGetPan" member="yes">
<label>Get PAN</label>
<size>88,33</size>
<handler function="OnbtnGetPanClick" entry="EVT_BUTTON" />
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
</object>
</object>
<flag>wxALL|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>5</border>
</object>
<object class="spacer">
<flag>wxALL|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>5</border>
</object>
<object class="sizeritem">
<object class="wxNotebook" name="ID_NOTEBOOK2" variable="Notebook2" member="yes">
<size>1200,700</size>
<object class="notebookpage">
......@@ -196,53 +236,17 @@
<object class="sizeritem">
<object class="wxBoxSizer" variable="BoxSizer4" member="no">
<object class="sizeritem">
<object class="wxStaticText" name="ID_STATICTEXT5" variable="StaticText4" member="yes">
<label>Credit card number : </label>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
<option>1</option>
</object>
<object class="sizeritem">
<object class="wxTextCtrl" name="ID_TEXTCTRL4" variable="CC_n1" member="yes">
<style>wxTE_READONLY|wxTE_CENTRE</style>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
<option>1</option>
</object>
<object class="sizeritem">
<object class="wxTextCtrl" name="ID_TEXTCTRL5" variable="CC_n2" member="yes">
<style>wxTE_READONLY|wxTE_CENTRE</style>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
<option>1</option>
</object>
<object class="sizeritem">
<object class="wxTextCtrl" name="ID_TEXTCTRL6" variable="CC_n3" member="yes">
<style>wxTE_READONLY|wxTE_CENTRE</style>
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
<option>1</option>
</object>
<object class="sizeritem">
<object class="wxTextCtrl" name="ID_TEXTCTRL7" variable="CC_n4" member="yes">
<style>wxTE_READONLY|wxTE_CENTRE</style>
<object class="wxButton" name="ID_BUTTON13" variable="btnGetLastTranasction" member="yes">
<label>Get last transaction</label>
<handler function="OnbtnGetLastTranasctionClick" entry="EVT_BUTTON" />
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
<option>1</option>
</object>
<object class="spacer">
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
<border>5</border>
<option>1</option>
</object>
<object class="sizeritem">
<object class="wxButton" name="ID_BUTTON10" variable="Button10" member="yes">
<label>READ</label>
<label>Get last 10 transactions</label>
<handler function="OnButton10Click2" entry="EVT_BUTTON" />
</object>
<flag>wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL</flag>
......@@ -455,7 +459,6 @@
</object>
<flag>wxALL|wxALIGN_LEFT|wxALIGN_TOP</flag>
<border>5</border>
<option>1</option>
</object>