mirror of
https://github.com/rvtr/ctr_card_test.git
synced 2025-06-18 14:45:42 -04:00
見た目だけインタフェース完成(機能はなにもなし)
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_card_test@3 ff8ce827-af98-4349-adb5-4c00699b5328
This commit is contained in:
parent
c6be5c1b6b
commit
0354858d93
@ -2,60 +2,640 @@
|
||||
|
||||
using namespace nn::red::nakayama;
|
||||
|
||||
|
||||
class CommandTest : public Program
|
||||
class ReadID1: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "Command Test";
|
||||
title.Text = "RD_ID1";
|
||||
page.Add(title);
|
||||
|
||||
Label date;
|
||||
date.X = 250;
|
||||
date.Y = 10;
|
||||
date.Text = __DATE__;
|
||||
page.Add(date);
|
||||
|
||||
ValueSelector menu;
|
||||
menu.X = 30;
|
||||
menu.Y = 40;
|
||||
page.Add(menu);
|
||||
|
||||
SelectableValue<int> address;
|
||||
address.Add( 0 );
|
||||
address.Add( 1 );
|
||||
address.Add( 2 );
|
||||
menu.Register("Address", address);
|
||||
|
||||
SelectableValue< NamedValue<int> > loop;
|
||||
loop.Add(*(new NamedValue<int>("Once", 0)));
|
||||
loop.Add(*(new NamedValue<int>("Repeat", 1)));
|
||||
menu.Register("Loop", loop);
|
||||
|
||||
// 画面表示しながら選択を受け付ける
|
||||
while(1)
|
||||
|
||||
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::Upper));
|
||||
|
||||
// 選択されたら
|
||||
if(menu.Selected)
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
int a = address.GetValue();
|
||||
int l = loop.GetValue().Value;
|
||||
menu.Selected = false;
|
||||
}
|
||||
|
||||
// キャンセルされたら
|
||||
if(menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
;
|
||||
};
|
||||
|
||||
class ReadID2: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label title;
|
||||
title.X = 20;
|
||||
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)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
;
|
||||
};
|
||||
|
||||
#define DUMP_NUM 0x10
|
||||
|
||||
class ReadSeqPageVerify: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
VariableSelector menu;
|
||||
menu.X = 10;
|
||||
menu.Y = 0;
|
||||
page.Add(menu);
|
||||
|
||||
VariableValue<u64> address;
|
||||
address.SetShiftRange(16,0);
|
||||
address.SetShiftBitSize(4);
|
||||
menu.Register("address", address);
|
||||
|
||||
VariableValue<u64> read_size;
|
||||
read_size.SetShiftRange(8,0);
|
||||
read_size.SetShiftBitSize(4);
|
||||
menu.Register("size", read_size);
|
||||
|
||||
Label verify;
|
||||
verify.X = 200;
|
||||
verify.Y = 10;
|
||||
verify.Text = "Verify :";
|
||||
page.Add(verify);
|
||||
|
||||
// 固定ラベル
|
||||
Label index;
|
||||
index.X = 0;
|
||||
index.Y = 50;
|
||||
index.Text = " |00 01 02 03 04 05 06 07";
|
||||
page.Add(index);
|
||||
|
||||
Label line;
|
||||
line.X = 0;
|
||||
line.Y = 60;
|
||||
line.Text = "---------------------------------------";
|
||||
page.Add(line);
|
||||
|
||||
// [TODO]バッファを与えて表示できるように。その他もろもろ調整。
|
||||
int start = 0x0;
|
||||
Label dump[DUMP_NUM];
|
||||
for(int i=0; i<DUMP_NUM; i++)
|
||||
{
|
||||
ostringstream adr;
|
||||
|
||||
dump[i].X = 0;
|
||||
dump[i].Y = 70 + 10 * i;
|
||||
|
||||
// アドレス表示部分
|
||||
adr << "0x";
|
||||
adr.fill('0');
|
||||
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
|
||||
|
||||
// dump部分
|
||||
for(int j=0; j<0x8; j++)
|
||||
{
|
||||
adr << setw(2) << left << hex << 0x00 + j << " ";
|
||||
}
|
||||
|
||||
dump[i].Text = adr.str();
|
||||
|
||||
page.Add(dump[i]);
|
||||
}
|
||||
|
||||
// [TODO]ベリファイの結果に応じて変更
|
||||
if (1)
|
||||
{
|
||||
verify.Text = "Verify : OK";
|
||||
}
|
||||
else
|
||||
{
|
||||
verify.Text = "Verify : NG";
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class ReadSeqPage: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
VariableSelector menu;
|
||||
menu.X = 10;
|
||||
menu.Y = 0;
|
||||
page.Add(menu);
|
||||
|
||||
VariableValue<u64> address;
|
||||
address.SetShiftRange(16,0);
|
||||
address.SetShiftBitSize(4);
|
||||
menu.Register("address", address);
|
||||
|
||||
VariableValue<u64> read_size;
|
||||
read_size.SetShiftRange(8,0);
|
||||
read_size.SetShiftBitSize(4);
|
||||
menu.Register("size", read_size);
|
||||
|
||||
// 固定ラベル
|
||||
Label index;
|
||||
index.X = 0;
|
||||
index.Y = 50;
|
||||
index.Text = " |00 01 02 03 04 05 06 07";
|
||||
page.Add(index);
|
||||
|
||||
Label line;
|
||||
line.X = 0;
|
||||
line.Y = 60;
|
||||
line.Text = "---------------------------------------";
|
||||
page.Add(line);
|
||||
|
||||
int start = 0x0;
|
||||
Label dump[DUMP_NUM];
|
||||
for(int i=0; i<DUMP_NUM; i++)
|
||||
{
|
||||
ostringstream adr;
|
||||
|
||||
dump[i].X = 0;
|
||||
dump[i].Y = 70 + 10 * i;
|
||||
|
||||
// アドレス表示部分
|
||||
adr << "0x";
|
||||
adr.fill('0');
|
||||
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
|
||||
|
||||
// dump部分
|
||||
for(int j=0; j<0x8; j++)
|
||||
{
|
||||
adr << setw(2) << left << hex << 0x00 + j << " ";
|
||||
}
|
||||
|
||||
dump[i].Text = adr.str();
|
||||
|
||||
page.Add(dump[i]);
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class WritePageStart: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
VariableSelector menu;
|
||||
menu.X = 10;
|
||||
menu.Y = 0;
|
||||
page.Add(menu);
|
||||
|
||||
VariableValue<u64> address;
|
||||
address.SetShiftRange(16,0);
|
||||
address.SetShiftBitSize(4);
|
||||
menu.Register("address", address);
|
||||
|
||||
VariableValue<u64> read_size;
|
||||
read_size.SetShiftRange(8,0);
|
||||
read_size.SetShiftBitSize(4);
|
||||
menu.Register("size", read_size);
|
||||
|
||||
// 固定ラベル
|
||||
Label index;
|
||||
index.X = 0;
|
||||
index.Y = 50;
|
||||
index.Text = " |00 01 02 03 04 05 06 07";
|
||||
page.Add(index);
|
||||
|
||||
Label line;
|
||||
line.X = 0;
|
||||
line.Y = 60;
|
||||
line.Text = "---------------------------------------";
|
||||
page.Add(line);
|
||||
|
||||
int start = 0x0;
|
||||
Label dump[DUMP_NUM];
|
||||
for(int i=0; i<DUMP_NUM; i++)
|
||||
{
|
||||
ostringstream adr;
|
||||
|
||||
dump[i].X = 0;
|
||||
dump[i].Y = 70 + 10 * i;
|
||||
|
||||
// アドレス表示部分
|
||||
adr << "0x";
|
||||
adr.fill('0');
|
||||
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
|
||||
|
||||
// dump部分
|
||||
for(int j=0; j<0x8; j++)
|
||||
{
|
||||
adr << setw(2) << left << hex << 0x00 + j << " ";
|
||||
}
|
||||
|
||||
dump[i].Text = adr.str();
|
||||
|
||||
page.Add(dump[i]);
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class WritePage: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
VariableSelector menu;
|
||||
menu.X = 10;
|
||||
menu.Y = 50;
|
||||
page.Add(menu);
|
||||
|
||||
SelectableValue<NamedValue<int> > write_pattern;
|
||||
write_pattern.Add(*(new NamedValue<int> ("0x0000", 0)));
|
||||
write_pattern.Add(*(new NamedValue<int> ("0x00FF", 1)));
|
||||
write_pattern.Add(*(new NamedValue<int> ("0x55AA", 2)));
|
||||
write_pattern.Add(*(new NamedValue<int> ("0xFFFF", 3)));
|
||||
write_pattern.Add(*(new NamedValue<int> ("DEC", 4)));
|
||||
write_pattern.Add(*(new NamedValue<int> ("INC", 5)));
|
||||
menu.Register("Write Pattern", write_pattern);
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class ReadWREXE: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
VariableSelector menu;
|
||||
menu.X = 10;
|
||||
menu.Y = 0;
|
||||
page.Add(menu);
|
||||
|
||||
VariableValue<u64> address;
|
||||
address.SetShiftRange(16,0);
|
||||
address.SetShiftBitSize(4);
|
||||
menu.Register("address", address);
|
||||
|
||||
VariableValue<u64> read_size;
|
||||
read_size.SetShiftRange(8,0);
|
||||
read_size.SetShiftBitSize(4);
|
||||
menu.Register("size", read_size);
|
||||
|
||||
// 固定ラベル
|
||||
Label index;
|
||||
index.X = 0;
|
||||
index.Y = 50;
|
||||
index.Text = " |00 01 02 03 04 05 06 07";
|
||||
page.Add(index);
|
||||
|
||||
Label line;
|
||||
line.X = 0;
|
||||
line.Y = 60;
|
||||
line.Text = "---------------------------------------";
|
||||
page.Add(line);
|
||||
|
||||
int start = 0x0;
|
||||
Label dump[DUMP_NUM];
|
||||
for(int i=0; i<DUMP_NUM; i++)
|
||||
{
|
||||
ostringstream adr;
|
||||
|
||||
dump[i].X = 0;
|
||||
dump[i].Y = 70 + 10 * i;
|
||||
|
||||
// アドレス表示部分
|
||||
adr << "0x";
|
||||
adr.fill('0');
|
||||
adr << setw(12) << right << hex << start + (0x10 * i) << "|";
|
||||
|
||||
// dump部分
|
||||
for(int j=0; j<0x8; j++)
|
||||
{
|
||||
adr << setw(2) << left << hex << 0x00 + j << " ";
|
||||
}
|
||||
|
||||
dump[i].Text = adr.str();
|
||||
|
||||
page.Add(dump[i]);
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class ReadUID: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "RD_UID";
|
||||
page.Add(title);
|
||||
|
||||
Label lb0;
|
||||
lb0.X = 50;
|
||||
lb0.Y = 50;
|
||||
lb0.Text = "UID **************";
|
||||
page.Add(lb0);
|
||||
|
||||
KeyPad& pad = KeyPad::GetInstance();
|
||||
|
||||
while (1)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class ReadRefresh: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "RD_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)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
class ReadUndefinedCommand: public Program
|
||||
{
|
||||
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)
|
||||
{
|
||||
pad.ReadKey();
|
||||
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 Program
|
||||
{
|
||||
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<Program> 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;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,65 +1,52 @@
|
||||
#include "nakayama.h"
|
||||
#include "FunctionTest.cpp"
|
||||
#include "CommandTest.cpp"
|
||||
#include "ReliabilityTestForRom.cpp"
|
||||
#include "ReliabilityTestForRWMemory.cpp"
|
||||
#include "BackupMemoryTest.cpp"
|
||||
|
||||
using namespace nn::red::nakayama;
|
||||
|
||||
class CtrCardTest : public Program
|
||||
class CtrCardTest: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
// ページ
|
||||
Page page;
|
||||
|
||||
// タイトルラベル
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "CTR Card Test";
|
||||
page.Add(title);
|
||||
|
||||
// 日付ラベル
|
||||
Label date;
|
||||
date.X = 250;
|
||||
date.Y = 10;
|
||||
date.Text = __DATE__;
|
||||
page.Add(date);
|
||||
|
||||
// 選択肢
|
||||
Selector<Program> menu;
|
||||
menu.X = 30;
|
||||
menu.Y = 40;
|
||||
page.Add(menu);
|
||||
|
||||
// 選択肢に項目を追加
|
||||
menu.Register("Function Test", *(new FunctionTest()));
|
||||
menu.Register("Command Test", *(new CommandTest()));
|
||||
menu.Register("Reliability Test for ROM", *(new FunctionTest()));
|
||||
menu.Register("Reliability Test for Writable Memory", *(new CommandTest()));
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
// 画面表示しながら選択を受け付ける
|
||||
while(1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Upper));
|
||||
|
||||
// 選択されたら
|
||||
if(menu.Selected)
|
||||
{
|
||||
menu.GetSelectedItem()->Execute();
|
||||
menu.Selected = false;
|
||||
}
|
||||
|
||||
// キャンセルされたら
|
||||
if(menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
Display::GetInstance(Display::Upper).Clear();
|
||||
Display::GetInstance(Display::Upper).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "CTR Card Test";
|
||||
page.Add(title);
|
||||
|
||||
Label date;
|
||||
date.X = 250;
|
||||
date.Y = 10;
|
||||
date.Text = __DATE__;
|
||||
page.Add(date);
|
||||
|
||||
Selector<Program> menu;
|
||||
menu.X = 30;
|
||||
menu.Y = 40;
|
||||
page.Add(menu);
|
||||
|
||||
menu.Register("Function Test", *(new FunctionTest()));
|
||||
menu.Register("Command Test", *(new CommandTest()));
|
||||
menu.Register("Reliability Test for ROM",*(new ReliabilityTestForRom()));
|
||||
menu.Register("Reliability Test for Writable Memory",*(new ReliabilityTestForRWMemory()));
|
||||
menu.Register("Back Up Memory Test", *(new BackupMemoryTest()));
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Upper));
|
||||
|
||||
if (menu.Selected)
|
||||
{
|
||||
menu.GetSelectedItem()->Execute();
|
||||
menu.Selected = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -2,160 +2,144 @@
|
||||
|
||||
using namespace nn::red::nakayama;
|
||||
|
||||
class S1FunctionTest : public Program
|
||||
class S1FunctionTest: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
// ページ
|
||||
Page page;
|
||||
|
||||
Label running;
|
||||
running.X = 120;
|
||||
running.Y = 100;
|
||||
running.Text = "Running";
|
||||
page.Add(running);
|
||||
|
||||
Label loop;
|
||||
loop.X = 10;
|
||||
loop.Y = 200;
|
||||
loop.Text = "Loop:";
|
||||
page.Add(loop);
|
||||
|
||||
Label count;
|
||||
count.X = 60;
|
||||
count.Y = 200;
|
||||
count.Text = "0000000000000";
|
||||
page.Add(count);
|
||||
|
||||
KeyPad& pad = KeyPad::GetInstance();
|
||||
|
||||
// 画面表示しながら選択を受け付ける
|
||||
while(1)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
// Bボタンが押されたら
|
||||
if(pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label running;
|
||||
running.X = 120;
|
||||
running.Y = 100;
|
||||
running.Text = "Running";
|
||||
page.Add(running);
|
||||
|
||||
Label loop;
|
||||
loop.X = 10;
|
||||
loop.Y = 200;
|
||||
loop.Text = "Loop:";
|
||||
page.Add(loop);
|
||||
|
||||
Label count;
|
||||
count.X = 60;
|
||||
count.Y = 200;
|
||||
count.Text = "0000000000000";
|
||||
page.Add(count);
|
||||
|
||||
KeyPad& pad = KeyPad::GetInstance();
|
||||
|
||||
while (1)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class S2FunctionTest : public Program
|
||||
class S2FunctionTest: public Program
|
||||
{
|
||||
public:
|
||||
virtual void Execute()
|
||||
{
|
||||
// ページ
|
||||
Page page;
|
||||
|
||||
Label running;
|
||||
running.X = 120;
|
||||
running.Y = 100;
|
||||
running.Text = "Running";
|
||||
page.Add(running);
|
||||
|
||||
Label loop;
|
||||
loop.X = 10;
|
||||
loop.Y = 200;
|
||||
loop.Text = "Loop:";
|
||||
page.Add(loop);
|
||||
|
||||
Label count;
|
||||
count.X = 60;
|
||||
count.Y = 200;
|
||||
count.Text = "0000000000000";
|
||||
page.Add(count);
|
||||
|
||||
KeyPad& pad = KeyPad::GetInstance();
|
||||
|
||||
// 画面表示しながら選択を受け付ける
|
||||
while(1)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
// Bボタンが押されたら
|
||||
if(pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label running;
|
||||
running.X = 120;
|
||||
running.Y = 100;
|
||||
running.Text = "Running";
|
||||
page.Add(running);
|
||||
|
||||
Label loop;
|
||||
loop.X = 10;
|
||||
loop.Y = 200;
|
||||
loop.Text = "Loop:";
|
||||
page.Add(loop);
|
||||
|
||||
Label count;
|
||||
count.X = 60;
|
||||
count.Y = 200;
|
||||
count.Text = "0000000000000";
|
||||
page.Add(count);
|
||||
|
||||
KeyPad& pad = KeyPad::GetInstance();
|
||||
|
||||
while (1)
|
||||
{
|
||||
pad.ReadKey();
|
||||
page.Show(Display::GetInstance(Display::Lower));
|
||||
|
||||
if (pad.IsTrigger(KeyPad::B))
|
||||
{
|
||||
Display::GetInstance(Display::Lower).Clear();
|
||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class IrregularAccessTest : public Program
|
||||
class IrregularAccessTest: public Program
|
||||
{
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class FunctionTest : public Program
|
||||
class FunctionTest: public Program
|
||||
{
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "Function Test";
|
||||
page.Add(title);
|
||||
|
||||
Label date;
|
||||
date.X = 250;
|
||||
date.Y = 10;
|
||||
date.Text = __DATE__;
|
||||
page.Add(date);
|
||||
|
||||
Selector<Program> menu;
|
||||
menu.X = 30;
|
||||
menu.Y = 40;
|
||||
page.Add(menu);
|
||||
|
||||
// 選択肢に項目を追加
|
||||
menu.Register("S1 Function Test", *(new S1FunctionTest()));
|
||||
menu.Register("S2 Function Test", *(new S2FunctionTest()));
|
||||
menu.Register("Irregular Access Test", *(new IrregularAccessTest()));
|
||||
|
||||
// 画面表示しながら選択を受け付ける
|
||||
while(1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Upper));
|
||||
|
||||
// 選択されたら
|
||||
if(menu.Selected)
|
||||
{
|
||||
menu.GetSelectedItem()->Execute();
|
||||
menu.Selected = false;
|
||||
}
|
||||
|
||||
// キャンセルされたら
|
||||
if(menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
virtual void Execute()
|
||||
{
|
||||
Page page;
|
||||
|
||||
Label title;
|
||||
title.X = 20;
|
||||
title.Y = 10;
|
||||
title.Text = "Function Test";
|
||||
page.Add(title);
|
||||
|
||||
Label date;
|
||||
date.X = 250;
|
||||
date.Y = 10;
|
||||
date.Text = __DATE__;
|
||||
page.Add(date);
|
||||
|
||||
Selector<Program> menu;
|
||||
menu.X = 30;
|
||||
menu.Y = 40;
|
||||
page.Add(menu);
|
||||
|
||||
// [TODO] カードIDに応じて切り替える
|
||||
if (1)
|
||||
{
|
||||
menu.Register("S1 Function Test", *(new S1FunctionTest()));
|
||||
}
|
||||
else
|
||||
{
|
||||
menu.Register("S2 Function Test", *(new S2FunctionTest()));
|
||||
}
|
||||
menu.Register("Irregular Access Test", *(new IrregularAccessTest()));
|
||||
|
||||
while (1)
|
||||
{
|
||||
page.Show(Display::GetInstance(Display::Upper));
|
||||
|
||||
if (menu.Selected)
|
||||
{
|
||||
menu.GetSelectedItem()->Execute();
|
||||
menu.Selected = false;
|
||||
}
|
||||
|
||||
if (menu.Canceled)
|
||||
{
|
||||
menu.Canceled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -574,23 +574,113 @@ string ValueSelector::GetItemName(int index)
|
||||
*---------------------------------------------------------------------------*/
|
||||
void ValueSelector::KeyIn(KeyPad& key)
|
||||
{
|
||||
selector::KeyIn(key);
|
||||
|
||||
if(key.IsTrigger(KeyPad::RIGHT))
|
||||
selector::KeyIn(key);
|
||||
|
||||
if( !selector::items[selector::current_item]->Editable )
|
||||
{
|
||||
if(key.IsTrigger(KeyPad::RIGHT))
|
||||
{
|
||||
selector::items[selector::current_item]->Next(true);
|
||||
}
|
||||
else if(key.IsPress(KeyPad::RIGHT))
|
||||
{
|
||||
selector::items[selector::current_item]->Next();
|
||||
}
|
||||
else if(key.IsTrigger(KeyPad::LEFT))
|
||||
{
|
||||
selector::items[selector::current_item]->Previous(true);
|
||||
}
|
||||
else if(key.IsPress(KeyPad::LEFT))
|
||||
{
|
||||
selector::items[selector::current_item]->Previous();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: ValueSelector::KeyIn
|
||||
|
||||
@breif
|
||||
|
||||
@return
|
||||
|
||||
edit : Akabane
|
||||
*---------------------------------------------------------------------------*/
|
||||
void VariableSelector::KeyIn(KeyPad& key)
|
||||
{
|
||||
if( !EditMode )
|
||||
{
|
||||
ValueSelector::KeyIn(key);
|
||||
|
||||
// 選択中のアイテムが編集可能オブジェクト
|
||||
if( selector::items[selector::current_item]->Editable )
|
||||
{
|
||||
// 右ボタンが押された場合
|
||||
if( key.IsTrigger(KeyPad::A) )
|
||||
{
|
||||
EditMode = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
key.ReadKey();
|
||||
key.PressDetectionDelay = nn::fnd::TimeSpan::FromMilliSeconds(500);
|
||||
key.PressDetectionInterval = nn::fnd::TimeSpan::FromMilliSeconds(100);
|
||||
|
||||
if(key.IsTrigger(KeyPad::UP) || key.IsPress(KeyPad::UP))
|
||||
{
|
||||
selector::items[selector::current_item]->Next(true);
|
||||
selector::items[selector::current_item]->Increment();
|
||||
}
|
||||
else if(key.IsPress(KeyPad::RIGHT))
|
||||
else if(key.IsTrigger(KeyPad::DOWN) || key.IsPress(KeyPad::DOWN))
|
||||
{
|
||||
selector::items[selector::current_item]->Next();
|
||||
selector::items[selector::current_item]->Decrement();
|
||||
}
|
||||
else if(key.IsTrigger(KeyPad::LEFT))
|
||||
else if(key.IsTrigger(KeyPad::RIGHT) || key.IsPress(KeyPad::RIGHT))
|
||||
{
|
||||
selector::items[selector::current_item]->Previous(true);
|
||||
selector::items[selector::current_item]->ShiftRight();
|
||||
}
|
||||
else if(key.IsPress(KeyPad::LEFT))
|
||||
else if(key.IsTrigger(KeyPad::LEFT) || key.IsPress(KeyPad::LEFT))
|
||||
{
|
||||
selector::items[selector::current_item]->Previous();
|
||||
selector::items[selector::current_item]->ShiftLeft();
|
||||
}
|
||||
else if(key.IsTrigger(KeyPad::A) || key.IsTrigger(KeyPad::B))
|
||||
{
|
||||
EditMode = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VariableSelector::Show(Display& display)
|
||||
{
|
||||
for(int i=0; i<items.size(); i++)
|
||||
{
|
||||
int x = GetX(); //Parent->X + X;
|
||||
int y = GetY(); //Parent->Y + Y;
|
||||
|
||||
if(i == current_item)
|
||||
{
|
||||
double difference = abs(current_item * LineHeight * 2 - cursor_position);
|
||||
int sign = current_item * LineHeight * 2 < cursor_position ? -1 : 1;
|
||||
cursor_position += sign * ceil(difference / CursorSmoothness);
|
||||
display.Draw(x, y + cursor_position, cursor, FontSize, false); // とりあえず、
|
||||
|
||||
// 編集可能リストで、編集モードの場合は下にカーソルを表示する
|
||||
|
||||
}
|
||||
display.Draw(x + Offset, y + (i * LineHeight * 2), GetItemName(i) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -599,6 +689,8 @@ void ValueSelector::KeyIn(KeyPad& key)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: DebugWriter::Write
|
||||
|
||||
|
293
trunk/nakayama.h
293
trunk/nakayama.h
@ -98,6 +98,7 @@ private:
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief キーパッド
|
||||
|
||||
@ -142,6 +143,7 @@ private:
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief ユーザインタフェース
|
||||
|
||||
@ -172,6 +174,7 @@ public:
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief ページ
|
||||
|
||||
@ -189,6 +192,7 @@ private:
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief ラベル
|
||||
|
||||
@ -203,6 +207,8 @@ public:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief 時計
|
||||
|
||||
@ -222,6 +228,8 @@ public:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief 選択器
|
||||
|
||||
@ -252,28 +260,6 @@ protected:
|
||||
virtual string GetItemName(int);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::GetItemName
|
||||
|
||||
@brief アイテム名を取得します。
|
||||
|
||||
@return
|
||||
|
||||
*---------------------------------------------------------------------------*/
|
||||
template<typename T>
|
||||
string Selector<T>::GetItemName(int index)
|
||||
{
|
||||
return names[index];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::Selector
|
||||
|
||||
@ -295,9 +281,19 @@ Selector<T>::Selector() {
|
||||
Offset = 10;
|
||||
}
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::GetItemName
|
||||
|
||||
@brief アイテム名を取得します。
|
||||
|
||||
@return
|
||||
|
||||
*---------------------------------------------------------------------------*/
|
||||
template<typename T>
|
||||
string Selector<T>::GetItemName(int index)
|
||||
{
|
||||
return names[index];
|
||||
}
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::Register
|
||||
@ -314,10 +310,6 @@ void Selector<T>::Register(string name, T& item)
|
||||
items.push_back(&item);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::Register
|
||||
|
||||
@ -336,10 +328,6 @@ T* Selector<T>::GetSelectedItem()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::Register
|
||||
|
||||
@ -355,10 +343,6 @@ void Selector<T>::SetCursor(char cursor)
|
||||
this->cursor[1] = '\0';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::KeyIn
|
||||
|
||||
@ -426,10 +410,6 @@ void Selector<T>::KeyIn(KeyPad& key)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: Selector<T>::Show
|
||||
|
||||
@ -463,6 +443,7 @@ void Selector<T>::Show(Display& display)
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief 選択可能値のインタフェース
|
||||
|
||||
@ -476,11 +457,62 @@ public:
|
||||
//virtual void GetValue() = 0;
|
||||
virtual void Next(bool loop=false) = 0;
|
||||
virtual void Previous(bool loop=false) = 0;
|
||||
|
||||
virtual void Increment() = 0;
|
||||
virtual void Decrement() = 0;
|
||||
virtual void ShiftLeft() = 0;
|
||||
virtual void ShiftRight() = 0;
|
||||
|
||||
virtual string ToString() = 0;
|
||||
bool Editable; // 新規追加
|
||||
};
|
||||
|
||||
ostream& operator<<(ostream& stream, ISelectableValue* svalue);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief 値選択器
|
||||
|
||||
*---------------------------------------------------------------------------*/
|
||||
class ValueSelector : public Selector<ISelectableValue>
|
||||
{
|
||||
public:
|
||||
ValueSelector(){ max_name_length = 0;};
|
||||
virtual ~ValueSelector(){};
|
||||
virtual void Register(string, ISelectableValue&);
|
||||
virtual void KeyIn(KeyPad&);
|
||||
typedef Selector<ISelectableValue > selector;
|
||||
|
||||
protected:
|
||||
int max_name_length;
|
||||
virtual string GetItemName(int);
|
||||
};
|
||||
|
||||
|
||||
ostream& operator<<(ostream& stream, ISelectableValue* svalue);
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief 拡張値選択器
|
||||
|
||||
edit : Akabane
|
||||
*---------------------------------------------------------------------------*/
|
||||
class VariableSelector : public ValueSelector
|
||||
{
|
||||
public:
|
||||
VariableSelector(){ max_name_length = 0; EditMode = false; };
|
||||
virtual ~VariableSelector(){};
|
||||
virtual void KeyIn(KeyPad&);
|
||||
virtual void Show(Display& display);
|
||||
|
||||
bool EditMode;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@ -501,15 +533,15 @@ public:
|
||||
virtual void Next(bool loop=false);
|
||||
virtual void Previous(bool loop=false);
|
||||
virtual string ToString();
|
||||
virtual void Increment();
|
||||
virtual void Decrement();
|
||||
virtual void ShiftLeft();
|
||||
virtual void ShiftRight();
|
||||
private:
|
||||
vector<T> values;
|
||||
int currentIndex;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: SelectableValue<T>::SelectableValue
|
||||
|
||||
@ -522,12 +554,9 @@ template<typename T>
|
||||
SelectableValue<T>::SelectableValue()
|
||||
{
|
||||
currentIndex = 0;
|
||||
Editable = false; // 新規追加
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: SelectableValue<T>::Add
|
||||
|
||||
@ -547,10 +576,6 @@ void SelectableValue<T>::Add(T value, bool isDefault)
|
||||
values.push_back(value);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: SelectableValue<T>::GetValue
|
||||
|
||||
@ -565,10 +590,6 @@ T SelectableValue<T>::GetValue()
|
||||
return values[currentIndex];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: SelectableValue<T>::Next
|
||||
|
||||
@ -595,10 +616,6 @@ void SelectableValue<T>::Next(bool loop)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: SelectableValue<T>::Previous
|
||||
|
||||
@ -625,10 +642,6 @@ void SelectableValue<T>::Previous(bool loop)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: SelectableValue<T>::SelectableValue
|
||||
|
||||
@ -645,28 +658,159 @@ string SelectableValue<T>::ToString()
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void SelectableValue<T>::Increment()
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void SelectableValue<T>::Decrement()
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void SelectableValue<T>::ShiftLeft()
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void SelectableValue<T>::ShiftRight()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
@brief 値選択器
|
||||
@brief 汎用な選択可能値
|
||||
|
||||
editor : Akabane
|
||||
*---------------------------------------------------------------------------*/
|
||||
class ValueSelector : public Selector<ISelectableValue>
|
||||
template<typename T>
|
||||
class VariableValue : public ISelectableValue
|
||||
{
|
||||
public:
|
||||
ValueSelector(){ max_name_length = 0;};
|
||||
virtual ~ValueSelector(){};
|
||||
virtual void Register(string, ISelectableValue&);
|
||||
virtual void KeyIn(KeyPad&);
|
||||
typedef Selector<ISelectableValue > selector;
|
||||
|
||||
VariableValue();
|
||||
virtual ~VariableValue(){};
|
||||
virtual T GetValue();
|
||||
virtual void Next(bool loop=false);
|
||||
virtual void Previous(bool loop=false);
|
||||
virtual string ToString();
|
||||
virtual void Increment();
|
||||
virtual void Decrement();
|
||||
virtual void ShiftLeft();
|
||||
virtual void ShiftRight();
|
||||
void SetValue(T value);
|
||||
void SetShiftRange(int high, int low);
|
||||
void SetShiftBitSize(int size);
|
||||
private:
|
||||
int max_name_length;
|
||||
virtual string GetItemName(int);
|
||||
T value;
|
||||
int figure; // 桁
|
||||
int shift_range_h; // シフトできる上限
|
||||
int shift_range_l; // シフトできる下限
|
||||
int shift_size; // 上下ボタンで変化するサイズ
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
VariableValue<T>::VariableValue()
|
||||
{
|
||||
value = 0;
|
||||
figure = 1;
|
||||
shift_range_h = 0;
|
||||
shift_range_l = 0;
|
||||
shift_size = 0;
|
||||
Editable = true;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T VariableValue<T>::GetValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::SetValue(T value)
|
||||
{
|
||||
this->value = value;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::Increment()
|
||||
{
|
||||
u64 amount = 1 << (figure * shift_size);
|
||||
|
||||
if( (value + amount) > 0 )
|
||||
{
|
||||
value = value + amount;
|
||||
NN_TLOG_("Increment value : %08x_%08x\n", (value >> 32), value );
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::Decrement()
|
||||
{
|
||||
u64 amount = 1 << (figure * shift_size);
|
||||
|
||||
if( value >= amount )
|
||||
{
|
||||
value = value - amount;
|
||||
NN_TLOG_("Decrement value : %08x_%08x\n", (value >> 32), value );
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::ShiftLeft()
|
||||
{
|
||||
if( shift_range_h >= (figure + 1) )
|
||||
{
|
||||
figure += 1;
|
||||
NN_TLOG_("Shift Left : 0x%08x(%d)\n", (1<<(figure*shift_size)), figure);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::ShiftRight()
|
||||
{
|
||||
if( shift_range_l <= (figure - 1) )
|
||||
{
|
||||
figure -= 1;
|
||||
NN_TLOG_("Shift Right : 0x%08x(%d)\n", (1<<(figure*shift_size)), figure);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
string VariableValue<T>::ToString()
|
||||
{
|
||||
ostringstream oss;
|
||||
// oss << (value >> 32) << "_" << (value & 0xffffffff) << "h";
|
||||
oss << "0x" << setw(8) << hex << left << (value >> 32);
|
||||
oss << "_";
|
||||
oss << setw(8) << hex << left << value;
|
||||
return oss.str();
|
||||
}
|
||||
template<typename T>
|
||||
void VariableValue<T>::SetShiftRange(int high, int low)
|
||||
{
|
||||
this->shift_range_h = high;
|
||||
this->shift_range_l = low;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::SetShiftBitSize(int size)
|
||||
{
|
||||
this->shift_size = size;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::Next(bool loop)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void VariableValue<T>::Previous(bool loop)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -691,9 +835,6 @@ template<typename T>
|
||||
ostream& operator<<(ostream& stream, NamedValue<T>& value);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!--------------------------------------------------------------------------*
|
||||
Name: NamedValue::NamedValue
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user