Windows版 iTRONサービスコールの作成 (時間管理機能)
(その4)
	周期起動ハンドラを起動または停止するサービスコールは以下のとおりです。
| サービスコール名 | 説明 | 
|---|---|
| act_cyc | 周期起動ハンドラの活性制御を行います。(Ver3.0のみ)  | 
| sta_cyc | 周期起動ハンドラを起動します。(Ver4.0のみ)  | 
| stp_cyc | 周期起動ハンドラを停止します。(Ver4.0のみ)  | 
周期起動ハンドラの活性制御を行うには以下のサービスコールを使用します。
    ER 	act_cyc( HNO cycno, UINT cycact )
	
	| 引数 | 説明 | 
|---|---|
| cycno | 周期ハンドラ番号。  | 
| pk_dcyc | 
		 周期ハンドラの活性状態。 周期ハンドラの起動・停止を指定します。 
 TCY_INIを指定した場合は、周期カウンタを初期化します。  | 
| 戻り値 | 説明 | 
|---|---|
| E_OK | 正常終了。  | 
| E_ID | 範囲外の周期ハンドラID番号。  | 
| E_NOEXS | 指定した周期ハンドラID番号は登録されていない。  | 
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
 *  @brief  周期ハンドラの活性制御.
 *
 *  @param  [in]    cycno   周期ハンドラ番号.
 *  @param  [in]    cycact  周期ハンドラ活性情報.
 *
 *  @retval エラーコード.
 */
ER      act_cyc( HNO cycno, UINT cycact )
{
    ER ercd;
    wi_CommonLock();
    //! 周期ハンドラの起動/停止を設定する.
    ercd = wi_ActionCycleHadler( cycno,
                                ((cycact & TCY_ON ) != 0) ? TRUE : FALSE,
                                ((cycact & TCY_INI) != 0) ? TRUE : FALSE );
    wi_CommonUnlock();
    return ercd;
}
	
	
	
	周期ハンドラを起動するには以下のサービスコールを使用します。
    ER sta_cyc( ID cycid )
	
	| 引数 | 説明 | 
|---|---|
| cycid | 周期ハンドラID番号。  | 
| 戻り値 | 説明 | 
|---|---|
| E_OK | 正常終了。  | 
| E_ID | 範囲外の周期ハンドラID番号。  | 
| E_NOEXS | 指定した周期ハンドラID番号は登録されていない。  | 
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
 *  @brief  周期ハンドラの起動.
 *
 *  @param  [in]    cycid   周期ハンドラID番号.
 *
 *  @retval エラーコード.
 */
ER      sta_cyc( ID cycid )
{
    ER ercd;
    wi_CommonLock();
    //! 周期ハンドラを起動する.
    ercd = wi_ActionCycleHadler( cycid, TRUE, FALSE );
    wi_CommonUnlock();
    return ercd;
}
	
	引数を「周期ハンドラの起動」にして、周期起動ハンドラの活性制御関数を呼び出します。
周期起動ハンドラを停止するには以下のサービスコールを使用します。
    ER stp_cyc( ID cycid )
	
	| 引数 | 説明 | 
|---|---|
| cycid | 周期ハンドラID番号。  | 
| 戻り値 | 説明 | 
|---|---|
| E_OK | 正常終了。  | 
| E_ID | 範囲外の周期ハンドラID番号。  | 
| E_NOEXS | 指定した周期ハンドラID番号は登録されていない。  | 
・サービスコールのソースコードは以下のようになります。
/****************************************************************************/
/*!
 *	@brief	周期ハンドラの停止.
 *
 *	@param	[in]	cycid	周期ハンドラID番号.
 *
 *	@retval	エラーコード.
 */
ER		stp_cyc( ID cycid )
{
	ER ercd;
	wi_CommonLock();
	//! 周期ハンドラを停止する.
	ercd = wi_ActionCycleHadler( cycid, FALSE, FALSE );
	wi_CommonUnlock();
	return ercd;
}
	
	引数を「周期ハンドラの停止」にして、周期起動ハンドラの活性制御関数を呼び出します。
周期起動ハンドラの活性制御関数
周期起動ハンドラの活性制御関数のソースコードは以下のとおりです。
/****************************************************************************/
/*!
 *  @brief  周期ハンドラの活性制御.
 *
 *  @param  [in]    no      周期ハンドラ番号.
 *  @param  [in]    act     TRUE = 起動 / FALSE = 停止.
 *  @param  [in]    init    TRUE = 初期化要求.
 *
 *  @retval エラーコード.
 */
ER      wi_ActionCycleHadler( INT no, BOOL act, BOOL init )
{
    ER          ercd;
    WICYCOBJ    *p;
    //! 周期ハンドラ番号のオブジェクトを取得する.
    p = (WICYCOBJ *)wi_FindObject( no, TMAX_MAXCYC, ObjList, &ercd );
    if( !p ){
        return ercd;
    }
    //! 周期ハンドラの活性情報をセットする.
    p->Active = act;
    //! 周期カウンタを初期化する.
    if( init ){
        p->StartTime = wi_GetSystemTime();
    }
    return E_OK;
}
	
	周期起動ハンドラの活性制御関数は以下のような処理を行います。
- 引数で指定された周期ハンドラのID番号に該当する周期ハンドラ・オブジェクトを取り出します。
 - 周期ハンドラの活性情報(起動または停止情報)をオブジェクトに設定します。
 - 周期カウンタを初期化する場合は、オブジェクトの周期カウンタをクリアします。