/*****************************************************************************
*
* FILE NAME:		IoSmpl.c
*
* DESCRIPTION:		RT-edge I/O sample service for INtime
*					I/O入出力サービスを想定したサンプルサービスを提供します
*					
*
\*****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include "edgeCode.h"		// RT-edge サービス共通定義/関数ヘッダ追加

/*****************************************************************************
*
* FUNCTION:			main
*
* DESCRIPTION:		メイン
*
*
\*****************************************************************************/
int			main(int argc, char* argv[])
{
	EVENTINFO		ei;						// INtimeシステムイベントの処理実装の為定義

	memset(&MyState, 0, sizeof(MyState));	// ステータス用構造体初期化
	InitService(&MyState);					// サービスの初期化 関数呼び出し

	SynchronizeRtLoader();					// サービス準備完了の通知 関数呼び出し

	while (1)								// イベント処理待機
	{
		RtNotifyEvent(ALL_NOTIFICATIONS, WAIT_FOREVER, &ei);	// INtimeシステムイベントの処理分岐
		switch (ei.dwNotifyType)
		{
		case TERMINATE:						// Intexからの削除指令
			KillService(&MyState);			// サービス削除（プロセス停止）
			EgFinalize();					// Edgeシステム分離(必須 Edgeフレームワーク後処理)
			exit(0);						// サービスプロセス削除
			break;
		case KERNEL_SHUTDOWN_PENDING:		// INtimeカーネルの停止指令
			KillService(&MyState);			// サービス削除（プロセス停止）
			EgFinalize();					// Edgeシステム分離(必須 Edgeフレームワーク後処理)
			exit(0);						// サービスプロセス削除
			break;
		case NT_BLUESCREEN:					// Windowsクラッシュ発生
			break;
		}
	}
	return 0;
}

