📄 device.cpp
字号:
// sets the interval minor alarm upgrades to major alarm.
void CDevice::SetMinorUpgrade(DWORD dwSeconds)
{
m_dwMinorUpgrade = dwSeconds;
// GetApp()->SetModifiedFlag();
}
// sets the loopback timeout value
void CDevice::SetLoopbackTime(UINT nLoopbackTime)
{
m_nLoopbackTime = nLoopbackTime;
// GetApp()->SetModifiedFlag();
}
// initializes the device
BOOL CDevice::OnInitDevice()
{
// 1s timer (used for RUNLED mainly)
VERIFY(CreateTimer("RunTimer", TIMER_DEVICE_1S, 1000, 10));
if (m_bACO)
{
// 400ms timer (used for ACO mainly)
VERIFY(CreateTimer("ACOTimer", TIMER_DEVICE_400MS, 400, 10));
}
// Comment by Bozhong Xu
// VERIFY(CreateTask("NetSelfTestTask", (PFNTASK)&CDevice::NetSelfTestTask, 0));
return TRUE;
}
// Create a timer to reset watchdog.
BOOL CDevice::OnWatchdogTimer()
{
VERIFY(CreateTimer("WatchdogTimer", TIMER_DEVICE_300MS, 300, 10));
return TRUE;
}
// create a new CBoard object.
CBoard* CDevice::OnCreateBoard(WORD wType)
{
CBoard* pcbBoard = new CBoard();
ASSERT(pcbBoard);
pcbBoard->SetType(wType);
return pcbBoard;
}
// load parameters
void CDevice::OnLoadData()
{
if (GetApp()->IsSubSystem())
return;
LOAD_STRING(m_diInfo.strName);
LOAD_INT(m_diInfo.aAddr.uGroup);
LOAD_INT(m_diInfo.aAddr.uAddrH);
LOAD_INT(m_diInfo.aAddr.uAddrL);
LOAD_STRING(m_diInfo.strProducer);
LOAD_STRING(m_diInfo.strSerial);
LOAD_INT(m_diInfo.dMadeDate.wYear);
LOAD_INT(m_diInfo.dMadeDate.uMonth);
LOAD_INT(m_diInfo.dMadeDate.uDay);
SetDeviceInfo(m_diInfo);
// load net device parameters
NETDEVICE ndDevice = m_ndDevice;
LOAD_STRING(m_ndDevice.strName);
LOAD_BINARY(m_ndDevice.auIP, 4);
LOAD_BINARY(m_ndDevice.auSubnet, 4);
LOAD_BINARY(m_ndDevice.auGateway, 4);
LOAD_BINARY(m_ndDevice.auMac, 6);
LOAD_INT(m_ndDevice.nPort);
if (ndDevice.strName.IsEmpty())
{// insure initialize net device once. so LoadDef command don't change it
SetNetDevice(m_ndDevice);
}
else
{// restore original value
m_ndDevice = ndDevice;
}
/*
////////////////////////////////////
//add by bella yu 2004/11/5
LOAD_INT(m_uAutoReState);
LOAD_INT(m_wAutoReLevel);
if( !m_wAutoReLevel )
{ // no data read
m_wAutoReLevel = ALARM_DEF;
}
LOAD_INT(m_addrMaster.uAddrH);
LOAD_INT(m_addrMaster.uAddrL);
if(!m_addrMaster.uAddrL)
{
m_addrMaster.uAddrL = 1;
}
LOAD_INT(m_addrMaster.uGroup);
// add by zlx 2005.5.9 for reverse
LOAD_INT(m_reverseData.uReverseSet);
LOAD_INT(m_reverseData.uActivePort);
LOAD_INT(m_reverseData.uRingMaster);
LOAD_INT(m_reverseData.uRingSlave);
if(!m_reverseData.uRingMaster && !m_reverseData.uRingSlave)
{
m_reverseData.uRingSlave = 0x10;
}
LOAD_INT(m_reverseData.uReverseTime);
if(!m_reverseData.uReverseTime)
{
m_reverseData.uReverseTime = 3;
}
memset(&m_reverseData.RingGuest.uCnt, 0x5A, sizeof(m_reverseData.RingGuest));
memset(&m_reverseData.RingGuest.uCnt, 0, 1+3*REVERSE_STATION_MAX);
LOAD_INT(m_reverseData.RingGuest.uCnt);
LOAD_INT(m_reverseData.RingGuest.addr[0].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[1].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[2].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[3].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[4].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[5].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[6].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[7].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[8].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[9].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[10].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[11].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[12].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[13].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[14].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[15].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[16].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[17].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[18].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[19].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[20].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[21].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[22].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[23].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[24].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[25].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[26].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[27].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[28].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[29].uAddrL);
LOAD_INT(m_reverseData.RingGuest.addr[30].uAddrL);
// add by zlx 2005.1.26
Flash2Ram();
////////////////////////////////////
// load boards
// CString strSection;
// WORD wBoardType, wBoardIndex;
// for (int i = 0; ;i++)
// {
// strSection.Format("Boards(%d)", i);
// wBoardType = GetApp()->GetProfileInt(strSection, "m_wType", -1);
// wBoardIndex = GetApp()->GetProfileInt(strSection, "m_wIndex", i);
// if (wBoardType == (WORD)-1)
// break;
// VERIFY(Install(wBoardType, wBoardIndex) != -2);
// }
*/
}
// save parameters
void CDevice::OnSaveData()
{
if (GetApp()->IsSubSystem())
return;
SAVE_STRING(m_diInfo.strName);
SAVE_INT(m_diInfo.aAddr.uGroup);
SAVE_INT(m_diInfo.aAddr.uAddrH);
SAVE_INT(m_diInfo.aAddr.uAddrL);
SAVE_STRING(m_diInfo.strProducer);
SAVE_STRING(m_diInfo.strSerial);
SAVE_INT(m_diInfo.dMadeDate.wYear);
SAVE_INT(m_diInfo.dMadeDate.uMonth);
SAVE_INT(m_diInfo.dMadeDate.uDay);
// save net device parameters
SAVE_STRING(m_ndDevice.strName);
SAVE_BINARY(m_ndDevice.auIP, 4, PROFILE_BINARY_MODE_IP);
SAVE_BINARY(m_ndDevice.auSubnet, 4, PROFILE_BINARY_MODE_IP);
SAVE_BINARY(m_ndDevice.auGateway, 4, PROFILE_BINARY_MODE_IP);
SAVE_BINARY(m_ndDevice.auMac, 6, PROFILE_BINARY_MODE_MAC);
SAVE_INT(m_ndDevice.nPort);
/*
//////////////////////////////////////////
//add by bella yu 2004/11/5
SAVE_INT(m_uAutoReState);
SAVE_INT(m_wAutoReLevel);
SAVE_INT(m_addrMaster.uAddrH);
SAVE_INT(m_addrMaster.uAddrL);
SAVE_INT(m_addrMaster.uGroup);
///////////////////////////////////////////////////////////////////////////////
// add by zlx 2005.5.9 for reverse
SAVE_INT(m_reverseData.uReverseSet);
SAVE_INT(m_reverseData.uActivePort);
SAVE_INT(m_reverseData.uRingMaster);
SAVE_INT(m_reverseData.uRingSlave);
SAVE_INT(m_reverseData.uReverseTime);
SAVE_INT(m_reverseData.RingGuest.uCnt);
SAVE_INT(m_reverseData.RingGuest.addr[0].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[1].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[2].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[3].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[4].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[5].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[6].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[7].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[8].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[9].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[10].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[11].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[12].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[13].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[14].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[15].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[16].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[17].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[18].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[19].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[20].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[21].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[22].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[23].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[24].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[25].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[26].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[27].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[28].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[29].uAddrL);
SAVE_INT(m_reverseData.RingGuest.addr[30].uAddrL);
//////////////////////////////////////////
// POSITION pos = m_mapBoards.GetStartPosition();
// WORD wBoard; // zero-based index of the board
// CBoard *pcbBoard = NULL;
// while (pos != NULL)
// {
// m_mapBoards.GetNextAssoc(pos, wBoard, pcbBoard);
// ASSERT(pcbBoard);
// pcbBoard->OnSaveData();
// }
*/
}
///////////////////////////////////////////////////////////////////////////////
// Parameters:
// wBoardType Board type defined in the file board.h
// wBoardIndex Zero-based index of the specified board in the device
// Return Value:
// Zero if installed succesfully, otherwise nonzero.
// error code: -1 board exists, -2 failed to install board
// Remarks:
// Install an board to the device.
int CDevice::Install(WORD wBoardType, WORD wBoardIndex)
{
CString strSection;
CBoard *pcbBoard = NULL;
m_mapBoards.Lookup(wBoardIndex, pcbBoard);
if (pcbBoard != NULL)
{
if (pcbBoard->GetType() == wBoardType)
{// board exists
return -1;
}
else
{// uninstall different Board object.
Uninstall(wBoardIndex);
}
}
pcbBoard = OnCreateBoard(wBoardType);
if (pcbBoard == NULL)
{// failed to create
return -2;
}
pcbBoard->SetIndex(wBoardIndex);
strSection.Format("Boards(%d)", wBoardIndex);
pcbBoard->SetSectionString(strSection);
pcbBoard->OnLoadData();
VERIFY(pcbBoard->OnInitBoard());
m_mapBoards.SetAt(wBoardIndex, pcbBoard);
return 0;
}
///////////////////////////////////////////////////////////////////////////////
// Parameters:
// wBoardIndex Zero-based index of the specified board in the device.
// Remarks:
// Uninstall an board from the device.
void CDevice::Uninstall(WORD wBoardIndex)
{
CBoard *pcbBoard = NULL;
m_mapBoards.Lookup(wBoardIndex, pcbBoard);
if (pcbBoard != NULL)
delete pcbBoard; // free memory
m_mapBoards.RemoveKey(wBoardIndex);
}
// Check link status
void CDevice::CheckLinkStatus()
{
if (KS5_IsLinkUp()) // Link up
{
if (!m_byLinkStatus)
{
m_byLinkStatus = 1;
#ifdef __EFC_MASTER // Added by xbz
GetApp()->AddEvent(LINK_STATUS, &m_byLinkStatus, 1);
#endif
}
}
else // Link down
{
if (m_byLinkStatus)
{
m_byLinkStatus = 0;
#ifdef __EFC_MASTER // Added by xbz
GetApp()->AddEvent(LINK_STATUS, &m_byLinkStatus, 1);
#endif
}
}
}
/*
// Network testing
void CDevice::NetSelfTestTask(DWORD argc, void *argv)
{
UNUSED(argc);
UNUSED(argv);
UINT32 preBDMA_RX_Cnt = 0;
UINT32 preIP_RX_Cnt;
while (1)
{
Test_Cnt++;
if (m_byLinkStatus)
{
if(preBDMA_RX_Cnt == g_dwBdmaCnt)
{
BDMA_RX_Idel++;
}
else
{
BDMA_RX_Idel = 0;
preBDMA_RX_Cnt = g_dwBdmaCnt;
}
if((BDMA_RX_Idel>(BDMA_RX_MAX_IDEL/5))&&(g_dwBdmaCnt>0))
{
MacInit_Cnt++;
KS5_RecvMacInit();
g_dwBdmaCnt =0;
BDMA_RX_Idel =0;
IP_RX_Idel =0;
}
if(BDMA_RX_Idel>=120) //10 minutes
{
MacInit_Cnt++;
KS5_RecvMacInit();
g_dwBdmaCnt =0;
BDMA_RX_Idel =0;
IP_RX_Idel =0;
}
if(preIP_RX_Cnt == g_dwIpCnt)
{
IP_RX_Idel++;
}
else
{
IP_RX_Idel = 0;
preIP_RX_Cnt = g_dwIpCnt;
}
if((BDMA_RX_Idel==0)&&(IP_RX_Idel>(IP_RX_MAX_IDEL/5))) //10 minutes
{ //IP stack crashed,so reboot;
// for(i=0;i<NSOCKETS;i++)
// {
// NU_Close_Socket(i);
// }
// Events_Add(evFOR_DEBUG,(UINT8*)"CLS");
// NU_Sleep(TICKS_PER_SECOND<<2);
SetNetDevice(m_ndDevice);
StackInit_cnt++;
}
}
Sleep(5000);
}
}
// Get network status
void CDevice::GetNetStatus(BYTE *dwAddr)
{
VPdword(dwAddr) = g_dwBdmaCnt;
VPdword(dwAddr+4) = BDMA_RX_Idel;
VPdword(dwAddr+8) = g_dwIpCnt;
VPdword(dwAddr+12) = IP_RX_Idel;
VPdword(dwAddr+16) = VPdword(0x03FFA03C);
VPdword(dwAddr+20) = Test_Cnt;
VPdword(dwAddr+24) = MacInit_Cnt;
VPdword(dwAddr+28) = StackInit_cnt;
UNUSED(dwAddr);
}
*/
// Reset/Reboot system
//
// byMode: reset mode, 0 - reset watchdog, 1 - reset application
void CDevice::Reset(BYTE byMode)
{
if (byMode == 0) // stop watchdog restart
{
GetApp()->EnableWatchdog(FALSE);
}
else if (byMode == 1) // restart application
{
m_bReset = TRUE;
}
}
// Load system default configuration
//
// byMethod: operation method, reserved as 0.
void CDevice::LoadDefaultConfig(BYTE byMethod)
{
if (byMethod == 0)
{
m_diInfo.Default();
// m_ndDevice.Default();
// Notify to saving
GetApp()->SetModifiedFlag();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -