You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.7 KiB
161 lines
4.7 KiB
|
|
/***************************************************************************
|
|
Name : PROTHELP.C
|
|
Comment : Protocol Initialization & helper functions
|
|
Functions: (see Prototypes just below)
|
|
|
|
Copyright (c) 1993 Microsoft Corp.
|
|
|
|
Revision Log
|
|
Date Name Description
|
|
-------- ----- ---------------------------------------------------------
|
|
***************************************************************************/
|
|
#define USE_DEBUG_CONTEXT DEBUG_CONTEXT_T30_MAIN
|
|
|
|
#include "prep.h"
|
|
#include "efaxcb.h"
|
|
#include "protocol.h"
|
|
#include "glbproto.h"
|
|
|
|
|
|
// This function get the capabilities of the fax.
|
|
// We are calling this function when we want to receive a fax, with type SEND_CAPS
|
|
// (before we answer the call)
|
|
// and with the information in pTG->ProtInst.SendCaps we make the DIS.
|
|
|
|
BOOL ProtGetBC(PThrdGlbl pTG, BCTYPE bctype)
|
|
{
|
|
LPBC lpbc;
|
|
USHORT uSpace;
|
|
|
|
DEBUG_FUNCTION_NAME(_T("ProtGetBC"));
|
|
|
|
DebugPrintEx(DEBUG_MSG,"In ProtGetBC: bctype=%d", bctype);
|
|
|
|
lpbc = ICommGetBC(pTG, bctype);
|
|
|
|
if(lpbc)
|
|
{
|
|
switch(bctype)
|
|
{
|
|
case SEND_CAPS:
|
|
uSpace = sizeof(pTG->ProtInst.SendCaps);
|
|
if(lpbc->wTotalSize > uSpace)
|
|
goto nospace;
|
|
// Here we actually take the send-caps and copy it
|
|
// from pTG->Inst.SendCaps **to** pTG->ProtInst.SendCaps
|
|
_fmemcpy(&pTG->ProtInst.SendCaps, lpbc, lpbc->wTotalSize);
|
|
pTG->ProtInst.fSendCapsInited = TRUE;
|
|
break;
|
|
case SEND_PARAMS:
|
|
if(lpbc->bctype == SEND_PARAMS)
|
|
{
|
|
uSpace = sizeof(pTG->ProtInst.SendParams);
|
|
if(lpbc->wTotalSize > uSpace)
|
|
goto nospace;
|
|
// Here we actually take the send-caps and copy it
|
|
// from pTG->Inst->SendParams **to** pTG->ProtInst.SendParams
|
|
_fmemcpy(&pTG->ProtInst.SendParams, lpbc, lpbc->wTotalSize);
|
|
pTG->ProtInst.fSendParamsInited = TRUE;
|
|
}
|
|
else
|
|
{
|
|
|
|
uSpace = sizeof(pTG->ProtInst.SendParams);
|
|
if(lpbc->wTotalSize > uSpace)
|
|
goto nospace;
|
|
pTG->ProtInst.fSendParamsInited = TRUE;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
goto error;
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
DebugPrintEx(DEBUG_WRN,"Ex bctype=%d --> FAILED", bctype);
|
|
return FALSE;
|
|
}
|
|
nospace:
|
|
DebugPrintEx( DEBUG_ERR,
|
|
"BC too big size=%d space=%d",
|
|
lpbc->wTotalSize,
|
|
uSpace);
|
|
error:
|
|
|
|
DebugPrintEx(DEBUG_WRN,"ATTENTION: pTG->ProtInst.fAbort = TRUE");
|
|
pTG->ProtInst.fAbort = TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
#define SetupLL(npll, B, M) \
|
|
(((npll)->Baud=(BYTE)(B)), ((npll)->MinScan=(BYTE)(M)) )
|
|
|
|
BOOL WINAPI ET30ProtSetProtParams
|
|
(
|
|
PThrdGlbl pTG,
|
|
LPPROTPARAMS lp,
|
|
USHORT uSendSpeeds,
|
|
USHORT uRecvSpeeds
|
|
)
|
|
{
|
|
|
|
DEBUG_FUNCTION_NAME(_T("ET30ProtSetProtParams"));
|
|
|
|
_fmemcpy(&pTG->ProtParams, lp, min(sizeof(pTG->ProtParams), lp->uSize));
|
|
|
|
// Hardware params
|
|
SetupLL(&(pTG->ProtInst.llSendCaps), uRecvSpeeds, lp->uMinScan);
|
|
|
|
pTG->ProtInst.fllSendCapsInited = TRUE;
|
|
|
|
SetupLL(&(pTG->ProtInst.llSendParams), uSendSpeeds, MINSCAN_0_0_0);
|
|
pTG->ProtInst.fllSendParamsInited = TRUE;
|
|
|
|
if(lp->HighestSendSpeed && lp->HighestSendSpeed != 0xFFFF)
|
|
{
|
|
pTG->ProtInst.HighestSendSpeed = lp->HighestSendSpeed;
|
|
}
|
|
else
|
|
{
|
|
pTG->ProtInst.HighestSendSpeed = 0;
|
|
}
|
|
|
|
if(lp->LowestSendSpeed && lp->LowestSendSpeed != 0xFFFF)
|
|
{
|
|
pTG->ProtInst.LowestSendSpeed = lp->LowestSendSpeed;
|
|
}
|
|
else
|
|
{
|
|
pTG->ProtInst.LowestSendSpeed = 0;
|
|
}
|
|
|
|
DebugPrintEx(DEBUG_MSG,"Done with HW caps (recv, send)");
|
|
// OK to print -- not online
|
|
D_PrintBC("Recv HWCaps", &(pTG->ProtInst.llSendCaps));
|
|
D_PrintBC("Send HWCaps", &(pTG->ProtInst.llSendParams));
|
|
DebugPrintEx( DEBUG_MSG,
|
|
"Highest=%d Lowest=%d",
|
|
pTG->ProtInst.HighestSendSpeed,
|
|
pTG->ProtInst.LowestSendSpeed);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void D_PrintBC(LPSTR szll, LPLLPARAMS lpll)
|
|
{
|
|
DEBUG_FUNCTION_NAME(_T("D_PrintBC"));
|
|
if(lpll)
|
|
{
|
|
DebugPrintEx( DEBUG_MSG,
|
|
"%s: Baud=%x MinScan=%x",
|
|
(LPSTR)szll,
|
|
lpll->Baud,
|
|
lpll->MinScan);
|
|
}
|
|
}
|
|
|