Rewrite of Comms
This commit is contained in:
parent
c6265f6659
commit
7297336e46
14 changed files with 173 additions and 303 deletions
70
lib/comms.h
70
lib/comms.h
|
@ -7,25 +7,21 @@
|
|||
#define COMM_STATUS_SOURCE 0x80
|
||||
#define COMM_STATUS_REQDISCONNECT 0xFD
|
||||
#define COMM_STATUS_DISCONNECT 0xFE
|
||||
#define COMM_STATUS_INVALID 0xFF
|
||||
#define COMM_STATUS_INVALID 0x0
|
||||
#define COMM_STATUS_ACTIVE 0x1
|
||||
|
||||
#define COMM_LOOP(comm, onActive, onDisconnect) \
|
||||
|
||||
#define COMM_LOOP(comm, onActive, onDisconnect) \
|
||||
{\
|
||||
for (size_t id = comm.firstValid(); id != comm.endValid(); id++){\
|
||||
for (size_t id = 0; id < comm.recordCount(); id++){\
|
||||
if (comm.getStatus(id) == COMM_STATUS_INVALID){continue;}\
|
||||
onActive; \
|
||||
if (!Util::Procs::isRunning(comm.getPid(id))){\
|
||||
comm.setStatus(COMM_STATUS_DISCONNECT, id); \
|
||||
comm.setStatus(COMM_STATUS_DISCONNECT, id);\
|
||||
}\
|
||||
if ((comm.getTimer(id) & 0x7F) >= 126 || comm.getStatus(id) == COMM_STATUS_DISCONNECT){\
|
||||
onDisconnect; \
|
||||
comm.setStatus(COMM_STATUS_INVALID, id); \
|
||||
}\
|
||||
if ((comm.getTimer(id) & 0x7F) <= 124){\
|
||||
if ((comm.getTimer(id) & 0x7F) == 124){\
|
||||
HIGH_MSG("Timeout occurred for entry %zu, ignoring further timeout", id); \
|
||||
}\
|
||||
comm.setTimer(comm.getTimer(id) + 1, id); \
|
||||
onActive;\
|
||||
if (comm.getStatus(id) == COMM_STATUS_DISCONNECT){\
|
||||
onDisconnect;\
|
||||
comm.setStatus(COMM_STATUS_INVALID, id);\
|
||||
}\
|
||||
}\
|
||||
}
|
||||
|
@ -35,63 +31,37 @@ namespace Comms{
|
|||
public:
|
||||
Comms();
|
||||
~Comms();
|
||||
|
||||
operator bool() const{return dataPage.mapped;}
|
||||
|
||||
void addCommonFields();
|
||||
void commonFieldAccess();
|
||||
|
||||
size_t firstValid() const;
|
||||
size_t endValid() const;
|
||||
void deleteFirst();
|
||||
|
||||
operator bool() const;
|
||||
void reload(const std::string & prefix, size_t baseSize, bool _master = false, bool reIssue = false);
|
||||
virtual void addFields();
|
||||
virtual void nullFields();
|
||||
virtual void fieldAccess();
|
||||
size_t recordCount() const;
|
||||
uint8_t getStatus() const;
|
||||
uint8_t getStatus(size_t idx) const;
|
||||
void setStatus(uint8_t _status);
|
||||
void setStatus(uint8_t _status, size_t idx);
|
||||
|
||||
uint64_t getCommand() const;
|
||||
uint64_t getCommand(size_t idx) const;
|
||||
void setCommand(uint64_t _cmd);
|
||||
void setCommand(uint64_t _cmd, size_t idx);
|
||||
|
||||
uint8_t getTimer() const;
|
||||
uint8_t getTimer(size_t idx) const;
|
||||
void setTimer(uint8_t _timer);
|
||||
void setTimer(uint8_t _timer, size_t idx);
|
||||
|
||||
uint32_t getPid() const;
|
||||
uint32_t getPid(size_t idx) const;
|
||||
void setPid(uint32_t _pid);
|
||||
void setPid(uint32_t _pid, size_t idx);
|
||||
|
||||
void kill(size_t idx, bool force = false);
|
||||
|
||||
void finishAll();
|
||||
|
||||
void keepAlive();
|
||||
bool isAlive() const;
|
||||
|
||||
void setMaster(bool _master);
|
||||
|
||||
const std::string &pageName() const{return dataPage.name;}
|
||||
|
||||
protected:
|
||||
bool master;
|
||||
size_t index;
|
||||
|
||||
size_t currentSize;
|
||||
|
||||
IPC::semaphore sem;
|
||||
|
||||
IPC::sharedPage dataPage;
|
||||
Util::RelAccX dataAccX;
|
||||
|
||||
Util::FieldAccX status;
|
||||
Util::FieldAccX command;
|
||||
Util::FieldAccX timer;
|
||||
Util::FieldAccX pid;
|
||||
Util::FieldAccX killTime;
|
||||
};
|
||||
|
||||
class Statistics : public Comms{
|
||||
|
@ -100,6 +70,9 @@ namespace Comms{
|
|||
operator bool() const{return dataPage.mapped && (master || index != INVALID_RECORD_INDEX);}
|
||||
void unload();
|
||||
void reload(bool _master = false, bool reIssue = false);
|
||||
virtual void addFields();
|
||||
virtual void nullFields();
|
||||
virtual void fieldAccess();
|
||||
|
||||
uint8_t getSync() const;
|
||||
uint8_t getSync(size_t idx) const;
|
||||
|
@ -172,7 +145,10 @@ namespace Comms{
|
|||
Users();
|
||||
Users(const Users &rhs);
|
||||
void reload(const std::string &_streamName = "", bool _master = false, bool reIssue = false);
|
||||
void reload(const std::string &_streamName, size_t track, uint8_t initialState = 0x00);
|
||||
void reload(const std::string &_streamName, size_t track, uint8_t initialState = COMM_STATUS_ACTIVE);
|
||||
virtual void addFields();
|
||||
virtual void nullFields();
|
||||
virtual void fieldAccess();
|
||||
|
||||
operator bool() const{return dataPage.mapped;}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue