|
|
#include "prep.h"
#include "oemint.h"
#include "t30.h"
#include "efaxcb.h"
#include "debug.h"
///RSL
#include "glbproto.h"
# define MySleep(time) Sleep(time)
/**--------------------------- Debugging ------------------------**/ #define faxTlog(m) DEBUGMSG(ZONE_MAIN, m);
#define FILEID FILEID_T30MAIN
#ifdef DEBUG
# define TIMESTAMP(str) \
faxTlog((SZMOD "TIMESTAMP %lu %s--\r\n", (unsigned long) GetTickCount(), (LPSTR) (str))); #else // !DEBUG
# define TIMESTAMP(str)
#endif // !DEBUG
BOOL T30Cl1Rx ( PThrdGlbl pTG )
{ BOOL fOpen = 0, //CHKCHK - need to assign a value
fImmediate = 1; USHORT uLine = 5, // LINE_NUM,
uModem = 5; // MODEM_NUM;
USHORT uRet1, uRet2, uFlags; HMODEM hModem; HLINE hLine; ET30ACTION actionInitial = actionNULL; BOOL RetCode = FALSE;
// #ifndef SHIP_BUILD
{ SYSTEMTIME st; GetLocalTime(&st); RETAILMSG((SZMOD "------------- Answering at %02d:%02d:%02d on %02d/%02d/%02d ----------\r\n", st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear)); } // #endif
TIMESTAMP("Answering")
SignalStatusChange(pTG, FS_ANSWERED);
// first get SEND_CAPS (before answering)
if(!ProtGetBC(pTG, SEND_CAPS, TRUE)) // sleep until we get it
{ uRet1 = T30_CALLFAIL; uRet2 = 0; // need err value here
goto done; }
uFlags = NCULINK_RX; if(fOpen || fImmediate) { uFlags |= NCULINK_IMMEDIATE; faxTlog((SZMOD "IMMEDIATE ANSWER\r\n")); } // when MDDI is not defined, hLine==uLine and hModem==uModem
// when MDDI is defined, if fOpen is TRUE, then also hLine==uLine and hModem==uModem
hLine = (HLINE)uLine; hModem = (HMODEM)uModem;
if((uRet2 = NCULink(pTG, hLine, hModem, 0, uFlags)) != CONNECT_OK) { uRet1 = T30_ANSWERFAIL; goto done; }
#ifdef RICOHAI
fUsingOEMProt = FALSE; BG_CHK(RICOHAI_MODE == RICOHAI_ENABLE); uRet2 = ModemConnectRx(pTG, hModem, (wOEMFlags & RICOHAI_ENABLE)); if(uRet2 == CONNECT_ESCAPE) { fUsingOEMProt = TRUE; actionInitial = actionGONODE_F; } else if(uRet2 != CONNECT_OK) { uRet1 = T30_ANSWERFAIL; goto done; } #else
#ifdef MDDI
if((uRet2 = ModemConnectRx(pTG, hModem, 0)) != CONNECT_OK) { uRet1 = T30_ANSWERFAIL; goto done; } #endif //MDDI
#endif //!RICOHAI
// Protocol Dump
RestartDump(pTG);
#ifdef IFK
// Call counter
IFNvramSetCounterValue(RXCALL_COUNTER, 1, 0, (COUNTER_ADDVALUE|COUNTER_TIMESTAMP|PROCESS_CONTEXT)); #endif
uRet1 = T30MainBody(pTG, FALSE, actionInitial, hLine, hModem); BG_CHK(uRet1==T30_CALLDONE || uRet1==T30_CALLFAIL); uRet2 = 0;
// Protocol Dump
PrintDump(pTG);
done: // #ifndef SHIP_BUILD
{ SYSTEMTIME st; GetLocalTime(&st); if(uRet1==T30_CALLDONE) { SignalStatusChange(pTG, FS_COMPLETED);
RetCode = TRUE; RETAILMSG((SZMOD "------------ SUCCESSFUL RECV at %02d:%02d:%02d on %02d/%02d/%02d ------------\r\n", st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear)); } else if (pTG->StatusId == FS_NOT_FAX_CALL) { RetCode = FALSE; ERRMSG(("---------- DATA CALL attempt HANDOVER (0x%04x) at %02d:%02d:%02d on %02d/%02d/%02d -----------\r\n", MAKEWORD(uRet1, uRet2), st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear));
} else { if (!pTG->fFatalErrorWasSignaled) { pTG->fFatalErrorWasSignaled = 1; SignalStatusChange(pTG, FS_FATAL_ERROR); }
RetCode = FALSE; ERRMSG(("---------- FAILED RECV (0x%04x) at %02d:%02d:%02d on %02d/%02d/%02d -----------\r\n", MAKEWORD(uRet1, uRet2), st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear)); } } // #endif
ICommStatus(pTG, ((uRet1==T30_CALLDONE) ? T30STATR_SUCCESS : T30STATR_FAIL), 0, 0, 0);
// Dont do this!! The Modem driver queues up commands for later execution, so the
// DCN we just sent is probably in the queue. Doing a sync here causes that send
// to be aborted, so the recvr never gets a DCN and thinks teh recv failed. This
// is bug#6803
// #ifdef MDDI
// // sometimes modem gets confused & doesnt want to hangup? Cleanup its state
// // Class1 modem driver doesnt need this. Only Ricohs
// ModemSync(hModem, RESYNC_TIMEOUT1);
// #endif
NCULink(pTG, hLine, 0, 0, NCULINK_HANGUP); pTG->lEarliestDialTime = GetTickCount() + MIN_CALL_SEPERATION;
#ifdef MDDI
ModemClose(pTG, hModem); NCUReleaseLine(pTG, hLine); #endif //MDDI
BG_CHK((uRet1 & 0xFF) == uRet1); BG_CHK((uRet2 & 0xFF) == uRet2);
return (RetCode); }
BOOL T30Cl1Tx ( PThrdGlbl pTG, LPSTR szPhone )
{ BOOL fOpen = 0; //CHKCHK - need to assign a value
USHORT uRet1, uRet2; ULONG ulTimeout; USHORT uLine = 5, // LINE_NUM,
uModem = 5; // MODEM_NUM;
HLINE hLine; HMODEM hModem; ET30ACTION actionInitial; WORD wFlags; BOOL RetCode = FALSE;
// #ifndef SHIP_BUILD
{ SYSTEMTIME st; GetLocalTime(&st); RETAILMSG((SZMOD "------------ Calling <%s> at %02d:%02d:%02d on %02d/%02d/%02d ------------\r\n", (LPSTR)szPhone, st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear)); } // #endif
// Ricoh doesnt like this to go over 60secs, so give ourselves some buffer here
#define DIAL_TIMEOUT 58000L
ulTimeout = DIAL_TIMEOUT; /**
if((uLen = _fstrlen(szPhone)) > 7) ulTimeout += (((ULONG)(uLen - 7)) << 12); //mult by 4096
**/
// when MDDI is not defined, hLine==uLine and hModem==uModem
// when MDDI is defined, if fOpen is TRUE, then also hLine==uLine and hModem==uModem
hLine = (HLINE)uLine; hModem = (HMODEM)uModem;
actionInitial = actionNULL; wFlags = 0;
// for non-manual calls only, wait until a min. time has elapsed
// since the last hangup. Beware of wraparound
if(!fOpen && szPhone) //fOpen==on-hook-dial, szPhone=NULL: handset dial
{ DWORD lNow, lSleep = -1;
lNow = GetTickCount(); if(lNow < pTG->lEarliestDialTime) lSleep = pTG->lEarliestDialTime-lNow;
faxTlog((SZMOD "Seperation: Now=%ld Earliest=%ld Seperation=%ld Sleep=%ld\r\n", lNow, pTG->lEarliestDialTime, (DWORD)(MIN_CALL_SEPERATION), lSleep ));
if(lSleep <= MIN_CALL_SEPERATION) MySleep(lSleep); }
SignalStatusChange(pTG, FS_DIALING);
if(((uRet2 = NCULink(pTG, hLine, hModem, 0, NCULINK_TX)) != CONNECT_OK) || (szPhone ? ((uRet2 = NCUDial(pTG, hLine, szPhone)) != CONNECT_OK) : FALSE)) { uRet1 = T30_DIALFAIL; goto done; }
// Protocol Dump
RestartDump(pTG);
uRet1 = T30MainBody(pTG, TRUE, actionInitial, hLine, hModem); BG_CHK(uRet1==T30_CALLDONE || uRet1==T30_CALLFAIL); uRet2 = 0;
#ifdef RICOHAI
RicohAIEnd(); #endif
// Protocol Dump
PrintDump(pTG);
done: // #ifndef SHIP_BUILD
{ SYSTEMTIME st; GetLocalTime(&st); if(uRet1==T30_CALLDONE) { SignalStatusChange(pTG, FS_COMPLETED);
RetCode = TRUE; RETAILMSG((SZMOD "------------ SUCCESSFUL SEND at %02d:%02d:%02d on %02d/%02d/%02d ------------\r\n", st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear)); } else { if (!pTG->fFatalErrorWasSignaled) { pTG->fFatalErrorWasSignaled = 1; SignalStatusChange(pTG, FS_FATAL_ERROR); }
RetCode = FALSE; ERRMSG(("---------- FAILED SEND (0x%04x) at %02d:%02d:%02d on %02d/%02d/%02d -----------\r\n", MAKEWORD(uRet1, uRet2), st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear)); } } // #endif
ICommStatus(pTG, ((uRet1==T30_CALLDONE) ? T30STATS_SUCCESS : T30STATS_FAIL), 0, 0, 0);
// Dont do this!! The Modem driver queues up commands for later execution, so the
// DCN we just sent is probably in the queue. Doing a sync here causes that send
// to be aborted, so the recvr never gets a DCN and thinks teh recv failed. This
// is bug#6803
// #ifdef MDDI
// // sometimes modem gets confused & doesnt want to hangup? Cleanup its state
// // Class1 modem driver doesnt need this. Only Ricohs
// ModemSync(hModem, RESYNC_TIMEOUT1);
// #endif
NCULink(pTG, hLine, 0, 0, NCULINK_HANGUP); pTG->lEarliestDialTime = GetTickCount() + MIN_CALL_SEPERATION;
#ifdef MDDI
ModemClose(pTG, hModem); NCUReleaseLine(pTG, hLine); #endif //MDDI
BG_CHK((uRet1 & 0xFF) == uRet1); BG_CHK((uRet2 & 0xFF) == uRet2);
return (RetCode); }
|