Esempio n. 1
0
/*
 * interface for passing a peer's connection to gather sensitivity labeling
 * from for Trusted Solaris.
 */
papi_status_t
papiServiceSetPeer(papi_service_t handle, int peerfd)
{
    papi_status_t result = PAPI_OK;
    service_t *svc = handle;

    if (svc == NULL)
        return (PAPI_BAD_ARGUMENT);

    if (is_system_labeled()) {
        short status;

        if ((snd_msg(svc, S_PASS_PEER_CONNECTION) < 0) ||
                (ioctl(svc->md->writefd, I_SENDFD, peerfd) < 0) ||
                (rcv_msg(svc, R_PASS_PEER_CONNECTION, &status) < 0))
            status = MTRANSMITERR;

        if (status != MOK) {
            detailed_error(svc,
                           gettext("failed to send peer connection: %s"),
                           lpsched_status_string(status));
            result = lpsched_status_to_papi_status(status);
        }
    }

    return (result);
}
Esempio n. 2
0
/*************************************************************************
	module		:[ナックブザー鳴動]
	function	:[
		1.
	]
	return		:[]
	common		:[mbxno]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[OPR]
	date		:[1995/03/18]
	author		:[江口]
*************************************************************************/
void NackBuzzer(void)
{
	MESSAGE_t	buzz_type;

	buzz_type.Message = NACK_BUZZER;
	snd_msg(mbxno.CMN_BuzzerTask, &buzz_type);
}
Esempio n. 3
0
static int __ui_snd_msg(struct pt_regs *regs)
{
	ID mbxid = __xn_reg_arg1(regs);
	T_MSG __user *pk_msg = (T_MSG __user *) __xn_reg_arg2(regs);

	return snd_msg(mbxid, pk_msg);
}
Esempio n. 4
0
int main()
{
	if((msqid = msgget(KEY, IPC_CREAT | 0666)) == -1)
		err("msgget ");

	snd_msg(NULL);
	return 0;
}
Esempio n. 5
0
/*************************************************************************
	module		:[メインタスクへメッセージ送信]
	function	:[
		1.	Item に FROM_FAXCOM をセットにする
		2.	MAN_Task へ snd_msg() する
		3.	MAN_Task から同期用の rcv_msg() する
	]
	return		:[]
	common		:[
		MsgFromFaxComToMain
	]
	condition	:[
		Messageは引き数で指定
		SubMessage1…は必要なら上位でセット
	]
	comment		:[]
	machine		:[V53,H8/300]
	language	:[MS-C(Ver.6.0),CH38(Ver.2.0B)]
	keyword		:[FCM]
	date		:[1994/07/26]
	author		:[竹内茂樹]
*************************************************************************/
void		SendMsgFaxComToMain(
	UWORD	message)
{
	MsgFromFaxComToMain.Item	= FROM_FAXCOM;
	MsgFromFaxComToMain.Message	= message;

	snd_msg( mbxno.MAN_Task, &MsgFromFaxComToMain );
	rcv_msg( mbxno.FCM_Task, &FcomMsg );
}
Esempio n. 6
0
/*************************************************************************
	module		:[音声送出タスク]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	date		:[1999/10/14]
	author		:[村田]
*************************************************************************/
void	MDM_VoiceTxTask(void)
{
	MESSAGE_t	Modem;
	UWORD	phase;
	UWORD	timer;
	UWORD	ret;

	phase = 1;
	ret = 1;

	/* リセット */
	MDM_AnswerLSI_Initialize();
	wai_tsk(100);


	SelectVOL();

	while (1) {
		CMN_SetFraseAnswerLSI((UWORD)phase);
		wai_tsk(2);
		if (MDM_WaitVoiceNAR((UWORD)10) == 0) {
			break;
		}
		CMN_AnswerLSIOn();
		MDM_WaitST();
		CMN_AnswerLSIOff();
		if (MDM_WaitVoiceNAR((UWORD)10) == 0) {		/* 鳴り始め*/
			break;
		}
		wai_tsk(2);
		CMN_SetFraseAnswerLSI((UWORD)6);			/* 無音セット */
		wai_tsk(2);
		CMN_AnswerLSIOn();
		MDM_WaitST();
		CMN_AnswerLSIOff();
		if (MDM_WaitVoiceNAR((UWORD)1500) == 0) {	/* 無音鳴り始め */
			break;
		}
		wai_tsk(100);
		phase++;
		if (phase >= 6) {
			phase = 1;
		}
	}



	SelectMELorTX();

	MDM_AnswerLSI_Initialize();

	Modem.Message = MSG_MODEM_STOP;
	snd_msg(mbxno.FIP, &Modem);	/**	オペレーションタスクへメッセージ送信	*/
	wai_tsk(0xffff);	/**	無限タスクウェイト	*/
}
Esempio n. 7
0
papi_status_t
papiJobQuery(papi_service_t handle, char *printer, int32_t job_id,
		char **requested_attrs,
		papi_job_t *job)
{
	service_t *svc = handle;
	job_t *j;
	char *dest;
	char req_id[32];
	short rc;
	char *form = NULL,
	    *request_id = NULL,
	    *charset = NULL,
	    *user = NULL,
	    *slabel = NULL,
	    *file = NULL;
	time_t date = 0;
	size_t size = 0;
	short  rank = 0,
	    state = 0;

	if ((handle == NULL) || (printer == NULL) || (job_id < 0))
		return (PAPI_BAD_ARGUMENT);

	dest = printer_name_from_uri_id(printer, job_id);
	snprintf(req_id, sizeof (req_id), "%s-%d", dest, job_id);
	free(dest);

	rc = snd_msg(svc, S_INQUIRE_REQUEST_RANK, 0, "", "", req_id, "", "");
	if (rc < 0)
		return (PAPI_SERVICE_UNAVAILABLE);

	if (rcv_msg(svc, R_INQUIRE_REQUEST_RANK, &rc, &request_id,
	    &user, &slabel, &size, &date, &state, &dest, &form,
	    &charset, &rank, &file) < 0) {
		detailed_error(svc,
		    gettext("failed to read response from scheduler"));
		return (PAPI_DEVICE_ERROR);
	}

	if ((request_id == NULL) || (request_id[0] == NULL))
		return (PAPI_NOT_FOUND);

	if ((*job = j = calloc(1, sizeof (*j))) == NULL)
		return (PAPI_TEMPORARY_ERROR);

	snprintf(req_id, sizeof (req_id), "%d-0", job_id);
	lpsched_read_job_configuration(svc, j, req_id);

	job_status_to_attributes(j, request_id, user, slabel, size, date, state,
	    dest, form, charset, rank, file);

	return (PAPI_OK);
}
Esempio n. 8
0
/*************************************************************************
	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;
	}
}
Esempio n. 9
0
/*----------------------------------------*/
void	ATD_CheckStopTask(void)
{
	MESSAGE_t		msg;

	while(!SYS_FaxComStopSwitch()) {
		wai_tsk(20);
	}
	msg.Item = FROM_AUTODIAL;
	msg.Message = MSG_DETECT_STOP;
	snd_msg(mbxno.FCM_Task, &msg);
	wai_tsk(0xFFFF);
}
Esempio n. 10
0
/*************************************************************************
	module		:[アックブザー鳴動]
	function	:[
		1.アックブザーを鳴らすためのデータをセットしてブザータスクにメッセージ
		 を送信する
	]
	return		:[なし]
	common		:[mbxno]
	condition	:[]
	comment		:[]
	machine		:[SH7043]
	language	:[SHC]
	keyword		:[OPR]
	date		:[1995/03/18]
	author		:[江口]
*************************************************************************/
void AckBuzzer(void)
{
	MESSAGE_t	buzz_type;

#if (PRO_KEYPANEL == PANEL_SATSUKI2) || (PRO_KEYPANEL == PANEL_STOCKHM2)	/* Add by Y.kano 2003/09/01 */
	if (SYS_AckBuzzerFlag == 1) {	/*	アックブザーOFFに設定されていたら  2001/08/08 T.Takagi*/
		return;
	}
#endif
	buzz_type.Message = ACK_BUZZER;
	snd_msg(mbxno.CMN_BuzzerTask, &buzz_type);
}
Esempio n. 11
0
/*************************************************************************
	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);

}
Esempio n. 12
0
papi_status_t
papiPrinterPurgeJobs(papi_service_t handle, char *name, papi_job_t **jobs)
{
	service_t *svc = handle;
	papi_status_t result = PAPI_OK_SUBST;
	short more;
	long status;
	char *dest;
	char *req_id;

	if ((handle == NULL) || (name == NULL))
		return (PAPI_BAD_ARGUMENT);

	dest = printer_name_from_uri_id(name, -1);
	more = snd_msg(svc, S_CANCEL, dest, "", "");
	free(dest);
	if (more < 0)
		return (PAPI_SERVICE_UNAVAILABLE);

	do {
		if (rcv_msg(svc, R_CANCEL, &more, &status, &req_id) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

	switch (status) {
	case MOK:
		papiAttributeListAddString(&svc->attributes, PAPI_ATTR_APPEND,
				"canceled-jobs", req_id);
		break;
	case M2LATE:
	case MUNKNOWN:
	case MNOINFO:
		papiAttributeListAddString(&svc->attributes, PAPI_ATTR_APPEND,
				"cancel-failed", req_id);
		result = PAPI_DEVICE_ERROR;
		break;
	case MNOPERM:
		papiAttributeListAddString(&svc->attributes, PAPI_ATTR_APPEND,
				"cancel-failed", req_id);
		result = PAPI_NOT_AUTHORIZED;
		break;
	default:
		detailed_error(svc, gettext("cancel failed, bad status (%d)\n"),
			status);
		return (PAPI_DEVICE_ERROR);
	}
	} while (more == MOKMORE);

	return (result);
}
Esempio n. 13
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 */

}
Esempio n. 14
0
/*************************************************************************
	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;
}
Esempio n. 15
0
papi_status_t
papiJobMove(papi_service_t handle, char *printer, int32_t job_id,
		char *destination)
{
	papi_status_t result = PAPI_OK;
	long bits;
	service_t *svc = handle;
	char req_id[64];
	char *queue;
	char *user = NULL;

	if ((svc == NULL) || (printer == NULL) || (job_id < 0) ||
	    (destination == NULL))
		return (PAPI_BAD_ARGUMENT);

	queue = printer_name_from_uri_id(printer, job_id);
	snprintf(req_id, sizeof (req_id), "%s-%d", queue, job_id);
	free(queue);

	if (papiAttributeListGetString(svc->attributes, NULL, "user-name",
	    &user) == PAPI_OK) {
		REQUEST *r = getrequest(req_id);

		if ((r != NULL) && (r->user != NULL) &&
		    (strcmp(r->user, user) != 0))
			result = PAPI_NOT_AUTHORIZED;
		freerequest(r);
	}

	if (result == PAPI_OK) {
		short status = MOK;
		char *dest = printer_name_from_uri_id(destination, -1);

		if ((snd_msg(svc, S_MOVE_REQUEST, req_id, dest) < 0) ||
		    (rcv_msg(svc, R_MOVE_REQUEST, &status, &bits) < 0))
			status = MTRANSMITERR;

		free(dest);

		result = lpsched_status_to_papi_status(status);
	}

	return (result);
}
Esempio n. 16
0
papi_status_t
papiJobCancel(papi_service_t handle, char *printer, int32_t job_id)
{
	papi_status_t result = PAPI_OK;
	service_t *svc = handle;
	char req_id[64];
	char *dest;
	char *user = NULL;

	if ((svc == NULL) || (printer == NULL) || (job_id < 0))
		return (PAPI_BAD_ARGUMENT);

	dest = printer_name_from_uri_id(printer, job_id);
	snprintf(req_id, sizeof (req_id), "%s-%d", dest, job_id);
	free(dest);

	if (papiAttributeListGetString(svc->attributes, NULL, "user-name",
	    &user) == PAPI_OK) {
		REQUEST *r = getrequest(req_id);

		if ((result = authorized(handle, job_id)) != PAPI_OK)
			result = PAPI_NOT_AUTHORIZED;

		if ((r != NULL) && (r->user != NULL) &&
		    (strcmp(r->user, user) != 0))
			result = PAPI_NOT_AUTHORIZED;
		freerequest(r);
	}

	if (result == PAPI_OK) {
		short status = MOK;

		if ((snd_msg(svc, S_CANCEL_REQUEST, req_id) < 0) ||
		    (rcv_msg(svc, R_CANCEL_REQUEST, &status) < 0))
			status = MTRANSMITERR;

		result = lpsched_status_to_papi_status(status);
	}

	return (result);
}
Esempio n. 17
0
papi_status_t
papiPrinterListJobs(papi_service_t handle, char *name,
		char **requested_attrs, int type_mask,
		int max_num_jobs, papi_job_t **jobs)
{
	service_t *svc = handle;
	char *dest;
	short rc;
	int count = 1;

	if ((handle == NULL) || (name == NULL) || (jobs == NULL))
		return (PAPI_BAD_ARGUMENT);

	dest = printer_name_from_uri_id(name, -1);

	rc = snd_msg(svc, S_INQUIRE_REQUEST_RANK, 0, "", dest, "", "", "");
	free(dest);
	if (rc < 0)
		return (PAPI_SERVICE_UNAVAILABLE);

	do {
		job_t *job = NULL;
		char *dest = NULL,
			*ptr,
			*form = NULL,
			*req_id = NULL,
			*charset = NULL,
			*owner = NULL,
			*slabel = NULL,
			*file = NULL;
		time_t date = 0;
		size_t size = 0;
		short  rank = 0, state = 0;

		if (rcv_msg(svc, R_INQUIRE_REQUEST_RANK, &rc, &req_id,
				&owner, &slabel, &size, &date, &state, &dest,
				&form, &charset, &rank, &file) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		if ((rc != MOK) && (rc != MOKMORE))
			continue;
		/*
		 * at this point, we should check to see if the job matches the
		 * selection criterion defined in "type_mask".
		 */

		/* too many yet? */
		if ((max_num_jobs != 0) && (count++ > max_num_jobs))
			continue;

		if ((job = calloc(1, sizeof (*job))) == NULL)
			continue;

		job_status_to_attributes(job, req_id, owner, slabel, size,
				date, state, dest, form, charset, rank, file);

		if ((ptr = strrchr(file, '-')) != NULL) {
			*++ptr = '0';
			*++ptr = NULL;
		}

		lpsched_read_job_configuration(svc, job, file);

		list_append(jobs, job);

	} while (rc == MOKMORE);

	if (rc == MNOINFO)	/* If no jobs are found, it's still ok */
		rc = MOK;

	return (lpsched_status_to_papi_status(rc));
}
Esempio n. 18
0
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	module		:[疑似呼出ベル鳴動/OH状態変化検出タスク]
	function	:[
		1.ダイヤル・イン着信時のオペレータ呼出の為に疑似ベル鳴動及びOFF HOOK検出を行なう。
		2.TEL/FAX着信時のオペレータ呼出の為に疑似ベル鳴動及びOFF HOOK検出を行なう。
		3.会話予約時のオペレータ呼出の為に疑似ベル鳴動及びOFF HOOK検出を行なう。
		4.内線呼出・保留転送呼出の為に疑似ベル鳴動及び呼出側のON HOOK/被呼出側のOFF HOOK検出を行なう。
		(回線捕捉キーによる内線呼出の場合、外付電話のOFF HOOKが検出されても、付属電話がOFF HOOKされる
		まで本タスクは、存在します。(内線呼出仮成立状態。*回線捕捉キーによる保留転送は有り得ない。))
		5.1〜4の際に上記の動作と共に停止キー入力・回線捕捉キー入力検出を行なう。
	]
	return		:[
		なし
	]
	common		:[
		NCUStatus					:回線監視モジュール動作状態を記憶
		SYS_HookKeyInputFlag		:回線捕捉キー入力情報
	]
	condition	:[]
	comment		:[]
	machine		:[V53,RISC(SH),H8/300]
	language	:[MS-C(Ver.6.0),H8/300(日立マイコン)]
	keyword		:[NCU/FCM]
	date		:[1995/12/27]
	author		:[坂本直史/原田学]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void	NCU_GenerateRingSignalTask(struct GenerateRingData_t *ring_data )
{
	WORD	tx_mail_box_no;
	WORD	time;
	WORD	counter;
	UWORD	ringing_tel;
	UBYTE 	det_cng_ring_flag;
	UBYTE   delay_ring_flag;


#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/07/15 */
	UBYTE	Is_HDST_Offhook;
	
	Is_HDST_Offhook = FALSE;

	SYS_MachineStatus[SYS_OTHER_STATUS] |=	SYS_CONT24_LINE_BUSY; /* 擬似鳴動状態になります */
	if ( !ModemRelaySetting() ){	/**	標準ラインに接続された場合	*/
		SYS_CalledLineNumber |= SYS_STD_LINE_IN_CI;
		if ( !(NCU_LineStatus & EXT_HDST_OFFHOOK) && !(SYS_CalledLineNumber & SYS_EXT_LINE_IN_CI)) {	/* 付属電話は拡張回線でオフフックではない */
			HDST_RelayOff(); 		/* ハンドセットを標準回線に接続する */
			/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
			/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
			UpdateLCD();
		}
	}
	else { /**	拡張ラインに接続された場合	*/
		SYS_CalledLineNumber |= SYS_EXT_LINE_IN_CI;
		if ( !(NCU_LineStatus & STD_HDST_OFFHOOK) ) {	/* 付属電話は標準回線でオフフックではない */
			HDST_RelayOn(); 		/* ハンドセットを拡張回線に接続する */
			/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
			/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
			UpdateLCD();
		}
	}
#endif /* defined (KEISATSU) */

	TxGenerateRingSignalTaskMsg.Item =	FROM__NCU_SUB;
	tx_mail_box_no					 =	ring_data->SendMBX;
	time							 =	ring_data->StartTime;
	ringing_tel						 =	ring_data->RingingTel;
	RingingType						 =	ringing_tel;
	GRS_Tel1OhCounter				 =	0;
	GRS_Tel2OhCounter				 =	0;
	det_cng_ring_flag				 =	0;
	if (time) {
		delay_ring_flag				 =	1;
	}
	else {
		delay_ring_flag				 =	0;
	}
    DetectStopKeyInputFlag			 =	0;

	/* 無鳴動着信モード時、TEL2を回線から切り離す特ROM By O.K Jun,03,1995 *//* By M.Tachibana 1997/10/17 */
	if (!CHK_UNI_NoRingTel2Detachable()) {
		GenerateRingKeyOn();
		wai_tsk( 3 );
	}
#if (0)	/* By M.Tachibana 1997/10/17 */
//	GenerateRingKeyOn();
//	wai_tsk(3);
#endif

#if (PRO_ECO_MODE == ENABLE) /* 2002/09/24 By M.Maeda */
	MAN_ChangeEcoMode(0);
#endif

	while ((GRS_Tel1OhCounter          <   GENERAL_RING_OFF_HOOK_MAX)
	&&     (GRS_Tel2OhCounter          <   GENERAL_RING_OFF_HOOK_MAX)
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
	&&  	(SYS_HookKeyInputFlag      == 0							)
#endif /* defined (KEISATSU) */
	&&     (GRS_DetectStopKeyInput()   !=  STOP                     )) {
		/*-----------------------------------*/
		/** 疑似ベル・呼出ブザー OFF期間  */
		/*-----------------------------------*/
		counter = 0;
		while ((counter                  <  (15 * time)              )
		&&     (GRS_DetectStopKeyInput() != STOP                     )
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
		&&  	(SYS_HookKeyInputFlag      == 0						)
#endif /* defined (KEISATSU) */
		&&     (GRS_Tel1OhCounter        <  GENERAL_RING_OFF_HOOK_MAX)
		&&     (GRS_Tel2OhCounter        <  GENERAL_RING_OFF_HOOK_MAX)) {
			/*-----------------------------------*/
			/** 付属/外付電話のOH情報の取込み */
			/*-----------------------------------*/
			OhPortStatusRead();
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
			if (!ModemRelaySetting()) {	/**	標準ラインに接続された場合	*/
				if (OffHook1() && !HDST_RelaySetting()){ /* ハンドセットは標準回線でOFFHOOK状態 */
					Is_HDST_Offhook = TRUE;
				}
				else {
					Is_HDST_Offhook = FALSE;
				}
				if ( !(NCU_LineStatus & EXT_HDST_OFFHOOK) && !(SYS_CalledLineNumber & SYS_EXT_LINE_IN_CI)) {	/* 付属電話は拡張回線でオフフックではない */
					HDST_RelayOff(); 		/* ハンドセットを標準回線に接続する */
					/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
					/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
					UpdateLCD();
				}
			}
			else {
				if (OffHook1() && HDST_RelaySetting()){ /* ハンドセットは拡張回線でOFFHOOK状態 */
					Is_HDST_Offhook = TRUE;
				}
				else {
					Is_HDST_Offhook = FALSE;
				}
				if ( !(NCU_LineStatus & STD_HDST_OFFHOOK) ) {	/* 付属電話は標準回線でオフフックではない */
					HDST_RelayOn(); 		/* ハンドセットを拡張回線に接続する */
					/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
					/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
					UpdateLCD();
				}
			}
#endif /* defined (KEISATSU) */
											/*--------------------------*/
			if (CHK_600PhoneAvailable()) {	/** 600型 OFF HOOK 検出(1)  */
											/*--------------------------*/
				if ((delay_ring_flag == 1) && (counter >= ((16 * time) / 2))) {
					if (OhPortStatus  & (TEL1_OFF_HOOK | TEL2_OFF_HOOK)) {
#if defined (KEISATSU) /* 警察FAX Modify by SMuratec 李 2005/09/19 */
						if ((OhPortStatus & TEL1_OFF_HOOK) && !ModemRelaySetting()) {
#else /* !defined (KEISATSU) */
						if (OhPortStatus & TEL1_OFF_HOOK) {
#endif /* defined (KEISATSU) */
							GRS_Tel1OhCounter = GENERAL_RING_OFF_HOOK_MAX;
							break;												/* '94,08,12 By N.S. */
						}
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/15 */
						if (OhPortStatus & TEL2_OFF_HOOK && ModemRelaySetting()) {
							GRS_Tel2OhCounter = GENERAL_RING_OFF_HOOK_MAX;
							break;												/* '94,08,12 By N.S. */
						}
#endif /* defined (KEISATSU) */
#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1997/12/1 */
						if (!CHK_Phone2ExtLineOn()) {	/**	PHONE2リレー設定が標準ラインの場合	*/
							if (OhPortStatus & TEL2_OFF_HOOK) {
								GRS_Tel2OhCounter = GENERAL_RING_OFF_HOOK_MAX;
								break;												/* '94,08,12 By N.S. */
							}
						}
#else
						if (OhPortStatus & TEL2_OFF_HOOK) {
							GRS_Tel2OhCounter = GENERAL_RING_OFF_HOOK_MAX;
							break;												/* '94,08,12 By N.S. */
						}
#endif
					}
				}
			}
			else {
				if (OhPortStatus  & (TEL1_OFF_HOOK | TEL2_OFF_HOOK)) {
#if defined (KEISATSU) /* 警察FAX Modify by SMuratec 李 2005/09/19 */
					if ((OhPortStatus & TEL1_OFF_HOOK) && !ModemRelaySetting()) {
#else /* !defined (KEISATSU) */
					if (OhPortStatus & TEL1_OFF_HOOK) {
#endif /* defined (KEISATSU) */
						GRS_Tel1OhCounter++;
					}
					else {
						GRS_Tel1OhCounter = 0;
					}
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/15 */
					if ((OhPortStatus & TEL2_OFF_HOOK) && ModemRelaySetting()) {
						GRS_Tel2OhCounter++;
					}
					else {
						GRS_Tel2OhCounter = 0;
					}
#endif /* defined (KEISATSU) */
#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1997/12/1 */
					if (!CHK_Phone2ExtLineOn()) {	/**	PHONE2リレー設定が標準ラインの場合	*/
						if (OhPortStatus & TEL2_OFF_HOOK) {
							GRS_Tel2OhCounter++;
						}
						else {
							GRS_Tel2OhCounter = 0;
						}
					}
#else
					if (OhPortStatus & TEL2_OFF_HOOK) {
						GRS_Tel2OhCounter++;
					}
					else {
						GRS_Tel2OhCounter = 0;
					}
#endif
				}
			}
			wai_tsk( 6 );
			counter++;
		}

		if ((CHK_600PhoneAvailable()         )
		&&  (GRS_DetectStopKeyInput() != STOP)		/*--------------------------*/
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
		&&  	(SYS_HookKeyInputFlag      == 0						)
#endif /* defined (KEISATSU) */
		&&  (delay_ring_flag          == 0   )) {	/** 600型 OFF HOOK 検出(2)  */
			/*-----------------------------------*//*--------------------------*/
			/** 付属/外付電話のOH情報の取込み */
			/*-----------------------------------*/
			OhPortStatusRead();
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
			if (!ModemRelaySetting()) {	/**	標準ラインに接続された場合	*/
				if (OffHook1() && !HDST_RelaySetting()){ /* ハンドセットは標準回線でOFFHOOK状態 */
					Is_HDST_Offhook = TRUE;
				}
				else {
					Is_HDST_Offhook = FALSE;
				}
				if ( !(NCU_LineStatus & EXT_HDST_OFFHOOK) && !(SYS_CalledLineNumber & SYS_EXT_LINE_IN_CI)) {	/* 付属電話は拡張回線でオフフックではない */
					HDST_RelayOff(); 		/* ハンドセットを標準回線に接続する */
					/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
					/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
					UpdateLCD();
				}
			}
			else {
				if (OffHook1() && HDST_RelaySetting()){ /* ハンドセットは拡張回線でOFFHOOK状態 */
					Is_HDST_Offhook = TRUE;
				}
				else {
					Is_HDST_Offhook = FALSE;
				}
				if ( !(NCU_LineStatus & STD_HDST_OFFHOOK) ) {	/* 付属電話は標準回線でオフフックではない */
					HDST_RelayOn(); 		/* ハンドセットを拡張回線に接続する */
					/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
					/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
					UpdateLCD();
				}
			}
#endif /* defined (KEISATSU) */
			if (OhPortStatus  & (TEL1_OFF_HOOK | TEL2_OFF_HOOK)) {
#if defined (KEISATSU) /* 警察FAX Modify by SMuratec 李 2005/09/19 */
				if ((OhPortStatus & TEL1_OFF_HOOK) && !ModemRelaySetting()) {
#else /* !defined (KEISATSU) */
				if (OhPortStatus &  TEL1_OFF_HOOK) {
#endif /* defined (KEISATSU) */
					GRS_Tel1OhCounter = GENERAL_RING_OFF_HOOK_MAX;
					break;												/* '94,08,12 By N.S. */
				}
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/15 */
				if ((OhPortStatus &  TEL2_OFF_HOOK) && ModemRelaySetting()) {
					GRS_Tel2OhCounter = GENERAL_RING_OFF_HOOK_MAX;
					break;												/* '94,08,12 By N.S. */
				}
#endif /* defined (KEISATSU) */
#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1997/12/1 */
				if (!CHK_Phone2ExtLineOn()) {	/**	PHONE2リレー設定が標準ラインの場合	*/
					if (OhPortStatus &  TEL2_OFF_HOOK) {
						GRS_Tel2OhCounter = GENERAL_RING_OFF_HOOK_MAX;
						break;												/* '94,08,12 By N.S. */
					}
				}
#else
				if (OhPortStatus &  TEL2_OFF_HOOK) {
					GRS_Tel2OhCounter = GENERAL_RING_OFF_HOOK_MAX;
					break;												/* '94,08,12 By N.S. */
				}
#endif
			}
		}
#if defined(FRA)		/* 95/02/20 by M.HARADA */
		time     		= 4;
#else
		time     		= 2;
#endif
		delay_ring_flag	= 0;
		/*------------------------------------*/
		/** CNG検出中の疑似ベル鳴動の防止  */
		/*------------------------------------*/
#if ( PRO_DIALIN == ENABLE )
		if (!(NCUStatus &  DIALIN_RECEIVE_STATE)) {
#endif
			while ((GRS_DetectStopKeyInput()  != STOP                     )
			&&     (SYS_RingSignalStopFlag    == 1                        )
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
			&&  	(SYS_HookKeyInputFlag      == 0						)
#endif /* defined (KEISATSU) */
			&&     (GRS_Tel1OhCounter         <  GENERAL_RING_OFF_HOOK_MAX)
			&&     (GRS_Tel2OhCounter         <  GENERAL_RING_OFF_HOOK_MAX)
			&&     (det_cng_ring_flag         == 0                        )) {

				wai_tsk(6);
				if (CHK_600PhoneAvailable()) {
#if defined (KEISATSU) /* 警察FAX Modify by SMuratec 李 2005/09/19 */
					if ((OhPortStatus & TEL1_OFF_HOOK) && !ModemRelaySetting()) {
#else /* !defined (KEISATSU) */
					if (OhPortStatus &  TEL1_OFF_HOOK) {
#endif /* defined (KEISATSU) */
						GRS_Tel1OhCounter++;
					}
					else {
						GRS_Tel1OhCounter = 0;
					}
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/15 */
					if ((OhPortStatus & TEL2_OFF_HOOK) && ModemRelaySetting()){
						GRS_Tel2OhCounter++;
					}
					else {
						GRS_Tel2OhCounter = 0;
					}
#endif /* defined (KEISATSU) */
#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1997/12/1 */
					if (!CHK_Phone2ExtLineOn()) {	/**	PHONE2リレー設定が標準ラインの場合	*/
						if (OhPortStatus & TEL2_OFF_HOOK){
							GRS_Tel2OhCounter++;
						}
						else {
							GRS_Tel2OhCounter = 0;
						}
					}
#else
					if (OhPortStatus & TEL2_OFF_HOOK){
						GRS_Tel2OhCounter++;
					}
					else {
						GRS_Tel2OhCounter = 0;
					}
#endif
				}
			}
#if ( PRO_DIALIN == ENABLE )
		}
#endif

		/* 無鳴動着信モード時、TEL2を回線から切り離す特ROM By O.K May,10,1995 *//* By M.Tachibana 1997/10/17 */
		if (det_cng_ring_flag == 0) {
			if (CHK_UNI_NoRingTel2Detachable()) {
				CONT_24V_On();
			}
		}

		det_cng_ring_flag = 1;
		/*--------------------------------*/
		/** 疑似ベル・呼出ブザーON期間  */
		/*--------------------------------*/
		counter = 0;
		/*----------------------------------------------------*/
		/** 留守番電話誤着信・回線断防止対策(田村TA-60対策) */
		/*----------------------------------------------------*/
		GenerateRingPreventRelayControl(ringing_tel);
		while ((counter                    <  12                       )
		&&     (GRS_DetectStopKeyInput()   != STOP                     )
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
		&&  	(SYS_HookKeyInputFlag      == 0						)
#endif /* defined (KEISATSU) */
		&&     (GRS_Tel1OhCounter          <  GENERAL_RING_OFF_HOOK_MAX)
		&&     (GRS_Tel2OhCounter          <  GENERAL_RING_OFF_HOOK_MAX)) {
			/*-----------------------------------*/
			/** 付属/外付電話のOH情報の取込み */
			/*-----------------------------------*/
			OhPortStatusRead();
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
			if (!ModemRelaySetting()) {	/**	標準ラインに接続された場合	*/
				if (OffHook1() && !HDST_RelaySetting()){ /* ハンドセットは標準回線でOFFHOOK状態 */
					Is_HDST_Offhook = TRUE;
				}
				else {
					Is_HDST_Offhook = FALSE;
				}
				if ( !(NCU_LineStatus & EXT_HDST_OFFHOOK) && !(SYS_CalledLineNumber & SYS_EXT_LINE_IN_CI)) {	/* 付属電話は拡張回線でオフフックではない */
					HDST_RelayOff(); 		/* ハンドセットを標準回線に接続する */
					/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
					/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
					UpdateLCD();
				}
			}
			else {
				if (OffHook1() && HDST_RelaySetting()){ /* ハンドセットは拡張回線でOFFHOOK状態 */
					Is_HDST_Offhook = TRUE;
				}
				else {
					Is_HDST_Offhook = FALSE;
				}
				if ( !(NCU_LineStatus & STD_HDST_OFFHOOK) ) {	/* 付属電話は標準回線でオフフックではない */
					HDST_RelayOn(); 		/* ハンドセットを拡張回線に接続する */
					/* 警察FAX DVT_ID36 Added by SMuratec 夏 2005/11/11 */
					/* 付属電話を呼び出し回線に切換の場合、LCDで更新します。*/
					UpdateLCD();
				}
			}
#endif /* defined (KEISATSU) */
			if (!(CHK_600PhoneAvailable())) {
				if (OhPortStatus  & (TEL1_OFF_HOOK | TEL2_OFF_HOOK)) {
#if defined (KEISATSU) /* 警察FAX Modify by SMuratec 李 2005/09/19 */
					if ((OhPortStatus & TEL1_OFF_HOOK) && !ModemRelaySetting()) {
#else /* !defined (KEISATSU) */
					if (OhPortStatus & TEL1_OFF_HOOK) {
#endif /* defined (KEISATSU) */
						GRS_Tel1OhCounter++;
					}
					else {
						GRS_Tel1OhCounter = 0;
					}
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/15 */
					if ((OhPortStatus & TEL2_OFF_HOOK) && ModemRelaySetting()) {
						GRS_Tel2OhCounter++;
					}
					else {
						GRS_Tel2OhCounter = 0;
					}
#endif /* defined (KEISATSU) */
#if (PRO_LINENUMBER == TWICE_LINE)	/* 疑似2回線仕様 by T.Soneoka 1997/12/1 */
					if (!CHK_Phone2ExtLineOn()) {	/**	PHONE2リレー設定が標準ラインの場合	*/
						if (OhPortStatus &  TEL2_OFF_HOOK) {
							GRS_Tel2OhCounter++;
						}
						else {
							GRS_Tel2OhCounter = 0;
						}
					}
#else
					if (OhPortStatus &  TEL2_OFF_HOOK) {
						GRS_Tel2OhCounter++;
					}
					else {
						GRS_Tel2OhCounter = 0;
					}
#endif
					GRB_RingAndBellOn();
				}
				else {
					/*-----------------------------*/
					/**  疑似ベル・呼出ブザーON  */
					/*-----------------------------*/
					GRS_Tel1OhCounter   = 0;
					GRS_Tel2OhCounter   = 0;
					GRB_RingAndBellOn();
				}
			}
			else {
				/*-----------------------------*/
				/**  疑似ベル・呼出ブザーON  */
				/*-----------------------------*/
				GRS_Tel1OhCounter   = 0;
				GRS_Tel2OhCounter   = 0;
				GRB_RingAndBellOn();
			}
#if (PRO_BT_DET_WHILE_RBT == ENABLE) /* 疑似ベル鳴動中のBusyTone検出 *//* Add By O.Kimoto 2002/03/11 */
			IsTelFaxRingSend = 1;		/* 2002/03/05 O.Oshima */
#endif	/* endof (PRO_BT_DET_WHILE_RBT == ENABLE) 2002/02/25 M.Iida */
			counter++;
		}
		/*-----------------------------------------------------*/
		/** 留守番電話誤着信・回線断防止対策(田村TA-60対策)  */
		/*-----------------------------------------------------*/
		GenerateRingPreventRelayControl(ringing_tel);
	}
	/*--------------------*/
	/** 呼出ブザーOFF  */
	/*--------------------*/
	BuzzerOffSetting(SYS_SPK_OUT_FAKERINGER);
	SCN_SetBuzzer(SCN_DISABLE);
	/*---------------*/
	/** 疑似ベル OFF */
	/*---------------*/
	GenerateRingKeyOff();
	if ((DetectStopKeyInputFlag    == 0)
	&&  (SYS_HookKeyInputFlag      == 0)) {
		if (GRS_Tel1OhCounter >= GENERAL_RING_OFF_HOOK_MAX) {
#if ( PRO_DIALIN == ENABLE )
			if (NCUStatus & DIALIN_RECEIVE_STATE) {
				TxGenerateRingSignalTaskMsg.Message = DETECT_TEL1_OFF_HOOK;
				snd_msg(tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
			}
			else{
#endif
				NCUStatus							&= ~TELEPHONE2_OFF_HOOK;
				NCUStatus						    |= TELEPHONE1_OFF_HOOK;
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
				if (Is_HDST_Offhook) {
					NCU_LineStatus &= ~EXT_HDST_OFFHOOK;
					NCU_LineStatus |= STD_HDST_OFFHOOK;	/* 付属電話は標準回線でオフフック */
					SYS_MachineStatus[SYS_OTHER_STATUS] &= ~SYS_HDST_EXT_OFFHOOK;
					SYS_MachineStatus[SYS_OTHER_STATUS] |= SYS_HDST_STD_OFFHOOK;
					SYS_LineTelStatus |= STD_USED_IN_HDST;
				}
				else {
					SYS_LineTelStatus |= STD_USED_IN_EXT;
				}
 #if 0 /* 会話予約によって特番機能消去 Deleted By SMuratec 李 2005/10/14 */
**				SYS_RingCounter = 1;
**				if (!(SYS_CalledLineNumber & SYS_TWICE_LINE_IN_CI)) {
**					RingStatus		= RING_STATUS_INITIAL;
**				}
 #endif
#endif /* defined (KEISATSU) */
				TxGenerateRingSignalTaskMsg.Message  = FCOM_TEL1_OFF_HOOK;
				snd_msg(tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
#if ( PRO_DIALIN == ENABLE )
			}
#endif
		}
		else {
			if (GRS_Tel2OhCounter >= GENERAL_RING_OFF_HOOK_MAX) {
#if ( PRO_DIALIN == ENABLE )
				if( NCUStatus & DIALIN_RECEIVE_STATE ){
					TxGenerateRingSignalTaskMsg.Message  = DETECT_TEL2_OFF_HOOK;
					snd_msg( tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
				}
				else {
#endif
					NCUStatus						    &= ~TELEPHONE1_OFF_HOOK;
					NCUStatus							|= TELEPHONE2_OFF_HOOK;
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
					if (Is_HDST_Offhook) {
						NCU_LineStatus &= ~STD_HDST_OFFHOOK;
						NCU_LineStatus |= EXT_HDST_OFFHOOK;	/* 付属電話は標準回線でオフフック */
						SYS_MachineStatus[SYS_OTHER_STATUS] &= ~SYS_HDST_STD_OFFHOOK;
						SYS_MachineStatus[SYS_OTHER_STATUS] |= SYS_HDST_EXT_OFFHOOK;
						SYS_LineTelStatus |= EXT_USED_IN_HDST;
					}
					else {
						SYS_LineTelStatus |= EXT_USED_IN_EXT;
					}
 #if 0 /* 会話予約によって特番機能消去 Deleted By SMuratec 李 2005/10/14 */
**					SYS_RingCounterExt = 1;
**					if (!(SYS_CalledLineNumber & SYS_TWICE_LINE_IN_CI)) {
**						RingStatus		= RING_STATUS_INITIAL;
**					}
 #endif
#endif /* defined (KEISATSU) */
					TxGenerateRingSignalTaskMsg.Message  = FCOM_TEL2_OFF_HOOK;
					snd_msg( tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
#if ( PRO_DIALIN == ENABLE )
				}
#endif
			}
		}
	}
	else {
		if (!SYS_HookKeyInputFlag) {
#if ( PRO_DIALIN == ENABLE )
			if (NCUStatus & DIALIN_RECEIVE_STATE) {
				TxGenerateRingSignalTaskMsg.Message  = DETECT_INPUT_STOP_KEY;
				snd_msg( tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
			}
			else {
#endif
				TxGenerateRingSignalTaskMsg.Message  = FCOM_STOP_KEY;
				snd_msg( tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
#if ( PRO_DIALIN == ENABLE )
			}
#endif
		}
		else {
#if ( PRO_DIALIN == ENABLE )
			if (NCUStatus & DIALIN_RECEIVE_STATE) {
				TxGenerateRingSignalTaskMsg.Message  = DETECT_INPUT_HOOK_KEY;
				snd_msg( tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
			}
			else {
#endif
				NCUStatus							|= HOOK_KEY_ON_STATE;
				SYS_HookKeyInputFlag	             = 0;
				HookKeyInputFlag	                 = 0;
#if defined (KEISATSU) /* 警察FAX Added by SMuratec 李 2005/09/17 */
 #if 0 /* 会話予約によって特番機能消去 Deleted By SMuratec 李 2005/10/14 */
**				if (!ModemRelaySetting()) {	/**	標準ラインに接続された場合	*/
**					SYS_RingCounter = 1;
**				}
**				else {
**					SYS_RingCounterExt = 1;
**				}
**				if (!(SYS_CalledLineNumber & SYS_TWICE_LINE_IN_CI)) {
**					RingStatus		= RING_STATUS_INITIAL;
**				}
 #endif
#endif /* defined (KEISATSU) */
				TxGenerateRingSignalTaskMsg.Message  = FCOM_HOOK_KEY;
				snd_msg( tx_mail_box_no, &TxGenerateRingSignalTaskMsg);
#if ( PRO_DIALIN == ENABLE )
			}
#endif
		}
Esempio n. 19
0
/*************************************************************************
	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
}
Esempio n. 20
0
/*************************************************************************
	module		:[エンコードタスク]
	function	:[
		1.イメージバッファからRLバッファにデータを転送する。(イメージ->RL変換)
		2.エンコードを行う。
		3.上記の処理を1ページ行い、最終ラインをエンコード終了すると、RTCをセットする。
	]
	return		:[]
	common		:[]
	condition	:[
		子タスク:	ImageToRlConvertTask()	<Small>
					EncodeExecuteTask()		<Small>
	]
	comment		:[]
	machine		:[V53]
	language	:[CH38(V.2.0B)]
	keyword		:[SCDC]
	ProtoType	:[void SCDC_EncodeTask(void){}]
	date		:[1998/09/30]
	author		:[木元  修]
*************************************************************************/
void SCDC_Encodetask(void)
{
	/* 内部変数宣言 */
	MESSAGE_t	*MessageControl;
	MESSAGE_t	EncodeTaskMessage;
	UWORD Item;
	UWORD Message;
	UBYTE	wait_convert;
	UBYTE	wait_encode;
	UBYTE	convert_p;
	UBYTE	encode_p;
	UBYTE	buffer_p[3];

	EncodeTaskMessage.Item = FROM_SCD_ENCODE;
	wait_convert = FALSE;
	wait_encode = TRUE;
	convert_p = 0;
	encode_p = 0;
	buffer_p[0] = FREE;
	buffer_p[1] = FREE;
	buffer_p[2] = FREE;

	/* イメージをRLに変換するタスク生成 */
	cre_tsk( &tskno_SCDC_ImageToRlConvertTask, TSK_SCD_IMAGETORLCONVERTTASK, 0 );

	/* RLを符号に変換(エンコード)するタスク生成 */
	cre_tsk( &tskno_SCDC_EncodeExecuteTask, TSK_SCD_ENCODEEXECUTETASK, 0 );
	
	/* 読み取り処理からのエンコードスタート待ち */
	do {
		rcv_msg(mbxno.SCD_EncodeTask, &MessageControl); /** タスクからメッセージ受信 */
	} while (!(MessageControl->Item == FROM_SCANNER));

	/* ImageToRLConvertTaskに1ライン処理実行を起動 */
	buffer_p[convert_p] = CONVERT;
	EnocodeTaskMessage.Message = CONVERT_START;
	snd_msg(mbxno.SCDC_EncodeExeTask, &EnocdeTaskMessage);

	while(1) {
		/* メッセージ待ち */
		rcv_msg(mbxno.SCD_EncodeTask, &MessageControl); /** タスクからメッセージ受信 */
		Item = MessageControl->Item;
		Message = MessageControl->Message;

		/* メッセージ処理 */
		switch(Item) {
		case FROM_CONVERT:	/* ImageToRlConvertTaskより */
			buffer_p[convert_p] = DATA_SET;

			if (wait_encode == TRUE) {
				/* エンコード処理起動 */
				wait_encode = FALSE;
				buffer_p[encode_p] = ENCODE;
				EnocodeTaskMessage.Message = ENCODE_START;
				snd_msg(mbxno.SCDC_EncodeExeTask, &EnocdeTaskMessage);
			}

			convet_p ++;
			if (convert_p == BUF_LINE_MAX) {
				convert_p = 0;
			}
			/* RLバッファに開きが無い? */
			if (buffer_p[convert_p] == FREE) {
				/* 次のラインの処理起動 */
				wait_convert = FALSE;
				buffer_p[convert_p] = CONVERT;
				EnocodeTaskMessage.Message = ENCODE_START;
				snd_msg(mbxno.SCDC_EncodeExeTask, &EnocdeTaskMessage);
			}
			else {
				/* あくのを待つ */
				wait_convert = TRUE;
			}
			break;
		case FROM_ENCODE:	/* EncodeExecuteTaskより */
			buffer_p[encode_p] = REFERENCE_LINE;
			if (encode_p != 0) {
				buffer_p[(encode_p - 1)] = FREE;
			}
			else {
				buffer_p[(BUF_LINE_MAX - 1)] = FREE;
			}

			if (encode_method == MH) {
				buffer_p[encode_p] = FREE;
			}

			encode_p ++;
			if (encode_p == BUF_LINE_MAX) {
				encode_p = 0;
			}

			/* 全データエンコード終了していれば、RTC書き込み */

			/* RLデータが貼り終わっていない? */
			if (buffer_p[encode_p] == DATA_SET) {
				/* エンコード処理起動 */
				wait_encode = FALSE;
				buffer_p[encode_p] = ENCODE;
				EnocodeTaskMessage.Message = ENCODE_START;
				snd_msg(mbxno.SCDC_EncodeExeTask, &EnocdeTaskMessage);
			}
			else {
				/* 貼られるのを待つ */
				wait_encode = TRUE;
			}
			break;
		case FROM_SCANNER:	/* 読み取り処理から */
			/* 停止キーが押された? */
			break;
		default:
			/* ここへ来ることはありえないはず!! */
			break;
		}
	}
}
Esempio n. 21
0
/*************************************************************************
	module		:[ECMメモリ受信]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[フラッシュROM]
	comment		:[
	以下桐よりコピー
	キャリア断判定ブロック数(1block=256byte)
	=(300byte/s(2400bps時)×キャリア断判定時間(s)×通信速度倍(1...6)
	 /256byte/block)+1
	よって キャリア断時間5秒で換算すると以下の通り
	2400 bps−>6 ブロック
	4800 bps−>12ブロック
	7200 bps−>18ブロック
	9600 bps−>24ブロック
	12000bps−>30ブロック
	14400bps−>36ブロック
	尚、キャリア断時間の変更はNO_CARRY_MAXTIMEを変更するだけ
	現在5秒に設定
	]
	machine		:[SH7034/SH704X]
	language	:[SHC]
	keyword		:[MDM]
	date		:[1995/12/25]
	author		:[鈴木郁二]
*************************************************************************/
void SCDC_EcmDecodeTask(void)
{
#if (PRO_COM_CODEC_TYPE == SOFTWARE)
	struct CdcBlk_t encdata,*Sedp;
	struct CdcBlk_t decdata,*Sddp;
	/* UWORD	err_continuemax;* 連続エラー許容ライン数 松、竹、桜は20本NormalでRTN 返送	*/
	/* エンコード用RLバッファ */
	struct WorkBuf_t *a_buf;
	struct WorkBuf_t *b_buf;
	struct WorkBuf_t *c_buf;
	struct WorkBuf_t *tmp;
	WORD	mem_status;
	WORD	rx_status;
	UWORD	page_length;
	UWORD	err_rate;
	UBYTE stop_on;
	WORD	c_err_line, c_err_max, mr_line;/* 連続エラーライン/同更新用パラメータ */
	UWORD tsk_sw_line_no;
	UBYTE print_on;
	UBYTE scan_on;
	UBYTE panel_on;
#if (PRO_DATE_SET_RXDOC_CHK == ENABLE)
	UBYTE	n;
#endif


	mem_status = 0;
	rx_status = 0;
	stop_on = 0;
	tsk_sw_line_no = 0;
	print_on = 0;
	scan_on= 0;
	panel_on = 0;

	/** ソフトコーデック初期化 */
	Sedp = &encdata;
	Sddp = &decdata;
	Sedp->BufMode = MEM1;
	Sddp->BufMode = ECM_BUF;
	CodecPageStatus = CDC_READY;
	SoftEncodeInitial(Sedp);
	SoftDecodeInitial(Sddp);
	/* デコード符号化方式をMMR/MR */
	/* Sddp->Coding = RxMemoryStoreData.Code;*/

	/* FCMの大域変数をSCDの大域変数へ */
	SCD_EcmSize = FcomEcmSize;

	/* タスクスイッチ調整用メンテナンスSW−Fをコピーする By Y.Suzuki 1997/10/17 */
	CopyFromMantSwF();

	/* RLバッファ初期化 */
	RlBufInit(Sddp->Img_Size);
	a_buf = &RL1;
	b_buf = &RL2;
	c_buf = &RL3;


	/*	ダイレクト受信有無 By Y.Suzuki 1997/06/13	*/
	SCD_CheckDirectRx();
	if (SCD_DirectRx) {
		Sddp->Wp = Sedp->Wp;
		Sddp->Wp->Buf = Sedp->Wp->Buf;
		Sddp->Wp->Adr = Sedp->Wp->Adr;
		Sddp->Wp->Bit = Sedp->Wp->Bit;
	}

	c_err_line = 0;
	c_err_max = 0;
	MDM_RxTotalLine = 0;		/**	1ページトータルライン数初期化	*/
	MDM_RxErrorTotalLine = 0;	/**	1ページエラーライン数初期化	*/
	MDM_EncodeLine = 0;
	mr_line = 1;
	if (SYS_DocBlock.Src.Code == SYS_MR_CODE) {
	    mr_line = 2;
		if (SYS_DocBlock.Src.Mode == SYS_FINE) {
			mr_line = mr_line * 2;
		}
		else if (SYS_DocBlock.Src.Mode != SYS_NORMAL) {/* HFINE SFINE */
			mr_line = mr_line * 4;
		}
	}

	/*--------------------------------------*/
	/* 最大受信ライン数セット 				*/
	/*--------------------------------------*/
	page_length = SYS_DocBlock.DocLength;
	if(page_length != SYS_NO_LIMIT_PAGE_LENGTH) {
		switch(SYS_DocBlock.Src.Mode) {
		case SYS_FINE:
			page_length *= 2;
			break;
		case SYS_SFINE:
		case SYS_HFINE:
			page_length *= 4;
			break;
		}
	}

	/*--------------------------------------*/
	/*	RTN返送連続エラーライン数設定	*/
	/*--------------------------------------*/
#if(0)/* ECM ではいらない */
	page_length = SYS_DocBlock.DocLength;
	switch(SYS_DocBlock.Src.Mode) {
	case SYS_FINE:
		err_continuemax *= 2;
		break;
	case SYS_SFINE:
	case SYS_HFINE:
		err_continuemax *= 4;
		break;
	}
#endif

	/*----------------------*/
	/*	エラー判定基準設定	*/
	/*----------------------*/
	err_rate = CHK_RTN_TxRate();	/*	エラー判定基準設定	*/

	/*------------------------------------------------------*/
	/*	RTC検出するまでDECODE/ENCODEする	*/
	/*------------------------------------------------------*/
	CodecPageStatus = CDC_CONTINUE;			/**	初期化	*/

#if (PRO_DATE_SET_RXDOC_CHK == ENABLE)
	/*----------------------------*/
	/* 受信原稿の上に日時を付ける */
	/*----------------------------*/
	if (CMN_CheckCILEnable()) {	/* CIL機能有りで、ユニークSW I:5-7 が有効 */
		SetDateRxDocECM(Sedp, a_buf, b_buf);
	}

	if (!SCD_DirectRx) {	/* ダイレクト受信ではインサイドできないので、アウトサイドの時 */
		/*----------------------*/
		/* CILインサイド処理 */
		/*----------------------*/
		if (CMN_CheckCILEnable()) {	/* CIL機能有りで、UNISW I:5-7 */
			if (CHK_UNI_CIL_Inside()) {	/* UNISW I:5-4 */
				n = (UBYTE)(16 * ModePara(SYS_DocBlock.Dst.Mode));
				if (n > 64) {
					n = 64;
				}
				while (n--) {							/* dst -> src に変更	Mar 26 '93 */
					/* Caution! c_bufをデコード用,a_bufを参照用として使用する */
					rx_status = Ecm_Decode(Sddp,c_buf,a_buf);
					tmp = a_buf;
					a_buf = c_buf;
					c_buf = tmp;
				}
			}
		}
	}
#endif

	do {
		tmp = c_buf;
		c_buf = b_buf;
		b_buf = a_buf;
		a_buf = tmp;
		/*	停止キー	*/
		if (SYS_FaxComStopSwitch()) {
			stop_on = 1;
			break;
		}
#if (PRO_KEYPANEL == PANEL_POPLAR_L)	/* By Y.Suzuki 1998/1/30 */
		/* タスクスイッチ調整 By Y.Suzuki 1998/01/30 */
		print_on = CMN_CheckPrinting();
		if (tskno_SCN_DocumentStoreTask != 0xFFFF) {
			scan_on = TRUE;
		}
		else {
			scan_on = 0;
		}
		if (tskno_OPR_KeyTimerTask != 0xFFFF) {
			panel_on = TRUE;
		}
		else {
			panel_on = 0;
		}
		if ((print_on == TRUE) || (scan_on == TRUE) || (panel_on == TRUE)) {
			SCD_MaintenanceSwitch[SCD_MNT_SW_F3] = 32; /* By Y.Suzuki 1998/02/07 */
		}
#endif
		if (!SCD_DirectRx) {
			/** 1ラインデコード */
			/* Caution! dec_rl_aをデコード用,dec_rl_bを参照用として使用する */
			rx_status = Ecm_Decode(Sddp,a_buf,b_buf);
			if(SCD_DBG_RLOVER == 3) {
				SYB_MaintenanceSwitch[MNT_SW_F0] |= 0x08;
			}
			/* 受信ライン数チェック */
			if(++MDM_RxTotalLine > page_length) {
				CodecPageStatus = CDC_PAGE_SEPARATE;
				break;
			}
			if (rx_status == RX_ERROR) {
				/* 松、竹、桜は、MR,MMRのデコードの場合、MHのラインでエラーが
				発生したものとして、エラーラインをカウントしている。*/
				/* エラーラインの処理 */
				MDM_RxErrorTotalLine += mr_line;
				if(SYS_DocBlock.Src.Code == SYS_MMR_CODE) {
					CodecPageStatus = CDC_DECODE_ERROR;
					break;
				}
			}

#if(0)		/*	By Y.Suzuki 1997/07/07	*/
//			/**	タスクスイッチング 10 ライン毎10ms	*/
//			if ((++tsk_sw_line_no > 10) || (SCD_Det_Rcp)) {/* By Y.Suzuki 1996/07/06 */
//				tsk_sw_line_no = 0; /* By Y.Suzuki 1996/07/06 */
//				if (SYB_MaintenanceSwitch[MNT_SW_F3]) {
//					if (SCD_Det_Rcp) {
//						wai_oneshot(SYB_MaintenanceSwitch[MNT_SW_F3]+5);
//					}
//					else {
//						wai_oneshot(SYB_MaintenanceSwitch[MNT_SW_F3]);
//					}
//				}
//				else {
//					if (SCD_Det_Rcp) {
//						wai_oneshot(8);
//					}
//					else {
//						wai_oneshot(5);
//					}
//				}
//			}
#endif
			/* 参照ラインを符号化する */
			/** 1ラインエンコード */
			/* Caution! enc_rl_aをエンコード用,enc_rl_bを参照用として使用する */
			mem_status = Mem_Encode(Sedp,b_buf,c_buf);
			if(SCD_DBG_PMODE == 5) {
				SYB_MaintenanceSwitch[MNT_SW_F0] |= 0x80;
			}
			if(SCD_DBG_ENC_RLSIZE == 1) {
				SYB_MaintenanceSwitch[MNT_SW_F0] |= 0x20;
			}
			if(SCD_DBG_ENC_RLSIZE == 3) {
				SYB_MaintenanceSwitch[MNT_SW_F0] |= 0x40;
			}
			/* メモリオーバーのチェック */
			if(mem_status == RX_MEM_OVER) {
				CodecPageStatus = CDC_MEM_OVER;
				break;
			}
		}/* DirectRx */
		else {
			/** 1ラインデコード */
			/* Caution! dec_rl_aをデコード用,dec_rl_bを参照用として使用する */
			rx_status = Ecm_Decode(Sddp,a_buf,b_buf);
			if(SCD_DBG_RLOVER == 3) {
				SYB_MaintenanceSwitch[MNT_SW_F0] |= 0x08;
			}
			/* 受信ライン数チェック */
			if(++MDM_RxTotalLine > page_length) {
				CodecPageStatus = CDC_PAGE_SEPARATE;
				break;
			}
			if (rx_status == RX_ERROR) {
				/* 松、竹、桜は、MR,MMRのデコードの場合、MHのラインでエラーが
				発生したものとして、エラーラインをカウントしている。*/
				/* エラーラインの処理 */
				MDM_RxErrorTotalLine += mr_line;
				if(SYS_DocBlock.Src.Code == SYS_MMR_CODE) {
					CodecPageStatus = CDC_DECODE_ERROR;
					/*rx_status = RTC;*/
					break;
				}
			}
			else if (rx_status == RTC) {/* RTC 検出後は、タスクスイッチ不要 By Y.Suzuki 1997/07/07 */
				CodecPageStatus = CDC_RTC_DET;
				break;
			}
			else if (rx_status == RX_MEM_OVER) {	/*	ダイレクト受信時メモリオーバー	*/
				CodecPageStatus = CDC_MEM_OVER;
				/* rx_status = RTC;*/
				mem_status = RX_MEM_OVER;
				break;
			}

#if(0)		/*	By Y.Suzuki 1997/07/07	*/
//			/**	タスクスイッチング 10 ライン毎10ms	*/
//			if ((++tsk_sw_line_no > 10) || (SCD_Det_Rcp)) {/* By Y.Suzuki 1996/07/06 */
//				tsk_sw_line_no = 0; /* By Y.Suzuki 1996/07/06 */
//				if (SYB_MaintenanceSwitch[MNT_SW_F3]) {
//					if (SCD_Det_Rcp) {
//						wai_oneshot(SYB_MaintenanceSwitch[MNT_SW_F3]+5);
//					}
//					else {
//						wai_oneshot(SYB_MaintenanceSwitch[MNT_SW_F3]);
//					}
//				}
//				else {
//					if (SCD_Det_Rcp) {
//						wai_oneshot(8);
//					}
//					else {
//						wai_oneshot(5);
//					}
//				}
//			}
#endif
		}
	} while(rx_status != RTC);
	if (rx_status == RTC) {
		MDM_RxTotalLine--;/* RTC の分を減算する By Y.Suzuki 1997/07/08 */
	}
	MDM_EncodeLine = MDM_RxTotalLine;	/*	メモリインデックスに格納するライン数 By Y.Suzuki 1997/01/13	*/
	/* RTCの書き込み */
/*	CodecPageStatus = CDC_RTC_DET;受信エラーにならない! By Y.Suzuki 1997/09/29 */
	if (CodecPageStatus == CDC_CONTINUE) {
		CodecPageStatus = CDC_RTC_DET;
	}
	if(mem_status != RX_MEM_OVER) {
		if (SCD_DirectRx) {/*	ダイレクト送信 By Y.Suzuki 1997/02/15	*/
			mem_status = WriteRtcToMem(Sddp);
		}
		else {
			mem_status = WriteRtcToMem(Sedp);
		}
	}
	/* 停止キーのチェック */
	if(stop_on) {
		CodecPageStatus = CDC_STOPPED;
	}

	/* メモリオーバーのチェック */
	else if(mem_status == RX_MEM_OVER) {
		CodecPageStatus = CDC_MEM_OVER;
	}

	/* エラー率のチェック */
	else if (err_rate <= (UWORD)(((UDWORD)(MDM_RxErrorTotalLine)*100)/((UDWORD)MDM_RxTotalLine))) {	/**	エラーライン数が基準値以上の時	*/
		CodecPageStatus = CDC_DECODE_ERROR;
	}
#if(0)	/*	By Y.Suzuki 1996/07/22	*/
**	SoftCDC_Message.Message = MSG_SCDC_PAGE_END;
**	snd_msg(mbxno.SCDC_RxEcmControlTask, &SoftCDC_Message);	/*	エンコード開始メッセージ送信	*/
#endif
	wai_tsk(0xFFFF);
#endif/* PRO_COM_CODEC_TYPE SOFTWARE*/
}
Esempio n. 22
0
/*************************************************************************
	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);
** 		}
** 	}
Esempio n. 23
0
/*
 *	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;
**	}
Esempio n. 24
0
void task1( unsigned int arg )
{
    ER ercd;
    int tests = 0;

    CYG_TEST_INFO( "Task 1 running" );

    ercd = dis_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" );
    ercd = sta_tsk( 2, 22222 );
    CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" );
    ercd = chg_pri( 2, 5 );
    CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" );
    ercd = ena_dsp();
    CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" );
    ercd = dly_tsk( 10 );
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );

#ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
    tests++;
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = del_sem( -6 );
    CYG_TEST_CHECK( E_ID == ercd, "del_sem bad ercd !E_ID" );
    ercd = del_sem( 99 );
    CYG_TEST_CHECK( E_ID == ercd, "del_sem bad ercd !E_ID" );
    ercd = cre_sem( -6, &t_csem );
    CYG_TEST_CHECK( E_ID == ercd, "cre_sem bad ercd !E_ID" );
    ercd = cre_sem( 99, &t_csem );
    CYG_TEST_CHECK( E_ID == ercd, "cre_sem bad ercd !E_ID" );
#endif // we can test bad param error returns
    // try a pre-existing object
    ercd = cre_sem( 3, &t_csem );
    CYG_TEST_CHECK( E_OBJ == ercd, "cre_sem bad ercd !E_OBJ" );
    // delete it so we can play
    ercd = del_sem( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "del_sem bad ercd" );
    // check it is deleted
    ercd = sig_sem( 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
    ercd = preq_sem( 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "preq_sem bad ercd !E_NOEXS" );
    ercd = twai_sem( 3, 10 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "twai_sem bad ercd !E_NOEXS" );
    ercd = wai_sem( 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "wai_sem bad ercd !E_NOEXS" );
    ercd = ref_sem( &t_rsem, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_sem bad ercd !E_NOEXS" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // now try creating it (badly)
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
    ercd = cre_sem( 3, NULL );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_sem bad ercd !E_PAR" );
#endif
    ercd = cre_sem( 3, NADR );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_sem bad ercd !E_PAR" );
    t_csem.sematr = 0xfff;
    ercd = cre_sem( 3, &t_csem );
    CYG_TEST_CHECK( E_RSATR == ercd, "cre_sem bad ercd !E_RSATR" );
    t_csem.sematr = 0;
#endif // we can test bad param error returns
    ercd = cre_sem( 3, &t_csem );
    CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
    // and check we can use it
    ercd = sig_sem( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" );
    ercd = wai_sem( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" );
    ercd = preq_sem( 3 );
    CYG_TEST_CHECK( E_TMOUT == ercd, "preq_sem bad ercd !E_TMOUT" );
    ercd = twai_sem( 3, 2 );
    CYG_TEST_CHECK( E_TMOUT == ercd, "twai_sem bad ercd !E_TMOUT" );
    ercd = ref_sem( &t_rsem, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_sem bad ercd" );

    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = wai_sem( 1 );
    CYG_TEST_CHECK( E_DLT == ercd, "wai_sem bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = twai_sem( 2, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "twai_sem bad ercd !E_DLT" );

    // check they are deleted
    ercd = sig_sem( 1 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
    ercd = sig_sem( 2 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
    // re-create and do it again
    ercd = cre_sem( 1, &t_csem );
    CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );
    ercd = cre_sem( 2, &t_csem );
    CYG_TEST_CHECK( E_OK == ercd, "cre_sem bad ercd" );

    // now wait while task 2 deletes the wait objects again
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = wai_sem( 1 );
    CYG_TEST_CHECK( E_DLT == ercd, "wai_sem bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = twai_sem( 2, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "twai_sem bad ercd !E_DLT" );

    // check they are deleted
    ercd = sig_sem( 1 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );
    ercd = sig_sem( 2 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "sig_sem bad ercd !E_NOEXS" );

    CYG_TEST_PASS("create/delete semaphores");
#endif // CYGPKG_UITRON_SEMAS_CREATE_DELETE


#ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
    tests++;
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = del_flg( -6 );
    CYG_TEST_CHECK( E_ID == ercd, "del_flg bad ercd !E_ID" );
    ercd = del_flg( 99 );
    CYG_TEST_CHECK( E_ID == ercd, "del_flg bad ercd !E_ID" );
    ercd = cre_flg( -6, &t_cflg );
    CYG_TEST_CHECK( E_ID == ercd, "cre_flg bad ercd !E_ID" );
    ercd = cre_flg( 99, &t_cflg );
    CYG_TEST_CHECK( E_ID == ercd, "cre_flg bad ercd !E_ID" );
#endif // we can test bad param error returns
    // try a pre-existing object
    ercd = cre_flg( 3, &t_cflg );
    CYG_TEST_CHECK( E_OBJ == ercd, "cre_flg bad ercd !E_OBJ" );
    // delete it so we can play
    ercd = del_flg( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
    // check it is deleted
    ercd = set_flg( 3, 0x6789 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "set_flg bad ercd !E_NOEXS" );
    ercd = clr_flg( 3, 0x9876 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "clr_flg bad ercd !E_NOEXS" );
    ercd = pol_flg( &scratch, 3, 0xdddd, TWF_ANDW );
    CYG_TEST_CHECK( E_NOEXS == ercd, "pol_flg bad ercd !E_NOEXS" );
    ercd = twai_flg( &scratch, 3, 0x4444, TWF_ORW, 10 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "twai_flg bad ercd !E_NOEXS" );
    ercd = wai_flg( &scratch, 3, 0xbbbb, TWF_ANDW | TWF_CLR );
    CYG_TEST_CHECK( E_NOEXS == ercd, "wai_flg bad ercd !E_NOEXS" );
    ercd = ref_flg( &t_rflg, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_flg bad ercd !E_NOEXS" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // now try creating it (badly)
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
    ercd = cre_flg( 3, NULL );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_flg bad ercd !E_PAR" );
#endif
    ercd = cre_flg( 3, NADR );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_flg bad ercd !E_PAR" );
    t_cflg.flgatr = 0xfff;
    ercd = cre_flg( 3, &t_cflg );
    CYG_TEST_CHECK( E_RSATR == ercd, "cre_flg bad ercd !E_RSATR" );
#endif // we can test bad param error returns
    // now create it well
    t_cflg.flgatr = 0;
    t_cflg.iflgptn = 0;
    ercd = cre_flg( 3, &t_cflg );
    CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
    // and check we can use it
    ercd = clr_flg( 3, 0x7256 );
    CYG_TEST_CHECK( E_OK == ercd, "clr_flg bad ercd" );
    ercd = set_flg( 3, 0xff );
    CYG_TEST_CHECK( E_OK == ercd, "set_flg bad ercd" );
    ercd = wai_flg( &scratch, 3, 0xaa, TWF_ANDW | TWF_CLR );
    CYG_TEST_CHECK( E_OK == ercd, "wai_flg bad ercd" );
    ercd = pol_flg( &scratch, 3, 0xaa, TWF_ANDW | TWF_CLR );
    CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
    ercd = twai_flg( &scratch, 3, 0xaa, TWF_ANDW | TWF_CLR, 2 );
    CYG_TEST_CHECK( E_TMOUT == ercd, "twai_flg bad ercd !E_TMOUT" );
    ercd = ref_flg( &t_rflg, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
    CYG_TEST_CHECK( 0 == t_rflg.flgptn, "ref_flg bad ercd" );
    // now create it again with a preset pattern and check that we can
    // detect that pattern:
    ercd = del_flg( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "del_flg bad ercd" );
    t_cflg.flgatr = 0;
    t_cflg.iflgptn = 0x1234;
    ercd = cre_flg( 3, &t_cflg );
    CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
    // and check we can use it
    ercd = wai_flg( &scratch, 3, 0x1200, TWF_ANDW );
    CYG_TEST_CHECK( E_OK == ercd, "wai_flg bad ercd" );
    ercd = pol_flg( &scratch, 3, 0x0034, TWF_ANDW );
    CYG_TEST_CHECK( E_OK == ercd, "pol_flg bad ercd" );
    ercd = twai_flg( &scratch, 3, 0x1004, TWF_ANDW, 10 );
    CYG_TEST_CHECK( E_OK == ercd, "twai_flg bad ercd" );
    ercd = pol_flg( &scratch, 3, 0xffedcb, TWF_ORW );
    CYG_TEST_CHECK( E_TMOUT == ercd, "pol_flg bad ercd !E_TMOUT" );
    ercd = ref_flg( &t_rflg, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
    CYG_TEST_CHECK( 0x1234 == t_rflg.flgptn, "ref_flg bad ercd" );
    ercd = clr_flg( 3, 0 );
    ercd = ref_flg( &t_rflg, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_flg bad ercd" );
    CYG_TEST_CHECK( 0 == t_rflg.flgptn, "ref_flg bad ercd" );

    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = wai_flg( &scratch, 1, 0xaa, TWF_ANDW );
    CYG_TEST_CHECK( E_DLT == ercd, "wai_flg bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = twai_flg( &scratch, 2, 0x55, TWF_ANDW, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "twai_flg bad ercd !E_DLT" );

    // check they are deleted
    ercd = set_flg( 1, 0x22 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "set_flg bad ercd !E_NOEXS" );
    ercd = clr_flg( 2, 0xdd );
    CYG_TEST_CHECK( E_NOEXS == ercd, "clr_flg bad ercd !E_NOEXS" );
    // re-create and do it again
    t_cflg.iflgptn = 0x5555;
    ercd = cre_flg( 1, &t_cflg );
    CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );
    t_cflg.iflgptn = 0;
    ercd = cre_flg( 2, &t_cflg );
    CYG_TEST_CHECK( E_OK == ercd, "cre_flg bad ercd" );

    // now wait while task 2 deletes the wait objects again
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = wai_flg( &scratch, 1, 0xaaaa, TWF_ORW | TWF_CLR );
    CYG_TEST_CHECK( E_DLT == ercd, "wai_flg bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = twai_flg( &scratch, 2, 0xffff, TWF_ORW, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "twai_flg bad ercd !E_DLT" );

    // check they are deleted
    ercd = clr_flg( 1, 0xd00d );
    CYG_TEST_CHECK( E_NOEXS == ercd, "clr_flg bad ercd !E_NOEXS" );
    ercd = set_flg( 2, 0xfff00 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "set_flg bad ercd !E_NOEXS" );

    CYG_TEST_PASS("create/delete flags");
#endif // CYGPKG_UITRON_FLAGS_CREATE_DELETE

#ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
    tests++;
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    ercd = del_mbx( -6 );
    CYG_TEST_CHECK( E_ID == ercd, "del_mbx bad ercd !E_ID" );
    ercd = del_mbx( 99 );
    CYG_TEST_CHECK( E_ID == ercd, "del_mbx bad ercd !E_ID" );
    ercd = cre_mbx( -6, &t_cmbx );
    CYG_TEST_CHECK( E_ID == ercd, "cre_mbx bad ercd !E_ID" );
    ercd = cre_mbx( 99, &t_cmbx );
    CYG_TEST_CHECK( E_ID == ercd, "cre_mbx bad ercd !E_ID" );
#endif // we can test bad param error returns
    // try a pre-existing object
    ercd = cre_mbx( 3, &t_cmbx );
    CYG_TEST_CHECK( E_OBJ == ercd, "cre_mbx bad ercd !E_OBJ" );
    // delete it so we can play
    ercd = del_mbx( 3 );
    CYG_TEST_CHECK( E_OK == ercd, "del_mbx bad ercd" );
    // check it is deleted
    ercd = snd_msg( 3, t_msg );
    CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
    ercd = rcv_msg( &msg, 3 );       
    CYG_TEST_CHECK( E_NOEXS == ercd, "rcv_msg bad ercd !E_NOEXS" );
    ercd = trcv_msg( &msg, 3, 10 );   
    CYG_TEST_CHECK( E_NOEXS == ercd, "trcv_msg bad ercd !E_NOEXS" );
    ercd = prcv_msg( &msg, 3 );        
    CYG_TEST_CHECK( E_NOEXS == ercd, "prcv_msg bad ercd !E_NOEXS" );
    ercd = ref_mbx( &t_rmbx, 3 );
    CYG_TEST_CHECK( E_NOEXS == ercd, "ref_mbx bad ercd !E_NOEXS" );
#ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
    // now try creating it (badly)
#ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
    ercd = cre_mbx( 3, NULL );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_mbx bad ercd !E_PAR" );
#endif
    ercd = cre_mbx( 3, NADR );
    CYG_TEST_CHECK( E_PAR == ercd, "cre_mbx bad ercd !E_PAR" );
    t_cmbx.mbxatr = 0xfff;
    ercd = cre_mbx( 3, &t_cmbx );
    CYG_TEST_CHECK( E_RSATR == ercd, "cre_mbx bad ercd !E_RSATR" );
    t_cmbx.mbxatr = 0;
#endif // we can test bad param error returns
    ercd = cre_mbx( 3, &t_cmbx );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mbx bad ercd" );
    // and check we can use it
    ercd = snd_msg( 3, t_msg );
    CYG_TEST_CHECK( E_OK == ercd, "snd_msg bad ercd" );
    ercd = rcv_msg( &msg, 3 );       
    CYG_TEST_CHECK( E_OK == ercd, "rcv_msg bad ercd" );
    ercd = trcv_msg( &msg, 3, 2 );   
    CYG_TEST_CHECK( E_TMOUT == ercd, "trcv_msg bad ercd !E_TMOUT" );
    ercd = prcv_msg( &msg, 3 );                            
    CYG_TEST_CHECK( E_TMOUT == ercd, "prcv_msg bad ercd !E_TMOUT" );
    ercd = ref_mbx( &t_rmbx, 3 );
    CYG_TEST_CHECK( E_OK == ercd, "ref_mbx bad ercd" );

    // now wait while task 2 deletes the wait objects
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = rcv_msg( &msg, 1 );
    CYG_TEST_CHECK( E_DLT == ercd, "wai_mbx bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = trcv_msg( &msg, 2, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "twai_mbx bad ercd !E_DLT" );

    // check they are deleted
    ercd = snd_msg( 1, t_msg );
    CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
    ercd = snd_msg( 2, t_msg );       
    CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
    // re-create and do it again
    ercd = cre_mbx( 1, &t_cmbx );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mbx bad ercd" );
    ercd = cre_mbx( 2, &t_cmbx );
    CYG_TEST_CHECK( E_OK == ercd, "cre_mbx bad ercd" );

    // now wait while task 2 deletes the wait objects again
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = rcv_msg( &msg, 1 );
    CYG_TEST_CHECK( E_DLT == ercd, "wai_mbx bad ercd !E_DLT" );
    ercd = wup_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" );
    ercd = trcv_msg( &msg, 2, 20 );
    CYG_TEST_CHECK( E_DLT == ercd, "twai_mbx bad ercd !E_DLT" );

    // check they are deleted
    ercd = snd_msg( 1, t_msg );
    CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );
    ercd = snd_msg( 2, t_msg );       
    CYG_TEST_CHECK( E_NOEXS == ercd, "snd_msg bad ercd !E_NOEXS" );

    CYG_TEST_PASS("create/delete mboxes");
#endif // CYGPKG_UITRON_MBOXES_CREATE_DELETE

    ercd = ter_tsk( 2 );
    CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" );
    ercd = dly_tsk( 5 );
    CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" );

    // all done
    if ( 0 == tests ) {
        CYG_TEST_NA( "No objects have create/delete enabled" );
    }
    else {
        CYG_TEST_EXIT( "All done" );
    }
    ext_tsk();
}
Esempio n. 25
0
/*-----------------------------------------------*/
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);		/** 無限ループ */

}
Esempio n. 26
0
/*************************************************************************
	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);	/**	無限タスクウェイト	*/
}
Esempio n. 27
0
/*************************************************************************
	module		:[サービスファンクション]
	function	:[
		1.
	]
	return		:[]
	common		:[]
	condition	:[]
	comment		:[]
	machine		:[V53]
	language	:[MS-C(Ver.6.0)]
	keyword		:[MDM]
	date		:[1996/12/10]
	author		:[]
*************************************************************************/
void  MDM_FactoryFunctionTask(void)
{
	UWORD		status;
	MESSAGE_t	*MDM_RxMsg;
	MESSAGE_t	MDM_TxMsg;

	status = 0;
	SYS_FactoryFuncStatus = 0;
	tskno_MDM_FskTest = 0xFFFF;
	tskno_MDM_PixTest = 0xFFFF;
	SYS_PixStopFlag = 0;
	SYS_V34ProcedureExecutingFlag = NO;  /* 0; */
	MDM_FactoryFskMenu = 0;
/* #if defined(POPLAR_F) */
#if (PRO_VOICE_ANSWER == ENABLE)
 #if (PRO_MODEM == R288F)	/* ORANGE以外のモデム Modified by J.Kishida 2002/09/09 */
	tskno_MDM_VoiceTest = 0xFFFF;
 #endif
#endif

	do {
		rcv_msg(mbxno.CPY_Task, &MDM_RxMsg);	/**	メッセージ受信	*/

	} while (MDM_RxMsg->Message != FIP_TEST_CMD);

/* POPLAR_H では直接メモリスイッチを参照できるので、以下は不必要。*/

	while (1) {
		do {

			rcv_msg(mbxno.CPY_Task, &MDM_RxMsg);	/**	メッセージ受信	*/

		} while (MDM_RxMsg->Message != FIP_TEST_CMD);

		switch (SYS_FactoryModem.Item) { /* Modified by H. Kubo for POPLAR_H 1997/06/17 */
		case SYS_OPT_MDM_RELAY_TEST:
			if ((status == 0) || (status == 1)) {
				status = 1;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 1;
			}
			MDM_RealyTest();
			break;
		case SYS_OPT_MDM_TONAL_TEST:
#if defined(HINOKI2) && defined(JPNNTT)	/* トーナルテストリセット対策 by J.Kishida 2002/12/03 */
			if (status == 2) {
				status = 2;
			}
			else if (status == 0) {
				/*
				// トーナルテストに入る時(status == 0のとき)は
				// ハードリセットをかけます
				*/
				MDM_ModemHardwareReset();
				wai_tsk(400/10);	/* Add By O.Kimoto 2002/12/04 */
				status = 2;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 2;
			}
#else
			if ((status == 0) || (status == 2)) {
				status = 2;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 2;
			}
#endif
			MDM_TonalTest();
			break;
		case SYS_OPT_MDM_DTMF_TEST:
			if ((status == 0) || (status == 3)) {
				status = 3;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 3;
			}
			MDM_DTMF_Test();
			break;
#if defined (KEISATSU)		/* 警察FAX Added by SMuratec K.W.Q 2005/10/25 */
/* 警察FAX Added start DVT_ID15 by SMuratec K.W.Q 2005/11/05 */
		case SYS_OPT_MDM_KEIDEN_RELAY_TEST:
			if ((status == 0) || (status == 4)) {
				status = 4;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 1;
			}
			MDM_RealyTest();
			break;
		case SYS_OPT_MDM_KEIDEN_TONAL_TEST:
			if ((status == 0) || (status == 5)) {
				status = 5;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 5;
			}
			MDM_TonalTest();
			break;
		case SYS_OPT_MDM_KEIDEN_DTMF_TEST:
			if ((status == 0) || (status == 6)) {
				status = 6;
			}
			else {
				/* ソフトリセット */
				MDM_SoftResetModem();
				status = 6;
			}
			MDM_DTMF_Test();
			break;
/* 警察FAX Added end DVT_ID15 by SMuratec K.W.Q 2005/11/05 */
#endif		/* End of (defined (KEISATSU)) */
		case OPT_MDM_FACTORY_TEST_END:
			break;
		case OPT_MDM_FACTORY_TEST_START:
			break;
		}
		MDM_TxMsg.Message = MSG_FIP_RS232C_TEST_END;
		snd_msg(mbxno.OPR_Task,&MDM_TxMsg);
	}
}
Esempio n. 28
0
papi_status_t
papiPrinterQuery(papi_service_t handle, char *name,
		char **requested_attrs,
		papi_attribute_t **job_attrs,
		papi_printer_t *printer)
{
	papi_status_t pst;
	service_t *svc = handle;
	printer_t *p = NULL;
	char *dest;
	short status = MOK;
	char *pname = NULL,
		*form = NULL,
		*request_id = NULL,
		*character_set = NULL,
		*reject_reason = NULL,
		*disable_reason = NULL;
	short printer_status = 0;
	long enable_date = 0, reject_date = 0;

	if ((handle == NULL) || (name == NULL) || (printer == NULL))
		return (PAPI_BAD_ARGUMENT);

	if ((*printer = p = calloc(1, sizeof (*p))) == NULL)
		return (PAPI_TEMPORARY_ERROR);

	dest = printer_name_from_uri_id(name, -1);

	if (strcmp(dest, "_default") == 0) {
		static char *_default;

		if (_default == NULL) {
			int fd;
			static char buf[128];

			if ((fd = open("/etc/lp/default", O_RDONLY)) >= 0) {
				read(fd, buf, sizeof (buf));
				close(fd);
				_default = strtok(buf, " \t\n");
			}
		}
		dest = _default;
	}

	if (isprinter(dest) != 0) {
		pst = lpsched_printer_configuration_to_attributes(svc, p, dest);
		if (pst != PAPI_OK)
			return (pst);

		/* get the spooler status data now */
		if (snd_msg(svc, S_INQUIRE_PRINTER_STATUS, dest) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		if (rcv_msg(svc, R_INQUIRE_PRINTER_STATUS, &status, &pname,
				&form, &character_set, &disable_reason,
				&reject_reason, &printer_status, &request_id,
				&enable_date, &reject_date) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		printer_status_to_attributes(p, pname, form, character_set,
				disable_reason, reject_reason, printer_status,
				request_id, enable_date, reject_date);
	} else if (isclass(dest) != 0) {
		pst = lpsched_class_configuration_to_attributes(svc, p, dest);
		if (pst != PAPI_OK)
			return (pst);

		/* get the spooler status data now */
		if (snd_msg(svc, S_INQUIRE_CLASS, dest) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		if (rcv_msg(svc, R_INQUIRE_CLASS, &status, &pname,
				&printer_status, &reject_reason,
				&reject_date) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		class_status_to_attributes(p, pname, printer_status,
				reject_reason, reject_date);
	} else if (strcmp(dest, "PrintService") == 0) {
		/* fill the printer object with service information */
		lpsched_service_information(&p->attributes);
	} else
		return (PAPI_NOT_FOUND);

	free(dest);

	return (PAPI_OK);
}
Esempio n. 29
0
/*************************************************************************
	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);	/**	無限タスクウェイト	*/
}
Esempio n. 30
0
papi_status_t
papiPrintersList(papi_service_t handle, char **requested_attrs,
		papi_filter_t *filter, papi_printer_t **printers)
{
	service_t *svc = handle;
	printer_t *p = NULL;
	short status = MOK;
	char *printer = NULL,
		*form = NULL,
		*request_id = NULL,
		*character_set = NULL,
		*reject_reason = NULL,
		*disable_reason = NULL;
	short printer_status = 0;
	long enable_date = 0, reject_date = 0;

	if ((handle == NULL) || (printers == NULL))
		return (PAPI_BAD_ARGUMENT);

	if ((filter == NULL) ||
	    ((filter->filter.bitmask.mask & PAPI_PRINTER_LOCAL) ==
	    (filter->filter.bitmask.value & PAPI_PRINTER_LOCAL))) {
		/* ask the spooler for the printer(s) and state */
		if (snd_msg(svc, S_INQUIRE_PRINTER_STATUS, NAME_ALL) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		do {
			if (rcv_msg(svc, R_INQUIRE_PRINTER_STATUS, &status,
					&printer, &form, &character_set,
					&disable_reason, &reject_reason,
					&printer_status, &request_id,
					&enable_date, &reject_date) < 0)
				return (PAPI_SERVICE_UNAVAILABLE);

			if ((p = calloc(1, sizeof (*p))) == NULL)
				return (PAPI_TEMPORARY_ERROR);

			lpsched_printer_configuration_to_attributes(svc, p,
					printer);

			printer_status_to_attributes(p, printer, form,
					character_set, disable_reason,
					reject_reason, printer_status,
					request_id, enable_date, reject_date);

			list_append(printers, p);

		} while (status == MOKMORE);
	}

	if ((filter == NULL) ||
	    ((filter->filter.bitmask.mask & PAPI_PRINTER_CLASS) ==
	    (filter->filter.bitmask.value & PAPI_PRINTER_CLASS))) {
		/* ask the spooler for the class(es) and state */
		if (snd_msg(svc, S_INQUIRE_CLASS, NAME_ALL) < 0)
			return (PAPI_SERVICE_UNAVAILABLE);

		do {
			if (rcv_msg(svc, R_INQUIRE_CLASS, &status, &printer,
					&printer_status, &reject_reason,
					&reject_date) < 0)
				return (PAPI_SERVICE_UNAVAILABLE);

			if ((p = calloc(1, sizeof (*p))) == NULL)
				return (PAPI_TEMPORARY_ERROR);

			lpsched_class_configuration_to_attributes(svc, p,
					printer);

			class_status_to_attributes(p, printer, printer_status,
					reject_reason, reject_date);

			list_append(printers, p);

		} while (status == MOKMORE);
	}

	return (PAPI_OK);
}