166 lines
5.7 KiB
C
166 lines
5.7 KiB
C
|
#pragma once
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// Constants / macros
|
||
|
#define TMMS_INFINITE 0x7fffffff
|
||
|
#define TMMS_Tr 0x00000bb8 // Timeout until a rescan completes: ms(3sec)
|
||
|
#define TMMS_Tc 0x0000ea60 // Timeout to retry a valid configuration: ms(1min)
|
||
|
#define TMMS_Tp 0x000007d0 // Timeout to expect a media connect for a selected config: ms(2sec)
|
||
|
#define TMMS_Tf 0x0000ea60 // Timeout to recover from a failed configuration: ms(1min)
|
||
|
#define TMMS_Td 0x00001388 // Timeout to delay the {SSr} processing: ms(5sec)
|
||
|
|
||
|
#define TIMER_SET(pIntf, tm, Err) Err=StateTmSetOneTimeTimer((pIntf), (tm))
|
||
|
#define TIMER_RESET(pIntf, Err) Err=StateTmSetOneTimeTimer((pIntf), TMMS_INFINITE)
|
||
|
|
||
|
extern DWORD DhcpStaticRefreshParams(IN LPWSTR Adapter);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// Type definitions
|
||
|
//
|
||
|
// Defines the state handler function. The interface context contains
|
||
|
// a pointer to one State Handler function. Based on the function it points
|
||
|
// to, this pointer identifies the state where the context is in. There should
|
||
|
// be one function call having this prototype for each possible state:
|
||
|
// x StateInitFn {SI}
|
||
|
// x StateHardResetFn, {SHr}
|
||
|
// x StateSoftResetFn, {SSr}
|
||
|
// x StateDelaySoftResetFn, {SDSr}
|
||
|
// x StateQueryFn, {SQ}
|
||
|
// x StateIterateFn, {SIter}
|
||
|
// x StateNotifyFn, {SN}
|
||
|
// x StateCfgHardKeyFn, {SCk}
|
||
|
// x StateConfiguredFn, {SC}
|
||
|
// x StateCfgRemoveFn, {SRs}
|
||
|
// x StateCfgPreserveFn, {SPs}
|
||
|
// x StateFailedFn, {SF}
|
||
|
typedef struct _INTF_CONTEXT *PINTF_CONTEXT;
|
||
|
typedef DWORD(*PFN_STATE_HANDLER)(PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
// Enumeration for state transition events
|
||
|
typedef enum
|
||
|
{
|
||
|
// a new interface has been added to the system (either device arrival or adapter bind)
|
||
|
eEventAdd=0,
|
||
|
// the interface has been removed from the system (either device removal or adapter unbind)
|
||
|
eEventRemove,
|
||
|
// media connect has been received for the interface
|
||
|
eEventConnect,
|
||
|
// media disconnect has been received for the interface
|
||
|
eEventDisconnect,
|
||
|
// a timeout occured for the interface
|
||
|
eEventTimeout,
|
||
|
// a refresh command has been issued
|
||
|
eEventCmdRefresh,
|
||
|
// a reset command has been issued
|
||
|
eEventCmdReset,
|
||
|
// a WZCCMD_CFG_NEXT command has been issued
|
||
|
eEventCmdCfgNext,
|
||
|
// a WZCCMD_CFG_DELETE command has been issued
|
||
|
eEventCmdCfgDelete,
|
||
|
// a WZCCMD_CFG_NOOP command has been issued
|
||
|
eEventCmdCfgNoop
|
||
|
} ESTATE_EVENT;
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// Function declarations
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateTmSetOneTimeTimer: Sets a one time timer for the given context with the
|
||
|
// hardcoded callback WZCTimeoutCallback() and with the parameter the interface
|
||
|
// context itself.
|
||
|
// Parameters:
|
||
|
// [in/out] pIntfContext: identifies the context for which is set the timer.
|
||
|
// [in] dwMSeconds: miliseconds interval when the timer is due to fire
|
||
|
DWORD
|
||
|
StateTmSetOneTimeTimer(
|
||
|
PINTF_CONTEXT pIntfContext,
|
||
|
DWORD dwMSeconds);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateDispatchEvent: processes an event that will cause the state machine to transition
|
||
|
// through one or more states.
|
||
|
// Parameters:
|
||
|
// [in] StateEvent: identifies the event that triggers the transition(s)
|
||
|
// [in] pIntfContext: points to the interface that is subject for the transition(s)
|
||
|
// [in] pvEventData: any data related to the event
|
||
|
DWORD
|
||
|
StateDispatchEvent(
|
||
|
ESTATE_EVENT StateEvent,
|
||
|
PINTF_CONTEXT pIntfContext,
|
||
|
PVOID pvEventData);
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// State Handler functions:
|
||
|
//-----------------------------------------------------------
|
||
|
// StateInitFn: Handler for the {SI} state.
|
||
|
DWORD
|
||
|
StateInitFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateHardResetFn: Handler for the {SHr} state
|
||
|
DWORD
|
||
|
StateHardResetFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateSoftResetFn: Handler for the {SSr} state
|
||
|
DWORD
|
||
|
StateSoftResetFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateDelaySoftResetFn: Handler for the {SDSr} state
|
||
|
DWORD
|
||
|
StateDelaySoftResetFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateQueryFn: Handler for the {SQ} state
|
||
|
DWORD
|
||
|
StateQueryFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateIterateFn: Handler for the {SIter} state
|
||
|
DWORD
|
||
|
StateIterateFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateConfiguredFn: Handler for the {SC} state
|
||
|
DWORD
|
||
|
StateConfiguredFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateFailedFn: Handler for the {SF} state
|
||
|
DWORD
|
||
|
StateFailedFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateCfgRemoveFn: Handler for the {SRs} state
|
||
|
DWORD
|
||
|
StateCfgRemoveFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateCfgPreserveFn: Handler for the {SPs} state
|
||
|
DWORD
|
||
|
StateCfgPreserveFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateCfgHardKeyFn: Handler for the {SCk} state
|
||
|
DWORD
|
||
|
StateCfgHardKeyFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|
||
|
|
||
|
//-----------------------------------------------------------
|
||
|
// StateNotifyFn: Handler for the {SN} state
|
||
|
DWORD
|
||
|
StateNotifyFn(
|
||
|
PINTF_CONTEXT pIntfContext);
|