📄 corearg.cpp
字号:
/******************************************************************
* Copyright (c) 2004-2005, 许继日立公司
* All rights reserved.
*
* 文件名称:corearg.cpp
* 文件标识:
* 摘 要:核心数据参数保存的内存位置。
*
* 当前版本:1.0
* 作 者:李龙伟 <lilongwei1@hotmail.com>
* 完成日期:2004年12月07日
*
* 取代版本:1.0
* 原作者 :李龙伟
* 完成日期:2004年12月07日
******************************************************************/
#include "corearg.h"
#include "ext.h"
using namespace std;
//----------------------------------- 网络内存数据 -----------------------------------
CGloalNet::CGloalNet()
{
sem_init(&sem_addr, 0, 1);
sem_init(&sem_msg, 0, 1);
memset(&NetAddr, 0x00, sizeof(GateNetAddr));
m_eState = GATE_UNKNOW;
}
CGloalNet::~CGloalNet()
{
sem_destroy(&sem_addr);
sem_destroy(&sem_msg);
}
/*====================================================================================
*
* Subroutine : InsNetAddr()
*
* Parameters : addr 网络地址
*
*
* Called from :
*
* Description : 插入网络地址信息
*
* Return :
*
* Modification:
* 2004-12-11:
*
*====================================================================================*/
int CGloalNet::InsNetAddr(GateNetAddr addr)
{
sem_wait(&sem_addr);
memcpy(&NetAddr, &addr, sizeof(GateNetAddr));
sem_post(&sem_addr);
return 1;
}
/*====================================================================================
*
* Subroutine : InsNetAddr()
*
* Parameters : addr 网络地址
*
*
* Called from :
*
* Description :得到网络地址信息
*
* Return :
*
* Modification:
* 2004-12-11:
*
*====================================================================================*/
int CGloalNet::GetNetAddr(GateNetAddr &addr)
{
sem_wait(&sem_addr);
memcpy(&addr, &NetAddr, sizeof(GateNetAddr));
sem_post(&sem_addr);
return 1;
}
/*====================================================================================
*
* Subroutine : InsDevStatus()
*
* Parameters : state cdt串口网络状态
*
*
* Called from :
*
* Description : 插入CDT网络状态信息
*
* Return :
*
* Modification:
* 2004-12-21:
*
*====================================================================================*/
int CGloalNet::InsDevStatus(enum GateDevStatus state)
{
sem_wait(&sem_addr);
m_eState = state;
sem_post(&sem_addr);
return 1;
}
/*====================================================================================
*
* Subroutine : GetDevStatus()
*
* Parameters : state cdt串口网络状态
*
*
* Called from :
*
* Description :得到CDT网络状态信息
*
* Return :
*
* Modification:
* 2004-12-21:
*
*====================================================================================*/
int CGloalNet::GetDevStatus(enum GateDevStatus state)
{
sem_wait(&sem_addr);
state = m_eState;
sem_post(&sem_addr);
return 1;
}
//----------------------------------- 事件内存数据 -----------------------------------
CSoeData::CSoeData()
{
sem_init(&sem_soe, 0, 1);
}
CSoeData::~CSoeData()
{
sem_destroy(&sem_soe);
}
/*====================================================================================
*
* Subroutine : InsSoeData()
*
* Parameters : soe_status 事件信息
*
*
* Called from :
*
* Description : 插入事件信息
*
* Return : 0 插入失败
* !0 插入成功
* Modification:
* 2004-12-11:
*
*====================================================================================*/
int CSoeData::InsSoeData(SOE_STATUS soe_status)
{
CheckSoeData();
sem_wait(&sem_soe);
m_ListSoe.push_back(soe_status);
sem_post(&sem_soe);
return 1;
}
/*====================================================================================
*
* Subroutine : GetSoeData()
*
* Parameters : soe_status 事件信息
* eRuleType 队列类型
*
* Called from :
*
* Description : 读取并弹出事件信息
*
* Return : 0 获得事件信息
* !0 没有得到事件信息
* Modification:
* 2004-12-11:
*
*====================================================================================*/
int CSoeData::GetSoeData(enum GateStation eStation, SOE_STATUS &soe_status)
{
int nResult = 0;
unsigned int i_len = 0;
unsigned long i_break = 0;
list<SOE_STATUS>::iterator iter, iter0;
sem_wait(&sem_soe);
iter = m_ListSoe.begin();
//查找本线程的数据
for (iter=m_ListSoe.begin(); iter!=m_ListSoe.end(); iter++)
{
if ((*iter).eStation == eStation)
{
soe_status = (*iter);
m_ListSoe.erase(iter);
nResult = 1;
break;
}
}
sem_post(&sem_soe);
return nResult;
}
/*====================================================================================
*
* Subroutine : InsCtrlData()
*
* Parameters : ctrl_value 命令信息
*
*
* Called from :
*
* Description : 插入命令信息
*
* Return :
*
* Modification:
* 2004-12-22:
*
*====================================================================================*/
int CSoeData::InsCtrlData(CTRL_VALUE ctrl_value)
{
CheckCtrlData();
sem_wait(&sem_soe);
m_CtrlValue.push_back(ctrl_value);
sem_post(&sem_soe);
return 1;
}
/*====================================================================================
*
* Subroutine : InsCtrlData()
*
* Parameters : ctrl_value 命令信息
*
*
* Called from :
*
* Description : 读取并弹出命令信息
*
* Return : 获得命令信息体(0,没有得到;!0,得到)
*
* Modification:
* 2004-12-22:
*
*====================================================================================*/
int CSoeData::GetCtrlData(CTRL_VALUE &ctrl_value)
{
int nResult = 0;
unsigned int i_len = 0;
unsigned long i_break = 0;
list<CTRL_VALUE>::iterator iter;
sem_wait(&sem_soe);
if (!m_CtrlValue.empty())
{
for (iter = m_CtrlValue.begin(); iter!=m_CtrlValue.end(); ++iter)
{
if (((*iter).eCmdType == COMMAND_SEL_CTRL) //控制选择
|| ((*iter).eCmdType == COMMAND_EXE_CTRL) //控制执行
|| ((*iter).eCmdType == COMMAND_CANCEL_CTRL)) //控制撤消
{
ctrl_value = (*iter);
m_CtrlValue.erase(iter);
nResult = 1;
}
}
if (nResult == 0)
{
ctrl_value = m_CtrlValue.front();
m_CtrlValue.pop_front();
nResult = 1;
}
}
sem_post(&sem_soe);
return nResult;
}
/*====================================================================================
*
* Subroutine : GetNetAddr()
*
* Parameters :
*
*
* Called from : InsSoeData()
*
* Description : 读取网络状态
*
* Return :
*
* Modification:
* 2004-12-11:
*
*====================================================================================*/
//int CSoeData::GetNetAddr(enum GateStation eStation, GateIpPort &netaddr)
//{
// int nResult = 0
// GateNetAddr n_addr;
// g_glonet.GetNetAddr(n_addr);
// switch(eStation)
// {
// case GATE_OPERATERSTATION: //操作员站
// memcpy(&netaddr, &n_addr.OPERATERNet, sizeof(GateIpPort));
// nResult = 1;
// break;
// case GATE_ENGINEERSTATION: //工程师站
// memcpy(&netaddr, &n_addr.ENGINEERNet, sizeof(GateIpPort));//确认OPERATENet??
// nResult = 1;
// break;
// case GATE_REMOTESTATION: //远动站
// memcpy(&netaddr, &n_addr.REMOTENet, sizeof(GateIpPort));//确认OPERATENet??
// nResult = 1;
// break;
// default:
// break;
// }
//
// return nResult;
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -