TwlIPL/build/tests/WirelessChecker/src/test_nwm.cpp
sato_masaki 662dadd251 本体デバッグ用無線チェックプログラムを追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2071 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-08-01 06:11:58 +00:00

356 lines
7.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: TwlSDK - Wireless Checker
File: test_nwm.cpp
Copyright 2007 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.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include "util/util.h"
#include "util/canvas.h"
#include "test_nwm.h"
#pragma exceptions on
namespace test_nwm
{
OSMessageQueue m_AsyncMsgq;
OSMessage m_AsyncMsg[1];
void m_InitMessage(void);
void m_LoadDeviceCallback(void *arg)
{
NWMCallback *cb = (NWMCallback*)arg;
// TODO: get FW ver and RegDomain?
if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK))
{
}
}
void m_OpenCallback(void *arg)
{
NWMCallback *cb = (NWMCallback*)arg;
if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK))
{
}
}
void m_UnloadDeviceCallback(void *arg)
{
NWMCallback *cb = (NWMCallback*)arg;
if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK))
{
}
}
void m_CloseCallback(void *arg)
{
NWMCallback *cb = (NWMCallback*)arg;
if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK))
{
}
}
void m_ScanCallback(void *arg)
{
NWMStartScanCallback *cb = (NWMStartScanCallback*)arg;
OS_TPrintf("Number of BSS: %d\n", cb->bssDescCount);
if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK))
{
}
}
void m_InitMessage(void)
{
OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0]));
}
BOOL m_WaitCallback(void)
{
OSMessage msg;
(void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK);
return (BOOL)msg;
}
}
CTestNwm::CTestNwm() : m_pNwmBuffer(0), m_pScanBuffer(0)
{
test_nwm::m_InitMessage();
}
CTestNwm::~CTestNwm()
{
}
BOOL
CTestNwm::Init(void)
{
LogClear(m_pc);
try
{
if (m_state != TEST_STATE_NONE)
{
throw L"<EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>g<EFBFBD><67><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
if (m_pNwmBuffer)
{
delete [] m_pNwmBuffer;
m_pNwmBuffer = 0;
throw L"NWM<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40><><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
m_pNwmBuffer = new u8 [NWM_SYSTEM_BUF_SIZE + 0x20];
if (NWM_RETCODE_SUCCESS != NWM_Init((void*)MATH_ROUNDUP((u32)m_pNwmBuffer, 32), NWM_SYSTEM_BUF_SIZE, m_DmaNo))
{
throw L"NWM_Init <20><><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_Init <20><><EFBFBD><EFBFBD>.\n");
}
catch (const wchar_t* string)
{
delete [] m_pNwmBuffer;
m_pNwmBuffer = 0;
LogPrintf(m_pc, L"%s", string);
return FALSE;
}
m_state = TEST_STATE_INITIALIZED;
return TRUE;
}
BOOL
CTestNwm::Enable(void)
{
try {
if (m_state != TEST_STATE_INITIALIZED)
{
throw L"<EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>g<EFBFBD><67><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
if (NWM_RETCODE_OPERATING != NWM_LoadDevice(test_nwm::m_LoadDeviceCallback))
{
throw L"NWM_LoadDevice <20><><EFBFBD>s.\n";
}
if (test_nwm::m_WaitCallback() == FALSE)
{
throw L"NWM_LoadDevice <20>񓯊<EFBFBD><F193AF8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_LoadDevice <20><><EFBFBD><EFBFBD>.\n");
if (NWM_RETCODE_OPERATING != NWM_Open(test_nwm::m_OpenCallback))
{
throw L"NWM_Open <20><><EFBFBD>s.\n";
}
if (test_nwm::m_WaitCallback() == FALSE)
{
throw L"NWM_Open <20>񓯊<EFBFBD><F193AF8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_Open <20><><EFBFBD><EFBFBD>.\n");
}
catch (const wchar_t* string)
{
LogPrintf(m_pc, L"%s", string);
return FALSE;
}
m_state = TEST_STATE_ENABLED;
return TRUE;
}
BOOL
CTestNwm::ScanTest(void)
{
try
{
if (m_state != TEST_STATE_ENABLED)
{
throw L"<EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>g<EFBFBD><67><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
if (m_pScanBuffer)
{
throw L"Scan<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40><><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
m_pScanBuffer = new u8 [NWM_SIZE_SCANBUF_MAX + 0x20];
NWMScanParam param;
MI_CpuClear8(m_pScanBuffer, NWM_SIZE_SCANBUF_MAX + 0x20);
DC_StoreRange(m_pScanBuffer, NWM_SIZE_SCANBUF_MAX + 0x20);
param.scanBuf = (NWMBssDesc*)MATH_ROUNDUP((u32)m_pScanBuffer, 32);
param.scanBufSize = NWM_SIZE_SCANBUF_MAX;
param.channelList = (u16)(NWM_GetAllowedChannel() >> 1);
param.channelDwellTime = NWM_GetDispersionScanPeriod(NWM_SCANTYPE_ACTIVE);
param.scanType = NWM_SCANTYPE_ACTIVE;
param.ssidLength = 0;
MI_CpuFill8(param.ssid, 0xFF, sizeof(param.ssid));
if (NWM_RETCODE_OPERATING != NWM_StartScan(test_nwm::m_ScanCallback, &param))
{
throw L"NWM_StartScan <20><><EFBFBD>s.\n";
}
if (test_nwm::m_WaitCallback() == FALSE)
{
throw L"NWM_StartScan <20>񓯊<EFBFBD><F193AF8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_StartScan <20><><EFBFBD><EFBFBD>.\n");
}
catch (const wchar_t* string)
{
LogPrintf(m_pc, L"%s", string);
return FALSE;
}
delete [] m_pScanBuffer;
m_pScanBuffer = 0;
return TRUE;
}
BOOL
CTestNwm::Disable(void)
{
try {
if (m_state != TEST_STATE_ENABLED)
{
throw L"<EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>g<EFBFBD><67><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
if (NWM_RETCODE_OPERATING != NWM_Close(test_nwm::m_CloseCallback))
{
throw L"NWM_Close <20><><EFBFBD>s.\n";
}
if (test_nwm::m_WaitCallback() == FALSE)
{
throw L"NWM_Close <20>񓯊<EFBFBD><F193AF8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_Close <20><><EFBFBD><EFBFBD>.\n");
if (NWM_RETCODE_OPERATING != NWM_UnloadDevice(test_nwm::m_UnloadDeviceCallback))
{
throw L"NWM_UnloadDevice <20><><EFBFBD>s.\n";
}
if (test_nwm::m_WaitCallback() == FALSE)
{
throw L"NWM_UnloadDevice <20>񓯊<EFBFBD><F193AF8A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_UnloadDevice <20><><EFBFBD><EFBFBD>.\n");
}
catch (const wchar_t* string)
{
LogPrintf(m_pc, L"%s", string);
return FALSE;
}
m_state = TEST_STATE_INITIALIZED;
return TRUE;
}
BOOL
CTestNwm::End(void)
{
try
{
if (m_state != TEST_STATE_INITIALIZED)
{
throw L"<EFBFBD>X<EFBFBD>e<EFBFBD>[<5B>g<EFBFBD><67><EFBFBD>s<EFBFBD><73><EFBFBD>ł<EFBFBD>.\n";
}
if (NWM_RETCODE_SUCCESS != NWM_End())
{
throw L"NWM_End <20><><EFBFBD>s.\n";
}
LogPrintf(m_pc, L"NWM_End <20><><EFBFBD><EFBFBD>.\n");
}
catch (const wchar_t* string)
{
LogPrintf(m_pc, L"%s", string);
return FALSE;
}
m_state = TEST_STATE_NONE;
delete [] m_pNwmBuffer;
m_pNwmBuffer = 0;
return TRUE;
}
BOOL
CTestNwm::WirelessTest(void)
{
try
{
if (FALSE == Init())
{
throw L"Init() <20><><EFBFBD>s.\n";
}
if (FALSE == Enable())
{
End();
throw L"Enable() <20><><EFBFBD>s.\n";
}
if (FALSE == ScanTest())
{
Disable();
End();
throw L"ScanTest() <20><><EFBFBD>s.\n";
}
if (FALSE == Disable())
{
throw L"Disable() <20><><EFBFBD>s.\n";
}
if (FALSE == End())
{
throw L"End() <20><><EFBFBD>s.\n";
}
}
catch (const wchar_t* string)
{
LogPrintf(m_pc, L"%s", string);
return FALSE;
}
LogPrintf(m_pc, L"<EFBFBD>e<EFBFBD>X<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD>.\n");
return TRUE;
}