102 lines
2.4 KiB
C
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_
|
||
|
|