mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
追加忘れ
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@25 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
822ecb5fc0
commit
46a0dea8a9
220
trunk/ConsoleDataMigration/common/PlayHistoryManager.cpp
Normal file
220
trunk/ConsoleDataMigration/common/PlayHistoryManager.cpp
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: PlayHistoryManager.cpp
|
||||||
|
|
||||||
|
Copyright 2009 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 <nn/pl.h>
|
||||||
|
#include <nn/pl/CTR/pl_PlayHistoryApiSysmenu.h>
|
||||||
|
|
||||||
|
#include "PlayHistoryManager.h"
|
||||||
|
#include "HeapManager.h"
|
||||||
|
#include "SdMountManager.h"
|
||||||
|
#include "SdReaderWriter.h"
|
||||||
|
#include "CommonLogger.h"
|
||||||
|
#include "FileName.h"
|
||||||
|
#include "ProgramId.h"
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
PlayHistoryManager::PlayHistoryManager()
|
||||||
|
{
|
||||||
|
// TODO 自動生成されたコンストラクター・スタブ
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayHistoryManager::~PlayHistoryManager()
|
||||||
|
{
|
||||||
|
// TODO Auto-generated destructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayHistoryManager::Export()
|
||||||
|
{
|
||||||
|
nn::Result result;
|
||||||
|
SdMountManager::Mount();
|
||||||
|
SdReaderWriter sd;
|
||||||
|
|
||||||
|
size_t historyNum = nn::pl::CTR::GetPlayHistoryLength();
|
||||||
|
if ( historyNum == 0)
|
||||||
|
{
|
||||||
|
NN_LOG("No Play Event\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDに書き込む
|
||||||
|
result = sd.WriteBuf(common::PLAYHISTORY_COUNT_PATHNAME, reinterpret_cast<void*>(&historyNum),
|
||||||
|
sizeof(historyNum));
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
|
nn::pl::CTR::PlayEvent* pEvent;
|
||||||
|
pEvent = reinterpret_cast<nn::pl::CTR::PlayEvent*> (HeapManager::GetHeap()->Allocate(
|
||||||
|
sizeof(nn::pl::CTR::PlayEvent) * historyNum));
|
||||||
|
if ( pEvent == NULL )
|
||||||
|
{
|
||||||
|
NN_LOG("Failed to Allocate Heap\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 一番古いデータから素直に全部読み込む
|
||||||
|
nn::pl::CTR::GetPlayHistory(pEvent, 0, historyNum);
|
||||||
|
|
||||||
|
// SDに書き込む
|
||||||
|
result = sd.WriteBuf(common::PLAYHISTORY_PATHNAME, reinterpret_cast<void*>(pEvent),
|
||||||
|
sizeof(nn::pl::CTR::PlayEvent) * historyNum);
|
||||||
|
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
|
||||||
|
|
||||||
|
HeapManager::GetHeap()->Free(pEvent);
|
||||||
|
|
||||||
|
SdMountManager::Unmount();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayHistoryManager::GetPlayHistoryNums(size_t* nums)
|
||||||
|
{
|
||||||
|
nn::Result result;
|
||||||
|
|
||||||
|
size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize();
|
||||||
|
void* buf = common::HeapManager::GetHeap()->Allocate(bufSize);
|
||||||
|
if (buf != NULL)
|
||||||
|
{
|
||||||
|
common::SdReaderWriter sdReader;
|
||||||
|
|
||||||
|
size_t readSize;
|
||||||
|
result = sdReader.ReadBuf(common::PLAYHISTORY_COUNT_PATHNAME, buf, bufSize, &readSize);
|
||||||
|
if (result.IsSuccess())
|
||||||
|
{
|
||||||
|
*nums = *reinterpret_cast<size_t*> (buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HeapManager::GetHeap()->Free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayHistoryManager::Import()
|
||||||
|
{
|
||||||
|
nn::Result result;
|
||||||
|
SdMountManager::Mount();
|
||||||
|
SdReaderWriter sd;
|
||||||
|
|
||||||
|
SdMountManager::Mount();
|
||||||
|
|
||||||
|
// プレイ履歴の件数を取得する
|
||||||
|
size_t historyNum = 0;
|
||||||
|
|
||||||
|
GetPlayHistoryNums(&historyNum);
|
||||||
|
|
||||||
|
if(historyNum == 0)
|
||||||
|
{
|
||||||
|
NN_LOG("No PlayHistory found\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t bufSize = common::HeapManager::GetHeap()->GetAllocatableSize();
|
||||||
|
void* buf = common::HeapManager::GetHeap()->Allocate(bufSize);
|
||||||
|
if (buf != NULL)
|
||||||
|
{
|
||||||
|
common::SdReaderWriter sdReader;
|
||||||
|
|
||||||
|
size_t readSize;
|
||||||
|
result = sdReader.ReadBuf(common::PLAYHISTORY_PATHNAME, buf, bufSize, &readSize);
|
||||||
|
if(result.IsSuccess())
|
||||||
|
{
|
||||||
|
nn::pl::CTR::PlayEvent* pEvent = reinterpret_cast<nn::pl::CTR::PlayEvent*>(buf);
|
||||||
|
NN_LOG("history num = %d\n", historyNum);
|
||||||
|
|
||||||
|
// プレイ履歴を無効化する
|
||||||
|
nn::pl::CTR::ClearPlayHistory();
|
||||||
|
|
||||||
|
// データ移行ツールを無視して書き込む
|
||||||
|
for(u32 i = 0; i < historyNum; i++)
|
||||||
|
{
|
||||||
|
COMMON_LOGGER("Importing PlayHistory %d/%d", i, historyNum);
|
||||||
|
if ((pEvent[i].GetProgramId() & WITHOUT_VALIATION_MASK) != CONSOLE_BACKUP_PROGRAM_ID
|
||||||
|
&& (pEvent[i].GetProgramId() & WITHOUT_VALIATION_MASK) != CONSOLE_RESTORE_PROGRAM_ID)
|
||||||
|
{
|
||||||
|
NN_LOG("%05d 0x%16llx : %X : %d\n", i, pEvent[i].GetProgramId(), pEvent[i].GetEventType(),
|
||||||
|
pEvent[i].minutes);
|
||||||
|
|
||||||
|
nn::pl::CTR::NotifyPlayEvent(pEvent[i].GetEventType(), pEvent[i].GetProgramId(),
|
||||||
|
pEvent[i].GetEventTime());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NN_LOG("Skipped\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
COMMON_LOGGER_RESULT_WITH_LINE(result , __LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
common::HeapManager::GetHeap()->Free(buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NN_LOG("Failed Allocate Heap!! %s, %d", __FILE__, __LINE__);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SdMountManager::Unmount();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayHistoryManager::Dump()
|
||||||
|
{
|
||||||
|
nn::Result result;
|
||||||
|
|
||||||
|
s32 playEventLength = nn::pl::CTR::GetPlayHistoryLength();
|
||||||
|
if ( playEventLength == 0 )
|
||||||
|
{
|
||||||
|
NN_LOG("No Play Event\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nn::pl::CTR::PlayEvent* playEvent = reinterpret_cast<nn::pl::CTR::PlayEvent*> (HeapManager::GetHeap()->Allocate(
|
||||||
|
sizeof(nn::pl::CTR::PlayEvent) * playEventLength));
|
||||||
|
if ( playEvent == NULL )
|
||||||
|
{
|
||||||
|
NN_LOG("Failed to Allocate Heap\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 一番古いデータから素直に全部読み込む
|
||||||
|
(void)nn::pl::CTR::GetPlayHistory(playEvent, 0, playEventLength);
|
||||||
|
|
||||||
|
// 取得したデータを順番にすべて表示していく
|
||||||
|
s32 restPlayEventLength = playEventLength;
|
||||||
|
s32 displayCount = 0;
|
||||||
|
|
||||||
|
nn::pl::CTR::PlayEvent* pEvent;
|
||||||
|
while ( restPlayEventLength > 0 )
|
||||||
|
{
|
||||||
|
// 一気に表示できるところまで表示する
|
||||||
|
int line;
|
||||||
|
for ( line = 0; line < 24; line++ )
|
||||||
|
{
|
||||||
|
pEvent = &playEvent[displayCount];
|
||||||
|
NN_LOG("0x%16llx : %X : %d\n", pEvent->GetProgramId(), pEvent->eventType, pEvent->minutes);
|
||||||
|
restPlayEventLength--;
|
||||||
|
displayCount++;
|
||||||
|
if(restPlayEventLength <= 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HeapManager::GetHeap()->Free(playEvent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
45
trunk/ConsoleDataMigration/common/PlayHistoryManager.h
Normal file
45
trunk/ConsoleDataMigration/common/PlayHistoryManager.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: PlayHistoryManager.h
|
||||||
|
|
||||||
|
Copyright 2009 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$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef PLAYHISTORYMANAGER_H_
|
||||||
|
#define PLAYHISTORYMANAGER_H_
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
//! @brief データ移行ツールの履歴を消しながらプレイ履歴を移行するためのクラスです。
|
||||||
|
class PlayHistoryManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PlayHistoryManager();
|
||||||
|
virtual ~PlayHistoryManager();
|
||||||
|
|
||||||
|
//! @brief SDカードに出力します。
|
||||||
|
void Export();
|
||||||
|
|
||||||
|
//! @brief SDカードからプレイ履歴に書き込みます
|
||||||
|
void Import();
|
||||||
|
|
||||||
|
//! @brief デバッグ用。プレイ履歴をデバッグ出力します。
|
||||||
|
void Dump();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void GetPlayHistoryNums(size_t* nums);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* PLAYHISTORYMANAGER_H_ */
|
||||||
28
trunk/ConsoleDataMigration/common/ProgramId.h
Normal file
28
trunk/ConsoleDataMigration/common/ProgramId.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: Horizon
|
||||||
|
File: ProgramId.h
|
||||||
|
|
||||||
|
Copyright 2009 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$
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef PROGRAMID_H_
|
||||||
|
#define PROGRAMID_H_
|
||||||
|
|
||||||
|
namespace common
|
||||||
|
{
|
||||||
|
|
||||||
|
const u64 CONSOLE_BACKUP_PROGRAM_ID = 0x000400000f802200L;
|
||||||
|
const u64 CONSOLE_RESTORE_PROGRAM_ID = 0x000400000f802300L;
|
||||||
|
const u64 WITHOUT_VALIATION_MASK = 0xffffffffffffff00L;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* PROGRAMID_H_ */
|
||||||
Loading…
Reference in New Issue
Block a user