versadac  1
versadac - Scalable Recorder Firmware
mb_connection.h
1 /*****************************************************************************
2 FILE : MB_Connection.h
3 AUTHOR : Karl Wakeham
4 SYSTEM : GNU C++ for ARM
5 DESCRIPTION : Connection class declarations
6 *****************************************************************************/
7 
8 #ifndef __MBCONNECTION_H
9 #define __MBCONNECTION_H
10 
11 #include "OSTask.h"
12 #include "mb_conn_define.h"
13 
14 typedef struct
15 {
16  uint16 user;
17  bool loggedIn;
18 } user_t;
19 
20 extern "C"
21 {
22  #include "system_ticks.h"
23  #include "usersecurity.h"
24 }
25 
27 
29 {
30  public:
31 
32  MB_Connection( uint8 connectionNumber,
33  sint32 socketFileDesc,
34  char *clientAddress,
35  uint16 clientPort,
36  MB_ConnectionManager *connectionManager);
37 
38  virtual ~MB_Connection();
39 
40  void runTask();
41 
42  bool getConnectionActive(void);
43  uint8 getConnectionNumber(void);
44  void setConnectionInActive(void);
45  void sendExchangeMessage(exchange_id xid, uint32 *pMsg);
46  void getExchangeMessage(exchange_id xid, uint32 *pMsg);
47 
48  #ifdef DEBUG_MB_VERBOSE
49  void verbosePrintTransaction(void);
50  #endif
51 
52  void stop(void);
53  double getLastTransactionTime(void){return m_lastComms;};
54  double getTimeUntilShutdown(void){return (SECONDS_TILL_SHUTDOWN * get_ticks_per_second());};
55  bool getConnectionStop(void){return m_bStop;};
56 
57  // Modbus security methods
58  uint16 getUser(uint8 z_userRole){return (m_users[z_userRole].user);};
59  void setUser(uint8 z_userRole, uint16 z_user);
60  uint16 getLoggedInUser(uint8 z_userRole){return ((m_users[z_userRole].loggedIn) ? m_users[z_userRole].user : LOGGED_OUT_USER);};
61  void setUserLoggedIn(uint8 z_userRole);
62 
63  uint8 getSecurityStatus(){return m_securityStatus;};
64  void setSecurityStatus(uint8 z_status){m_securityStatus = z_status;};
65  uint8 getSigningStatus(){return m_signingStatus;};
66  void setSigningStatus(uint8 z_status){m_signingStatus = z_status;};
67  double getLoggedInTime(){return m_loggedInTime;};
68  void setLoggedInTime(double z_time){m_loggedInTime = z_time;};
69  bool getWriting(){return m_writing;};
70  void setWriting(bool z_writing){m_writing = z_writing;};
71  STATUS takeLoginSemaphore(int z_wait){return semTake(m_loginSemaphore, z_wait);};
72  void giveLoginSemaphore(void){semGive(m_loginSemaphore);};
73 
74 
75  private:
76 
77  // Attributes
78  MB_ConnectionManager *m_pConnectionManager;
79  bool m_connectionActive;
80  uint8 m_connectionNumber;
81  char *m_clientAddress;
82  uint16 m_clientPort;
83  sint32 m_socketFileDesc;
84  mb_transaction m_transaction;
85  exchange_id m_c_mbXid; // this connections exchange id
86  exchange_id m_d_mbXid; // modbus driver exchange id
87  exchange_id m_s_mbXid0; // serial connection 1exchange id
88  double m_lastComms; // the time in ticks that the last transaction was recieved
89 
90  // Modbus security attributes
91  user_t m_users[MAX_USER_ROLES];
92  uint8 m_securityStatus;
93  uint8 m_signingStatus;
94  double m_loggedInTime;
95  bool m_writing;
96  SEM_ID m_loginSemaphore;
97 
98 };
99 
100 #endif // __MBCONNECTION_H
101 
102 
Definition: ostask.h:16
Definition: mb_manager.h:24
Definition: mb_connection.h:14
Definition: mb_connection.h:28
Definition: mb.h:534
Definition: stdtypes.h:213