void far MDM_FactoryFunctionExit(void)
{
	if (tskno_MDM_FskTest != 0xFFFF) {
		del_tsk(&tskno_MDM_FskTest);
	}
	if (tskno_MDM_PixTest != 0xFFFF) {
		del_tsk(&tskno_MDM_PixTest);
	}

/* #if defined(POPLAR_F) */
#if (PRO_VOICE_ANSWER == ENABLE)
 #if (PRO_MODEM == R288F)	/* ORANGE以外のモデム Modified by J.Kishida 2002/09/09 */
	if (tskno_MDM_VoiceTest != 0xFFFF) {
		del_tsk(&tskno_MDM_VoiceTest);
	}
	SelectMELorTX();

	MDM_AnswerLSI_Initialize();
 #endif
#endif

	MDM_SoftResetModem();

	MDM_FactoryFuncRelayReSet();
	exi_tsk();
}
/*************************************************************************
	module		:[原稿繰り込みタスクからのメッセージ処理]
	function	:[]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[
		コンパイル時の"out of heap space"解消のために
		メッセージ処理を抜き出しました。
	]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1996/10/12]
	author		:[小谷正樹]
*************************************************************************/
void	MAN_FromDocumentIn(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	MESSAGE_t	MainTaskMessage;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	snd_msg(mbxno.SCN_Task, &MainTaskMessage); /** 同期用メッセージ */
	if (tskno_DocumentInTask != 0xffff) {
		del_tsk(&tskno_DocumentInTask); /** 原稿繰り込みタスクの停止 */
	}
	SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FEED_IN;
	SCN_StopDS1OffDetect = 0;			/* 1996/08/14 By N.Sakamoto */
	switch (doc_message) {
	case MSG_DOCUMENT_IN_SETUP:
		break;
	case MSG_DOCUMENT_IN_NOTHING: /** 原稿引き抜き処理 */
		if (!(SYS_MachineStatus[SYS_RESOURCE_STATUS] & SYS_SCANNER_BUSY)
		 && !(SYS_MachineStatus[SYS_MACHINE_STATUS] & SYS_FEED_IN)) {
			SCN_Init();
			if( tskno_SCN_GearBackLashTask == 0xffff ) {
				SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;
				cre_tsk(&tskno_SCN_GearBackLashTask, TSK_SCN_GEARBACKLASHTASK, 0 );
			}
			/*	SCN_GearBackLashTaskの二重Cleateと原稿繰込動作が起動されない状態の防止 5 lines Insert By N.S. 1996/05/07 */
			else{
				del_tsk(&tskno_SCN_GearBackLashTask);
				SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;
				cre_tsk(&tskno_SCN_GearBackLashTask, TSK_SCN_GEARBACKLASHTASK, 0 );
			}
		}
		break;
	case MSG_DOCUMENT_IN_ERROR: /** 繰り込み不良時のエラー処理 */
		SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR; /** フィード・エラーをセット */
		break;
	case MSG_DOCUMENT_IN_LAMP_ERROR: /* ランプ・エラー時の処理 */
		SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_LAMP_ERROR; /** ランプ・エラーをセット */
		break;
	default: /** あり得ない */
		break;
	}
}
void MDM_FactoryStopCheck(void)
{
	MESSAGE_t			*msg;
	switch (SYS_FactoryFuncStatus) {
	case TEST_TONE:
		MDM_SingleToneOff();
		break;
	case TEST_FSK:
		SYS_PixStopFlag = 1;
		rcv_msg(mbxno.FIP, &msg);
		if (tskno_MDM_FskTest != 0xFFFF) {
			del_tsk(&tskno_MDM_FskTest);
		}
		MDM_SetIO(POS_RTS,OFF);
		break;
	case TEST_G3:
		SYS_PixStopFlag = 1;
		rcv_msg(mbxno.FIP, &msg);
		if (tskno_MDM_PixTest != 0xFFFF) {
			del_tsk(&tskno_MDM_PixTest);
		}
		MDM_SetIO(POS_RTS,OFF);
		break;
/* #if defined(POPLAR_F) */
#if (PRO_VOICE_ANSWER == ENABLE) && (PRO_MODEM == R288F)	/* NTT音声応答 && ORANGE以外のモデム Modified by J.Kishida 2002/09/09 */
	case TEST_VOICE:
		SelectMELorTX();
		SYS_PixStopFlag = 1;
		rcv_msg(mbxno.FIP, &msg);
		if (tskno_MDM_VoiceTest != 0xFFFF) {
			del_tsk(&tskno_MDM_VoiceTest);
		}
		break;
	case TEST_VOICE2:
		StopSendingMelodyToLine();
		break;
#else
	case TEST_VOICE:
		StopSendingMelodyToLine();
		break;
#endif
	case TEST_V34:
		MDM_SetIO(POS_DTR,OFF);
		MDM_SetIO(POS_L3ACT,OFF);
		MDM_SetIO(POS_EXL3,OFF);
		MDM_SetIO(POS_NEWC,ON);
		break;
	default:
		break;
	}
	wai_tsk(10);	/* 100ms */
}
/*************************************************************************
	module		:[ギア・バック・ラッシュタスクからのメッセージ処理]
	function	:[]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[
		コンパイル時の"out of heap space"解消のために
		メッセージ処理を抜き出しました。
	]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1996/10/12]
	author		:[小谷正樹]
*************************************************************************/
void	MAN_FromSCN_GearBackLashTask(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	MESSAGE_t	MainTaskMessage;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	GearBackLashRequest = FALSE;

	/* タイムアウト発生時の再起動処理  1997/05/09 s.takeuchi */
	CMN_DisableInterrupt();
	GearBackLashTimer = 0;
	if (GearBackLashTimeout) {
		GearBackLashTimeout = FALSE;
		if (GearBackLashRetryCount > 0) {
			GearBackLashRequest = TRUE;
		}
	}
	else {
		GearBackLashRetryCount = 0;
	}
	CMN_EnableInterrupt();

	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	snd_msg(mbxno.SCN_GearBackLashTask, &MainTaskMessage); /** Jan.24,1995 同期用メッセージ */
	if (tskno_SCN_GearBackLashTask != 0xffff) {
		del_tsk(&tskno_SCN_GearBackLashTask);	/** ギア・バック・ラッシュ・タスクの停止	*/
	}
	switch (doc_message) {
	case MSG_SCN_GEAR_BACK_LASH_END:
		SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY);
		break;
	default:
		break;
	}

	/* ギアバックラッシュ中にSCANNER_BUSYをクリアさせないため追加  1997/05/10 s.takeuchi */
	SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~(SYS_SCANNER_GEAR_BACKLASH);

}
void MAN_IdleTask(void) /* 250,1 */
{
	cre_sem(&semno.rtc);
	cre_sem(&semno.lcd);
	cre_sem(&semno.prn_serial);

	cre_tsk(&tskno_NCU_Task,TSK_NCU_TASK,0);
	del_tsk(&tskno_NCU_Task);

	while (1) ;
	cre_tsk(&tskno_OPR_KeyTask,TSK_OPR_KEYTASK,0);
	cre_tsk(&tskno_CMN_BuzzerTask,TSK_CMN_BUZZERTASK,0);
	cre_tsk(&tskno_MAN_DocumentInTask,TSK_MAN_DOCUMENTINTASK,0);
	cre_tsk(&tskno_PRN_CheckTonerTask,TSK_PRN_CHECKTONERTASK,0);
}
/*************************************************************************
	module		:[原稿排出タスクからのメッセージ処理]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1996/10/12]
	author		:[小谷正樹]
*************************************************************************/
void	MAN_FromDocumentOut(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	MESSAGE_t	MainTaskMessage;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	snd_msg(mbxno.SCN_Task, &MainTaskMessage); /** 同期用メッセージ */
	if (tskno_DocumentOutTask != 0xffff) {
		del_tsk(&tskno_DocumentOutTask); /** 原稿排出タスクの停止 */
	}
	SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FEED_OUT;
	SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;
	CMN_ResetMemoyFeederTx(); /** Aug.24,1994 QAT */
	switch (doc_message) {
	case MSG_DOCUMENT_OUT_OK:
		break;
	case MSG_DOCUMENT_OUT_ERROR:
		/* ADFカバー開の時はFEED_ERRORを立てない  1996/10/31 s.takeuchi */
		if (!(SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_SCANNER_OPEN)) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR; /** フィードエラー */
		}
	case MSG_DOCUMENT_OUT_NEXTPAGE_OK:/* このようなエラーは無い(桐には)*/
		break;
	case MSG_DOCUMENT_OUT_NEXTPAGE_ERROR:
		SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR; /*** フィード・エラーをセット */
		break;
	}

	/*	ICHOUでのADF原稿排出時はミラーは待機位置にあるはずなので、
	**	原稿排出タスク終了処理ではギアバックラッシュを予約するだけで良い
	**		1996/08/10 s.takeuchi
	*/
	GearBackLashRequest = TRUE;	/** ギアバックラッシュ予約する */	/* 1996/07/24 s.takeuchi */

}
/*************************************************************************
	module		:[原稿排出テストタスクからのメッセージ処理]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1997/05/23]
	author		:[野瀬敏弘]
*************************************************************************/
void MAN_FromSCN_DocOutTestTask(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	MESSAGE_t	MainTaskMessage;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	snd_msg(mbxno.SCN_Task, &MainTaskMessage); /** 同期用メッセージ */

	switch (doc_message) {
	case MSG_DOC_OUT_COVER_ERROR:
		SYS_MachineStatus[SYS_COVER_STATUS] |= SYS_COVER_SCANNER_OPEN;
		break;
	case MSG_DOC_OUT_FEED_ERROR:
		SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR;
		break;
	case MSG_DOC_OUT_COMPLETE:
	default:
		break;
	}

	/* スキャナを開放 */
	SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FEED_OUT;
	SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;

	/* 原稿排出テストタスクの削除 */
	if (tskno_SCN_DocumentStoreTask != 0xFFFF) {
		del_tsk(&tskno_SCN_DocumentStoreTask);
	}

	/* ギアバックラッシュの予約 */
	GearBackLashRequest = TRUE;
}
/*************************************************************************
	module		:[サービスファンクション用FSK送出]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	date		:[1994/05/06]
	author		:[曽根岡拓]
*************************************************************************/
void  MDM_FskTxTask(UBYTE *fsk_type)
{
	MESSAGE_t	Modem;

	UBYTE	loop_flg;

	loop_flg = 1;	/**	ループ制御フラグを1に設定	*/
	MDM_ModemInitialize();	/**	モデムワークエリアクリア	*/
	InitializeModemWork();

#if (PRO_ENERGY_SAVE == ENABLE)	/* トーナルテストFSKモードで信号送出時間が短い by J.Kishida 2002/10/11 */
	if (SYS_HaltClock == FALSE) {	/* 現在クロックが停止していて */
		HaltClockOn();
		wai_tsk(1); 					/* クロックが出始めてから最低0.6us待ってサブリセット解除 */
		SubResetOff();
		SYS_HaltClock = TRUE;			/* クロックが供給されていることを示すフラグ */
	}
#endif

	/*
	** ROCKWELL製 28.8K
	*/
	/* モデム救済タスク起動 By O.Kimoto 1998/02/03 */
	if (tskno_MDM_ModemRecoverTask == 0xffff) {
		cre_tsk(&tskno_MDM_ModemRecoverTask, TSK_MDM_MODEMRECOVERTASK, 0);
	}

	/* Added by H.Kubo 1997/12/25 */
	/* 通信中でないので、FCM_PtnrChk_T23Attenation() はメモリスイッチの値を
	** 反映してない。そのため、メモリスイッチの値を直接参照して送出レベルを設定する。
	*/
	MDM_TransmitLevelSet(SYS_MemorySwitch[11] & ATTENATION);


	/* スピーカーの設定 1997/03/18 Y.Murata */
	if (CHK_LineMonitor()) {
		MDM_SetVolumeAttenuationLevel(SYS_VOLUME_MAXIMUM);
	}

	ModemTypeSet(BPS300_V21);	/**	モデムタイプをFSKに設定	*/
	ModemBlock.Chain = CHAIN_OFF;

	ServiceFuncTx = TRUE;	/**	サービスファンクション用送出をON	*/

	if (*fsk_type == FSK_WHITE) {	/**	FSK WHITE送出の時	*/
		SetClear((UBYTE *)&MDM_ModemBuffer[0][0], MODEM_BUFFER_LENGTH, 0x00);	/**	モデムバッファ、0x00セット	*//** 256 Bytes **/
	}
	else if (*fsk_type == FSK_W1_B1) {	/* FSK_W1_B1 1999/12/27 Y.Murata */
		SetClear((UBYTE *)&MDM_ModemBuffer[0][0], MODEM_BUFFER_LENGTH, 0xaa);	/**	モデムバッファ、0xAAセット	*//** 256 Bytes **/
	}
	else {	/**	FSK BLACK送出の時	*/
		SetClear((UBYTE *)&MDM_ModemBuffer[0][0], MODEM_BUFFER_LENGTH, 0xff);	/**	モデムバッファ、0xFFセット	*//** 256 Bytes **/
	}

	TxFskOpen();	/**	FSK送信オープン	*/

	while(loop_flg) {	/**	ループ制御フラグが1の時	*/
		ServiceFuncTx = TRUE;	/**	サービスファンクション用送出をON	*/
#if (PRO_CLASS1 == ENABLE) /* Changed by H.Kubo 1998/03/04 */
		TxFskWrite(&MDM_ModemBuffer[0][0], MDM_ModemDmaSize);	/**	FSK送信モデムライト	*//** 256 Bytes **/
#else
		TxFskWrite(&MDM_ModemBuffer[0][0], MODEM_DMA_SIZE);	/**	FSK送信モデムライト	*//** 256 Bytes **/
#endif
		while (1) {	/**	無限ループ	*/
			if (ServiceFuncTx == FALSE) {	/**	サービスファンクション用送出OFFの時	*/
				break;
			}
			else if (SYS_PixStopFlag == 1) {	/**	送出ストップの時	*/
				ModemControl.Status |= STAT_EMPTYPT;	/**	モデムステータス、最終フレーム登録完了	*/
				loop_flg = NO;	/**	ループ制御フラグを0に設定	*/
				break;
			}
			wai_tsk(50/10);	/**	タスクウェイト50ms	*/
		}
	}
	/*	モデム割り込み監視タスク終了	*/
	if (tskno_ModemInterrupt != 0xffff) {
		del_tsk(&tskno_ModemInterrupt);	/**	モデム割り込み監視タスク終了	*/
	}

	/*	送信フレーム監視タスク終了	*/
	if (tskno_TxFskControl != 0xffff) {
		del_tsk(&tskno_TxFskControl);	/**	送信フレーム監視タスク終了	*/
	}

	/*	モデムバッファ−>モデムDMA終了	*/
	/* Modified by H. Kubo for POPLAR_H, 1997/06/17 */
	DMA_RequestMask(DMA_CH_TX);	/**	モデムバッファ−>モデムDMA終了	*/

	/*	モデムバッファセマフォリセット	*/
	ResetModemBufferSem();	/**	モデムバッファセマフォリセット	*/

	/*	モデムクローズ処理	*/

	/* add 2line 1996/12/12 Y.M */
	MDM_SetIO(POS_RTS,OFF);
	wai_tsk(3);		/* at least 15ms */

	MDM_InitialConfig();	/**	モデムクローズ処理	*/

	/*
	** ROCKWELL製 28.8K
	*/
	/* モデム救済タスク起動 By O.Kimoto 1998/02/03 */
	if (tskno_MDM_ModemRecoverTask != 0xffff) {
		del_tsk(&tskno_MDM_ModemRecoverTask);
	}

	ServiceFuncTx = FALSE;
	Modem.Message = MSG_MODEM_STOP;
	snd_msg(mbxno.FIP, &Modem);	/**	オペレーションタスクにメッセージ送信	*/
	wai_tsk(0xffff);	/**	無限タスクウェイト	*/
}
void near MDM_TonalTest(void)
{
	MESSAGE_t			*msg;
	UBYTE	conf_data;
	UBYTE	boo_data;
	UWORD			offset;
	UWORD			base;
	UWORD			value;
	UWORD			dummy;
	UWORD			i;
	UBYTE			debug;

#if defined (KEISATSU)		/* 警察FAX DVT_ID15 Modify by SMuratec K.W.Q 2005/11/05 */
	if (SYS_FactoryModem.Item == SYS_OPT_MDM_TONAL_TEST) {
		ModemRelay_Off();
	}
	else if (SYS_FactoryModem.Item == SYS_OPT_MDM_KEIDEN_TONAL_TEST){
		ModemRelay_On();
	}
#endif		/* End of (defined (KEISATSU)) */

	MDM_FactoryFuncRelaySet();

	if (SYS_FactoryModem.Item == OPT_MDM_FACTORY_TEST_END) { /* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		MDM_FactoryStopCheck();
		SYS_FactoryFuncStatus = 0;
	}
	/* Stop */
	else if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_STOP) {  /* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		MDM_FactoryStopCheck();
		SYS_FactoryFuncStatus = 0;
	}
	/* トーン */
	else if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_NONE) { /* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		if (SYS_FactoryFuncStatus == TEST_TONE) {
			MDM_SingleToneOff();
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_FactoryFuncStatus = TEST_TONE;
	}
	/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
	else if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_462HZ) && (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_2100HZ)) {
		if (SYS_FactoryFuncStatus == TEST_TONE) {
			MDM_SingleToneOff();
			/* ソフトリセット */
			MDM_SoftResetModem();
			if (CHK_LineMonitor()) {
				MDM_SetVolumeAttenuationLevel(SYS_VOLUME_MAXIMUM);
			}
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_FactoryFuncStatus = TEST_TONE;
		value = SYS_FactoryModem.Kind -1; /* Modified by H.Kubo 1997/06/26 */
		/* 通信中でないので、FCM_PtnrChk_T23Attenation() はメモリスイッチの値を
		** 反映してない。そのため、メモリスイッチの値を直接参照して送出レベルを設定する。
		*/
		MDM_TransmitLevelSet(SYS_MemorySwitch[11] & ATTENATION);
		MDM_SingleToneOn((UBYTE) value);
	}
	/* FSK */
	/* Modified by H. Kubo for POPLAR_H 1997/06/17 */

	/* FSK_W1_B1 1999/12/27 Y.Murata */
	else if ((SYS_FactoryModem.Kind == OPT_MDM_TONAL_FSK_WHITE) ||
			 (SYS_FactoryModem.Kind == OPT_MDM_TONAL_FSK_BLACK) ||
			 (SYS_FactoryModem.Kind == OPT_MDM_TONAL_FSK_W1_B1)) {

		if (SYS_FactoryFuncStatus == TEST_FSK) {
			SYS_PixStopFlag = 1;
			rcv_msg(mbxno.FIP, &msg);
			if (tskno_MDM_FskTest != 0xFFFF) {
				del_tsk(&tskno_MDM_FskTest);
			}
			wai_tsk(1);
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_PixStopFlag = 0;

		SYS_FactoryFuncStatus = TEST_FSK;
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_FSK_WHITE) {
			MDM_FactoryFskMenu = FSK_WHITE;
			cre_tsk(&tskno_MDM_FskTest, TSK_MDM_FSKTXTASK, &MDM_FactoryFskMenu);
		}
		/* FSK_W1_B1 1999/12/27 Y.Murata */
		else if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_FSK_W1_B1) {
			MDM_FactoryFskMenu = FSK_W1_B1;
			cre_tsk(&tskno_MDM_FskTest, TSK_MDM_FSKTXTASK, &MDM_FactoryFskMenu);
		}
		else {
			MDM_FactoryFskMenu = FSK_BLACK;
			cre_tsk(&tskno_MDM_FskTest, TSK_MDM_FSKTXTASK, &MDM_FactoryFskMenu);
		}
	}
	/* G3 */
	/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
	else if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_V27_1200_2400) && (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_V17_2400_14400)){
		if (SYS_FactoryFuncStatus == TEST_G3) {
			SYS_PixStopFlag = 1;
			rcv_msg(mbxno.FIP, &msg);
			if (tskno_MDM_PixTest != 0xFFFF) {
				del_tsk(&tskno_MDM_PixTest);
			}
			/* MDM_SetIO(POS_RTS,OFF); */
			wai_tsk(1);
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_PixStopFlag = 0;
		SYS_FactoryFuncStatus = TEST_G3;

		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		switch (SYS_FactoryModem.Kind) {
		case OPT_MDM_TONAL_V27_1200_2400:
			FactoryPixData.baud_rate = BPS2400_V27;
			break;
		case OPT_MDM_TONAL_V27_1600_4800:
			FactoryPixData.baud_rate = BPS4800_V27;
			break;
		case OPT_MDM_TONAL_V29_2400_7200:
			FactoryPixData.baud_rate = BPS7200_V29;
			break;
		case OPT_MDM_TONAL_V29_2400_9600:
			FactoryPixData.baud_rate = BPS9600_V29;
			break;
		case OPT_MDM_TONAL_V17_2400_7200:
			FactoryPixData.baud_rate = BPS7200_V17;
			break;
		case OPT_MDM_TONAL_V17_2400_9600:
			FactoryPixData.baud_rate = BPS9600_V17;
			break;
		case OPT_MDM_TONAL_V17_2400_12000:
			FactoryPixData.baud_rate = BPS12000_V17;
			break;
		case OPT_MDM_TONAL_V17_2400_14400:
			FactoryPixData.baud_rate = BPS14400_V17;
			break;
		}
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		FactoryPixData.pix_retio = (UBYTE)SYS_FactoryModem.PIX_Pattern;
		cre_tsk(&tskno_MDM_PixTest, TSK_MDM_PIXTXTASK, &FactoryPixData);

	}
/* #if defined(POPLAR_F) */
#if (PRO_VOICE_ANSWER == ENABLE) && (PRO_MODEM == R288F)	/* NTT音声応答 && ORANGE以外のモデム Modified by J.Kishida 2002/09/09 */
	/* Voice */
	else if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_VOICE) {
		if (SYS_FactoryFuncStatus == TEST_VOICE) {
			/* Nothing */
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
			SYS_PixStopFlag = 0;
			SYS_FactoryFuncStatus = TEST_VOICE;
			if (tskno_MDM_VoiceTest == 0xFFFF) {
				cre_tsk(&tskno_MDM_VoiceTest, TSK_MDM_VOICETXTASK, 0);
			}
		}

	}
	/* Melody */
	else if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_VOICE2) {
		if (SYS_FactoryFuncStatus == TEST_VOICE2) {
			/* Nothing */
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_FactoryFuncStatus = TEST_VOICE2;
		StartSendingMelodyToLine();
	}
#else
	/* Voice */
	/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
	else if (SYS_FactoryModem.Kind == OPT_MDM_TONAL_VOICE) {
		if (SYS_FactoryFuncStatus == TEST_VOICE) {
			/* Nothing */
		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_FactoryFuncStatus = TEST_VOICE;
		StartSendingMelodyToLine();
	}
#endif
	else {
	/* V34 */
		if (SYS_FactoryFuncStatus == TEST_V34) {
			/* ソフトリセット */
			MDM_SetIO(POS_DTR,OFF);
			wai_tsk(100/10);

			MDM_SoftResetModem();

		}
		else {
			if (SYS_FactoryFuncStatus) {
				MDM_FactoryStopCheck();
			}
		}
		SYS_FactoryFuncStatus = TEST_V34;
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_V34_2400_2400) &&
			 (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_V34_2400_21600)) {
			base = 0xC1;
			offset = base - OPT_MDM_TONAL_V34_2400_2400;	/* 174 */
			boo_data = 0;
			conf_data = (UBYTE)(offset + SYS_FactoryModem.Kind); /* Modified by H.Kubo 1997/06/26 */
			MDM_TxV34ServiceFunction(boo_data, conf_data);
		}
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		else if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_V34_2800_4800) &&
				 (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_V34_2800_26400)) {
			base = 0xC2;
			offset = base - OPT_MDM_TONAL_V34_2800_4800;	/* 166 */
			boo_data = 2;
			conf_data = (UBYTE)(offset + SYS_FactoryModem.Kind); /* Modified by H.Kubo 1997/06/26 */
			MDM_TxV34ServiceFunction(boo_data, conf_data);
		}
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		else if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_V34_3000_4800) &&
				 (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_V34_3000_28800)) {
			base = 0xC2;
			offset = base - OPT_MDM_TONAL_V34_3000_4800;	/* 156 */
			boo_data = 3;
			conf_data = (UBYTE)(offset + SYS_FactoryModem.Kind); /* Modified by H.Kubo 1997/06/26 */
			MDM_TxV34ServiceFunction(boo_data, conf_data);
		}
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		else if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_V34_3200_4800) &&
				 (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_V34_3200_31200)) {
			base = 0xC2;
			offset = base - OPT_MDM_TONAL_V34_3200_4800;	/* 145 */
			boo_data = 4;
			conf_data = (UBYTE)(offset + SYS_FactoryModem.Kind); /* Modified by H.Kubo 1997/06/26 */
			MDM_TxV34ServiceFunction(boo_data, conf_data);
		}
		/* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		else if ((SYS_FactoryModem.Kind >= OPT_MDM_TONAL_V34_3429_4800) &&
				 (SYS_FactoryModem.Kind <= OPT_MDM_TONAL_V34_3429_33600)) {
			base = 0xC2;
			offset = base - OPT_MDM_TONAL_V34_3429_4800;	/* 133 */
			boo_data = 5;
			conf_data = (UBYTE)(offset + SYS_FactoryModem.Kind); /* Modified by H.Kubo 1997/06/26 */
			MDM_TxV34ServiceFunction(boo_data, conf_data);
		}
	}
}
/*
 *  メインタスク
 */
void main_task(intptr_t exinf)
{
	char	c;
	ID		tskid = TASK1;
	int_t	tskno = 1;
	ER_UINT	ercd;
	PRI		tskpri;
#ifndef TASK_LOOP
	volatile ulong_t	i;
	SYSTIM	stime1, stime2;
#endif /* TASK_LOOP */
	HRTCNT	hrtcnt1, hrtcnt2;
	T_CTSK	ctsk;
	ID		TASK3 = -1;
	T_CALM	calm;
	ID		ALMHDR1 = -1;

	SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG)));
	syslog(LOG_NOTICE, "Sample program starts (exinf = %d).", (int_t) exinf);

	/*
	 *  シリアルポートの初期化
	 *
	 *  システムログタスクと同じシリアルポートを使う場合など,シリアル
	 *  ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は
	 *  ない.
	 */
	ercd = serial_opn_por(TASK_PORTID);
	if (ercd < 0 && MERCD(ercd) != E_OBJ) {
		syslog(LOG_ERROR, "%s (%d) reported by `serial_opn_por'.",
									itron_strerror(ercd), SERCD(ercd));
	}
	SVC_PERROR(serial_ctl_por(TASK_PORTID,
							(IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV)));

	/*
 	 *  ループ回数の設定
	 *
	 *  並行実行されるタスク内での空ループの回数(task_loop)は,空ルー
	 *  プの実行時間が約0.4秒になるように設定する.この設定のために,
	 *  LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで
	 *  測定し,その測定結果から空ループの実行時間が0.4秒になるループ回
	 *  数を求め,task_loopに設定する.
	 *
	 *  LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ
	 *  り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか
	 *  りすぎるという問題を生じる.逆に想定したより速いプロセッサでは,
	 *  LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値
	 *  の誤差が大きくなるという問題がある.
	 *
	 *  そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適
	 *  切な値に定義するのが望ましい.
	 *
	 *  また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ
	 *  クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を
	 *  行わずに,TASK_LOOPに定義された値を空ループの回数とする.
	 *
	 * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ
	 * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE
	 * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果
	 * を使う.
	 */
#ifdef TASK_LOOP
	task_loop = TASK_LOOP;
#else /* TASK_LOOP */

#ifdef MEASURE_TWICE
	task_loop = LOOP_REF;
	SVC_PERROR(get_tim(&stime1));
	for (i = 0; i < task_loop; i++);
	SVC_PERROR(get_tim(&stime2));
#endif /* MEASURE_TWICE */

	task_loop = LOOP_REF;
	SVC_PERROR(get_tim(&stime1));
	for (i = 0; i < task_loop; i++);
	SVC_PERROR(get_tim(&stime2));
	task_loop = LOOP_REF * 400LU / (ulong_t)(stime2 - stime1) * 1000LU;

#endif /* TASK_LOOP */

	/*
 	 *  タスクの起動
	 */
	SVC_PERROR(act_tsk(TASK1));
	SVC_PERROR(act_tsk(TASK2));

	/*
 	 *  メインループ
	 */
	do {
		SVC_PERROR(serial_rea_dat(TASK_PORTID, &c, 1));
		switch (c) {
		case 'e':
		case 's':
		case 'S':
		case 'd':
		case 'y':
		case 'Y':
		case 'z':
		case 'Z':
			message[tskno-1] = c;
			break;
		case '1':
			tskno = 1;
			tskid = TASK1;
			break;
		case '2':
			tskno = 2;
			tskid = TASK2;
			break;
		case '3':
			tskno = 3;
			tskid = TASK3;
			break;
		case 'a':
			syslog(LOG_INFO, "#act_tsk(%d)", tskno);
			SVC_PERROR(act_tsk(tskid));
			break;
		case 'A':
			syslog(LOG_INFO, "#can_act(%d)", tskno);
			SVC_PERROR(ercd = can_act(tskid));
			if (ercd >= 0) {
				syslog(LOG_NOTICE, "can_act(%d) returns %d", tskno, ercd);
			}
			break;
		case 't':
			syslog(LOG_INFO, "#ter_tsk(%d)", tskno);
			SVC_PERROR(ter_tsk(tskid));
			break;
		case '>':
			syslog(LOG_INFO, "#chg_pri(%d, HIGH_PRIORITY)", tskno);
			SVC_PERROR(chg_pri(tskid, HIGH_PRIORITY));
			break;
		case '=':
			syslog(LOG_INFO, "#chg_pri(%d, MID_PRIORITY)", tskno);
			SVC_PERROR(chg_pri(tskid, MID_PRIORITY));
			break;
		case '<':
			syslog(LOG_INFO, "#chg_pri(%d, LOW_PRIORITY)", tskno);
			SVC_PERROR(chg_pri(tskid, LOW_PRIORITY));
			break;
		case 'G':
			syslog(LOG_INFO, "#get_pri(%d, &tskpri)", tskno);
			SVC_PERROR(ercd = get_pri(tskid, &tskpri));
			if (ercd >= 0) {
				syslog(LOG_NOTICE, "priority of task %d is %d", tskno, tskpri);
			}
			break;
		case 'w':
			syslog(LOG_INFO, "#wup_tsk(%d)", tskno);
			SVC_PERROR(wup_tsk(tskid));
			break;
		case 'W':
			syslog(LOG_INFO, "#can_wup(%d)", tskno);
			SVC_PERROR(ercd = can_wup(tskid));
			if (ercd >= 0) {
				syslog(LOG_NOTICE, "can_wup(%d) returns %d", tskno, ercd);
			}
			break;
		case 'l':
			syslog(LOG_INFO, "#rel_wai(%d)", tskno);
			SVC_PERROR(rel_wai(tskid));
			break;
		case 'u':
			syslog(LOG_INFO, "#sus_tsk(%d)", tskno);
			SVC_PERROR(sus_tsk(tskid));
			break;
		case 'm':
			syslog(LOG_INFO, "#rsm_tsk(%d)", tskno);
			SVC_PERROR(rsm_tsk(tskid));
			break;
		case 'x':
			syslog(LOG_INFO, "#ras_ter(%d)", tskno);
			SVC_PERROR(ras_ter(tskid));
			break;
		case 'r':
			syslog(LOG_INFO, "#rot_rdq(three priorities)");
			SVC_PERROR(rot_rdq(HIGH_PRIORITY));
			SVC_PERROR(rot_rdq(MID_PRIORITY));
			SVC_PERROR(rot_rdq(LOW_PRIORITY));
			break;
		case 'c':
			syslog(LOG_INFO, "#sta_cyc(1)");
			SVC_PERROR(sta_cyc(CYCHDR1));
			break;
		case 'C':
			syslog(LOG_INFO, "#stp_cyc(1)");
			SVC_PERROR(stp_cyc(CYCHDR1));
			break;
		case 'b':
			syslog(LOG_INFO, "#sta_alm(1, 5000000)");
			SVC_PERROR(sta_alm(ALMHDR1, 5000000));
			break;
		case 'B':
			syslog(LOG_INFO, "#stp_alm(1)");
			SVC_PERROR(stp_alm(ALMHDR1));
			break;
		case '@':
			ctsk.tskatr = TA_NULL;
			ctsk.exinf = 3;
			ctsk.task = task;
			ctsk.itskpri = MID_PRIORITY;
			ctsk.stksz = STACK_SIZE;
			ctsk.stk = NULL;
			SVC_PERROR(TASK3 = acre_tsk(&ctsk));
			syslog(LOG_NOTICE, "task3 is created with tskid = %d.",
														(int_t) TASK3);
			break;
		case '!':
			syslog(LOG_INFO, "#del_tsk(%d)", tskno);
			SVC_PERROR(del_tsk(tskid));
			break;
		case '$':
			calm.almatr = TA_NULL;
			calm.nfyinfo.nfymode = TNFY_HANDLER;
			calm.nfyinfo.nfy.handler.exinf = (intptr_t) 0;
			calm.nfyinfo.nfy.handler.tmehdr = (TMEHDR) alarm_handler;
			SVC_PERROR(ALMHDR1 = acre_alm(&calm));
			syslog(LOG_NOTICE, "alarm handler is created with almid = %d.",
														(int_t) ALMHDR1);
			break;
		case '#':
			syslog(LOG_INFO, "#del_alm(1)");
			SVC_PERROR(del_alm(ALMHDR1));
			break;

		case 'V':
			hrtcnt1 = fch_hrt();
			hrtcnt2 = fch_hrt();
			syslog(LOG_NOTICE, "hrtcnt1 = %tu, hrtcnt2 = %tu",
										hrtcnt1, hrtcnt2);
			break;

		case 'v':
			SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_INFO),
										LOG_UPTO(LOG_EMERG)));
			break;
		case 'q':
			SVC_PERROR(syslog_msk_log(LOG_UPTO(LOG_NOTICE),
										LOG_UPTO(LOG_EMERG)));
			break;

#ifdef BIT_KERNEL
		case ' ':
			SVC_PERROR(loc_cpu());
			{
				extern ER	bit_kernel(void);

				SVC_PERROR(ercd = bit_kernel());
				if (ercd >= 0) {
					syslog(LOG_NOTICE, "bit_kernel passed.");
				}
			}
			SVC_PERROR(unl_cpu());
			break;
#endif /* BIT_KERNEL */

		default:
			break;
		}
	} while (c != '\003' && c != 'Q');

	syslog(LOG_NOTICE, "Sample program ends.");
	SVC_PERROR(ext_ker());
	assert(0);
}
Beispiel #11
0
static ER _dmloader_rmv_ldm(ID ldm_can_id) {
    // TODO: hard coded & should check ldm_can status
	if (ldm_can_id != 1) return E_ID;
	T_LDM_CAN *ldm_can = &ldm_cans[ldm_can_id - 1];

    ER ercd;

    ercd = loc_mtx(DMLOADER_MTX);
    if(ercd != E_OK) {
        syslog(LOG_ERROR, "%s(): Acquire mutex failed.", __FUNCTION__);
        goto error_exit;
    }

    if (ldm_can->status != LDM_CAN_RUNNING) {
    	syslog(LOG_ERROR, "%s(): LDM container is not running.", __FUNCTION__);
    	ercd = E_OBJ;
    	goto error_exit;
    }

    // Destroy all EV3CYCs
    destroy_all_ev3cyc();

    // Deletion
    for(SIZE i = 0; i < ldm_can->cfg_entry_num && ercd == E_OK; ++i) {
        MOD_CFG_ENTRY *ent = &ldm_can->cfg_table[i];
        switch(ent->sfncd) {
        case TSFN_CRE_TSK: {
            syslog(LOG_DEBUG, "%s(): RMV MOD_CFG_ENTRY TSFN_CRE_TSK", __FUNCTION__);
            ID tskid = *(ID*)ent->retvalptr;
            ter_tsk(tskid);
            ercd = del_tsk(tskid);
            assert(ercd == E_OK);
            break; }

        case TSFN_CRE_SEM: {
        	syslog(LOG_DEBUG, "%s(): RMV MOD_CFG_ENTRY TSFN_CRE_SEM", __FUNCTION__);
        	ID semid = *(ID*)ent->retvalptr;
        	ercd = del_sem(semid);
        	assert(ercd == E_OK);
        	break; }

        case TSFN_CRE_FLG: {
        	syslog(LOG_DEBUG, "%s(): RMV MOD_CFG_ENTRY TSFN_CRE_FLG", __FUNCTION__);
        	ID flgid = *(ID*)ent->retvalptr;
        	ercd = del_flg(flgid);
        	assert(ercd == E_OK);
        	break; }

        default:
            syslog(LOG_ERROR, "%s(): Unsupported static function code %d.", __FUNCTION__, ent->sfncd);
            ercd = E_OBJ;
            goto error_exit;
        }
    }

    ldm_can->status = LDM_CAN_FREE;

    // TODO: clean ldm_can
error_exit:
	unl_mtx(DMLOADER_MTX);
	return ercd;
}
/*************************************************************************
	module		:[FAX通信制御メイン]
	function	:[
		1. メインタスクより起動される
		2. 通信種別を解析し 送信/受信処理を行う
		3. 通信終了後、通信時間を算出し通信結果をジャーナルにセットする
		4. メインタスクにメッセージを送信し自爆する
	]
	commom		:[
		SYS_FaxComType					: 通信種別
		SYS_FaxComTxType				: 送信タイプ
		SYB_CurrentTime					: トータル・タイマ
		SYS_FIP_Status					: FIPステータス
		SYS_FaxComFIP_RxActiveFlag		: FIP通信中フラグ
		FaxComTXorRX_Sign				: 送受信コマンド
		FaxComResult					: 通信結果
		FaxComPeriod					: 通信時間
		FaxComStartTime					: 通信開始時刻
		FaxComPerformingFlag			: 通信中グラグ
		SYS_TxTotalPage					: 送信ページ
		SYS_RxTotalPage					: 受信ページ
		TxBaudRate						: 送信ボーレイト
		RxBaudRate						: 受信ボーレイト
		FipComBaudRate					: FIPボーレイト
		FipTotalPage					: FIPトータルページ
		FipComTime						: FIP通信時間
		FipComResult					: FIP結果
		struct	SYS_ExecQueueData_t	  *SYS_CurrentExecutingCommand	: 発信スケジューラー
	]
	condition	:[]
	comment		:[]
	return		:[なし]
	machine		:[V53,H8/300]
	language	:[MS-C(Ver6.0),H8/300]
	keyword		:[FCM]
	date		:[1994/01/24]
	author		:[村田]
*************************************************************************/
void	FCM_Task(void)
{
#if (PRO_PRINT_TYPE == THERMAL_TRANS)	/* 1999.7.8 K.Kawata */
	BYTE	send_end_message;
#endif
#if defined(POPLAR_F)
	UWORD	check_tskno;
#endif
#if(PRO_COST == ENABLE)
	/* 料金管理のため追加 1994/8/12 Y.Suzuki */
	UBYTE cost_data; /* SYB_NTT_AccessFile[] のオフセット */
	UBYTE exec_no;	/* 料金管理のマルチ回線対応のため  1997/09/19 s.takeuchi */

	cost_data = 0;
#endif

#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1997/11/25 */
	if (tskno_NCU_FaxComTelHookChkTask == 0xffff) {
		cre_tsk(&tskno_NCU_FaxComTelHookChkTask, TSK_NCU_FAXCOMTELHOOKCHKTASK, 0);
	}
#endif

	/* 警察FAX DVT_ID46 Added by SMuratec 夏 2005/11/25 */
 #if defined(KEISATSU)	
 	/* 警察FAX DVT_ID78 Modified by SMuratec 李 2005/12/19 */
 	if (IsJournalCompleted == FALSE) {
		/*---------------------------*/
		/** メインよりメッセージ待ち */
		/*---------------------------*/
		rcv_msg( mbxno.FCM_Task, &FcomMsg );
		CMN_DisableInterrupt();			/* DI */
		BackupFcomMsg.Item = FcomMsg->Item;							/* FROM_MAIN */
		BackupFcomMsg.Message = FcomMsg->Message;					/* 交信種別 */
		BackupFcomMsg.SubMessage1 = FcomMsg->SubMessage1;			/* コマンド番号 */
		BackupFcomMsg.SubMessage2 = FcomMsg->SubMessage2;
		BackupFcomMsg.SubMessage3 = FcomMsg->SubMessage3;
		BackupFcomMsg.SubMessage4 = FcomMsg->SubMessage4;
		FcomMsg = &BackupFcomMsg;		/* 一応セーブし直す */
		CMN_EnableInterrupt();			/* EI */

		while (!IsJournalCompleted){ 
			wai_tsk(10);	/* 通信履歴を作成の待ち */
		}
		/*-------------*/
		/** 変数初期化 */
		/*-------------*/
		InitializeFaxCom();

#if (PRO_ENERGY_SAVE == ENABLE)		/* 2002/03/07 T.Takagi */
		/*-------------*/
		/** Clock供給  */
		/*-------------*/
		if (SYS_HaltClock == FALSE) {		/* この時点でクロックが供給されていなければ */
			HaltClockOn();
			wai_tsk(1); 					/* クロックが出始めてから最低0.6us待ってサブリセット解除 */
			CMN_DisableInterrupt();			/**	割り込み禁止 2002/03/07 T.Takagi */
			SubResetOff();
			SYS_HaltClock = TRUE;			/* クロックが供給されていることを示すフラグ */
			CMN_EnableInterrupt();			/**	割り込み許可 */
		}
#endif

		/*---------------*/
		/** モデム初期化 */
		/*---------------*/
		MDM_ModemInitialize();

	#if (PRO_MODEM == R288F)				/* ROCKWELL製 28.8K */
		/* モデム救済タスク起動 By O.Kimoto 1998/02/03 */
		if (tskno_MDM_ModemRecoverTask == 0xffff) {
			cre_tsk(&tskno_MDM_ModemRecoverTask, TSK_MDM_MODEMRECOVERTASK, 0);
		}
	#endif

	}
	else {
 #endif
 
	/*-------------*/
	/** 変数初期化 */
	/*-------------*/
	InitializeFaxCom();

#if (PRO_ENERGY_SAVE == ENABLE)		/* 2002/03/07 T.Takagi */
	/*-------------*/
	/** Clock供給  */
	/*-------------*/
	if (SYS_HaltClock == FALSE) {		/* この時点でクロックが供給されていなければ */
		HaltClockOn();
		wai_tsk(1); 					/* クロックが出始めてから最低0.6us待ってサブリセット解除 */
		CMN_DisableInterrupt();			/**	割り込み禁止 2002/03/07 T.Takagi */
		SubResetOff();
		SYS_HaltClock = TRUE;			/* クロックが供給されていることを示すフラグ */
		CMN_EnableInterrupt();			/**	割り込み許可 */
	}
#endif

#if (PRO_ECO_MODE == ENABLE) /* 2002/09/09 By M.Maeda */
 #if (1) /* カバーオープンで24VをONしないようにする By M.Maeda 2003/01/22 */
	MAN_ChangeEcoMode(0);
 #else
//	MAN_ChangeEcoMode(FALSE);
 #endif
#endif

	/*---------------*/
	/** モデム初期化 */
	/*---------------*/
	MDM_ModemInitialize();

#if (PRO_MODEM == R288F)				/* ROCKWELL製 28.8K */
	/* モデム救済タスク起動 By O.Kimoto 1998/02/03 */
	if (tskno_MDM_ModemRecoverTask == 0xffff) {
		cre_tsk(&tskno_MDM_ModemRecoverTask, TSK_MDM_MODEMRECOVERTASK, 0);
	}
#endif


	/*---------------------------*/
	/** メインよりメッセージ待ち */
	/*---------------------------*/
	rcv_msg( mbxno.FCM_Task, &FcomMsg );
	CMN_DisableInterrupt();			/* DI */
	BackupFcomMsg.Item = FcomMsg->Item;							/* FROM_MAIN */
	BackupFcomMsg.Message = FcomMsg->Message;					/* 交信種別 */
	BackupFcomMsg.SubMessage1 = FcomMsg->SubMessage1;			/* コマンド番号 */
	BackupFcomMsg.SubMessage2 = FcomMsg->SubMessage2;
	BackupFcomMsg.SubMessage3 = FcomMsg->SubMessage3;
	BackupFcomMsg.SubMessage4 = FcomMsg->SubMessage4;
	FcomMsg = &BackupFcomMsg;		/* 一応セーブし直す */
	CMN_EnableInterrupt();			/* EI */

 #if defined(KEISATSU)	/* 警察FAX DVT_ID74 Added by SMuratec 李 2005/12/17 */
 	}
 #endif /* defined(KEISATSU) */
#if (PRO_ENERGY_SAVE_PPF == ENABLE)/*V851 省エネ By Y.Suzuki 2002/06/19*/
	MAN_ExecEcoWakeUp();
#endif

	/*---------------*/
	/** 交信種別取得 */
	/*---------------*/
	SYS_FaxComType = (UBYTE)FcomMsg->Message;

	MsgFromFaxComToMain.Item = FROM_FAXCOM;

	SYS_BackupFaxComType = SYS_FaxComType;	/* 1997/12/05 */

	/* 回線モニターの設定は RelaySetting() のなかでやっていいる */


#if (PRO_TX_SPEED == V34) /* Ported from clover by H.Kubo 1997/08/06 */
	/* Cloverとは構造が異なるので仕方なくここに入れておきます。
	** V.8手動送・受信勧告違反対策
	** by O.Kimoto 1997/10/07
	*/
	if ((SYS_FaxComType == SYS_MANUAL_TX) || (SYS_FaxComType == SYS_MANUAL_RX)) {
		if (!CHK_ManualFaxComV8Enable()) {
			CMN_ResetDataSignalingRate(DATA_SIGNALING_RATE_V34_BIT);
			V8ProcedureRequestFlag = 0;					/** V8手順移行要求クリア */
		}
	}
#endif

/* #if defined(POPLAR_F) */
#if (PRO_VOICE_ANSWER == ENABLE)
 #if ((PRO_MODEM == R288F) || (PRO_MODEM == MN195006))	/* ORANGE以外のモデム Mod. by J.Kishida 2002/09/09 */
	if ((AttemptRxModeSwitch == SYS_TEL_FAX_READY)
	 || (AttemptRxModeSwitch == SYS_FAX_TEL_READY )
	 || (AttemptRxModeSwitch == SYS_ANS_FAX_READY)) {	/* for NTT */
		if (CHK_TelFax_AnsFaxV34Mask()) {
			CMN_ResetDataSignalingRate(DATA_SIGNALING_RATE_V34_BIT);
			V8ProcedureRequestFlag = 0;					/** V8手順移行要求クリア */
		}
	}
 #endif
#endif

	/*----------------*/
	/* 交信種別の判定 */
	/*----------------*/
	switch (SYS_FaxComType) {			/** 交信種別判定 **/

		case SYS_COMMAND_EXECUTE:				/** コマンド通信 **/

			/* キュー番号をセーブしておきます */
			SYS_CurrentExecuteNoSave = (UBYTE)FcomMsg->SubMessage1;

#if (PRO_COST == ENABLE)	/* 料金管理のマルチ回線対応のため  1997/09/19 s.takeuchi */
			exec_no = (UBYTE)FcomMsg->SubMessage1;
#endif

			/*------------------------*/
			/** コマンド通信情報取得 **/
			/*------------------------*/
			GetCommandFileData();
			
			/*
			** 受領証設定でT4.1/T4.4でリダイヤルで受領証受信した時に、送信証もでてくる
			** ためクリアしておく	1998/04/21  By T.Yamaguchi
			*/
			SYS_CurrentExecutingCommand->Option &= ~(SYS_PARTNER_NOT_RCR);

			/*--------------------------------------------------*/
			/** 発信スケジューラー(SYS_ExecQueue) 使用状況 Set **/
			/*--------------------------------------------------*/
#if 0	/* メインで行う 1999/10/21 Y.Murata NAGANOより */
//			if (SYS_CurrentExecutingCommand->Status == SYS_EXEC_FORWARD_WAITING) {		/** 転送予約中 */
//				SYS_CurrentExecutingCommand->Status = SYS_EXEC_FORWARD_EXECUTE;				/** 転送実行中 */
//			}
//			else {
//				SYS_CurrentExecutingCommand->Status = SYS_EXEC_EXECUTE;						/** 実行中 */
//			}
#endif
#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1998/02/05 */
			if (SYS_InternalLineNumber == SYS_STD_LINE_COM) {
				SYS_CurrentExecutingCommand->Option &= ~SYS_EXT_LINE_TX;
			}
			else {
				SYS_CurrentExecutingCommand->Option |= SYS_EXT_LINE_TX;
			}
#endif
			GetFaxComTxType();						/** 送信タイプ確定 */
			GetFirstTxDocumentData();				/** 送信原稿情報設定 */

#if (PRO_QUICK_TX_TEST == ENABLE)	/* 1998/10/15 Y.Murata for KAKI */
			FCM_QuickMemoryTxExecute = FCM_CheckQucikMemoryTx();
#endif

			if(SYS_FaxComTxType == SYS_SCANNER_TRANSMIT) {
				/** V53 スキャナー送信時済みスタンプ初期化処理 1994/8/25 Y.Suzuki */
				CMN_EvacuateStampSetting();
/* #if(PRO_PRINT_TYPE == LASER)	LEDプリンタでも必要?	1996/11/27	By T.Yamaguchi */
				SCN_MotorStopRequest = 1; /**  原稿読み取り終了時にモーター停止を行うにセット */
/* #endif */
#if (PRO_FBS == ENABLE)
				/* FBS原稿サイズ選択済みフラグ初期化 T.Nose 1997/06/23 */
				IsBookDocSizeSet = FALSE;
#endif
#if (PRO_IMAGE_PROCESSOR ==	IMAGE_PROCESSOR_LC82103)
				/* 仕様変更
				** 読み取り中において、DS2がOFFした時点でDS1もOFFしていれば、今読んだ原稿が
				** 最終原稿であるという風に変更
				** カバーページ送信Onでスキャナ送信時、カバーページしか送らない不具合
				** 1999/03/12 by T.Soneoka
				*/
				NoNextDocument = FALSE;
#endif
			}
#if (PRO_TX_SPEED == V34) /* Ported from clover by H.Kubo 1997/08/06 */
			/* V34スタートアップエラーが出たときのリダイアルはV17で交信 */ /* 1997/05/20 */
			if (SYS_CurrentExecutingCommand->Option & SYS_V34_STUP_RECOVER) {
				/* SYS_DataSignalingRate &= 0xFFFE; */
				CMN_ResetDataSignalingRate(DATA_SIGNALING_RATE_V34_BIT);
			}
#endif /* (PRO_TX_SPEED == V34) */

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			if ((CommandFileOptionItem == SYS_POLLING_RX)		 ||
				(CommandFileOptionItem == SYS_DB_POLLING_RX)	 ||
#if (PRO_CONTINUOUS_POLLING == ENABLE)
				(CommandFileOptionItem == SYS_CONTINUOUS_POLLING_RX) ||		/* Oct.21.1996	By T.Yamaguchi */
#endif
#if (PRO_F_CODE == ENABLE)
				(CommandFileOptionItem == SYS_SELECT_POLLING_RX) ||		/* 1997/01/09  By T.Yamaguchi */
#endif
				(CommandFileOptionItem == SYS_SEQUENTIAL_POLLING)) {	/** ポーリング受信 */
#if (PRO_PRINT_TYPE == THERMAL_TRANS)	/* 1999/3/5 K.Kawata*/
				PRN_ChechRxPrintCallProc();
#endif
				SYS_FaxCommStage = FCM_POLLING;
			}
			else {
				SYS_FaxCommStage = FCM_TRANSMIT;
			}
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

#if(PRO_RELAYED_REPORT == ENABLE)/* 95/03/17 Y.Suzuki */
			if(CommandFileOptionItem == SYS_RELAYED_TX_REPORT) {
				TxRelayReport = 1;/* 不達通知送信時、会話予約キーを入力しない */
				/* TSK_LST_RELAYEDTXREPORTIMAGETASKは文字数オーバでワーニングがでるので短くします */
				if (tskno_LST_RelayedTxReportImage == 0xffff) { /* by H.Kubo 1998/01/19 */
					cre_tsk(&tskno_LST_RelayedTxReportImage, TSK_LST_RLYTXREPORTIMAGETASK, 0);
				}
			}
			AutoFax();								/** 自動ダイアル通信処理 */
			TxRelayReport = 0;						/* 不達通知送信時、会話予約キーを入力しない クリア */

			if (tskno_LST_RelayedTxReportImage != 0xffff) { /* by H.Kubo 1998/01/19 */
				del_tsk(&tskno_LST_RelayedTxReportImage);
			}

#else
			AutoFax();								/** 自動ダイアル通信処理 */
#endif
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */
			break;

		case SYS_MANUAL_TX:						/** 手動送信 **/

			/* 手動送信は、部門管理扱いではない 94/11/16 Y.Suzuki */
			/** オートダイヤラーからの発信時のみ使用するコストテーブルを決定 */

			GetFaxComTxType();						/** 送信タイプ確定 */
			GetFirstTxDocumentData();				/** 送信原稿情報取得 */

			/** V53 スキャナー送信時済みスタンプ初期化処理 1994/8/25 Y.Suzuki */
			CMN_EvacuateStampSetting();
/* #if(PRO_PRINT_TYPE == LASER)	LEDプリンタでも必要?	1996/11/27	By T.Yamaguchi */
			SCN_MotorStopRequest = 1; /**  原稿読み取り終了時にモーター停止を行うにセット */
/* #endif */

#if (PRO_IMAGE_PROCESSOR ==	IMAGE_PROCESSOR_LC82103)
			/* 仕様変更
			** 読み取り中において、DS2がOFFした時点でDS1もOFFしていれば、今読んだ原稿が
			** 最終原稿であるという風に変更
			** カバーページ送信Onでスキャナ送信時、カバーページしか送らない不具合
			** 1999/03/12 by T.Soneoka
			*/
			NoNextDocument = FALSE;
#endif

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_TRANSMIT;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */
			ManualTransmit();						/** 手動送信処理 */
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */
			break;

		case SYS_MANUAL_RX:						/** 手動受信 **/

#if (PRO_FIP == ENABLE)
			if ((SYB_FIP_ReceiveEnableFlag == 1) && (SYS_FIP_Status == FIP_IDLE)) {
				SYS_FIP_Status |= FIP_DURING_RX;
				SYS_FaxComFIP_RxActiveFlag = 1;				/** FIP受信中フラグ */
			}
#endif
			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_RECEIVE;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			ManualReceive();						/** 手動受信処理 */
			/* ポーリング送信でRTN受信した時T.4.2にする 1996/10/30 Y.Murata */
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */

			break;

		case SYS_AUTO_CALLED:					/** 自動着信 **/

#if (PRO_FIP == ENABLE)		/* Add By M.Tachibana 94/02/13 */
			if ((SYB_FIP_ReceiveEnableFlag == 1) && (SYS_FIP_Status == FIP_IDLE)) {
				SYS_FIP_Status |= FIP_DURING_RX;
				SYS_FaxComFIP_RxActiveFlag = 1;				/** FIP受信中フラグ */
				SYS_FaxComType = SYS_FIP_CALLED;			/* 交信種別再設定 */
			}
#endif

			GetFaxComTxType();						/** 送信タイプ確定 */

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_CALLED;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			AutoCalled();							/** 自動着信処理 */

			/* ポーリング送信でRTN受信した時T.4.2にする 1996/10/30 Y.Murata */
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */
			break;

		case SYS_TRANSFER_AUTO_CALLED:					/** 転送受信 **/

			ForwardReceiveFlag = 1;					/** 転送受信フラグセット */
			BackUpForwardReceiveFlag = 1;			/** 転送受信バックアップフラグセット */
			SYS_FaxComType = SYS_AUTO_CALLED;		/* 交信種別再設定 */

#if (PRO_FIP == ENABLE)		/* Add By M.Tachibana 94/02/13 */
			if ((SYB_FIP_ReceiveEnableFlag == 1) && (SYS_FIP_Status == FIP_IDLE)) {
				SYS_FIP_Status |= FIP_DURING_RX;
				SYS_FaxComFIP_RxActiveFlag = 1;				/** FIP受信中フラグ */
				SYS_FaxComType = SYS_FIP_CALLED;			/* 交信種別再設定 */
			}
#endif

			GetFaxComTxType();						/** 送信タイプ確定 */

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_CALLED;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			AutoCalled();							/** 自動着信処理 */

			/* ポーリング送信でRTN受信した時T.4.2にする 1996/10/30 Y.Murata */
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */

			break;

		case SYS_FNET_AUTO_CALLED:					/** Fネット着信 **/

			FaxNetReceiveFlag = 1;					/** Fネット着信フラグセット */
			SYS_FaxComType = SYS_AUTO_CALLED;		/* 交信種別再設定 */

#if (PRO_FIP == ENABLE)		/* Add By M.Tachibana 94/02/13 */
			if ((SYB_FIP_ReceiveEnableFlag == 1) && (SYS_FIP_Status == FIP_IDLE)) {
				SYS_FIP_Status |= FIP_DURING_RX;
				SYS_FaxComFIP_RxActiveFlag = 1;				/** FIP受信中フラグ */
				SYS_FaxComType = SYS_FIP_CALLED;			/* 交信種別再設定 */
			}
#endif

			GetFaxComTxType();						/** 送信タイプ確定 */

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_CALLED;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			AutoCalled();							/** 自動着信処理 */

			/* ポーリング送信でRTN受信した時T.4.2にする 1996/10/30 Y.Murata */
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */

			break;

#if (PRO_FIP == ENABLE)

		case SYS_FIP_SEND:						/** FIP送信コマンド **/

			/* 部門管理扱いではない。94/11/16 Y.Suzuki */
			/** オートダイヤラーからの発信時のみ使用するコストテーブルを決定 */

			GetFaxComTxType();						/** 送信タイプ確定 */

			GetFirstTxDocumentData();				/** 送信原稿情報取得 */

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_TRANSMIT;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			FipFaxCom();							/** FIPコマンド送信処理 */
			break;

		case SYS_FIP_POLL:						/** FIPポーリング受信コマンド **/

			SYS_FaxComFIP_RxActiveFlag = 1;

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_RECEIVE;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			FipFaxCom();							/** FIPコマンド送信処理 */
			break;

		case SYS_FIP_CALLED:					/** FIP自動受信 **/
			/* このパスは通りません	 By M.Tachibana 94/02/13 */
			/* MANからMessageがSYS_?_AUTO_CALLEDがきた時	 */
			/* その中でFIP受信かどうか判断します			 */

			GetFaxComTxType();						/** 送信タイプ確定 */
			SYS_FaxComFIP_RxActiveFlag = 1;

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_CALLED;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			AutoCalled();							/** 自動着信処理 */
			break;
#endif

#if (PRO_REMOTE_FAX == ENABLE)

		case SYS_REMOTE_FAX_TX:

			GetFaxComTxType();						/** 送信タイプ確定 */
			GetFirstTxDocumentData();				/** 送信原稿情報取得 */

			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_REMOTE_FAX_TRANSMIT;		/* 1994/09/06 FCM_TRANSMIT -> FCM_REMOTE_FAX_TRANSMIT */
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

	#if (PRO_DRAM_BACKUP == ENABLE)
			SYS_RemoteFaxTxPerformingFlag = 1;		/* 1994/12/19 */
	#endif

			ManualTransmit();						/** 手動送信処理 */
			CheckAllErrorPage();					/** T.4.2エラーを出すかどうかチェック */
			break;

#endif

		case SYS_MANUAL_POLLING:			/** 手動ポーリング受信 */
			/*-------------*/
			/** LCD表示 */
			/*-------------*/
			SYS_FaxCommStage = FCM_POLLING;
			MsgFromFaxComToMain.Message = MSG_FAXCOM_DISPLAY;
			snd_msg(mbxno.MAN_Task, &MsgFromFaxComToMain);

			rcv_msg( mbxno.FCM_Task, &FcomMsg );		/* メインよりメッセージ受信 */

			ManualPollingReceive();						/** 手動ポーリング受信処理 */

			break;
#if defined (KEISATSU) /* 警察FAX 05/07/01 石橋正和 */
		case SYS_ISSEI_TX: /* 一斉指令送信 */
			FCM_IsseiTx(FALSE);
			break;
		case SYS_ISSEI_RX: /* 一斉指令受信 */
			FCM_IsseiRx(FALSE);
			break;
		case SYS_ISSEI_KIDO_RX: /* 指令起動信号による一斉指令受信 */
			FCM_IsseiRx(TRUE);
			break;
#endif
		default:
			break;
	}
	
#if defined (KEISATSU) /* 警察FAX 05/11/21 石橋正和 */
	if (SYS_MachineStatus[SYS_STOP_SWITCH_STATUS] & SYS_STOP_COM_ON_FORCE) { /* 警電着信による強制終了の場合 */
		FaxComResult = (FaxComResult & 0xFF00) | 0x0091;
 #if 0	/* 警察FAX DVT_ID63 Deleted by SMuratec 夏 2005/12/13 */
		IsJournalCompleted = FALSE;			/* 警察FAX DVT_ID46 Added by SMuratec 夏 2005/11/25 */
 #endif
	}
#endif
	
	/*----------------------------------------------------------------------------*/
	/* プリンターエラーがこの時点までたっていいると言う事は、受信最終ページで	  */
	/* プリンターエラーが起こったということになるのでメインにメッセージをかえして */
	/* エラーをセットしてもらう						1994/11/02					  */
	/*----------------------------------------------------------------------------*/
#if (PRO_PRINTER_RX == ENABLE)
	if (RxPrinterErrorFlag == 1) {	/** プリンターエラーがたっている */
		MsgFromFaxComToMain.SubMessage1 = GetRxPrinterErrorStatus();	/** プリンターエラーセット */
		SendMsgFaxComToMain( MSG_FAXCOM_PRINTER_ERROR );				/** メインにメッセージ送信 */
	}
#endif

	/*----------------*/
	/** 通信時間算出 **/
	/*----------------*/
	FaxComPeriod = (UWORD)( SYB_CurrentTime - FaxComStartTime );			/** 通信時間(秒) */

	/*
	** QAT中に通信記録の通信時間が実際の時間と異なる不具合対策用
	** By S.Kawasaki 1996/09/02
	*/
	FaxComPeriod = (UWORD)(SYS_1SecGeneralTimer - SYS_FCM_StartTime);


	/* 警察FAX DVT_ID46 Added by SMuratec 夏 2005/11/25 
	** 強制中断中、通信開始時間SYS_FCM_StartTime設置しない(通信起動失敗)の場合
	** 今回中断通信のTotal時間は0になる
	*/
#if defined(KEISATSU)
	if ((SYS_FCM_StartTime == 0) && ((FaxComResult & 0x00FF) == 0x0091)){

		FaxComStartTime = SYB_CurrentTime;	/** 交信開始時間(秒) */
		/*
		** QAT中に通信記録の通信時間が実際の時間と異なる不具合対策用
		** By S.Kawasaki 1996/09/02
		*/
		SYS_FCM_StartTime = SYS_1SecGeneralTimer;

		/* ジャーナルセット関数化 1996/11/29  By T.Yamaguchi */
		SetPatJournalDataAtAutoFax();
		
		FaxComPeriod = 0;
	}
#endif	

	/*------------------*/
	/** 料金管理の処理	*/
	/*------------------*/
#if(PRO_COST == ENABLE)
#if (0) /* マルチ回線に対応するため統一する  1997/09/19 s.takeuchi */
** 	/* 料金管理のため場所移動 1994/12/26 Y.Suzuki */
** 	/** 使用するコストテーブルを決定 */
** 	/* 中継指示受信した原稿を送信する場合、料金管理がON していても計算しない。28.Dec'94 */
** 	if((SYS_FaxComType == SYS_COMMAND_EXECUTE)
** 	&& (CommandFileOptionItem != SYS_RELAYED_TX)
** 	&& (CommandFileOptionItem != SYS_RELAYED_TX_REPORT)
** 	&& (CommandFileOptionItem != SYS_BATCH_MEMORY_TX)) {	/** 交信種別判定 **/
** 		cost_data = FCM_GetCostTable(SYS_DialingNumber.Buffer);
** 		if(CheckCostTable(cost_data)) { /** 部門管理がONの場合 */
** 			CheckCostFlag = 1;
** 		}
** 		else {
** 			CheckCostFlag = 0;
** 		}
** 		if(CheckCostFlag && ((AD_Result == AD_OK_CED) || (AD_Result == AD_OK_DIS) || (AD_Result == AD_OK_DSE))) { /** 部門管理がONで受信機と接続できた場合 */
** 			FCM_CostCalculate(CommandFileDepartmentCode,SYB_NTT_AccessFile[cost_data].CostTable);
** 		}
** 	}
/*************************************************************************
	module		:[原稿蓄積タスクからのメッセージ処理]
	function	:[
		原稿蓄積タスクからのメッセージを解析し、必要な処理する
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[
		コンパイル時の"out of heap space"解消のために
		原稿蓄積タスクからのメッセージ処理を抜き出しました。
	]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1996/10/12]
	author		:[小谷正樹]
*************************************************************************/
void	MAN_FromDocStore(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	UBYTE is_mem_over_wait = TRUE;
	MESSAGE_t	MainTaskMessage;
	MESSAGE_t	*MessageControl;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	if (doc_message == MSG_SCN_DOCSTORE_1PAGE_START) { /* 表示更新用同期メッセージ */
		snd_msg(mbxno.SCN_Sub, &MainTaskMessage); /** 同期用メッセージ */
	}
	else {
		snd_msg(mbxno.SCN_Task, &MainTaskMessage); /** 同期用メッセージ */
	}

	/**	「1ページ蓄積開始」と「1ページ蓄積完了」以外のメッセージの時に、
	**	蓄積タスクを終了する
	*/
	if ((doc_message != MSG_SCN_DOCSTORE_1PAGE_START)
	&&	(doc_message != MSG_SCN_DOCSTORE_1PAGE_FINISH)) {
		if (tskno_SCN_DocumentStoreTask != 0xffff) {
			del_tsk(&tskno_SCN_DocumentStoreTask);	/** 蓄積タスクの停止	*/
		}
	}

	switch (doc_message) {
	/****************************************************************/
	/* 原稿蓄積タスク-正常終了処理									*/
	/****************************************************************/
	case MSG_SCN_DOCSTORE_OK: /** 蓄積正常終了であれば */

		SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY); /** スキャナー使用中の解除 */
		SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE);/** 原稿蓄積中を解除 */
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_JAM_RECOVER_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START;

#if (PRO_FBS == ENABLE)
		/** ADF読み取りで正常終了したら、ギアバックラッシュを予約する */
		if (SYS_ScannerExecMode == SCN_ADF) {
			GearBackLashRequest = TRUE;
			SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;
			if (CHK_UNI_MirrorReadyModeVariable()) { /* ミラーキャリッジ待機位置可動仕様 */
				SCN_MirrorReadyPosition = READY_POSITION_ADF; /* 待機位置をADFにする */
			}
		}
		else { /* FBS読取りの場合 */
			/* FBS読取りが終了した時点でFBSカバーが開いていたらFBSを待機位置とする */
			if (CHK_UNI_MirrorReadyModeVariable()) { /* ミラーキャリッジ待機位置可動仕様 */
				if (SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_BOOK_OPEN) {
					SCN_MirrorReadyPosition = READY_POSITION_FBS;
				}
				else {
					SCN_MirrorReadyPosition = READY_POSITION_ADF;
				}
			}
		}
#else
		GearBackLashRequest = TRUE;
#endif

		switch (SYS_DocumentStoreItem) { /** 原稿の種別を解析 */
		case SYS_MEM_TX_FILE: /** メモリ送信ファイル */
#if (PRO_FBS == ENABLE)	/* By M.Kotani 97/05/29 */
			/* 次原稿ありの場合、次原稿蓄積開始オペレーション */
			if (SYS_NextBookDocument == TRUE) {
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_NEXT_SCAN_START_OPR;
#if (0) /* OPR_Task からタイマーを起動するように変更 */
//				/* 次原稿オペレーションタイマーを起動(60秒) */
//				if (timer_next_scan_complete == 0xff) {
//					CMN_MultiTimer10msStart(&timer_next_scan_complete,&NextScanStartOperation);
//				}
#endif
			}
			/* 次原稿なしの場合、蓄積完了表示 */
			else {
				/* メモリ送信コマンド・ファイルの登録 */
				MemoryTxDocStoreOK(SYS_COMMAND_TRX);
				/* 原稿蓄積完了表示起動 */
				if (timer_store_fax_complete == 0xff) {
					CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
				}
			}
#else	/**(PRO_FBS == DISENABLE)*/	/* By M.Kotani 97/05/29 */
			/* メモリ送信コマンド・ファイルの登録 */
			MemoryTxDocStoreOK(SYS_COMMAND_TRX);
			/* 原稿蓄積完了表示起動 */
			if (timer_store_fax_complete == 0xff) {
				CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
			}
#endif
			break;
#if (PRO_BATCH_TX == ENABLE)
		case SYS_MEM_BATCH_TX_FILE1: /** 一括送信原稿なら */
		case SYS_MEM_BATCH_TX_FILE2: /** 一括送信原稿なら */
		case SYS_MEM_BATCH_TX_FILE3: /** 一括送信原稿なら */
		case SYS_MEM_BATCH_TX_FILE4: /** 一括送信原稿なら */
		case SYS_MEM_BATCH_TX_FILE5: /** 一括送信原稿なら */
#if (PRO_FBS == ENABLE)	/* By M.Kotani 97/05/29 */
			/* 次原稿ありの場合、次原稿蓄積開始オペレーション */
			if (SYS_NextBookDocument == TRUE) {
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_NEXT_SCAN_START_OPR;
#if (0) /* OPR_Task からタイマーを起動するように変更 */
//				/* 次原稿オペレーションタイマーを起動(60秒) */
//				if (timer_next_scan_complete == 0xff) {
//					CMN_MultiTimer10msStart(&timer_next_scan_complete,&NextScanStartOperation);
//				}
#endif
			}
			/* 次原稿なしの場合、蓄積完了表示 */
			else {
				/* メモリ送信コマンド・ファイルの登録 */
				MemoryTxDocStoreOK(SYS_BATCH_TX);
				/* 原稿蓄積完了表示起動 */
				if (timer_store_fax_complete == 0xff) {
					CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
				}
			}
#else	/**(PRO_FBS == DISENABLE)*/	/* By M.Kotani 97/05/29 */
			/* メモリ送信コマンド・ファイルの登録 */
			MemoryTxDocStoreOK(SYS_BATCH_TX);
			/* 原稿蓄積完了表示起動 */
			if (timer_store_fax_complete == 0xff) {
				CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
			}
#endif /* PRO_FBS end */
			break;
#endif /* PRO_BATCH_TX end */
		case SYS_MEM_MULTI_COPY_FILE: /** マルチ・コピ・ファイル */
			MultiCopyDocStoreOK(); /** マルチ・コピー・ファイルの登録 */
#if (PRO_FBS == ENABLE)
			if ((SYS_ScannerExecMode == SCN_ADF) && (timer_store_copy_complete == 0xFF)) {
				CMN_MultiTimer10msStart(&timer_store_copy_complete, &StoreCompleteMessage);
			}
#else
			if (timer_store_copy_complete == 0xFF) {
				CMN_MultiTimer10msStart(&timer_store_copy_complete, &StoreCompleteMessage);
			}
#endif
			break;
		case SYS_MEM_MANUAL_COPY_FILE: /* 手差しコピーファイル */
			ManualCopyDocStoreOK();	/* 手差しコピーファイルの登録 */
#if (PRO_FBS == ENABLE)
			if ((SYS_ScannerExecMode == SCN_ADF) && (timer_store_copy_complete == 0xFF)) {
				CMN_MultiTimer10msStart(&timer_store_copy_complete, &StoreCompleteMessage);
			}
#else
			if (timer_store_copy_complete == 0xFF) {
				CMN_MultiTimer10msStart(&timer_store_copy_complete, &StoreCompleteMessage);
			}
#endif
			break;
		case SYS_MEM_POLLING_FILE: /** ポーリング・ファイル */
#if (PRO_FBS == ENABLE)	/* By M.Kotani 97/05/29 */
			/* 次原稿ありの場合、次原稿蓄積開始オペレーション */
			if (SYS_NextBookDocument == TRUE) {
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_NEXT_SCAN_START_OPR;
#if (0) /* OPR_Task からタイマーを起動するように変更 */
//				/* 次原稿オペレーションタイマーを起動(60秒) */
//				if (timer_next_scan_complete == 0xff) {
//					CMN_MultiTimer10msStart(&timer_next_scan_complete,&NextScanStartOperation);
//				}
#endif
			}
			/* 次原稿なしの場合、蓄積完了表示 */
			else {
				SYB_PollingDocumentStatus = 1; /*	* ポーリング原稿有りセット */
#if (PRO_MULTI_LINE == ENABLE)
				SYB_PollingDocExclusiveFlag = SYS_EXIST_AND_NO_SENDING;	/* ポーリング原稿があるかどうかの変数 */
#endif
				/* 原稿蓄積完了表示起動 */
				if (timer_store_fax_complete == 0xff) {
					CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
				}
			}
#else	/**(PRO_FBS == DISENABLE)*/	/* By M.Kotani 97/05/29 */
			SYB_PollingDocumentStatus = 1; /*	* ポーリング原稿有りセット */
#if (PRO_MULTI_LINE == ENABLE)
			SYB_PollingDocExclusiveFlag = SYS_EXIST_AND_NO_SENDING;	/* ポーリング原稿があるかどうかの変数 */
#endif
			/* 原稿蓄積完了表示起動 */
			if (timer_store_fax_complete == 0xff) {
				CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
			}
#endif /* PRO_FBS end */
			break;
		case SYS_MEM_DB_POLLING_FILE: /** 検索ポーリング・ファイル */
#if (PRO_FBS == ENABLE)	/* By M.Kotani 97/05/29 */
			/* 次原稿ありの場合、次原稿蓄積開始オペレーション */
			if (SYS_NextBookDocument == TRUE) {
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_NEXT_SCAN_START_OPR;
#if (0) /* OPR_Task からタイマーを起動するように変更 */
//				/* 次原稿オペレーションタイマーを起動(60秒) */
//				if (timer_next_scan_complete == 0xff) {
//					CMN_MultiTimer10msStart(&timer_next_scan_complete,&NextScanStartOperation);
//				}
#endif
			}
			/* 次原稿なしの場合、蓄積完了表示 */
			else {
				SYB_DB_PollingDocumentStatus = 1; /** 検索ポーリング有りセット */
				/* 原稿蓄積完了表示起動 */
				if (timer_store_fax_complete == 0xff) {
					CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
				}
			}
#else	/**(PRO_FBS == DISENABLE)*/	/* By M.Kotani 97/05/29 */
			SYB_DB_PollingDocumentStatus = 1; /** 検索ポーリング有りセット */
			/* 原稿蓄積完了表示起動 */
			if (timer_store_fax_complete == 0xff) {
				CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
			}
#endif /* PRO_FBS end */
			break;
#if (PRO_CLASS1 == ENABLE)	/* Add By Y.Tanimoto 1996/06/26 */
		case SYS_MEM_CLASS1_TX_FILE:	/* CLASS1 ローカルスキャン・ファイル */
			SYB_CL1_LocalScanDocStatus = 1; /**ローカルスキャン原稿有りセット *//*1996/09/24 Eguchi */
			MainTaskMessage.Item = FROM_MAIN;
			MainTaskMessage.Message = CL1_SCAN_REQ;
			MainTaskMessage.SubMessage1 = SYS_CLASS1_SCAN_MEMORY;
			snd_msg(mbxno.CL1_Task, &MainTaskMessage);
			break;
#endif
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
		case SYS_MEM_SUB_BULLETIN_FILE:	/* Fコード原稿蓄積起動 */
#if (PRO_FBS == ENABLE)
			/* 次原稿ありの場合、次原稿蓄積開始オペレーション */
			if (SYS_NextBookDocument == TRUE) {
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_NEXT_SCAN_START_OPR;
#if (0) /* OPR_Task からタイマーを起動するように変更 */
//				/* 次原稿オペレーションタイマーを起動(60秒) */
//				if (timer_next_scan_complete == 0xff) {
//					CMN_MultiTimer10msStart(&timer_next_scan_complete,&NextScanStartOperation);
//				}
#endif
			}
			/* 次原稿なしの場合、蓄積完了表示 */
			else {
				FcodeDocStoreOK(SYS_DocumentStoreBoxNumber);
				/* 原稿蓄積完了表示起動 */
				if (timer_store_fax_complete == 0xff) {
					CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
				}
			}
#else /* (PRO_FBS == DISABLE) */
			/* 原稿蓄積完了表示起動 */
			if (timer_store_fax_complete == 0xff) {
				CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
			}
#endif /* PRO_FBS end */
			break;
#endif
#if (PRO_CIPHER == ENABLE)
		case SYS_MEM_CIPHER_FILE:
  #if (PRO_FBS == ENABLE)	/* By M.Kotani 97/05/29 */
			/* 次原稿ありの場合、次原稿蓄積開始オペレーション */
			if (ScrambleOn == 1) {/*	By Y.Suzuki 1997/09/04	*/
				if (SYS_NextBookDocument == TRUE) {
					SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_NEXT_SCAN_START_OPR;
#if (0) /* OPR_Task からタイマーを起動するように変更 */
//					/* 次原稿オペレーションタイマーを起動(60秒) */
//					if (timer_next_scan_complete == 0xff) {
//						CMN_MultiTimer10msStart(&timer_next_scan_complete,&NextScanStartOperation);
//					}
#endif
				}
				/* 次原稿なしの場合、蓄積完了表示 */
				else {
					/* 原稿蓄積完了表示起動 */
					if (timer_store_fax_complete == 0xff) {
						CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
					}
				}
 			}
  #else	/**(PRO_FBS == DISENABLE)*/	/* By M.Kotani 97/05/29 */
			/* 原稿蓄積完了表示起動 */
			if (ScrambleOn == 1) {/*	By Y.Suzuki 1997/09/04	*/
				if (timer_store_fax_complete == 0xff) {
					CMN_MultiTimer10msStart(&timer_store_fax_complete,&StoreCompleteMessage);
				}
			}
  #endif
			if (ScrambleOn == 1) {/*	By Y.Suzuki 1997/09/04	*/
				SYS_CipherComExec = SYS_CIPHER_EXEC;
				SYS_MachineStatus[SYS_CIPHER_STATUS] = SYS_SCRAMBLE_EXEC;
				CipherReadIndex.Item = SYS_DocumentStoreItem;
				CipherReadIndex.No = SYS_DocumentStoreNo;
				CipherReadIndex.Page = SYS_DocumentStorePage;
				CipherReadIndex.BoxNumber = 0;
				CipherData.StartPageNo = 1;
				/*	暗号化タスク起動	*/
				cre_tsk(&tskno_SCD_CipherTask,TSK_SCD_CIPHERTASK,0);
			}
			break;
#endif /* PRO_CIPHER end */
		default: /** 原稿の種別不適当 */
			/**	 有りえない */
			break;
		}

#if (PRO_FBS == ENABLE)	/* by K.Watanabe '97.09/11 */
		/* 電話中にポーリング蓄積等をされると、UpdateLCD()では次原稿蓄積の確認表示が出来ないので、
		** ジャムリカバー等と同様に、オペレーションでイベントを受けるロジックに変更します
		*/
		if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_START_OPR) {
			snd_msg(mbxno.OPR_SubMessageTask, &MainTaskMessage);
			rcv_msg(mbxno.OPR_Sub_MANTask, &MessageControl);
		}
#endif
		break;

	/****************************************************************/
	/* 原稿蓄積タスク-メモリ・オーバー処理							*/
	/****************************************************************/
	case MSG_SCN_DOCSTORE_MEM_OVER: /** 蓄積メモリー・オーバー時の処理 */
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_JAM_RECOVER_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START;
		/*	村田仕様用の原稿蓄積メモリオーバー処理
		**	※FX仕様は削除	1996/10/31 s.takeuchi
		*/

		switch (SYS_DocumentStoreItem) { /** 原稿の種別を解析 */
		case SYS_MEM_TX_FILE:
		case SYS_MEM_MULTI_COPY_FILE:
		case SYS_MEM_MANUAL_COPY_FILE:
		case SYS_MEM_POLLING_FILE:
		case SYS_MEM_DB_POLLING_FILE:
#if (PRO_BATCH_TX == ENABLE)
		case SYS_MEM_BATCH_TX_FILE1:
		case SYS_MEM_BATCH_TX_FILE2:
		case SYS_MEM_BATCH_TX_FILE3:
		case SYS_MEM_BATCH_TX_FILE4:
		case SYS_MEM_BATCH_TX_FILE5:
#endif
#if (PRO_CLASS1 == ENABLE)
		case SYS_MEM_CLASS1_TX_FILE:
#endif
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
		case SYS_MEM_SUB_BULLETIN_FILE:	/* Fコード原稿蓄積起動 */
#endif
#if (PRO_CIPHER == ENABLE)
		case SYS_MEM_CIPHER_FILE:/**	暗号化前原稿 By Y.Suzuki 1997/06/10	*/
			if ((ScrambleOn == 0) && (SYS_DocumentStoreItem == SYS_MEM_CIPHER_FILE)) {
				SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY); /** スキャナ-開放 */
				SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE); /** 蓄積終了 */
				break;
			}
#endif
			/** 1ページ以上蓄積ならキー入力待ち(FIP以外)*/
			if ((MEM_CountTotalPage(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber)!= MEM_NO_INDEX) /* 1ページ以上蓄積されている */
			 && (SYS_DocumentStoreItem != SYS_MEM_FIP_FILE) /* FIPファイルでない */
			 &&	!CMN_CheckScanFilePrinting())  {
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_MEMORY_OVER_OPR; /** オペレーション経由のメモリ・オーバーをセット */
				snd_msg(mbxno.OPR_SubMessageTask, &MainTaskMessage);/* OPR_Task -> OPR_SubMessageTask Jan.18,1995 By T.Nose */
				rcv_msg(mbxno.OPR_Sub_MANTask, &MessageControl); /* By S.K Jan.24,1995 */
				is_mem_over_wait = TRUE;
			}
			else {
				switch (SYS_DocumentStoreItem)	{ /** 原稿の種別を解析 */
				case SYS_MEM_TX_FILE: /** メモリ送信ファイル */
#if (PRO_CIPHER == ENABLE)
				case SYS_MEM_CIPHER_FILE:/**	暗号化前原稿 By Y.Suzuki 1997/06/10	*/
					if ((SYS_DocumentStoreItem == SYS_MEM_CIPHER_FILE) && (ScrambleOn == 0)) {
						break;
					}
#endif
					if (SYS_DocumentStoreItem != SYS_MEM_CIPHER_FILE) {
						MemoryTxDocStoreNG(SYS_COMMAND_TRX); /** メモリ送信コマンド・ファイルのキャンセル */
					}
					if (CHK_UNI_MemoryOverMessagePrint()) { /** メモリ・オーバー・メッセージ印字ON? */
															/* UNI :NEw MEMORY SWITCH 対応1996/04/16 Eguchi */
						SYS_MemoryOverListRequest = 1; /** メモリ・オーバー印字要求セット */
					}
					break;
#if (PRO_BATCH_TX == ENABLE)
				case SYS_MEM_BATCH_TX_FILE1: /** 一括送信原稿なら */
				case SYS_MEM_BATCH_TX_FILE2: /** 一括送信原稿なら */
				case SYS_MEM_BATCH_TX_FILE3: /** 一括送信原稿なら */
				case SYS_MEM_BATCH_TX_FILE4: /** 一括送信原稿なら */
				case SYS_MEM_BATCH_TX_FILE5: /** 一括送信原稿なら */
					MemoryTxDocStoreNG(SYS_BATCH_TX); /** 一括送信コマンド・ファイルのキャンセル */
					if (CHK_UNI_MemoryOverMessagePrint()) { /** メモリ・オーバー・メッセージ印字ON? */
						SYS_MemoryOverListRequest = 1; /** メモリ・オーバー印字要求セット */
					}
					break;
#endif
				case SYS_MEM_POLLING_FILE: /** ポーリング・ファイル */
				case SYS_MEM_DB_POLLING_FILE: /** 検索ポーリング・ファイル */
					/** ポーリング原稿、検索ポーリング原稿のメモリ・オーバー時のリスト出力 */
					if (CHK_UNI_MemoryOverMessagePrint()) { /** メモリ・オーバー・メッセージ印字ON? */
						SYS_MemoryOverListRequest = 1;
					}
					break;
				case SYS_MEM_MULTI_COPY_FILE: /** マルチ・コピー・ファイル */
					/* コピープリント中ならメモリオーバーとして登録する	 1996/12/18 s.takeuchi */
					if (CMN_CheckScanFilePrinting()) {
						MultiCopyDocStoreMemoryOver();
					}
					else {	/* 通常のメモリオーバー処理 */
						MultiCopyDocStoreNG(); /** マルチ・コピー・ファイルのキャンセル */
					}
					break;
				case SYS_MEM_MANUAL_COPY_FILE: /** 手差しコピーファイル */
					SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START;
					/* コピープリント中ならメモリオーバーとして登録する	 1996/12/18 s.takeuchi */
					if (CMN_CheckScanFilePrinting()) {
						ManualCopyDocStoreMemoryOver();
					}
					else {	/* 通常のメモリオーバー処理 */
						ManualCopyDocStoreNG(); /** 手差しコピーファイルのキャンセル */
					}
					break;
#if (PRO_CLASS1 == ENABLE)
				case SYS_MEM_CLASS1_TX_FILE:	/* CLASS1 ローカルスキャン・ファイル */
					SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FAXMODEM; /** CLASS1動作中クリア	*/
					MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER);
					break;
#endif
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
				case SYS_MEM_SUB_BULLETIN_FILE:	/* Fコード原稿蓄積起動 */
					/** Fコード原稿のメモリ・オーバー時のリスト出力 */
					FcodeDocStoreNG(SYS_DocumentStoreBoxNumber);
					if (CHK_UNI_MemoryOverMessagePrint()) { /** メモリ・オーバー・メッセージ印字ON? */
						SYS_MemoryOverListRequest = 1;
					}
					break;
#endif
				default:
					break;
				}
				SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY); /* スキャナ-開放 */
				SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE); /* 蓄積終了 */
				SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_MEMORY_OVER; /** メモリ・オーバー・セット */
			}
			break;
		default: /**  有りえない */
			SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY); /** スキャナ-開放 */
			SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE); /** 蓄積終了 */
			break;
		}
		break;

	/****************************************************************/
	/* 原稿蓄積タスク-停止処理										   */
	/****************************************************************/
	case MSG_SCN_DOCSTORE_STOPSW_ON: /** 蓄積停止処理	*/
#if (PRO_FBS == ENABLE)
		if (CHK_UNI_MirrorReadyModeVariable()) { /* ミラーキャリッジ待機位置切替え可能仕様 */
			/* 蓄積の中断は無条件でADF位置へ */
			SCN_MirrorReadyPosition = READY_POSITION_ADF;
		}
#endif
		switch (SYS_DocumentStoreItem)	{ /** 原稿の種別を解析 */
		case SYS_MEM_TX_FILE: /** メモリ送信ファイル */
#if (PRO_CIPHER == ENABLE)
		case SYS_MEM_CIPHER_FILE:/**	暗号化前原稿 By Y.Suzuki 1997/07/11	*/
			if ((SYS_DocumentStoreItem == SYS_MEM_CIPHER_FILE) && (ScrambleOn == 0)) {
				break;
			}
#endif
			MemoryTxDocStoreNG(SYS_COMMAND_TRX); /** メモリ送信コマンド・ファイルのキャンセル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber); /** 原稿消去 Mar.11.1997  By T.Yamaguchi */
			break;
#if (PRO_BATCH_TX == ENABLE)
		case SYS_MEM_BATCH_TX_FILE1: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE2: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE3: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE4: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE5: /** 一括送信原稿 */
			MemoryTxDocStoreNG(SYS_BATCH_TX); /** メモリ送信コマンド・ファイルのキャンセル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			break;
#endif
		case SYS_MEM_MULTI_COPY_FILE: /** マルチ・コピー・ファイル */
			/* コピープリント中なら停止でも登録する  1996/12/18 s.takeuchi */
			if (CMN_CheckScanFilePrinting()) {
				MultiCopyDocStoreOK(); /** マルチ・コピー・ファイルの登録 */
			}
			else {
				MultiCopyDocStoreNG(); /** マルチ・コピー・ファイルのキャンセル */
				MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			}
			break;
		case SYS_MEM_MANUAL_COPY_FILE: /** 手差し・コピー・ファイル */
			/* コピープリント中なら停止でも登録する  1996/12/18 s.takeuchi */
			if (CMN_CheckScanFilePrinting()) {
				ManualCopyDocStoreOK(); /** 手差しコピーファイルの登録 */
			}
			else {
				ManualCopyDocStoreNG(); /** 手差し・コピー・ファイルのキャンセル */
				MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			}
			break;
		case SYS_MEM_POLLING_FILE: /** ポーリング・ファイル */
		case SYS_MEM_DB_POLLING_FILE: /** 検索ポーリング・ファイル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			break;
#if (PRO_CLASS1 == ENABLE)	/* Add By Y.Tanimoto 1996/06/26 */
		case SYS_MEM_CLASS1_TX_FILE:	/* CLASS1 ローカルスキャン・ファイル */
			SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FAXMODEM; /** CLASS1動作中クリア	*/
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER);
			break;
#endif
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
		case SYS_MEM_SUB_BULLETIN_FILE:	/* Fコード原稿蓄積起動 */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber); /** 原稿消去 Mar.11.1997  By T.Yamaguchi */
			FcodeDocStoreNG(SYS_DocumentStoreBoxNumber);
			break;
#endif
		default: /** 有り得ない */
			break;
		}
		SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY); /** スキャナ-開放 */
		SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE); /** 蓄積終了 */

		/* 停止処理追加(原稿なければギアバックラッシュを予約する)  1997/04/18 s.takeuchi */
#if (PRO_FBS == ENABLE)
		if (SYS_ScannerExecMode == SCN_ADF) {
			if (!DS1() && !DS2()) {
				GearBackLashRequest = TRUE;
			}
		}
#else
		if (!DS1() && !DS2()) {
			GearBackLashRequest = TRUE;
		}
#endif
		break;
	/****************************************************************/
	/* 原稿蓄積一ページ蓄積終了										*/
	/* 表示更新用													*/
	/* 蓄積処理としては何も実行しない								*/
	/****************************************************************/
	case MSG_SCN_DOCSTORE_1PAGE_FINISH:		/* 1ページ蓄積完了 */
		switch (SYS_DocumentStoreItem) {
		case SYS_MEM_MULTI_COPY_FILE:
			SYB_MultiCopyFile[SYB_MultiCopyWritePoint].StorePage++;
#if (PRO_FBS == ENABLE)
			if (SYS_ScannerExecMode == SCN_FBS) {
				/* ここでマシンステータスの蓄積中解除と完了表示の起動を行っていたが
				** 完了表示が2回出ていたので削除。他にすることなし。
				*/
			}
			else {
				/* TBD 実施する場合はここにいれる
				** ADFで1ページ読取り完了時、選択された記録紙に画データが納まらないとき、
				** 記録紙選択/確認のオペレーションを行う
				*/
				/* ADF原稿サイズ入力 by T.Soneoka 1997/03/10
				** ADF蓄積枚数が1枚目のとき
				** 1.ADF蓄積完了した原稿サイズと倍率より用紙を確定する
				** 2.用紙確定できる場合
				**     �@SYS_MultiCopyFile[].Cassetteに設定する
				** 3.用紙確定できない場合
				**     �@マシンステータスを設定する
				**     �AADF用紙選択オペレーションを実行するためメッセージ送信する
				*/
			}
#endif
			break;
		case SYS_MEM_MANUAL_COPY_FILE:
			SYB_ManualCopyFile.StorePage++;
			break;
		default:
			break;
		}
		break;
	case MSG_SCN_DOCSTORE_1PAGE_START:
		break;
	/****************************************************************/
	/* 原稿蓄積タスク-エラー処理									*/
	/****************************************************************/
	case MSG_SCN_DOCSTORE_MAXLINE_OVER: /* 継続ジャムオペレーション */
	case MSG_SCN_DOCSTORE_DOC_ERROR:
	case MSG_SCN_DOCSTORE_TOP_COVER_OPEN:
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_JAM_RECOVER_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START;
		/* ADFカバー開の時はFEED_ERRORを立てない  1996/10/31 s.takeuchi */
#if (PRO_SEPERATE_24V == DISABLE)
#if (PRO_FBS == ENABLE)
		if (!(SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_SCANNER_OPEN)
		 || ((SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_PRINTER_OPEN) && (SYS_ScannerExecMode == SCN_ADF))) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR;
		}
#else /* PRO_FBS else */
		if (!(SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_SCANNER_OPEN)) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR;
		}
#endif /* PRO_FBS end */
#else /* PRO_SEPERATE_24V else */
		if (!(SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_SCANNER_OPEN)) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR;
		}
#endif /* PRO_SEPERATE_24V end */
		SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE);
		SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY);

		if (SYS_DocumentStoreItem == SYS_MEM_MULTI_COPY_FILE) {
			if (SYB_MultiCopyFile[SYB_MultiCopyWritePoint].SortType == SYS_NONE_SORT) {
			/* ノン・ソートマルチコピーの場合は中断→終了 */
				if (((message == MSG_SCN_DOCSTORE_DOC_ERROR) || (message == MSG_SCN_DOCSTORE_TOP_COVER_OPEN))
				 && CMN_CheckScanFilePrinting()) {
				/* "00/00 00"と表示されるため、プリント中ならDOC_ERRORでも登録する  1997/05/22 s.takeuchi */
					MultiCopyDocStoreOK();
				}
				else {
					MultiCopyDocStoreNG();
					MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER);
				}
				break;
			}
			else {
				if (MEM_CountTotalPage(SYS_DocumentStoreItem, SYB_MultiCopyReadPoint, MEM_IGNORE_BOX_NUMBER) == MEM_NO_INDEX) {
					/* ソートマルチコピーで一枚も蓄積されていなければ 中断→終了*/
					MultiCopyDocStoreNG();
					MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /* 蓄積原稿の消去 */
					break;
				}
			}
		}
		if (SYS_DocumentStoreItem == SYS_MEM_MANUAL_COPY_FILE) {
			if (SYB_ManualCopyFile.SortType == SYS_NONE_SORT) {
				if (((message == MSG_SCN_DOCSTORE_DOC_ERROR) || (message == MSG_SCN_DOCSTORE_TOP_COVER_OPEN))
				 && CMN_CheckScanFilePrinting()) {
				/* "00/00 00"と表示されるため、プリント中ならDOC_ERRORでも登録する  1997/05/22 s.takeuchi */
					ManualCopyDocStoreOK();
				}
				else {
					ManualCopyDocStoreNG();
					MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER);
				}
				break;
			}
			else {
				if (MEM_CountTotalPage(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER) == MEM_NO_INDEX) { /* 1ページも蓄積されていなければ */
					ManualCopyDocStoreNG();
					MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /* 蓄積原稿の消去 */
					break;
				}
			}
		}
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
		if (SYS_DocumentStoreItem == SYS_MEM_SUB_BULLETIN_FILE) {
			if (MEM_CountTotalPage(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber) == MEM_NO_INDEX) { /* 1ページも蓄積されていなければ */
				MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber); /* 蓄積原稿の消去 */
				FcodeDocStoreNG(SYS_DocumentStoreBoxNumber);
				break;
			}
		}
#endif
		else {
#if 0	/* 変更 1997/06/02 By T.Yamaguchi */
**			if (MEM_CountTotalPage(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER) == MEM_NO_INDEX) @ /* 1ページも蓄積されていなければ */
**				MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /* 蓄積原稿の消去 */
#endif
			if (MEM_CountTotalPage(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber) == MEM_NO_INDEX) { /* 1ページも蓄積されていなければ */
				MemoryTxDocStoreNG(SYS_COMMAND_TRX); /** メモリ送信コマンド・ファイルのキャンセル */
				MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber); /* 蓄積原稿の消去 */
				break;
			}
		}
		if (doc_message == MSG_SCN_DOCSTORE_TOP_COVER_OPEN) {
			DocumentResetOperation = TRUE; /* ジャム/FBSリカバーオペレーション指示 */
		}
		else {
			/* ジャムリカバーオペレーション指示 */
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_JAM_RECOVER_OPR;
			snd_msg(mbxno.OPR_SubMessageTask, &MainTaskMessage);
			rcv_msg(mbxno.OPR_Sub_MANTask, &MessageControl);
		}
		break;
	case MSG_SCN_DOCSTORE_NO_DOCUMENT:
	case MSG_SCN_DOCSTORE_LAMP_ERROR:
	case MSG_SCN_DOCSTORE_STR_PAGE_ERROR:
	case MSG_SCN_DOCSTORE_MIRROR_ERROR:
	default:
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_JAM_RECOVER_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START_OPR;
		SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_NEXT_SCAN_START;
		/** 蓄積タスク・エラー処理 */
		switch (SYS_DocumentStoreItem) { /** 原稿の種別を解析 */
		case SYS_MEM_TX_FILE: /** メモリ送信ファイル */
#if (PRO_CIPHER == ENABLE)
		case SYS_MEM_CIPHER_FILE:/**	暗号化前原稿 By Y.Suzuki 1997/07/11	*/
			if ((SYS_DocumentStoreItem == SYS_MEM_CIPHER_FILE) && (ScrambleOn == 0)) {
				break;
			}
#endif
			MemoryTxDocStoreNG(SYS_COMMAND_TRX); /** メモリ送信コマンド・ファイルのキャンセル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber); /** 原稿消去 */
			break;
#if (PRO_BATCH_TX == ENABLE)
		case SYS_MEM_BATCH_TX_FILE1: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE2: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE3: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE4: /** 一括送信原稿 */
		case SYS_MEM_BATCH_TX_FILE5: /** 一括送信原稿 */
			MemoryTxDocStoreNG(SYS_BATCH_TX); /** メモリ送信コマンド・ファイルのキャンセル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			break;
#endif
		case SYS_MEM_MULTI_COPY_FILE: /** マルチ・コピー・ファイル */
			MultiCopyDocStoreNG(); /* マルチ・コピー・ファイルのキャンセル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			break;
		/* ICHOU変更 by T.Soneoka 1996/08/07 */
		case SYS_MEM_MANUAL_COPY_FILE: /** 手差し・コピー・ファイル */
			ManualCopyDocStoreNG(); /* 手差し・コピー・ファイルのキャンセル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 原稿消去 */
			break;
		case SYS_MEM_POLLING_FILE: /** ポーリング・ファイル */
		case SYS_MEM_DB_POLLING_FILE: /** 検索ポーリング・ファイル */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER); /** 蓄積原稿の消去 */
			break;
#if (PRO_CLASS1 == ENABLE)	/* Add By Y.Tanimoto 1996/06/26 */
		case SYS_MEM_CLASS1_TX_FILE:	/* CLASS1 ローカルスキャン・ファイル */
			SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FAXMODEM; /** CLASS1動作中クリア	*/
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, MEM_IGNORE_BOX_NUMBER);
			break;
#endif
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
		case SYS_MEM_SUB_BULLETIN_FILE:	/* Fコード原稿蓄積起動 */
			MEM_ClearDocAndFATArea(SYS_DocumentStoreItem, SYS_DocumentStoreNo, SYS_DocumentStoreBoxNumber); /** 原稿消去 Mar.11.1997  By T.Yamaguchi */
			FcodeDocStoreNG(SYS_DocumentStoreBoxNumber);
			break;
#endif
		default:
			break;
		}
		if (doc_message == MSG_SCN_DOCSTORE_LAMP_ERROR) { /** ランプ・エラーなら */
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_LAMP_ERROR; /** ランプ・エラーをセット */
		}
		else if (doc_message == MSG_SCN_DOCSTORE_STR_PAGE_ERROR) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_PAGE_ERROR;	/** 指定枚数ページエラー */	/*	SYS_SCANNER_PAGE_ERRORはどこでクリアするのか? オペレーション */

			/**	枚数指定>読み取り枚数 の時はSCN_Task内で排出後
			**	ピックアップローラーを上げるための要求をセットする
			*/	/* 1997/03/12 s.takeuchi */
			GearBackLashRequest = TRUE;
		}
#if (PRO_FBS == ENABLE)
		else if ((doc_message == MSG_SCN_DOCSTORE_MIRROR_ERROR)
		 && !(SYB_MaintenanceSwitch[MNT_SW_C6] & IGNORE_MIRROR_ERROR)) {
			/* 原稿蓄積がミラーエラーなら、スキャナの状態をミラーエラーにする */
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_MIRROR_ERROR;
		}
#endif
		SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~(SYS_SCANNER_BUSY); /** スキャナ-開放 */
		SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~(SYS_DOC_STORE); /** 蓄積終了 */
		break;
	}

	/* 蓄積終了後の初期化処理 */
	switch (SYS_DocumentStoreItem) { /** 原稿の種別を解析 */
	case SYS_MEM_TX_FILE: /** メモリ送信ファイル */
#if (PRO_BATCH_TX == ENABLE)
	case SYS_MEM_BATCH_TX_FILE1: /** 一括送信原稿 */
	case SYS_MEM_BATCH_TX_FILE2: /** 一括送信原稿 */
	case SYS_MEM_BATCH_TX_FILE3: /** 一括送信原稿 */
	case SYS_MEM_BATCH_TX_FILE4: /** 一括送信原稿 */
	case SYS_MEM_BATCH_TX_FILE5: /** 一括送信原稿 */
#endif
#if (PRO_F_CODE == ENABLE)	/* 1997/03/11  By T.Yamaguchi */
	case SYS_MEM_SUB_BULLETIN_FILE:	/* Fコード原稿蓄積起動 */
#endif
	case SYS_MEM_POLLING_FILE: /** ポーリング・ファイル */
	case SYS_MEM_DB_POLLING_FILE: /** 検索ポーリング・ファイル */
#if (PRO_CIPHER == ENABLE)
	case SYS_MEM_CIPHER_FILE:/**	暗号化前原稿 By Y.Suzuki 1997/07/11	*/
#endif
#if (PRO_COPY_FAX_MODE == DISABLE)	/**1997/08/21 By M.Kotani*/
	case SYS_MEM_MULTI_COPY_FILE: /** マルチ・コピー・ファイル */
	case SYS_MEM_MANUAL_COPY_FILE: /** 手差し・コピー・ファイル */
#endif
#if (PRO_CIPHER == ENABLE)/*	By Y.Suzuki 1997/09/04	*/
		if ((SYS_DocumentStoreItem == SYS_MEM_CIPHER_FILE) && (ScrambleOn == 0)) {
			break;
		}
#endif
		if ((doc_message != MSG_SCN_DOCSTORE_1PAGE_START)
		 &&	(doc_message != MSG_SCN_DOCSTORE_1PAGE_FINISH)
		 && (doc_message != MSG_SCN_DOCSTORE_DOC_ERROR)
		 && (doc_message != MSG_SCN_DOCSTORE_MAXLINE_OVER)) {
			if ((!(SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_OPR))
			 && (!(SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_START_OPR))) {
				CMN_ResetMemoyFeederTx();
				CMN_ResetStamp();
				CMN_ResetPrimaryMode();
				CMN_ResetPrimaryContrast(); /** 濃度のリセット処理とLEDをリセット */
				CMN_ResetConfirmationReport(); /* By S.K Sep.19,1994 */
			}
		}
		break;
#if (PRO_COPY_FAX_MODE == ENABLE)	/**1997/08/21 By M.Kotani*/
	case SYS_MEM_MULTI_COPY_FILE: /** マルチ・コピー・ファイル */
	case SYS_MEM_MANUAL_COPY_FILE: /** 手差し・コピー・ファイル */
#endif
#if (PRO_PRINT_TYPE == LED)
		PRN_1PageReceived = 1;	/* 受信中原稿待ちしているプリントタスクを再動作させる */
#endif
		break;
	default:
		break;
	}

#if (PRO_FBS == ENABLE)
	/* 次原稿指示変数、ブック原稿サイズ設定フラグの初期化 */
	if (!(SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_START_OPR)
	 && (doc_message != MSG_SCN_DOCSTORE_1PAGE_START)
	 && (doc_message != MSG_SCN_DOCSTORE_1PAGE_FINISH)
	 && (doc_message != MSG_SCN_DOCSTORE_DOC_ERROR)
	 && (doc_message != MSG_SCN_DOCSTORE_MAXLINE_OVER)) {
		SYS_NextBookDocument = FALSE;
		IsBookDocSizeSet = FALSE;
	}
#endif

#if (PRO_FBS == ENABLE)
	/**	ミラーキャリッジを待機位置まで引き戻す
	**	ただし、以下の条件の時は引き戻さない
	**		1ページ蓄積開始、1ページ蓄積完了、ミラーエラーの時
	*/
	if ((doc_message != MSG_SCN_DOCSTORE_1PAGE_START)
	 &&	(doc_message != MSG_SCN_DOCSTORE_1PAGE_FINISH)
	 &&	!(SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_MIRROR_ERROR)) {
		SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;
		if (SCN_MirrorReadyPosition == READY_POSITION_ADF) { /* 待機位置ADF */
			if ((SCN_MirrorCarriageStatus == MIRROR_HS_ON) /* ADF→FBS移動中の停止処理 */
			/* || (SCN_MirrorCarriageStatus == MIRROR_FBS_SCANNING) @* FBS読取り中の停止処理 */
			 || (SCN_MirrorCarriageStatus == MIRROR_MOVE_ABORT_STOP)) { /* FBS読取り中の停止処理 */
				MirrorTaskInstruction = MIRROR_TASK_TO_ADF_READY;
			}
			else { /* FBS読取り終了の時 */
				MirrorTaskInstruction = MIRROR_TASK_FBS_END_TO_ADF;
			}
		}
		else { /* 待機位置FBS */
			MirrorTaskInstruction = MIRROR_TASK_TO_READY;
		}
		MirrorTaskRequest = TRUE;
	}
#endif
}
/*************************************************************************
	module		:[ミラーキャリッジ移動タスクからのメッセージ処理]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1996/10/07]
	author		:[吉川弘康]
*************************************************************************/
void	MAN_FromSCN_MirrorMoveTask(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	MESSAGE_t	MainTaskMessage;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	/** 同期用メッセージを送信し、ミラータスクを削除 */
	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	snd_msg( mbxno.SCN_MirrorMoveTask, &MainTaskMessage );
	if (tskno_SCN_MirrorMoveTask != 0xffff) {
		/* SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_MIRROR_BUSY;  1996/10/31 */
		del_tsk( &tskno_SCN_MirrorMoveTask );
	}

	if (doc_message == MSG_MIRROR_MOVE_OK) {	/** 正常に終了した */

		switch (SCN_MirrorTaskControl) {	/** ミラーキャリッジの動作指定 */
		case	MIRROR_TASK_INITIALIZE:	/** 電源ON時の初期化 */
			/** ミラー初期化中ビットをクリアしてスキャナを開放する */
			SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;
			SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~(SYS_SCANNER_MIRROR_INIT|SYS_SCANNER_MIRROR_BUSY);

			/* 次原稿読取開始指示がある場合(プリンタカバーが開閉された) */
			if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_START) {
				/* 次原稿読取開始処理 */
				MAN_NextScanStart();
			}
			break;
		case	MIRROR_TASK_TO_READY:	/** 読み取り後の初期化 */
		case	MIRROR_TASK_TO_FBS_READY:	/* FBS待機位置への初期化 */
			/** スキャナを開放する */
			SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;
			SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_MIRROR_BUSY;
			/* 次原稿読取開始指示がある場合 */
			if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_START) {
				/* 次原稿読取開始処理 */
				MAN_NextScanStart();
			}
			break;
		case	MIRROR_TASK_TO_ADF:		/** ADF部への移動 */
			/** 読取り位置への移動完了とする */
			SYS_IsMirrorScanReady = TRUE;

			/* ADF読み取り前の準備中表示のため  1997/03/05 s.takeuchi */
			SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~(SYS_SCANNER_PREPARATION_ADF);
			break;
		case	MIRROR_TASK_TO_FBS:		/** FBS部への移動 */
			/*
			**	D71サブASSY検査用(FBS)
			*/
			SYS_IsMirrorScanReady = TRUE;
			MirrorTaskInstruction = MIRROR_TASK_TO_ADF_READY;
			MirrorTaskRequest = TRUE;
			break;
		case	MIRROR_TASK_FCOT_READY:		/** FCOTコピー用待機位置への移動 */
			/** FCOTの時はMirror Busyを解除する */
			SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;	/* 1997/01/08 */
			SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_MIRROR_BUSY;
			SYS_IsMirrorScanReady = TRUE;
			/* LampOffTimer = 3;	@** ランプOFF用タイマーをセット(3分後にOFF) POPLAR_B で削除 T.Nose */
			break;
		case	MIRROR_TASK_TRANSPORT:		/** 輸送用の固定位置への移動 */
			SYB_ScannerTransportMode = TRUE;	/** 輸送モードを設定 */
			/** スキャナ使用禁止にするため、ミラー初期化中ビットなどはクリアしない */
			break;
		case	MIRROR_TASK_FBS_END_TO_ADF:	/** FBS読取り終了位置からADF読み取り位置への移動 */
			SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;
			SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~SYS_SCANNER_MIRROR_BUSY;
			SYS_IsMirrorScanReady = TRUE;
			break;
		case	MIRROR_TASK_TO_ADF_READY:	/** ADF待機位置への初期化 */
			/*
			**	D71サブASSY検査用(FBS)
			*/
			SYS_IsMirrorScanReady = TRUE;
			MirrorTaskInstruction = MIRROR_TASK_CCD_ADJUST;
			MirrorTaskRequest = TRUE;
			break;
		case	MIRROR_TASK_CCD_ADJUST:
			/*
			**	D71サブASSY検査用(FBS)
			*/
			LampOff();
			break;
		default:
			break;
		}
	}
	else {		/** エラーで終了した */
		/** ミラーキャリッジの移動が異常終了すると
		**	スキャナの状態をエラーにして、スキャナを開放する
		*/
		switch (doc_sub_message1) {
		case	MIRROR_MOVE_ERROR:
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_MIRROR_ERROR;
			break;
		case	MIRROR_MOVE_LAMP_ERROR:
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_LAMP_ERROR;
			break;
		}

		/**	ミラーの初期化エラーではスキャナを開放する
		**	(ADF/FBS読取り時は読み取り側のメッセージ処理で開放する)
		*/
		if ((SCN_MirrorTaskControl != MIRROR_TASK_TO_ADF)
		&&	(SCN_MirrorTaskControl != MIRROR_TASK_TO_FBS)) {
			SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;
		}

		/* ADF読み取り前の準備中表示のため  1997/03/05 s.takeuchi */
		if ((SCN_MirrorTaskControl == MIRROR_TASK_TO_ADF)
		 || (SCN_MirrorTaskControl == MIRROR_TASK_TO_FBS)) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] &= ~(SYS_SCANNER_PREPARATION_ADF);
		}
	}
}
/*************************************************************************
	module		:[済スタンプテストタスクからのメッセージ処理]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[MAN]
	date		:[1996/10/12]
	author		:[小谷正樹]
*************************************************************************/
void	MAN_FromSCN_StampTestTask(
	UWORD	item,
	UWORD	message,
	UWORD	sub_message1,
	UWORD	sub_message2)
{
	MESSAGE_t	MainTaskMessage;
	UWORD	doc_item;
	UWORD	doc_message;
	UWORD	doc_sub_message1;
	UWORD	doc_sub_message2;

	doc_item = item;
	doc_message = message;
	doc_sub_message1 = sub_message1;
	doc_sub_message2 = sub_message2;

	MainTaskMessage.Item = FROM_MAIN;
	MainTaskMessage.Message = MSG_EXIT;
	snd_msg(mbxno.SCN_Task, &MainTaskMessage); /** 同期用メッセージ */
	if (tskno_SCN_StampTestTask != 0xffff) {
		del_tsk(&tskno_SCN_StampTestTask); /** スタンプ・テストタスクの停止 */
	}
	SYS_MachineStatus[SYS_MACHINE_STATUS] &= ~SYS_FEED_OUT;
	SYS_MachineStatus[SYS_RESOURCE_STATUS] &= ~SYS_SCANNER_BUSY;
	switch (doc_message) {
	case MSG_DOCUMENT_OUT_OK:
		break;
	case MSG_DOCUMENT_OUT_ERROR:
		/* ADFカバー開の時はFEED_ERRORを立てない  1996/10/31 s.takeuchi */
		if (!(SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_SCANNER_OPEN)) {
			SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR; /** フィードエラー */
		}
	case MSG_DOCUMENT_OUT_NEXTPAGE_OK:/* このようなエラーは無い(桐には)*/
		break;
	case MSG_DOCUMENT_OUT_NEXTPAGE_ERROR:
		SYS_MachineStatus[SYS_SCANNER_STATUS] |= SYS_SCANNER_FEED_ERROR; /*** フィード・エラーをセット */
		break;
	}
#if (0)
/*#if (PRO_PRINT_TYPE == LASER)*/
	if (!(SYS_MachineStatus[SYS_RESOURCE_STATUS]&SYS_SCANNER_BUSY) &&
		!(SYS_MachineStatus[SYS_MACHINE_STATUS]&(SYS_FEED_IN+SYS_FEED_OUT))) { /* 7/29/1994 */
	/*	SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;			'96,03,13 By N.S. */
		SCN_Init();
		if( tskno_SCN_GearBackLashTask == 0xffff ){						/* '96,03,13 By N.S. */
			SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;	/* '96,03,13 By N.S. */
			cre_tsk(&tskno_SCN_GearBackLashTask, TSK_SCN_GEARBACKLASHTASK, 0 );
		}
		/*	SCN_GearBackLashTaskの二重Cleateと原稿繰込動作が起動されない状態の防止 5 lines Insert By N.S. 1996/05/07 */
		else{
			del_tsk(&tskno_SCN_GearBackLashTask);
			SYS_MachineStatus[SYS_RESOURCE_STATUS] |= SYS_SCANNER_BUSY;
			cre_tsk(&tskno_SCN_GearBackLashTask, TSK_SCN_GEARBACKLASHTASK, 0 );
		}
	}
/*#endif*/
#endif
	/*	メッセージ処理の後でタスクを起動する	 1996/08/10 s.takeuchi
	**	ICHOUでのスタンプテスト時はミラーは待機位置にあるはずなので、
	**	スタンプテストタスク終了処理ではギアバックラッシュを予約するだけで良い
	*/
	GearBackLashRequest = TRUE;	/** ギアバックラッシュを予約する */
}
/*-----------------------------------------------*/
UBYTE AfterDial_ToneDetect(void)
{
	MESSAGE_t		*ad_receive;					/*	rcv_msg()で受信データをセットする*/
	UWORD		ad_message = 0;
	UBYTE		return_value = 0xFF;			/*	トーン検出結果	*/
#if defined(FRA)
	UBYTE FRA_RBT_Det_Flag;
#endif

	struct	Timer10msData_t	TimeUp;
	struct	Timer10msData_t	CNG_OFF_TimeUp;
	struct	Timer10msData_t	ToneKeepTimeUp;
	struct	ToneDetectMailBoxData_t	BusyToneDetectMailBox;
	struct	ToneDetectMailBoxData_t	ConToneDetectMailBox;
	struct	ToneDetectMailBoxData_t	DisToneDetectMailBox;
	struct	ToneDetectMailBoxData_t	CedToneDetectMailBox;
#if (PRO_TX_SPEED == V34) /* Added by H.Kubo 1998/01/08 */
#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)
	UBYTE filter_type;
#endif /* (PRO_MODEM == R288F) */
#endif /* (PRO_TX_SPEED == V34) */
#if (PRO_SPEED_EX == ENABLE)
	struct	ToneDetectMailBoxData_t	ASToneDetectMailBox; /*			 | SendMBX | ToneType |	 */
#endif

#if (PRO_MODEM == ORANGE3)
	/* ATD_FilterOnOffDetectTaskへの引き数の型が合っていない T.Nose 1996/06/01 */
	UBYTE	tone_detect_type;
	tone_detect_type = AFTER_DIAL_DETECT;
	tskno_freq_check = 0xffff;
#endif
	tskno_bt = 0xffff;
	tskno_ct = 0xffff;
	tskno_ced = 0xffff;
	tskno_dis = 0xffff;
	tskno_ad_dse = 0xffff;
	tskno_ad_timeup = 0xff;
	tskno_cngoff_timeup = 0xff;
	tskno_tonekeep_timeup = 0xff;
/*	tskno_ad_timeup = 0xffff;	*/
/*	tskno_cngoff_timeup = 0xffff;	*/
/*	tskno_tonekeep_timeup = 0xffff;	*/
	tskno_ad_stop = 0xffff;
#if (PRO_SPEED_EX == ENABLE)
	tskno_as_tn = 0xffff;	/* 着信トーン検出 */
#endif
#if (PRO_TX_SPEED == V34) /* Added by H.Kubo 1997/07/19 */
 #if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)
	tskno_ad_answer_tone = 0xffff;
	filter_type = AFTER_DIAL_FILTER;
 #endif /* (PRO_MODEM == R288F) */
#endif /* (PRO_TX_SPEED == V34) */

	CNG_StopFlag = 0;		/*CNG送出:0	   CNG停止:1*/
#if (PRO_TX_SPEED == V34) /* Added by H.Kubo 1997/07/19 */
 #if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)
	SYS_V8DetectATV25Flag = 0;	/** V25 Answer Tone Flag */
 #endif /* (PRO_MODEM == R288F) */
#endif /* (PRO_TX_SPEED == V34) */
/* #if defined(DEU) */	/* by M.H '97/03/21 for CNG Tx timing from holding the line (1.5 +- 1sec) */
	/*
	** ダイヤル後一発目のCNGを出すまでの時間は1.5s±1.0s
	** DEUのみの規格だが標準で入れておく Jun.12.1997  By T.Yamaguchi
	*/
	wai_tsk(130);
/* #endif */

	/*------------------------------*/
	/*フィルターのトーン周波数検出範囲を設定*/
	/*------------------------------*/
	MDM_FilterSet(AFTER_DIAL_FILTER);
	/*---------------*/
	/*トーン検出&CNG送出*/
	/*---------------*/
	for (;;) {
		/*--------------*/
		/*CNG送出(500ms)*/
		/*--------------*/
		MDM_ToneTx(TONE_1080HZ, 500);

#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* Added by H.Kubo 1997/07/19 */

		/* CNGの送出間隔が正しくON/OFF=0.5秒/3秒にならない。
		** 原因は、CNGのONを送出後、OFFのタイマーを起動するまでに時間がかかりすぎている為
		** よって、CNGのOFFタイマーの起動はON送出直後に移動させます。
		** By O.Kimoto 1999/04/22
		*/
		if (tskno_cngoff_timeup == 0xFF) {
#if defined(FRA) || defined(DEU) || defined(EUR)	/* add by M.HARADA '97/1/8 */
													/* 欧州仕様追加 by M.H 1999/09/16 */
			CNG_OFF_TimeUp.Time	= 280;		/*	close to 3秒	*/
#else
			CNG_OFF_TimeUp.Time	= 300;		/*	3秒	*/
#endif
			CNG_OFF_TimeUp.SendMBX		= mbxno.FCM_Task;
			CNG_OFF_TimeUp.ReturnValue	= TIMEUP_CNGOFF;
			CMN_MultiTimer10msStart(&tskno_cngoff_timeup, &CNG_OFF_TimeUp);
		}
#if defined(FRA)
		else{
			debug_debug = 0;
		}
#endif

		/* ダイヤルトーン検出用フィルターをセットする前に
		** CONFの値をV.8からV.21に戻しておきます。
		** 1997/05/27 Y.Murata
		*/
		/*---------------------------------------*/
		/* re config tone mode for ATV25detector */
		/*---------------------------------------*/
		MDM_ToneModeConfig();
#endif /* (PRO_MODEM == R288F) */

		/*------------------------------*/
		/*フィルターのトーン周波数検出範囲を設定*/
		/*------------------------------*/
		MDM_FilterSet(AFTER_DIAL_FILTER);
		/*------------------*/
		/*ストップキー検出タスク	*/
		/*------------------*/
		if (tskno_ad_stop == 0xFFFF) {
			cre_tsk(&tskno_ad_stop, TSK_ATD_CHECKSTOPTASK, 0);
		}
		/*------------------*/
		/*タイムアップ検出タスク生成*/
		/*------------------*/
/*		if (tskno_ad_timeup == 0xFFFF) {	1996/12/12	By T.Yamaguchi */
		if (tskno_ad_timeup == 0xFF) {
			if (CHK_AFTER_DIAL_DELAY_TIME()) {	/* By M.Tachibana 1997/06/09 */
	            TimeUp.Time = ((UWORD)CHK_AFTER_DIAL_DELAY_TIME()*100);   /*着信検出時間*/
			}
			else {
				TimeUp.Time = ((struct ToneParameters_t *)CTRY_BusyTone())->MaxDetectTime;	/*着信検出時間*/
			}
			TimeUp.SendMBX		= mbxno.FCM_Task;
			TimeUp.ReturnValue	= TIMEUP;
			CMN_MultiTimer10msStart(&tskno_ad_timeup, &TimeUp);
/*			cre_tsk(&tskno_ad_timeup, TSK_CMN_MAN_TIMER10MSTASK, &TimeUp);	*/
		}
		/*-----------------------------*/
		/*CNG OFF 3秒タイムアップ検出タスク生成*/
		/*-----------------------------*/

#if (PRO_MODEM != R288F) && (PRO_MODEM == MN195006)	/* Add By O.Kimoto 1999/04/22 */
/*		if (tskno_cngoff_timeup == 0xFFFF) {	*/
			if (tskno_cngoff_timeup == 0xFF) {
 #if defined(FRA) || defined(DEU) || defined(EUR)	/* add by M.HARADA '97/1/8 */
													/* 欧州仕様追加 by M.H 1999/09/16 */
			CNG_OFF_TimeUp.Time	= 280;		/*	close to 3秒	*/
 #else
			CNG_OFF_TimeUp.Time	= 300;		/*	3秒	*/
 #endif
			CNG_OFF_TimeUp.SendMBX		= mbxno.FCM_Task;
			CNG_OFF_TimeUp.ReturnValue	= TIMEUP_CNGOFF;
			CMN_MultiTimer10msStart(&tskno_cngoff_timeup, &CNG_OFF_TimeUp);
/*			cre_tsk(&tskno_cngoff_timeup, TSK_CMN_MAN_TIMER10MSTASK, &CNG_OFF_TimeUp);	*/
		}
 #if defined(FRA)
		else{
			debug_debug = 0;
		}
 #endif
#endif

		/*-------------------*/
		/*ビジ-トーン検出タスク生成*/
		/*-------------------*/
		if(FCM_PtnrChkBusyToneDetect()) {
			if (((struct ToneParameters_t far *)CTRY_BusyTone())->DetectCycle) {
				if (tskno_bt == 0xFFFF) {
					BusyToneDetectMailBox.ToneType = BUSYTONE;
					BusyToneDetectMailBox.SendMBX = mbxno.FCM_Task;
					switch (((struct ToneParameters_t far *)CTRY_BusyTone())->TonePattern) {
					case	0:		/*トーンのパターンが連続の時*/
						cre_tsk(&tskno_bt, TSK_ATD_TONEDETECTPATTERN0TASK, &BusyToneDetectMailBox);
						break;
					case	1:		/*トーンのパターンが ON-OFF の時*/
					case	2:		/*トーンのパターンが ON-OFF-ON-OFF の時*/
					case	3:		/*トーンのパターンが ON-OFF-ON-OFF-ON-OFF の時*/
						cre_tsk(&tskno_bt, TSK_ATD_TONEDETECTPATTERN1TASK, &BusyToneDetectMailBox);
						break;
					}
				}
			}
		}
		/*-----------------------*/
		/*コンジェスショントーン検出タスク生成*/
		/*-----------------------*/
#if defined(FRA)
		if (CHK_UNI_HumanAnswerClear()) {
#endif
			if(CHK_UNI_ConToneDetect()) {
				if (((struct ToneParameters_t far *)CTRY_CongestionTone())->DetectCycle) {
					if (tskno_ct == 0xFFFF) {
						ConToneDetectMailBox.ToneType = CONTONE;
						ConToneDetectMailBox.SendMBX = mbxno.FCM_Task;
						switch (((struct ToneParameters_t far *)CTRY_CongestionTone())->TonePattern) {
						case	0:		/*トーンのパターンが連続の時*/
							cre_tsk(&tskno_ct, TSK_ATD_TONEDETECTPATTERN0TASK, &ConToneDetectMailBox);
							break;
						case	1:		/*トーンのパターンが ON-OFF の時*/
						case	2:		/*トーンのパターンが ON-OFF-ON-OFF の時*/
						case	3:		/*トーンのパターンが ON-OFF-ON-OFF-ON-OFF の時*/
							cre_tsk(&tskno_ct, TSK_ATD_TONEDETECTPATTERN1TASK, &ConToneDetectMailBox);
							break;
						}
					}
				}
			}
#if defined(FRA)
		}
#endif

#if (PRO_TX_SPEED == V34) /* Added by H.Kubo 1997/07/19 */
		/*---------------------------------*/
		/** V25アンサートーンタスク生成 */
		/* CEDトーン検出タスク生成(連続トーン)    */
		/*---------------------------------*/
 #if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)

  #if (0)
** /* V.8ハンドシェーク中のノイズ対策 by O.Kimoto 1999/04/13 */
**   #if (PRO_CED_DETECT == ENABLE) /* 日立特許回避。Clover2 から移植。By H.Kubo 1998/07/08 */
** 		if (CHK_CED_Detect()) {
**   #else
** 		if (CHK_CED_Detect() && (CMN_GetDataSignalingRate() & DATA_SIGNALING_RATE_V34_BIT)) {
**   #endif
  #else
   #if (PRO_CED_DETECT == ENABLE) /* 日立特許回避。Clover2 から移植。By H.Kubo 1998/07/08 */
		if (CHK_CED_Detect() && (SYB_MemorySwitch[MEMORY_SW_B3] & INHIBIT_DETECT_ANSAM)) {
   #else
		if (CHK_CED_Detect() && (CMN_GetDataSignalingRate() & DATA_SIGNALING_RATE_V34_BIT) && !FCM_OverrideANSam()) {
   #endif
  #endif

			if (tskno_ad_answer_tone == 0xffff) {
				cre_tsk(&tskno_ad_answer_tone, TSK_ATD_DETECTANSWERTONEV25TASK, &filter_type);
			}
		}
 #else /* (PRO_MODEM == R288F) */
	#error "Need a method to detect V25 answer tone and CED."
 #endif /* (PRO_MODEM == R288F) */
#else /* (PRO_TX_SPEED == V34) */
		/*----------------------------*/
		/*CEDトーン検出タスク生成(連続トーン)*/
		/*----------------------------*/
 #if (PRO_CED_DETECT == ENABLE)	/* 日立特許回避 By M.Tachibana 1998/04/14 */
		if (CHK_CED_Detect()) {
			if (tskno_ced == 0xFFFF) {
				CedToneDetectMailBox.ToneType = CED_TONE;
				CedToneDetectMailBox.SendMBX = mbxno.FCM_Task;
				cre_tsk(&tskno_ced, TSK_ATD_TONEDETECTPATTERN0TASK, &CedToneDetectMailBox);
			}
		}
 #endif
#endif /* (PRO_TX_SPEED == V34) */
		/*-----------------*/
		/*DISトーン検出タスク生成*/
		/*-----------------*/
		if (tskno_dis == 0xFFFF) {
			DisToneDetectMailBox.ToneType = DIS_TONE;
			DisToneDetectMailBox.SendMBX = mbxno.FCM_Task;
			cre_tsk(&tskno_dis, TSK_ATD_TONEDETECTPATTERN0TASK, &DisToneDetectMailBox);
		}
#if (PRO_SPEED_EX == ENABLE)
		/*------------------------*/
		/*極性反転(DSE)検出タスク生成*/
		/*------------------------*/
		if ((CHK_UNI_SpeedHandshakeEx() == 0)
			&&(CHK_UNI_DSE_Detect())) {		/* 個別A0 */
			if (tskno_ad_dse == 0xFFFF) {
				cre_tsk(&tskno_ad_dse, TSK_ATD_CHECKDSETASK, 0);
			}
		}
		/*--------------------------*/
		/*着信後トーン検出(短縮用)*/
		/*--------------------------*/
		if ((SpeedHandshakeRomCheck() == TRUE) &&
		   (CHK_UNI_SpeedHandshakeEx() != 0)) {
			if (tskno_as_tn == 0xFFFF) {
				ASToneDetectMailBox.ToneType = SPD_TONE;
				ASToneDetectMailBox.SendMBX = mbxno.FCM_Task;
				cre_tsk(&tskno_as_tn, TSK_ATD_CHECKTONETASK, &ASToneDetectMailBox);
			}
		}
#else
		/*------------------------*/
		/*極性反転(DSE)検出タスク生成*/
		/*------------------------*/
#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* Ported from CLOVER by H.Kubo 1997/11/04 */
		/* Class1動作時は極反検出は行いません By O.Kimoto 1997/06/02 */
		if (!CMN_CheckActiveClass1()) {
			if (CHK_UNI_DSE_Detect()) {
				if (tskno_ad_dse == 0xFFFF) {
					cre_tsk(&tskno_ad_dse, TSK_ATD_CHECKDSETASK, 0);
				}
			}
		}
#else /* (PRO_MODEM == R288F) */
		/* Class1動作時は極反検出は行いません 暫定処置 S.Fukui Jun.29,1998 */
		if (!CMN_CheckActiveClass1()) {
			if (CHK_UNI_DSE_Detect()) {		/* 個別A0 */
				if (tskno_ad_dse == 0xFFFF) {
						cre_tsk(&tskno_ad_dse, TSK_ATD_CHECKDSETASK, 0);
				}
			}
		}
 #if (0)
		if (CHK_UNI_DSE_Detect()) {		/* 個別A0 */
			if (tskno_ad_dse == 0xFFFF) {
					cre_tsk(&tskno_ad_dse, TSK_ATD_CHECKDSETASK, 0);
			}
		}
 #endif
#endif /* (PRO_MODEM == R288F) */
#endif


		/*-------------------------------------*/
		/*	Frequency check Only Orange3 Modem */
		/*-------------------------------------*/
#if (PRO_MODEM == ORANGE3)
		if (tskno_freq_check == 0xFFFF) {
			cre_tsk(&tskno_freq_check, TSK_ATD_FILTERONOFFDETECTTASK, &tone_detect_type);
		}
#endif

		for(;;) {
		/*----------*/
		/*メッセージ受信*/
		/*----------*/
			rcv_msg(mbxno.FCM_Task, &ad_receive);
			ad_message = ad_receive->Message;
#if defined(FRA)						/* 95/01/20 by M.HARADA */
			/*-----------------*/
			/* RBTを検出した時 */
			/*-----------------*/
			if(ad_message == CONTONE){
				if (tskno_ct != 0xFFFF) {					/* del RBT検出タスク */
					del_tsk(&tskno_ct);
				}
			}
#endif
			/*------------------------*/
			/*CNG OFF時間が3秒経った時*/
			/*------------------------*/
			if (ad_message == TIMEUP_CNGOFF) {
				if (tskno_cngoff_timeup != 0xFF) {
					CMN_MultiTimer10msStop(&tskno_cngoff_timeup);
				}
/*				del_tsk(&tskno_cngoff_timeup);	1996/12/12	By T.Yamaguchi */
				/*-----------------------------------------*/
				/*CNG送出を止める時						   */
				/*(CNG_StopFlagはトーン検出タスクの中でセットされる)*/
				/*-----------------------------------------*/
				if (CNG_StopFlag) {
					CNG_StopFlag = 0;
					/*-----------------------------*/
					/*トーン検出続行タイムアップ検出タスク生成*/
					/*-----------------------------*/
/*					if(tskno_tonekeep_timeup == 0xFFFF){	1996/12/12	By T.Yamaguchi */
					if(tskno_tonekeep_timeup == 0xFF){
						ToneKeepTimeUp.Time			= 500;/*トーン検出続行時間(5秒)*/
						ToneKeepTimeUp.SendMBX		= mbxno.FCM_Task;
						ToneKeepTimeUp.ReturnValue	= TIMEUP_TONE0;
						CMN_MultiTimer10msStart(&tskno_tonekeep_timeup, &ToneKeepTimeUp);
/*						cre_tsk(&tskno_tonekeep_timeup, TSK_CMN_MAN_TIMER10MSTASK, &ToneKeepTimeUp);	*/
					}
				}
				/*---------------*/
				/*CNG送出を続ける*/
				/*---------------*/
				else {
					break;
				}
			}
			else {
				/*---------------------------------*/
				/*(*ad_receive) == TIMEUP_TONE0の時*/
				/*---------------------------------*/
/*				if (tskno_tonekeep_timeup != 0xFFFF) {	1996/12/12	By T.Yamaguchi */
				if (tskno_tonekeep_timeup != 0xFF) {
					CMN_MultiTimer10msStop(&tskno_tonekeep_timeup);
/*					del_tsk(&tskno_tonekeep_timeup);	*/
				}
				break;
			}
		}
		/*------------------*/
		/*メッセージに対する処理*/
		/*------------------*/
		switch (ad_message) {
		case	TIMEUP_CNGOFF:
		case	TIMEUP_TONE0:
			break;
		case	BUSYTONE:
#if !defined(FRA)							/* FRA以外 by M.HARADA 95/01/20 */
		case	CONTONE:
#endif
			return_value = AD_REMOTE_BUSY;
			break;
		case	TIMEUP:
			return_value = AD_TIME_OVER;
			break;
		case	MSG_DETECT_STOP:
			return_value = AD_STOPPED;
			break;
		case	MSG_DETECT_DSE:
			return_value = AD_OK_DSE;
			break;
#if (PRO_SPEED_EX == ENABLE)
		case	SPD_TONE:
			return_value = AD_OK_SPD_TONE;
			break;
#endif
#if defined(FRA)						/* 95/01/20 by M.HARADA */
		case	CONTONE:
			break;
		case	MSG_TIMEUP_AFTER_RBT:
			return_value = AD_DETECT_RINGBACKTONE;
			break;
#endif
		case	CED_TONE:
			return_value = AD_OK_CED;
			break;
#if (PRO_TX_SPEED == V34)  /* Added by H.Kubo 1997/07/19 */
 #if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)
		case	MSG_DETECT_V25_ANSWER_TONE:
			return_value = AD_OK_ANSWER_TONE;
			break;
 #endif /* (PRO_MODEM == R288F) */
#endif /* (PRO_TX_SPEED == V34) */
		default:	/* DIS */
			return_value = AD_OK_DIS;
			break;
		}
		detect_end_flag = 0;
		/*--------------------------------*/
		/*return_valueに値がセットされていたら*/
		/*--------------------------------*/
		if (return_value != 0xFF) {
			detect_end_flag = 1;
			Del_AfterTone_Task();
			return(return_value);
		}
		else {
			Del_AfterTone_Task();
		}
	}
}


/*---------------------------------*/
/*ダイアル後トーン検出で使用したタスクを削除*/
/*---------------------------------*/
void	Del_AfterTone_Task(void)
{
	if (tskno_bt != 0xFFFF) {
		del_tsk(&tskno_bt);
	}
	if (tskno_ct != 0xFFFF) {
		del_tsk(&tskno_ct);
	}
	if (tskno_ced != 0xFFFF) {
		del_tsk(&tskno_ced);
	}
	if (tskno_dis != 0xFFFF) {
		del_tsk(&tskno_dis);
	}
#if (PRO_SPEED_EX == ENABLE)
	if (tskno_as_tn != 0xFFFF){
		del_tsk(&tskno_as_tn);
	}
#endif
/*	if (tskno_cngoff_timeup != 0xFFFF) {	*/
	if (tskno_cngoff_timeup != 0xFF) {
		CMN_MultiTimer10msStop(&tskno_cngoff_timeup);
/*		del_tsk(&tskno_cngoff_timeup);	*/
	}
/*	if (tskno_tonekeep_timeup != 0xFFFF) {	*/
	if (tskno_tonekeep_timeup != 0xFF) {
		CMN_MultiTimer10msStop(&tskno_tonekeep_timeup);
/*		del_tsk(&tskno_tonekeep_timeup);	*/
	}
#if defined(FRA)
/*	if (tskno_after_rbt_timeup !=0xFFFF) {	*/
	if (tskno_after_rbt_timeup !=0xFF) {		/* 1996/12/12  By T.Yamaguchi */
		CMN_MultiTimer10msStop(&tskno_after_rbt_timeup);
/*		del_tsk(&tskno_after_rbt_timeup);	*/
	}
#endif
#if (PRO_MODEM == ORANGE3)
	if (tskno_freq_check != 0xFFFF) {
		del_tsk(&tskno_freq_check);
	}
#endif
	if (detect_end_flag) {
		if (tskno_ad_dse != 0xFFFF) {
			del_tsk(&tskno_ad_dse);
		}
/*		if (tskno_ad_timeup != 0xFFFF) {	*/
		if (tskno_ad_timeup != 0xFF) {
			CMN_MultiTimer10msStop(&tskno_ad_timeup);
/*			del_tsk(&tskno_ad_timeup);	*/
		}
		if (tskno_ad_stop != 0xFFFF) {
			del_tsk(&tskno_ad_stop);
		}
	}
#if (PRO_TX_SPEED == V34) /* Added by H.Kubo 1997/07/19 */
 #if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)
	/*---------------------------------*/
	/** V25アンサートーンタスク削除 */
	/*---------------------------------*/
	if (tskno_ad_answer_tone != 0xffff) {
		del_tsk(&tskno_ad_answer_tone);
	}
 #endif /* (PRO_MODEM == R288F) */
#endif /* (PRO_TX_SPEED == V34) */
}


#if (PRO_TX_SPEED == V34)
 #if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006)
/* Ported from Clover\src\astn.c by H.Kubo 1997/07/22 */
/*************************************************************************
	module		:[V25アンサートーン検出]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[MS-C(Ver.6.0)]
	keyword		:[ATD]
	date		:[1995/10/24]
	author		:[村田]
*************************************************************************/
/* void ATD_DetectAnswerToneV25Task(void) */ /* ビジートーン誤検出対策用に引数を加えた。*/
void ATD_DetectAnswerToneV25Task(UBYTE *filter_type)
{
	MESSAGE_t msg;

	UWORD			atv25_on_cnt;
	UWORD			atv25_off_cnt;
	unsigned char	ret;
	UWORD detect_time;	/* ANSam対策 By O.Kimoto 1997/06/02 */
	
	ret = 0;
	
	CMN_DisableInterrupt();		/** 割り込み禁止 */
	if (SYS_V8DetectATV25Flag == 0) {
		wai_evt(EVT_MDM_ATV25);	/* ATV25 */
	}
	CMN_EnableInterrupt();		/** 割り込み許可 */
	SYS_V8DetectATV25Flag = 0;

	/* Class1動作時は、ATV25の監視タイマーを1秒にします。 By O.Kimoto 1997/06/02 */
	if (CMN_CheckActiveClass1()) {
		detect_time = 1000/10;
	}
	else {
		detect_time = 100/10;
	}

	/* 1997/01/26 Y.Murata
	 * ATV25が誤検出してT.1.1になる可能性がるため
	 * 再度検出
	*/
	atv25_on_cnt = 0;
	atv25_off_cnt = 0;
	while (1) {
		if (MDM_GetIO(POS_ATV25)) {
			if (*filter_type == (UBYTE) AFTER_DIAL_FILTER) { /* Busy tone 誤検出対策 */
  #if (0)
				if (MDM_GetIO(POS_TONEA)) { /* BUSY Tone 検出用フィルタフラグ監視 */
					atv25_off_cnt++;
					if (atv25_off_cnt > 4) {	/* 30ms */
						atv25_on_cnt = 0;
					}
				}
  #else

   #if defined(USA) /* 音声メッセージ誤検出対策(試し) by H.Kubo 1998/05/28 */
				if (MDM_GetIO(POS_TONEA) || MDM_GetIO(POS_TONEB)) { /* BUSY Tone 検出用フィルタフラグ監視 */
					atv25_off_cnt++;
					if ((atv25_off_cnt > 4) && (atv25_on_cnt > 0) ) {	/* 30ms */
						atv25_on_cnt--;
					}
				}
   #endif

				/* AFTER_DIAL_FILTER では、 TONEC で CED (2100Hz) の監視をしています。 */
				if (MDM_GetIO(POS_TONEC)) { /* 2100Hz 検出用フィルタフラグ監視 */
					atv25_on_cnt++;
					atv25_off_cnt = 0;
					if (atv25_on_cnt > detect_time) {	/* 90ms *//* Change 直値(10) to 変数 By O.Kimoto 1997/06/02 */
						break;
					}
				}
				else {
					atv25_off_cnt++;
					if (atv25_off_cnt > 4) {	/* 30ms */
						atv25_on_cnt = 0;
					}
				}
  #endif
			}
			else {
				atv25_on_cnt++;
				atv25_off_cnt = 0;
				if (atv25_on_cnt > detect_time) {	/* 90ms *//* Change 直値(10) to 変数 By O.Kimoto 1997/06/02 */
					break;
				}
			}
		}
		else {
			atv25_off_cnt++;
			if (atv25_off_cnt > 4) {	/* 30ms */
				atv25_on_cnt = 0;
			}
		}
		wai_tsk(1);		/* 10ms */
	}

	/*-----------------*/
	/** メッセージ送信 */
	/*-----------------*/
	msg.Message = MSG_DETECT_V25_ANSWER_TONE;
	snd_msg(mbxno.FCM_Task, &msg);
	wai_tsk(0xFFFF);		/** 無限ループ */

}
Beispiel #17
0
static int __ui_del_tsk(struct pt_regs *regs)
{
	ID tskid = __xn_reg_arg1(regs);

	return del_tsk(tskid);
}
Beispiel #18
0
void MAN_DocumentInTask(void) /* 200,1 */
{
	del_tsk(&tskno_CMN_BuzzerTask);
	wai_tsk(0xffff);
}
/*
 *	Name:	Document Store Task
 *	Create:	Mon Dec 29 15:29:01 1997	by	ishiyama
 *	Synopsis:
 *		#include	"scn_task.h"
 *		void	DocStorTask(void);
 *	Description:
 *		原稿蓄積タスク
 *		コピーの場合は,1スタックで原稿読取り幅を変えない仕様
 *		送信の場合は、ページごとに変える
 *	Return Value:
 *		void
 *	Change Log:
 */
void	DocStoreTask(void)
{
	MESSAGE_t	StoreTaskMsg;				/* 送信メッセージ用エリア */
	MESSAGE_t	*RcvMessage;				/* 受信メッセージ用エリア */
	BOOL	PageLoop;						/* 1Page 読取り処理継続 TRUE:継続,FALSE:中断 */

	tskno_SCN_WatchDocFeedTask = 0xffff;
	tskno_SCN_ScanPage = 0xffff;
	tskno_SCN_StorePage = 0xffff;
	tskno_SCN_DocOutTask = 0xffff;
	tskno_SCN_DummyTask = 0xffff;	/* エンコードタスクからのイベント待ちのタスク、リスケジューラを走らせるため 1999/03/16 by T.Soneoka */

	SYS_MachineStatus[SYS_STOP_SWITCH_STATUS] &= ~(SYS_STOP_DOC_STORE); /** 原稿蓄積の停止要求をクリア */

	SYS_DualRestrictionStatus &= ~0x04; /* 原稿蓄積中断中解除 1999/01/21 by T.Soneoka */

	SYS_StorePause = TRUE;	/* 表示用 1999/1/14 by T.Soneoka */
	
	ScannerMode = SCANNER_DOC_SCAN_MODE;

	OpenScanner();				/* 読取りのための初期設定 */

	ExecutePushStamp = FALSE;
#if (PRO_STAMP == ENABLE)
	SetStampExec();
#endif


	IniMemWriteParameter();		/* 画像メモリのオープンパラメータをセットします */

	PageLoop = QueryDs1On();
	if (!PageLoop) {	/* 先頭ページの読取り開始時に原稿が抜かれていた場合は繰込み不良で終了する */
		StoreTaskMsg.Message = MSG_DOCSTORE_FEED_ERROR;
	}
	while (PageLoop) {					/* Page Loop */

		/*
		** 受信中、原稿蓄積中をデュアル制限のため排他制御します added by H.Hirao 1998/12/26
		*/
		while (1) {
			CMN_DisableInterrupt();
			if (SYS_MachineStatus[SYS_COVER_STATUS] & SYS_COVER_SCANNER_OPEN) {
				CMN_EnableInterrupt();
				StoreTaskMsg.Item = FROM_DOCSTORE;

#if (0)
** 				/* D86-016 メインへ送るメッセージ間違いBy O.Kimoto 1999/02/08 */
** 				StoreTaskMsg.Message = MSG_SCN_DOCSTORE_TOP_COVER_OPEN;
#else
				StoreTaskMsg.Message = MSG_SCN_DOCSTORE_DOC_ERROR;
#endif

				snd_msg(mbxno.MAN_Task, &StoreTaskMsg);
				rcv_msg(mbxno.SCN_Task, &SCN_Msg);
				wai_tsk(0xffff);
			}
			if (SYS_DocumentStoreStopSwitch()) {
				CMN_EnableInterrupt();
				StoreTaskMsg.Item = FROM_DOCSTORE;
				StoreTaskMsg.Message = MSG_SCN_DOCSTORE_STOPSW_ON;
/*
** スキャンクローズで原稿排出中は回線引きっぱなしになる不具合
** 1999/02/01 by T.Soneoka
*/
#if (0)
**				/* 原稿排出処理 */
**				if (SCN_Close((UBYTE)0) != SCN_DOC_EXIT_OK) {
**					StoreTaskMsg.Message = MSG_SCN_DOCSTORE_DOC_ERROR;
**				}
#else
				/* 原稿排出処理 */
				if (SCN_Close((UBYTE)FROM_DOCSTORE) != SCN_DOC_EXIT_OK) {
					StoreTaskMsg.Message = MSG_SCN_DOCSTORE_DOC_ERROR;
				}
#endif

				snd_msg(mbxno.MAN_Task, &StoreTaskMsg);
				rcv_msg(mbxno.SCN_Task, &SCN_Msg);
				wai_tsk(0xffff);
			}
			/* if (((SYS_DualRestrictionStatus & 0x01) == 0x01) || (SYS_MachineStatus[SYS_RESOURCE_STATUS] & SYS_PRE_LINE_BUSY)) { @* 受信中 */
#if (PRO_CLASS1 == ENABLE) && (PRO_RS_INTERNAL == ENABLE)	/* by H.Hirao 1999/03/03 */
			/* CL1_RestrictionStatusResetTimer added by H.Hirao 1999/05/12 */
			if (((SYS_DualRestrictionStatus & 0x01) == 0x01) || (CL1_DualRestrictionStatus & CL1_CLASS1_IN_USE) || SYS_CalledRequestForDocStore
			  || (SYS_CL1_Status & (CL1_CALLED | CL1_FNET_CALLED | CL1_DIALIN_CALLED | CL1_RECEIVE | CL1_SEND | CL1_LOCALSCAN | CL1_LOCALPRINT | CL1_AUTOINIT)) || CL1_RestrictionStatusResetTimer) {
#else
			if (((SYS_DualRestrictionStatus & 0x01) == 0x01) || SYS_CalledRequestForDocStore) { /* 受信中 または 原稿蓄積中にCI検出 changed by H.hirao 1998/12/28 */
#endif

#if (PRO_CLASS1 == ENABLE) && (PRO_RS_INTERNAL == ENABLE)	/* ローカルスキャン原稿は、待ちあわせしない by H.Hirao 1999/05/12 */
				if (SCN_StoreData.Item == SYS_MEM_CLASS1_TX_FILE) {
					CL1_DualRestrictionStatus |= CL1_SCANNER_IN_USE;
					CMN_EnableInterrupt();
					break;
				}
#endif
				/*
				** DUAL制限変更のため
				** 強制メモリ受信以外のときは、スキャナを停止処理をいれます
				** 1999/02/18 by T.Soneoka
				*/
#if (0)
**				SYS_DualRestrictionStatus |= 0x04; /* 原稿蓄積中断中セット 1999/01/21 by T.Soneoka */
#else
				if ((CHK_UNI_V17ReceiveType() != V17_MRX_TO_MRX) ||	(CHK_UNI_V34ReceiveType() != V34_MRX_TO_MRX)) {
					SYS_DualRestrictionStatus |= 0x04; /* 原稿蓄積中断中セット 1999/01/21 by T.Soneoka */
				}
#endif
				CMN_EnableInterrupt();
				wai_tsk(100);
			}
			else {
				/*
				** DUAL制限変更のため
				** 強制メモリ受信以外のときは、スキャナを停止処理をいれます
				** 1999/02/18 by T.Soneoka
				*/
#if (0)
**				SYS_DualRestrictionStatus |= 0x02; /* 原稿蓄積中セット */
#else
				if ((CHK_UNI_V17ReceiveType() != V17_MRX_TO_MRX) ||	(CHK_UNI_V34ReceiveType() != V34_MRX_TO_MRX)) {
					SYS_DualRestrictionStatus |= 0x02; /* 原稿蓄積中セット */
				}
#endif
#if (PRO_CLASS1 == ENABLE) && (PRO_RS_INTERNAL == ENABLE)
				CL1_DualRestrictionStatus |= CL1_SCANNER_IN_USE;	/* スキャン中セット added by H.Hirao 1999/03/04 */
#endif
				CMN_EnableInterrupt();
				break;
			}
		}
		SYS_DualRestrictionStatus &= ~0x04; /* 原稿蓄積中断中解除 1999/01/21 by T.Soneoka */

		PageLoop = FALSE;				/* default 設定 */

#if (PRO_STAMP == ENABLE)
		EnablePushStampEvent = TRUE;	/* 済みスタンプ押下イベント許可フラグ初期化 */
#endif

		/*
		 * コピーの読み取りではADFの1スタックで原稿サイズを変えないため、
		 *	コピーの場合は先頭ページの場合だけ、読取り原稿サイズをセットする
		 *	その他の場合は、毎ページ読取り原稿サイズをセットする
		 */
		if (SYS_DocumentStoreItem == SYS_MEM_MULTI_COPY_FILE) {
			if (SYS_DocumentStorePage == 1) {
				SYS_DocumentScanSize = CMN_GetDocumentScanSize();
			}
		} else {
			SYS_DocumentScanSize = CMN_GetDocumentScanSize();
		}
		SetScanPageAttribute(CurrentPage); /* 現在の Document の属性を設定 */

		SCN_StoreData.Code		= CurrentPage->Code;
		SCN_StoreData.Mode		= CurrentPage->Mode;

		/*
		** メモリコピー、B4−>A4蓄積処理追加
		** 1999/02/17 by T.Soneoka
		*/
		if ((!CHK_UNI_ReductionPrint())
		&& (SYS_DocumentStoreItem == SYS_MEM_MULTI_COPY_FILE)) {
			if (SYS_DocumentStorePage == 1) {
				if (QueryReduction() == REDUCTION_B4_A4) {
					SCN_StoreData.Size = SYS_DOCUMENT_A4_SIZE;
				} else {
					SCN_StoreData.Size = CurrentPage->Size;
				}
			}
#if (PRO_CLASS1 == ENABLE)	/* by H.Hirao 1999/03/23 */
		} else if (QueryClass1Tx()) {
			if (QueryReduction() == REDUCTION_B4_A4) {
				SCN_StoreData.Size = SYS_DOCUMENT_A4_SIZE;
			} else {
				SCN_StoreData.Size = CurrentPage->Size;
			}
#endif
		} else {
			SCN_StoreData.Size		= CurrentPage->Size;
		}
		
		SleepDocStoreSubTask = FALSE;		/* Sub Task を Sleep 状態にするフラグ */
		cre_tsk(&tskno_SCN_WatchDocFeedTask, TSK_SCN_WATCHDOCUMENTFEEDTASK, &mbxno.SCN_Task);	/* フィーダーエラー監視タスク起動 */
		cre_tsk(&tskno_SCN_ScanPage, TSK_SCN_SCANPAGE, 0);	/* 原稿読取りタスク起動 */
		InzStorePageResource();								/* Task が途中で Delete されることを考慮 */
		cre_tsk(&tskno_SCN_StorePage, TSK_SCN_STOREPAGE, 0);/* 原稿1ページ蓄積タスク起動 */

		/* エンコードタスクからのイベント待ちをするタスク、リスケジューラを走らせるため 1999/03/16 by T.Soneoka */
		cre_tsk(&tskno_SCN_DummyTask, TSK_SCN_DUMMYTASK, 0);/* 原稿1ページ蓄積タスク起動 */

		SCN_Open();		/* 読取り開始 */
		
		rcv_msg(mbxno.SCN_Task, &RcvMessage); /* 蓄積関連タスクの状況をメッセージで待ち受け */
		
		CloseScanPage();	/* 読取り終了 */

		if (tskno_SCN_StorePage != 0xffff) {
			del_tsk(&tskno_SCN_StorePage);	/* 原稿1ページ蓄積タスク終了 */
		}
		if (tskno_SCN_ScanPage != 0xffff) {
			del_tsk(&tskno_SCN_ScanPage);	/* 原稿読取りタスク終了 */
		}
		if (tskno_SCN_WatchDocFeedTask != 0xffff) {
			del_tsk(&tskno_SCN_WatchDocFeedTask);	/* フィーダーエラー監視タスク終了 */
		}

		/* エンコードタスクからのイベント待ちをするタスク、リスケジューラを走らせるため 1999/03/16 by T.Soneoka */
		if (tskno_SCN_DummyTask != 0xffff) {
			del_tsk(&tskno_SCN_DummyTask);
		}

		CMN_DisableInterrupt();
		SYS_DualRestrictionStatus &= ~(0x02);
#if (PRO_CLASS1 == ENABLE) && (PRO_RS_INTERNAL == ENABLE)
		CL1_DualRestrictionStatus &= ~CL1_SCANNER_IN_USE;	/* スキャン中リセット added by H.Hirao 1999/03/04 */
#endif
		CMN_EnableInterrupt();

		/*
		 *	メッセージの変換と1ページの後処理
		 */
		switch (RcvMessage->Message) {
		case MSG_DOCSTORE_MEMORY_OVER: /* メモリオーバー from StorePageTask */
			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_MEM_OVER;
			break;
		case MSG_DOCSTORE_STOPSW_ON: /* 停止要求 from StorePageTask */
			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_STOPSW_ON;
			break;
		case MSG_DOCSTORE_OK:		/* 蓄積正常終了 from StorePageTask */
			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_OK;
			SYB_LifeMonitor.ScanCount++;	/** ライフモニタの読取り枚数加算 */
#if (PRO_STAMP == ENABLE)
			PushStamp();	/* 済みスタンプ処理 and モータ再スタート処理 */
#endif
			if (QueryDs1On()									/* DS1がOnで */
			&& (QueryDocPosition() != DOC_POS_NO_DOCUMENT)) {	/* 次ページが登録されていれば */

				/* 枚数指定されていて、且つ指定枚数以上の原稿がADF上にある場合の処理が抜けていた by O.Kimoto 1998/12/17 */
				if (!CheckExceedDocPageNum()) {

					PageLoop = TRUE;	/* 次ページ処理継続 */
					IncPage();

					/*
					** 割り込みの中で次原稿の登録をここでやるように修正します
					** 割り込みの中で次原稿登録(CurrentPageとNextPageのつけ替え)した場合、
					** 次原稿登録したが、現在の原稿読み取り終了時に、次原稿読み取りしない場合(原稿枚数指定)、
					** SCN_Close()で排出処理をコールすると、次原稿まで排出されてしまう為
					** ここでしたほうがすっきりする
					** 1999/02/10 by T.Soneoka
					*/
					if (NextPage != NULL) {
						DeleteDocObj(&CurrentPage);
						CurrentPage = NextPage;
						NextPage = NULL;
					}
					else {
						/*
						** 最終原稿蓄積中に次の原稿をセットされると、
						** 次原稿の登録もされていないので読み取りにいってしまう
						** 次原稿ある場合は、ここで登録するようにします
						*/
						DeleteDocObj(&CurrentPage); /* 上記処理を3回するとCurrentPageが取れなくなる不具合 1999/03/05 by T.Soneoka */
						CurrentPage = CreateDocObj();
						NextPage = NULL;
					}
				}

				/* 仕様変更
				** 読み取り中において、DS2がOFFした時点でDS1もOFFしていれば、今読んだ原稿が
				** 最終原稿であるという風に変更
				** by O.kimoto 1999/03/08
				*/
				else {
					if (!CheckNeedDocPageNum()) {
						StoreTaskMsg.Message = MSG_SCN_DOCSTORE_STR_PAGE_ERROR;
					}
				}

			} else {
				if (!CheckNeedDocPageNum()) {
					StoreTaskMsg.Message = MSG_SCN_DOCSTORE_STR_PAGE_ERROR;
				}
			}
			WaitDocChanged();	/* 原稿が切り替わるまで待ち合わせします */
			break;
		case MSG_DOCSTORE_MAXLINE_OVER:	/* 1m原稿長制限 from WatchDocFeedTask */
			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_MAXLINE_OVER;
			MEM_ClearBreak(&SCN_IndexData); /* 蓄積途中のファイルをクリア 1999/02/25 by T.Soneoka */
			break;
		case MSG_DOCSTORE_COVER_OPEN: /* カバーオープン from WatchDocFeedTask */

#if (0)
** 			/* 蓄積中にスキャナーカバーがあいた場合は、JAMリカバーオペレーションを起動させるために
** 			** メインへは、「MSG_SCN_DOCSTORE_DOC_ERROR」を通知しなければならない。
** 			** by O.Kimoto 1999/03/08
** 			*/
** 			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_TOP_COVER_OPEN;
#else
			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_DOC_ERROR;
#endif

			MEM_ClearBreak(&SCN_IndexData); /* 蓄積途中のファイルをクリア 1999/02/25 by T.Soneoka */
			break;
		case MSG_DOCSTORE_FEED_ERROR: /* 繰込み不良 from WatchDocFeedTask */
			StoreTaskMsg.Message = MSG_SCN_DOCSTORE_DOC_ERROR;
			MEM_ClearBreak(&SCN_IndexData); /* 蓄積途中のファイルをクリア 1999/02/25 by T.Soneoka */
			break;
		default:
			/* not reached */
			break;
		}
	} /* Page Loop End */
	
	SYS_StorePause = FALSE;	/* 表示用 1999/1/14 by T.Soneoka */

/*
** スキャンクローズで原稿排出中は回線引きっぱなしになる不具合
** 1999/02/01 by T.Soneoka
*/
#if (0)
**	/* 原稿排出処理 */
**	if (SCN_Close((UBYTE)0) != SCN_DOC_EXIT_OK) {
**		StoreTaskMsg.Message = MSG_SCN_DOCSTORE_DOC_ERROR;
**	}
/*************************************************************************
	module		:[サービスファンクション用画データ送出]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	date		:[1994/05/06]
	author		:[曽根岡拓]
*************************************************************************/
void  MDM_PixTxTask(struct ServiceFuncPixData_t *pixdata)
{
	MESSAGE_t	Modem;

	UBYTE	count;
	UWORD	i;


	InitializeModemWork();
	MDM_ModemInitialize();

	/*
	** ROCKWELL製 28.8K
	*/
	/* モデム救済タスク起動 By O.Kimoto 1998/02/03 */
	if (tskno_MDM_ModemRecoverTask == 0xffff) {
		cre_tsk(&tskno_MDM_ModemRecoverTask, TSK_MDM_MODEMRECOVERTASK, 0);
	}

	/* Added by H.Kubo 1997/12/25 */
	/* 通信中でないので、FCM_PtnrChk_T23Attenation() はメモリスイッチの値を
	** 反映してない。そのため、メモリスイッチの値を直接参照して送出レベルを設定する。
	*/
	MDM_TransmitLevelSet(SYS_MemorySwitch[11] & ATTENATION);

	/* スピーカーの設定 1997/03/18 Y.Murata */
	if (CHK_LineMonitor()) {
		MDM_SetVolumeAttenuationLevel(SYS_VOLUME_MAXIMUM);
	}

	ModemTypeSet(pixdata->baud_rate);	/**	モデムタイプ、速度設定	*/
	ModemBlock.Mode = MODE_TX_TCF;	/**	交信モードを送信G3に設定	*/
	/* Modified by H. Kubo for POPLAR_H, 1997/06/17 */
	DMA_RequestMask(DMA_CH_TX);	/*	モデムV53DMAマスク設定	*/

	ModemConfig(WRITE_MODE);	/**	モデムコンフィグレーション実行	*/

	count = 0;

	for (i = 0; i < 255; i++) {
		MDM_ModemBuffer[0][i] = PixTestPatternTable[pixdata->pix_retio][count];
		count++;
		if (count >= 5) {
			count = 0;
		}
	}

	ServiceFuncTx = TRUE;
#if (PRO_CLASS1 == ENABLE) /* Changed by H.Kubo 1998/03/04 */
	TxG3_Write(MDM_ModemBuffer[0], MDM_ModemDmaSize);	/**	G3送信モデムライト(送出モデムバッファ先頭アドレス/データ数登録)	*//** 256 Bytes **/
#else
	TxG3_Write(MDM_ModemBuffer[0], MODEM_DMA_SIZE);	/**	G3送信モデムライト(送出モデムバッファ先頭アドレス/データ数登録)	*//** 256 Bytes **/
#endif
	while (1) {	/**	無限ループ	*/
		if (SYS_PixStopFlag == 1) {	/**	画データ送出ストップの時	*/
			ModemControl.Status |= STAT_EMPTYPT;	/**	モデムステータス、最終フレーム登録完了	*/
			break;
		}
		wai_tsk(50/10);	/**	タスクウェイト50ms	*/
	}
	/* Modified by H. Kubo for POPLAR_H, 1997/06/17 */
	DMA_RequestMask(DMA_CH_TX);	/**	V53DMAマスク	*/
	/* Modified by H. Kubo 1997/06/23 */
	DMA_AutoInitializeDisable(DMA_CH_TX);	/** V53DMAオートイニシャライズOFF */
	ServiceFuncTx = FALSE;

	/* add 2line 1996/12/12 Y.M */
	MDM_SetIO(POS_RTS,OFF);
	wai_tsk(3);		/* at least 15ms */

	MDM_InitialConfig();	/**	モデムクローズ	*/

	/*
	** ROCKWELL製 28.8K
	*/
	/* モデム救済タスク起動 By O.Kimoto 1998/02/03 */
	if (tskno_MDM_ModemRecoverTask != 0xffff) {
		del_tsk(&tskno_MDM_ModemRecoverTask);
	}

	Modem.Message = MSG_MODEM_STOP;
	snd_msg(mbxno.FIP, &Modem);	/**	オペレーションタスクへメッセージ送信	*/
	wai_tsk(0xffff);	/**	無限タスクウェイト	*/
}
Beispiel #21
0
UBYTE	DialToneDetect(void)
#endif
{

	MESSAGE_t		*ad_receive;				/*rcv_msg()で受信データをセットする*/
	UBYTE	return_value = 0;

	struct	Timer10msData_t	TimeUp;
	struct	ToneDetectMailBoxData_t	DialToneDetectMailBox;
#if defined(FRA)	/* add by M.HARADA '97/12/9 */
	/* FRAではダイヤル前にBT、CTを検出してはいけない */
#else
	struct	ToneDetectMailBoxData_t	BusyToneDetectMailBox;
	struct	ToneDetectMailBoxData_t	ConToneDetectMailBox;
 #if (PRO_PBX_TONE_DETECT == ENABLE)	/* 発着衝突防止のため、ダイヤル発呼前に内線トーンを見る 2004/10/27 by Y.Kano */
	struct	ToneDetectMailBoxData_t	PbxToneDetectMailBox;
 #endif
#endif

#if (PRO_MODEM == ORANGE3)
	UBYTE	tone_detect_type;

	tone_detect_type = BEFORE_DIAL_DETECT;		/* ダイヤル前のトーン検出をセット */

	tskno_freq_check = 0xffff;
#endif
	tskno_dt = 0xffff;
	tskno_bt = 0xffff;
	tskno_ct = 0xffff;
/*	tskno_ad_timeup = 0xffff;	*/
	tskno_ad_timeup = 0xff;
	tskno_ad_stop = 0xffff;

#if (PRO_PBX_TONE_DETECT == ENABLE)	/* 発着衝突防止のため、ダイヤル発呼前に内線トーンを見る 2004/10/27 by Y.Kano */
	tskno_pbx = 0xffff;
#endif

#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* モデムに依存するのではないが、仕方なく。 by H.Kubo*/
	tskno_loop_current_chk = 0xFFFF;
#endif
#if defined(FRA)		/* 95/03/29 M.HARADA */
	tskno_after_rbt_timeup = 0xff;
/*	tskno_after_rbt_timeup = 0xffff;	*/
#endif

#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* Added by H.Kubo 1997/07/19 */
	/* ダイヤルトーン検出用フィルターをセットする前に
	** CONFの値をV.8からV.21に戻しておきます。
	** 1997/05/27 Y.Murata
	*/
	/*---------------------------------------*/
	/* re config tone mode for ATV25detector */
	/*---------------------------------------*/
	MDM_ToneModeConfig();
#endif /* (PRO_MODEM == R288F) */

	/*------------------------------*/
	/*フィルターのトーン周波数検出範囲を設定*/
	/*------------------------------*/
#if defined(GBR)		/* add by M.HARADA 95.09.09 for NLD */
	if(SYB_MachineParameter[COUNTRY_CODE] == 5){		/* NLD */
		NLD_DT_Detecting_Flag = 1;
		MDM_FilterSet(BEFORE_NLD_DIAL_FILTER);
	}else{
		MDM_FilterSet(BEFORE_DIAL_FILTER);
	}
#else
	MDM_FilterSet(BEFORE_DIAL_FILTER);
#endif
	/*------------------*/
	/*ストップキー検出タスク	*/
	/*------------------*/
	if (tskno_ad_stop == 0xFFFF) {
		cre_tsk(&tskno_ad_stop, TSK_ATD_CHECKSTOPTASK, 0);
	}
	/*------------------*/
	/*タイムアップ検出タスク生成*/
	/*------------------*/
	TimeUp.Time			= ((struct ToneParameters_t *)CTRY_DialTone())->MaxDetectTime;	/*ダイアルトーン検出時間*/
	TimeUp.SendMBX		= mbxno.FCM_Task;
	TimeUp.ReturnValue	= TIMEUP;
/*	cre_tsk(&tskno_ad_timeup, TSK_CMN_MAN_TIMER10MSTASK, &TimeUp);	*/
	CMN_MultiTimer10msStart(&tskno_ad_timeup, &TimeUp);
	/*-------------------*/
	/*ダイアルトーン検出タスク生成*/
	/*-------------------*/
	if (((struct ToneParameters_t *)CTRY_DialTone())->DetectCycle) {
		DialToneDetectMailBox.ToneType = DIALTONE;
		DialToneDetectMailBox.SendMBX = mbxno.FCM_Task;
		switch (((struct ToneParameters_t *)CTRY_DialTone())->TonePattern) {
		case	0:		/*トーンのパターンが連続の時*/
			cre_tsk(&tskno_dt, TSK_ATD_TONEDETECTPATTERN0TASK, &DialToneDetectMailBox);
			break;
		case	1:		/*トーンのパターンが ON-OFF の時*/
		case	2:		/*トーンのパターンが ON-OFF-ON-OFF の時*/
		case	3:		/*トーンのパターンが ON-OFF-ON-OFF-ON-OFF の時*/
			cre_tsk(&tskno_dt, TSK_ATD_TONEDETECTPATTERN1TASK, &DialToneDetectMailBox);
			break;
		}
	}
#if defined(FRA)	/* add by M.HARADA '97/12/9 */
	/* FRAではダイヤル前にBT、CTの検出をしてはいけない */
#else
	/*-------------------*/
	/*ビジ-トーン検出タスク生成*/
	/*-------------------*/
	if(FCM_PtnrChkBusyToneDetect()) {
		if (((struct ToneParameters_t *)CTRY_BusyTone())->DetectCycle) {
			BusyToneDetectMailBox.ToneType = BUSYTONE;
			BusyToneDetectMailBox.SendMBX = mbxno.FCM_Task;
			switch (((struct ToneParameters_t *)CTRY_BusyTone())->TonePattern) {
			case	0:		/*トーンのパターンが連続の時*/
				cre_tsk(&tskno_bt, TSK_ATD_TONEDETECTPATTERN0TASK, &BusyToneDetectMailBox);
				break;
			case	1:		/*トーンのパターンが ON-OFF の時*/
			case	2:		/*トーンのパターンが ON-OFF-ON-OFF の時*/
			case	3:		/*トーンのパターンが ON-OFF-ON-OFF-ON-OFF の時*/
				cre_tsk(&tskno_bt, TSK_ATD_TONEDETECTPATTERN1TASK, &BusyToneDetectMailBox);
				break;
			}
		}
	}
	/*-----------------------*/
	/*コンジェスショントーン検出タスク生成*/
	/*-----------------------*/
#if (PRO_CLASS1 == ENABLE)
	if(CHK_UNI_ConToneDetect() || CL1_ContoneDet == 1) {
#else
	if(CHK_UNI_ConToneDetect()) {
#endif
		if (((struct ToneParameters_t *)CTRY_CongestionTone())->DetectCycle) {
			ConToneDetectMailBox.ToneType = CONTONE;
			ConToneDetectMailBox.SendMBX = mbxno.FCM_Task;
			switch (((struct ToneParameters_t *)CTRY_CongestionTone())->TonePattern) {
			case	0:		/*トーンのパターンが連続の時*/
				cre_tsk(&tskno_ct, TSK_ATD_TONEDETECTPATTERN0TASK, &ConToneDetectMailBox);
				break;
			case	1:		/*トーンのパターンが ON-OFF の時*/
			case	2:		/*トーンのパターンが ON-OFF-ON-OFF の時*/
			case	3:		/*トーンのパターンが ON-OFF-ON-OFF-ON-OFF の時*/
				cre_tsk(&tskno_ct, TSK_ATD_TONEDETECTPATTERN1TASK, &ConToneDetectMailBox);
				break;
			}
		}
	}
#endif
#if (PRO_PBX_TONE_DETECT == ENABLE)	/* 発着衝突防止のため、ダイヤル発呼前に内線トーンを見る 2004/10/27 by Y.Kano */
	/*-----------------------*/
	/*内線ダイヤルトーン検出タスク生成*/
	/*-----------------------*/
	if (!CHK_PBX()){				/* 外線設定である。*/
		if(CHK_UNI_BeforeDialPbxToneDetect() && (before_dial == BEFORE_DIAL)) {		/* PBXトーン検出設定になっていて、かつダイヤル前のトーン検出である。*/
			PbxToneDetectMailBox.ToneType = PBXTONE;
			PbxToneDetectMailBox.SendMBX = mbxno.FCM_Task;
			cre_tsk(&tskno_pbx, TSK_ATD_TONEDETECTPATTERN1TASK, &PbxToneDetectMailBox);
		}
	}
#endif
#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* 復活させてみる。1998/01/19 */
/* #if 0 */	/* defined(FRA) */
	/*----------------------------------*/
	/*	カレントループ検出タスク生成	*/
	/*----------------------------------*/
	if(CHK_UNI_CurrentLoop()) {
		cre_tsk(&tskno_loop_current_chk, TSK_ATD_LC_OFFCHECKTASK, 0);
	}
#endif
	/*-------------------------------------*/
	/*	Frequency check Only Orange3 Modem */
	/*-------------------------------------*/
#if (PRO_MODEM == ORANGE3)
	cre_tsk(&tskno_freq_check, TSK_ATD_FILTERONOFFDETECTTASK, &tone_detect_type);
#endif
	/*----------*/
	/*メッセージ受信*/
	/*----------*/
	rcv_msg(mbxno.FCM_Task, &ad_receive);
	/*------------------*/
	/*メッセージに対する処理*/
	/*------------------*/
	switch (ad_receive->Message) {
	case	DIALTONE:
		return_value = AD_OK;
		break;
	case	TIMEUP:
		return_value = AD_NO_DIAL_TONE;
		break;
	case	MSG_DETECT_STOP:
		return_value = AD_STOPPED;
		break;
#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* 復活させてみる。1998/01/19 */
/* #if 0	/* defined(FRA) */
	case	MSG_DETECT_LC_OFF:	/* カレントループ無しを検出 */
		return_value = AD_NO_CURRENT_LOOP;
		break;
#endif
#if (PRO_PBX_TONE_DETECT == ENABLE)	/* 発着衝突防止のため、ダイヤル発呼前に内線トーンを見る 2004/10/27 by Y.Kano */
	case	PBXTONE:
		return_value = AD_OK;
		break;
#endif
	default:		/* ビジートーン、コンジェスショントーン */
		return_value = AD_REMOTE_BUSY;
	}
	/*--------------------------*/
	/*トーン検出で使用したタスクを削除*/
	/*--------------------------*/
	Del_DialTone_Task();
#if defined(GBR)	/* add by M.HARADA 95.09.09 for NLD */
	if(SYB_MachineParameter[COUNTRY_CODE] == 5){
		NLD_DT_Detecting_Flag = 0;
	}
#endif

	return(return_value);
}

/*-------------------------------*/
/*ダイアルトーン検出で生成したタスクを削除*/
/*-------------------------------*/
void	Del_DialTone_Task()
{
	if (tskno_dt != 0xFFFF) {
		del_tsk(&tskno_dt);
	}
	if (tskno_bt != 0xFFFF) {
		del_tsk(&tskno_bt);
	}
	if (tskno_ct != 0xFFFF) {
		del_tsk(&tskno_ct);
	}
	if (tskno_ad_timeup != 0xFF) {
		CMN_MultiTimer10msStop(&tskno_ad_timeup);
	}
#if 0	/* 1996/12/12  By T.Yamaguchi */
	if (tskno_ad_timeup != 0xFFFF) {
		del_tsk(&tskno_ad_timeup);
	}
#endif
	if (tskno_ad_stop != 0xFFFF) {
		del_tsk(&tskno_ad_stop);
	}
#if (PRO_MODEM == ORANGE3)
	if (tskno_freq_check != 0xFFFF) {
		del_tsk(&tskno_freq_check);
	}
#endif
#if (PRO_MODEM == R288F) || (PRO_MODEM == MN195006) /* 復活させてみる。1998/01/19 */
	if (tskno_loop_current_chk != 0xFFFF) {
		del_tsk(&tskno_loop_current_chk);
	}
#endif
#if 0	/* defined(FRA) */
/*	if (tskno_after_rbt_timeup !=0xFFFF) {		/@ 95/03/29 M.HARADA */
	if (tskno_after_rbt_timeup !=0xFF) {		/* 1996/12/12  By T.Yamaguchi */
		CMN_MultiTimer10msStop(&tskno_after_rbt_timeup);
/*		del_tsk(&tskno_after_rbt_timeup);	*/
	}
#endif
#if (PRO_PBX_TONE_DETECT == ENABLE)	/* 発着衝突防止のため、ダイヤル発呼前に内線トーンを見る 2004/10/27 by Y.Kano */
	if (tskno_pbx != 0xFFFF) {
		del_tsk(&tskno_pbx);
	}
#endif
}
/*************************************************************************
	module		:[キー入力まち]
	function	:[
		1.キースキャンタスクからのメッセージをまちます
		2.キータイマータスクからのメッセージをまちます
		3.メインタスクからのメッセージをまちます
		4.キー入力が必要なときのみコールされます
		5.キー入力待ちの時間は引数で指定します
	]
	return		:[なし]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[OPR]
	date		:[1995/02/28]
	author		:[江口,渡辺一章]
*************************************************************************/
void OPR_GetKey(UWORD key_wait_time)	/* キー待ちの時間 */
{
	UWORD	item;
	UWORD	message;
	UWORD	submessage;
	MESSAGE_t	*rx_message;

	/** キータイマータスクを起動する */
	tskno_OPR_KeyTimerTask = 0xffff;
	GetKeyTimer.Time = key_wait_time;
	cre_tsk(&tskno_OPR_KeyTimerTask, TSK_CMN_MAN_TIMER10MSTASK, &GetKeyTimer);

	/** キーコードをクリアする */
	InputKeyCode = OPR_NO_KEY;
	InputKeyType = OPR_NO_KEY;

	/** キー入力禁止を解除する */
	OPR_InhibitKeyScan = 0;

	/** キースキャンタスクからのメッセージ受信待ち */
	rcv_msg(mbxno.OPR_Task, &rx_message);
	item = rx_message->Item;
	message = rx_message->Message;
	submessage = rx_message->SubMessage1;

	/** キータイマータスクを消去する */
	if (tskno_OPR_KeyTimerTask != 0xffff) {
		del_tsk(&tskno_OPR_KeyTimerTask);
	}

	switch (item) {
	case FROM_KEYSCAN:				/** 受信したメッセージがキースキャンタスクからのメッセージである */
		/** チャイルド表示中であれば止める */
		StopChildDisplay();
#if (PRO_CONT_KEY_INPUT == ENABLE)
		/* 連続入力中(キーが押しっぱなし)の時は、うるさいのでアックブザーを鳴らさない */
		if (ContinuousKeyHit == FALSE) {
			/** アックブザーを鳴らす */
			AckBuzzer();
		}
#else
 #if (PRO_KEYPANEL == PANEL_SATSUKI2) || (PRO_KEYPANEL == PANEL_STOCKHM2)	/* Add by Y.kano 2003/09/01 */
		if (SYS_KeyTouchFrequencySetting == 0) {	/* キータッチ音色設定オペレーション中でない時はアックブザーを鳴らす。 */
			/** アックブザーを鳴らす */
			AckBuzzer();
		}
 #else
		/** アックブザーを鳴らす */
		AckBuzzer();
 #endif
#endif

		/** 入力されたキーをセット */
		InputKeyCode = (UBYTE)message;
		InputKeyType = (UBYTE)submessage;

#if (PRO_KEYPANEL == PANEL_SATSUKI2) || (PRO_KEYPANEL == PANEL_STOCKHM2)	/* Add by Y.kano 2003/09/01 */
		if (SYS_KeyTouchFrequencySetting == 1) {	/* キータッチ音色設定オペレーション中 */
			if ((InputKeyCode == CURSOR_LEFT_KEY) || (InputKeyCode == FUNCTION_KEY )) {
				SYS_AckBuzzerFlag = 1;	/* AckBuzzerをOFFに */
			}
		}
#endif

#if (PRO_KEYPANEL == PANEL_SATSUKI2) || (PRO_KEYPANEL == PANEL_STOCKHM2)	/* Added by SMuratec L.Z.W 2003/07/31 */
		if (IsDocumentSet && (!CHK_ReadyModeCopy())) {	/* ファクスモードの時			*/
			if (InputKeyCode == SET_KEY) {	/* セットキーが押された時			*/
				InputKeyCode = CONTRAST_KEY;	/* 濃度キーをセット */
				InputKeyType = SINGLE;		/* 単一オペレーションキーをセット */
			}
			if (InputKeyCode == CLEAR_KEY) {	/* クリアキーが押された時			*/
				InputKeyCode = MODE_KEY;	/* 画質キーをセット */
				InputKeyType = SINGLE;		/* 単一オペレーションキーをセット */
			}
		}
#endif

#if (PRO_KEYPANEL == PANEL_HINOKI) || (PRO_KEYPANEL == PANEL_SATSUKI2) || (PRO_KEYPANEL == PANEL_STOCKHM2) 	/* Add By H.Fujimura 1999/01/06 */
		if ((InputKeyType == SINGLE)	/* 単一オペレーションキーが押された時	*/
		 && (IsSingleKeyOperation)) {	/* 単一オペレーションが有効な時			*/
			SingleKeyOperation(InputKeyCode);
			InputKeyType = (UBYTE)NO_EFFECT;
		}
#endif

#if (PRO_KEYPANEL == PANEL_POPLAR_B)	/* by K.Watanabe 1997/11/20 */
		/* ファクスモードでは、縮小キーを済みスタンプキーとして使用する場合、キーの値を直接ここで変更します
		** (ソートキー等のように、キーの値を同じにすると、キータイプにより処理を行うswitch文で、
		**  縮小キーと単一オペレーションキーが同時に存在する場合があり、そのままではコンパイル
		**  できなくなるので、この場合だけ仕方なく方法を変えます)
		*/
		if ((InputKeyCode == REDUCTION_KEY)	/* 縮小キーが押された時			*/
		 && (!CHK_ReadyModeCopy())			/* ファクスモードの時			*/
		 && (CHK_UNI_StampKeyEnable())) {	/* 済みスタンプキーが有効な時	*/
			InputKeyCode = STAMP_KEY;	/* 済みスタンプキーをセット */
			InputKeyType = SINGLE;		/* 単一オペレーションキーをセット */
		}
#endif

#if (PRO_KEYPANEL == PANEL_POPLAR_B) || (PRO_KEYPANEL == PANEL_POPLAR_L)	/* by K.Watanabe 1997/11/27 */
		/* 濃度設定中に左右の矢印キーが押されたら、濃度キーが押された時と同じパスを通って濃度が変更できるように、
		** ここでキーの値を直接変更します(あまり好ましい方法では無いが、左右の矢印キーをそのまま使用しようとすると、
		** 濃度表示中のフラグの初期化等、変更が大変困難になるので仕方なくこうしました)
		*/
		if (IsSettingDensity) {	/* 濃度設定中の時 */
			switch (InputKeyCode) {
			case CONTRAST_KEY:		/* 濃度キー */
				OPR_ChangeDensityKey = InputKeyCode;
				break;
			case CURSOR_LEFT_KEY:	/* 左矢印キー */
				OPR_ChangeDensityKey = InputKeyCode;
				InputKeyCode = CONTRAST_KEY;	/* 濃度キーをセット */
				InputKeyType = SINGLE;			/* 単一オペレーションキーをセット */
				break;
			case FUNCTION_KEY:		/* 右矢印キー */
				OPR_ChangeDensityKey = InputKeyCode;
				InputKeyCode = CONTRAST_KEY;	/* 濃度キーをセット */
				InputKeyType = SINGLE;			/* 単一オペレーションキーをセット */
				break;
			default:
				/* 濃度変更以外の時は、濃度設定中をOFFにします */
				IsSettingDensity = FALSE;
				break;
			}
		}
#endif
		break;

	case FROM_ONETOUCH_SHEET_CHECK:	/** ワンタッチシート切り替えタスクからの場合 */
		InputKeyCode = (UBYTE)OPR_SHEET_CHANGE;
		InputKeyType = (UBYTE)NO_EFFECT;
		break;

	case FROM_10MS_TIMER:			/** 受信したタスクがタイマータスクからの場合 */
#if (PRO_COPY_FAX_MODE == ENABLE)
		/* コピーパラメーター優先表示のタイマーは、コピーモードでパラメーターが変更される度に起動しているので、
		** 例えば、部数入力後に濃度キーを押すとチャイルド表示のタイムオーバーより先に、コピーパラメーター優先表示
		** のタイムオーバーが起こるために、無条件にチャイルド表示を止めると、濃度設定表示が早く消えてしまいます
		*/
		if (message != MSG_PARAM_DISP_TIMEUP) {	/* コピーパラメーター優先表示のタイムオーバー以外の時 */
			/** チャイルド表示中なら止める */
			StopChildDisplay();
		}
#else
		/** チャイルド表示中なら止める */
		StopChildDisplay();
#endif

		switch (message) {
		case MSG_GET_KEY_TIMEUP:	/** キー待ちのタイムオーバーの時 */
			InputKeyCode = (UBYTE)OPR_GET_KEY_TIMEUP;	/* キーコードにキー待ちタイムアップをセット */
			InputKeyType = (UBYTE)KEY_TIME_UP;
			break;
		case MSG_CHILD_TIMEUP:		/** チャイルド表示のタイムオーバーの時 */
#if (PRO_KEYPANEL == PANEL_POPLAR_B) || (PRO_KEYPANEL == PANEL_POPLAR_L)	/* by K.Watanabe 1997/11/25 */
			/* チャイルド表示がタイムアップした時には、濃度表示のタイムアップの場合も含まれているので、
			** ここで濃度設定中をOFFにします
			** 注)完了表示等のタイムアップの時に、余分な処理は増えますが、チャイルド表示が重複している
			**   ことはありえないので、特に条件がなくても問題はありません
			**   (条件を追加しようとすると変更が多くなるので、こうしました)
			*/
			IsSettingDensity = FALSE;
#endif
			InputKeyCode = (UBYTE)OPR_CHILD_TIMEUP;		/* キーコードにチャイルド表示タイムアップをセット */
			InputKeyType = (UBYTE)NO_EFFECT;
			break;
#if (PRO_COPY_FAX_MODE == ENABLE)
		case MSG_PARAM_DISP_TIMEUP:	/** コピーパラメーター優先表示のタイムオーバーの時 */
			/* コピーパラメーター優先表示を止めます */
			StopParamDispTask();
			InputKeyCode = (UBYTE)OPR_PARAM_DISP_TIMEUP;/* キーコードにコピーパラメーター優先表示タイムアップをセット */
			InputKeyType = (UBYTE)NO_EFFECT;
			break;
#endif
		default:
			break;
		}
		break;

	case FROM_MAIN:					/** メインタスクからのメッセージの場合 */
		/** チャイルド表示中でも止めない */

		/** 電話状態変化の場合 */
		if (message == MSG_TEL_FROM_MAIN) {
			InputKeyCode = (UBYTE)OPR_TEL_OPERATION;		/* キーコードに電話状態変化をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
#if defined (KEISATSU)		/* 警察FAX Added by SMuratec K.W.Q 2005/10/14 */
		else if (message == MSG_SHIREI_ON) {
			InputKeyCode = (UBYTE)OPR_NO_KEY;
			InputKeyType = (UBYTE)NO_EFFECT;
		}
#endif		/* End of (defined (KEISATSU)) */
		/** メモリーオーバー発生の場合 */
		else if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_MEMORY_OVER_OPR) {
			InputKeyCode = (UBYTE)OPR_MEMORY_OVER_OPR;		/* キーコードにメモリーオーバー処理をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
		/** ジャムリカバーオペレーション実行の場合 */
		else if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_JAM_RECOVER_OPR) {
			InputKeyCode = (UBYTE)OPR_JAM_RECOVER_OPR;		/* キーコードにジャムリカバー処理をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
		/** FBS読み取り中断リカバーオペレーション実行の場合 */
		else if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_FBS_RECOVER_OPR) {
			InputKeyCode = (UBYTE)OPR_JAM_RECOVER_OPR;		/* キーコードにジャムリカバー処理をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
#if (PRO_FBS == ENABLE)
		/** 次原稿蓄積確認の場合 */
		else if (SYS_MachineStatus[SYS_SCANNER_STATUS] & SYS_SCANNER_NEXT_SCAN_START_OPR) {
			InputKeyCode = (UBYTE)OPR_NEXT_DOC_STORED_OPR;	/* キーコードに次原稿蓄積確認処理をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
#endif
#if (PRO_CIPHER == ENABLE)
		/** 復号化時キー間違いの場合 */
		else if (SYS_MachineStatus[SYS_CIPHER_STATUS] & SYS_WRONG_KEY_ERROR) {
			InputKeyCode = (UBYTE)OPR_DIFFERENT_KEY_OPR;	/* キーコードに復号化時キー間違い処理をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
		/** 受信暗号化原稿消去確認の場合 by K.Watanabe 1998/07/08 */
		else if (SYS_MachineStatus[SYS_CIPHER_STATUS] & SYS_DESCRAMBLE_FIRST_PAGE) {
			InputKeyCode = (UBYTE)OPR_RX_ERASE_CIPHER_DOC_OPR;	/* キーコードに受信暗号化原稿消去確認処理をセット */
			InputKeyType = (UBYTE)NO_EFFECT;
		}
#endif
		break;
	}
}