When a call is active in LINEBEARERMODE_PASSTHROUGH, the service provider
gives direct access to the attached hardware for control by the application. This
mode is for use by applications desiring temporary direct control over
asynchronous modems, accessed through the Win32 Communication functions, for the purpose
of configuring or using special features not otherwise supported by the
service provider, such as facsimile (Class 1, 2, and so on). This bearer mode is
supported by the Universal Modem Driver (UNIMODEM) service provider.
Service providers that support LINEBEARERMODE_PASSTHROUGH indicate it in the dwBearerModes
member of the LINEDEVCAPS
structure. When LINEBEARERMODE_PASSTHROUGH is indicated, the Unimodem service
provider will also include in the DevSpecific area of the LINEDEVCAPS
structure the registry key used to access information about the modem
associated with the line device, in the following format:
DWORD dwContents; // Set to 1 (indicates containing key)
DWORD dwKeyOffset; // Offset to key from start of this
// structure (not from start of
// LINEDEVCAPS structure). 8 in
// our case.
BYTE rgby[...]; // place containing null-terminated
// registry key.
00000001 00000008 74737953 435c6d65 ........System\C
65727275 6f43746e 6f72746e 7465536c urrentControlSet
7265535c 65636976 6c435c73 5c737361 urrentControlSet
65646f4d 30305c6d xx003030 xxxxxxxx Modem\0000.
This registry key could then be opened using this function:
RegOpenKey(HKEY_LOCAL_MACHINE, pszDevSpecificRegKey, &phkResult)
Passthrough mode is invoked most often using the lineMakeCall
function, by setting the LINEBEARERMODE_PASSTHROUGH bit in the dwBearerMode
member of the LINECALLPARAMS
structure pointed to by the lpCallParams
parameter. When this is done, the service provider will open the serial port
to the modem and immediately place the call into LINECALLSTATE_CONNECTED. The
application can then use the lineGetID
function with the device class "comm/datamodem" to obtain an open Win32 file
handle to read from and write to the comm port.
Passthrough mode can be invoked in response to an incoming call as well.
Generally, applications will invoke passthrough mode while the call is in
LINECALLSTATE_OFFERING, before the call has been answered. Instead of calling lineAnswer
, the applications calls lineSetCallParams
, passing LINEBEARERMODE_PASSTHROUGH as the dwBearerMode
parameter. When this is done, as with lineMakeCall
, the call will immediately be placed into LINECALLSTATE_CONNECTED by the
service provider, and the application can obtain a handle to the open port using lineGetID
can be called when the call is in LINECALLSTATE_OFFERING,
LINECALLSTATE_ACCEPTED, or LINECALLSTATE_CONNECTED.
Passthrough mode is normally terminated by calling lineDrop
on the call handle obtained from lineMakeCall
or the first LINE_CALLSTATE
message (if the call was an incoming call). The service provider will close
the port, and restore the modem to its default state. The application must call CloseHandle
on the handle it received from lineGetID
Passthrough mode can also be terminated by calling lineSetCallParams
with the dwBearerMode
parameter set to LINEBEARERMODE_VOICE. The media mode set by lineSetMediaMode
is presumed to be in effect. If LINEMEDIAMODE_DATAMODEM is active, the
service provider will take over the call as though it was a data modem call already
in progress; if lineDrop
is subsequently called, the service provider will issue the appropriate modem
commands or interface state changes to drop a data call.
- Software for developers
Software for Android Developers
- More information resources
Unix Manual Pages