map/das-dn/subiec101balanced/sub_iec101_balanced.h
2024-07-08 10:27:17 +08:00

63 lines
2.0 KiB
C++

#ifndef _ZJD_SUB_IEC101_BALANCED_PROCESS_H_
#define _ZJD_SUB_IEC101_BALANCED_PROCESS_H_
#include "iec101.h"
class CIEC101SecondaryBalancedProcessItem : public CIEC101ProcessItem
{
public:
CIEC101SecondaryBalancedProcessItem() {};
virtual ~CIEC101SecondaryBalancedProcessItem() {};
public:
void Attach(int uid, int physicsAddress = 0, int commonAddress = 0, int originatorAddress = 0)
{
CIEC101ProcessItem::Attach(uid, physicsAddress, commonAddress, m_originatorAddress);
primaryLinkBalanced.otherStationAddress = physicsAddress;
common_address = commonAddress;
applicationlParameters.originatorAddress = originatorAddress;
}
void setAppLayerDataCount(int yx = 0, int yc = 0, int ym = 0)
{
total_yx = yx;
total_yc = yc;
total_ym = ym;
yx_pos = 0;
yc_pos = 0;
ym_pos = 0;
}
};
class CIEC101SecondaryBalancedProcess : public CIEC101SecondaryProcess
{
public:
CIEC101SecondaryBalancedProcess() {m_linkLayer.mode = llSecBalanced;};
virtual ~CIEC101SecondaryBalancedProcess() {};
BOOLEAN OnPreCreate(int id);
BOOLEAN Run(void);
BOOLEAN OnTimer(void);
CIEC101ProcessItem *CreateItem(int ord)
{
return dynamic_cast<CIEC101ProcessItem *>(new CIEC101SecondaryBalancedProcessItem);
}
void Slave_setLinkLayerAddressOtherStation(CIEC101ProcessItem* pItem, int address)
{
pItem->address = address;
}
private:
BOOLEAN LinkLayerSecondaryBalanced_checkFCB(pIEC101_LinkLayerSecondaryBalanced self, BOOLEAN fcb)
{
if (fcb != self->expectedFcb)
{
//vLog(LOG_DEBUG, "ERROR: Frame count bit (FCB) invalid!\n");
/* TODO change link status */
return FALSE;
}
self->expectedFcb = !(self->expectedFcb);
return TRUE;
}
virtual void LinkLayerSecondaryBalanced_ReceivedMessage(BYTE fc, BOOLEAN isBroadcast, BOOLEAN fcb, BOOLEAN fcv, int address, BYTE* msg, int userDataStart, int userDataLength);
};
#endif // _ZJD_SUB_IEC101_BALANCED_PROCESS_H_