TSPI_providerInit (Compact 2013)
3/26/2014
This function initializes the service provider and gives it parameters required for subsequent operation.
Syntax
LONG TSPIAPI TSPI_providerInit(
DWORD dwTSPIVersion,
DWORD dwPermanentProviderID,
DWORD dwLineDeviceIDBase,
DWORD dwPhoneDeviceIDBase,
DWORD_PTR dwNumLines,
DWORD_PTR dwNumPhones,
ASYNC_COMPLETION lpfnCompletionProc,
LPDWORD lpdwTSPIOptions
);
Parameters
- dwTSPIVersion
Version of the TSPI definition under which this function must operate. The caller can use the TSPI_lineNegotiateTSPIVersion function with the special dwDeviceID INITIALIZE_NEGOTIATION to negotiate a version that is guaranteed to be acceptable to the service provider.
- dwPermanentProviderID
Permanent identifier, unique within the service providers on this system, of the service provider being initialized.
- dwLineDeviceIDBase
Lowest device identifier for the line devices supported by this service provider.
- dwPhoneDeviceIDBase
Lowest device identifier for the phone devices supported by this service provider.
- dwNumLines
Number of line devices this service provider supports. The value returned is the number of line devices reported in the TSPI_providerEnumDevices function.
- dwNumPhones
Number of phone devices this service provider supports. The value returned is the number of phone devices reported in TSPI_providerEnumDevices.
- lpfnCompletionProc
Procedure the service provider calls to report completion of all asynchronously operating procedures on line and phone devices.
lpdwTSPIOptions
Pointer to a DWORD-sized memory location, into which the service provider can write a value specifying LINETSPIOPTIONS_ values. This parameter allows the service provider to return bits indicating optional behaviors desired of TAPI. TAPI sets the options DWORD to zero before calling the TSPI_providerInit function, so if the service provider does not want any of these options, it can just leave the DWORD set to zero.At this time, only one bit is defined to be returned through this pointer: LINETSPIOPTION_NONREENTRANT. The service provider sets this bit if it is not designed for fully pre-emptive, multithreaded, multitasking, multiprocessor operation (for example, updating of global data protected by mutexes). When this bit is set, TAPI only makes one call at a time to the service provider; it does not call any other entry point, nor that entry point again, until the service provider returns from the original function call. Without this bit set, TAPI may call into multiple service provider entry points, including multiple times to the same entry point, simultaneously (actually simultaneously in a multiprocessor system).
Note
It must be emphasized that setting this bit degrades performance. It is strongly recommended that this be used only for development but not a shipped production service provider.
Return Value
Returns zero if the function succeeds or an error number if an error occurs. The following table shows the return values for this method.
Value |
Description |
---|---|
LINEERR_INCOMPATIBLEAPIVERSION |
The API version is incompatible. |
LINEERR_OPERATIONFAILED |
The operation failed. |
LINEERR_NOMEM |
Not enough memory is available. |
LINEERR_RESOURCEUNAVAIL |
The resource is unavailable. |
LINEERR_INIFILECORRUPT |
The INI file is corrupted. |
LINEERR_NOMULTIPLEINSTANCE |
Multiple instances of this service provider are not allowed. |
Remarks
This function is guaranteed to be called before any of the other functions prefixed with TSPI_line or TSPI_phone except TSPI_lineNegotiateTSPIVersion. It is strictly paired with a subsequent call to the TSPI_providerShutdown function. These pairs may overlap, for example, when the Telephony Control Panel utility supplied with Windows Telephony in versions 1.4 and earlier is used while telephony operations are in progress. The call to this function must be ignored (returning success) if there is already an outstanding pair.
A service provider should perform as many consistency checks as is practical at the time. TSPI_providerInit is called to ensure that it is ready to run. Some consistency or installation errors, however, cannot be detected until the operation is attempted. The error LINEERR_NODRIVER can be used to report such nonspecific errors at the time they are detected.
There is no directly corresponding function at the TAPI level. At that level, multiple different usage instances can be outstanding, with an "application handle" returned to identify the instance in subsequent operations. At TSPI level, the interface architecture supports only a single usage instance for each distinct service provider.
Requirements
Header |
tspi.h |
Library |
CellTSP.dll |
See Also
Reference
TSPI Service Provider Functions
TSPI_lineNegotiateTSPIVersion