void Pololu::Serial::Interface::receive(std::vector<unsigned char>& data) { if (handle) { size_t i = 0; struct timeval time; fd_set set; int error; while (i < data.size()) { time.tv_sec = 0; time.tv_usec = timeout*1e6; FD_ZERO(&set); FD_SET(handle, &set); error = select(handle+1, &set, NULL, NULL, &time); if (error == 0) throw ReceiveTimeout(address); else if (error < 0) throw ReceiveError(address); ssize_t result; result = ::read(handle, &data[i], data.size()-i); if ((result < 0) && (result != EWOULDBLOCK)) throw ReceiveError(address); else if (result > 0) i += result; } } else throw OperationError(); }
/************************************************************************* module :[RNR送信−RR受信] function :[ 1. ECM受信タスクがデコード終了するまで,RNR送信−RR受信 . を繰り返す 2. RR/PPS−Q以外を受信した場合,または命令受信タイムアウト . の場合はR.5.1エラーとする 3. 上位で既に通信中フラグがクリアされていた場合は,デコード終了 . まで30msごとにECMタスクの状態をチェックする 4. プリンタ受信では,カット待ちとプリンタエラーのチェックをする 5. ECM受信でないときは何もしない ] return :[] common :[ FaxComPerformingFlag RxECM_Mode RxFCF RxOptionFCF ReceiveResponseFlag RxEOR_ReceiveFlag RxPageFinishStatus MDM_PhaseC_Status ] condition :[ EOR−Q命令を受信していた場合は,デコードは終わっているので これをコールしないこと ] comment :[ Nov.17.1994 プリアンブル短縮フラグの一時キャンセル ] machine :[V53,H8/300] language :[MS-C(Ver.6.0),H8/300(日立マイコン)] keyword :[FCM] date :[1993/12/22] author :[竹内茂樹] *************************************************************************/ void TransmitRNR( void ) { /* UBYTE wait_phase; * 2=デコード待ち → 1=カット待ち → 0=終了 */ /* 上記ローカル変数 wait_phase を大域変数 EcmWaitPhase に変更 Oct.13.1994 */ UBYTE tmp_rx_fcf; #if (PRO_JBIG == ENABLE) /* by T.Soneoka 1997/12/10 */ UBYTE i; #endif if (RxECM_Mode == ECM_ON) { /** ECM受信 */ /*----------------------------------*/ /* 待ち状態(EcmWaitPhase)を初期化 */ /*----------------------------------*/ if (MDM_PhaseC_Status == RX_CONTINUE) { /** デコード中なら */ EcmWaitPhase = 2; /** デコード待ち */ } else { EcmWaitPhase = 1; /** カット待ち */ } #if (PRO_JBIG == ENABLE) /* by T.Soneoka 1997/12/10 */ /* JBIG NEWLEN検出遅れ対策 by T.Soneoka 1998/02/19 */ if (SYS_DocBlock.Src.Code == SYS_JBIG_CODE) { /** 符号がJBIGの場合 */ tmp_rx_fcf = RxFCF & (UBYTE)~PRI_Q_F; if ((tmp_rx_fcf == MPS_F) || (tmp_rx_fcf == EOM_F) || (tmp_rx_fcf == EOP_F) || (tmp_rx_fcf == EOMX_F)) { /** MPS / EOM /EOMX / EOP受信 */ /* ** ちょうどデコードタスクがフレームの最後にエンドマーカがあるフレームをデコード中に ** このRNR−RRのパスに入ってきた場合、MDM_ForcedDecodeStartフラグを立ててしまう ** 1ページの最終フレームの場合だけ、MDM_ForcedDecodeStartフラグを立てないと、デコードエラーを起こす ** (デコードタスクでコーデックへのDMAアドレスとカウンタの設定がおかしくなる) ** if (ECM_FrameCounter == DecodeEcmFrameNum) 文追加 ** 1999/03/26 by T.Soneoka */ if (DecodeEcmFrameNum >= MDM_EcmFrameNumber) { if (IsDetEndMaker) { MDM_ForcedDecodeStart = 1; } if (IsDetLastFrameEndMaker) { /* ** JBIG受信ループ不具合 ** 1ページのデータがちょうど64kbyteで、フレーム再送が発生した場合に、 ** 受信フレームコントロールタスクが先に死んでしまい、そうとは知らずにメッセージを ** 送信してしまうために、ループしてしまう。 ** 対策はメッセージ送信前に受け側がいるかどうかをチェックしてからに変更 ** by Soneoka 1999/03/16 */ #if (0) ** MDM_PhaseC_Status = RX_CONTINUE; ** ModemMessage.Message = MSG_FORCED_DECODE_START; ** snd_msg(mbxno.MDM_RxEcmControlTask, &ModemMessage); #else if (chk_rcv(mbxno.MDM_RxEcmControlTask)) { MDM_PhaseC_Status = RX_CONTINUE; ModemMessage.Message = MSG_FORCED_DECODE_START; snd_msg(mbxno.MDM_RxEcmControlTask, &ModemMessage); } #endif } } } } #endif /** プリアンブル短縮を一旦キャンセルする */ /* Dec.15.1994 */ ShorteningPreambleFlag = 0; /* Dec.15.1994 */ /*------------------------------*/ /* デコード待ち/カット待ち */ /*------------------------------*/ while (EcmWaitPhase) { /** デコード中||カット中 */ /*--------------*/ /* カット待ち */ /*--------------*/ if (EcmWaitPhase == 1) { /** カット待ち (デコードは終わっている) */ #if (PRO_PAPER_TYPE == ROLL_PAPER) /* 1998/06/02 by T.Soneoka */ if (RxPmType == RX_PRINTER) { /** プリンタ受信の場合 */ if (WaitRxPaperCut( 0 ) == 1) { /** 記録紙カット終了 */ /** ループ(カット待ち)終了 */ break; } /* 6 line Nov.18.1994 */ /** プリンタエラーの種類を確認 */ CheckRxPrinterError(); if (RxPageFinishStatus == RX_PRT_ERR) { /** プリンタエラー */ /** ループ終了 */ break; } } else { /** メモリ受信はカット待ちしないのでループ終了 */ break; } #else break; #endif /* その他(ループ終了以外)はRNR−RR処理へ… */ } /*------------------*/ /* デコード待ち */ /*------------------*/ else if (EcmWaitPhase == 2) { /** デコード待ち */ if (MDM_PhaseC_Status != RX_CONTINUE) { /** デコード終了 */ /* 受信ライン0000/0000となる件修正 Nov.25.1994 */ /** 表示切替指示(ポストメッセージ受信) */ SYS_FaxCommStage = FCM_ERROR_LINE; /* "エラーライン/受信ライン"表示用 */ SendMsgFaxComToMain( MSG_FAXCOM_DISPLAY ); /** デコード待ちは終了 (RNR−RR処理せずにループの先頭へ) */ EcmWaitPhase = 1; continue; /* ロール紙のプリンタ受信の場合はカット待ちへ… */ } #if (PRO_PAPER_TYPE == ROLL_PAPER) /* Next 10 line 追加 1998/11/25 by T.Soneoka */ else { if (RxPmType == RX_PRINTER) { /** プリンタ受信の場合 */ /** プリンタエラーの種類を確認 */ CheckRxPrinterError(); if (RxPageFinishStatus == RX_PRT_ERR) { /** プリンタエラー */ /** ループ終了 */ break; } } } #endif if (FaxComPerformingFlag == 0) { /** 通信終了 */ /** 30msウェイト */ FaxTimer( 30 ); } } /*----------------------*/ /* RNR−RR処理 */ /*----------------------*/ if (FaxComPerformingFlag == 1) { /** 通信中 */ /*------------------*/ /** RNR応答送信 */ /*------------------*/ FaxHDLC_Transmit( RNR_F, 0 ); /*------------------*/ /** RR命令受信 */ /*------------------*/ #if (PRO_TX_SPEED == V34) /* Ported from clover\src\fcmcomd.c by H.Kubo 1997/08/04 */ if (FCM_ReceiveCommand( TIME_OVER_6SEC, CONTINUE_CCRETRAIN ) == FSK_RECEIVE) { /** 命令受信OK */ ReceiveResponseFlag = 1; AnalyzeRxPostMessageFrame(); /** 受信ポストメッセージ解析 */ if ((RxFCF != RR_F) && (RxOptionFCF != PPS_F)) { /** (RR,PPS−Q)以外 */ /* フェーズEのコールを追加 1996/02/07 */ FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ ReceiveError( 0x51 ); /** R.5.1 */ break; /** 終了 */ } } #else /* (PRO_TX_SPEED == V34) */ if (MDM_ReceiveCommand((UWORD)TIME_OVER_6SEC) == FSK_RECEIVE) { /** 命令受信OK */ ReceiveResponseFlag = 1; AnalyzeRxPostMessageFrame(); /** 受信ポストメッセージ解析 */ if ((RxFCF != RR_F) && (RxOptionFCF != PPS_F)) { /** (RR,PPS−Q)以外 */ ReceiveError( 0x51 ); /** R.5.1 */ break; /** 終了 */ } } #endif /* (PRO_TX_SPEED == V34) */ else { /** T2(6s)タイムアウト */ ReceiveResponseFlag = 0; /** 送信した応答が正常に受信されなかったとして,プリアンブル短縮フラグをクリア */ ShorteningPreambleFlag = 0; #if defined (DEU) || defined(EUR) /* 欧州仕様追加 by M.H 1999/09/16 */ FaxPhaseE( 1 ); /** 通信終了(DCNあり) */ #else FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ #endif ReceiveError( 0x51 ); /** R.5.1 */ break; /** 終了 */ } } } /** (最新の)画データ受信結果を再セット */ RxPageFinishStatus = MDM_PhaseC_Status; #if (PRO_PRINTER_RX == ENABLE) if (RxPmType == RX_PRINTER) { /** プリンタ受信 */ /** プリンタエラーの種類を確認 */ CheckRxPrinterError(); #if (PRO_PRINT_TYPE == THERMAL) /* Endmark3 By O.Kimoto 1999/02/19 */ /* Endmark3 by O.Kimoto 1999/02/19 */ if ((SYB_MaintenanceSwitch[MNT_SW_H8] & ENDMARK_DETECT_ERROR) == ENDMARK_DETECT_ERROR) { if (EndMarkDetect == TRUE) { RxPageFinishStatus = RX_PRT_ERR; RxPrinterErrorFlag = 1; } } #endif } #endif #if (PRO_PRINT_TYPE == THERMAL_TRANS) /* 1999/3/9 K.Kawata*/ if (RxPmType == RX_PRINTER) { /** プリンタ受信 */ CheckRxPrinterError(); /* プリンタエラーの種類を確認 */ } #endif /** プリアンブル短縮を再度セットする */ /* Dec.15.1994 */ ShorteningPreambleFlag = PostSpeedHandshakeFlag; /* Dec.15.1994 */ } EcmWaitPhase = 0; /** デコード待ち状態をクリア */ }
/************************************************************************* module :[ポストメッセージDCS受信待ち] function :[ 1. 命令受信し,解析する 2. ポストメッセージ命令の場合は,もう一度命令受信(1.)に戻る 3. DCSを受信した場合は,EOM受信フラグをクリアしてリターンする . (フェーズBのコンパチチェックへ戻る) 4. EOPを受信している場合以外でDCNを受信した場合と, . その他のフレームを受信した場合と,命令受信タイムアウトの場合は . R.1.1とする ] return :[] common :[ FaxComPerformingFlag ReceiveResponseFlag RxEOM_ReceiveFlag RxEOP_ReceiveFlag RxFCF RxFrameMessage1 PRI_Q_RxFlag :PRI−Qメッセージ受信フラグ ] condition :[ 受信フェーズDの最後で,モード変更要求(RxModeChangeRequestedFlag) ありの場合にコールする ] comment :[ FaxRxRetraining():g3rxd.c のこと 修正履歴 94/12/05 (桐のみ)FX手順RTN返送時、DCSと同様の待ち方でNSSを待たねばならない。 ] machine :[V53,H8/300] language :[MS-C(Ver.6.0),H8/300(日立マイコン)] keyword :[FCM] date :[1993/12/25] author :[竹内茂樹] *************************************************************************/ void ReceiveDCS( void ) { #if (PRO_SPD_MODE == ENABLE) /* 96/06/17 */ UBYTE mode_change_speed_flag; UBYTE receive_command; #endif while (FaxComPerformingFlag == 1) { /** 通信中 */ #if (PRO_SPD_MODE == ENABLE) /* 96/06/17 */ mode_change_speed_flag = 0; receive_command = FSK_RECEIVE; EOM_received = 0; if ((RxEOM_ReceiveFlag == 1) && (MakerCodeRxFlag == YES)) { /* 相手機が村田機 */ if (SpeedModeChangeRomCheck() == TRUE) { /* 96/05/24 */ FaxRxSpeedHandshake(); /** 短縮ハンドシェーク受信 */ if (RxSpeedHandshakeFlag == 1) { RxEOM_ReceiveFlag = 0; /* SDCSを受け取ったら抜ける */ break; } if (EOM_received == 0) { break; } } } switch (EOM_received) { /* 96/05/29 By T.Y */ case 0: /* EOM_TONE */ receive_command = MDM_ReceiveCommand((UWORD)TIME_OVER_6SEC); /** 命令受信OK */ break; case 1: /* FaxRxSpeedHandshake()の中で、FSKを受信した */ default: break; } if (receive_command == FSK_RECEIVE) { #else #if (PRO_TX_SPEED == V34) /* Ported from clover\src\fcmrxd.c by H.Kubo 1997/08/04 */ if (FCM_ReceiveCommand( TIME_OVER_6SEC , CONTINUE_CCRETRAIN) == FSK_RECEIVE) { /** 命令受信OK */ #else /* (PRO_TX_SPEED == V34) */ if (MDM_ReceiveCommand((UWORD)TIME_OVER_6SEC) == FSK_RECEIVE) { /** 命令受信OK */ #endif /* (PRO_TX_SPEED == V34) */ #endif /* (PRO_SPD_MODE == ENABLE) */ /*------------------------------*/ /** 受信ポストメッセージを解析 */ /*------------------------------*/ ReceiveResponseFlag = 1; AnalyzeRxPostMessageFrame(); if (RxFrameMessage1 == POST_MESSAGE_COMMANDS) { /** ポストメッセージを受信 */ FaxHDLC_Transmit( TxFCF, TxOptionFCF ); /** 前回と同じ応答送出 */ } else if (RxFCF == DCN_F) { /** DCNを受信 */ if (RxEOP_ReceiveFlag == 1) { /** EOP受信済み(交信終了許可あり) */ FaxComPerformingFlag = 0; /** 通信中フラグをクリア */ } else { ReceiveError( 0x11 ); /** R.1.1 */ } } #if(PRO_MAKER == FX) else if ((RxFCF == DCS_F) || (RxFCF == NSS_F)) { /** DCS/NSSを受信 */ #else else if (RxFCF == DCS_F) { /** DCSを受信 */ #endif RxEOM_ReceiveFlag = 0; /** EOM受信フラグをクリア */ ReceiveResponseFlag = 0; /** ポストメッセージ受信フラグをクリア */ break; /** リターン */ /* 受信フェーズBのコンパチチェックへ行くはず */ } else { /** その他のフレームを受信 */ FaxPhaseE( 1 ); /** 通信終了(DCNあり)add 96/06/25 S.Takeuchi */ ReceiveError( 0x11 ); /** R.1.1 */ break; /** リターン */ } } else { /** T2タイムアウト */ ReceiveResponseFlag = 0; if (RxEOM_ReceiveFlag == 1) { /** EOMを受信して命令受信なし */ break; /** リターン (DIS送出へ…) */ } else { /** EOM受信なし */ #if defined(POPLAR_F) /* 1997/02/06 1999/12/10 Y.M クローバーから移植 * DCNがとれなかってもEOPを受信していたらOK */ if (RxEOP_ReceiveFlag == 1) { /** EOP受信済み(交信終了許可あり) */ FaxComPerformingFlag = 0; /** 通信中フラグをクリア */ #if defined (DEU) || defined(EUR) /* 欧州仕様追加 by M.H 1999/09/16 */ FaxPhaseE( 1 ); /** 通信終了(DCNあり) */ #else FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ #endif } else { #if defined (DEU) || defined(EUR) /* 欧州仕様追加 by M.H 1999/09/16 */ FaxPhaseE( 1 ); /** 通信終了(DCNあり) */ #else FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ #endif ReceiveError( 0x11 ); /** R.1.1 */ } #else #if defined (DEU) || defined(EUR) /* 欧州仕様追加 by M.H 1999/09/16 */ FaxPhaseE( 1 ); /** 通信終了(DCNあり) */ #else FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ #endif ReceiveError( 0x11 ); /** R.1.1 */ #endif } } } } /************************************************************************* module :[受信側会話予約要求の処理] function :[ 1. 受信画質によって,PIP/PINを送出し,命令受信する 2. PRI−Q受信後,オペレータを呼び出し,通信終了する 3. T3タイムオーバーの時は,DIS送出に戻る . (但し,上位から「続行しない」の指定の場合はR.4.2で終了する) ] return :[] common :[ TxFCF TxOptionFCF RxECM_Mode FaxComPerformingFlag RxEOR_ReceiveFlag ReceiveResponseFlag RxFrameMessage1 PRI_Q_RxFlag RxEOM_ReceiveFlag RxModeChangeRequestedFlag RxWholePageCompletedFlag SYS_GeneralTimer SYS_VoiceCallAccepted ] condition :[ 送信機からの受信被会話予約が成立していない時で, 自機の会話予約要求がある場合にコールする ] comment :[] machine :[V53,H8/300] language :[MS-C(Ver.6.0),H8/300(日立マイコン)] keyword :[FCM] date :[1994/04/06] author :[竹内茂樹] *************************************************************************/ void RxRequestedVoiceMode(UBYTE f_rx_continue) /* タイムアウトの時の処理:1=RxBに戻り続行/0=R.4.2で終了 */ { UWORD t3_timer; UBYTE voice_result; while ((FaxComPerformingFlag == 1) && (SYS_VoiceCallAccepted == 0)) { /** 回線断or会話予約成立するまで */ /*--------------------------------------*/ /** 画質チェックし,応答送信(PIP/PIN) */ /*--------------------------------------*/ TransmitPIP(); #if defined(DEU) || defined(EUR) /* by M.H '97/03/23 DEU仕様に追加 */ /* 欧州仕様追加 by M.H 1999/09/16 */ if (TxFCF == PIN_F){ FaxComResult = RECEIVEERROR | 0x42; } #endif /*------------------------------*/ /** 命令受信(T3タイマ以内) */ /*------------------------------*/ ReceiveResponseFlag = 0; t3_timer = SYS_GeneralTimer; while ((UWORD)(SYS_GeneralTimer - t3_timer) < T3_TIMER) { #if (PRO_TX_SPEED == V34) /* Ported from clover\src\fcmrxd.c by H.Kubo 1997/08/04 */ if (FCM_ReceiveCommand( TIME_OVER_6SEC, NON_CCRETRAIN ) == FSK_RECEIVE) { ReceiveResponseFlag = 1; break; } #else /* (PRO_TX_SPEED == V34) */ if (MDM_ReceiveCommand((UWORD)TIME_OVER_6SEC) == FSK_RECEIVE) { ReceiveResponseFlag = 1; break; } #endif /* (PRO_TX_SPEED == V34) */ } /*----------------------*/ /* PRI−Q受信待ち */ /*----------------------*/ if (ReceiveResponseFlag == 1) { /** 命令受信OK */ AnalyzeRxPostMessageFrame(); if (RxFrameMessage1 == POST_MESSAGE_COMMANDS) { /** ポストメッセージ受信 */ if (PRI_Q_RxFlag == 1) { /** PRI−Q */ break; /** オペレータ呼び出しへ… */ } /*--------------------------------------------------*/ /** PRI−Q以外を受信した時は,ループの先頭へ… ** *** (もう一度,応答送信/命令受信する) */ /*--------------------------------------------------*/ } else { if (RxFCF == DCN_F) { /** DCN受信 */ FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ } else { ReceiveError( 0x42 ); /** R.4.2 */ FaxPhaseE( 1 ); /** DCN送出し,通信終了 */ } return; /** リターン */ } } else { /** T3タイマ以内に,命令受信なし */ break; } } if ((ReceiveResponseFlag == 1) && (PRI_Q_RxFlag == 1)) { /** PRI−Q受信 */ /*----------------------*/ /** オペレータ呼び出し */ /*----------------------*/ voice_result = MDM_RxVoiceReq(); switch (voice_result) { /** 会話予約結果 */ case TEL1_OH_DETECT: /** TEL1オフフック検出 */ case TEL2_OH_DETECT: /** TEL2オフフック検出 */ case HOOK_KEY_OH_DETECT: /** オフフックキー検出 */ SYS_VoiceCallAccepted = voice_result; /** 会話予約成立(OH識別) */ /* Sep.16.1994 */ if (voice_result == TEL1_OH_DETECT) { FaxTelOffHookTEL1Flag = 1; } else if (voice_result == TEL2_OH_DETECT) { FaxTelOffHookTEL2Flag = 1; } /*----------------------------------------------*/ /** PIP/PIN送出し,通信終了(DCNなし) */ /*----------------------------------------------*/ FaxHDLC_Transmit( TxFCF, TxOptionFCF ); FaxPhaseE( 4 ); /*------------------------------------------*/ /** 300msウェイト後,H/LリレーOFF */ /*------------------------------------------*/ FaxTimer( 300 ); FaxTelAutoSWAfterTransaction(); break; default: break; } } /*------------------------------*/ /* T3タイムオーバー時の処理 */ /*------------------------------*/ if (SYS_VoiceCallAccepted == 0) { /** T3タイムオーバー */ if (f_rx_continue == 1) { /** 続行する */ #if defined(DEU) || defined(EUR) /* 95/08/09 Y.Suzuki */ /* 欧州仕様追加 by M.H 1999/09/16 */ RxWholePageCompletedFlag = 1; /* FaxRxPhaseC()のループ脱出用 */ RxModeChangeRequestedFlag = 1; /* FaxReceive()の内ループ脱出用 */ RxEOM_ReceiveFlag = 1; /* FaxReceive()の外ループ脱出用 */ /** フェーズBのDIS送出(FaxRxPhaseB1())へ… */ #else /*----------------------------------------------------------------------*/ /* 以下の処理を追加 (さつきQATでのトラブル) Sep.12.1994 */ /* 受信側からの会話予約で,相手機で人が出てPRI−EOPを受信し, */ /* 自機でタイムオーバーした場合はフェーズBへ戻らずに,通信終了する */ /*----------------------------------------------------------------------*/ if (RxEOP_ReceiveFlag == 1) { /** EOPを受信していた */ FaxPhaseE( 4 ); /** 通信終了 */ } else { /** MPS,EOMを受信していた */ RxWholePageCompletedFlag = 1; /* FaxRxPhaseC()のループ脱出用 */ RxModeChangeRequestedFlag = 1; /* FaxReceive()の内ループ脱出用 */ RxEOM_ReceiveFlag = 1; /* FaxReceive()の外ループ脱出用 */ /** フェーズBのDIS送出(FaxRxPhaseB1())へ… */ } #endif } else { /** 終了する */ ReceiveError( 0x42 ); /** R.4.2 */ FaxPhaseE( 1 ); /** DCN送出し,通信終了 */ } } }
/************************************************************************* module :[受信フェーズD] function :[ 1. 送信側からの受信命令を解析する 2. PRI−Q受信による被会話予約処理を行う 3. RNR送信−RR受信を行う 4. 受信ページをクローズする(メモリ受信では,印字開始指示する) 5. 受信側の会話予約処理を行う . (この場合ポストメッセージのハンドシェーク(6)には移らない) 6. 応答送信する ※ プリンタ受信→代行受信不可の場合は会話予約をかける Jun.22.1994 ] return :[] common :[ FaxComPerformingFlag RxPageFinishStatus RxFCF RxOptionFCF RxECM_Mode PRI_Q_RxFlag RxEOR_ReceiveFlag RxEOM_ReceiveFlag RxEOP_ReceiveFlag RxModeChangeRequestedFlag RxWholePageCompletedFlag SYS_DocBlock MDM_PhaseC_Status SYS_VoiceSwitch SYS_VoiceCallAccepted ] condition :[] comment :[ 次ページをメモリ受信続行不可の場合は 会話予約をかける (Aug.22.1994) FX 独自ポストメッセージ EOMX の処理追加(受信のみ)(Sep.17.1994) Y.Suzuki 1.EOMX の FCF フォーマットは、 EOR(0x73) と同じ テーブルは、EOMX_F を使用 2.EOMX 受信時の動作は、EOM 受信時と同じ ] machine :[V53,H8/300] language :[MS-C(Ver.6.0),H8/300(日立マイコン)] keyword :[FCM] date :[1993/12/20] author :[竹内茂樹] *************************************************************************/ void FaxRxPhaseD( void ) { UBYTE tmp_rx_fcf; UBYTE voice_result; /* 会話予約結果 */ UBYTE voice_chk_flag; UBYTE tmp_fcm_stage; /* 被会話予約での通信状態遷移の待避用 */ UBYTE f_mem_rx_continue; /* メモリ受信続行可能フラグ */ #if (PRO_RDS_FLASH_ROM_WRITE == ENABLE) UWORD debug_sum; #endif FaxComPhaseStatus = FAX_RX_PH_D; voice_chk_flag = 0; f_mem_rx_continue = 1; /** 表示切替指示(ポストメッセージ受信) */ SYS_FaxCommStage = FCM_ERROR_LINE; /* "エラーライン/受信ライン"表示用 Jul.14.1994 */ SendMsgFaxComToMain( MSG_FAXCOM_DISPLAY ); #if 0 /* フェーズCのRxECM_PixData()内に移動 Oct.31.1994 */ /** 受信ポストメッセージの解析 */ AnalyzeRxPostMessageFrame(); #endif /** PRI-Qビットをマスクしてテンポラリにセット */ tmp_rx_fcf = RxFCF & (UBYTE)~PRI_Q_F; /*--------------------------------------*/ /* PPS−NULL/EOR−NULL */ /*--------------------------------------*/ if (((RxOptionFCF == PPS_F) || (RxOptionFCF == EOR_F)) && (RxFCF == NULL_FF)) { /** PPS-NULL / EOR-NULL受信 */ if (RxEOR_ReceiveFlag == 0) { /** PPS-NULL受信 */ TransmitRNR(); /** RNR送信−RR受信 */ /*------------------------------------------------------*/ /* EOR-NULLを受信した時は,既にPPRを送出しているので */ /* デコードは止まっているはず */ /*------------------------------------------------------*/ } /* RTCがECMのブロック間にまたがった時で,現ブロック内に */ /* 規定数のEOLを検出しRTC検出した場合に,次のブロックの */ /* 残りのEOLを受け捨てるためにフラグを立てる Sep.16.1994 */ if (RxPageFinishStatus == RX_PAGE_END) { /** ECM64K間RTC股裂きの時 */ MDM_RTC_SeparateFlag = 1; /** RTC股裂き処理フラグをセット */ } if (((RxPageFinishStatus == RX_BLOCK_END) || (RxPageFinishStatus == RX_PAGE_END) || (RxEOR_ReceiveFlag == 1)) && (FaxComPerformingFlag == 1)) { /** ブロックエンド||EOR受信 */ /* Sep.22.1994 */ /** 応答送信し,EOR受信フラグをクリア */ RxRespondPostMessage(); RxEOR_ReceiveFlag = 0; #if (PRO_PRINTER_RX == ENABLE) /* もみじ/さつき/ラベンダ */ /*--------------------------------------------------------------*/ /* 部分ページでプリンタエラーの時は RxRespondPostMessage() で */ /* DCNを送出し回線断するので MDM_BreakRxTask() が必要 */ /*--------------------------------------------------------------*/ if ((RxPmType == RX_PRINTER) && (RxPageFinishStatus == RX_BLOCK_END) && (FaxComPerformingFlag == 0)) { /** ECMプリンタ受信でプリンタエラーの時 */ #if (PRO_COM_CODEC_TYPE == SOFTWARE) /* 通信コーデックがソフトなら */ /* #if(PRO_SOFT_CODEC == ENABLE) 96/1/11 Y.S */ SCDC_BreakRxTask(); /** ECMタスク停止 */ #else /* 96/1/11 Y.S */ MDM_BreakRxTask(); /** ECMタスク停止 */ #endif /* 96/1/11 Y.S */ } #endif } else { /** 部分ページ受信時のエラー */ /*------------------*/ /* ページクローズ */ /*------------------*/ #if (PRO_COM_CODEC_TYPE == SOFTWARE) /* 通信コーデックがソフトなら */ /* #if(PRO_SOFT_CODEC == ENABLE) 96/1/11 Y.S */ SCDC_BreakRxTask(); /** ECMタスク停止 */ #else /* 96/1/11 Y.S */ MDM_BreakRxTask(); /** ECMタスク停止 */ #endif /* 96/1/11 Y.S */ /* ↑これは後(RxCの最後)でする Jul.11.1994 ← やっぱり必要 Jul.25.1994 */ if (RxPmType == RX_MEMORY) { /** メモリ受信 */ /** メモリファイルクローズし,受信ページ削除 */ /* #if (PRO_MULTI_LINE == ENABLE) /@ 1997/01/10 Y.Murata */ if (SYS_FaxComIndexConflictStatus == 0) { MEM_ClearPageAndFATArea( &SYS_DocBlock.Index ); /* Jul.04.1994 */ } /* #else */ /* MEM_ClearPageAndFATArea( &SYS_DocBlock.Index ); */ /* #endif */ } /** エラーコードをセット */ CheckRxPixResultSub(); /* ↓を↑に変更 Jul.20.1994 RX_CONTINUEの時は,TransmitRNR()でR.5.1にするので */ /* CheckRxPixResultPhaseD(); */ /* 2000/02/12 Y.Murata * デコードエラーでも手順が継続してしまう */ if (FaxComPerformingFlag == 1) { /** 通信中 */ /*--------------*/ /** 応答送信 */ /*--------------*/ if (RxPageFinishStatus == RX_ERROR) { /** 画質不良 */ RxRespondPostMessage(); } } } } /*------------------------------------------------------*/ /* (PPS/EOR/PRI−)MPS,EOM,EOP */ /*------------------------------------------------------*/ else if ((tmp_rx_fcf == MPS_F) || (tmp_rx_fcf == EOM_F) || (tmp_rx_fcf == EOP_F) || (tmp_rx_fcf == EOMX_F)) { /** MPS / EOM /EOMX / EOP受信 */ if (tmp_rx_fcf == MPS_F) { /** MPS受信 */ /** DIS受信フラグクリア */ /* DIS_ReceivedFlag = 0; ここでクリアするのはまずい 1997/06/12 By T.Yamaguchi */ } else if ((tmp_rx_fcf == EOM_F) || (tmp_rx_fcf == EOMX_F)) { /** EOMまたはEOMX */ /** モード変更要求フラグと ** *** EOM受信フラグをセット */ RxModeChangeRequestedFlag = 1; RxEOM_ReceiveFlag = 1; } else if (tmp_rx_fcf == EOP_F) { /** EOP */ /** モード変更要求フラグ(フェーズBのループ脱出のため)と ** *** EOP受信フラグをセット */ #if (PRO_RDS_FLASH_ROM_WRITE == ENABLE) /* 1998/03/31 By T.Yamaguchi */ if (SYB_FlashROM_WriteStatus == ROM_DATA_RXING) { /* フラッシュROMデータ受信中 */ /* debug_sum = SumCheck((UWORD *)0x1000000,(UDWORD)0x80000); */ /* 1700msかかっている */ /* debug_sum = SumCheck((UWORD *)ROM_DATA_WRITE_ADDRESS,(UDWORD)0x80000); */ /* 1700msかかっている */ /* if (SYB_ROM_DataSumcheck != debug_sum) { */ if (FCM_ROMDataSum != SYB_ROM_DataSumcheck) { MDM_PhaseC_Status = RX_ERROR; FaxComResult = RECEIVEERROR; } } if (SYS_FaxComType == SYS_REMOTE_DIAG) { /* リモート診断時は会話予約しない 1998/04/07 By T.Yamaguchi */ voice_chk_flag = 1; } #endif RxModeChangeRequestedFlag = 1; RxEOP_ReceiveFlag = 1; } #if 0 /*(PRO_CODEC_TYPE == IDP301) */ EcmPageEndFlag = 1; /* RNR Bug. Nov.25.1994 */ #endif if (PRI_Q_RxFlag) { /** PRI−Q受信 */ /*------------------------------*/ /** 表示切替指示(会話予約中) */ /*------------------------------*/ tmp_fcm_stage = SYS_FaxCommStage; SYS_FaxCommStage = FCM_VOICE_CALLED; SendMsgFaxComToMain( MSG_FAXCOM_DISPLAY ); /*--------------------------*/ /** 受信側被会話予約処理 */ /*--------------------------*/ voice_result = MDM_RxVoiceReqFromTxRcvCmd(); switch (voice_result) { /** 会話予約結果 */ case TEL1_OH_DETECT: /** TEL1オフフック検出 */ case TEL2_OH_DETECT: /** TEL2オフフック検出 */ case HOOK_KEY_OH_DETECT: /** オフフックキー検出 */ SYS_VoiceCallAccepted = voice_result; /** 会話予約成立(OH識別) */ /* Sep.16.1994 */ if (voice_result == TEL1_OH_DETECT) { FaxTelOffHookTEL1Flag = 1; } else if (voice_result == TEL2_OH_DETECT) { FaxTelOffHookTEL2Flag = 1; } #if (PRO_PAPER_TYPE == ROLL_PAPER) /* PRI−Q受信時は,ここでカット待ちと */ /* プリンタエラーのチェックをする Oct.31.1994 */ if (RxPmType == RX_PRINTER) { /** プリンタ受信の場合 */ WaitRxPaperCut( 25 ); /** 記録紙カット待ち(2.5秒) */ CheckRxPrinterError(); /** プリンタエラーの種類を確認 */ } #endif /*----------------------------------------------*/ /** PIP/PIN送出し,通信終了(DCNなし) */ /*----------------------------------------------*/ TransmitPIP(); FaxPhaseE( 4 ); /*------------------------------------------*/ /** 300msウェイト後,H/LリレーOFF */ /*------------------------------------------*/ FaxTimer( 300 ); FaxTelAutoSWAfterTransaction(); break; case FSK_RECEIVE: /** PRI−Q3回/その他命令受信 */ /*--------------------------------------------------------------*/ /** PRI−Q3回受信の場合は,最初の受信命令に対して処理する */ /*--------------------------------------------------------------*/ break; default: /** FSKエラー/T3タイムアウト */ /*--------------------------------------*/ /** R.4.2で,DCN送出し通信終了 */ /*--------------------------------------*/ ReceiveError( 0x42 ); FaxPhaseE( 1 ); break; } SYS_FaxCommStage = tmp_fcm_stage; /*------------------------------------------------------*/ /* 被会話予約処理を行った場合は */ /* 受信側会話予約要求の処理は行わない (松竹桜と同じ) */ /*------------------------------------------------------*/ voice_chk_flag = 1; } RxWholePageCompletedFlag = 1; /** 物理ページ受信完了フラグセット */ if (RxEOR_ReceiveFlag == 1) { /** EOR−Qを受信した */ RxEOR_ReceiveFlag = 0; /** EOR受信フラグクリア */ } else { /** EOR−Qを受信していない */ /*--------------------------*/ /** RNR送信−RR受信 */ /*--------------------------*/ TransmitRNR(); /*--------------------------*/ /* ECM受信タスクを停止 */ /*--------------------------*/ if ((RxECM_Mode == ECM_ON) && ((RxPageFinishStatus == RX_CONTINUE) || (RxPageFinishStatus == RX_BLOCK_END))) { /** ECMタスク動作中 */ #if (PRO_COM_CODEC_TYPE == SOFTWARE) /* 通信コーデックがソフトなら */ /* #if(PRO_SOFT_CODEC == ENABLE) 96/1/11 Y.S */ SCDC_BreakRxTask(); /** ECMタスク停止 */ #else /* 96/1/11 Y.S */ MDM_BreakRxTask(); /** ECMタスク停止 */ #endif /* 96/1/11 Y.S */ #if 0 /* 上記条件に RX_CONTINUE を追加 (↓の場合RxCでMDM_BreakRxTaskしないので) Aug.18.1994 */ /* RX_CONTINUEの時は,TransmitRNR()でR.5.1になっているので ** ** この場合はRxCの最後でMDM_BreakRxTask()する Jul.20.1994 */ #endif } if ((RxPageFinishStatus == RX_PAGE_END) || (RxPageFinishStatus == RX_BLOCK_END) || ((RxPageFinishStatus == RX_TMOUT) && (RxECM_PixTimeoutFlag == 1)) /* ↑この条件は要確認 (ECMタイムアウトではカウントするのはおかしい?) Nov.24.1994 */ || ((RxPageFinishStatus == RX_ERROR) && (RxECM_Mode == ECM_OFF)) /* ←にG3の条件をandで追加 Oct.15.1994 */ || (RxPageFinishStatus == RX_PRT_ERR)) { /** ページエンド,画質エラー,プリンタエラー */ /* ↑ECM受信タイムアウト回避設定でタイムアウトした時の条件を追加 */ /* タイムアウト回避の処理で,フレームは正常でRCPだけ壊れて */ /* タイムアウトした時の対応 (橘氏より) Sep.16.1994 */ /** 受信ページ数,メモリファイルページ数を+1 */ SYS_RxTotalPage++; SYS_RxMemoryFilePage++; SYS_RxPrintFilePage++; if ((SYS_RxMemoryFileItem == SYS_MEM_RX_FILE) || (SYS_RxPrintFileItem == SYS_MEM_RX_FILE)) { /** 標準メモリ受信||メモリデュアルオープン原稿||バッファリング受信 */ /* デュアルオープンの条件追加 Jun.14.1994 */ /* バッファリング受信の条件追加 Jul.06.1994 */ /** メモリ受信1ページ終了をメインタスクへ通知 */ SendMsgFaxComToMain( MSG_RX_PRINT_PAGE ); } } else { /* Oct.15.1994 以下の処理をif()の外から移動 */ /** メモリ受信で異常ページの場合は,受信ページを削除 */ if (RxPmType == RX_MEMORY) { /* #if (PRO_MULTI_LINE == ENABLE) /@ 1997/01/10 Y.Murata */ if (SYS_FaxComIndexConflictStatus == 0) { MEM_ClearPageAndFATArea( &SYS_DocBlock.Index ); /* Jul.04.1994 */ } /* #else */ /* MEM_ClearPageAndFATArea( &SYS_DocBlock.Index ); */ /* #endif */ } /** エラーコードをセット */ CheckRxPixResultSub(); /* ↓を↑に変更 Jul.20.1994 RX_CONTINUEの時は,TransmitRNR()でR.5.1にするので */ /* CheckRxPixResultPhaseD(); */ } } /*--------------------------------------------------------------*/ /** 次ページをメモリ(バッファリング)受信続行できるかのチェック */ /*--------------------------------------------------------------*/ if (tmp_rx_fcf != EOP_F) { /** 次ページ有り */ #if (PRO_QUICK_TX_TEST == ENABLE) /* 1998/10/14 Y.Murata for KAKI */ if (((SYS_RxMemoryFileItem == SYS_MEM_RX_FILE) || (SYS_RxPrintFileItem == SYS_MEM_RX_FILE)) && ((CMN_CheckMemoryForMemRx() == 0) || (MEM_CountTotalEmptyPage() <= 0))){ /* 代行受信続行不可 */ if (CHK_UNI_MemoryOverRx()) { f_mem_rx_continue = 0; } else { /* 次ページをメモり受信できない場合 会話予約していたが、通常のメモリオーバー時の処理と同じにする */ f_mem_rx_continue = 1; } } #else if (((SYS_RxMemoryFileItem == SYS_MEM_RX_FILE) || (SYS_RxPrintFileItem == SYS_MEM_RX_FILE)) && (((MEM_CountTotalEmptyBlock() + MEM_RX_BORDERLINE) <= SYS_MEMORY_EMPTY_BLOCK) || (MEM_CountTotalEmptyPage() <= 0))){ /* 代行受信続行不可 */ if (CHK_UNI_MemoryOverRx()) { f_mem_rx_continue = 0; } else { /* 次ページをメモり受信できない場合 会話予約していたが、通常のメモリオーバー時の処理と同じにする */ f_mem_rx_continue = 1; } } #endif #if (PRO_PRINTER_RX == ENABLE) else if ((RxPrinterErrorFlag == 1) && (RxECM_Mode == ECM_OFF) && (!CMN_CheckMemoryReceiveEnable())) { /* プリンタ受信→代行受信切り替え不可 (G3のみ) */ f_mem_rx_continue = 0; /* ECM受信では,この場合でも会話予約しない Sep.08.1994 */ } /* ** 強制プリンタ受信設定の場合、プリンタ受信から代行受信の切り替え不可(G3のみ) ** added by H.Hirao 1998/12/25 */ else if ((RxPrinterErrorFlag) && (RxECM_Mode == ECM_OFF) && (CHK_UNI_V17ReceiveType() == V17_PRX_TO_PRX)) { f_mem_rx_continue = 0; } #endif #if (PRO_MEM_RX_REJECT == ENABLE) /* Oct.19.1994 */ else if ((RxPrinterErrorFlag == 1) && (CHK_MemoryReceiveReject())) { /* プリンタ受信エラーでメモリ受信拒否設定 メモリスイッチ削除 '96.04.15 */ f_mem_rx_continue = 0; } #endif } #if (PRO_PRINT_TYPE == THERMAL_TRANS) /* 1999/3/10 K.Kawata */ if (((CHK_UNI_V34ReceiveType() == V34_PRX_TO_PRX) || (CHK_UNI_V17ReceiveType() == V17_PRX_TO_PRX)) && (RxECM_Mode == ECM_OFF) && (PRN_Control.Error)) { f_mem_rx_continue = 0; } #endif #if (PRO_TX_SPEED == V34) /* Added by H.Kubo 1998/01/08 */ if (((CMN_GetVoiceSwitch()) && (voice_chk_flag == 0)) || (!SYS_V34ProcedureExecuting() && (f_mem_rx_continue == 0)) ) { /** 会話予約キー||メモリ受信続行不可 */ /* The above condition for V34 is added by H.Kubo 1998/02/14 */ /*--------------------------------------*/ /** 受信側会話予約要求処理し,リターン */ /*--------------------------------------*/ RxRequestedVoiceMode( f_mem_rx_continue ); return; } #else if (((SYS_VoiceSwitch == 1) && (voice_chk_flag == 0)) || (f_mem_rx_continue == 0)) { /** 会話予約キー||メモリ受信続行不可 */ /*--------------------------------------*/ /** 受信側会話予約要求処理し,リターン */ /*--------------------------------------*/ RxRequestedVoiceMode( f_mem_rx_continue ); return; } #endif /* (PRO_TX_SPEED == V34) */ if (FaxComPerformingFlag == 1) { /** 通信中 */ /*--------------*/ /** 応答送信 */ /*--------------*/ RxRespondPostMessage(); } } /*--------------------------*/ /* DCN,その他の命令 */ /*--------------------------*/ else { if (((RxPageFinishStatus == RX_CONTINUE) || (RxPageFinishStatus == RX_BLOCK_END)) && (RxECM_Mode == ECM_ON)) { /** ECMタスク動作中 */ #if (PRO_COM_CODEC_TYPE == SOFTWARE) /* 通信コーデックがソフトなら */ /* #if(PRO_SOFT_CODEC == ENABLE) 96/1/11 Y.S */ SCDC_BreakRxTask(); /** ECMタスク停止 */ #else /* 96/1/11 Y.S */ MDM_BreakRxTask(); /** ECMタスク停止 */ #endif /* 96/1/11 Y.S */ /* ↑これは後(RxCの最後)でする Jul.11.1994 ← やっぱり必要 Jul.25.1994 */ /*------------------*/ /* ページクローズ */ /*------------------*/ if (RxPmType == RX_MEMORY) { /** メモリ受信 */ /* #if (PRO_MULTI_LINE == ENABLE) /@ 1997/01/10 Y.Murata */ if (SYS_FaxComIndexConflictStatus == 0) { MEM_ClearPageAndFATArea( &SYS_DocBlock.Index ); /* Jul.04.1994 */ } /* #else */ /** 受信ページ削除 */ /* MEM_ClearPageAndFATArea( &SYS_DocBlock.Index ); */ /* #endif */ } } ReceiveError( 0x42 ); /** R.4.2 */ if (RxFCF == DCN_F) { /** DCNを受信 */ FaxPhaseE( 4 ); /** 通信終了(DCNなし) */ } else { FaxPhaseE( 1 ); /** 通信終了(DCNあり) */ } } if ((FaxComPerformingFlag == 1) && (RxModeChangeRequestedFlag == 1)) { /** 通信中&&モード変更要求あり */ ReceiveDCS(); /** DCS受信待ち */ } }
/************************************************************************* module :[受信側のポストメッセージ応答] function :[ 1. ECM受信では,画質良好ならMCFを送出し,画質不良ならR.3.3で . 終了する 2. ポストメッセージでEORを受信した場合はERRを送出する 3. G3受信では,画質良好ならMCFを送出し,画質不良ならRTNを送出する ] return :[] common :[ RxECM_Mode RxModeChangeRequestedFlag TxFCF TxOptionFCF RxEOR_ReceiveFlag RxPageFinishStatus ] condition :[] comment :[ ECM受信でプリンタエラーの場合は NGの応答ができないので,DCNで 強制終了する ] machine :[V53,H8/300] language :[MS-C(Ver.6.0),H8/300(日立マイコン)] keyword :[FCM] date :[1993/12/22] author :[竹内茂樹] *************************************************************************/ void RxRespondPostMessage( void ) { if (RxECM_Mode == ECM_ON) { /** ECM受信 */ if (RxOptionFCF == EOR_F) { /** EOR−Qを受信した */ /** ERR応答送信 */ TxFCF = ERR_F; TxOptionFCF = 0; FaxHDLC_Transmit( TxFCF, TxOptionFCF ); /* ** ERRを出したとき、通信ジャーナルに、枚数0 結果OKとなる不具合 ** 下記DEUだけ結果がR5.2になっていたが、共通でいれるようにします ** 1999/02/09 by T.Soneoka */ #if (0) **#if defined(DEU) /* by M.H '97/03/23 DEU仕様に追加 */ ** FaxComResult = RECEIVEERROR | 0x52; **#endif #else /*ReceiveError(0x52); 1999/10/21 Y.Murata */ #endif /* 1999/08/27 Y.Murata NAGANOより 1999/10/21 Y.Murata * ここではエラーコードをセットするだけ。通信手順は続けます。 */ FaxComResult = RECEIVEERROR | 0x52; if (RxECM_Mode == ECM_ON) { /** ECM受信 */ /** 交信結果を記憶する大域変数にECMモードをセット */ FaxComResult |= ECM_MODE_SET; } } else { if (RxPageFinishStatus == RX_ERROR) { /** 画質不良 */ #if (PRO_RDS_FLASH_ROM_WRITE == ENABLE) /* 1998/03/31 By T.Yamaguchi */ if (SYB_FlashROM_WriteStatus == ROM_DATA_RXING) { /* フラッシュROMデータ受信中 */ FaxPhaseE( 1 ); /** DCN送出 */ } #endif ReceiveError( 0x33 ); /** R.3.3 */ } #if (PRO_PRINTER_RX == ENABLE) /* もみじ/さつき/ラベンダ */ else if (RxPageFinishStatus == RX_PRT_ERR) { /** プリンタエラー (印字NG) */ FaxPhaseE( 1 ); /** DCN送出 */ ReceiveError( 0x45 ); /** R.4.5 */ } else if ((RxPageFinishStatus == RX_BLOCK_END) && (RxPrinterErrorFlag == 1)) { /** ブロックエンド&&プリンタエラー */ FaxPhaseE( 1 ); /** DCN送出 */ ReceiveError( 0x45 ); /** R.4.5 */ } #endif #if (PRO_PRINT_TYPE == THERMAL_TRANS) /* 1999/3/9 K.Kawata*/ else if (RxPageFinishStatus == RX_PRT_ERR) { /** プリンタエラー (印字NG) */ FaxPhaseE( 1 ); /** DCN送出 */ ReceiveError( 0x45 ); /** R.4.5 */ } else if ((RxPageFinishStatus == RX_BLOCK_END) && (RxPrinterErrorFlag == 1)) { /** ブロックエンド&&プリンタエラー */ FaxPhaseE( 1 ); /** DCN送出 */ ReceiveError( 0x45 ); /** R.4.5 */ } #endif else { /** 画質OK */ /** MCF応答送信 */ TxFCF = MCF_F; TxOptionFCF = 0; FaxHDLC_Transmit( TxFCF, TxOptionFCF ); } } } else { /** G3受信 */ if ((RxPageFinishStatus == RX_ERROR) || (RxPageFinishStatus == RX_PRT_ERR)) { /** 画質不良||プリンタエラー */ /** RTN応答送信 */ TxFCF = RTN_F; TxOptionFCF = 0; FaxHDLC_Transmit( TxFCF, TxOptionFCF ); RxModeChangeRequestedFlag = 1; /** モード変更要求フラグをセット */ /*#if defined (ESP) || defined(DEU) @* スペインの申請時に必要 *//* by M.H '97/03/23 DEU仕様にも追加 */ #if defined(DEU) || defined(EUR) /* スペインの申請時に必要 *//* by M.H '97/03/23 DEU仕様にも追加 By Y.Suzuki 1998/09/18 */ /* 欧州仕様追加 by M.H 1999/09/16 */ FaxComResult = RECEIVEERROR | 0x42; #endif } else { /** 画質OK */ /** MCF応答送信 */ TxFCF = MCF_F; TxOptionFCF = 0; FaxHDLC_Transmit( TxFCF, TxOptionFCF ); } } }