diff --git a/build/libraries_sysmenu/wds/ARM9/src/WDS.c b/build/libraries_sysmenu/wds/ARM9/src/WDS.c index 2a18c083..7ff03d1d 100644 --- a/build/libraries_sysmenu/wds/ARM9/src/WDS.c +++ b/build/libraries_sysmenu/wds/ARM9/src/WDS.c @@ -1,20 +1,3 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: WDS.c - - 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$ - *---------------------------------------------------------------------------*/ - //********************************************************************** /** // @file WDS.c @@ -25,7 +8,7 @@ // @version 01.00 // ***********************************************************************/ -#include +#include "WDS.h" #include #ifdef WDS_WITHDWC #include @@ -59,22 +42,22 @@ enum // Structs //----------------------------------------------------- /** - @brief ワーク領域 + @brief WDSライブラリのワーク領域 */ typedef struct WDSWork { - u8 wmwork[ WM_SYSTEM_BUF_SIZE ]; ///< WMライブラリ用バッファ - u8 scanbuf[ WDS_SCAN_BUF_SIZE ] ATTRIBUTE_ALIGN(32); ///< スキャンバッファ - WMScanExParam scanparam; ///< スキャンパラメータ - WDSCallbackFunc scancb; ///< スキャン用コールバック - WDSApInfo apinfo[ WDS_APINFO_MAX ]; ///< スキャン出来たAP情報 - u16 rssi[ WDS_APINFO_MAX ]; ///< 電波強度 - u16 tgid[ WDS_APINFO_MAX ]; ///< 複数のビーコンを受け取った際に識別用に使うTGID - s32 apnum; ///< スキャン出来たAP情報数 - s32 apindex; ///< スキャン出来たAPを配列内のどこに書き込むかのインデックス - u32 status; ///< ステータス - MATHCRC16Context crcContext; ///< CRC計算用コンテキスト - MATHCRC16Table crcTable; ///< CRC計算用テーブル + u8 wmwork[ WM_SYSTEM_BUF_SIZE ]; ///< WMライブラリ用バッファ + u8 scanbuf[ WDS_SCAN_BUF_SIZE ] ATTRIBUTE_ALIGN(32); ///< WMライブラリが使用するスキャンバッファ + WMScanExParam scanparam; ///< WMライブラリのスキャンパラメータ + WDSCallbackFunc scancb; ///< WMライブラリから呼び出されるコールバック + WDSApInfo apinfo[ WDS_APINFO_MAX ]; ///< スキャンしたAPビーコンを格納する配列 + u16 rssi[ WDS_APINFO_MAX ]; ///< 受信したAPビーコンの電波強度を格納する配列 + u16 tgid[ WDS_APINFO_MAX ]; ///< 複数のビーコンを識別するためのTGIDを格納する配列 + s32 apnum; ///< スキャン出来たAP情報数 + s32 apindex; ///< スキャン出来たAPを配列内のどこに書き込むかのインデックス + u32 status; ///< WDSライブラリのステータス + MATHCRC16Context crcContext; ///< CRC計算用コンテキスト + MATHCRC16Table crcTable; ///< CRC計算用テーブル } WDSWork; //----------------------------------------------------- @@ -181,7 +164,9 @@ static void WDSScanCallback( void *arg ) continue; // デバッグ表示 +#ifdef WDS_DEBUGPRINT OS_TPrintf( "Found AP GGID : %08x TGID : %04x\n", pParam->bssDesc[i]->gameInfo.ggid, pParam->bssDesc[i]->gameInfo.tgid ); +#endif // ビーコン内容をコピーし、暗号化解除 MI_CpuCopy8( pParam->bssDesc[i]->gameInfo.userGameInfo, &gWdsWork->apinfo[gWdsWork->apindex], sizeof(WDSApInfo) ); @@ -198,7 +183,9 @@ static void WDSScanCallback( void *arg ) // 旧バージョンの親機はCRC部分に0x0000を入れているためそれだけは受け入れる if( crc != gWdsWork->apinfo[gWdsWork->apindex].crc && gWdsWork->apinfo[gWdsWork->apindex].crc != 0x0000 ) { +#ifdef WDS_DEBUGPRINT OS_TPrintf( "AP Infomation CRC Error.\n" ); +#endif MI_CpuClear8( &gWdsWork->apinfo[gWdsWork->apindex], sizeof(WDSApInfo) ); continue; } @@ -239,7 +226,7 @@ size_t WDS_GetWorkAreaSize( void ) @param <2> 処理が完了した際に呼び出されるコールバック関数へのポインタ @param <3> WM_InitializeのdmaNoに準ずる引数 @return 0 : 成功 ( コールバックを待つこと ) - 0 以外 : 失敗 + @return 0 以外 : 失敗 @note <1> のサイズはWDS_SYSTEM_BUF_SIZEだけ必要であり、 かつ 32バイトアラインされている必要があります。 @@ -346,14 +333,15 @@ int WDS_End( WDSCallbackFunc callback ) if( callback == NULL ) return -1; - // WDS 終了 - gWdsWork->status = WDS_STATUS_END; - gWdsWork = NULL; - // WM 終了 errcode = WM_End( callback ); if( errcode != WM_ERRCODE_OPERATING ) return errcode; + + // WDS 終了 + gWdsWork->status = WDS_STATUS_END; + gWdsWork = NULL; + return 0; } diff --git a/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c b/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c new file mode 100644 index 00000000..3ea93091 --- /dev/null +++ b/build/libraries_sysmenu/wds/ARM9/src/WDSWrapper.c @@ -0,0 +1,892 @@ +//********************************************************************** +/** +// @file WDSWrapper.c +// @brief WDSライブラリのラッパー +// +// @author S.Nakata +// @date 2008/06/24 +// @version 01.00 +// +***********************************************************************/ +#include "WDSWrapper.h" +#ifdef WDS_WITHDWC +#include +#endif + +//----------------------------------------------------- +// Structs +//----------------------------------------------------- + +/** + @brief WDSラッパーのワーク領域 +*/ +typedef struct WDSWrapperWork +{ + u8 *stack; //!< WDSラッパーが使用するスタック + OSThread thread; //!< WDSラッパーが使用するスレッド構造体 + OSMutex mutex; //!< WDSラッパーが使用するmutex + + u8 *wdswork; //!< WDSが使用するワークエリア + + WDSBriefApInfo briefapinfo[WDS_APINFO_MAX]; //!< WDSラッパーがWDSを使用した結果を格納する領域 + int briefapinfonum; //!< WDSラッパーがWDSを使用した結果を格納する領域 + + WDSWrapperInitializeParam initparam; //!< 初期化時パラメータのコピー + WDSWrapperStateThreadState state; //!< WDSラッパーのステート + OSTick tickstart; //!< 各種時間測定用 + + BOOL terminate; //!< 解放開始フラグ + BOOL idle; //!< 間欠スキャン中断フラグ + BOOL restart; //!< 間欠スキャン再開フラグ + + OSDeliverArgInfo deliverinfo; //!< TWL用アプリ間引数ワークエリア +} WDSWrapperWork; + +//----------------------------------------------------- +// Variables +//----------------------------------------------------- +static WDSWrapperWork *g_wdswrapperwork = NULL; + +//----------------------------------------------------- +// Internal Functions +//----------------------------------------------------- +static void WDS_WrapperInitialize_CB( void *arg ); +static void WDS_WrapperStartScan_CB( void *arg ); +static void WDS_WrapperEndScan_CB(void *arg); +static void WDS_WrapperEnd_CB( void *arg ); + +//-------------------------------------------------------------------------------- +/** アクセスポイント情報のデバッグ用表示関数 + @param apinfo デバッグ表示を行うWDSApInfoへのポインタ + @return なし +*///------------------------------------------------------------------------------ +static void DumpWDSApInfo( WDSApInfo *apinfo ) +{ + int i; + char buf[256]; + + // SSID + MI_CpuCopy8( apinfo->ssid, buf, WDS_SSID_BUF_SIZE) ; + buf[WDS_SSID_BUF_SIZE] = 0x00; + OS_TPrintf( "SSID: %s\n", buf ); + + // APNUM + MI_CpuCopy8( apinfo->apnum, buf, WDS_APNUM_BUF_SIZE) ; + buf[WDS_APNUM_BUF_SIZE] = 0x00; + OS_TPrintf( "APNUM: %s\n", buf ); + + // CHANNEL + OS_TPrintf( "channel: %d\n", apinfo->channel ); + + // ENCRYPTFLAG + OS_TPrintf( "encryptmethod: %d\n", apinfo->encryptflag); + + // WEPKEY + OS_TPrintf( "WEPKEY: " ); + for( i = 0 ; i < WDS_WEPKEY_BUF_SIZE ; i++ ) + { + OS_TPrintf( "%02x", apinfo->wepkey[i] ); + } + OS_TPrintf( "\n" ); +} + +//-------------------------------------------------------------------------------- +/** スキャン開始前ウェイトステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperBeforeInitState( void ) +{ + if( g_wdswrapperwork->restart == TRUE ) { + // 待っている途中だがすぐに受信を開始 + g_wdswrapperwork->restart = FALSE; + + // 連続スキャン開始時間の記録 + g_wdswrapperwork->tickstart = OS_GetTick(); + + // スキャン開始ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_INIT; + return; + } + else if( g_wdswrapperwork->terminate == TRUE ) { + // すでにWDSが解放されているので直接ステートを変化させる + g_wdswrapperwork->state = WDSWRAPPER_STATE_TERMINATE; + return; + } + else if( g_wdswrapperwork->idle == TRUE ) { + // すでにWDSが解放されているので直接ステートを変化させる + g_wdswrapperwork->state = WDSWRAPPER_STATE_IDLE; + return; + } + + // 十分長い時間待ったかを確認 + if( g_wdswrapperwork->tickstart + OS_MilliSecondsToTicks( WDSWRAPPER_WAITPERIOD ) < OS_GetTick() ) { + // 連続スキャン開始時間の記録 + g_wdswrapperwork->tickstart = OS_GetTick(); + + // スキャン開始ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_INIT; + } +} + +//-------------------------------------------------------------------------------- +/** 初期化開始ステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperInitState( void ) +{ + WMErrCode err; +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("*** WDS_WrapperInitState\n"); +#endif + + // 初期化完了待ちステートをあらかじめ設定しておく + g_wdswrapperwork->state = WDSWRAPPER_STATE_WAITINIT; + + err = (WMErrCode)WDS_Initialize( g_wdswrapperwork->wdswork, WDS_WrapperInitialize_CB, 0 ); + if( err == WM_ERRCODE_SUCCESS || err == WM_ERRCODE_OPERATING ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_Initialize successed\n"); +#endif + } + else { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_Initialize failed\n"); +#endif + // 初期化開始に失敗したのでWDSラッパー解放ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_TERMINATE; + } +} + +//-------------------------------------------------------------------------------- +/** 初期化コールバック関数 + @param arg 非同期処理の結果を格納するWMCallback型変数へのポインタ + @return なし + @note + @LI 処理成功時は自動的にスキャン開始ステートへ + @LI 処理失敗時は自動的にWDSラッパー解放ステートへ +*///------------------------------------------------------------------------------ +static void WDS_WrapperInitialize_CB( void *arg ) +{ + WMCallback *callback = (WMCallback *)arg; + WDSWrapperCallbackParam param; + + // ステート処理と重複処理しないため + OS_LockMutex( &g_wdswrapperwork->mutex ); + +#ifdef WDSWRAPPER_DEBUGPRINT + OS_TPrintf("WDS_Initialize_CB\n"); +#endif + + // 返り値に基づいてコールバックパラメータを設定 + param.callback = WDSWRAPPER_CALLBACK_INITIALIZE; + if( callback->errcode != WM_ERRCODE_SUCCESS ) + param.errcode = WDSWRAPPER_ERRCODE_FAILURE; + else + param.errcode = WDSWRAPPER_ERRCODE_SUCCESS; + + // コールバック関数の呼び出し + g_wdswrapperwork->initparam.callback( ¶m ); + + // 返り値に基づいてステートを変更 + if( callback->errcode != WM_ERRCODE_SUCCESS ) + g_wdswrapperwork->state = WDSWRAPPER_STATE_TERMINATE; + else { + // スキャン開始ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_SCAN; + + // 連続スキャン開始時間の記録 + g_wdswrapperwork->tickstart = OS_GetTick(); + } + + // ステート処理と重複処理しないため + OS_UnlockMutex( &g_wdswrapperwork->mutex ); +} + +//-------------------------------------------------------------------------------- +/** スキャン開始ステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperScanState( void ) +{ + WMErrCode err; +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf( "*** WDS_WrapperScanState\n" ); +#endif + + // スキャン完了待ちステートへあらかじめ移行しておく + g_wdswrapperwork->state = WDSWRAPPER_STATE_WAITSCAN; + + err = (WMErrCode)WDS_StartScan( WDS_WrapperStartScan_CB ); + if( err == WM_ERRCODE_SUCCESS ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_StartScan successed\n"); +#endif + g_wdswrapperwork->briefapinfonum = 0; + } + else { + // スキャン開始に失敗したのでWDS解放開始ステートへ +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf( "WDS_StartScan failed\n" ); +#endif + g_wdswrapperwork->state = WDSWRAPPER_STATE_END; + } +} + +//-------------------------------------------------------------------------------- +/** スキャン完了待ちステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperWaitScanState( void ) +{ + if( g_wdswrapperwork->terminate == TRUE ) { + g_wdswrapperwork->state = WDSWRAPPER_STATE_ENDSCAN; + } + else if( g_wdswrapperwork->idle == TRUE ) { + g_wdswrapperwork->state = WDSWRAPPER_STATE_ENDSCAN; + } +} + +//-------------------------------------------------------------------------------- +/** スキャン開始コールバック関数 + @param arg 非同期処理の結果を格納するWMCallback型変数へのポインタ + @return なし + @note + @LI 処理成功時はスキャン時間に基づいてIDLEかスキャン前ウェイトステートへ + @LI 処理失敗時はスキャン停止後WDSラッパー解放ステートへ +*///------------------------------------------------------------------------------ +static void WDS_WrapperStartScan_CB( void *arg ) +{ +#pragma unused( arg ) +#ifdef WDSWRAPPER_DEBUGPRINT + int i; +#endif + WDSWrapperCallbackParam param; + + // ステート処理と重複処理しないため + OS_LockMutex( &g_wdswrapperwork->mutex ); + +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("*** WDS_WrapperStartScan_CB\n"); +#endif + + // 外部からの停止等の理由でコールバック待ちステートでない場合には何もしない + if( g_wdswrapperwork->state != WDSWRAPPER_STATE_WAITSCAN ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("state != WDSWRAPPER_STATE_WAITSCAN\n"); +#endif + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + return; + } + + // スキャン結果を取得する + if( WDS_GetApInfoAll( g_wdswrapperwork->briefapinfo ) != 0 ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf( "WDS_GetApInfoAll failed\n" ); +#endif + // コールバックパラメータの設定 + param.callback = WDSWRAPPER_CALLBACK_STARTSCAN; + param.errcode = WDSWRAPPER_ERRCODE_FAILURE; + + // コールバック関数の呼び出し + g_wdswrapperwork->initparam.callback( ¶m ); + + // ただちにスキャン停止ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_ENDSCAN; + + // 最終的にTERMINATEステートに入るよう設定 + g_wdswrapperwork->terminate = TRUE; + + // ステート処理と重複処理しないため + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + + return; + } + else { + // ビーコン数を格納 + g_wdswrapperwork->briefapinfonum = WDS_GetApInfoNum(); + } + + + if( g_wdswrapperwork->tickstart + OS_MilliSecondsToTicks( WDSWRAPPER_SCANPERIOD ) < OS_GetTick() ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("*** WDS_WrapperCompleteScanState: Scanned more than %u [ms]\n", WDSWRAPPER_SCANPERIOD ); +#endif + +#ifdef WDSWRAPPER_DEBUGPRINT + // スキャン結果を取得したのでデバッグ表示 + for( i = 0 ; i < WDS_APINFO_MAX ; i++ ) { + if( g_wdswrapperwork->briefapinfo[i].isvalid == TRUE ) { + OS_TPrintf( "================================\n" ); + OS_TPrintf( "rssi: %d\n", g_wdswrapperwork->briefapinfo[i].rssi ); + DumpWDSApInfo( &( g_wdswrapperwork->briefapinfo[i].apinfo ) ); + OS_TPrintf( "================================\n" ); + } + } +#endif + // コールバックパラメータの設定 + param.callback = WDSWRAPPER_CALLBACK_STARTSCAN2; + param.errcode = WDSWRAPPER_ERRCODE_SUCCESS; + + // コールバック関数の呼び出し + g_wdswrapperwork->initparam.callback( ¶m ); + + // 十分長い時間スキャンしたのでスキャン中断ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_ENDSCAN; + } + else { + // コールバックパラメータの設定 + param.callback = WDSWRAPPER_CALLBACK_STARTSCAN; + param.errcode = WDSWRAPPER_ERRCODE_SUCCESS; + + // コールバック関数の呼び出し + g_wdswrapperwork->initparam.callback( ¶m ); + + // ただちにスキャン開始ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_SCAN; + } + + // ステート処理と重複処理しないため + OS_UnlockMutex( &g_wdswrapperwork->mutex ); +} + +//-------------------------------------------------------------------------------- +/** スキャン停止開始ステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperEndScanState( void ) +{ + WMErrCode err; +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf( "*** WDS_WrapperEndScanState\n" ); +#endif + + // スキャン停止待ちステートへあらかじめ移行しておく + g_wdswrapperwork->state = WDSWRAPPER_STATE_WAITENDSCAN; + + err = (WMErrCode)WDS_EndScan( WDS_WrapperEndScan_CB ); + if( err == WM_ERRCODE_SUCCESS || err == WM_ERRCODE_ILLEGAL_STATE ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_EndScan successed\n"); +#endif + // WDS解放ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_END; + } + else if( err == WM_ERRCODE_OPERATING ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_EndScan asynchronously successed\n"); +#endif + } + else + { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_EndScan failed\n"); +#endif + // 再度スキャン停止を試みる + // (これは処理的に無限ループに入る可能性があるのでまずいが、そもそもスキャンが止まっていないとWM_Endもできないので不可避) + g_wdswrapperwork->state = WDSWRAPPER_STATE_ENDSCAN; + } +} + +//-------------------------------------------------------------------------------- +/** スキャン停止コールバック関数 + @param arg 非同期処理の結果を格納するWMCallback型変数へのポインタ + @return なし + @note + @LI 処理成功時は自動的にWDS解放ステートへ + @LI 処理失敗時は自動的に再度スキャン停止ステートへ +*///------------------------------------------------------------------------------ +static void WDS_WrapperEndScan_CB(void *arg) +{ + WMCallback *callback = (WMCallback *)arg; + + // ステート処理と重複処理しないため + OS_LockMutex( &g_wdswrapperwork->mutex ); + +#ifdef WDSWRAPPER_DEBUGPRINT + OS_TPrintf("WDS_WrapperEndScan_CB\n"); +#endif + + if( callback->errcode != WM_ERRCODE_SUCCESS ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_EndScan success\n"); +#endif + // 再度スキャン停止を試みる + // (これは処理的に無限ループに入る可能性があるのでまずいが、そもそもスキャンが止まっていないとWM_Endもできないので不可避) + g_wdswrapperwork->state = WDSWRAPPER_STATE_ENDSCAN; + } + else { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_EndScan success\n"); +#endif + // スキャン停止完了したら自動的にWDS解放ステートへ + g_wdswrapperwork->state = WDSWRAPPER_STATE_END; + } + + // ステート処理と重複処理しないため + OS_UnlockMutex( &g_wdswrapperwork->mutex ); +} + +//-------------------------------------------------------------------------------- +/** 解放開始ステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperEndState( void ) +{ + WMErrCode err; + +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("*** WDS_WrapperEndState\n"); +#endif + + + // 解放待ちステートへあらかじめ移行しておく + g_wdswrapperwork->state = WDSWRAPPER_STATE_WAITEND; + err = (WMErrCode)WDS_End( WDS_WrapperEnd_CB ); + + if( err == WM_ERRCODE_SUCCESS ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_End successed\n"); +#endif + } + else if( err == WM_ERRCODE_OPERATING ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_End asynchronously successed\n"); +#endif + } + else { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_Printf("WDS_End failed\n"); +#endif + // 引き続き解放を試みる + g_wdswrapperwork->state = WDSWRAPPER_STATE_END; + } +} + +//-------------------------------------------------------------------------------- +/** 解放開始コールバック関数 + @param arg 非同期処理の結果を格納するWMCallback型変数へのポインタ + @return なし + @note + @LI WDS_Endは常に成功するため、フラグに基づいてIDLEまたは初期化前ウェイトまたはライブラリ解放ステートへ +*///------------------------------------------------------------------------------ +static void WDS_WrapperEnd_CB( void *arg ) +{ +#pragma unused(arg) + WDSWrapperCallbackParam param; + + // ステート処理と重複処理しないため + OS_LockMutex( &g_wdswrapperwork->mutex ); + +#ifdef WDSWRAPPER_DEBUGPRINT + OS_TPrintf("WDS_WrapperEnd_CB\n"); +#endif + + // WDSを終了したタイミングを記録しておく + g_wdswrapperwork->tickstart = OS_GetTick(); + + // WDS_End後のステートを各種フラグに基づいて変更 + if( g_wdswrapperwork->terminate == TRUE ) { + g_wdswrapperwork->state = WDSWRAPPER_STATE_TERMINATE; + } + else if( g_wdswrapperwork->idle == TRUE ) { + g_wdswrapperwork->state = WDSWRAPPER_STATE_IDLE; + + // コールバックパラメータの設定 + param.callback = WDSWRAPPER_CALLBACK_STOPSCAN; + param.errcode = WDSWRAPPER_ERRCODE_SUCCESS; + + // コールバック関数の呼び出し + g_wdswrapperwork->initparam.callback( ¶m ); + } + else { + g_wdswrapperwork->state = WDSWRAPPER_STATE_BEFOREINIT; + } + + + // ステート処理と重複処理しないため + OS_UnlockMutex( &g_wdswrapperwork->mutex ); +} + +//-------------------------------------------------------------------------------- +/** アイドルステート関数 + @param なし + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperIdleState( void ) +{ + if( g_wdswrapperwork->terminate == TRUE ) { + g_wdswrapperwork->state = WDSWRAPPER_STATE_TERMINATE; + } + else if( g_wdswrapperwork->restart == TRUE ) + { + g_wdswrapperwork->idle = FALSE; + g_wdswrapperwork->restart = FALSE; + g_wdswrapperwork->state = WDSWRAPPER_STATE_INIT; + } +} + +//-------------------------------------------------------------------------------- +/** WDSラッパーライブラリが内部で実行するスレッド関数 + @param arg 常にNULL + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperThreadFunc( void *arg ) +{ +#pragma unused( arg ) + WDSWrapperCallbackParam param; + + // ステートの初期化 + g_wdswrapperwork->state = WDSWRAPPER_STATE_INIT; + + while( 1 ) { + OS_WaitVBlankIntr(); + + // ステートにより処理を分岐(ステート処理中はmutexによりlockが行われる) + OS_LockMutex( &g_wdswrapperwork->mutex ); + if( g_wdswrapperwork->state == WDSWRAPPER_STATE_TERMINATE ) + break; + + switch( g_wdswrapperwork->state ) { + case WDSWRAPPER_STATE_BEFOREINIT: WDS_WrapperBeforeInitState(); break; + case WDSWRAPPER_STATE_INIT: WDS_WrapperInitState(); break; + case WDSWRAPPER_STATE_WAITINIT: break; + case WDSWRAPPER_STATE_SCAN: WDS_WrapperScanState(); break; + case WDSWRAPPER_STATE_WAITSCAN: WDS_WrapperWaitScanState(); break; + case WDSWRAPPER_STATE_ENDSCAN: WDS_WrapperEndScanState(); break; + case WDSWRAPPER_STATE_WAITENDSCAN: break; + case WDSWRAPPER_STATE_END: WDS_WrapperEndState(); break; + case WDSWRAPPER_STATE_WAITEND: break; + case WDSWRAPPER_STATE_IDLE: WDS_WrapperIdleState(); break; + case WDSWRAPPER_STATE_TERMINATE: break; + } + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + } + + // コールバックパラメータの設定 + param.callback = WDSWRAPPER_CALLBACK_CLEANUP; + param.errcode = WDSWRAPPER_ERRCODE_SUCCESS; + + // コールバック関数の呼び出し + g_wdswrapperwork->initparam.callback( ¶m ); +} + +//-------------------------------------------------------------------------------- +/** WDSコントロールスレッドデストラクタ + @param arg 常にNULL + @return なし +*///------------------------------------------------------------------------------ +static void WDS_WrapperThreadDestructor( void *arg ) +{ +#pragma unused( arg ) + if( g_wdswrapperwork != NULL ) { + if( g_wdswrapperwork->stack != NULL ) { + g_wdswrapperwork->initparam.free( g_wdswrapperwork->stack ); + g_wdswrapperwork->stack = NULL; + } + if( g_wdswrapperwork->wdswork != NULL ) { + g_wdswrapperwork->initparam.free( g_wdswrapperwork->wdswork ); + g_wdswrapperwork->wdswork = NULL; + } + g_wdswrapperwork->initparam.free( g_wdswrapperwork ); + g_wdswrapperwork = NULL; + } +} + +//----------------------------------------------------- +// External Functions +//----------------------------------------------------- + +//-------------------------------------------------------------------------------- +/** + WDSラッパーライブラリ初期化の非同期処理を開始します。
+ 初期化処理完了時にコールバックが発生します。
+ コールバック関数でエラー通知を受け取った場合は、ライブラリが自動的に解放されるのを待ってください。 + @param param WDSラッパー初期化パラメータ + @return WDSWRAPPER_ERRCODE_SUCCESS: 初期化処理を開始 + @return WDSWRAPPER_ERRCODE_INITIALIZED: WDSラッパーライブラリは初期化済み + @return WDSWRAPPER_ERRCODE_FAILURE: 初期化に失敗 + @note + ・WDSコントロールスレッドは生成直後から間欠スキャンを実行しています +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperInitialize( WDSWrapperInitializeParam param ) +{ + // 初期化済みをチェック + if( g_wdswrapperwork != NULL ) + return WDSWRAPPER_ERRCODE_INITIALIZED; + + // パラメータのサニティチェック + if( param.callback == NULL || param.alloc == NULL || param.free == NULL ) + return WDSWRAPPER_ERRCODE_FAILURE; + + // ワークエリアを初期化 + g_wdswrapperwork = param.alloc( sizeof( WDSWrapperWork ) ); + if( g_wdswrapperwork == NULL ) + goto FAILURE; + MI_CpuClear8( g_wdswrapperwork, sizeof( WDSWrapperWork ) ); + + // スタック領域・WDSワークエリアの初期化 + g_wdswrapperwork->stack = param.alloc( WDSWRAPPER_STACKSIZE ); + if( g_wdswrapperwork->stack == NULL ) + goto FAILURE; + g_wdswrapperwork->wdswork = param.alloc( WDS_GetWorkAreaSize() ); + if( g_wdswrapperwork->wdswork == NULL ) + goto FAILURE; + + // パラメータのコピー + g_wdswrapperwork->initparam = param; + + // mutexの初期化 + OS_InitMutex( &g_wdswrapperwork->mutex ); + + // スレッドの生成 + OS_CreateThread( &g_wdswrapperwork->thread, + WDS_WrapperThreadFunc, + NULL, + g_wdswrapperwork->stack + WDSWRAPPER_STACKSIZE, + WDSWRAPPER_STACKSIZE, + g_wdswrapperwork->initparam.threadprio + ); + + // ワークエリア解放用のスレッドデストラクタを設定 + OS_SetThreadDestructor( &g_wdswrapperwork->thread, WDS_WrapperThreadDestructor ); + + // スレッドの実行 + OS_WakeupThreadDirect( &g_wdswrapperwork->thread ); + + // 初期化成功 + return WDSWRAPPER_ERRCODE_SUCCESS; + +FAILURE: + if( g_wdswrapperwork != NULL ) { + if( g_wdswrapperwork->stack != NULL ) { + param.free( g_wdswrapperwork->stack ); + g_wdswrapperwork->stack = NULL; + } + if( g_wdswrapperwork->wdswork != NULL ) { + param.free( g_wdswrapperwork->wdswork ); + g_wdswrapperwork->wdswork = NULL; + } + param.free( g_wdswrapperwork ); + g_wdswrapperwork = NULL; + } + return WDSWRAPPER_ERRCODE_FAILURE; +} + +//-------------------------------------------------------------------------------- +/** + WDSコントロールスレッドを停止し、WDSラッパーライブラリを解放します。
+ 解放処理完了の直前にコールバックが発生します。
+ コールバック関数にエラーが通知されることはありません。 + @param なし + @return WDSWRAPPER_ERRCODE_SUCCESS WDSラッパー解放を開始 + @return WDSWRAPPER_ERRCODE_OPERATING WDSラッパー解放を実行中 + @return WDSWRAPPER_ERRCODE_UNINITIALIZED WDSラッパーライブラリが初期化されていない +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperCleanup( void ) +{ + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return WDSWRAPPER_ERRCODE_UNINITIALIZED; + + OS_LockMutex( &g_wdswrapperwork->mutex ); + + // 解放処理実行中をチェック + if( g_wdswrapperwork->terminate == TRUE ) { + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + return WDSWRAPPER_ERRCODE_OPERATING; + } + + g_wdswrapperwork->terminate = TRUE; + + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + + return WDSWRAPPER_ERRCODE_SUCCESS; +} + +//-------------------------------------------------------------------------------- +/** + WDSコントロールスレッドのステートを間欠受信状態に変更します。
+ ステートの変更に成功すると、以後一回の間欠受信が完了するたびにコールバックが呼び出されます。
+ コールバック関数でエラー通知を受け取った場合は、ライブラリが自動的に解放されるのを待ってください。 + @return WDSWRAPPER_ERRCODE_SUCCESS: ステート変更に成功(コールバック発生を待ってください) + @return WDSWRAPPER_ERRCODE_FAILURE: 間欠受信に移行できるステートでない(現在のステートが維持されます) + @return WDSWRAPPER_ERRCIDE_OPERATING: すでにステートが間欠受信状態 + @return WDSWRAPPER_ERRCODE_UNINITIALIZED: WDSラッパーライブラリが初期化されていない +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperStartScan( void ) +{ + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return WDSWRAPPER_ERRCODE_UNINITIALIZED; + + OS_LockMutex( &g_wdswrapperwork->mutex ); + + // ステートがIDLEかBEFOREINITであることを確認 + if( g_wdswrapperwork->state != WDSWRAPPER_STATE_IDLE && g_wdswrapperwork->state != WDSWRAPPER_STATE_BEFOREINIT ) { + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + return WDSWRAPPER_ERRCODE_FAILURE; + } + + // 再スタート処理実行中をチェック + if( g_wdswrapperwork->restart == TRUE ) { + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + return WDSWRAPPER_ERRCODE_OPERATING; + } + + g_wdswrapperwork->restart = TRUE; + + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + + return WDSWRAPPER_ERRCODE_SUCCESS; +} + +//-------------------------------------------------------------------------------- +/** + WDSコントロールスレッドのステートを間欠受信停止状態に設定します。
+ 間欠受信が実際に停止した際にコールバックが呼び出されます。
+ コールバックでエラーが通知されることはありません。 + @return WDSWRAPPER_ERRCODE_SUCCESS: ステート変更に成功 + @return WDSWRAPPER_ERRCIDE_OPERATING: すでにステートが間欠受信停止状態 + @return WDSWRAPPER_ERRCODE_UNINITIALIZED: WDSラッパーライブラリが初期化されていない + @note + ステート変更が行われてから間欠受信が停止するまでには20ms程度の時間がかかります +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperStopScan( void ) +{ + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return WDSWRAPPER_ERRCODE_UNINITIALIZED; + + OS_LockMutex( &g_wdswrapperwork->mutex ); + + // 間欠受信停止処理実行中をチェック + if( g_wdswrapperwork->idle == TRUE ) { + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + return WDSWRAPPER_ERRCODE_OPERATING; + } + + g_wdswrapperwork->idle = TRUE; + + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + + return WDSWRAPPER_ERRCODE_SUCCESS; +} + +//-------------------------------------------------------------------------------- +/** + 直前に完了した間欠受信で有効な親機ビーコンを受け取ったか確認します + @param なし + @return WDSWRAPPER_ERRCODE_SUCCESS: 直前に完了した間欠受信で有効な親機ビーコンを受け取った + @return WDSWRAPPER_ERRCODE_FAILURE: 直前に完了した間欠受信で有効な親機ビーコンを受け取っていない + @return WDSWRAPPER_ERRCODE_UNINITIALIZED: WDSラッパーライブラリが初期化されていない +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperCheckValidBeacon( void ) +{ + int i; + WDSWrapperErrCode ret = WDSWRAPPER_ERRCODE_FAILURE; + + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return WDSWRAPPER_ERRCODE_UNINITIALIZED; + + OS_LockMutex( &g_wdswrapperwork->mutex ); + + if( g_wdswrapperwork->briefapinfonum > 0 ) { + for( i = 0; i < g_wdswrapperwork->briefapinfonum; i++ ) { + if( g_wdswrapperwork->briefapinfo[i].isvalid == TRUE ) { + if( g_wdswrapperwork->briefapinfo[i].apinfo.infoflag & WDS_INFOFLAG_NOTIFY ) { + ret = WDSWRAPPER_ERRCODE_SUCCESS; + break; + } + } + } + } + OS_UnlockMutex( &g_wdswrapperwork->mutex ); + + return ret; +} + +//-------------------------------------------------------------------------------- +/** + 直前に完了した間欠受信で受け取ったビーコン情報をArgument領域にセットします + @param なし + @return WDSWRAPPER_ERRCODE_SUCCESS: 親機ビーコン情報がArgument領域にセットされた + @return WDSWRAPPER_ERRCODE_FAILURE: 親機ビーコン情報をArgument領域にセットできなかった + @return WDSWRAPPER_ERRCODE_UNINITIALIZED: WDSラッパーライブラリが初期化されていない +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperSetArgumentParam( void ) +{ + int err; + + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return WDSWRAPPER_ERRCODE_UNINITIALIZED; + + // TWL用のArgumentシステムを初期化 + OS_InitDeliverArgInfo( &g_wdswrapperwork->deliverinfo, sizeof( g_wdswrapperwork->briefapinfo ) ); + + // Argument領域に書き込み + err = OS_SetBinaryToDeliverArg( g_wdswrapperwork->briefapinfo, sizeof( g_wdswrapperwork->briefapinfo ) ); + if( err != OS_DELIVER_ARG_SUCCESS ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_TPrintf( "WDS_WrapperSetArgumentParam: failed %d\n", err ); +#endif + return WDSWRAPPER_ERRCODE_FAILURE; + } + + err = OS_EncodeDeliverArg(); + if( err != OS_DELIVER_ARG_SUCCESS ) { +#ifdef WDSWRAPPER_DEBUGPRINT + OS_TPrintf( "OS_EncodeDeliverArg: failed %d\n", err ); +#endif + return WDSWRAPPER_ERRCODE_FAILURE; + } + + +#ifdef WDSWRAPPER_DEBUGPRINT + OS_TPrintf( "WDS_WrapperSetArgumentParam: success\n" ); +#endif + + return WDSWRAPPER_ERRCODE_SUCCESS; +} + +//-------------------------------------------------------------------------------- +/** + WDSコントロールスレッドが実行中か確認します + @param なし + @return WDSWRAPPER_ERRCODE_SUCCESS: WDSコントロールスレッドが実行中 + @return WDSWRAPPER_ERRCODE_FAILURE: WDSコントロールスレッドは停止している + @return WDSWRAPPER_ERRCODE_UNINITIALIZED: WDSラッパーライブラリが初期化されていない +*///------------------------------------------------------------------------------ +WDSWrapperErrCode WDS_WrapperCheckThreadRunning( void ) +{ + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return WDSWRAPPER_ERRCODE_UNINITIALIZED; + + if( OS_IsThreadTerminated( &g_wdswrapperwork->thread ) == TRUE ) + return WDSWRAPPER_ERRCODE_FAILURE; + return WDSWRAPPER_ERRCODE_SUCCESS; +} + +//-------------------------------------------------------------------------------- +/** + WDSコントロールスレッドが使用しているOSThreadへのポインタを得ます + @param なし + @return NULL: WDSラッパーライブラリが初期化されていない + @return NULL以外: 実行中・あるいは停止中のOSThreadへのポインタ +*///------------------------------------------------------------------------------ +OSThread *WDS_WrapperGetOSThread( void ) +{ + // 初期化済みをチェック + if( g_wdswrapperwork == NULL ) + return NULL; + + return &g_wdswrapperwork->thread; +} diff --git a/build/libraries_sysmenu/wds/readme.txt b/build/libraries_sysmenu/wds/readme.txt index 375045ae..46466ad2 100644 --- a/build/libraries_sysmenu/wds/readme.txt +++ b/build/libraries_sysmenu/wds/readme.txt @@ -1,6 +1,6 @@ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■ ■ -■ TWLWDSライブラリ 2008/6/11版 ■ +■ TWLWDSライブラリ 2008/6/26版 ■ ■ ■ ■ ネットワーク開発部からのお知らせ ■ ■ ■ @@ -22,9 +22,14 @@ %make TWLSDK_PLATFORM=TWL ・受信サンプルのビルドはWDSTestディレクトリ下で %make TWLSDK_PLATFORM=TWL +・WDSラッパーを使用した受信サンプルのビルドはWDSWrapperTestディレクトリ下で + %make TWLSDK_PLATFORM=TWL ●変更履歴 +2008/06/26 20080626版 +・WDSライブラリを簡易に使用するためのWDSWrapperが追加されました。 + 2008/06/11 初版 ・動作確認用バージョンから、ビーコンに以下の情報が追加されました infoflag - 付加情報フラグが格納される領域です @@ -40,3 +45,4 @@ infoflag ・ランチャーメニューでのニンテンドースポットビューアの強調表示は、 infoflagのWDS_INFOFLAG_NOTIFYビットが1にセットされたビーコンを 受信した場合のみ行ってください。 +・なお、WDSWrapperはWDS_INFOFLAG_NOTIFYに関連した処理を内部で自動的に行います。 diff --git a/build/tests/WDSTest/src/main.c b/build/tests/WDSTest/src/main.c index add12c99..37840164 100644 --- a/build/tests/WDSTest/src/main.c +++ b/build/tests/WDSTest/src/main.c @@ -1,22 +1,5 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: WDS.c - - 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 -#include +#include +#include "WDS.h" // ヒープ初期化関数 static void InitializeAllocateSystem(void); @@ -54,6 +37,9 @@ static AppState g_appstate = APP_STATE_WDSINIT; // 受け取ったビーコン情報を格納する変数(この配列をランチャー経由でホットスポットチャンネルに渡す) static WDSBriefApInfo briefapinfo[WDS_APINFO_MAX]; +// 時間計測用 +static OSTick wdsBegin; + /*---------------------------------------------------------------------------* Name: NitroMain @@ -102,6 +88,7 @@ void NitroMain(void) // WDSライブラリの初期化関数を呼び出し、その非同期処理の完了を待つ OS_Printf("*** WDS_Initialize\n"); g_appstate = APP_STATE_WDSWAITINIT; + wdsBegin = OS_GetTick(); if( WDS_Initialize( wdsSysBuf, WDS_Initialize_CB, 0 ) == 0 ) { OS_Printf("WDS_Initialize successed\n"); @@ -126,6 +113,7 @@ void NitroMain(void) //OS_Printf("*** WDS_StartScan\n"); // ビーコンスキャン非同期処理を開始する g_appstate = APP_STATE_WDSWAITSCAN; + wdsBegin = OS_GetTick(); if( WDS_StartScan( WDS_StartScan_CB ) == 0 ) { if( wdsScanBeginTick == 0 ) @@ -156,6 +144,7 @@ void NitroMain(void) OS_Printf("*** WDS_EndScan\n"); // スキャンを終了させる非同期処理を開始する + wdsBegin = OS_GetTick(); g_appstate = APP_STATE_WDSWAITENDSCAN; if( WDS_EndScan( WDS_EndScan_CB ) == 0 ) { @@ -187,6 +176,7 @@ void NitroMain(void) // WDSライブラリを終了し、無線ハードの電源を落とす非同期処理を開始する OS_Printf("*** WDS_End\n"); g_appstate = APP_STATE_WDSWAITEND; + wdsBegin = OS_GetTick(); if( WDS_End( WDS_End_CB ) == 0 ) { OS_Printf("WDS_End successed\n"); @@ -263,13 +253,15 @@ static void WDS_Initialize_CB(void *arg) #pragma unused(arg) OS_TPrintf("WDS_Initialize_CB\n"); g_appstate = APP_STATE_WDSSCAN; + OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); } static void WDS_StartScan_CB(void *arg) { #pragma unused(arg) -// OS_TPrintf("WDS_StartScan_CB\n"); + OS_TPrintf("WDS_StartScan_CB\n"); g_appstate = APP_STATE_WDSCOMPLETESCAN; + OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); } static void WDS_EndScan_CB(void *arg) @@ -277,6 +269,7 @@ static void WDS_EndScan_CB(void *arg) #pragma unused(arg) OS_TPrintf("WDS_EndScan_CB\n"); g_appstate = APP_STATE_WDSCOMPLETEENDSCAN; + OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); } static void WDS_End_CB(void *arg) @@ -284,4 +277,5 @@ static void WDS_End_CB(void *arg) #pragma unused(arg) OS_TPrintf("WDS_End_CB\n"); g_appstate = APP_STATE_WDSCOMPLETEEND; + OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); } diff --git a/build/tests/WDSWrapperTest/Makefile b/build/tests/WDSWrapperTest/Makefile new file mode 100644 index 00000000..efc21709 --- /dev/null +++ b/build/tests/WDSWrapperTest/Makefile @@ -0,0 +1,37 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: WDSWrapperTest +# File: Makefile +# +# Copyright 2008 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. +# +#---------------------------------------------------------------------------- + +TARGET_FIRM = SYSTEMMENU +TARGET_PLATFORM = TWL +TWL_ARCHGEN = LIMITED +TWL_PROC = ARM9 + +SRCS = main.c +TARGET_BIN = main.srl + +include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs + +#---------------------------------------------------------------------------- + +LLIBRARIES += WDS$(TWL_LIBSUFFIX).a + +#---------------------------------------------------------------------------- + +do-build: $(TARGETS) + +#---------------------------------------------------------------------------- +include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules + +#===== End of Makefile ===== diff --git a/build/tests/WDSWrapperTest/src/main.c b/build/tests/WDSWrapperTest/src/main.c new file mode 100644 index 00000000..cda0d08c --- /dev/null +++ b/build/tests/WDSWrapperTest/src/main.c @@ -0,0 +1,130 @@ +#include "WDSWrapper.h" + +// Vブランク関数 +static void VBlankIntr(void) +{ + OS_SetIrqCheckFlag(OS_IE_V_BLANK); +} + +// ヒープ初期化関数 +static void InitializeAllocateSystem(void) +{ + void *tempLo; + OSHeapHandle hh; + + tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); + OS_SetArenaLo(OS_ARENA_MAIN, tempLo); + hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); + if (hh < 0) + { + OS_Panic("ARM9: Fail to create heap...\n"); + } + hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); +} + +// WDSWrapper用アロケータ +static void *Alloc_WDSWrapper( u32 size ) +{ + return OS_Alloc( size ); +} + +static void Free_WDSWrapper( void *ptr ) +{ + OS_Free( ptr ); +} + +char *callbackstring[] = { + "WDSWRAPPER_CALLBACK_INITIALIZE", + "WDSWRAPPER_CALLBACK_CLEANUP", + "WDSWRAPPER_CALLBACK_STARTSCAN", + "WDSWRAPPER_CALLBACK_STARTSCAN2", + "WDSWRAPPER_CALLBACK_STOPSCAN", +}; + +// WDSWrapper用コールバック関数 +static void Callback_WDSWrapper( void *ptr ) +{ + WDSWrapperCallbackParam *callback = (WDSWrapperCallbackParam *)ptr; + OS_TPrintf("Callback_WDSWrapper: %s %d ", callbackstring[callback->callback], callback->errcode ); + + if( callback->callback == WDSWRAPPER_CALLBACK_STARTSCAN2 ) { + // n秒間隔のビーコン間欠スキャン一回分が完了 + // ビーコンを受け取っていないという結果が出た場合、強調表示を消します + if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_FAILURE ) + OS_TPrintf( "強調表示を消します" ); + else { + OS_TPrintf( "強調表示をつけます" ); + if( WDS_WrapperSetArgumentParam() == WDSWRAPPER_ERRCODE_SUCCESS ) + OS_TPrintf( "\nArgument領域にパラメータを代入\n" ); + else + OS_TPrintf( "\nArgument領域にパラメータを代入失敗\n" ); + } + } + else if( callback->callback == WDSWRAPPER_CALLBACK_STARTSCAN ) { + // n秒間隔のビーコン間欠スキャン一回分が完了 + // ビーコンを受け取っている場合のみ強調表示を付けます + if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_SUCCESS ) + OS_TPrintf( "強調表示をつけます" ); + } + + OS_TPrintf( "\n" ); +} + +void NitroMain(void) +{ + WDSWrapperInitializeParam param; + u16 lastpad = 0x0000; + u16 nowpad = 0x0000; + + // 各種初期化処理 + OS_Init(); + OS_InitTick(); + OS_InitAlarm(); + + //---- interrupt setting + OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); + OS_EnableIrqMask(OS_IE_V_BLANK); + OS_EnableIrq(); + GX_VBlankIntr(TRUE); + + InitializeAllocateSystem(); + + OS_TPrintf( "WDSWrapper Sample\n\n" ); + OS_TPrintf( "Xボタン: WDSラッパーとWDSを初期化し、間欠スキャンを開始\n" ); + OS_TPrintf( "Bボタン: スキャンを中断\n" ); + OS_TPrintf( "Aボタン: スキャンを再開\n" ); + OS_TPrintf( "Yボタン: スキャンを中断し、WDSラッパーとWDSを解放\n" ); + OS_TPrintf( "スタートボタン: ヒープをダンプ表示\n" ); + + // キー入力で中断・再開・解放をやる + while( 1 ) { + lastpad = nowpad; + nowpad = PAD_Read(); + + // Aボタン: スキャンを再開 + // Bボタン: スキャンを中断 + // Xボタン: ラッパーを初期化 + // Yボタン: ラッパーを解放 + // スタートボタン: ヒープをダンプ表示 + if( ( lastpad ^ nowpad ) & PAD_BUTTON_A && !( nowpad & PAD_BUTTON_A ) ) + WDS_WrapperStartScan(); + if( ( lastpad ^ nowpad ) & PAD_BUTTON_B && !( nowpad & PAD_BUTTON_B ) ) + WDS_WrapperStopScan(); + if( ( lastpad ^ nowpad ) & PAD_BUTTON_X && !( nowpad & PAD_BUTTON_X ) ) { + // WDSWrapper初期化と動作開始 + param.threadprio = 10; + param.dmano = 1; + + param.callback = Callback_WDSWrapper; + param.alloc = Alloc_WDSWrapper; + param.free = Free_WDSWrapper; + WDS_WrapperInitialize( param ); + } + if( ( lastpad ^ nowpad ) & PAD_BUTTON_Y && !( nowpad & PAD_BUTTON_Y ) ) + WDS_WrapperCleanup(); + if( ( lastpad ^ nowpad ) & PAD_BUTTON_START && !( nowpad & PAD_BUTTON_START ) ) + OS_DumpHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE ); + + OS_Sleep( 100 ); + } +} diff --git a/include/sysmenu/WDSWrapper.h b/include/sysmenu/WDSWrapper.h new file mode 100644 index 00000000..8d08ffa4 --- /dev/null +++ b/include/sysmenu/WDSWrapper.h @@ -0,0 +1,137 @@ +//********************************************************************** +// +// @file WDSWrapper.h +// @brief WDSライブラリのラッパー +// +// @author S.Nakata +// @date 2008/06/21 +// @version 0.0 +// +//*********************************************************************/ +#ifndef __WDSWRAPPER_H__ +#define __WDSWRAPPER_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +//----------------------------------------------------- +// Include +//----------------------------------------------------- +#include "WDS.h" + +//----------------------------------------------------- +// Macros +//----------------------------------------------------- +#define WDSWRAPPER_STACKSIZE 4096 ///< WDSラッパーが使用するスレッドスタックの推奨サイズ +#define WDSWRAPPER_SCANPERIOD 3000 ///< WDSラッパーがスキャンを継続する時間[msec] +#define WDSWRAPPER_WAITPERIOD 3000 ///< WDSラッパーがスキャンを中断する時間[msec] + +//#define WDSWRAPPER_DEBUGPRINT ///< デバッグ表示フラグ + +//----------------------------------------------------- +// Types of WDS Wrapper Library +//----------------------------------------------------- + +/** + @brief 処理結果をあらわす列挙型 +*/ +typedef enum WDSWrapperErrCode +{ + WDSWRAPPER_ERRCODE_SUCCESS = 0, ///< 処理成功 + WDSWRAPPER_ERRCODE_FAILURE = 1, ///< 処理失敗 + WDSWRAPPER_ERRCODE_OPERATING = 2, ///< 処理実行中 + WDSWRAPPER_ERRCODE_INITIALIZED = 3, ///< WDSラッパーライブラリ初期化済み + WDSWRAPPER_ERRCODE_UNINITIALIZED= 4 ///< WDSラッパーライブラリ未初期化 +} WDSWrapperErrCode; + +/** + @brief コールバック発生要因をあらわす列挙型 +*/ +typedef enum WDSWrapperCallback +{ + WDSWRAPPER_CALLBACK_INITIALIZE = 0, //!< WDS_WrapperInitialize関数によるコールバック + WDSWRAPPER_CALLBACK_CLEANUP = 1, //!< WDS_WrapperCleanup関数によるコールバック + WDSWRAPPER_CALLBACK_STARTSCAN = 2, //!< WDS_WrapperStartScan関数によるコールバック + WDSWRAPPER_CALLBACK_STARTSCAN2 = 3, //!< WDS_WrapperStartScan関数によるコールバック(間欠スキャン1回終了) + WDSWRAPPER_CALLBACK_STOPSCAN = 4 //!< WDS_WrapperStopScan関数によるコールバック +} WDSWrapperCallback; + +/** + @brief WDSラッパーののステートをあらわす列挙型 +*/ +typedef enum WDSWrapperStateThreadState { + WDSWRAPPER_STATE_BEFOREINIT, //!< 初期化開始待ちステート + WDSWRAPPER_STATE_INIT, //!< 初期化開始ステート + WDSWRAPPER_STATE_WAITINIT, //!< 初期化完了待ちステート + WDSWRAPPER_STATE_SCAN, //!< スキャン開始ステート + WDSWRAPPER_STATE_WAITSCAN, //!< スキャン完了待ちステート + WDSWRAPPER_STATE_ENDSCAN, //!< スキャン中断ステート + WDSWRAPPER_STATE_WAITENDSCAN, //!< スキャン中断完了待ちステート + WDSWRAPPER_STATE_END, //!< WDS解放開始ステート + WDSWRAPPER_STATE_WAITEND, //!< WDS解放完了待ちステート + WDSWRAPPER_STATE_IDLE, //!< アイドルステート + WDSWRAPPER_STATE_TERMINATE //!< WDSラッパー解放ステート +} WDSWrapperStateThreadState; + +/** + @brief WDSWrapperライブラリが使用するコールバック関数型 + @note + ・引数argは必ずWDSWrapperCallback型変数へのポインタ +*/ +typedef void ( *WDSWrapperCallbackFunc )( void *arg ); + +/** + @brief WDSラッパー内部で使用するアロケーター型 +*/ +typedef void *( *WDSWrapperAlloc )( u32 size ); + +/** + @brief WDSラッパー内部で使用するアロケーター型 +*/ +typedef void ( *WDSWrapperFree )( void *ptr ); + +//----------------------------------------------------- +// Structs of WDS Wrapper Library +//----------------------------------------------------- + +/** + @brief WDS_WrapperInitialize関数に与える初期化パラメータ +*/ +typedef struct WDSWrapperInitializeParam +{ + u32 threadprio; ///< WDSコントロールスレッドの優先度 + u16 dmano; ///< WMライブラリが使用するDMA番号 + + WDSWrapperCallbackFunc callback; ///< WDSコントロールスレッドから呼び出されるコールバック関数へのポインタ + WDSWrapperAlloc alloc; ///< WDSラッパーが使用するアロケータ + WDSWrapperFree free; ///< WDSラッパーが使用するアロケータ +} WDSWrapperInitializeParam; + +/** + @brief WDSラッパーが呼び出すコールバック関数に与えられる引数用の構造体 +*/ +typedef struct WDSWrapperCallbackParam +{ + WDSWrapperCallback callback; ///< コールバック発生要因 + WDSWrapperErrCode errcode; ///< エラーコード +} WDSWrapperCallbackParam; + +//----------------------------------------------------- +// Prototypes of WDS Wrapper Library +//----------------------------------------------------- + +WDSWrapperErrCode WDS_WrapperInitialize( WDSWrapperInitializeParam param ); +WDSWrapperErrCode WDS_WrapperCleanup( void ); +WDSWrapperErrCode WDS_WrapperStartScan( void ); +WDSWrapperErrCode WDS_WrapperStopScan( void ); +WDSWrapperErrCode WDS_WrapperCheckValidBeacon( void ); +WDSWrapperErrCode WDS_WrapperSetArgumentParam( void ); +WDSWrapperErrCode WDS_WrapperCheckThreadRunning( void ); +OSThread *WDS_WrapperGetOSThread( void ); + +#ifdef __cplusplus +} +#endif + +#endif //EOF __WDSWRAPPER_H__ diff --git a/man/WDS_Wrapper/html/_w_d_s_wrapper_8c.html b/man/WDS_Wrapper/html/_w_d_s_wrapper_8c.html new file mode 100644 index 00000000..19a07e02 --- /dev/null +++ b/man/WDS_Wrapper/html/_w_d_s_wrapper_8c.html @@ -0,0 +1,281 @@ + + +WDSWrapper: src/WDSWrapper.c + + + + + +
+

src/WDSWrapper.c

WDS繝ゥ繧、繝悶Λ繝ェ縺ョ繝ゥ繝繝代シ [隧ウ邏ー] +

+#include "WDSWrapper.h"
+ + + + + + + + + + + + + + + + + + + + + + + +

繝繝シ繧ソ讒矩

struct  WDSWrapperWork
 WDS繝ゥ繝繝代シ縺ョ繝ッ繝シ繧ッ鬆伜沺 [隧ウ邏ー]

髢「謨ー

WDSWrapperErrCode WDS_WrapperInitialize (WDSWrapperInitializeParam param)
WDSWrapperErrCode WDS_WrapperCleanup (void)
WDSWrapperErrCode WDS_WrapperStartScan (void)
WDSWrapperErrCode WDS_WrapperStopScan (void)
WDSWrapperErrCode WDS_WrapperCheckValidBeacon (void)
WDSWrapperErrCode WDS_WrapperSetArgumentParam (void)
WDSWrapperErrCode WDS_WrapperCheckThreadRunning (void)
OSThread * WDS_WrapperGetOSThread (void)
+


隱ャ譏

+WDS繝ゥ繧、繝悶Λ繝ェ縺ョ繝ゥ繝繝代シ +

+

菴懆:
S.Nakata
+
譌・莉:
2008/06/24
+
繝舌シ繧ク繝ァ繝ウ:
01.00
+

髢「謨ー

+ +
+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperCheckThreadRunning (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨′螳溯。御クュ縺狗「コ隱阪@縺セ縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨′螳溯。御クュ

+WDSWRAPPER_ERRCODE_FAILURE: WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ッ蛛懈ュ「縺励※縺繧

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperCheckValidBeacon (void   ) 
+
+
+ +

+逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ譛牙柑縺ェ隕ェ讖溘ン繝シ繧ウ繝ウ繧貞女縺大叙縺」縺溘°遒コ隱阪@縺セ縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ譛牙柑縺ェ隕ェ讖溘ン繝シ繧ウ繝ウ繧貞女縺大叙縺」縺

+WDSWRAPPER_ERRCODE_FAILURE: 逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ譛牙柑縺ェ隕ェ讖溘ン繝シ繧ウ繝ウ繧貞女縺大叙縺」縺ヲ縺縺ェ縺

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperCleanup (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨r蛛懈ュ「縺励仝DS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ繧定ァ」謾セ縺励∪縺吶
+ 隗」謾セ蜃ヲ逅螳御コ縺ョ逶エ蜑阪↓繧ウ繝シ繝ォ繝舌ャ繧ッ縺檎匱逕溘@縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ォ繧ィ繝ゥ繝シ縺碁夂衍縺輔l繧九%縺ィ縺ッ縺ゅj縺セ縺帙s縲

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS WDS繝ゥ繝繝代シ隗」謾セ繧帝幕蟋

+WDSWRAPPER_ERRCODE_OPERATING WDS繝ゥ繝繝代シ隗」謾セ繧貞ョ溯。御クュ

+WDSWRAPPER_ERRCODE_UNINITIALIZED WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
OSThread* WDS_WrapperGetOSThread (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨′菴ソ逕ィ縺励※縺繧軌SThread縺ク縺ョ繝昴う繝ウ繧ソ繧貞セ励∪縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
NULL: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+NULL莉・螟: 螳溯。御クュ繝サ縺ゅk縺縺ッ蛛懈ュ「荳ュ縺ョOSThread縺ク縺ョ繝昴う繝ウ繧ソ

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperInitialize (WDSWrapperInitializeParam  param  ) 
+
+
+ +

+WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ蛻晄悄蛹悶ョ髱槫酔譛溷ヲ逅繧帝幕蟋九@縺セ縺吶
+ 蛻晄悄蛹門ヲ逅螳御コ譎ゅ↓繧ウ繝シ繝ォ繝舌ャ繧ッ縺檎匱逕溘@縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ァ繧ィ繝ゥ繝シ騾夂衍繧貞女縺大叙縺」縺溷エ蜷医ッ縲√Λ繧、繝悶Λ繝ェ縺瑚ェ蜍慕噪縺ォ隗」謾セ縺輔l繧九ョ繧貞セ縺」縺ヲ縺上□縺輔>縲

蠑墓焚:
+ + +
param WDS繝ゥ繝繝代シ蛻晄悄蛹悶ヱ繝ゥ繝。繝シ繧ソ
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 蛻晄悄蛹門ヲ逅繧帝幕蟋

+WDSWRAPPER_ERRCODE_INITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺ッ蛻晄悄蛹匁ク医∩

+WDSWRAPPER_ERRCODE_FAILURE: 蛻晄悄蛹悶↓螟ア謨

+
隕壹∴譖ク縺:
繝サWDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ッ逕滓千峩蠕後°繧蛾俣谺繧ケ繧ュ繝」繝ウ繧貞ョ溯。後@縺ヲ縺縺セ縺
+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperSetArgumentParam (void   ) 
+
+
+ +

+逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ蜿励¢蜿悶▲縺溘ン繝シ繧ウ繝ウ諠蝣ア繧但rgument鬆伜沺縺ォ繧サ繝繝医@縺セ縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 隕ェ讖溘ン繝シ繧ウ繝ウ諠蝣ア縺窟rgument鬆伜沺縺ォ繧サ繝繝医&繧後◆

+WDSWRAPPER_ERRCODE_FAILURE: 隕ェ讖溘ン繝シ繧ウ繝ウ諠蝣ア繧但rgument鬆伜沺縺ォ繧サ繝繝医〒縺阪↑縺九▲縺

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperStartScan (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ョ繧ケ繝繝シ繝医r髢捺ャ蜿嶺ソ。迥カ諷九↓螟画峩縺励∪縺吶
+ 繧ケ繝繝シ繝医ョ螟画峩縺ォ謌仙粥縺吶k縺ィ縲∽サ・蠕御ク蝗槭ョ髢捺ャ蜿嶺ソ。縺悟ョ御コ縺吶k縺溘ウ縺ォ繧ウ繝シ繝ォ繝舌ャ繧ッ縺悟他縺ウ蜃コ縺輔l縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ァ繧ィ繝ゥ繝シ騾夂衍繧貞女縺大叙縺」縺溷エ蜷医ッ縲√Λ繧、繝悶Λ繝ェ縺瑚ェ蜍慕噪縺ォ隗」謾セ縺輔l繧九ョ繧貞セ縺」縺ヲ縺上□縺輔>縲

謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 繧ケ繝繝シ繝亥、画峩縺ォ謌仙粥(繧ウ繝シ繝ォ繝舌ャ繧ッ逋コ逕溘r蠕縺」縺ヲ縺上□縺輔>)

+WDSWRAPPER_ERRCODE_FAILURE: 髢捺ャ蜿嶺ソ。縺ォ遘サ陦後〒縺阪k繧ケ繝繝シ繝医〒縺ェ縺(迴セ蝨ィ縺ョ繧ケ繝繝シ繝医′邯ュ謖√&繧後∪縺)

+WDSWRAPPER_ERRCIDE_OPERATING: 縺吶〒縺ォ繧ケ繝繝シ繝医′髢捺ャ蜿嶺ソ。迥カ諷

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperStopScan (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ョ繧ケ繝繝シ繝医r髢捺ャ蜿嶺ソ。蛛懈ュ「迥カ諷九↓險ュ螳壹@縺セ縺吶
+ 髢捺ャ蜿嶺ソ。縺悟ョ滄圀縺ォ蛛懈ュ「縺励◆髫帙↓繧ウ繝シ繝ォ繝舌ャ繧ッ縺悟他縺ウ蜃コ縺輔l縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ縺ァ繧ィ繝ゥ繝シ縺碁夂衍縺輔l繧九%縺ィ縺ッ縺ゅj縺セ縺帙s縲

謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 繧ケ繝繝シ繝亥、画峩縺ォ謌仙粥

+WDSWRAPPER_ERRCIDE_OPERATING: 縺吶〒縺ォ繧ケ繝繝シ繝医′髢捺ャ蜿嶺ソ。蛛懈ュ「迥カ諷

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+
隕壹∴譖ク縺:
繧ケ繝繝シ繝亥、画峩縺瑚。後o繧後※縺九i髢捺ャ蜿嶺ソ。縺悟●豁「縺吶k縺セ縺ァ縺ォ縺ッ20ms遞句コヲ縺ョ譎る俣縺後°縺九j縺セ縺
+ +
+

+

+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/_w_d_s_wrapper_8h.html b/man/WDS_Wrapper/html/_w_d_s_wrapper_8h.html new file mode 100644 index 00000000..2903fc0b --- /dev/null +++ b/man/WDS_Wrapper/html/_w_d_s_wrapper_8h.html @@ -0,0 +1,562 @@ + + +WDSWrapper: include/WDSWrapper.h + + + + + +
+

include/WDSWrapper.h

#include "WDS.h"
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

繝繝シ繧ソ讒矩

struct  WDSWrapperInitializeParam
 WDS_WrapperInitialize髢「謨ー縺ォ荳弱∴繧句晄悄蛹悶ヱ繝ゥ繝。繝シ繧ソ [隧ウ邏ー]
struct  WDSWrapperCallbackParam
 WDS繝ゥ繝繝代シ縺悟他縺ウ蜃コ縺吶さ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ォ荳弱∴繧峨l繧句シ墓焚逕ィ縺ョ讒矩菴 [隧ウ邏ー]

繝槭け繝ュ螳夂セゥ

#define WDSWRAPPER_STACKSIZE   4096
 WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧ケ繝ャ繝繝峨せ繧ソ繝繧ッ縺ョ謗ィ螂ィ繧オ繧、繧コ
#define WDSWRAPPER_SCANPERIOD   3000
 WDS繝ゥ繝繝代シ縺後せ繧ュ繝」繝ウ繧堤カ咏カ壹☆繧区凾髢甜msec]
#define WDSWRAPPER_WAITPERIOD   3000
 WDS繝ゥ繝繝代シ縺後せ繧ュ繝」繝ウ繧剃クュ譁ュ縺吶k譎る俣[msec]

蝙句ョ夂セゥ

typedef void(* WDSWrapperCallbackFunc )(void *arg)
 WDSWrapper繝ゥ繧、繝悶Λ繝ェ縺御スソ逕ィ縺吶k繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー蝙
typedef void *(* WDSWrapperAlloc )(u32 size)
 WDS繝ゥ繝繝代シ蜀驛ィ縺ァ菴ソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ繝シ蝙
typedef void(* WDSWrapperFree )(void *ptr)
 WDS繝ゥ繝繝代シ蜀驛ィ縺ァ菴ソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ繝シ蝙

蛻玲嫌蝙

enum  WDSWrapperErrCode {
+  WDSWRAPPER_ERRCODE_SUCCESS = 0, +
+  WDSWRAPPER_ERRCODE_FAILURE = 1, +
+  WDSWRAPPER_ERRCODE_OPERATING = 2, +
+  WDSWRAPPER_ERRCODE_INITIALIZED = 3, +
+  WDSWRAPPER_ERRCODE_UNINITIALIZED = 4 +
+ }
 蜃ヲ逅邨先棡繧偵≠繧峨o縺吝玲嫌蝙 [隧ウ邏ー]
enum  WDSWrapperCallback {
+  WDSWRAPPER_CALLBACK_INITIALIZE = 0, +
+  WDSWRAPPER_CALLBACK_CLEANUP = 1, +
+  WDSWRAPPER_CALLBACK_STARTSCAN = 2, +
+  WDSWRAPPER_CALLBACK_STARTSCAN2 = 3, +
+  WDSWRAPPER_CALLBACK_STOPSCAN = 4 +
+ }
 繧ウ繝シ繝ォ繝舌ャ繧ッ逋コ逕溯ヲ∝屏繧偵≠繧峨o縺吝玲嫌蝙 [隧ウ邏ー]
enum  WDSWrapperStateThreadState {
+  WDSWRAPPER_STATE_BEFOREINIT, +
+  WDSWRAPPER_STATE_INIT, +
+  WDSWRAPPER_STATE_WAITINIT, +
+  WDSWRAPPER_STATE_SCAN, +
+  WDSWRAPPER_STATE_WAITSCAN, +
+  WDSWRAPPER_STATE_ENDSCAN, +
+  WDSWRAPPER_STATE_WAITENDSCAN, +
+  WDSWRAPPER_STATE_END, +
+  WDSWRAPPER_STATE_WAITEND, +
+  WDSWRAPPER_STATE_IDLE, +
+  WDSWRAPPER_STATE_TERMINATE +
+ }
 WDS繝ゥ繝繝代シ縺ョ縺ョ繧ケ繝繝シ繝医r縺ゅi繧上☆蛻玲嫌蝙 [隧ウ邏ー]

髢「謨ー

WDSWrapperErrCode WDS_WrapperInitialize (WDSWrapperInitializeParam param)
WDSWrapperErrCode WDS_WrapperCleanup (void)
WDSWrapperErrCode WDS_WrapperStartScan (void)
WDSWrapperErrCode WDS_WrapperStopScan (void)
WDSWrapperErrCode WDS_WrapperCheckValidBeacon (void)
WDSWrapperErrCode WDS_WrapperSetArgumentParam (void)
WDSWrapperErrCode WDS_WrapperCheckThreadRunning (void)
OSThread * WDS_WrapperGetOSThread (void)
+

繝槭け繝ュ螳夂セゥ

+ +
+
+ + + + +
#define WDSWRAPPER_SCANPERIOD   3000
+
+
+ +

+WDS繝ゥ繝繝代シ縺後せ繧ュ繝」繝ウ繧堤カ咏カ壹☆繧区凾髢甜msec] +

+ +

+

+ +

+
+ + + + +
#define WDSWRAPPER_STACKSIZE   4096
+
+
+ +

+WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧ケ繝ャ繝繝峨せ繧ソ繝繧ッ縺ョ謗ィ螂ィ繧オ繧、繧コ +

+ +

+

+ +

+
+ + + + +
#define WDSWRAPPER_WAITPERIOD   3000
+
+
+ +

+WDS繝ゥ繝繝代シ縺後せ繧ュ繝」繝ウ繧剃クュ譁ュ縺吶k譎る俣[msec] +

+ +

+

+


蝙句ョ夂セゥ

+ +
+
+ + + + +
typedef void*( * WDSWrapperAlloc)(u32 size)
+
+
+ +

+WDS繝ゥ繝繝代シ蜀驛ィ縺ァ菴ソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ繝シ蝙 +

+ +

+

+ +

+
+ + + + +
typedef void( * WDSWrapperCallbackFunc)(void *arg)
+
+
+ +

+WDSWrapper繝ゥ繧、繝悶Λ繝ェ縺御スソ逕ィ縺吶k繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー蝙 +

+

隕壹∴譖ク縺:
繝サ蠑墓焚arg縺ッ蠢縺啗DSWrapperCallback蝙句、画焚縺ク縺ョ繝昴う繝ウ繧ソ
+ +
+

+ +

+
+ + + + +
typedef void( * WDSWrapperFree)(void *ptr)
+
+
+ +

+WDS繝ゥ繝繝代シ蜀驛ィ縺ァ菴ソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ繝シ蝙 +

+ +

+

+


蛻玲嫌蝙

+ +
+
+ + + + +
enum WDSWrapperCallback
+
+
+ +

+繧ウ繝シ繝ォ繝舌ャ繧ッ逋コ逕溯ヲ∝屏繧偵≠繧峨o縺吝玲嫌蝙 +

+

蛻玲嫌蝙九ョ蛟、:
+ + + + + + +
WDSWRAPPER_CALLBACK_INITIALIZE  +WDS_WrapperInitialize髢「謨ー縺ォ繧医k繧ウ繝シ繝ォ繝舌ャ繧ッ
WDSWRAPPER_CALLBACK_CLEANUP  +WDS_WrapperCleanup髢「謨ー縺ォ繧医k繧ウ繝シ繝ォ繝舌ャ繧ッ
WDSWRAPPER_CALLBACK_STARTSCAN  +WDS_WrapperStartScan髢「謨ー縺ォ繧医k繧ウ繝シ繝ォ繝舌ャ繧ッ
WDSWRAPPER_CALLBACK_STARTSCAN2  +WDS_WrapperStartScan髢「謨ー縺ォ繧医k繧ウ繝シ繝ォ繝舌ャ繧ッ(髢捺ャ繧ケ繧ュ繝」繝ウ1蝗樒オゆコ)
WDSWRAPPER_CALLBACK_STOPSCAN  +WDS_WrapperStopScan髢「謨ー縺ォ繧医k繧ウ繝シ繝ォ繝舌ャ繧ッ
+
+ +
+

+ +

+
+ + + + +
enum WDSWrapperErrCode
+
+
+ +

+蜃ヲ逅邨先棡繧偵≠繧峨o縺吝玲嫌蝙 +

+

蛻玲嫌蝙九ョ蛟、:
+ + + + + + +
WDSWRAPPER_ERRCODE_SUCCESS  +蜃ヲ逅謌仙粥
WDSWRAPPER_ERRCODE_FAILURE  +蜃ヲ逅螟ア謨
WDSWRAPPER_ERRCODE_OPERATING  +蜃ヲ逅螳溯。御クュ
WDSWRAPPER_ERRCODE_INITIALIZED  +WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ蛻晄悄蛹匁ク医∩
WDSWRAPPER_ERRCODE_UNINITIALIZED  +WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ譛ェ蛻晄悄蛹
+
+ +
+

+ +

+
+ + + + +
enum WDSWrapperStateThreadState
+
+
+ +

+WDS繝ゥ繝繝代シ縺ョ縺ョ繧ケ繝繝シ繝医r縺ゅi繧上☆蛻玲嫌蝙 +

+

蛻玲嫌蝙九ョ蛟、:
+ + + + + + + + + + + + +
WDSWRAPPER_STATE_BEFOREINIT  +蛻晄悄蛹夜幕蟋句セ縺。繧ケ繝繝シ繝
WDSWRAPPER_STATE_INIT  +蛻晄悄蛹夜幕蟋九せ繝繝シ繝
WDSWRAPPER_STATE_WAITINIT  +蛻晄悄蛹門ョ御コ蠕縺。繧ケ繝繝シ繝
WDSWRAPPER_STATE_SCAN  +繧ケ繧ュ繝」繝ウ髢句ァ九せ繝繝シ繝
WDSWRAPPER_STATE_WAITSCAN  +繧ケ繧ュ繝」繝ウ螳御コ蠕縺。繧ケ繝繝シ繝
WDSWRAPPER_STATE_ENDSCAN  +繧ケ繧ュ繝」繝ウ荳ュ譁ュ繧ケ繝繝シ繝
WDSWRAPPER_STATE_WAITENDSCAN  +繧ケ繧ュ繝」繝ウ荳ュ譁ュ螳御コ蠕縺。繧ケ繝繝シ繝
WDSWRAPPER_STATE_END  +WDS隗」謾セ髢句ァ九せ繝繝シ繝
WDSWRAPPER_STATE_WAITEND  +WDS隗」謾セ螳御コ蠕縺。繧ケ繝繝シ繝
WDSWRAPPER_STATE_IDLE  +繧「繧、繝峨Ν繧ケ繝繝シ繝
WDSWRAPPER_STATE_TERMINATE  +WDS繝ゥ繝繝代シ隗」謾セ繧ケ繝繝シ繝
+
+ +
+

+


髢「謨ー

+ +
+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperCheckThreadRunning (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨′螳溯。御クュ縺狗「コ隱阪@縺セ縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨′螳溯。御クュ

+WDSWRAPPER_ERRCODE_FAILURE: WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ッ蛛懈ュ「縺励※縺繧

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperCheckValidBeacon (void   ) 
+
+
+ +

+逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ譛牙柑縺ェ隕ェ讖溘ン繝シ繧ウ繝ウ繧貞女縺大叙縺」縺溘°遒コ隱阪@縺セ縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ譛牙柑縺ェ隕ェ讖溘ン繝シ繧ウ繝ウ繧貞女縺大叙縺」縺

+WDSWRAPPER_ERRCODE_FAILURE: 逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ譛牙柑縺ェ隕ェ讖溘ン繝シ繧ウ繝ウ繧貞女縺大叙縺」縺ヲ縺縺ェ縺

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperCleanup (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨r蛛懈ュ「縺励仝DS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ繧定ァ」謾セ縺励∪縺吶
+ 隗」謾セ蜃ヲ逅螳御コ縺ョ逶エ蜑阪↓繧ウ繝シ繝ォ繝舌ャ繧ッ縺檎匱逕溘@縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ォ繧ィ繝ゥ繝シ縺碁夂衍縺輔l繧九%縺ィ縺ッ縺ゅj縺セ縺帙s縲

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS WDS繝ゥ繝繝代シ隗」謾セ繧帝幕蟋

+WDSWRAPPER_ERRCODE_OPERATING WDS繝ゥ繝繝代シ隗」謾セ繧貞ョ溯。御クュ

+WDSWRAPPER_ERRCODE_UNINITIALIZED WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
OSThread* WDS_WrapperGetOSThread (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨′菴ソ逕ィ縺励※縺繧軌SThread縺ク縺ョ繝昴う繝ウ繧ソ繧貞セ励∪縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
NULL: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+NULL莉・螟: 螳溯。御クュ繝サ縺ゅk縺縺ッ蛛懈ュ「荳ュ縺ョOSThread縺ク縺ョ繝昴う繝ウ繧ソ

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperInitialize (WDSWrapperInitializeParam  param  ) 
+
+
+ +

+WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ蛻晄悄蛹悶ョ髱槫酔譛溷ヲ逅繧帝幕蟋九@縺セ縺吶
+ 蛻晄悄蛹門ヲ逅螳御コ譎ゅ↓繧ウ繝シ繝ォ繝舌ャ繧ッ縺檎匱逕溘@縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ァ繧ィ繝ゥ繝シ騾夂衍繧貞女縺大叙縺」縺溷エ蜷医ッ縲√Λ繧、繝悶Λ繝ェ縺瑚ェ蜍慕噪縺ォ隗」謾セ縺輔l繧九ョ繧貞セ縺」縺ヲ縺上□縺輔>縲

蠑墓焚:
+ + +
param WDS繝ゥ繝繝代シ蛻晄悄蛹悶ヱ繝ゥ繝。繝シ繧ソ
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 蛻晄悄蛹門ヲ逅繧帝幕蟋

+WDSWRAPPER_ERRCODE_INITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺ッ蛻晄悄蛹匁ク医∩

+WDSWRAPPER_ERRCODE_FAILURE: 蛻晄悄蛹悶↓螟ア謨

+
隕壹∴譖ク縺:
繝サWDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ッ逕滓千峩蠕後°繧蛾俣谺繧ケ繧ュ繝」繝ウ繧貞ョ溯。後@縺ヲ縺縺セ縺
+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperSetArgumentParam (void   ) 
+
+
+ +

+逶エ蜑阪↓螳御コ縺励◆髢捺ャ蜿嶺ソ。縺ァ蜿励¢蜿悶▲縺溘ン繝シ繧ウ繝ウ諠蝣ア繧但rgument鬆伜沺縺ォ繧サ繝繝医@縺セ縺

蠑墓焚:
+ + +
縺ェ縺 
+
+
謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 隕ェ讖溘ン繝シ繧ウ繝ウ諠蝣ア縺窟rgument鬆伜沺縺ォ繧サ繝繝医&繧後◆

+WDSWRAPPER_ERRCODE_FAILURE: 隕ェ讖溘ン繝シ繧ウ繝ウ諠蝣ア繧但rgument鬆伜沺縺ォ繧サ繝繝医〒縺阪↑縺九▲縺

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperStartScan (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ョ繧ケ繝繝シ繝医r髢捺ャ蜿嶺ソ。迥カ諷九↓螟画峩縺励∪縺吶
+ 繧ケ繝繝シ繝医ョ螟画峩縺ォ謌仙粥縺吶k縺ィ縲∽サ・蠕御ク蝗槭ョ髢捺ャ蜿嶺ソ。縺悟ョ御コ縺吶k縺溘ウ縺ォ繧ウ繝シ繝ォ繝舌ャ繧ッ縺悟他縺ウ蜃コ縺輔l縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ァ繧ィ繝ゥ繝シ騾夂衍繧貞女縺大叙縺」縺溷エ蜷医ッ縲√Λ繧、繝悶Λ繝ェ縺瑚ェ蜍慕噪縺ォ隗」謾セ縺輔l繧九ョ繧貞セ縺」縺ヲ縺上□縺輔>縲

謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 繧ケ繝繝シ繝亥、画峩縺ォ謌仙粥(繧ウ繝シ繝ォ繝舌ャ繧ッ逋コ逕溘r蠕縺」縺ヲ縺上□縺輔>)

+WDSWRAPPER_ERRCODE_FAILURE: 髢捺ャ蜿嶺ソ。縺ォ遘サ陦後〒縺阪k繧ケ繝繝シ繝医〒縺ェ縺(迴セ蝨ィ縺ョ繧ケ繝繝シ繝医′邯ュ謖√&繧後∪縺)

+WDSWRAPPER_ERRCIDE_OPERATING: 縺吶〒縺ォ繧ケ繝繝シ繝医′髢捺ャ蜿嶺ソ。迥カ諷

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+ +
+

+ +

+
+ + + + + + + + + +
WDSWrapperErrCode WDS_WrapperStopScan (void   ) 
+
+
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ョ繧ケ繝繝シ繝医r髢捺ャ蜿嶺ソ。蛛懈ュ「迥カ諷九↓險ュ螳壹@縺セ縺吶
+ 髢捺ャ蜿嶺ソ。縺悟ョ滄圀縺ォ蛛懈ュ「縺励◆髫帙↓繧ウ繝シ繝ォ繝舌ャ繧ッ縺悟他縺ウ蜃コ縺輔l縺セ縺吶
+ 繧ウ繝シ繝ォ繝舌ャ繧ッ縺ァ繧ィ繝ゥ繝シ縺碁夂衍縺輔l繧九%縺ィ縺ッ縺ゅj縺セ縺帙s縲

謌サ繧雁、:
WDSWRAPPER_ERRCODE_SUCCESS: 繧ケ繝繝シ繝亥、画峩縺ォ謌仙粥

+WDSWRAPPER_ERRCIDE_OPERATING: 縺吶〒縺ォ繧ケ繝繝シ繝医′髢捺ャ蜿嶺ソ。蛛懈ュ「迥カ諷

+WDSWRAPPER_ERRCODE_UNINITIALIZED: WDS繝ゥ繝繝代シ繝ゥ繧、繝悶Λ繝ェ縺悟晄悄蛹悶&繧後※縺縺ェ縺

+
隕壹∴譖ク縺:
繧ケ繝繝シ繝亥、画峩縺瑚。後o繧後※縺九i髢捺ャ蜿嶺ソ。縺悟●豁「縺吶k縺セ縺ァ縺ォ縺ッ20ms遞句コヲ縺ョ譎る俣縺後°縺九j縺セ縺
+ +
+

+

+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/annotated.html b/man/WDS_Wrapper/html/annotated.html new file mode 100644 index 00000000..d0bf4d82 --- /dev/null +++ b/man/WDS_Wrapper/html/annotated.html @@ -0,0 +1,35 @@ + + +WDSWrapper: 繝繝シ繧ソ讒矩 + + + + + +
+

繝繝シ繧ソ讒矩

繝繝シ繧ソ讒矩縺ョ隱ャ譏弱〒縺吶 + + + +
WDSWrapperCallbackParamWDS繝ゥ繝繝代シ縺悟他縺ウ蜃コ縺吶さ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ォ荳弱∴繧峨l繧句シ墓焚逕ィ縺ョ讒矩菴
WDSWrapperInitializeParamWDS_WrapperInitialize髢「謨ー縺ォ荳弱∴繧句晄悄蛹悶ヱ繝ゥ繝。繝シ繧ソ
WDSWrapperWorkWDS繝ゥ繝繝代シ縺ョ繝ッ繝シ繧ッ鬆伜沺
+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/classes.html b/man/WDS_Wrapper/html/classes.html new file mode 100644 index 00000000..e36c75a8 --- /dev/null +++ b/man/WDS_Wrapper/html/classes.html @@ -0,0 +1,34 @@ + + +WDSWrapper: 繧「繝ォ繝輔ぃ繝吶ャ繝磯荳隕ァ + + + + + +
+

繝繝シ繧ソ讒矩邏「蠑

+ +
  W  
+
WDSWrapperCallbackParam   WDSWrapperInitializeParam   WDSWrapperWork   

+

+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/doxygen.css b/man/WDS_Wrapper/html/doxygen.css new file mode 100644 index 00000000..22c48430 --- /dev/null +++ b/man/WDS_Wrapper/html/doxygen.css @@ -0,0 +1,473 @@ +BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +BODY,TD { + font-size: 90%; +} +H1 { + text-align: center; + font-size: 160%; +} +H2 { + font-size: 120%; +} +H3 { + font-size: 100%; +} +CAPTION { + font-weight: bold +} +DIV.qindex { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navpath { + width: 100%; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + padding: 2px; + line-height: 140%; +} +DIV.navtab { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +TD.navtab { + font-size: 70%; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + border: 1px double #9295C2; +} +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; +} +A.qindexHL:visited { + text-decoration: none; + background-color: #6666cc; + color: #ffffff +} +A.el { + text-decoration: none; + font-weight: bold +} +A.elRef { + font-weight: bold +} +A.code:link { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.code:visited { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.codeRef:link { + font-weight: normal; + color: #0000FF +} +A.codeRef:visited { + font-weight: normal; + color: #0000FF +} +A:hover { + text-decoration: none; + background-color: #f2f2ff +} +DL.el { + margin-left: -1cm +} +.fragment { + font-family: monospace, fixed; + font-size: 95%; +} +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} + +DIV.groupHeader { + margin-left: 16px; + margin-top: 12px; + margin-bottom: 6px; + font-weight: bold; +} +DIV.groupText { + margin-left: 16px; + font-style: italic; + font-size: 90% +} +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #e8eef2; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #e8eef2; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { + text-align: center; +} +IMG.formulaDsp { +} +IMG.formulaInl { + vertical-align: middle; +} +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +SPAN.vhdldigit { color: #ff00ff } +SPAN.vhdlchar { color: #000000 } +SPAN.vhdlkeyword { color: #700070 } +SPAN.vhdllogic { color: #ff0000 } + +.mdescLeft { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + padding: 0px 8px 4px 8px; + font-size: 80%; + font-style: italic; + background-color: #FAFAFA; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplItemRight { + padding: 1px 8px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: none; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-size: 80%; +} +.memTemplParams { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-top-style: solid; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + color: #606060; + background-color: #FAFAFA; + font-size: 80%; +} +.search { + color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +TD.tiny { + font-size: 75%; +} +a { + color: #1A41A8; +} +a:visited { + color: #2A3798; +} +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; +} +TH.dirtab { + background: #e8eef2; + font-weight: bold; +} +HR { + height: 1px; + border: none; + border-top: 1px solid black; +} + +/* Style for detailed member documentation */ +.memtemplate { + font-size: 80%; + color: #606060; + font-weight: normal; + margin-left: 3px; +} +.memnav { + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} +.memitem { + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; +} +.memname { + white-space: nowrap; + font-weight: bold; +} +.memdoc{ + padding-left: 10px; +} +.memproto { + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; +} +.paramkey { + text-align: right; +} +.paramtype { + white-space: nowrap; +} +.paramname { + color: #602020; + font-style: italic; + white-space: nowrap; +} +/* End Styling for detailed member documentation */ + +/* for the tree view */ +.ftvtree { + font-family: sans-serif; + margin:0.5em; +} +/* these are for tree view when used as main index */ +.directory { + font-size: 9pt; + font-weight: bold; +} +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} + +/* The following two styles can be used to replace the root node title */ +/* with an image of your choice. Simply uncomment the next two styles, */ +/* specify the name of your image and be sure to set 'height' to the */ +/* proper pixel height of your image. */ + +/* .directory h3.swap { */ +/* height: 61px; */ +/* background-repeat: no-repeat; */ +/* background-image: url("yourimage.gif"); */ +/* } */ +/* .directory h3.swap span { */ +/* display: none; */ +/* } */ + +.directory > h3 { + margin-top: 0; +} +.directory p { + margin: 0px; + white-space: nowrap; +} +.directory div { + display: none; + margin: 0px; +} +.directory img { + vertical-align: -30%; +} +/* these are for tree view when not used as main index */ +.directory-alt { + font-size: 100%; + font-weight: bold; +} +.directory-alt h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} +.directory-alt > h3 { + margin-top: 0; +} +.directory-alt p { + margin: 0px; + white-space: nowrap; +} +.directory-alt div { + display: none; + margin: 0px; +} +.directory-alt img { + vertical-align: -30%; +} + diff --git a/man/WDS_Wrapper/html/doxygen.png b/man/WDS_Wrapper/html/doxygen.png new file mode 100644 index 00000000..f0a274bb Binary files /dev/null and b/man/WDS_Wrapper/html/doxygen.png differ diff --git a/man/WDS_Wrapper/html/files.html b/man/WDS_Wrapper/html/files.html new file mode 100644 index 00000000..ece15a67 --- /dev/null +++ b/man/WDS_Wrapper/html/files.html @@ -0,0 +1,33 @@ + + +WDSWrapper: 繝輔ぃ繧、繝ォ邏「蠑 + + + + + +
+

繝輔ぃ繧、繝ォ荳隕ァ

縺薙l縺ッ繝輔ぃ繧、繝ォ荳隕ァ縺ァ縺吶 + + +
include/WDSWrapper.h
src/WDSWrapper.cWDS繝ゥ繧、繝悶Λ繝ェ縺ョ繝ゥ繝繝代シ
+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/functions.html b/man/WDS_Wrapper/html/functions.html new file mode 100644 index 00000000..b38249c8 --- /dev/null +++ b/man/WDS_Wrapper/html/functions.html @@ -0,0 +1,79 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+縺薙l縺ッ繝輔ぅ繝シ繝ォ繝峨ョ荳隕ァ縺ァ縺昴l縺槭l縺悟ア槭@縺ヲ縺繧区ァ矩菴/蜈ア逕ィ菴薙ョ隱ャ譏弱∈繝ェ繝ウ繧ッ縺励※縺縺セ縺吶 +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/functions_vars.html b/man/WDS_Wrapper/html/functions_vars.html new file mode 100644 index 00000000..180a2643 --- /dev/null +++ b/man/WDS_Wrapper/html/functions_vars.html @@ -0,0 +1,79 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 - 螟画焚 + + + + + +
+  +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/globals.html b/man/WDS_Wrapper/html/globals.html new file mode 100644 index 00000000..6fd7686f --- /dev/null +++ b/man/WDS_Wrapper/html/globals.html @@ -0,0 +1,132 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+縺薙l縺ッ髢「謨ー縲∝、画焚縲√槭け繝ュ縲・num縲ゝypedef 縺ョ荳隕ァ縺ァ縺吶ゅ◎繧後◇繧後′螻槭@縺ヲ縺繧九ヵ繧。繧、繝ォ縺ョ隱ャ譏弱∈繝ェ繝ウ繧ッ縺励※縺縺セ縺吶 +

+

- w -

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/globals_defs.html b/man/WDS_Wrapper/html/globals_defs.html new file mode 100644 index 00000000..76b3697d --- /dev/null +++ b/man/WDS_Wrapper/html/globals_defs.html @@ -0,0 +1,49 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+  +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/globals_enum.html b/man/WDS_Wrapper/html/globals_enum.html new file mode 100644 index 00000000..74f036b9 --- /dev/null +++ b/man/WDS_Wrapper/html/globals_enum.html @@ -0,0 +1,49 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+  +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/globals_eval.html b/man/WDS_Wrapper/html/globals_eval.html new file mode 100644 index 00000000..1a189e5d --- /dev/null +++ b/man/WDS_Wrapper/html/globals_eval.html @@ -0,0 +1,85 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+  +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/globals_func.html b/man/WDS_Wrapper/html/globals_func.html new file mode 100644 index 00000000..c6c11670 --- /dev/null +++ b/man/WDS_Wrapper/html/globals_func.html @@ -0,0 +1,67 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+  +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/globals_type.html b/man/WDS_Wrapper/html/globals_type.html new file mode 100644 index 00000000..0041fdf2 --- /dev/null +++ b/man/WDS_Wrapper/html/globals_type.html @@ -0,0 +1,49 @@ + + +WDSWrapper: 繝繝シ繧ソ繝輔ぅ繝シ繝ォ繝 + + + + + +
+  +

+

+
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/index.html b/man/WDS_Wrapper/html/index.html new file mode 100644 index 00000000..f53075a3 --- /dev/null +++ b/man/WDS_Wrapper/html/index.html @@ -0,0 +1,25 @@ + + +WDSWrapper: 繝。繧、繝ウ繝壹シ繧ク + + + + + +
+

WDSWrapper 繝峨く繝・繝。繝ウ繝

+

+

+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/struct_w_d_s_wrapper_callback_param.html b/man/WDS_Wrapper/html/struct_w_d_s_wrapper_callback_param.html new file mode 100644 index 00000000..4898beef --- /dev/null +++ b/man/WDS_Wrapper/html/struct_w_d_s_wrapper_callback_param.html @@ -0,0 +1,83 @@ + + +WDSWrapper: 讒矩菴 WDSWrapperCallbackParam + + + + + +
+

讒矩菴 WDSWrapperCallbackParam

WDS繝ゥ繝繝代シ縺悟他縺ウ蜃コ縺吶さ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ォ荳弱∴繧峨l繧句シ墓焚逕ィ縺ョ讒矩菴 +[隧ウ邏ー] +

+#include <WDSWrapper.h> +

+ + + + + + + + + +

螟画焚

WDSWrapperCallback callback
 繧ウ繝シ繝ォ繝舌ャ繧ッ逋コ逕溯ヲ∝屏
WDSWrapperErrCode errcode
 繧ィ繝ゥ繝シ繧ウ繝シ繝
+


隱ャ譏

+WDS繝ゥ繝繝代シ縺悟他縺ウ蜃コ縺吶さ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ォ荳弱∴繧峨l繧句シ墓焚逕ィ縺ョ讒矩菴

讒矩菴

+ +
+ +
+ +

+繧ウ繝シ繝ォ繝舌ャ繧ッ逋コ逕溯ヲ∝屏 +

+ +

+

+ +

+ +
+ +

+繧ィ繝ゥ繝シ繧ウ繝シ繝 +

+ +

+

+


縺薙ョ讒矩菴薙ョ隱ャ譏弱ッ谺。縺ョ繝輔ぃ繧、繝ォ縺九i逕滓舌&繧後∪縺励◆: +
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/struct_w_d_s_wrapper_initialize_param.html b/man/WDS_Wrapper/html/struct_w_d_s_wrapper_initialize_param.html new file mode 100644 index 00000000..e998a8d8 --- /dev/null +++ b/man/WDS_Wrapper/html/struct_w_d_s_wrapper_initialize_param.html @@ -0,0 +1,143 @@ + + +WDSWrapper: 讒矩菴 WDSWrapperInitializeParam + + + + + +
+

讒矩菴 WDSWrapperInitializeParam

WDS_WrapperInitialize髢「謨ー縺ォ荳弱∴繧句晄悄蛹悶ヱ繝ゥ繝。繝シ繧ソ +[隧ウ邏ー] +

+#include <WDSWrapper.h> +

+ + + + + + + + + + + + + + + + + + +

螟画焚

u32 threadprio
 WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ョ蜆ェ蜈亥コヲ
u16 dmano
 WM繝ゥ繧、繝悶Λ繝ェ縺御スソ逕ィ縺吶kDMA逡ェ蜿キ
WDSWrapperCallbackFunc callback
 WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨°繧牙他縺ウ蜃コ縺輔l繧九さ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ク縺ョ繝昴う繝ウ繧ソ
WDSWrapperAlloc alloc
 WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ
WDSWrapperFree free
 WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ
+


隱ャ譏

+WDS_WrapperInitialize髢「謨ー縺ォ荳弱∴繧句晄悄蛹悶ヱ繝ゥ繝。繝シ繧ソ

讒矩菴

+ +
+ +
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨ョ蜆ェ蜈亥コヲ +

+ +

+

+ +

+ +
+ +

+WM繝ゥ繧、繝悶Λ繝ェ縺御スソ逕ィ縺吶kDMA逡ェ蜿キ +

+ +

+

+ +

+ +
+ +

+WDS繧ウ繝ウ繝医Ο繝シ繝ォ繧ケ繝ャ繝繝峨°繧牙他縺ウ蜃コ縺輔l繧九さ繝シ繝ォ繝舌ャ繧ッ髢「謨ー縺ク縺ョ繝昴う繝ウ繧ソ +

+ +

+

+ +

+ +
+ +

+WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ +

+ +

+

+ +

+ +
+ +

+WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧「繝ュ繧ア繝シ繧ソ +

+ +

+

+


縺薙ョ讒矩菴薙ョ隱ャ譏弱ッ谺。縺ョ繝輔ぃ繧、繝ォ縺九i逕滓舌&繧後∪縺励◆: +
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/struct_w_d_s_wrapper_work.html b/man/WDS_Wrapper/html/struct_w_d_s_wrapper_work.html new file mode 100644 index 00000000..bd765b73 --- /dev/null +++ b/man/WDS_Wrapper/html/struct_w_d_s_wrapper_work.html @@ -0,0 +1,301 @@ + + +WDSWrapper: 讒矩菴 WDSWrapperWork + + + + + +
+

讒矩菴 WDSWrapperWork

WDS繝ゥ繝繝代シ縺ョ繝ッ繝シ繧ッ鬆伜沺 +[隧ウ邏ー] +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

螟画焚

u8 * stack
 WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧ケ繧ソ繝繧ッ
OSThread thread
 WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧ケ繝ャ繝繝画ァ矩菴
OSMutex mutex
 WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶kmutex
u8 * wdswork
 WDS縺御スソ逕ィ縺吶k繝ッ繝シ繧ッ繧ィ繝ェ繧「
WDSBriefApInfo briefapinfo [WDS_APINFO_MAX]
 WDS繝ゥ繝繝代シ縺係DS繧剃スソ逕ィ縺励◆邨先棡繧呈シ邏阪☆繧矩伜沺
int briefapinfonum
 WDS繝ゥ繝繝代シ縺係DS繧剃スソ逕ィ縺励◆邨先棡繧呈シ邏阪☆繧矩伜沺
WDSWrapperInitializeParam initparam
 蛻晄悄蛹匁凾繝代Λ繝。繝シ繧ソ縺ョ繧ウ繝斐シ
WDSWrapperStateThreadState state
 WDS繝ゥ繝繝代シ縺ョ繧ケ繝繝シ繝
OSTick tickstart
 蜷遞ョ譎る俣貂ャ螳夂畑
BOOL terminate
 隗」謾セ髢句ァ九ヵ繝ゥ繧ー
BOOL idle
 髢捺ャ繧ケ繧ュ繝」繝ウ荳ュ譁ュ繝輔Λ繧ー
BOOL restart
 髢捺ャ繧ケ繧ュ繝」繝ウ蜀埼幕繝輔Λ繧ー
OSDeliverArgInfo deliverinfo
 TWL逕ィ繧「繝励Μ髢灘シ墓焚繝ッ繝シ繧ッ繧ィ繝ェ繧「
+


隱ャ譏

+WDS繝ゥ繝繝代シ縺ョ繝ッ繝シ繧ッ鬆伜沺

讒矩菴

+ +
+
+ + + + +
u8* WDSWrapperWork::stack
+
+
+ +

+WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧ケ繧ソ繝繧ッ +

+ +

+

+ +

+
+ + + + +
OSThread WDSWrapperWork::thread
+
+
+ +

+WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶k繧ケ繝ャ繝繝画ァ矩菴 +

+ +

+

+ +

+
+ + + + +
OSMutex WDSWrapperWork::mutex
+
+
+ +

+WDS繝ゥ繝繝代シ縺御スソ逕ィ縺吶kmutex +

+ +

+

+ +

+
+ + + + +
u8* WDSWrapperWork::wdswork
+
+
+ +

+WDS縺御スソ逕ィ縺吶k繝ッ繝シ繧ッ繧ィ繝ェ繧「 +

+ +

+

+ +

+
+ + + + +
WDSBriefApInfo WDSWrapperWork::briefapinfo[WDS_APINFO_MAX]
+
+
+ +

+WDS繝ゥ繝繝代シ縺係DS繧剃スソ逕ィ縺励◆邨先棡繧呈シ邏阪☆繧矩伜沺 +

+ +

+

+ +

+ +
+ +

+WDS繝ゥ繝繝代シ縺係DS繧剃スソ逕ィ縺励◆邨先棡繧呈シ邏阪☆繧矩伜沺 +

+ +

+

+ +

+ +
+ +

+蛻晄悄蛹匁凾繝代Λ繝。繝シ繧ソ縺ョ繧ウ繝斐シ +

+ +

+

+ +

+ +
+ +

+WDS繝ゥ繝繝代シ縺ョ繧ケ繝繝シ繝 +

+ +

+

+ +

+
+ + + + +
OSTick WDSWrapperWork::tickstart
+
+
+ +

+蜷遞ョ譎る俣貂ャ螳夂畑 +

+ +

+

+ +

+
+ + + + +
BOOL WDSWrapperWork::terminate
+
+
+ +

+隗」謾セ髢句ァ九ヵ繝ゥ繧ー +

+ +

+

+ +

+
+ + + + +
BOOL WDSWrapperWork::idle
+
+
+ +

+髢捺ャ繧ケ繧ュ繝」繝ウ荳ュ譁ュ繝輔Λ繧ー +

+ +

+

+ +

+
+ + + + +
BOOL WDSWrapperWork::restart
+
+
+ +

+髢捺ャ繧ケ繧ュ繝」繝ウ蜀埼幕繝輔Λ繧ー +

+ +

+

+ +

+
+ + + + +
OSDeliverArgInfo WDSWrapperWork::deliverinfo
+
+
+ +

+TWL逕ィ繧「繝励Μ髢灘シ墓焚繝ッ繝シ繧ッ繧ィ繝ェ繧「 +

+ +

+

+


縺薙ョ讒矩菴薙ョ隱ャ譏弱ッ谺。縺ョ繝輔ぃ繧、繝ォ縺九i逕滓舌&繧後∪縺励◆: +
+
WDSWrapper縺ォ蟇セ縺励※Thu Jun 26 22:00:52 2008縺ォ逕滓舌&繧後∪縺励◆縲  + +doxygen 1.5.6
+ + diff --git a/man/WDS_Wrapper/html/tab_b.gif b/man/WDS_Wrapper/html/tab_b.gif new file mode 100644 index 00000000..0d623483 Binary files /dev/null and b/man/WDS_Wrapper/html/tab_b.gif differ diff --git a/man/WDS_Wrapper/html/tab_l.gif b/man/WDS_Wrapper/html/tab_l.gif new file mode 100644 index 00000000..9b1e6337 Binary files /dev/null and b/man/WDS_Wrapper/html/tab_l.gif differ diff --git a/man/WDS_Wrapper/html/tab_r.gif b/man/WDS_Wrapper/html/tab_r.gif new file mode 100644 index 00000000..ce9dd9f5 Binary files /dev/null and b/man/WDS_Wrapper/html/tab_r.gif differ diff --git a/man/WDS_Wrapper/html/tabs.css b/man/WDS_Wrapper/html/tabs.css new file mode 100644 index 00000000..95f00a91 --- /dev/null +++ b/man/WDS_Wrapper/html/tabs.css @@ -0,0 +1,102 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + float : left; + width : 100%; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI.current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI.current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.navpath +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +}