OpenNet
Adapter.h
Aller à la documentation de ce fichier.
1 
2 // Product OpenNet
3 
8 
9 #pragma once
10 
11 // Includes
13 
14 // ===== Includes ===========================================================
15 #include <OpenNetK/Adapter_Types.h>
16 #include <OpenNetK/Constants.h>
17 #include <OpenNetK/IoCtl.h>
19 #include <OpenNetK/Types.h>
20 
21 extern "C"
22 {
23  #include <OpenNetK/OSDep.h>
24 }
25 
26 namespace OpenNetK
27 {
28 
29  class Hardware;
30  class Packet ;
31  class SpinLock;
32 
33  // Class
35 
51  class Adapter
52  {
53 
54  public:
55 
56  typedef void(*Event_Callback)(void *);
57 
71  static bool IoCtl_GetInfo(unsigned int aCode, OpenNetK_IoCtl_Info * aInfo);
72 
81  void FileCleanup( void * aFileObject );
82 
92  void SetHardware(Hardware * aHardware);
93 
102  void SetOSDep( OpenNetK_OSDep * aOSDep );
103 
113  unsigned int Event_GetPendingCount() const;
114 
125  void Event_RegisterCallback(Event_Callback aCallback, void * aContext);
126 
127  // Internal
128 
129  // TODO OpenNetK.Adapter
130  // Normal (Cleanup) - Definir la structure BufferInfo dans un
131  // fichier prive. En faire une classe.
132 
142  typedef struct
143  {
144  Buffer mBuffer;
145 
146  uint8_t * mBase_XA ; // C or M
147  OpenNet_BufferHeader * mHeader_XA; // C or M
148  volatile uint32_t * mMarker_MA;
149  OpenNetK::Packet * mPackets ;
150 
151  struct
152  {
153  unsigned mStopRequested : 1;
154 
155  unsigned mReserved : 31;
156  }
157  mFlags;
158 
159  uint32_t mEvents ;
160  uint32_t mMarkerValue;
161  unsigned int mPacketInfoOffset_byte;
162  volatile long mRx_Counter ;
163  volatile long mTx_Counter ;
164 
165  uint32_t mState;
166 
167  uint8_t mReserved1[28];
168  }
169  BufferInfo;
170 
171  void Init(SpinLock * aZone0);
172 
173  void Buffer_SendPackets(BufferInfo * aBufferInfo);
174 
175  void Disconnect();
176 
177  void Interrupt_Process2(bool * aNeedMoreProcessing);
178  void Interrupt_Process3();
179 
180  int IoCtl( void * aFileObject, unsigned int aCode, const void * aIn, unsigned int aInSize_byte, void * aOut, unsigned int aOutSize_byte);
181 
182  void Tick();
183 
184  private:
185 
186  enum
187  {
188  EVENT_QTY = 128,
189  };
190 
191  typedef struct
192  {
193  unsigned int mCount;
194  unsigned int mPx ;
195  unsigned int mRx ;
196  unsigned int mTx ;
197  }
198  BufferCountAndIndex;
199 
200  void Buffer_InitHeader_Zone0 (OpenNet_BufferHeader * aHeader_XA, const Buffer & aBuffer, Packet * aPackets);
201  bool Buffer_Queue_Zone0 (const Buffer & aBuffer);
202  void Buffer_Release_Zone0 ();
203  void Buffer_Receive_Zone0 (BufferInfo * aBufferInfo);
204  void Buffer_Send_Zone0 (BufferInfo * aBufferInfo);
205  void Buffer_WriteMarker_Zone0(BufferInfo * aBufferInfo);
206 
207  void Event_Report_Zone0(Event_Type aType, uint32_t aData);
208 
209  void Interrupt_Process2_Px_Zone0();
210  void Interrupt_Process2_Rx_Zone0();
211  void Interrupt_Process2_Tx_Zone0();
212 
213  void Stop_Zone0();
214 
215  // ===== Buffer_ State ==============================================
216  void Buffer_EventPending_Zone0(BufferInfo * aBufferInfo);
217  void Buffer_PxRunning_Zone0 (BufferInfo * aBufferInfo);
218  void Buffer_RxRunning_Zone0 (BufferInfo * aBufferInfo);
219  void Buffer_TxRunning_Zone0 (BufferInfo * aBufferInfo);
220 
221  // ===== Buffer_Enter_ State ========================================
222  void Buffer_Enter_RxProgramming_Zone0(BufferInfo * aBufferInfo, unsigned int aIndex, const char * aFrom);
223  void Buffer_Enter_Stopped_Zone0 (BufferInfo * aBufferInfo, unsigned int aIndex, const char * aFrom);
224 
225  // ===== IoCtl ======================================================
226 
227  int IoCtl_Config_Get(Adapter_Config * aOut);
228  int IoCtl_Info_Get (Adapter_Info * aOut) const;
229 
230  int IoCtl_Config_Set (const Adapter_Config * aIn, Adapter_Config * aOut);
231  int IoCtl_PacketGenerator_Config_Set(const PacketGenerator_Config * aIn, PacketGenerator_Config * aOut);
232 
233  int IoCtl_Connect(const void * aIn, void * aOut, void * aFileObject);
234 
235  int IoCtl_Event_Wait (const void * aIn, Event * aOut, unsigned int aOutSize_byte);
236  int IoCtl_Statistics_Get(const void * aIn, uint32_t * aOut, unsigned int aOutSize_byte) const;
237 
238  int IoCtl_Event_Wait_Cancel ();
239  int IoCtl_Packet_Drop ();
240  int IoCtl_PacketGenerator_Stop();
241  int IoCtl_Statistics_Reset ();
242  int IoCtl_Stop ();
243  int IoCtl_Tx_Disable ();
244  int IoCtl_Tx_Enable ();
245 
246  int IoCtl_License_Set(const void * aIn, void * aOut);
247 
248  int IoCtl_Packet_Send_Ex(const void * aIn, unsigned int aInSize_byte);
249 
250  int IoCtl_PacketGenerator_Config_Get(PacketGenerator_Config * aOut);
251  int IoCtl_State_Get (Adapter_State * aOut);
252 
253  int IoCtl_PacketGenerator_Start(void * aFileObject);
254 
255  int IoCtl_Start(const Buffer * aIn, unsigned int aInSize_byte);
256 
257  Adapter ** mAdapters ;
258  unsigned int mAdapterNo;
259  Hardware * mHardware ;
260  unsigned int mSystemId ;
261 
262  void * mConnect_FileObject;
263 
264  PacketGenerator_Config mPacketGenerator_Config ;
265  unsigned int mPacketGenerator_Counter;
266  void * mPacketGenerator_FileObject;
267  long mPacketGenerator_Pending;
268 
269  mutable uint32_t mStatistics[32];
270 
271  OpenNetK_OSDep * mOSDep;
272 
273  mutable uint64_t mStatistics_Start_us;
274 
275  uint32_t mEvaluation_ms;
276  bool mLicenseOk ;
277 
278  Adapter_Info mInfo;
279 
280  // ===== Zone 0 =====================================================
281  SpinLock * mZone0;
282 
283  BufferCountAndIndex mBuffer;
284  BufferInfo mBuffers[OPEN_NET_BUFFER_QTY];
285 
286  Event_Callback mEvent_Callback;
287  void * mEvent_Context ;
288  unsigned int mEvent_In ;
289  unsigned int mEvent_Out ;
290  bool mEvent_Pending ;
291  Event mEvents[EVENT_QTY];
292 
293  };
294 
295 }
Cette structure contient des pointeurs vers les fonctions qui dependes du systeme d'exploitation...
Definition: OSDep.h:178
OpenNet_BufferHeader, OpenNet_PacketInfo (RT)
Cette classe cache les information d'un paquet.
Definition: Packet.h:30
void SetOSDep(OpenNetK_OSDep *aOSDep)
Assigner la structure OSDep.
Cette structure contient les tailles d'espace mémoire qu'un IoCtl accepte.
Definition: IoCtl.h:27
OpenNetK_OSDep.
OpenNetK_IoCtl_Info (DDK)
Cette structure est utilisée pour passer les informations au sujet d'un espace mémoire.
Definition: Types.h:34
Cette structure est utilisée pour passer les informations au sujet d'un espace mémoire.
Definition: Adapter_Types.h:31
Interface d'un spinlock.
Definition: SpinLock.h:36
Cette classe déclare l'interface du materiel.
Definition: Hardware.h:37
#define OPEN_NET_BUFFER_QTY
Le nombre maximum d'espace mémoire pour un Adapter.
Definition: Constants.h:19
Definition: Adapter.h:26
OpenNetK::Adapter_Config, OpenNetK::Adapter_Info, OpenNetK::Adapter_State, OpenNetK::Buffer, OpenNetK::EthernetAddress, OpenNetK::IPv4Address, OpenNetK::VersionInfo (SDK)
void SetHardware(Hardware *aHardware)
Connecter l'instance de la classe Hardware.
static bool IoCtl_GetInfo(unsigned int aCode, OpenNetK_IoCtl_Info *aInfo)
Optenir l'information au sujet d'un code IoCtl.
void Event_RegisterCallback(Event_Callback aCallback, void *aContext)
Assigner la structure OSDep.
OpenNetK::PacketGenerator_Config.
void FileCleanup(void *aFileObject)
Nettoyer à la fermeture d'un fichier.
Cette classe maintien les informations concernant un adaptateur sur le réseau interne OpenNet...
Definition: Adapter.h:51
L'information au sujet d'un espace mémoire. Cette structure n'est pas documenté. Elle peut changer ou...
Definition: Adapter.h:142
unsigned int Event_GetPendingCount() const
Est-ce que des événements sont en attente?