windows-nt/Source/XPSP1/NT/public/sdk/inc/unimodem.h
2020-09-26 16:20:57 +08:00

1022 lines
35 KiB
C

/*++
Copyright (c) 1996-1999 Microsoft Corporation.
Component
Unimodem TSP Public Header
File
UNIMODEM.H
History
10/25/1997 JosephJ Created, taking stuff from nt50\tsp\public.h
01/29/1998 JosephJ Revised, allowing multiple diagnostics objects,
as well as expanding the LINEDIAGNOSTICS_PARSEREC
structure from 2 to 4 fields.
--*/
#ifndef _UNIMODEM_H_
#define _UNIMODEM_H_
#if _MSC_VER > 1000
#pragma once
#endif
#include <setupapi.h>
#ifdef __cplusplus
extern "C" {
#endif
//====================================================================
// Supported TAPI Device Classes
//
//====================================================================
#define szUMDEVCLASS_COMM TEXT("comm")
#define szUMDEVCLASS_COMM_DATAMODEM TEXT("comm/datamodem")
#define szUMDEVCLASS_COMM_DATAMODEM_PORTNAME TEXT("comm/datamodem/portname")
#define szUMDEVCLASS_TAPI_LINE_DIAGNOSTICS TEXT("tapi/line/diagnostics")
//=========================================================================
//
// "comm"
//
//
// Supported APIS:
// lineGet/SetDevConfig
// lineConfigDialog
// lineConfigDialogEdit
//
// The associated configuration object is UMDEVCFG defined below...
//
//=========================================================================
// Device Setting Information
//
typedef struct // UMDEVCFGHDR
{
DWORD dwSize;
DWORD dwVersion; // Set to MDMCFG_VERSION
WORD fwOptions; // One or more of the flags below...
#define UMTERMINAL_NONE 0x00000000
#define UMTERMINAL_PRE 0x00000001
#define UMTERMINAL_POST 0x00000002
#define UMMANUAL_DIAL 0x00000004
#define UMLAUNCH_LIGHTS 0x00000008 // Not supported on NT5.
WORD wWaitBong; // seconds to wait for the BONG character
// for modems that do not support detection
// of the BONG tone.
} UMDEVCFGHDR, *PUMDEVCFGHDR;
typedef struct // UMDEVCFG
{
UMDEVCFGHDR dfgHdr;
COMMCONFIG commconfig;
} UMDEVCFG, *PUMDEVCFG;
#define UMDEVCFG_VERSION 0x00010003 // Version number of structure
// How much to wait for a credit-card-bong if modem doesn't support it.
// (TODO: move this somewhere else!)
//
#define UMMIN_WAIT_BONG 0
#define UMMAX_WAIT_BONG 60
#define UMDEF_WAIT_BONG 8
#define UMINC_WAIT_BONG 2
//=========================================================================
//
// "comm/datamodem"
//
// Supported APIS:
// lineGetID Returns the structure below.
//
//=========================================================================
//=========================================================================
//
// "comm/datamodem/portname"
//
// Supported APIS:
// lineGetID The Varstring is of type ASCII string and
// contains the null-terminated name of the COMM port
// attached to the device, if there is one.
//
//=========================================================================
//=========================================================================
//
// "tapi/line/diagnostics"
//
// Supported APIS:
// lineGet/SetDevConfig: LINEDIAGNOSTICSCONFIG is the associated
// configuration object...
// lineGetID: LINEDIAGNOSTICS is the returned object.
//
//
//=========================================================================
//
// Many of the diagnostics-related structures and sub-structures defined
// below have a 4-DWORD header defined below:
//
//
typedef struct // LINEDIAGNOSTICSOBJECTHEADER
{
DWORD dwSig; // object-specific signature. All
// signatures defined here have
// prefix "LDSIG_", and are defined below:
#define LDSIG_LINEDIAGNOSTICSCONFIG 0xb2f78d82 // LINEDIAGNOSTICSCONFIG sig
#define LDSIG_LINEDIAGNOSTICS 0xf0c4d4e0 // LINEDIAGNOSTICS sig
#define LDSIG_RAWDIAGNOSTICS 0xf78b949b // see LINEDIAGNOSTICS defn.
#define LDSIG_PARSEDDIAGNOSTICS 0x16cf3208 // see LINEDIAGNOSTICS defn.
DWORD dwNextObjectOffset; // Offset from the start of this header to
// the next object if any (0 if none following).
// Depending on the type of object, this
// field may or may not be used.
DWORD dwTotalSize; // Total size of this object
DWORD dwFlags; // object-specific flags
DWORD dwParam; // object-specific data
} LINEDIAGNOSTICSOBJECTHEADER, *PLINEDIAGNOSTICSOBJECTHEADER;
//
// The following structure defines the diagnostics capabilities and
// curent settings of the device. It is accessed via
// lineGet/SetDevConfig("tapi/line/diagnostics");
//
typedef struct // LINEDIAGNOSTICSCONFIG
{
LINEDIAGNOSTICSOBJECTHEADER hdr;
//
// hdr.dwSig must be set to LDSIG_LINEDIAGNOSTICSCONFIG
// hdr.dwNextObjectOffset will point to the next configuration object,
// if any.
// hdr.dwTotalSize must be set to the current size of this
// structure.
// hdr.dwFlags contains read only diagnostics capabilities --- one
// of the constants defined below ...
// This field is ignored when the structure is passed
// in a call to lineSetDevConfig
//
#define fSTANDARD_CALL_DIAGNOSTICS 0x1
// hdr.dwParam contains current diagnostics settings. One or more
// constants defined above -- indicate that the
// corresponding capability is enabled for
// the device.
} LINEDIAGNOSTICSCONFIG, *PLINEDIAGNOSTICSCONFIG;
//
// Diagnostic information is accessed by lineGetID("tapi/line/diagnostics"),
// with CALLSELECT_CALL. On return, the supplied VARSTRING will be filled
// in with one or more LINEDIAGNOSTICS structures defined below, and.
// potentially other kinds of structures (all with header
// LINEDIAGNOSTICSOBJECTHEADER).
//
// Note that this information can only be obtained if (a) diagnostics
// have been enabled by a previous call to
// lineSetDevConfig("tapi/line/diagnostics) and (b) a valid call handle
// exists. Typically this information is obtained just before
// deallocating the call.
//
// The LINEDIAGNOSTICS structure includes the raw
// diagnostics information returned by the device as well as summary
// information and variable-length arrays containing parsed information.
//
// All the diagnostic information in a particular LINEDIAGNOSTICS object
// is "domain ID" specific. The dwDomainID field of the structure defines the
// domain, or name space, from which any constants are taken. The
// currently Domain IDs are defined below, and have prefix "DOMAINID":
//
#define DOMAINID_MODEM 0x522aa7e1
#define DOMAINID_NULL 0x0
typedef struct // LINEDIAGNOSTICS
{
//
// The following 2 fields provide version and size informatio about
// this structure, as well as identify the domain (name space) of the
// diagnostics information applies to. All subsequent fields in the
// structure are domainID-specific.
//
LINEDIAGNOSTICSOBJECTHEADER hdr;
//
// hdr.dwSig must be set to constant LDSIG_LINEDIAGNOSTICS
// hdr.dwNextObjectOffset will point to the next diagnostic object,
// if any.
// hdr.dwTotalSize contains the total size of this structure,
// including variable portion
// hdr.dwFlags is reserved and must be ignored.
// hdr.dwParam is set to the current sizeof(LINEDIAGNOSTICS) --
// used for versioning of the LINEDIAGNOSICS structure.
// Note that this does NOT include the size of the
// variable length portion.
DWORD dwDomainID; // Identifies the name space from which the
// interpretation of any constants are taken.
//
// The following 5 DWORD fields provide summary diagnostic information,
// obtained by analyzing all the diagnostic information.
//
DWORD dwResultCode; // dDomainID-specific LDRC_ constants defined below
DWORD dwParam1; // Params1-4 are dwResultCode-specific data items.
DWORD dwParam2;
DWORD dwParam3;
DWORD dwParam4;
//
// The remaining fields point to variable length objects containing
// parsed and unparsed (raw) diagnostics information.
//
// Each variable length object starts with a
// LINEDIAGNOSTICSOBJECTHEADER structure, referred to as "ohdr" in
// the documentation below.
//
DWORD dwRawDiagnosticsOffset;
//
// Offset from the start of this structure
// to the start of an object containing
// the raw diagnostics output.
//
// ohdr.dwSig will be set to LDSIG_RAWDIAGNOSTICS
// ohdr.dwNextObjectOffset UNUSED and will be set to 0.
// ohdr.dwTotalSize is set to the total size of the
// raw-diagnostics object.
// ohdr.dwFlags is undefined and should be ignored.
// ohdr.dwParam is set to the size, in bytes of raw
// diagnostics data following ohdr.
//
// Note that ohdr.dwTotalSize will be equal to
// ( sizeof(LINEDIAGNOSTICSOBJECTHEADER)
// + ohdr.dwParam)
//
// The raw diagnostics bytes will be null terminated and
// the ohdr.dwParam includes the size of the terminating null.
// HOWEVER, the raw diagnostics may contain embedded nulls.
// For DEVCLASSID_MODEM, the bytestring will contain
// no embedded nulls and has the HTML-like tagged format
// defined in the AT#UD diagnostics specification.
//
// The following macros help extract and validate raw diagnostics
// information...
//
#define RAWDIAGNOSTICS_HDR(_plinediagnostics) \
((LINEDIAGNOSTICSOBJECTHEADER*) \
( (BYTE*)(_plinediagnostics) \
+ ((_plinediagnostics)->dwRawDiagnosticsOffset)))
#define IS_VALID_RAWDIAGNOSTICS_HDR(_praw_diagnostics_hdr) \
((_praw_diagnostics_hdr)->dwSig==LDSIG_RAWDIAGNOSTICS)
#define RAWDIAGNOSTICS_DATA(_plinediagnostics) \
( (BYTE*)(_plinediagnostics) \
+ ((_plinediagnostics)->dwRawDiagnosticsOffset) \
+ sizeof(LINEDIAGNOSTICSOBJECTHEADER))
#define RAWDIAGNOSTICS_DATA_SIZE(_praw_diagnostics_hdr) \
((_praw_diagnostics_hdr)->dwParam)
DWORD dwParsedDiagnosticsOffset;
//
// Offset from the start of this structure
// to the start of an object containing
// parsed diagnostics output.
//
// ohdr.dwSig will be set to LDSIG_PARSEDDIAGNOSTICS
// ohdr.dwNextObjectOffset UNUSED and will be set to 0.
// ohdr.dwTotalSize is set to the total size of the
// parsed-diagnostics object.
// ohdr.dwFlags is undefined and should be ignored.
// ohdr.dwParam is set to the number of contiguous
// LINEDIAGNOSTICS_PARSEREC structures (defined below)
// following ohdr.
// Note that ohdr.dwTotalSize will be equal to
// ( sizeof(LINEDIAGNOSTICSOBJECTHEADER)
// + ohdr.dwParam*sizeof(LINEDIAGNOSTICS_PARSEREC))
//
// The following macros help extract and validate parsed diagnostics
// information...
//
#define PARSEDDIAGNOSTICS_HDR(_plinediagnostics) \
((LINEDIAGNOSTICSOBJECTHEADER*) \
( (BYTE*)(_plinediagnostics) \
+ ((_plinediagnostics)->dwParsedDiagnosticsOffset)))
#define PARSEDDIAGNOSTICS_DATA(_plinediagnostics) \
((LINEDIAGNOSTICS_PARSEREC*) \
( (BYTE*)(_plinediagnostics) \
+ ((_plinediagnostics)->dwParsedDiagnosticsOffset)\
+ sizeof(LINEDIAGNOSTICSOBJECTHEADER)))
#define PARSEDDIAGNOSTICS_NUM_ITEMS(_pparsed_diagnostics_hdr) \
((_pparsed_diagnostics_hdr)->dwParam)
#define IS_VALID_PARSEDDIAGNOSTICS_HDR(_pparsed_diagnostics_hdr) \
((_pparsed_diagnostics_hdr)->dwSig==LDSIG_PARSEDDIAGNOSTICS)
} LINEDIAGNOSTICS, *PLINEDIAGNOSTICS;
//
// The following structure defines a keyword-value pair of parsed-diagnostic
// information.
//
typedef struct // LINEDIAGNOSTICS_PARSEREC
{
DWORD dwKeyType;
//
// "Super key" -- identifying the type of key
//
DWORD dwKey;
//
// This is domain-specific and key-type specific. For DEVCLASSID_MODEM,
// This will be one of the MODEMDIAGKEY_* constants
// defined below.
DWORD dwFlags;
//
// Help to identify the meaning of dwValue
// One or more of the following flags:
// (1st 4 are mutually exclusive)
//
#define fPARSEKEYVALUE_INTEGER (0x1<<0)
// value is an integer literal
#define fPARSEKEYVALUE_LINEDIAGNOSTICSOBJECT (0x1<<1)
// value is the offset in bytes to a LINEDIGAGNOSTICS
// object which contains the information associated
// with this entry. The byte offset is from the start
// of the object containing the parsed information,
// not from start of the containing LINEDIAGNOSTICS object.
#define fPARSEKEYVALUE_ASCIIZ_STRING (0x1<<2)
// value is the offset in bytes to an ASCII
// null-terminated string. The byte offset is from the
// start of the object containing the parsed information,
// not from start of the containing LINEDIAGNOSTICS object.
#define fPARSEKEYVALUE_UNICODEZ_STRING (0x1<<3)
// value is the offset in bytes to a UNICODE
// null-terminated string. The byte offset is from the
// start of the object containing the parsed information,
// not from start of the containing LINEDIAGNOSTICS object.
DWORD dwValue;
//
// This is dwKey specific. The documentation
// associated with each MODEMDIAGKEY_* constant definition
// precicely describes the content of its corresponding dwValue.
// See also dwFlags above.
//
} LINEDIAGNOSTICS_PARSEREC, *PLINEDIAGNOSTICS_PARSEREC;
// -----------------------------------------------------------------------------
// ANALOG MODEM SUMMARY DIAGNOSIC INFORMATION
// -----------------------------------------------------------------------------
//
// Diagnostics Result Codes (LDRC_*) for modems
//
#define LDRC_UNKNOWN 0
// The result code is unknown. Raw diagnostics information may be present,
// if so dwRawDiagnosticsOffset and dwRawDiagnosticsSize will be nonzero.
// dwParam1-4: unused and will be set to zero.
// Other codes are TBD.
// -----------------------------------------------------------------------------
// LINEDIAGNOSTICS_PARSEREC KeyType,
// key and value definitions for domainID DOMAINID_MODEM
// -----------------------------------------------------------------------------
//
// KEYTYPE
//
#define MODEM_KEYTYPE_STANDARD_DIAGNOSTICS 0x2a4d3263
// All the modem-domain-id key constants have prefix "MODEMDIAGKEY_". Both
// keys and values are based on the AT#UD diagnostic specification.
//
// Most of the values corresponding to the keys defined below are DWORD-sized
// bitfields or counters. A few of the values are offsets (from the start
// of the LINEDIAGNOSTICS structure) to variable-sized values. The formats
// of all values are documented directly after the corresponding key definition,
// and have prefix "MODEMDIAG_". Where useful, macros are provided which
// extract individual bits or bitfields out of the dwValue field. For example,
// see the macros associated with the MODEMDIAGKEY_V34_INFO key, which contains
// information extracted from the V.34 INFO structure.
#define MODEMDIAGKEY_VERSION 0x0
// Value: DWORD. HiWord represents major version;
// LoWord represents minor version;
// Following Macros may be used to extract the hi- and low- version numbers.
// from the parserec's .dwValue field...
//
#define MODEMDIAG_MAJORVER(_ver) ((HIWORD) (_ver))
#define MODEMDIAG_MINORVER(_ver) ((LOWORD) (_ver))
#define MODEMDIAGKEY_CALL_SETUP_RESULT 0x1
// Value: Call Setup Result codes based on on Table 2 of the
// AT#UD specification....
#define MODEMDIAG_CALLSETUPCODE_NO_PREVIOUS_CALL 0x0
//
// Modem log has be en cleared since any previous calls...
//
#define MODEMDIAG_CALLSETUPCODE_NO_DIAL_TONE 0x1
//
// No dial tone detected.
//
#define MODEMDIAG_CALLSETUPCODE_REORDER_SIGNAL 0x2
//
// Reorder signal detected, network busy.
//
#define MODEMDIAG_CALLSETUPCODE_BUSY_SIGNAL 0x3
//
// Busy signal detected
//
#define MODEMDIAG_CALLSETUPCODE_NO_SIGNAL 0x4
//
// No recognized signal detected.
//
#define MODEMDIAG_CALLSETUPCODE_VOICE 0x5
//
// Analog voice detected
//
#define MODEMDIAG_CALLSETUPCODE_TEXT_TELEPHONE_SIGNAL 0x6
//
// Text telephone signal detected (V.18)
//
#define MODEMDIAG_CALLSETUPCODE_DATA_ANSWERING_SIGNAL 0x7
//
// Data answering signal detected (e.g. V.25 ANS, V.8 ANSam)
//
#define MODEMDIAG_CALLSETUPCODE_DATA_CALLING_SIGNAL 0x8
//
// Data calling signal detected (e.g. V.25 CT, V.8 CI).
//
#define MODEMDIAG_CALLSETUPCODE_FAX_ANSWERING_SIGNAL 0x9
//
// Fax answering signal detected (e.g. T.30 CED, DIS).
//
#define MODEMDIAG_CALLSETUPCODE_FAX_CALLING_SIGNAL 0xa
//
// Fax calling signal detected (e.g. T.30 CNG)
//
#define MODEMDIAG_CALLSETUPCODE_V8BIS_SIGNAL 0xb
//
// V.8bis signal detected.
//
#define MODEMDIAGKEY_MULTIMEDIA_MODE 0x2
// Value: Multimedia mode, based on Table 3 of the AT#UD specification...
#define MODEMDIAG_MMMODE_DATA_ONLY 0x0
#define MODEMDIAG_MMMODE_FAX_ONLY 0x1
#define MODEMDIAG_MMMODE_VOICE_ONLY 0x2
#define MODEMDIAG_MMMODE_VOICEVIEW 0x3
#define MODEMDIAG_MMMODE_ASVD_V61 0x4
#define MODEMDIAG_MMMODE_ASVD_V34Q 0x5
#define MODEMDIAG_MMMODE_DSVD_MT 0x6
#define MODEMDIAG_MMMODE_DSVD_1_2 0x7
#define MODEMDIAG_MMMODE_DSVD_70 0x8
#define MODEMDIAG_MMMODE_H324 0x9
#define MODEMDIAG_MMMODE_OTHER_V80 0xa
#define MODEMDIAGKEY_DTE_DCE_INTERFACE_MODE 0x3
// Value: DTE-DCE interface mode, based on Table 4 of the AT#UD specication
// ...
#define MODEMDIAG_DCEDTEMODE_ASYNC_DATA 0x0
#define MODEMDIAG_DCEDTEMODE_V80_TRANSPARENT_SYNC 0x1
#define MODEMDIAG_DCEDTEMODE_V80_FRAMED_SYNC 0x2
#define V8_CM_STRING 0x4
// Value: offset from the start of the LINEDIAGNOSTICS structure to
// the V.8 CM octet string, same format as V.25ter Annex A.
// The offset points to a contiguous region of memory who
// TODO: define parsed-versions of V.8 CM and V.8 JM octet strings, not
// covered in the information returned in PARSEREC
#define MODEMDIAGKEY_RECEIVED_SIGNAL_POWER 0x10
// Value: Received signal power level, in -dBm.
#define MODEMDIAGKEY_TRANSMIT_SIGNAL_POWER 0x11
// Value: Transmit signal power level, in -dBm.
#define MODEMDIAGKEY_NOISE_LEVEL 0x12
// Value: Estimated noise level, in -dBM.
#define MODEMDIAGKEY_NORMALIZED_MSE 0x13
// Value: Normalized Mean Squared error. JosephJ: TODO: Of what?
#define MODEMDIAGKEY_NEAR_ECHO_LOSS 0x14
// Value: Near echo loss, in units of dB
#define MODEMDIAGKEY_FAR_ECHO_LOSS 0x15
// Value: Far echo loss, in units of dB
#define MODEMDIAGKEY_FAR_ECHO_DELAY 0x16
// Value: Far echo delay, in units of ms.
#define MODEMDIAGKEY_ROUND_TRIP_DELAY 0x17
// Value: Round trip delay, in units of ms.
#define MODEMDIAGKEY_V34_INFO 0x18
// Value: V.34 INFO bitmap, based on Table 5 of the AT#UD specifiction.
// This DWORD value encodes 32 bits extracted from the V.34 INFO bitmap.
// The following Macros extract specific V.34 INFO bit ranges out of
// the 32-bit value:
//
// 10/30/1997 JosephJ: TODO what exactly are these? Also, what
// does 20;0, 50;0 below mean?
#define MODEMDIAG_V34_INFO0_20_0(_value) (((_value)>>30) & 0x3)
//
// INFO0 bit 20;0
//
#define MODEMDIAG_V34_INFOc_79_88(_value) (((_value)>>20) & 0x3ff)
//
// INFOc bit 79-88
//
#define MODEMDIAG_V34_INFOc_PRE_EMPHASIS(_value) (((_value)>>16) & 0xf)
//
// Pre-emphasis field, selected by the symbol rate chosen.
// INFOc bits 26-29 or 35-38 or 44-47 or 53-56 or 62-65 or 71-74
//
#define MODEMDIAG_V34_INFOa_26_29(_value) (((_value)>>12) & 0xf)
//
// INFOa bits 26-29
//
#define MODEMDIAG_V34_INFO_MP_50_0(_value) (((_value)>>10) & 0x3)
//
// MP bit 50;0
//
#define MODEMDIAG_V34_INFOa_40_49(_value) (((_value)>>0) & 0x3ff)
//
// INFOa bits 40-49
//
#define MODEMDIAGKEY_TRANSMIT_CARRIER_NEGOTIATION_RESULT 0x20
// Value: based on Table 6 of the AT#UD specification
// TODO: fill out...
#define MODEMDIAGKEY_RECEIVE_CARRIER_NEGOTIATION_RESULT 0x21
// Value: based on Table 6 of the AT#UD specification
// TODO: fill out...
#define MODEMDIAGKEY_TRANSMIT_CARRIER_SYMBOL_RATE 0x22
// Value: Transmit carrier symbol rate.
#define MODEMDIAGKEY_RECEIVE_CARRIER_SYMBOL_RATE 0x23
// Value: Receive carrier symbol rate.
#define MODEMDIAGKEY_TRANSMIT_CARRIER_FREQUENCY 0x24
// Value: Transmit carrier frequency TODO: units? Hz?
#define MODEMDIAGKEY_RECEIVE_CARRIER_FREQUENCY 0x25
// Value: Transmit carrier frequency TODO: units? Hz?
#define MODEMDIAGKEY_INITIAL_TRANSMIT_CARRIER_DATA_RATE 0x26
// Value: Initial transmit carrier data rate. TODO: units? /sec?
#define MODEMDIAGKEY_INITIAL_RECEIVE_CARRIER_DATA_RATE 0x27
// Value: Initial receive carrier data rate. TODO: units? /sec?
#define MODEMDIAGKEY_TEMPORARY_CARRIER_LOSS_EVENT_COUNT 0x30
// Value: Temporary carrier loss event count
#define MODEMDIAGKEY_CARRIER_RATE_RENEGOTIATION_COUNT 0x31
// Value: Carrier rate renegotiation event count
#define MODEMDIAGKEY_CARRIER_RETRAINS_REQUESTED 0x32
// Value: Carrier retrains requested
#define MODEMDIAGKEY_CARRIER_RETRAINS_GRANTED 0x33
// Value: Carrier retrains granted.
#define MODEMDIAGKEY_FINAL_TRANSMIT_CARRIER_RATE 0x34
// Value: final carrier transmit rate TODO: units? /sec?
#define MODEMDIAGKEY_FINAL_RECEIVE_CARRIER_RATE 0x35
// Value: final carrier receive rate TODO: units? /sec?
#define MODEMDIAGKEY_PROTOCOL_NEGOTIATION_RESULT 0x40
// Value: Protocol negotiation result code, based on
// Table 7 of the AT#UD diagnostics specification...
#define MODEMDKAGKEY_ERROR_CONTROL_FRAME_SIZE 0x41
// Value: Error control frame size. TODO: units? bytes?
#define MODEMDIAGKEY_ERROR_CONTROL_LINK_TIMEOUTS 0x42
// Value: Error control link timeouts. TODO: time or count?
#define MODMEDIAGKEY_ERROR_CONTROL_NAKs 0x43
// Value: Error control NAKs
#define MODEMDIAGKEY_COMPRESSION_NEGOTIATION_RESULT 0x44
// Value: Compression negotiation result, based on
// Table 8 of the AT#UD spec.
//
// TODO: add specific constant definitions here...
#define MODEMDIAGKEY_COMPRESSION_DICTIONARY_SIZE 0x45
// Value: compression dictionary size. TODO: size? bytes?
#define MODEMDIAGKEY_TRANSMIT_FLOW_CONTROL 0x50
// Value: Transmit flow control, defined by
// one of the following constants:
#define MODEMDIAG_FLOW_CONTROL_OFF 0x0
//
// No flow control
//
#define MODEMDIAG_FLOW_CONTROL_DC1_DC3 0x2
//
// DC1/DC3 (XON/XOFF) flow control
//
#define MODEMDIAG_FLOW_CONTROL_RTS_CTS 0x3
//
// RTS/CTS (V.24 ckt 106/133) flow control: TODO verify that latter
// is the same as RTS/CTS.
//
#define MODEMDIAGKEY_RECEIVE_FLOW_CONTROL 0x51
// Value: Receive flow control, defined by the above
// (MODEMDiG_FLOW_CONTROL_*) constants.
#define MODEMDIAGKEY_DTE_TRANSMIT_CHARACTERS 0x52
// Value: Transmit characters obtained from DTE
#define MODEMDIAGKEY_DTE_RECEIVED_CHARACTERS 0x53
// Value: Received characters sent to DTE
#define MODEMDIAGKEY_DTE_TRANSMIT_CHARACTERS_LOST 0x54
// Value: Transmit characters lost (data overrun errors from DTE)
#define MODEMDIAGKEY_DTE_RECEIVED_CHARACTERS_LOST 0x55
// Value: Transmit characters lost (data overrun errors to DTE)
#define MODEMDIAGKEY_EC_TRANSMIT_FRAME_COUNT 0x56
// Value: Error control protocol transmit frame count
#define MODEMDIAGKEY_EC_RECEIVED_FRAME_COUNT 0x57
// Value: Error control protocol received frame count
#define MODEMDIAGKEY_EC_TRANSMIT_FRAME_ERROR_COUNT 0x58
// Value: Error control protocol transmit frame error count
#define MODEMDIAGKEY_EC_RECEIVED_FRAME_ERROR_COUNT 0x59
// Value: Error control protocol received frame error count
#define MODEMDIAGKEY_TERMINATION_CAUSE 0x60
// Value: Termination cause, based on Table 9-10 of the AT#UD
// specification.
#define MODEMDIAGKEY_CALL_WAINTING_EVENT_COUNT 0x61
// Value: Call wainting event count.
// TODO: Define specific constants.
//
// KEYTYPE
//
#define MODEM_KEYTYPE_AT_COMMAND_RESPONSE 0x5259091c
//
// The values are responses to specific AT commands. This type is relevant
// only to AT ("Hayes(tm) compatible") modems.
// The key (one of the MODEMDIAGKEY_ATRESP_* constants ) identifies the
// command.
//
#define MODEMDIAGKEY_ATRESP_CONNECT 0x1
// Value: Connect response string.
// This will be a null-terminated ascii string.
// ========================================================================
// UNIMODEM DEVICE-SPECIFIC returned for lineGetDevCaps
// The following structure is located at dwDevSpecificOffset into
// the LINEDEVCAPS structure returned by lineGetDevCaps.
//
typedef struct // DEVCAPS_DEVSPECIFIC_UNIMODEM
{
DWORD dwSig;
//
// This will be set to 0x1;
DWORD dwKeyOffset;
//
// This is the offset from the start of THIS structure, to
// a null-terminated ASCI (not UNICODE) string giving
// the device's driver key.
//
// WARNING: this is present for compatibility reasons. Applications
// are STRONGLY discouraged to use this information, because the
// location of the driver key could change on upgrade, so if
// applications save away this key, the application could fail
// on upgrade of the OS.
//
} DEVCAPS_DEVSPECIFIC_UNIMODEM, *PDEVCAPS_DEVSPECIFIC_UNIMODEM;
// ========================================================================
typedef struct // ISDN_STATIC_CONFIG
{
DWORD dwSig;
//
// Must be set to dwSIG_ISDN_STATIC_CONFIGURATION
//
#define dwSIG_ISDN_STATIC_CONFIGURATION 0x877bfc9f
DWORD dwTotalSize;
//
// Total size of this structure, including variable portion, if any.
//
DWORD dwFlags; // reserved
DWORD dwNextHeaderOffset; // reserved
DWORD dwSwitchType;
//
// One of the dwISDN_SWITCH_* values below.
//
#define dwISDN_SWITCH_ATT1 0 // AT&T 5ESS Customm
#define dwISDN_SWITCH_ATT_PTMP 1 // AT&T Point to Multipoint
#define dwISDN_SWITCH_NI1 2 // National ISDN 1
#define dwISDN_SWITCH_DMS100 3 // North3ern Telecom DMS-100 NT1
#define dwISDN_SWITCH_INS64 4 // NTT INS64 - (Japan)
#define dwISDN_SWITCH_DSS1 5 // DSS1 (Euro-ISDN)
#define dwISDN_SWITCH_1TR6 6 // 1TR6 (Germany)
#define dwISDN_SWITCH_VN3 7 // VN3 (France)
#define dwISDN_SWITCH_BELGIUM1 8 // Belgian National
#define dwISDN_SWITCH_AUS1 9 // Australian National TPH 1962
#define dwISDN_SWITCH_UNKNOWN 10 // Unknown
DWORD dwSwitchProperties;
//
// One or more fISDN_SWITCHPROP_* flags below
//
// Note the following three are exclusive, so only one can be
// set at a time:
#define fISDN_SWITCHPROP_US (0x1<<0) // Uses DN/SPID
#define fISDN_SWITCHPROP_MSN (0x1<<1) // Uses MSN
#define fISDN_SWITCHPROP_EAZ (0x1<<2) // Uses EAX
#define fISDN_SWITCHPROP_1CH (0x1<<3) // Only one channel.
DWORD dwNumEntries;
//
// The number of channels OR MSNs.
// The numbers and possibly IDs are specified in the following
// two offsets.
//
DWORD dwNumberListOffset;
//
// Offset in BYTES from the start of this structure to a
// UNICODE multi-sz set of strings representing numbers.
// There will dwNumChannels entries.
//
// The interpretation of these numbers is switch-property-specific,
// and is as follows:
// US: Directory Number.
// MSN: MSN Number
// EAZ: EAZ Number.
DWORD dwIDListOffset;
//
// Offset in BYTES from the start of this structure to a
// UNICODE multi-sz set of strings representing IDs.
// There will dwNumChannels entries.
//
// The interpretation of these IDs is switch-property-specific and
// is as follows:
// US: SPID.
// MSN: Not used and should be set to 0.
// EAZ: EAZ
//
// variable length portion, if any, follows...
//
} ISDN_STATIC_CONFIG;
typedef struct // ISDN_STATIC_CAPS
{
DWORD dwSig;
//
// Must be set to dwSIG_ISDN_STATIC_CAPS
//
#define dwSIG_ISDN_STATIC_CAPS 0xd11c5587
DWORD dwTotalSize;
//
// Total size of this structure, including variable portion, if any.
//
DWORD dwFlags; // reserved
DWORD dwNextHeaderOffset; // reserved
DWORD dwNumSwitchTypes;
DWORD dwSwitchTypeOffset;
//
// Offset to switch types, which is a DWORD array of types.
//
DWORD dwSwitchPropertiesOffset;
//
// Offset to a DWORD array of properties of the corresponding switch.
//
DWORD dwNumChannels;
//
// The number of channels supported.
//
DWORD dwNumMSNs;
//
// The number of MSNs supported.
//
DWORD dwNumEAZ;
//
// The number of EAZs supported.
//
//
// variable length portion, if any, follows...
//
} ISDN_STATIC_CAPS;
typedef struct // MODEM_CONFIG_HEADER
{
DWORD dwSig;
DWORD dwTotalSize;
DWORD dwNextHeaderOffset;
DWORD dwFlags;
} MODEM_CONFIG_HEADER;
typedef struct // MODEM_PROTOCOL_CAPS
{
MODEM_CONFIG_HEADER hdr;
//
// hdr.dwSig must be set to dwSIG_MODEM_PROTOCOL_CAPS
// hdr.dwFlags are reserved and should be ignored by app.
//
#define dwSIG_MODEM_PROTOCOL_CAPS 0x35ccd4b3
DWORD dwNumProtocols;
//
// The number of protocols supported.
//
DWORD dwProtocolListOffset;
//
// Offset to a DWORD array of protocols supported.
//
//
// variable length portion, if any, follows...
//
} MODEM_PROTOCOL_CAPS;
typedef struct _PROTOCOL_ITEM {
DWORD dwProtocol; // Protocol Supported
DWORD dwProtocolNameOffset; // Offset from beggining of MODEM_PROTOCOL_CAPS structure
// to NULL terminated friendly name of the protocol.
} PROTOCOL_ITEM, *PPROTOCOL_ITEM;
//=========================================================================
//
// Modem install wizard structures and flags
//
//=========================================================================
#define UM_MAX_BUF_SHORT 32
#define UM_LINE_LEN 256
#define MIPF_NT4_UNATTEND 0x1
// Take the information about what modem to install
// from the unattended.txt file
#define MIPF_DRIVER_SELECTED 0x2
// The modem driver is selected, just register
// and install it
// Unattended install parameters
typedef struct _tagUMInstallParams
{
DWORD Flags; // Flags that specify the unattended mode
WCHAR szPort[UM_MAX_BUF_SHORT]; // Port on which to install the modem
WCHAR szInfName[MAX_PATH]; // for NT4 method, inf name
WCHAR szSection[UM_LINE_LEN]; // for NT4 method, section name
} UM_INSTALLPARAMS, *PUM_INSTALLPARAMS, *LPUM_INSTALLPARAMS;
// This structure is the private structure that may be
// specified in the SP_INSTALLWIZARD_DATA's PrivateData field.
typedef struct tagUM_INSTALL_WIZARD
{
DWORD cbSize; // set to the size of the structure
DWORD Reserved1; // reserved, must be 0
DWORD Reserved2; // reserved, must be 0
LPARAM Reserved3; // reserved, must be 0
UM_INSTALLPARAMS InstallParams; // parameters for the wizard
} UM_INSTALL_WIZARD, *PUM_INSTALL_WIZARD, *LPUM_INSTALL_WIZARD;
//=========================================================================
//
// Modem properties defines
//
//=========================================================================
#define REGSTR_VAL_DEVICEEXTRAPAGES TEXT("DeviceExtraPages") // Property pages provided by the device manufacturer
typedef BOOL (APIENTRY *PFNADDEXTRAPAGES)(HDEVINFO,PSP_DEVINFO_DATA,LPFNADDPROPSHEETPAGE,LPARAM);
#ifdef __cplusplus
}
#endif
#endif // _UNIMODEM_H_