Windows版 iTRONサービスコールの作成 (ランデブポート)
(その8)

ランデブポートの状態を参照する

ランデブポートの状態を参照するサービスコールは以下のとおりです。


サービスコール名説明
ref_por

ランデブポートの状態を取得します。

ref_rdv

ランデブの状態を取得します。

※ Ver3.0と4.0では関数名は同じですが、引数の順番が逆になりますので注意してください。

※ ref_rdv() は Ver4.0のみサポートします。

ランデブポートの状態を取得する (Ver3.0)

Ver3.0でランデブポートの状態を取得するには以下のサービスコールを使用します。



    ER ref_por( T_RPOR *pk_rpor, ID porid )
	

引数説明
pk_rpor

ランデブポート状態を格納する構造体のポインタ。

porid

ランデブポートID番号。

戻り値説明
E_OK

正常終了。

E_ID

範囲外のランデブポートID番号。

E_NOEXS

指定したランデブポートID番号は登録されていない。

E_PAR

パラメータエラー。


ランデブポート状態を格納する構造体(T_RPOR)は以下のとおりです。

メンバ名説明
exinf拡張情報。
wtsk呼出待ちタスクの有無。
atsk受付待ちタスクの有無。


・サービスコールのソースコードは以下のようになります。


/****************************************************************************/
/*!
 *  @brief  ランデブポートの状態参照.
 *
 *  @param  [out]   pk_rpor ランデブポート状態を格納する構造体のポインタ.
 *  @param  [in]    porid   ランデブポートID番号.
 *
 *  @retval エラーコード.
 */
ER      ref_por( T_RPOR *pk_rpor, ID porid )
{
    ER          ercd;
    WIPORSTAT   sts;

    //! 引数が不正な場合はエラーにする.
    if( !pk_rpor ){
        return E_PAR;
    }
    wi_CommonLock();

    //! ランデブポートの状態を取得する.
    ercd = wi_RefarenceRendPort( porid, &sts );
    if( ercd == E_OK ){
        pk_rpor->exinf = sts.ExtInfo;
        pk_rpor->wtsk  = (BOOL_ID)sts.CalWaitId;
        pk_rpor->atsk  = (BOOL_ID)sts.AcpWaitId;
    }
    wi_CommonUnlock();
    return ercd;
}
	

ランデブポート状態を格納する構造体のポインタがNULLの場合エラーにします。

ランデブポート状態を取得する関数を呼び出して現在のランデブポートの状態を取得し引数の構造体に格納します。

ランデブポートの状態を取得する (Ver4.0)

Ver4.0でランデブポートの状態を取得するには以下のサービスコールを使用します。



    ER ref_por( ID porid, T_RPOR *pk_rpor )
	

引数説明
porid

ランデブポートID番号。

pk_rpor

ランデブポート状態を格納する構造体のポインタ。

戻り値説明
E_OK

正常終了。

E_ID

範囲外のランデブポートID番号。

E_NOEXS

指定したランデブポートID番号は登録されていない。

E_PAR

パラメータエラー。


ランデブポート状態を格納する構造体(T_RPOR)は以下のとおりです。

メンバ名説明
ctskidランデブポートの呼出待ち行列の先頭のタスクのID番号。
atskidランデブポートの受付待ち行列の先頭のタスクのID番号。


・サービスコールのソースコードは以下のようになります。


/****************************************************************************/
/*!
 *  @brief  ランデブポートの状態参照.
 *
 *  @param  [in]    porid   ランデブ・ポートID番号.
 *  @param  [out]   pk_rpor ランデブポート状態を格納する構造体のポインタ.
 *
 *  @retval エラーコード.
 */
ER      ref_por( ID porid, T_RPOR *pk_rpor )
{
    ER          ercd;
    WIPORSTAT   sts;

    //! 引数が不正な場合はエラーにする.
    if( !pk_rpor ){
        return E_PAR;
    }
    wi_CommonLock();

    //! ランデブポートの状態を取得する.
    ercd = wi_RefarenceRendPort( porid, &sts );
    if( ercd == E_OK ){
        pk_rpor->ctskid = sts.CalWaitId;
        pk_rpor->atskid = sts.AcpWaitId;
    }
    wi_CommonUnlock();
    return ercd;
}
	

ランデブポート状態を格納する構造体のポインタがNULLの場合エラーにします。

ランデブポート状態を取得する関数を呼び出して現在のランデブポートの状態を取得し引数の構造体に格納します。

ランデブポートの状態取得関数

ランデブポートの状態取得関数のソースコードは以下のとおりです。


/****************************************************************************/
/*!
 *  @brief  ランデブポートの状態参照.
 *
 *  @param  [in]    id      ランデブポートID番号.
 *  @param  [out]   sts     ランデブポート状態を格納する構造体のポインタ.
 *
 *  @retval エラーコード.
 */
ER      wi_RefarenceRendPort( INT id, WIPORSTAT *sts )
{
    ER          ercd;
    WIPOROBJ    *p;

    //! ランデブポートIDのオブジェクトを取得する.
    p = (WIPOROBJ *)wi_FindObject( id, TMAX_MAXPOR, PortList, &ercd );
    if( !p ){
        return ercd;
    }
    //! ランデブポートの状態を構造体にセットする.
    sts->CalWaitId = wi_GetWaitTaskListFirstId( p->CalWaitQue );
    sts->AcpWaitId = wi_GetWaitTaskListFirstId( p->AcpWaitQue );
    sts->ExtInfo   = p->ExtInfo;
    return E_OK;
}
	

ランデブポートの状態取得関数は以下のような処理を行います。

  • 引数で指定されたランデブポートID番号に該当するランデブポート・オブジェクトを取り出します。
  • ランデブ呼び出し待ち行列から先頭のタスクのID番号を取り出して、引数の構造体にセットします。
  • ランデブ受け付け待ち行列から先頭のタスクのID番号を取り出して、引数の構造体にセットします。

ランデブの状態を取得する (Ver4.0のみ)

ランデブの状態を取得するには以下のサービスコールを使用します。



    ER ref_rdv( RDVNO rdvno, T_RRDV *pk_rrdv )
	

引数説明
rdvno

ランデブ番号。

pk_rrdv

ランデブ状態を格納する構造体のポインタ。

戻り値説明
E_OK

正常終了。

E_NOEXS

指定したランデブ番号は登録されていない。

E_PAR

パラメータエラー。


ランデブ状態を格納する構造体(T_RRDV)は以下のとおりです。

メンバ名説明
wtskidランデブ終了待ち状態のタスクのID番号。


・サービスコールのソースコードは以下のようになります。


/****************************************************************************/
/*!
 *  @brief  ランデブ状態の参照.
 *
 *  @param  [in]    rdvno   ランデブ番号.
 *  @param  [out]   pk_rrdv ランデブ状態を格納する構造体のポインタ.
 *
 *  @retval エラーコード.
 */
ER      ref_rdv( RDVNO rdvno, T_RRDV *pk_rrdv )
{
    ER          ercd;
    WIRDVSTAT   sts;

    //! 引数が不正な場合はエラーにする.
    if( !pk_rrdv ){
        return E_PAR;
    }
    wi_CommonLock();

    //! ランデブ状態を取得する.
    ercd = wi_RefarenceRendStat( rdvno, &sts );
    if( ercd == E_OK ){
        pk_rrdv->wtskid = sts.WaitId;
    }
    wi_CommonUnlock();
    return ercd;
}
	

ランデブ状態を格納する構造体のポインタがNULLの場合エラーにします。

ランデブ状態を取得する関数を呼び出して現在のランデブ状態を取得し引数の構造体に格納します。

ランデブ状態取得関数

ランデブ状態を取得する関数のソースコードは以下のとおりです。


/****************************************************************************/
/*!
 *  @brief  ランデブ状態の参照.
 *
 *  @param  [in]    no      ランデブ番号.
 *  @param  [out]   sts     ランデブ状態を格納する構造体のポインタ.
 *
 *  @retval エラーコード.
 */
ER      wi_RefarenceRendStat( INT no, WIRDVSTAT *sts )
{
    ER          ercd;
    WIRDVOBJ    *p;

    //! ランデブ番号のオブジェクトを取得する.
    p = (WIRDVOBJ *)wi_FindObject( no, TMAX_MAXRDV, RdvList, &ercd );
    if( !p ){
        return ercd;
    }
    //! ランデブの状態を構造体にセットする.
    sts->WaitId = p->TaskId;
    return E_OK;
}
	

ランデブ状態を取得する関数は以下のような処理を行います。

  • 該当するランデブ番号のランデブ・オブジェクトをランデブ・リストから取り出します。
  • ランデブ終了待ちのタスクのID番号を取り出して、引数の構造体にセットします。


Windowsは米国Microsoft Corporationの登録商標です。