map/das-dn/inc/portproc.h
2024-10-14 20:26:21 +08:00

102 lines
2.4 KiB
C++

#ifndef _ZJD_PORT_PROCESS_H_
#define _ZJD_PORT_PROCESS_H_
#include "process.h"
class CPortProcessItem : public CProcessItem
{
public:
int m_physicsAddress;
int m_commonAddress;
int m_originatorAddress;
public:
CPortProcessItem();
virtual ~CPortProcessItem();
virtual void Attach(int uid, int physicsAddress = 0, int commonAddress = 0, int originatorAddress = 0);
virtual void Release(void);
};
class CPortProcess : public CProcess
{
private:
int m_serialfd;
struPortBuffer buffers;
private:
int m_nPortNo;
public:
CPortProcess();
virtual ~CPortProcess();
virtual BOOLEAN OnPreCreate(int id);
virtual BOOLEAN OnCreated(int id);
virtual void Destroy(void);
virtual BOOLEAN Run(void);
virtual BOOLEAN OnTimer(void);
inline LONG getBaudRate(void)
{
if(m_nPortNo < 0 || m_nPortNo >= HARDWARE_PORTS_NUM) return -1;
return config.hardware.ports[m_nPortNo].baud;
}
inline int GetDataCount(void)
{
int count;
count = buffers.in_save + MAX_PORT_BUFFER_SIZE - buffers.in_load;
count &= (MAX_PORT_BUFFER_SIZE - 1);
return count;
}
BOOLEAN FindData(BYTE nChar);
void DropData(int count);
BOOLEAN GetData(BYTE* pBuf, int count);
inline int GetSpace(void)
{
int len;
len = buffers.out_save + MAX_PORT_BUFFER_SIZE - buffers.out_load;
len &= (MAX_PORT_BUFFER_SIZE - 1);
return (MAX_PORT_BUFFER_SIZE - len);
}
BOOLEAN WriteData(const BYTE* pData, int count);
int GetTimeout(void) const;
BOOLEAN SerialPortOpen(void);
void SerialPortClose(void);
void SerialPortRead(unsigned long timeout = 20000);
void SerialPortWrite(void);
virtual BOOLEAN SerialPortTimeout(void);
inline void SerialPortDiscardInBuffer(void)
{
tcflush(m_serialfd, TCIOFLUSH);
}
public:
virtual CPortProcessItem *CreateItem(int ord);
virtual void DestroyItem(int ord, BOOLEAN bDeleted = FALSE);
inline virtual CPortProcessItem *GetItem(int ord) const
{
if (ord < 0 || ord >= PROCESS_UNIT_NUM) return NULL;
return (CPortProcessItem *)m_pItems[ord];
}
inline virtual CPortProcessItem *GetCurItem(void) const
{
return (CPortProcessItem *)GetItem(GetCurOrder());
}
inline virtual CPortProcessItem *GetNextItem(void)
{
GetNextUnit();
return (CPortProcessItem *)GetCurItem();
}
};
#endif //_ZJD_PORT_PROCESS_H_