#include "nakayama.h" using namespace nn::red::nakayama; class ReadID1: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[RD_ID1]"; page.Add(title); Label lb0; lb0.X = 100; lb0.Y = 50; lb0.Text = "ID1_0"; page.Add(lb0); Label lb1; lb1.X = 100; lb1.Y = 80; lb1.Text = "ID1_1"; page.Add(lb1); Label lb2; lb2.X = 100; lb2.Y = 110; lb2.Text = "ID1_2"; page.Add(lb2); Label lb3; lb3.X = 100; lb3.Y = 140; lb3.Text = "ID1_3"; page.Add(lb3); KeyPad& pad = KeyPad::GetInstance(); while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { #ifdef INTEGRATION_TEST setting.up_down = 0; setting.StartAddress = 0; setting.size = 0; setting.EndAddress = 0; setting.data = 0; setting.reserved1 = 0; setting.reserved2 = 0; // パラメータ設定 cardSettingMenu( TID_FUNC_RDID1, &setting ); // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_FUNC_RDID1), detailInfo cardFunctionTestStart( (u8*)card_test_buffer, BUFFER_SIZE, TID_FUNC_RDID1, &detail); #endif } if (pad.IsTrigger(KeyPad::B)) { Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class ReadID2: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[RD_ID2]"; page.Add(title); Label lb0; lb0.X = 100; lb0.Y = 50; lb0.Text = "ID2_0"; page.Add(lb0); Label lb1; lb1.X = 100; lb1.Y = 80; lb1.Text = "ID2_1"; page.Add(lb1); Label lb2; lb2.X = 100; lb2.Y = 110; lb2.Text = "ID2_2"; page.Add(lb2); Label lb3; lb3.X = 100; lb3.Y = 140; lb3.Text = "ID2_3"; page.Add(lb3); KeyPad& pad = KeyPad::GetInstance(); while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { #ifdef INTEGRATION_TEST setting.up_down = 0; setting.StartAddress = 0; setting.size = 0; setting.EndAddress = 0; setting.data = 0; setting.reserved1 = 0; setting.reserved2 = 0; // パラメータ設定 cardSettingMenu( TID_FUNC_RDID2, &setting ); // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_FUNC_RDID2), detailInfo cardFunctionTestStart( (u8*)card_test_buffer, BUFFER_SIZE, TID_FUNC_RDID2, &detail); #endif } if (pad.IsTrigger(KeyPad::B)) { Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; #define TEMP_BUFFER_SIZE 0x90 #define DUMP_NUM 0x100 #define ONE_PAGE_SIZE 0x80 class ReadSeqPageVerify: public CardTestProgram { public: virtual void Execute() { Page page; u64 dump_start_address; u32 ofs; size_t show_size; Label title; title.X = 10; title.Y = 10; title.Text = "[Read SeqPage with Verify]"; page.Add(title); VariableSelector menu; menu.X = 10; menu.Y = 20; page.Add(menu); VariableValue address; address.SetShiftRange(16,0); address.SetShiftBitSize(4); menu.Register("address", address); VariableValue read_size; read_size.SetShiftRange(8,0); read_size.SetShiftBitSize(4); menu.Register("size", read_size); Label verify; verify.X = 200; verify.Y = 50; page.Add(verify); // メモリダンプ表示 Label dump[DUMP_NUM + 2]; u8 temp_buffer[TEMP_BUFFER_SIZE]; // デバッグ用 for (int index=0; index ONE_PAGE_SIZE ? ONE_PAGE_SIZE : read_size.GetValue(); // ベリファイ結果 verify.Text = verify_result ? "Verify:OK" : "Verify:NG"; // 表示用フラグ done = true; refresh = true; } // 1画面分アドレスをデクリメント if(pad.IsTrigger(KeyPad::L)) { if( ofs >= ONE_PAGE_SIZE ) { // ダンプ表示オフセット & 表示サイズ ofs -= ONE_PAGE_SIZE; show_size = ONE_PAGE_SIZE; refresh = true; } } // 1画面分アドレスをインクリメント if(pad.IsTrigger(KeyPad::R)) { // [TODO] バッファを正式なものに。バッファサイズも正式なものに。 if( (ofs + ONE_PAGE_SIZE) < sizeof(temp_buffer) ) { // ダンプ表示オフセット & 表示サイズ ofs += ONE_PAGE_SIZE; show_size = ONE_PAGE_SIZE; // ケツの中途半端なバッファを表示する場合 if( (ofs + ONE_PAGE_SIZE) > sizeof(temp_buffer) ) { show_size = sizeof(temp_buffer) - ofs; } refresh = true; } } // メモリダンプの表示を更新 if(refresh && done) { NN_TLOG_("[ofs : 0x%08x]\n", ofs); #ifdef INTEGRATION_TEST ShowMemDump( &page, dump, dump_start_address + ofs, card_test_buffer + ofs, show_size ); #else ShowMemDump( &page, dump, dump_start_address + ofs, temp_buffer + ofs, show_size ); #endif refresh = false; } if (menu.Canceled) { menu.Canceled = false; Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class ReadSeqPage: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[Read SeqPage]"; page.Add(title); VariableSelector menu; menu.X = 10; menu.Y = 20; page.Add(menu); VariableValue address; address.SetShiftRange(16,0); address.SetShiftBitSize(4); menu.Register("address", address); VariableValue read_size; read_size.SetShiftRange(8,0); read_size.SetShiftBitSize(4); menu.Register("size", read_size); // メモリダンプ表示 Label dump[DUMP_NUM + 2]; u8 temp_buffer[DUMP_NUM]; KeyPad& pad = KeyPad::GetInstance(); bool done = false; bool refresh = false; while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_FUNC_RDSEQ), detailInfo //cardFunctionTestStart(); done = true; refresh = true; } // 1画面分アドレスをデクリメント if (pad.IsTrigger(KeyPad::L)) { refresh = true; } // 1画面分アドレスをインクリメント if (pad.IsTrigger(KeyPad::R)) { refresh = true; } // メモリダンプの表示を更新 if(refresh && done) { ShowMemDump( &page, dump, address.GetValue(), temp_buffer, sizeof(temp_buffer) ); refresh = false; } if (menu.Canceled) { menu.Canceled = false; Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class WritePageStart: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[Write Page Start]"; page.Add(title); VariableSelector menu; menu.X = 10; menu.Y = 20; page.Add(menu); VariableValue address; address.SetShiftRange(16,0); address.SetShiftBitSize(4); menu.Register("address", address); SelectableValue > write_pattern; write_pattern.Add(*(new NamedValue ("0x0000", 0))); write_pattern.Add(*(new NamedValue ("0x00FF", 1))); write_pattern.Add(*(new NamedValue ("0x55AA", 2))); write_pattern.Add(*(new NamedValue ("0xFFFF", 3))); write_pattern.Add(*(new NamedValue ("DEC", 4))); write_pattern.Add(*(new NamedValue ("INC", 5))); menu.Register("Write Pattern", write_pattern); // メモリダンプ表示 Label dump[DUMP_NUM + 2]; u8 temp_buffer[DUMP_NUM]; KeyPad& pad = KeyPad::GetInstance(); bool done = false; bool refresh = false; while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_WR_PAGE_START), detailInfo //cardFunctionTestStart(); done = true; refresh = true; } // 1画面分アドレスをデクリメント if (pad.IsTrigger(KeyPad::L)) { refresh = true; } // 1画面分アドレスをインクリメント if (pad.IsTrigger(KeyPad::R)) { refresh = true; } // メモリダンプの表示を更新 if(refresh && done) { ShowMemDump( &page, dump, address.GetValue(), temp_buffer, sizeof(temp_buffer) ); refresh = false; } if (menu.Canceled) { menu.Canceled = false; Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class WritePage: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[Write Page]"; page.Add(title); VariableSelector menu; menu.X = 10; menu.Y = 20; page.Add(menu); SelectableValue > write_pattern; write_pattern.Add(*(new NamedValue ("0x0000", 0))); write_pattern.Add(*(new NamedValue ("0x00FF", 1))); write_pattern.Add(*(new NamedValue ("0x55AA", 2))); write_pattern.Add(*(new NamedValue ("0xFFFF", 3))); write_pattern.Add(*(new NamedValue ("DEC", 4))); write_pattern.Add(*(new NamedValue ("INC", 5))); menu.Register("Write Pattern", write_pattern); // メモリダンプ表示 Label dump[DUMP_NUM + 2]; u8 temp_buffer[DUMP_NUM]; KeyPad& pad = KeyPad::GetInstance(); bool done = false; bool refresh = false; while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_WR_PAGE), detailInfo //cardFunctionTestStart(); done = true; refresh = true; } // 1画面分アドレスをデクリメント if (pad.IsTrigger(KeyPad::L)) { refresh = true; } // 1画面分アドレスをインクリメント if (pad.IsTrigger(KeyPad::R)) { refresh = true; } // メモリダンプの表示を更新 if(refresh && done) { ShowMemDump( &page, dump, 0x0, temp_buffer, sizeof(temp_buffer) ); refresh = false; } if (menu.Canceled) { menu.Canceled = false; Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class ReadWREXE: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[Read WREXE]"; page.Add(title); VariableSelector menu; menu.X = 10; menu.Y = 20; page.Add(menu); VariableValue address; address.SetShiftRange(16,0); address.SetShiftBitSize(4); menu.Register("address", address); // メモリダンプ表示 Label dump[DUMP_NUM + 2]; u8 temp_buffer[DUMP_NUM]; KeyPad& pad = KeyPad::GetInstance(); bool done = false; bool refresh = false; while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_RD_WREXE), detailInfo //cardFunctionTestStart(); done = true; refresh = true; } // 1画面分アドレスをデクリメント if (pad.IsTrigger(KeyPad::L)) { refresh = true; } // 1画面分アドレスをインクリメント if (pad.IsTrigger(KeyPad::R)) { refresh = true; } // メモリダンプの表示を更新 if(refresh && done) { ShowMemDump( &page, dump, address.GetValue(), temp_buffer, sizeof(temp_buffer) ); refresh = false; } if (menu.Canceled) { menu.Canceled = false; Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class ReadUID: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[Read UID]"; page.Add(title); Label lb0; lb0.X = 50; lb0.Y = 50; lb0.Text = "UID **************"; page.Add(lb0); KeyPad& pad = KeyPad::GetInstance(); while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_RD_UID), detailInfo //cardFunctionTestStart(); } if (pad.IsTrigger(KeyPad::B)) { Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class ReadRefresh: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 10; title.Y = 10; title.Text = "[Read REFRESH]"; page.Add(title); Label lb0; lb0.X = 100; lb0.Y = 50; lb0.Text = "TIME OUT"; page.Add(lb0); KeyPad& pad = KeyPad::GetInstance(); while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::A)) { // 引数:buffer, BUFFER_SIZE, TestCaseID(TID_RD_REFRESH), detailInfo //cardFunctionTestStart(); } if (pad.IsTrigger(KeyPad::B)) { Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class ReadUndefinedCommand: public CardTestProgram { public: virtual void Execute() { Page page; Label title; title.X = 20; title.Y = 10; title.Text = "Undefined Command"; page.Add(title); Label lb0; lb0.X = 100; lb0.Y = 50; lb0.Text = "***************************"; page.Add(lb0); KeyPad& pad = KeyPad::GetInstance(); while (1) { page.Show(Display::GetInstance(Display::Lower)); if (pad.IsTrigger(KeyPad::B)) { Display::GetInstance(Display::Lower).Clear(); Display::GetInstance(Display::Lower).SwapBuffer(); break; } } }; }; class CommandTest: public CardTestProgram { virtual void Execute() { Page page; Label title; title.X = 20; title.Y = 10; title.Text = "Command Test"; page.Add(title); Label date; date.X = 250; date.Y = 10; date.Text = __DATE__; page.Add(date); Selector menu; menu.X = 20; menu.Y = 40; page.Add(menu); // RD_ID1, RD_ID2 menu.Register("RD_ID1", *(new ReadID1())); menu.Register("RD_ID2", *(new ReadID2())); // RD_SEQ_PAGE with verify, RD_SEQ_PAGE menu.Register("RD_SEQ_PAGE with verify", *(new ReadSeqPageVerify())); menu.Register("RD_SEQ_PAGE", *(new ReadSeqPage())); // WR_PAGE_START, WR_PAGE menu.Register("WR_PAGE_START", *(new WritePageStart())); menu.Register("WR_PAGE", *(new WritePage())); // RD_WREXE menu.Register("RD_WREXE", *(new ReadWREXE())); // RD_UID menu.Register("RD_UID", *(new ReadUID())); // RD_REFRESH menu.Register("RD_REFRESH", *(new ReadRefresh())); // Undefined COMMAND menu.Register("Undefined COMMAND", *(new ReadUndefinedCommand())); while (1) { page.Show(Display::GetInstance(Display::Upper)); if (menu.Selected) { menu.GetSelectedItem()->Execute(); menu.Selected = false; } if (menu.Canceled) { menu.Canceled = false; break; } } }; };