?? isa.cpp
字號(hào):
// ISA.cpp : Defines the initialization routines for the DLL.
//
// create : Benny 2001.7.25
#include "stdafx.h"
#include "ISA.h"
#include "IPremSvr.h"
#include "Serial.h"
#include "nsIRdbTable.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
DECLARE_PREMSERVER_INTERFACE
void FAR PASCAL EXPORT CommCallBack( UINT uMsg, HANDLE handle, WPARAM wParam, LPARAM lParam );
void FAR PASCAL EXPORT TimerProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
//
// Note!
//
// If this DLL is dynamically linked against the MFC
// DLLs, any functions exported from this DLL which
// call into MFC must have the AFX_MANAGE_STATE macro
// added at the very beginning of the function.
//
// For example:
//
// extern "C" BOOL PASCAL EXPORT ExportedFunction()
// {
// AFX_MANAGE_STATE(AfxGetStaticModuleState());
// // normal function body here
// }
//
// It is very important that this macro appear in each
// function, prior to any calls into MFC. This means that
// it must appear as the first statement within the
// function, even before any object variable declarations
// as their constructors may generate calls into the MFC
// DLL.
//
// Please see MFC Technical Notes 33 and 58 for additional
// details.
//
/////////////////////////////////////////////////////////////////////////////
// CISAApp
BEGIN_MESSAGE_MAP(CISAApp, CWinApp)
//{{AFX_MSG_MAP(CISAApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CISAApp construction
CISAApp::CISAApp()
{
m_uCTTimer = 0;
m_uTimer = 0;
m_uTimes = 0;
m_uWait = 0;
m_uTimeOut = 0;
m_uSimulationTime = 0;
m_uSwitchTime = 0;
m_uAnaTime = 0;
m_uPulTime = 0;
m_uAllDgtTime = 0;
}
CISAApp::~CISAApp()
{
}
int CISAApp::SendPremMessage(UINT msg, WPARAM wParam, LPARAM lParam)
{
int nRet = PREM_OK;
BYTE btAddr;
PREMDZHPARAM* pDZHParam = NULL;
RELAYPARAM* pRelayParam = NULL;
CDevice* pDevice = NULL;
if ( ISPROTECTMSG( msg ) )
{
if ( PREM_PROTECTSIGNALRESET==msg )
{
PROTECTPARAM *pProtParam = (PROTECTPARAM *)wParam;
if (!pProtParam)
return PREM_ERR_PARAM;
pDevice = GetDevice( pProtParam->btAddr );
}
else
{
pDZHParam = (PREMDZHPARAM*)lParam;
if ( !pDZHParam )
return PREM_ERR_PARAM;
BYTE btAddr = 0;
((nsIRdbTable*)(pDZHParam->pProtectParam))->GetFieldValue( "地址", &btAddr, DBVT_UCHAR, sizeof(BYTE) );
pDevice = GetDevice( btAddr );
}
if ( !pDevice )
return PREM_ERR_PARAM;
// if ( !pDevice->CheckProtParam( pDZHParam ) )
// return PREM_ERR_PARAM;
}
else if ( ISRELAYMSG( msg ) )
return PREM_ERR_PARAM;
switch ( msg )
{
case PREM_INIT:
nRet = InitPrem();
break;
case PREM_EXIT:
ExitPrem();
break;
case PREM_SETINTERFACE:
if ( INTERFACE_PREMSERVER == wParam )
SET_PREMSERVER_INTERFACE( lParam )
break;
case PREM_GETPROTOCOLNAME:
strcpy( (char*)lParam, PROTOCOLNAME );
break;
case PREM_RELAYSELECT:
break;
case PREM_RELAYRUN:
break;
case PREM_RELAYCANCEL:
break;
case PREM_ASKAREA:
break;
case PREM_CHANGEAREA:
break;
case PREM_ACKCHANGEAREA:
break;
case PREM_CANCELCHANGEAREA:
break;
case PREM_ASKPROTECTVALUE:
nRet = pDevice->AskValue( pDZHParam, msg );
break;
case PREM_CHANGEPROTECTVALUE:
nRet = pDevice->ChangeValue( pDZHParam, msg );
break;
case PREM_ACKCHANGEPROTECTVALUE:
nRet = pDevice->AckChangeValue( pDZHParam, msg );
break;
case PREM_CANCELCHANGEPROTECTVALUE:
nRet = pDevice->NakChangeValue( pDZHParam, msg );
break;
case PREM_PROTECTSIGNALRESET:
nRet = pDevice->SignalReset( pDZHParam, msg );
break;
case PREM_ASKANALOGUE:
nRet = pDevice->AskProtectAna( pDZHParam , msg );
break;
case PREM_CHECKTIME:
nRet = pDevice->CheckTime( pDZHParam, msg );
break;
case PREM_ASKACCIDENT:
break;
default:
return PREM_ERR_MSG;
}
return nRet;
}
void CISAApp::CommCallBack(UINT uMsg, HANDLE handle, WPARAM wParam, LPARAM lParam)
{
CComPort* pComPort = GetComPort( handle );
if ( !pComPort )
return;
switch ( uMsg )
{
case CM_DATA:
pComPort->Recv();
break;
case CM_IDLE:
// pComPort->ResetComm();
break;
}
}
int CISAApp::InitPrem()
{
m_uTimes = ::GetPrivateProfileInt( "Setting", "Retry", 3, PROTOCOL_INIFILE );
m_uTimeOut = ::GetPrivateProfileInt( "Setting", "TimeOut", 5, PROTOCOL_INIFILE );
m_uWait = ::GetPrivateProfileInt( "Setting", "Wait", 20, PROTOCOL_INIFILE );
m_uTimeOut *= 1000 / TIMER_ELAPSE;
m_uWait *= 1000 / TIMER_ELAPSE;
DBHANDLE dbHandle = ::FindDbHandle( (WORD)-1, TYPE_NULL, 0 );
for ( ; ::IsValidDbHandle( dbHandle ); dbHandle = ::GetNextDbHandle( dbHandle ) )
{
char szProtocol[PROTOCOLNAMELEN] = "";
DBHANDLE dbParent = ::GetParentDbHandle( dbHandle);
if (!::IsValidDbHandle( dbParent ))
continue;
if ( !::GetAttr( dbParent, ATTR_ST_PROTOCOLNAME, szProtocol )
|| _stricmp( szProtocol, PROTOCOLNAME ) )
continue;
CDevice* pDevice = new CDevice();
if ( !pDevice )
continue;
pDevice->OnInit( dbHandle );
m_ListDevice.AddTail( pDevice );
char szCom[COMSETTINGLEN] = "";
::GetAttr( dbParent, ATTR_ST_COM, szCom );
CComPort* pComPort = GetComPort( ::StringToPort( szCom ) );
if ( !pComPort )
{
pComPort = new CComPort();
if ( !pComPort )
continue;
pComPort->Open( szCom );
m_ListComPort.AddTail( pComPort );
}
if ( pComPort )
{
pDevice->m_hComPort = pComPort->m_hComPort;
pComPort->AddDevice( pDevice );
}
}
::GetKerTable( "ACCTYPE", getter_AddRefs( m_pAccTable ) ) ;
::GetKerTable( "PROTTYPE", getter_AddRefs( m_pProtTable ) ) ;
::GetKerTable( "ANATYPE", getter_AddRefs( m_pAnaTable ) ) ;
::GetKerTable( "DZHTYPE", getter_AddRefs( m_pDzhTable ) ) ;
::GetKerTable( "DIAGTYPE", getter_AddRefs( m_pDiagTable ) ) ;
//add by llj to add anavalue
::GetKerTable( "ANAVALUE",getter_AddRefs( m_pAnaValueTable) );
m_uTimer = ::SetTimer( NULL, 0x0001, TIMER_ELAPSE, (TIMERPROC)::TimerProc );
if ( 0 == m_uTimer )
return PREM_ERR_TIMER;
return PREM_OK;
}
CComPort* CISAApp::GetComPort(UINT uPort)
{
POSITION pos = m_ListComPort.GetHeadPosition();
while( pos )
{
CComPort* pComPort = m_ListComPort.GetNext( pos );
if ( pComPort->GetPortNO() == uPort )
return pComPort;
}
return NULL;
}
void CISAApp::TimerProc()
{
POSITION pos = m_ListDevice.GetHeadPosition();
while( pos )
{
CDevice* pDevice = m_ListDevice.GetNext( pos );
pDevice->OnTimer();
}
pos = m_ListComPort.GetHeadPosition();
while( pos )
{
CComPort* pComPort = m_ListComPort.GetNext( pos );
pComPort->OnTimer();
}
}
CDevice* CISAApp::GetDevice(BYTE btAddr)
{
POSITION pos = m_ListDevice.GetHeadPosition();
while( pos )
{
CDevice* pDevice = m_ListDevice.GetNext( pos );
if ( pDevice->m_btAddr == btAddr )
return pDevice;
}
return NULL;
}
CComPort* CISAApp::GetComPort(HANDLE handle)
{
POSITION pos = m_ListComPort.GetHeadPosition();
while ( pos )
{
CComPort* pComPort = m_ListComPort.GetNext( pos );
if ( pComPort->m_hComPort == handle )
return pComPort;
}
return NULL;
}
void CISAApp::ExitPrem()
{
::KillTimer( NULL, m_uTimer );
while( !m_ListComPort.IsEmpty() )
delete m_ListComPort.RemoveHead();
while( !m_ListDevice.IsEmpty() )
delete m_ListDevice.RemoveHead();
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CISAApp object
CISAApp theApp;
int FAR PASCAL EXPORT SendPremMessage( UINT msg, WPARAM wParam, LPARAM lParam )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return theApp.SendPremMessage( msg, wParam, lParam );
}
void FAR PASCAL EXPORT CommCallBack( UINT uMsg, HANDLE handle, WPARAM wParam, LPARAM lParam )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
theApp.CommCallBack( uMsg, handle, wParam, lParam );
}
void FAR PASCAL EXPORT TimerProc( HWND, UINT, WPARAM, LPARAM )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
theApp.TimerProc();
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -