diff --git a/trunk/KENJEraser/KENJEraser.rsf b/trunk/KENJEraser/KENJEraser.rsf index d52e186..f16a6fd 100644 --- a/trunk/KENJEraser/KENJEraser.rsf +++ b/trunk/KENJEraser/KENJEraser.rsf @@ -13,26 +13,14 @@ SystemControlInfo: AppType : Application StackSize : 0x4000 Dependency : - - gpio - - pdn - - spi - - i2c - - mcu - - ptm - codec - - cfg - - hid - - gsp - - friends - nim - - ac - - ndm AccessControlInfo: Priority : 16 DisableDebug : true - FileSystemAccess: + FileSystemAccess: - Core IoAccessControl: @@ -41,6 +29,8 @@ AccessControlInfo: Option: FreeProductCode: true +CardInfo: + CardDevice: None Rom: # ROM に含めるファイルシステムのルートパスを指定します。 diff --git a/trunk/KENJEraser/OMakefile b/trunk/KENJEraser/OMakefile index f615b21..e8b31af 100644 --- a/trunk/KENJEraser/OMakefile +++ b/trunk/KENJEraser/OMakefile @@ -14,8 +14,7 @@ # $Rev$ #---------------------------------------------------------------------------- SUPPORTED_TARGETS = CTR-T*.Process.MPCore.* -CTR_APPTYPE = BOTH -CTR_MAKE_DEVELOPMENT_IMAGE = true +CTR_APPTYPE = CARD TARGET_PROGRAM = KENJEraser @@ -37,29 +36,15 @@ SHADER_PATH = $(ROMFS_ROOT)/$(SHADER_BIN) ROMFS_DEPENDENCIES = $(SHADER_PATH) LIBS += libnn_cfg \ - libnn_driversEeprom \ - libnn_driversi2c \ - libnn_driversCal \ - libnn_crypto \ - libnn_driversCodec \ - libnn_spi \ - libnn_gpio \ - libnn_pdn \ - libnn_mcu \ - libnn_i2c \ - libnn_driversCamera \ - libnn_ps \ - libnn_driversRsa \ lib_demo \ - libnn_nwm \ - libnn_friends \ libnn_ns \ libnn_am \ + libnn_nim \ INSTALL_SDK_TOOL = true ROM_SPEC_FILE = $(TARGET_PROGRAM).rsf -DESCRIPTOR = DSiWareDeleteTool.desc +DESCRIPTOR = PersonalDataDeleteTool.desc include $(ROOT_OMAKE)/modulerules diff --git a/trunk/KENJEraser/DSiWareDeleteTool.desc b/trunk/KENJEraser/PersonalDataDeleteTool.desc similarity index 63% rename from trunk/KENJEraser/DSiWareDeleteTool.desc rename to trunk/KENJEraser/PersonalDataDeleteTool.desc index 68d8a82..333490b 100644 --- a/trunk/KENJEraser/DSiWareDeleteTool.desc +++ b/trunk/KENJEraser/PersonalDataDeleteTool.desc @@ -4,15 +4,15 @@ AccessControlDescriptor: CoreVersion: 2 DescVersion: 2 Descriptor: | - AP///wAABAACAAAAAAAFGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP///wAABAACAAAAAAAFGJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIEAAAAAAABBUFQ6VQAAACRo aW9GSU8AJGhvc3RpbzAkaG9zdGlvMWFjOnUAAAAAYm9zczpVAABjZmc6dQAA AGRzcDo6RFNQZnJkOnUAAABmczpVU0VSAGdzcDo6R3B1aGlkOlVTRVJodHRw OkMAAG5kbTp1AAAAbndtOjpVRFNwdG06dQAAAHB4aTpkZXYAc29jOlUAAABz - c2w6QwAAAGxkcjpybwAAYW06c3lzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + c2w6QwAAAGxkcjpybwAAaXI6VVNFUgBhbTpzeXMAAG5pbTpzAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAD+//vw/7//8ec/APIA8JH/APaR/1D/gf9Y/4H/cP+B/3j/gf8B + AAAAAAAAAABOn/rw/7//8ec/APIA8JH/APaR/1D/gf9Y/4H/cP+B/3j/gf8B AQD/AAIA/v////////////////////////////////////////////////// ////////////////////////////////////////AAAAAAAAAAAAAAAAAAAA AAQDAAAAAAAAAAAAAAAAAAI= @@ -39,7 +39,6 @@ AccessControlDescriptor: ExitThread: 9 GetCurrentProcessorNumber: 17 GetHandleInfo: 41 - GetProcessAffinityMask: 4 GetProcessId: 53 GetProcessIdOfThread: 54 GetProcessIdealProcessor: 6 @@ -49,7 +48,6 @@ AccessControlDescriptor: GetResourceLimitLimitValues: 57 GetSystemInfo: 42 GetSystemTick: 40 - GetThreadAffinityMask: 13 GetThreadContext: 59 GetThreadId: 55 GetThreadIdealProcessor: 15 @@ -65,10 +63,6 @@ AccessControlDescriptor: SendSyncRequest3: 48 SendSyncRequest4: 49 SendSyncRequest: 50 - SetProcessAffinityMask: 5 - SetProcessIdealProcessor: 7 - SetThreadAffinityMask: 14 - SetThreadIdealProcessor: 16 SetThreadPriority: 12 SetTimer: 27 SignalEvent: 24 @@ -116,53 +110,55 @@ AccessControlDescriptor: - soc:U - ssl:C - ldr:ro + - ir:USER - am:sys + - nim:s Signature: | - df8WcNTaVgoVquQ9BkEsZoF3PpbJVmH6XIv6V9KHR/rJNpR/QcT2k/psvUNf - tlgvSy+ZtRIUE+xM0qelRXXZ/kpUUtPuYF0//cdetGKJIXVzV/0CLsChV1LQ - ZKDZasONA2of0sBQmyh82GWbIvwKuaQjkTcEpZ0xSO8qMRIFsE9T1itpZI3y - 39KZSBz5FNGizpA2UoFKCART2VDvx1owquaB6FaUjUEljRYF2B5xfzImsWtR - CMkbV7rSfKjCl1f2VLIPxc7GbOkY4/nYShaZgp9tvCFlBtUPLoec9TEr6Nn+ - +r6Kh9BvXqPdd3rpDtHXim9CSWgXmZsNtIdoJ5rS7g== + AqvjcY8rXTlv8a/zlgr+Hw8m+EloTnOLLsrcfNpkJMF6lL1UElFFymBpqb/8 + 5UgHVFP8GXh7HdbkW6OUpaHI1WfW0TywDDovLe8KWz0ljAyikNdBt+Y9aw9f + OmXe6v51j5lMjOsp+1t2q8KSTg/3MoviT6WV5nyl1pZ7MY2YE4X25dong6Jz + M/1xzbuwbD2pyIleVbdK93Iqz30DwGv+Clrm0BvYyquautPc2vciFhmyS+9x + ecaYLGXq28f5MTf1k3MB+kuJ9zRcwa+EzsDpzQ7QK7N5KnO83NFEj5RIxcGD + P9YB1Zh41GoKu2MfzrA+ct3jLswuIHCgPhpxIwZxHw== StorageId: - 0 CommonHeaderKey: D: | - 2dZqKOrq81unaSIjE7BboKKaCHaNsjpoZcjSnwX3x8NMSHC2ovTPP3iR+6Qz - Rq15iPQg2NV/4WbMMmKFNfVIrsNEAbpOFpQCXdriiwsXHMziM1wO7Td4qzYN - z/s6ZNxhTxpdKtISUDmkyLGVFBCGNV4EPJkEM+GWqn5yKw1uX0lt2x/iICGR - WE8f02khCCpAD1/CrrSaUHBrodE9lXX0lGT8rYEB7avrl99FNFcxa8NUslqN - 0lcP9yzzssJNQitYiZv5VLkJgAt4RCadsZd5sWblqGTFK/zEd7wN4BXs87tR - RLDWMAeJ3L/e4ZRpenon/vit1o9UmSgSGKb9klejAQ== + fq1dy3ZImPNRzcRdktWN0oMneIp+0eswZJ9QKAr31zNEufZ71H3xC75jXUBY + dhDt0cp5BoguBjdcAuKvUXsA0uf6XmAPmBe/h4q+m3ROH39NpIHKgx/Hy/Sq + tQsbsepo7GgpmK+81nu9WWVYma2ZH6s9TA1lJjTIoOAdZcXz9Ss3PZcvJL3z + 6apT8iEcKjR06gZQXwl45hG/5Pvntc+ZBs987NYgTUVvPsrTg0FeiGM6ll7J + TazygacM6ez/mBwduAu+cjuu1ZjMbi0nt9KTPHJWrCFBLibQxEi0F47ibfF+ + rQ/tYgnx0oOubGNcC4BuEQpPft2/5kCLulok1Gtc2Q== DP: | - xRNzBAhcOLE51pbYrWt4xBMokTuY/NhJN6IoN+r8dg3jIwBq4H9PtlV+gyqU - 4mTptKZiNyZa8uvUt0TlB/BgFiwc7MWkFTcJ+TBB1orXC38bTTBLGP1J7B/S - MEPveiQjjUHRaBFjS+5BMfcXeOcQ9/FOt1FiuHcvDKWKD85tgYE= + F6Z+8iINb5624Z3Ls0SghbWuUJLhKhqHvXibKaJvFV7lTwS1IZtXaDRCxFFz + ToZSOFul8OXygXJj3YOCPXd7O5Of3GG2GfpHYEMa534wjUmXOfKsXADNs/L0 + 8chkC/GnkJE86f2OxpYGle0J6DFSalg4AzizRU3MMAPuyUJI4JU= DQ: | - euNxPVbXvF/a9HPArd3Fd8BUcm4Fb0Q18W0SYqHdDD4mP7lWjTKHGADix1OX - UtqNPyv6NbJ5WnwKg4oqB9zl4Dxu6JyrifBiZ2VxngrLLA0xRKYjxNxMIAgx - 7PbgQcZ5x45fgNa1QFA31oQnaa2Mvr4PgHqMlK6VIFqEg+ZA/+c= + xIuqVMvnOpJ1GuUE2bGZX7ztDurNjRv+d8j5ScxUJHP83wXYSkdiV3iXk7Pn + YWJVu2PF3B2qeWfo+Uu4KujOLlHVeRL2HvXdm85cPk2AFtfSZRh9z59+qKfq + lICCFFTTkwaXl2ZktLECxIsmu1PDbW+83JrCtiMbnizzq4rrrSk= Exponent: | AQAB InverseQ: | - 5WZLcyBu4+Mq8aTpVybYh1boPuVyMSvBeCvkedKssUvG8PFhx5Z5vMkvjgpo - ckM/etwsOwSLGuDzzUhMFflM1koSi+dwyR0FpRAkTnXeY12xgwbVaiMJot0v - e37qFGCMYiDQXu4wjbiR2IJ6YRmSSy3RyBHiMw++y/6vKKQ1jPI= + n+ldHK6gx9s9ua0iK65zyeriO5sW+G4jvbDEiOjBOcfBPKvio9jwaBYCMUya + awGpzyFiJjVYxHYH6nX9eEaFwvkAEnbMj0veJGcei6zFOjzz0Ils/r1pIZhY + djcoZZwvLfxShgOi66DfKHn0A2arX4CKpcIRBTwGigLzDp4DHJY= Modulus: | - 5OQ4q7/KRkL+yc/QrOysdG0wKlwgzj0VlwfdnvEBfBSjG6bAALQkqWVzUXkk - JaHcun6evvaHq7Tc9Aa6xNMgA7oBsfGVpneGMFrjvJzDqi9gjZQUdirfyIDR - Hp+F/A4DXQ3CUufnUTv2F+W5ACNOpe8QR9UOBjrJGYzmFS1VvF2wNqy5cNhg - CH4lK6fmetKCJn60EWzPahvLPRJbWITvtmky21GQ0JOU87I8n4r288JTVKEW - FDtku26iWW67erVUpn21KQvimhWjiuKAjAWEzt97np0GdxNs8fSWq57jTwuT - eyEZayHXbHsjp8hNU11aML7mM5IYgRRZGFV3OU+ufw== + 3f9jG4ay3ep0o/o+y3uA69HD/ZOTvCJTR9rZHsOvC/ByU+gGl46fRzkljwG3 + W9PqFfLVvHGHcLhZm96G7OH/lrHeIYu1frZDzm1POVZIxBdkVS5fD/x12Yua + q9/w3WWZbt6rYBJUM2ZU7sLSb80yy5Kyuvfa8xiIdIrXd5s/HbfBou/eMoRz + LZziErp2pd67Tz6vBdmjP8sSMWJ2XZHUvOadKhqENDK24aDJ2I+7RjYoNpVX + 1kvOsun6aKIu8qYRt0K8cq9lXjADUO3vi1L+Ltl9WHEOi4LN5UdZBHLpxr9Y + 2p++I2sN4o5w/gsf4jD3r51gYQ7aOtJ6F2UK3umV9w== P: | - /B+LD7VSdc2FL61myP2m92eBsOdxzMtb7egh3zGnnRDbUxKE7o97imkL+gx5 - MtdXvWWZSKnB9dbmkcSxpaLuV6cvHmBPxUmn2W6nlRT025c2F4Zti+fJrUEE - GSMKH/Xp+qE5o03+geWPYffFjUugxGJMrmKYpVGxYdRWYSY5xKE= + 8c5C9eVN8fKuTQbXi7b8VtUbpaEEl5dHAlSIhC1l1UQUryq9PKTnJAKstpp2 + sYw18WCpMo55OfH+jvOcCQPINaFnwhRjMUxVuknFebGQeS0mZsudOK2Om3am + fUwxshwYsLdK+NR/pXQa/vJVrOYlDHxhRACUKyzems2NBv3tvkM= Q: | - 6Gk6mKRG6huUf7xPHhuFYNdzigZO1Z15XfRmcrNaHwlVhkPofzEQDpj8mI4g - RaJIVi1a147vK8B5gcgeGNQ2Ukyhw9j+tjDN9nB9b7mAnZ97+9Q9R5A/rtQF - kGFga2AwkNsT2/cXX9HYBi0IqhFoe+URHvJc8ba23O3EQLSlfx8= + 6wd1hAXZJg7aMvYf0B/G+3+gGAbvGY7FwFc46lMdqiWxJgaEfUtAyB7JdAQz + G2O44LOsCH/BVEkkACJPkbGWhjU2GDw71d4I9R3KwOJLTGh8uHZ4foQbbc8e + bdIfusBtTRwo6KUTC01zzUgbm6QH9wvibLiO5muvQN1NjPSbwD0= DefaultSpec: AccessControlInfo: AffinityMask: 1 @@ -186,8 +182,6 @@ DefaultSpec: - RW Text: - STUP_ENTRY - Media: - MediaType: Card PlainRegion: - .module_id Rom: @@ -213,6 +207,7 @@ DefaultSpec: hid: 0x0004013000001d02L http: 0x0004013000002902L i2c: 0x0004013000001e02L + ir: 0x0004013000003302L mcu: 0x0004013000001f02L mic: 0x0004013000002002L ndm: 0x0004013000002b02L diff --git a/trunk/KENJEraser/Readme.txt b/trunk/KENJEraser/Readme.txt new file mode 100644 index 0000000..89ed44b --- /dev/null +++ b/trunk/KENJEraser/Readme.txt @@ -0,0 +1,4 @@ +■ビルド環境 + +Horizon trunk r42202 + +trunk r44324 の PersonalDataDeleteTool.desc diff --git a/trunk/KENJEraser/main.cpp b/trunk/KENJEraser/main.cpp index 8a9c8aa..5de7ab7 100644 --- a/trunk/KENJEraser/main.cpp +++ b/trunk/KENJEraser/main.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,10 @@ #define WHITE 1.0f, 1.0f, 1.0f #define BLACK 0.0f, 0.0f, 0.0f +extern "C" void nninitSetupDaemons(void) +{ +} + namespace { const char* const NAND_TWL_ARCHIVE_NAME = "twln:"; const char* const NAND_TWL_KENJ_DIR_PATHNAME = "twln:/title/00030004/4b454e4a"; @@ -67,18 +72,18 @@ namespace { { SetSeed(seed); } - + void SetSeed(u64 seed) { m_x = seed; m_mul = (1566083941LL << 32) + 1812433253LL; m_add = 2531011; } - + u32 Get32(u32 max = 0xFFFFFFFFU) { m_x = m_mul * m_x + m_add; - + if (max != 0) { return (u32)(((m_x >> 32) * max) >> 32); @@ -88,44 +93,58 @@ namespace { }; nn::Result DeleteKENJ(void); - + const size_t ERASE_THREAD_STACK_SIZE = 0x1000; nn::os::Thread s_EraseThread; nn::os::StackBuffer s_EraseThreadStack; - + demo::RenderSystemDrawing s_RenderSystem; bool s_IsAppExist = false; bool s_IsFinish = false; bool s_IsSaveDataCleanSuccess = false; bool s_IsAppDeleteSuccess = false; - nn::Result s_result; - + bool s_IsCreditCardExist = false; + nn::Result s_KENJResult = nn::ResultSuccess(); + nn::Result s_CreditCardResult = nn::ResultSuccess(); + // グラフィックスに割り当てるメモリ const size_t s_GxHeapSize = 0x800000; - + void EraseThreadFunc(void) { // ほぼ日健康手帳を消去する - s_result = DeleteKENJ(); + s_KENJResult = DeleteKENJ(); + // CTR本体のクレジットカード情報を削除する + nn::nim::CreditCardInfo info; + nn::Result result = nn::nim::Shop::LoadCreditCardFromSystemSaveData(&info); + if(result.IsFailure()) + { + s_IsCreditCardExist = false; + } + else + { + s_IsCreditCardExist = true; + s_CreditCardResult = nn::nim::Shop::DeleteCreditCardOnSystemSaveData(); + } s_IsFinish = true; } - + nn::Result FillRandamDataToKENJSaveData(void) { nn::Result result; nn::fs::FileStream file; s64 file_size; - + // セーブデータオープン result = file.TryInitialize( NAND_TWL_KENJ_SAVE_DATA_PATHNAME, nn::fs::OPEN_MODE_WRITE ); if( result.IsFailure() ) { return result; } - + // セーブデータファイルのサイズを読む result = file.TryGetSize( &file_size ); if( result.IsFailure() ) @@ -133,24 +152,24 @@ namespace { file.Finalize(); return result; } - + nn::fnd::DateTime tm; nn::os::Tick tick; Random rand; u64 seed; s32 sizeResult = 0; - + // バッファの確保 void *buf = std::malloc( file_size ); NN_TPANIC_IF_NULL_( buf ); - + // 乱数のシードを設定 nn::fnd::DateTimeParameters param = tm.GetNow().GetParameters(); seed = tm.DateToDays( param.year, param.month, param.day ); seed = (u64)(seed * 86400 + param.hour * 3600 + param.minute * 60 + param.second); seed = (u64)(seed ^ tick.GetSystemCurrent()); rand.SetSeed( seed ); - + // バッファを乱数で埋める u8 *p = (u8 *)buf; for (s32 loopSizeFile = 0; loopSizeFile < file_size; loopSizeFile++) @@ -160,17 +179,17 @@ namespace { // 書き込み result = file.TryWrite(&sizeResult, buf, file_size); - + file.Finalize(); - + return result; } - - + + nn::Result DeleteKENJ(void) { nn::Result result; - + // TWl領域をマウントする result = nn::fs::MountSpecialArchive( NAND_TWL_ARCHIVE_NAME, nn::fs::CTR::ARCHIVE_TYPE_TWL_NAND ); if( result.IsFailure() ) @@ -178,7 +197,7 @@ namespace { NN_LOG("Twl NAND Mount Failed...\n"); return result; } - + // アプリが存在するかどうか確かめる nn::fs::Directory dir; if( dir.TryInitialize(NAND_TWL_KENJ_DIR_PATHNAME).IsFailure() ) @@ -189,10 +208,10 @@ namespace { { // アプリ存在フラグを上げる s_IsAppExist = true; - + // ここでfinalizeしておかないと、DeleteProgramでフェータルになる。 dir.Finalize(); - + // ほぼ日健康手帳のセーブデータを乱数で埋める result = FillRandamDataToKENJSaveData(); if( result.IsFailure() ) @@ -204,23 +223,23 @@ namespace { { s_IsSaveDataCleanSuccess = true; } - + // ほぼ日健康手帳を消す result = nn::am::DeleteUserProgram(nn::fs::MEDIA_TYPE_NAND, NAND_TWL_KENJ_PROGRAM_ID); if( result.IsSuccess() ) { s_IsAppDeleteSuccess = true; } - + UTIL_RETURN_IF_NOT_AM_NOT_FOUND(result); } - + nn::fs::Unmount( "twln:" ); - + return result; } - - + + void DrawResultText() { s_RenderSystem.SetFontSize(8.0f); @@ -230,7 +249,9 @@ namespace { s_RenderSystem.SetColor( WHITE ); s_RenderSystem.DrawText(10.0f, 60.0f, "Initialcode : KENJ"); - if( s_result.IsSuccess() ) + s_RenderSystem.DrawText(10.0f, 180.0f, "Credit Card :"); + + if( s_KENJResult.IsSuccess() ) { if( s_IsAppExist ) { @@ -248,6 +269,7 @@ namespace { s_RenderSystem.SetColor( GREEN ); s_RenderSystem.DrawText(130.0f, 135.0f, "cleanup succeeded"); s_RenderSystem.DrawText(130.0f, 150.0f, "cleanup succeeded"); + } else { @@ -261,7 +283,7 @@ namespace { s_RenderSystem.DrawText(10.0f, 120.0f, "Private Save :"); s_RenderSystem.DrawText(10.0f, 135.0f, "Public Save :"); s_RenderSystem.DrawText(10.0f, 150.0f, "application :"); - + s_RenderSystem.SetColor( YELLOW ); s_RenderSystem.DrawText(130.0f, 120.0f, "not existed"); @@ -301,7 +323,44 @@ namespace { s_RenderSystem.DrawText(130.0f, 150.0f, "cleanup failed"); } } + + if (s_IsCreditCardExist) + { + if (s_CreditCardResult.IsSuccess()) + { + s_RenderSystem.SetColor(GREEN); + s_RenderSystem.DrawText(130.0f, 180.0f, "cleanup succeeded"); + } + else + { + s_RenderSystem.SetColor(RED); + s_RenderSystem.DrawText(130.0f, 180.0f, "cleanup failed"); + } + } + else + { + s_RenderSystem.SetColor(YELLOW); + s_RenderSystem.DrawText(130.0f, 180.0f, "data not found"); + } + } + + void DrawKENJResultUpper(const f32 red, const f32 green, const f32 blue) + { + s_RenderSystem.SetColor(red, green, blue); + s_RenderSystem.FillRectangle(0, 0, NN_GX_DISPLAY0_HEIGHT, NN_GX_DISPLAY0_WIDTH / 2); + s_RenderSystem.SetColor(BLACK); + s_RenderSystem.DrawText(0, 0, "KENJ Result"); + } + + void DrawCreditCardResultUpper(const f32 red, const f32 green, const f32 blue) + { + s_RenderSystem.SetColor(red, green, blue); + s_RenderSystem.FillRectangle(0, NN_GX_DISPLAY0_WIDTH / 2, NN_GX_DISPLAY0_HEIGHT, NN_GX_DISPLAY0_WIDTH / 2); + s_RenderSystem.SetColor(BLACK); + s_RenderSystem.DrawText(0, NN_GX_DISPLAY0_WIDTH / 2, "Credit Card Result"); + } + } extern "C" void nnMain(void) @@ -315,16 +374,15 @@ extern "C" void nnMain(void) // appletの初期化 nn::applet::Enable( false ); - // hid の初期化 - nn::Result result = nn::hid::Initialize(); - NN_UTIL_PANIC_IF_FAILED(result); - // cfg の初期化 nn::cfg::CTR::Initialize(); // am の初期化 nn::am::InitializeForSystemMenu(); + // nimの初期化 + nn::nim::InitializeForShop(); + // ヒープの確保 common::HeapManager::GetHeap()->Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR); @@ -349,33 +407,51 @@ extern "C" void nnMain(void) s_RenderSystem.Clear(); // 上画面の色変更 - if( s_result.IsSuccess() ) + // ほぼ日健康手帳の結果 + if( s_KENJResult.IsSuccess() ) { if( !s_IsAppExist ) { - s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, YELLOW, 0); + DrawKENJResultUpper(YELLOW); } else { - s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, GREEN, 0); + DrawKENJResultUpper(GREEN); } } else { - s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, RED, 0); + DrawKENJResultUpper(RED); } - + // クレジットカードの結果 + if (!s_IsCreditCardExist) + { + DrawCreditCardResultUpper(YELLOW); + } + else + { + if (s_CreditCardResult.IsSuccess()) + { + + DrawCreditCardResultUpper(GREEN); + } + else + { + DrawCreditCardResultUpper(RED); + } + } + // バッファへ s_RenderSystem.SwapBuffers(); - + // 初期化 s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1); s_RenderSystem.Clear(); - + // 変更 DrawResultText(); common::DrawResFont(NN_GX_DISPLAY1); - + // バッファへ s_RenderSystem.SwapBuffers(); }