diff --git a/trunk/FlickerCalCollector/ConfigViewer.autogen.desc b/trunk/FlickerCalCollector/ConfigViewer.autogen.desc new file mode 100644 index 0000000..50b85a0 --- /dev/null +++ b/trunk/FlickerCalCollector/ConfigViewer.autogen.desc @@ -0,0 +1,209 @@ +AccessControlDescriptor: + AffinityMask: 1 + AutoGen: true + CoreVersion: 2 + DescVersion: 2 + Descriptor: | + AAj0DwAABAACAAAAAAAFGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAABBUFQ6VQAAAGZz + OlVTRVIAZ3NwOjpHcHVoaWQ6VVNFUmlyOnUAAAAAY2ZnOm5vcgBhYzppAAAA + AGNmZzppAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAD+//vw/7//8ec/APIA8JH/APaR/1D/gf9Y/4H/cP+B/3j/gf8B + AQD/AAIA/v////////////////////////////////////////////////// + ////////////////////////////////////////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAI= + DisableDebug: false + EnableInterruptNumbers: [] + EnableSystemCalls: + ArbitrateAddress: 34 + Break: 60 + CancelTimer: 28 + ClearEvent: 25 + ClearTimer: 29 + CloseHandle: 35 + ConnectToPort: 45 + ControlMemory: 1 + CreateAddressArbiter: 33 + CreateEvent: 23 + CreateMemoryBlock: 30 + CreateMutex: 19 + CreateSemaphore: 21 + CreateThread: 8 + CreateTimer: 26 + DuplicateHandle: 39 + ExitProcess: 3 + ExitThread: 9 + GetCurrentProcessorNumber: 17 + GetHandleInfo: 41 + GetProcessAffinityMask: 4 + GetProcessId: 53 + GetProcessIdOfThread: 54 + GetProcessIdealProcessor: 6 + GetProcessInfo: 43 + GetResourceLimit: 56 + GetResourceLimitCurrentValues: 58 + GetResourceLimitLimitValues: 57 + GetSystemInfo: 42 + GetSystemTick: 40 + GetThreadAffinityMask: 13 + GetThreadContext: 59 + GetThreadId: 55 + GetThreadIdealProcessor: 15 + GetThreadInfo: 44 + GetThreadPriority: 11 + MapMemoryBlock: 31 + OutputDebugString: 61 + QueryMemory: 2 + ReleaseMutex: 20 + ReleaseSemaphore: 22 + SendSyncRequest1: 46 + SendSyncRequest2: 47 + SendSyncRequest3: 48 + SendSyncRequest4: 49 + SendSyncRequest: 50 + SetProcessAffinityMask: 5 + SetProcessIdealProcessor: 7 + SetThreadAffinityMask: 14 + SetThreadIdealProcessor: 16 + SetThreadPriority: 12 + SetTimer: 27 + SignalEvent: 24 + SleepThread: 10 + UnmapMemoryBlock: 32 + WaitSynchronization1: 36 + WaitSynchronizationN: 37 + FileSystemAccess: + - Debug + - DirectSdmc + HandleTableSize: 512 + IORegisterMapping: + - 1ff50000-1ff57fff + - 1ff70000-1ff77fff + IdealProcessor: 1 + MemoryMapping: + - 1f000000-1f5fffff:r + MemoryType: Application + Priority: 24 + ProgramId: 0x000400000ff40800L + ServiceAccessControl: + - APT:U + - fs:USER + - gsp::Gpu + - hid:USER + - ir:u + - cfg:nor + - ac:i + - cfg:i + Signature: | + 4VhUoq3Mqc0x5Fi8iQykB4z2aiW9sczKjqZlfvelO5wX2zDWcpiJXtQiyYqn + ILe2U2a+RtE5LM2mxDN9vrPZQnjvtX2TyDqMAPaNsYgMC3ew20S9rh8mfutg + wnuI6WSux6FV5iHBD+Do9FmtZdJzYu88WFvHMl7TahQCVf21doBwdl6F3DEC + Qlk4tviw20gLW9vwxCR8NAF59Ghk68qTtFdgGRJVYJNoeoSbqFIOBJFmkGrJ + FaxjJW/mUCHLBGdTQfyPc5aLhzN0R1lt9dk3doBHaFIAWM7GAkcmy8qdX7RS + 0Z/r5c5GK8Jzx9XMoPagj4zKfGpyfZXhYd+EAWxOqw== + StorageId: + - 0 +CommonHeaderKey: + D: | + D3Cu9+6bqGoorSogNmM3vPpz7qPJfFKv3JFEb5cxfaybaqhJSx4HWR5H4bbL + rFcz1v/6jSP1Xkp3td4gqrYiVL+Kkl+L+83/OCpL0OpkfVNsbCAZINyoEHrs + opkvMqtUJIpkEYs4LWkHB7VpiV7Haer8W3jsrqBR+/eYKHQyqVx72XuVCLhg + I1b+o0NiK67AVHEsfjpXDCeUZbIMlCut3hz4zOAlwq697Qu4Y8XUGGoTz8I+ + PrREf4mlrqS29ENvdsMRI8OiTsEPpi751wYyDaJB2z/BL6EbKYdXR1hzzapw + aTwut6HQ40Mvs/yqt/AxQvUqFbEBzn8luxuc4bGcIQ== + DP: | + kzb6QB4TiVPBukUEXzQ1TxflVqGMbtKikKmjw2baidS0VYk+6UU7zYaXkhdp + OTJ5wbj1V89GVGXXnjDivMMEW8NHrhK9OV16xoZ6f+nHMl7sKpbrUzzHLmNc + WCqcF/zuxRNzPQy5pGBZRfmOpy+YLPvYTzHm6Y695KCsAwZyDEU= + DQ: | + GavIS8lKa9CiZ6H+enfoTLzBQpuclj3ANGW84tVBWCD1C7cmKPjIdzxDvPYf + U41QihWkEzYZP5WjiIImyyZnGv9pqq4U5xLiPCATb38+Dx+s6mDLC2uCadO1 + YDIlUcdalVAawaMb3FdpTrD4B4Cb8qo5Yy8siryzaV5fkiPPDZk= + Exponent: | + AQAB + InverseQ: | + wdFYdkiLWVSzz1vexcaOP9TmhO4glb6mK6NbBqzgCUdW2dIx885kCcA+mXeO + lSDrd2URD4oES/kJxnGxLNWJixe8fBT3ni/e2LKJKfGTGHzfHviczDME8wEN + MWiBee9ox1dPRp3rpUuy4ct4Zus5NnUSJ1AIz/BArfBIQWKbcno= + Modulus: | + zo2Hh+UDw3p95oqMmCNvk2xE006L8jarQTi/7WCtUyTK7BM6O9l1r+zSfDHR + 3Y6dZ4I/6i8OfOHZPm/a1n+pnYs5vOj5VGRHmT2A+lCmyPho59U3SMffqTPy + s7/sjaPdFiHJ9t7NmzWwgWhrX7JI4XONKoz+W0pkPb56YpKVOAhW580VvCdI + eRgGdL/iitxgsMQ1MQuOh9TkBubN0vBa57Q4/YYrqWiV8mgRbxSbu7sPr7Rp + xOU4FO5AJhB0pSYvQ8vbHHCIjYj8ddvaqHEfwjDkW+G5qpz4z7/PSA0PLcjz + lzgl4GzsIYUv5WXzSGDQbqFt4BZZQG8y83e/7AlLxQ== + P: | + 5wpTk5d8j2xATucrbE9B1IrxP1BxlivKvBHz1NVZr6AoeXco3MT27O5CWPh5 + SbEeooiwtTG/ybwQFh8izNo5oXRbpU8oYbX7c4XptlONVm72u+RA0u+ajHzn + 0ysBpxpfHpxKbSIoIu5ZL/BVolpxuQWttjDr3tta6pPhvQi+Dz0= + Q: | + 5N35gescsxufwKHNPbBYwc3aBLJqj1otjnfGEh0wj0gGSr3c1KzsHY6koGZl + Zk3Ne4f/ePQ11Cax5GhP3VsTp8VgpKUOj/W8wLvDHFYkXsjxVyhFzA9jDfga + C8EWvPwlomnwzqXjxb82gUfelY/GKjbREeKHQgl6Rg+Qk8bJ9yk= +DefaultSpec: + AccessControlInfo: + AffinityMask: 1 + FirmwareVersion: 2 + HandleTableSize: 512 + IORegisterMapping: + - 1ff50000-1ff57fff + - 1ff70000-1ff77fff + IdealProcessor: 0 + MemoryMapping: + - 1f000000-1f5fffff:r + Priority: 16 + BasicInfo: + CompanyCode: "00" + Logo: Nintendo + Title: default + ExeFs: + ReadOnly: + - RO + ReadWrite: + - RW + Text: + - STUP_ENTRY + Media: + MediaType: Card + PlainRegion: + - .module_id + Rom: + DefaultReject: + - .* + File: + - "*" + SystemControlInfo: + Dependency: + ac: 0x0004013000002402L + am: 0x0004013000001502L + boss: 0x0004013000003402L + camera: 0x0004013000001602L + cecd: 0x0004013000002602L + cfg: 0x0004013000001702L + codec: 0x0004013000001802L + csnd: 0x0004013000002702L + dlp: 0x0004013000002802L + dsp: 0x0004013000001a02L + friends: 0x0004013000003202L + gpio: 0x0004013000001b02L + gsp: 0x0004013000001c02L + hid: 0x0004013000001d02L + http: 0x0004013000002902L + i2c: 0x0004013000001e02L + mcu: 0x0004013000001f02L + mic: 0x0004013000002002L + ndm: 0x0004013000002b02L + news: 0x0004013000003502L + nim: 0x0004013000002c02L + nwm: 0x0004013000002d02L + pdn: 0x0004013000002102L + ps: 0x0004013000003102L + ptm: 0x0004013000002202L + socket: 0x0004013000002e02L + spi: 0x0004013000002302L + ssl: 0x0004013000002f02L + StackSize: 16384 diff --git a/trunk/FlickerCalCollector/ConfigViewer.rsf b/trunk/FlickerCalCollector/ConfigViewer.rsf new file mode 100644 index 0000000..84a033d --- /dev/null +++ b/trunk/FlickerCalCollector/ConfigViewer.rsf @@ -0,0 +1,39 @@ +BasicInfo: + Title : ConfigViewer + ProductCode: ConfigViewer + BackupMemoryType: None + +TitleInfo: + Use: Evaluation + Category: Application + UniqueId: 0xff408 + Version: 0 + +SystemControlInfo: + AppType : Application + StackSize : 0x4000 + Dependency : + - gpio + - pdn + - spi + - i2c + - mcu + - ptm + - cfg + - hid + - gsp + +AccessControlInfo: + Priority : 16 + DisableDebug : true + FileSystemAccess: + - DirectSdmc + +Option: + FreeProductCode: true + +Rom: + # ROMに含めるファイルのルートを記述します。 + # このパス以下のファイルは、ROMに含まれファイルシステムから読み込めます。 + HostRoot : romfiles + diff --git a/trunk/FlickerCalCollector/ConsoleBackup.bsf b/trunk/FlickerCalCollector/ConsoleBackup.bsf new file mode 100644 index 0000000..104a94d Binary files /dev/null and b/trunk/FlickerCalCollector/ConsoleBackup.bsf differ diff --git a/trunk/FlickerCalCollector/OMakefile b/trunk/FlickerCalCollector/OMakefile new file mode 100644 index 0000000..d09c30d --- /dev/null +++ b/trunk/FlickerCalCollector/OMakefile @@ -0,0 +1,45 @@ +#!/usr/bin/env omake +#---------------------------------------------------------------------------- +# Project: CalViewer +# File: OMakefile +# +# Copyright (C)2009 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. +# +# $Revision$ +#---------------------------------------------------------------------------- + +SUPPORTED_TARGETS = CTR-T*.Process.MPCore.* + +CTR_APPTYPE = CARD + +SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include) +INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \ + ../common + + +SOURCES[] = + main.cpp + +TARGET_PROGRAM = FlickerCalCollector + +INCLUDES += include + +LIBS += lib_demo libnn_driversCal libnn_driversEeprom libnn_i2c + +# RSF +ROM_SPEC_FILE = ConfigViewer.rsf + +# DESC +DESCRIPTOR = ConfigViewer.autogen.desc + +CTR_BANNER_SPEC = ConsoleBackup.bsf + +include $(ROOT_OMAKE)/modulerules + +build: $(DEFAULT_TARGETS) diff --git a/trunk/FlickerCalCollector/OMakeroot b/trunk/FlickerCalCollector/OMakeroot new file mode 100644 index 0000000..7ee1cb5 --- /dev/null +++ b/trunk/FlickerCalCollector/OMakeroot @@ -0,0 +1,73 @@ +#!/usr/bin/env omake +#---------------------------------------------------------------------------- +# Project: Horizon +# File: OMakeroot +# +# Copyright (C)2009 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. +# +# $Rev:$ +#---------------------------------------------------------------------------- + +# ディレクトリレイアウトについての説明 +# +# a) ソースコードがルートディレクトリ直下に配置される場合 +# 例: +# /OMakeroot +# /foo/bar/OMakefile +# +# 結果: +# OMakefile と同じディレクトリ以下に objects や images が生成されます。 +# +# /foo/bar/objects/... +# /foo/bar/images/.. +# +# +# b) ソースコードが sources 以下に配置される場合 +# 例: +# /OMakeroot +# /sources/foo/bar/OMakefile +# +# 結果: +# ルートディレクトリ以下に objects や images が生成されます。 +# +# /objects/foo/bar/... +# /images/foo/bar/... +# +# + +# ルート環境変数の取得 +public.HORIZON_ROOT = +if $(defined-env HORIZON_ROOT) + HORIZON_ROOT = $(absname $(getenv HORIZON_ROOT)) + export + +if $(defined-env CTRSDK_ROOT) + CTRSDK_ROOT = $(absname $(getenv CTRSDK_ROOT)) + if $(and $(defined-env HORIZON_ROOT), $(not $(equal $(HORIZON_ROOT), $(CTRSDK_ROOT)))) + eprintln(HORIZON_ROOT と CTRSDK_ROOT が一致しません。同じパスを設定するか、どちらか一方だけを定義して下さい。) + exit(1) + HORIZON_ROOT = $(CTRSDK_ROOT) + export + +if $(not $(HORIZON_ROOT)) + eprintln($"$$CTRSDK_ROOT が定義されていません") + exit(1) + +include $(HORIZON_ROOT)/build/omake/commondefs + +DefineCommandVars() + +.PHONY: all build clean clobber +.PHONY: run run-scripts run-emumem + +# +# OMakefile の読み込み +# +.SUBDIRS: . + diff --git a/trunk/FlickerCalCollector/Readme.txt b/trunk/FlickerCalCollector/Readme.txt new file mode 100644 index 0000000..64259f6 --- /dev/null +++ b/trunk/FlickerCalCollector/Readme.txt @@ -0,0 +1,4 @@ +【ビルド環境】 + +・SDK +Horizon 0_14 branch r33437 diff --git a/trunk/FlickerCalCollector/banner/model.cbmd b/trunk/FlickerCalCollector/banner/model.cbmd new file mode 100644 index 0000000..f1c7b62 Binary files /dev/null and b/trunk/FlickerCalCollector/banner/model.cbmd differ diff --git a/trunk/FlickerCalCollector/banner/sound.cbsd b/trunk/FlickerCalCollector/banner/sound.cbsd new file mode 100644 index 0000000..f1c7b62 Binary files /dev/null and b/trunk/FlickerCalCollector/banner/sound.cbsd differ diff --git a/trunk/FlickerCalCollector/banner/unknown24x24.ctpk b/trunk/FlickerCalCollector/banner/unknown24x24.ctpk new file mode 100644 index 0000000..794b136 --- /dev/null +++ b/trunk/FlickerCalCollector/banner/unknown24x24.ctpk @@ -0,0 +1 @@ +スススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススニススススススススススススススススススススススススススススススススススススススニ8ニ8ニ゙銷スス8ニススススス釡゙ニ鍄踟ススススススススススススススススススススススススススススススススススススススススススニススススススススススススススススススススススススススススススススススススススススススyホスyホスススススYホスススススススススススススススススススススススススススススススススス鍄゙yホYホスロ゙ロ゙ススニススロ゙yボスyホ轌ホ釡゙ススススYホ轌ホ銷スススススyホニロ゙鍄躡ホyホスススyホスコヨスススススyホスyホスススススYホスススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススyホ躡ホ銷スススススニスス轌ホ8ニススススニススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススス \ No newline at end of file diff --git a/trunk/FlickerCalCollector/banner/unknown48x48.ctpk b/trunk/FlickerCalCollector/banner/unknown48x48.ctpk new file mode 100644 index 0000000..8c7da16 --- /dev/null +++ b/trunk/FlickerCalCollector/banner/unknown48x48.ctpk @@ -0,0 +1 @@ +スススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススYホススススススススススススススススススススススススススス8ニスス8ニ8ニスススコヨ8ニコヨ釡゙銷スススススススススス8ニ8ニススニススススススススススススススススス鍄逧ヨニ銷スス墮ス逧ヨ銷スススススススススススススススススススススススススススススススススススススススススス8ニススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススロ゙スロ゙ススススス銷ズスススススススススススススススススススススコヨスススススススススス鍄8ニ゙ロ゙スス墮スYホススススス躡ホyホ轌ホニススススススススニススススススススススススロ゙ロ゙釡゙踟スス躡ホ銷スススススロ゙スロ゙銷ススYボ墮釡゙コヨス墮スロ゙ススススス踟ス踟スススススススススススススススススススススロ゙スyホススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススYホス墮銷スロ゙スロ゙銷ススススススススススススススススス8ニススコヨロ゙スススススYホニyホ逧ヨ郤ヨスYホス觝ホススススススススススススススロ゙墮ススススススyホス鍄踟ススニスススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススス踟ス銷ズスYホ鍄銷ススススススススススススススススススススス8ニスススススススススス逧ヨスロ゙ス釡゙墮ススススススススススススススススススス8ニススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススススス \ No newline at end of file diff --git a/trunk/FlickerCalCollector/main.cpp b/trunk/FlickerCalCollector/main.cpp new file mode 100644 index 0000000..b7a9de9 --- /dev/null +++ b/trunk/FlickerCalCollector/main.cpp @@ -0,0 +1,196 @@ +/*---------------------------------------------------------------------------* + Project: Horizon + File: main.cpp + + Copyright 2009-2011 Nintendo. 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. + + $Rev$ + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "demo.h" + +#define HANDLE_ERROR(result) \ + if(result.IsFailure()) \ + { \ + DrawError(result, __LINE__); \ + } \ + +namespace +{ + +nn::drivers::cal::CTR::LcdFlickerInfo s_LcdFlickerInfo; +bool s_LcdFlickerInfoIsValid = false; +u8 s_SerialNo[nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN]; +bool s_CanReadSerialNumber = false; +u32 s_CalVersion = 0; + +void* heapForGx; +nn::fnd::ExpHeap s_AppHeap; +demo::RenderSystemDrawing s_RenderSystem; + +const wchar_t LOG_FILE_PATH[] = L"sdmc:/FlickerCalCollector.csv"; + +} + +void DrawError(nn::Result result, s32 line) +{ + s_RenderSystem.SetColor(1, 0, 0); + for(;;) + { + s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0); + s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 0, 0, 1); + s_RenderSystem.Clear(); + s_RenderSystem.DrawText(0, 0, "line %d: Error = %X", line, result.GetPrintableBits()); + s_RenderSystem.SwapBuffers(); + + + s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1); + s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 1, 0, 0, 1); + s_RenderSystem.Clear(); + s_RenderSystem.SwapBuffers(); + + nngxWaitVSync(NN_GX_DISPLAY_BOTH); + } +} + +void Finalize() +{ + s_RenderSystem.Finalize(); + s_AppHeap.Free(heapForGx); + s_AppHeap.Finalize(); + + nn::applet::DisableSleep(); + nn::cfg::init::Finalize(); + nn::fs::Unmount("sdmc:"); + nn::fs::Finalize(); +} + +extern "C" void nnMain() +{ + nn::applet::Enable(); + + NN_LOG("FlickerCalCollector start\n"); + + const u32 s_GxHeapSize = 0x800000; + + // 繝偵シ繝励ョ遒コ菫 + s_AppHeap.Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR); + + // RenderSystem 縺ョ貅門y + heapForGx = s_AppHeap.Allocate(s_GxHeapSize); + s_RenderSystem.Initialize(reinterpret_cast(heapForGx), s_GxHeapSize); + s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 0, 0, 1); + s_RenderSystem.SetColor(1, 1, 1); + + nn::Result result; + + // fs 縺ョ蛻晄悄蛹 + nn::fs::Initialize(); + + // cfg 縺ョ蛻晄悄蛹 + nn::cfg::CTR::init::Initialize(); + + // SD繧ォ繝シ繝峨槭え繝ウ繝 + result = nn::fs::MountSdmc(); + HANDLE_ERROR(result); + nn::fs::FileOutputStream file; + + result = file.TryInitialize(LOG_FILE_PATH, true); + HANDLE_ERROR(result); + + s64 fileSize; + fileSize = file.GetSize(); + NN_LOG("fileSize = %lld", fileSize); + result = file.TrySetPosition(fileSize); + HANDLE_ERROR(result); + + // 繧キ繝ェ繧「繝ォ繝翫Φ繝舌シ縺ョ蜿門セ + std::memset(s_SerialNo, '\0', + nn::cfg::CTR::CFG_SECURE_INFO_SERIAL_NO_LEN); + result = nn::cfg::CTR::init::GetSerialNo(s_SerialNo); + HANDLE_ERROR(result); + if(result.IsSuccess()) + { + s_CanReadSerialNumber = true; + } + + // cal 縺ョ諠蝣ア蜿門セ + { + nn::drivers::cal::CTR::Calibration calibration; + nn::drivers::cal::CTR::Type currentCalType; + + // Cal 縺ョ蛻晄悄蛹 + calibration.Initialize(); + + //----- 繝舌シ繧ク繝ァ繝ウ繧貞叙蠕 + s_CalVersion = calibration.GetVersion(); + + //----- LCD FLICKER + currentCalType = nn::drivers::cal::CTR::CAL_DATA_LCD_FLICKER; + s_LcdFlickerInfoIsValid = calibration.Get(&s_LcdFlickerInfo, currentCalType); + } + + if(s_LcdFlickerInfoIsValid) + { + s32 writeSize; + char writeData[256]; + nn::nstd::TSNPrintf(writeData, sizeof(writeData), "%s, %d, %d\n", s_SerialNo, s_LcdFlickerInfo.vcomTop, s_LcdFlickerInfo.vcomBottom); + NN_LOG("%s", writeData); + // SD譖ク縺崎セシ縺ソ + result = file.TryWrite(&writeSize, writeData, std::strlen(writeData), true); + HANDLE_ERROR(result); + result = file.TryFlush(); + HANDLE_ERROR(result); + + file.Finalize(); + } + + u32 count = 0; + for (;;) + { + s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0); + s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 0, 0, 1); + s_RenderSystem.Clear(); + + s_RenderSystem.DrawText(0, 0, "count = %d", count++); + if(s_CanReadSerialNumber) + { + s_RenderSystem.DrawText(0, 10, "serial = %s", s_SerialNo); + } + s_RenderSystem.DrawText(0, 20, "calVersion = %d\n", s_CalVersion); + s_RenderSystem.DrawText(0, 30, "Flicker = %d, %d", s_LcdFlickerInfo.vcomTop, s_LcdFlickerInfo.vcomBottom); + s_RenderSystem.SwapBuffers(); + + s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1); + s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0, 1, 0, 1); + s_RenderSystem.Clear(); + + + s_RenderSystem.SwapBuffers(); + nngxWaitVSync(NN_GX_DISPLAY_BOTH); + + //POWER 繝懊ち繝ウ蟇セ蠢 + if ( nn::applet::IsExpectedToCloseApplication()) + { + nn::applet::PrepareToCloseApplication(); + nn::applet::CloseApplication(); + } + } + +}