#ifndef _H_H#define _H_H/**//************************ インクルード*************************/#include <Artic.h>/**//************************ コールバック関数型定義*************************//**//* クラス宣言 */typedef struct _Hard...{ /**//* 共通プロパティ */ ArticObjectProperty(); /**//* スイッチON状態コールバック */ ArticCallback OnArticCallback; /**//* スイッチOFF状態コールバック */ ArticCallback OffArticCallback; /**//* スイッチON状態コールバック要求 */ ArticCallbackRequest HardOnCallbackRequest; /**//* スイッチOFF状態コールバック要求 */ ArticCallbackRequest HardOffCallbackRequest;}CHard;/**//* クラス・コンストラクタ *//**//*初期化*/extern void Hard_Initial(CHard*);/**//*起動*/extern void Hard_objectStartup(CHard*);/**//*Setプロパティ*/extern void Hard_SetProperty(CHard*);/**//****************************************************************************** Public メソッド宣言******************************************************************************//**//*---------------------------------------------------------------------------- 外部の刺激に対して Trigger をセットしない関数 Application Method----------------------------------------------------------------------------*//**//*-------------------------NewCallBack--------------------------------------*//**//* スイッチON通知先登録 */extern void Hard_SetOnArticCallback(CHard*,ArticCallbackRequest*, CArticObjectCell*,int);/**//* スイッチON通知先抹消 */extern void Hard_ResetOnArticCallback(CHard*,ArticCallbackRequest*);/**//* スイッチOFF通知先登録 */extern void Hard_SetOffArticCallback(CHard*,ArticCallbackRequest*, CArticObjectCell*,int);/**//* スイッチOFF通知先抹消 */extern void Hard_ResetOffArticCallback(CHard*,ArticCallbackRequest*);/**//*---------------------------------------------------------------------------- 外部の刺激に対して Trigger をセットする関数 Application Method----------------------------------------------------------------------------*/extern void On(CHard*);extern void Off(CHard*);/**//************************ イベント*************************/enum _CHard_Event ...{ Hard_Event_OFF, /**//* スイッチOFF */ Hard_Event_ON, /**//* スイッチON */ CHard_Event_MAX};/**//****************************************************************************** Private メソッド宣言******************************************************************************/#endif /*Hard_H */ #define artic_version_1_5/**//************************ インクルード*************************/#include "HardSW.h"/**//************************ 状態*************************/enum _CHard_STATE ...{ Hard_STATE_OFF, /**//* スイッチOFF (S0) */ Hard_STATE_ON, /**//* スイッチON (S1) */ CHard_STATE_MAX};/**//* 応答関数型 */typedef void (*Hard_STATEProcedure)(CHard*, EvtInfo*);/**//****************************************************************************** Public メソッド******************************************************************************//**//*---------------------------------------------------------------------------- 外部の刺激に対して Trigger をセットしない関数 Application Method----------------------------------------------------------------------------*//**//*---------------------------------------------------------------------------- 入退場処理----------------------------------------------------------------------------*//**//*-------------------------NewCallBack--------------------------------------*//**//* スイッチON通知先登録 */void Hard_SetOnArticCallback(CHard* this,ArticCallbackRequest* callBackRequest, CArticObjectCell* client,int Hard_Event)...{ ArticCallback_setCallback(&this->OnArticCallback,callBackRequest,client,Hard_Event);}/**//* スイッチON通知先抹消 */void Hard_ResetOnArticCallback(CHard* this,ArticCallbackRequest* callBackRequest)...{ ArticCallback_resetCallback(&this->OnArticCallback,callBackRequest);}/**//* スイッチOFF通知先登録 */extern void Hard_SetOffArticCallback(CHard* this,ArticCallbackRequest* callBackRequest, CArticObjectCell* client,int Hard_Event)...{ ArticCallback_setCallback(&this->OffArticCallback,callBackRequest,client,Hard_Event);}/**//* スイッチOFF通知先抹消 */void Hard_ResetOffArticCallback(CHard* this,ArticCallbackRequest* callBackRequest)...{ ArticCallback_resetCallback(&this->OffArticCallback,callBackRequest);}/**//*---------------------------------------------------------------------------- 外部の刺激に対して Trigger をセットする関数 Application Method----------------------------------------------------------------------------*/void On(CHard* this)...{ SetTrig(this,Hard_Event_ON);}void Off(CHard* this)...{ SetTrig(this,Hard_Event_OFF);}/**//****************************************************************************** Private メソッド******************************************************************************//**//*---------------------------------------------------------------------------- Hard_STATE - Trigger の応答関数 Hard_STATE Procedure----------------------------------------------------------------------------*//**//***************************************** イベント:スイッチON 状態:元状態からスイッチONへ(S1) [f_On]******************************************/static void f_On(CHard* this,EvtInfo* pInfo)...{ SetState(this,Hard_STATE_ON); ArticCallback_callback(&this->OnArticCallback);}/**//***************************************** イベント:スイッチOFF 状態:元状態からスイッチOFFへ(S0) [f_Off]******************************************/static void f_Off(CHard* this,EvtInfo* pInfo)...{ SetState(this,Hard_STATE_OFF); ArticCallback_callback(&this->OffArticCallback);}/**//***************************************** 何もしない [f_NON]******************************************/static void f_NON(CHard* this,EvtInfo* pInfo)...{}/**//*---------------------------------------------------------------------------- 状態遷移関数テーブル Triggerと Hard_STATEの値から実行する関数を決定する関数テーブル----------------------------------------------------------------------------*/static const Hard_STATEProcedure Hard_STATEMatrix[][CHard_Event_MAX] =...{ /**//* スイッチOFF(S0) */ ...{ /**//*スイッチOFF */ f_NON, /**//*スイッチON */ f_On, }, /**//* スイッチON(S1)*/ ...{ /**//*スイッチOFF */ f_Off, /**//*スイッチON */ f_NON, }};static const ArticClass HardProperty =...{ ARTIC_CLASS_PROPERTY, 0, /**//* Hardクラスのメジャー・バージョン */ 0, /**//* Hardクラスのマイナー・バージョン */ &(Hard_STATEMatrix[0][0]), (char)CHard_STATE_MAX, (char)CHard_Event_MAX};/**//* クラス・コンストラクタ *//**//*初期化*/void Hard_Initial(CHard* this)...{ /**//* オブジェクトのインストール */ InstallObject(this, &HardProperty); ArticCallback_init(&this->OnArticCallback); ArticCallback_init(&this->OffArticCallback);}/**//*Setプロパティ*/void Hard_SetProperty(CHard* this)...{ }/**//*起動*/void Hard_objectStartup(CHard* this)...{} /**//* コールバックの設定 */void ArticCallback_setCallback(ArticCallback *this, ArticCallbackRequest *request, CArticObjectCell *client, int event)...{ if ((request->MagicNo) != ArticCallback_MagicNo) ...{ request->category = (char)ArticCallbackRequestCategory_MULTI; request->client = client; request->event = event; request->MagicNo = ArticCallback_MagicNo; request->ServerObj = (void*)this; if (*this == ArticCallback_EMPTY) ...{ *this = request; request->next = request; request->previous = request; } else ...{ ArticCallbackRequest *top = *this; if (top->category != ArticCallbackRequestCategory_SINGLE) ...{ request->next = top; request->previous = top->previous; top->previous->next = request; top->previous = request; } else ...{ } } } else ...{ /**//* このセルは多重登録されました。 */ if ((request->ServerObj) == (void*)this) ...{ } else ...{ /**//* このセルは違うサーバーで使用されています。 */ } ArticCallback_resetCallback(this,request); /**//* セルが多重登録された場合は、一度削除して再登録 */ ArticCallback_setCallback(this, request,client, event); }} /**//* コールバックの実行 */void ArticCallback_callback(ArticCallback *this)...{ ArticCallbackRequest *position = *this; while (position != ArticCallback_EMPTY) ...{ SetTrig(position->client, position->event); switch (position->category) ...{ case ArticCallbackRequestCategory_SINGLE: break; case ArticCallbackRequestCategory_SINGLESHOT: if (position == *this) ...{ ArticCallback_resetCallback(this, position); position = position->next; continue; } else ...{ ArticCallback_resetCallback(this, position); position = position->next; } break; case ArticCallbackRequestCategory_MULTI: position = position->next; break; } if (position == ArticCallback_SENTRY) ...{ break; } }}