?? wlan_pmufsm.h
字號:
/************************************************************
Copyright (c) Paragon Wireless Co.,LTD.
ALL RIGHTS RESERVED
Description: WLAN PMU模塊狀態機的相關定義,包括:
fsm;
fsm_callbacks;
宏定義;
*************************************************************/
#ifndef ParaWlanPMUFsm_H
#define ParaWlanPMUFsm_H
#ifdef __cplusplus
extern "C" {
#endif
#include "precomp.h"
#include "Pmpolicy.h"
#include "Nkintr.h"
#ifdef _WIN32_WCE
#include <Iphlpapi.h>
#endif
#include <pm.h>
#include "Omap730_gspx.h"
/////////////roaming process
#include "ParaRoamingProc.h"
#ifdef DEBUG_PARA_ROAMING
extern PRIVATE_PARAROAMING_ADAPTER priv;
#endif
//power state
#define WLAN_PMU_FSM_STATUS_DISCONNECTED 0
#define WLAN_PMU_FSM_STATUS_CONNECTED 1
#define WLAN_PMU_FSM_STATUS_SLEEP 2
#define WLAN_PMU_FSM_STATUS_DEEP_SLEEP 3
#define WLAN_PMU_FSM_STATUS_POWER_OFF 4
//timer
#define WLAN_PMU_TIMEOUT_VALUE (3000)
#define WLAN_PMU_HOST_SLEEP_CONFIRM_TIMEOUT_VALUE (3000)
#define WLAN_PMU_EXIT_DEEP_SLEEP_TIMEOUT_VALUE (3000)
#define WLAN_PMU_EXIT_SLEEP_TIMEOUT_VALUE (5000)
#define WLAN_PMU_TIMEOUT_TIMES 5
#define WLAN_PMU_CMD_TIMEOUT (20000)
#define WLAN_PMU_SLEEP_MODE_LOCALNET_TIMEOUT (90000)
#define WLAN_PMU_SLEEP_MODE_CPU_RUN_TIMEOUT (90000)
#define WLAN_PMU_DHCP_BUSY_TIMEOUT (40000)
#define WLAN_PMU_GET_IP_TABLE_TIMEOUT (10000)
#define WLAN_PMU_TX_PKT_STAT_INTERVAL (60000)
#define WLAN_PMU_ARP_ENTRY_KEEPING_INTERVAL (30000)
#define WLAN_PMU_ADAPTER_CHECK_TIMEOUT (5000)
//
#define WLAN_PMU_HIGH_PRIO_CMD_RESUME_DEV 0x01
#define WLAN_PMU_HIGH_PRIO_CMD_CPU_STANDBY 0x02
#define WLAN_PMU_HIGH_PRIO_CMD_PS_CONFIRM 0x04
#define WLAN_PMU_HIGH_PRIO_CMD_CARD_RESTART 0x08
#define WLAN_PMU_PACKET_FILTER_ARP 1
#define WLAN_PMU_PACKET_FILTER_SIP 2
//wakeup source
#define WLAN_PMU_WAKEUP_RTC 1
#define WLAN_PMU_WAKEUP_GPIO93 2
#define WLAN_PMU_WAKEUP_GPIO15 3
#define WLAN_PMU_WAKEUP_GPIO1 4
#define WLAN_PMU_WAKEUP_GPIO0 5
#define WLAN_PMU_WAKEUP_GPIO10 6
#define WLAN_PMU_WAKEUP_MODULE 7
#define WLAN_PMU_WAKEUP_FLIP 8
#define WLAN_PMU_WAKEUP_SD 9
//fsm command
#define WLAN_PMU_CMD_APP_SLEEP 1
#define WLAN_PMU_CMD_LINKSTATUS 3
#define WLAN_PMU_CMD_NET_EVENT 4
#define WLAN_PMU_CMD_SLEEP_CONFIRM 5
#define WLAN_PMU_CMD_APP_WAKEUP 6
#define WLAN_PMU_CMD_GET_SLEEP_RESPONSE 7
#define WLAN_PMU_CMD_GET_SLEEP_MODE_AWAKE_RESPONSE 8
#define WLAN_PMU_CMD_ENTER_SLEEP_TIMEOUT 9
#define WLAN_PMU_CMD_ENTER_DEEP_SLEEP_AWAKE 10
#define WLAN_PMU_CMD_DEEP_SLEEP_ASSOCIATE_FAILED 11
#define WLAN_PMU_CMD_EXIT_DEEP_SLEEP_TIMEOUT 12
#define WLAN_PMU_CMD_APP_BACKLIGHT_CTRL 13
#define WLAN_PMU_CMD_DEEP_SLEEP_SCAN_ASSOCIATE 14
#define WLAN_PMU_CMD_EXIT_SLEEP_TIMEOUT 15
#define WLAN_PMU_CMD_DEEP_SLEEP_CLOSE_CPU_TIMEOUT 16
#define WLAN_PMU_CMD_TX_PACKET_TIMEOUT 17
#define WLAN_PMU_CMD_TX_CMD_TIMEOUT 18
#define WLAN_PMU_CMD_SLEEP_MODE_CPU_RUN_TIMEOUT 19
#define WLAN_PMU_CMD_LOCALNET_WAKEUP 20
#define WLAN_PMU_CMD_LOCALNET_SLEEP 21
#define WLAN_PMU_CMD_REBOOT_CARD 22
#define WLAN_PMU_CMD_REASSO_TIMEOUT 23
#define WLAN_PMU_CMD_SLEEP_AWAKE 24
#define WLAN_PMU_CMD_HOST_SLEEP_AWAKE 25
#define WLAN_PMU_CMD_POWER_DOWN 26
#define WLAN_PMU_CMD_POWER_UP 27
#define WLAN_PMU_CMD_PKT_DELAY_TX_TIMEOUT 28
#define WLAN_PMU_CMD_ENTER_DEEP_SLEEP_TIMEOUT 29
#define WLAN_PMU_CMD_HOST_SLEEP_CONFIRM_TIMEOUT 30
#define WLAN_PMU_CMD_GET_HOST_SLEEP_CONFIRM_RESP 31
#define WLAN_PMU_CMD_ENTER_DEEP_SLEEP_RESP 32
#define WLAN_PMU_CMD_LOW_DATA_RATE 33
#define WLAN_PMU_CMD_HOST_WAKEUP_CARD 34
#define WLAN_PMU_CMD_TURN_OFF_CARD_TIMEOUT 35
typedef struct WlanPmuCmdListNode{
int cmd_type;
int args;
unsigned int argv[3];
struct WlanPmuCmdListNode *next;
}WlanPmuCmdListNode;
#define HOST_NAME_MAX_LEN 20
#define MAXRPNAMELEN 16
typedef struct tagNetReportUnit
{
char RPName[MAXRPNAMELEN];
long RPValue;
}NetReportUnit;
typedef struct tagNetReport
{
long RPNumber;
NetReportUnit RPUnit[9];
}NetReport;
typedef struct WlanPmuArpPacket{
unsigned char dst_mac[6];
unsigned char src_mac[6];
unsigned short type;
unsigned short hw_type;
unsigned short protocol_type;
unsigned char hw_size;
unsigned char protocol_size;
unsigned short code;
unsigned char sender_mac[6];
unsigned char sender_ip[4];
unsigned char target_mac[6];
unsigned char target_ip[4];
unsigned char trailer[18];
}WlanPmuArpPacket; //__attribute__((packed))
/* FINITE STATE MACHINE */
typedef struct WlanPmuCB{
PMRVDRV_ADAPTER adapter; /* WLAN設備控制塊 */
#ifdef DEBUG_PARA_ROAMING
PPRIVATE_PARAROAMING_ADAPTER ppriv;
#endif
int iState; /* State */
HANDLE queue;
HANDLE standby_que;
int iCPUSleepMode; /* 0 SLEEP/1 DEEP SLEEP */
int iHighPrioCmdType; /* 0 SLEEP/1 DEEP SLEEP */
WlanPmuCmdListNode *head;
WlanPmuCmdListNode *tail;
HANDLE queue_mutex;
int iCurrentCmdCount;
unsigned long dwSleepRTCTimeout; /* Sleep RTC timeout value */
unsigned long dwDeepSleepRTCTimeout; /* Deep sleep RTC timeout value */
unsigned long dwDTIMMultiple;
int iDeviceShutDown;
int iLocalNetBusy;
//Wlan App Busy flag bit def: bit0:sysInit value; bit1:VoIP; bit2:MSN/IE;
int iWlanAppStatusActive; // wlan app status
int iLinkStatus;
struct PMUFsmCallbacks *callbacks; /* Callback routines */
int iSleepCmdTimeoutTimes;
int iExitSleepCmdTimeoutTimes;
int iEnterDSCmdTimeoutTimes;
int iExitDSAssociateTimeoutTimes;
int iExitDSCmdTimeoutTimes;
#define DEEP_SLEEP_RTC_WAKEUP_MAX_COUNT 3
int iDeepSleepRTCWakeUpCount;
int iDeepSleepRTCWakeUpTotalCount;
unsigned long ulBackLightLevel;
int iIsExitingDeepSleep;
int iIsinSleepMode;
BOOLEAN iNoenterSleepBecauseInroaming;
BOOLEAN bSwitchSleepNoSleep;
BOOLEAN bFromUserIdleToOnState;
BOOLEAN bSetReassociateTimer;
PNDIS_PACKET skb;
int iIsIncomingCallWakeup;
CRITICAL_SECTION IntCriticalSection;
NDIS_MINIPORT_TIMER stSleepCmdTimer;
NDIS_MINIPORT_TIMER stHostSleepConfirmTimer;
int iHostSleepConfirmTimerSetted;
NDIS_MINIPORT_TIMER stExitDSCmdTimer;
NDIS_MINIPORT_TIMER stEnterDSCmdTimer;
NDIS_MINIPORT_TIMER stExitSleepCmdTimer;
NDIS_MINIPORT_TIMER stExitDSAssociateTimer;
NDIS_MINIPORT_TIMER stTxCmdTimer;
#ifndef _WIN32_WCE
NDIS_MINIPORT_TIMER stSleepModeCPURunTimer;
#endif
NDIS_MINIPORT_TIMER stDHCPTimer;
int iDHCPTimerSetted;
NDIS_MINIPORT_TIMER stAdapterCheckTimer;
int iAdapterCheckTimerSetted;
#ifdef CONFIG_WLAN_PMU_ARP_RESPONSE
NDIS_MINIPORT_TIMER stGetIPNetTableTimer;
int iGetIPNetTableTimerSetted;
#endif
NDIS_MINIPORT_TIMER stReassociateTimer;
NDIS_MINIPORT_TIMER stTxPktStatTimer;
int iTxPktStatTimerSeted;
DWORD dwTxPktCount;
NDIS_MINIPORT_TIMER stHostWakeUpTimer;
int iHostWakeUpTimerSeted;
#ifdef CONFIG_WLAN_PMU_ARP_REQUEST
NDIS_MINIPORT_TIMER stArpReqSendTimer;
int iArpReqSendTimerSeted;
#endif
DWORD dwIfIndex;
DWORD dwLastHostWakeTime;
int iRebootTimerCount;
#ifdef CONFIG_WLAN_PMU_ARP_RESPONSE
int iARPFieldGot;
int iARPRespCount;
#endif
WlanPmuArpPacket stARPBuffer;
#ifdef _WIN32_WCE
IP_ADDR_STRING IPAddr;
IP_ADDR_STRING Gateway;
unsigned int AddressLength;
BYTE MacAddress[MAX_ADAPTER_ADDRESS_LENGTH];
unsigned long dwSIPSvrIpaddr;
BYTE abySIPMacAddr[MAX_ADAPTER_ADDRESS_LENGTH];
BYTE abyGWMacAddr[MAX_ADAPTER_ADDRESS_LENGTH];
#else
NetReport stIfNetPrep;
#endif
int iGotIfNetPrep;
int iGotRelatedAPs;
int iGotRelatedAPsOldStatus;
int iCurrentDeepSleepIntervalIndex;
int iSendIndex;
int iSDBusAppStatus;
int iDeepSleepRestartInterval;
int iInitCompleted;
HANDLE wakeup_q;
HANDLE hPowerNotify;
HHOOK hKeyBDHook;
HANDLE hSnapShot;
HANDLE hWlanSleepStatusThread;
HANDLE hWlanSleepStatusEvent;
HANDLE hKeybadProcEvent;
HANDLE hAppStatusCheckTimerEvent;
HANDLE hIPAddrChangedEvent;
HANDLE hIPAddrChangedRegisted;
HANDLE hAdapterCheckEvent;
BOOLEAN registerKeyboard;
PROCESSENTRY32 keybadinfo;
NDIS_MINIPORT_TIMER stKeybadProcTimer;
NDIS_MINIPORT_TIMER stTurnWlanProcTimer;
}WlanPmuCB;
/* 定義狀態機的動作 */
typedef struct PMUFsmCallbacks PMUFsmCallbacks;
struct PMUFsmCallbacks
{
int (*ResetCBInfo) (WlanPmuCB *);
int (*CardEnterSleep) (WlanPmuCB *);
int (*CardExitSleep) (WlanPmuCB *);
int (*CardEnterDeepSleep) (WlanPmuCB *);
int (*CardReEnterDeepSleep) (WlanPmuCB *);
int (*CardExitDeepSleep) (WlanPmuCB *);
DWORD (*CardEnterStandby) (WlanPmuCB *f, int iRTCMod);
int (*RebootCard) (WlanPmuCB *);
int (*PowerDownCard) (WlanPmuCB *);
int (*PowerUpCard) (WlanPmuCB *);
};
/* 對外接口 */
void wlan_PMUInit (IN PMRVDRV_ADAPTER adapter);
void wlan_PMUAppSleep (void);
void wlan_PMUAppWakeUp (void);
int wlan_PMUPacketsFilter (PNDIS_PACKET skb, BYTE * data, int iLength);
void wlan_PMUSleepConfirmed (void);
/* function declare*/
static void pmu_FsmSleepCmdTimeout (WlanPmuCB *pCB);
static void pmu_FsmRebootCard (WlanPmuCB *pCB);
static void pmu_FsmExitSleepCmdTimeout (WlanPmuCB *pCB);
static void pmu_FsmDSScanAndAssociate (WlanPmuCB *pCB);
static void pmu_FsmRTCTimeout (WlanPmuCB *pCB);
static void pmu_FsmSleepModeCPURunTimeout (WlanPmuCB *pCB);
static void pmu_FsmExitDeepSleepCmdTimeout (WlanPmuCB *pCB);
//static void pmu_FsmDeepSleepCloseCPUTimeout (WlanPmuCB *pCB);
void wlan_TurnOnCard();
void wlan_TurnOffCard();
void wlan_PMUSystemEventThread(PVOID pContext);
#ifdef __cplusplus
}
#endif
#endif /* ParaWlanPMUFsm_H */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -