mirror of
https://github.com/rvtr/ctr_card_test.git
synced 2025-06-19 07:05:33 -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,9 +2,9 @@
|
|||||||
|
|
||||||
using namespace nn::red::nakayama;
|
using namespace nn::red::nakayama;
|
||||||
|
|
||||||
|
class ReadID1: public Program
|
||||||
class CommandTest : public Program
|
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
virtual void Execute()
|
virtual void Execute()
|
||||||
{
|
{
|
||||||
Page page;
|
Page page;
|
||||||
@ -12,50 +12,630 @@ class CommandTest : public Program
|
|||||||
Label title;
|
Label title;
|
||||||
title.X = 20;
|
title.X = 20;
|
||||||
title.Y = 10;
|
title.Y = 10;
|
||||||
title.Text = "Command Test";
|
title.Text = "RD_ID1";
|
||||||
page.Add(title);
|
page.Add(title);
|
||||||
|
|
||||||
Label date;
|
Label lb0;
|
||||||
date.X = 250;
|
lb0.X = 100;
|
||||||
date.Y = 10;
|
lb0.Y = 50;
|
||||||
date.Text = __DATE__;
|
lb0.Text = "ID1_0";
|
||||||
page.Add(date);
|
page.Add(lb0);
|
||||||
|
|
||||||
ValueSelector menu;
|
Label lb1;
|
||||||
menu.X = 30;
|
lb1.X = 100;
|
||||||
menu.Y = 40;
|
lb1.Y = 80;
|
||||||
page.Add(menu);
|
lb1.Text = "ID1_1";
|
||||||
|
page.Add(lb1);
|
||||||
|
|
||||||
SelectableValue<int> address;
|
Label lb2;
|
||||||
address.Add( 0 );
|
lb2.X = 100;
|
||||||
address.Add( 1 );
|
lb2.Y = 110;
|
||||||
address.Add( 2 );
|
lb2.Text = "ID1_2";
|
||||||
menu.Register("Address", address);
|
page.Add(lb2);
|
||||||
|
|
||||||
SelectableValue< NamedValue<int> > loop;
|
Label lb3;
|
||||||
loop.Add(*(new NamedValue<int>("Once", 0)));
|
lb3.X = 100;
|
||||||
loop.Add(*(new NamedValue<int>("Repeat", 1)));
|
lb3.Y = 140;
|
||||||
menu.Register("Loop", loop);
|
lb3.Text = "ID1_3";
|
||||||
|
page.Add(lb3);
|
||||||
|
|
||||||
// 画面表示しながら選択を受け付ける
|
KeyPad& pad = KeyPad::GetInstance();
|
||||||
while(1)
|
|
||||||
|
while (1)
|
||||||
{
|
{
|
||||||
page.Show(Display::GetInstance(Display::Upper));
|
pad.ReadKey();
|
||||||
|
page.Show(Display::GetInstance(Display::Lower));
|
||||||
|
|
||||||
// 選択されたら
|
if (pad.IsTrigger(KeyPad::B))
|
||||||
if(menu.Selected)
|
|
||||||
{
|
{
|
||||||
int a = address.GetValue();
|
Display::GetInstance(Display::Lower).Clear();
|
||||||
int l = loop.GetValue().Value;
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||||
menu.Selected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// キャンセルされたら
|
|
||||||
if(menu.Canceled)
|
|
||||||
{
|
|
||||||
menu.Canceled = false;
|
|
||||||
break;
|
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 "nakayama.h"
|
||||||
#include "FunctionTest.cpp"
|
#include "FunctionTest.cpp"
|
||||||
#include "CommandTest.cpp"
|
#include "CommandTest.cpp"
|
||||||
|
#include "ReliabilityTestForRom.cpp"
|
||||||
|
#include "ReliabilityTestForRWMemory.cpp"
|
||||||
|
#include "BackupMemoryTest.cpp"
|
||||||
|
|
||||||
using namespace nn::red::nakayama;
|
using namespace nn::red::nakayama;
|
||||||
|
|
||||||
class CtrCardTest : public Program
|
class CtrCardTest: public Program
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Execute()
|
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 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));
|
||||||
Page page;
|
|
||||||
|
|
||||||
// タイトルラベル
|
if (menu.Selected)
|
||||||
Label title;
|
{
|
||||||
title.X = 20;
|
menu.GetSelectedItem()->Execute();
|
||||||
title.Y = 10;
|
menu.Selected = false;
|
||||||
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()));
|
|
||||||
|
|
||||||
// 画面表示しながら選択を受け付ける
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,160 +2,144 @@
|
|||||||
|
|
||||||
using namespace nn::red::nakayama;
|
using namespace nn::red::nakayama;
|
||||||
|
|
||||||
class S1FunctionTest : public Program
|
class S1FunctionTest: public Program
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Execute()
|
virtual void Execute()
|
||||||
{
|
{
|
||||||
// ページ
|
Page page;
|
||||||
Page page;
|
|
||||||
|
|
||||||
Label running;
|
Label running;
|
||||||
running.X = 120;
|
running.X = 120;
|
||||||
running.Y = 100;
|
running.Y = 100;
|
||||||
running.Text = "Running";
|
running.Text = "Running";
|
||||||
page.Add(running);
|
page.Add(running);
|
||||||
|
|
||||||
Label loop;
|
Label loop;
|
||||||
loop.X = 10;
|
loop.X = 10;
|
||||||
loop.Y = 200;
|
loop.Y = 200;
|
||||||
loop.Text = "Loop:";
|
loop.Text = "Loop:";
|
||||||
page.Add(loop);
|
page.Add(loop);
|
||||||
|
|
||||||
Label count;
|
Label count;
|
||||||
count.X = 60;
|
count.X = 60;
|
||||||
count.Y = 200;
|
count.Y = 200;
|
||||||
count.Text = "0000000000000";
|
count.Text = "0000000000000";
|
||||||
page.Add(count);
|
page.Add(count);
|
||||||
|
|
||||||
KeyPad& pad = KeyPad::GetInstance();
|
KeyPad& pad = KeyPad::GetInstance();
|
||||||
|
|
||||||
// 画面表示しながら選択を受け付ける
|
while (1)
|
||||||
while(1)
|
{
|
||||||
{
|
pad.ReadKey();
|
||||||
pad.ReadKey();
|
page.Show(Display::GetInstance(Display::Lower));
|
||||||
page.Show(Display::GetInstance(Display::Lower));
|
|
||||||
|
|
||||||
// Bボタンが押されたら
|
if (pad.IsTrigger(KeyPad::B))
|
||||||
if(pad.IsTrigger(KeyPad::B))
|
{
|
||||||
{
|
Display::GetInstance(Display::Lower).Clear();
|
||||||
Display::GetInstance(Display::Lower).Clear();
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class S2FunctionTest: public Program
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class S2FunctionTest : public Program
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Execute()
|
virtual void Execute()
|
||||||
{
|
{
|
||||||
// ページ
|
Page page;
|
||||||
Page page;
|
|
||||||
|
|
||||||
Label running;
|
Label running;
|
||||||
running.X = 120;
|
running.X = 120;
|
||||||
running.Y = 100;
|
running.Y = 100;
|
||||||
running.Text = "Running";
|
running.Text = "Running";
|
||||||
page.Add(running);
|
page.Add(running);
|
||||||
|
|
||||||
Label loop;
|
Label loop;
|
||||||
loop.X = 10;
|
loop.X = 10;
|
||||||
loop.Y = 200;
|
loop.Y = 200;
|
||||||
loop.Text = "Loop:";
|
loop.Text = "Loop:";
|
||||||
page.Add(loop);
|
page.Add(loop);
|
||||||
|
|
||||||
Label count;
|
Label count;
|
||||||
count.X = 60;
|
count.X = 60;
|
||||||
count.Y = 200;
|
count.Y = 200;
|
||||||
count.Text = "0000000000000";
|
count.Text = "0000000000000";
|
||||||
page.Add(count);
|
page.Add(count);
|
||||||
|
|
||||||
KeyPad& pad = KeyPad::GetInstance();
|
KeyPad& pad = KeyPad::GetInstance();
|
||||||
|
|
||||||
// 画面表示しながら選択を受け付ける
|
while (1)
|
||||||
while(1)
|
{
|
||||||
{
|
pad.ReadKey();
|
||||||
pad.ReadKey();
|
page.Show(Display::GetInstance(Display::Lower));
|
||||||
page.Show(Display::GetInstance(Display::Lower));
|
|
||||||
|
|
||||||
// Bボタンが押されたら
|
if (pad.IsTrigger(KeyPad::B))
|
||||||
if(pad.IsTrigger(KeyPad::B))
|
{
|
||||||
{
|
Display::GetInstance(Display::Lower).Clear();
|
||||||
Display::GetInstance(Display::Lower).Clear();
|
Display::GetInstance(Display::Lower).SwapBuffer();
|
||||||
Display::GetInstance(Display::Lower).SwapBuffer();
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class IrregularAccessTest: public Program
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class IrregularAccessTest : public Program
|
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class FunctionTest: public Program
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class FunctionTest : public Program
|
|
||||||
{
|
{
|
||||||
virtual void Execute()
|
virtual void Execute()
|
||||||
{
|
{
|
||||||
Page page;
|
Page page;
|
||||||
|
|
||||||
Label title;
|
Label title;
|
||||||
title.X = 20;
|
title.X = 20;
|
||||||
title.Y = 10;
|
title.Y = 10;
|
||||||
title.Text = "Function Test";
|
title.Text = "Function Test";
|
||||||
page.Add(title);
|
page.Add(title);
|
||||||
|
|
||||||
Label date;
|
Label date;
|
||||||
date.X = 250;
|
date.X = 250;
|
||||||
date.Y = 10;
|
date.Y = 10;
|
||||||
date.Text = __DATE__;
|
date.Text = __DATE__;
|
||||||
page.Add(date);
|
page.Add(date);
|
||||||
|
|
||||||
Selector<Program> menu;
|
Selector<Program> menu;
|
||||||
menu.X = 30;
|
menu.X = 30;
|
||||||
menu.Y = 40;
|
menu.Y = 40;
|
||||||
page.Add(menu);
|
page.Add(menu);
|
||||||
|
|
||||||
// 選択肢に項目を追加
|
// [TODO] カードIDに応じて切り替える
|
||||||
menu.Register("S1 Function Test", *(new S1FunctionTest()));
|
if (1)
|
||||||
menu.Register("S2 Function Test", *(new S2FunctionTest()));
|
{
|
||||||
menu.Register("Irregular Access Test", *(new IrregularAccessTest()));
|
menu.Register("S1 Function Test", *(new S1FunctionTest()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
menu.Register("S2 Function Test", *(new S2FunctionTest()));
|
||||||
|
}
|
||||||
|
menu.Register("Irregular Access Test", *(new IrregularAccessTest()));
|
||||||
|
|
||||||
// 画面表示しながら選択を受け付ける
|
while (1)
|
||||||
while(1)
|
{
|
||||||
{
|
page.Show(Display::GetInstance(Display::Upper));
|
||||||
page.Show(Display::GetInstance(Display::Upper));
|
|
||||||
|
|
||||||
// 選択されたら
|
if (menu.Selected)
|
||||||
if(menu.Selected)
|
{
|
||||||
{
|
menu.GetSelectedItem()->Execute();
|
||||||
menu.GetSelectedItem()->Execute();
|
menu.Selected = false;
|
||||||
menu.Selected = false;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// キャンセルされたら
|
if (menu.Canceled)
|
||||||
if(menu.Canceled)
|
{
|
||||||
{
|
menu.Canceled = false;
|
||||||
menu.Canceled = false;
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -574,23 +574,113 @@ string ValueSelector::GetItemName(int index)
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ValueSelector::KeyIn(KeyPad& key)
|
void ValueSelector::KeyIn(KeyPad& key)
|
||||||
{
|
{
|
||||||
selector::KeyIn(key);
|
selector::KeyIn(key);
|
||||||
|
|
||||||
if(key.IsTrigger(KeyPad::RIGHT))
|
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
|
Name: DebugWriter::Write
|
||||||
|
|
||||||
|
293
trunk/nakayama.h
293
trunk/nakayama.h
@ -98,6 +98,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief キーパッド
|
@brief キーパッド
|
||||||
|
|
||||||
@ -142,6 +143,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief ユーザインタフェース
|
@brief ユーザインタフェース
|
||||||
|
|
||||||
@ -172,6 +174,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief ページ
|
@brief ページ
|
||||||
|
|
||||||
@ -189,6 +192,7 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief ラベル
|
@brief ラベル
|
||||||
|
|
||||||
@ -203,6 +207,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief 時計
|
@brief 時計
|
||||||
|
|
||||||
@ -222,6 +228,8 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief 選択器
|
@brief 選択器
|
||||||
|
|
||||||
@ -252,28 +260,6 @@ protected:
|
|||||||
virtual string GetItemName(int);
|
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
|
Name: Selector<T>::Selector
|
||||||
|
|
||||||
@ -295,9 +281,19 @@ Selector<T>::Selector() {
|
|||||||
Offset = 10;
|
Offset = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!--------------------------------------------------------------------------*
|
||||||
|
Name: Selector<T>::GetItemName
|
||||||
|
|
||||||
|
@brief アイテム名を取得します。
|
||||||
|
|
||||||
|
@return
|
||||||
|
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
template<typename T>
|
||||||
|
string Selector<T>::GetItemName(int index)
|
||||||
|
{
|
||||||
|
return names[index];
|
||||||
|
}
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: Selector<T>::Register
|
Name: Selector<T>::Register
|
||||||
@ -314,10 +310,6 @@ void Selector<T>::Register(string name, T& item)
|
|||||||
items.push_back(&item);
|
items.push_back(&item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: Selector<T>::Register
|
Name: Selector<T>::Register
|
||||||
|
|
||||||
@ -336,10 +328,6 @@ T* Selector<T>::GetSelectedItem()
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: Selector<T>::Register
|
Name: Selector<T>::Register
|
||||||
|
|
||||||
@ -355,10 +343,6 @@ void Selector<T>::SetCursor(char cursor)
|
|||||||
this->cursor[1] = '\0';
|
this->cursor[1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: Selector<T>::KeyIn
|
Name: Selector<T>::KeyIn
|
||||||
|
|
||||||
@ -426,10 +410,6 @@ void Selector<T>::KeyIn(KeyPad& key)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: Selector<T>::Show
|
Name: Selector<T>::Show
|
||||||
|
|
||||||
@ -463,6 +443,7 @@ void Selector<T>::Show(Display& display)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
@brief 選択可能値のインタフェース
|
@brief 選択可能値のインタフェース
|
||||||
|
|
||||||
@ -476,11 +457,62 @@ public:
|
|||||||
//virtual void GetValue() = 0;
|
//virtual void GetValue() = 0;
|
||||||
virtual void Next(bool loop=false) = 0;
|
virtual void Next(bool loop=false) = 0;
|
||||||
virtual void Previous(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;
|
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 Next(bool loop=false);
|
||||||
virtual void Previous(bool loop=false);
|
virtual void Previous(bool loop=false);
|
||||||
virtual string ToString();
|
virtual string ToString();
|
||||||
|
virtual void Increment();
|
||||||
|
virtual void Decrement();
|
||||||
|
virtual void ShiftLeft();
|
||||||
|
virtual void ShiftRight();
|
||||||
private:
|
private:
|
||||||
vector<T> values;
|
vector<T> values;
|
||||||
int currentIndex;
|
int currentIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: SelectableValue<T>::SelectableValue
|
Name: SelectableValue<T>::SelectableValue
|
||||||
|
|
||||||
@ -522,12 +554,9 @@ template<typename T>
|
|||||||
SelectableValue<T>::SelectableValue()
|
SelectableValue<T>::SelectableValue()
|
||||||
{
|
{
|
||||||
currentIndex = 0;
|
currentIndex = 0;
|
||||||
|
Editable = false; // 新規追加
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: SelectableValue<T>::Add
|
Name: SelectableValue<T>::Add
|
||||||
|
|
||||||
@ -547,10 +576,6 @@ void SelectableValue<T>::Add(T value, bool isDefault)
|
|||||||
values.push_back(value);
|
values.push_back(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: SelectableValue<T>::GetValue
|
Name: SelectableValue<T>::GetValue
|
||||||
|
|
||||||
@ -565,10 +590,6 @@ T SelectableValue<T>::GetValue()
|
|||||||
return values[currentIndex];
|
return values[currentIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: SelectableValue<T>::Next
|
Name: SelectableValue<T>::Next
|
||||||
|
|
||||||
@ -595,10 +616,6 @@ void SelectableValue<T>::Next(bool loop)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: SelectableValue<T>::Previous
|
Name: SelectableValue<T>::Previous
|
||||||
|
|
||||||
@ -625,10 +642,6 @@ void SelectableValue<T>::Previous(bool loop)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: SelectableValue<T>::SelectableValue
|
Name: SelectableValue<T>::SelectableValue
|
||||||
|
|
||||||
@ -645,28 +658,159 @@ string SelectableValue<T>::ToString()
|
|||||||
return oss.str();
|
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:
|
public:
|
||||||
ValueSelector(){ max_name_length = 0;};
|
VariableValue();
|
||||||
virtual ~ValueSelector(){};
|
virtual ~VariableValue(){};
|
||||||
virtual void Register(string, ISelectableValue&);
|
virtual T GetValue();
|
||||||
virtual void KeyIn(KeyPad&);
|
virtual void Next(bool loop=false);
|
||||||
typedef Selector<ISelectableValue > selector;
|
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:
|
private:
|
||||||
int max_name_length;
|
T value;
|
||||||
virtual string GetItemName(int);
|
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);
|
ostream& operator<<(ostream& stream, NamedValue<T>& value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*!--------------------------------------------------------------------------*
|
/*!--------------------------------------------------------------------------*
|
||||||
Name: NamedValue::NamedValue
|
Name: NamedValue::NamedValue
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user