/*---------------------------------------------------------------------------* Project: Horizon File: main.cpp Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #include #include #include #include #include #include #include "demo.h" nn::Result res; nn::fs::FileOutputStream fout; nn::fs::FileInputStream fin; nn::fs::Directory dc[256]; wchar_t file_pathw[1024]; char file_path[1024]; char file_path2[1024]; char src_buff[1024*1024]; char get_buff[1024*1024]; char str[512]; extern demo::RenderSystemDrawing s_RenderSystem; //終了処理 extern void finish(void); extern u32 WaitKey(u32 mask); //----------------------------------------  テストパターン void make_pattern() { int i,j; j=0; for (i=0;i<1024*1024;i++){ src_buff[i] = j+i; if (i & 0x100)j++; } } //TEST ライト s32 size; #define SIZE_TEST1 421888 //#define SIZE_TEST1 20000 bool Test1_W() { int total,size2; res = nn::fs::FormatSaveData(1,0,true); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"format Fail"); return false; } res =nn::fs::MountSaveData(); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"Mount Fail"); return false; } res = nn::fs::TryCreateFile(L"data:/test1.bin",SIZE_TEST1); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"Create Fail"); nn::fs::Unmount("data:"); return false; } res = fout.TryInitialize(L"data:/test1.bin",true); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"open Fail"); nn::fs::Unmount("data:"); return false; } total =0; size2 = 512; //size2 = 4096; //size2 = SIZE_TEST1; while(1){ res = fout.TryWrite( &size,&src_buff[total],size2); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"write Fail"); fout.Finalize(); nn::fs::Unmount("data:"); return false; } total += size; sprintf(str,"size %d",total); s_RenderSystem.Clear(); s_RenderSystem.DrawText(10,80,str); s_RenderSystem.SwapBuffers(); //if (size<512)break; if (total >= SIZE_TEST1)break; if ((SIZE_TEST1 - total) < 512)size2 = SIZE_TEST1 - total ; } fout.Finalize(); nn::fs::CommitSaveData(); nn::fs::Unmount("data:"); NN_LOG("total %d",total); s_RenderSystem.DrawText(10,100,"end"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); return true; } //ベリファイ bool Test1_V() { int i,total; res = fin.TryInitialize(L"data:/test1.bin"); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"open Fail"); nn::fs::Unmount("data:"); return false; } total =0; while(1){ res = fin.TryRead( &size,&get_buff[total],512); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"read Fail"); fin.Finalize(); nn::fs::Unmount("data:"); return false; } //if (size == 0)break; for (i=0;i= SIZE_TEST1)break; total += size; s_RenderSystem.Clear(); sprintf(str,"now %d",total); s_RenderSystem.DrawText(10,80,str); s_RenderSystem.SwapBuffers(); if (size<512)break; } fout.Finalize(); nn::fs::Unmount("data:"); s_RenderSystem.DrawText(10,100,"end"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); return true; } //ファイル数 bool Test2_W(int n) { int total,size2; res = nn::fs::FormatSaveData(700,1,false);//dupなしファイル680 if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"format Fail"); return false; } res =nn::fs::MountSaveData(); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"Mount Fail"); return false; } total =0; int num = 0; size2 = 512; while(1){ sprintf(file_path,"data:/test%d.bin",num); // res = nn::fs::TryCreateFile(L"data:/test2.bin",SIZE_TEST1); // if (res.IsFailure()){ // s_RenderSystem.DrawText(8,100,"Create Fail"); // nn::fs::Unmount("data:"); // return false; // } res = fout.TryInitialize(file_path,true); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"open Fail"); nn::fs::Unmount("data:"); return false; } res = fout.TryWrite( &size,&src_buff[total],size2); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"write Fail"); fout.Finalize(); nn::fs::Unmount("data:"); return false; } fout.Finalize(); total += size; num++; sprintf(str,"size %d , num %d",total,num); s_RenderSystem.Clear(); s_RenderSystem.DrawText(10,80,str); s_RenderSystem.SwapBuffers(); //if (size<512)break; if (num == n)break; } fout.Finalize(); nn::fs::CommitSaveData(); nn::fs::Unmount("data:"); NN_LOG("total %d",total); s_RenderSystem.DrawText(10,100,"end"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); return true; } bool Test2_V(int n) { int total,size2,i; total =0; int num = 0; size2 = 512; while(1){ sprintf(file_path,"data:/test%d.bin",num); res = fin.TryInitialize(file_path); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"open Fail"); nn::fs::Unmount("data:"); return false; } res = fin.TryRead( &size,&get_buff[total],size2); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"read Fail"); fin.Finalize(); nn::fs::Unmount("data:"); return false; } for (i=0;i= SIZE_TEST5)break; } fout.Finalize(); nn::fs::CommitSaveData(); nn::fs::Unmount("data:"); s_RenderSystem.DrawText(10,100,"end"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); return true; } bool Test5_V() { int i,pos; res = fin.TryInitialize(L"data:/test5.bin"); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"open Fail"); nn::fs::Unmount("data:"); return false; } pos =0; while(1){ fin.SetPosition(pos); res = fin.TryRead( &size,&get_buff[pos],512); if (res.IsFailure() || (size!=512)){ s_RenderSystem.DrawText(8,100,"read Fail"); fin.Finalize(); nn::fs::Unmount("data:"); return false; } sprintf(str,"position %d",pos); s_RenderSystem.Clear(); s_RenderSystem.DrawText(10,80,str); s_RenderSystem.SwapBuffers(); for (i=0;i<512;i++) if (src_buff[pos+i] != get_buff[pos+i]) { s_RenderSystem.DrawText(8,100,"verifi Fail at %d",i); return false; } pos += 1024;//512飛ばす if (pos >= SIZE_TEST5)break; } fin.Finalize(); nn::fs::Unmount("data:"); s_RenderSystem.DrawText(10,100,"end"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); return true; } #define menu_ct 6 #define menu_max (menu_ct-1) char* menu_str[menu_ct] = {"Casual check","Large size","many files","Deep directry","max size name","data < create size"}; #define menu_top_Y 80 #define menu_top_X 60 #define menu_spc 14 //---------------------------------------------------------------- main void TestMain() { u32 value; int curs = 0; int i; bool sccs; //Render s_RenderSystem.SetColor(1.0f,1.0f,1.0f,1.0f); //TEST PATTERN make_pattern(); while(1){ //menu 表示 s_RenderSystem.Clear(); s_RenderSystem.DrawText(8,20," Backup Verifi for SaveDataMover Test "); s_RenderSystem.DrawText(8,40," for 512KB Backup"); for (i=0;i"); s_RenderSystem.DrawText(menu_top_X,menu_top_Y+menu_spc*(menu_max+2),"push A:Write ,X:Verifi"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); //ボタン待ち value = WaitKey(nn::hid::BUTTON_A | nn::hid::BUTTON_X |nn::hid::BUTTON_UP |nn::hid::BUTTON_DOWN); if (value & nn::hid::BUTTON_A){//ライト sccs = false; s_RenderSystem.Clear(); s_RenderSystem.DrawText(10,70,"writing"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); switch(curs){ case 0:sccs = Test2_W(10);break; case 1:sccs = Test1_W();break; case 2:sccs = Test2_W(680);break; case 3:sccs = Test3_W();break; case 4:sccs = Test4_W();break; case 5:sccs = Test5_W();break; default:break; } }else if (value & nn::hid::BUTTON_X) {//ベリファイ sccs = false; s_RenderSystem.Clear(); s_RenderSystem.DrawText(10,70,"verifi"); s_RenderSystem.SwapBuffers(); nngxWaitVSync(NN_GX_DISPLAY0); res =nn::fs::MountSaveData(); if (res.IsFailure()){ s_RenderSystem.DrawText(8,100,"Mount Fail"); }else switch(curs){ case 0:sccs = Test2_V(10);break; case 1:sccs = Test1_V();break; case 2:sccs = Test2_V(680);break; case 3:sccs = Test3_V();break; case 4:sccs = Test4_V();break; case 5:sccs = Test5_V();break; default:break; } }else if (value & nn::hid::BUTTON_UP){ if(curs > 0)curs--; }else if(curs < menu_max)curs++; if (value & (nn::hid::BUTTON_A | nn::hid::BUTTON_X)){ if (sccs == false)s_RenderSystem.DrawText(8,120,"Failed"); sprintf(str,"desc %d",res.GetDescription()); s_RenderSystem.DrawText(10,140,str); s_RenderSystem.SwapBuffers(); NN_LOG("desc %d",res.GetDescription()); WaitKey(nn::hid::BUTTON_B); } } } /*---------------------------------------------------------------------------* End of file *---------------------------------------------------------------------------*/