OpENer - Open Source EtherNet/IP(TM) I/O Target Stack  2.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cipclass3connection.c
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright (c) 2011, Rockwell Automation, Inc.
3  * All rights reserved.
4  *
5  ******************************************************************************/
6 
7 #include <string.h>
8 
9 #include "cipclass3connection.h"
10 
11 #include "encap.h"
12 
13 /**** Global variables ****/
16 
18 
22  CloseConnection(connection_object);
23 }
24 
25 /**** Implementation ****/
27  CipConnectionObject *RESTRICT const connection_object,
28  EipUint16 *const extended_error) {
29  EipStatus eip_status = kEipStatusOk;
30 
31  CipConnectionObject *explicit_connection = GetFreeExplicitConnection();
32 
33  if (NULL == explicit_connection) {
34  eip_status = kCipErrorConnectionFailure;
35  *extended_error =
37  } else {
38  ConnectionObjectDeepCopy(explicit_connection, connection_object);
39 
40  ConnectionObjectGeneralConfiguration(explicit_connection);
41 
42  ConnectionObjectSetInstanceType(explicit_connection,
44 
45  /* set the connection call backs */
46  explicit_connection->connection_close_function =
48  /* explicit connection have to be closed on time out*/
49  explicit_connection->connection_timeout_function =
51 
52  AddNewActiveConnection(explicit_connection);
53  }
54  return eip_status;
55 }
56 
62  for (size_t i = 0; i < OPENER_CIP_NUM_EXPLICIT_CONNS; ++i) {
63  if (ConnectionObjectGetState(&(explicit_connection_object_pool[i]) ) ==
65  return &(explicit_connection_object_pool[i]);
66  }
67  }
68  return NULL;
69 }
70 
72  memset( explicit_connection_object_pool, 0,
74 }
75 
77  CipConnectionObject *RESTRICT const connection_object,
78  ConnectionObjectState new_state) {
79  switch(new_state) {
81  ConnectionObjectInitializeEmpty(connection_object);
82  ConnectionObjectSetState(connection_object, new_state);
83  return kEipStatusOk;
84  default: return kEipStatusError;
85  }
86 }
87 
89  CipConnectionObject *RESTRICT const connection_object,
90  ConnectionObjectState new_state) {
91  switch(new_state) {
93  ConnectionObjectSetState(connection_object, new_state);
94  return kEipStatusOk;
95  default: return kEipStatusError;
96  }
97 }
EipStatus EstablishClass3Connection(CipConnectionObject *RESTRICT const connection_object, EipUint16 *const extended_error)
Check if Class3 connection is available and if yes setup all data.
void Class3ConnectionTimeoutHandler(CipConnectionObject *connection_object)
ConnectionObjectState
EipStatus CipClass3ConnectionObjectStateEstablishedHandler(CipConnectionObject *RESTRICT const connection_object, ConnectionObjectState new_state)
void ConnectionObjectSetInstanceType(CipConnectionObject *const connection_object, const ConnectionObjectInstanceType instance_type)
ConnectionCloseFunction connection_close_function
CipConnectionObject explicit_connection_object_pool[OPENER_CIP_NUM_EXPLICIT_CONNS]
Array of the available explicit connections.
void ConnectionObjectInitializeEmpty(CipConnectionObject *const connection_object)
CipConnectionObject * GetFreeExplicitConnection(void)
Searches and returns a free explicit connection slot.
void ConnectionObjectDeepCopy(CipConnectionObject *RESTRICT destination, const CipConnectionObject *RESTRICT const source)
Copy the given connection data from source to destination.
CIP Class 3 connection.
EipStatus
EIP stack status enum.
Definition: typedefs.h:93
void CloseSessionBySessionHandle(const CipConnectionObject *const connection_object)
Definition: encap.c:813
void CloseConnection(CipConnectionObject *RESTRICT connection_object)
Close the given connection.
ConnectionObjectState ConnectionObjectGetState(const CipConnectionObject *const connection_object)
EipStatus CipClass3ConnectionObjectStateNonExistentHandler(CipConnectionObject *RESTRICT const connection_object, ConnectionObjectState new_state)
ConnectionTimeoutFunction connection_timeout_function
#define OPENER_CIP_NUM_EXPLICIT_CONNS
Define the number of supported explicit connections. According to ODVA's PUB 70 this number should be...
void InitializeClass3ConnectionData(void)
Initializes the explicit connections mechanism.
This file contains the public interface of the encapsulation layer.
void ConnectionObjectSetState(CipConnectionObject *const connection_object, const ConnectionObjectState state)
uint16_t EipUint16
Definition: typedefs.h:33
void ConnectionObjectGeneralConfiguration(CipConnectionObject *const connection_object)
Generate the ConnectionIDs and set the general configuration parameter in the given connection object...
void CheckForTimedOutConnectionsAndCloseTCPConnections(const CipConnectionObject *const connection_object, CloseSessionFunction CloseSessions)
void AddNewActiveConnection(const CipConnectionObject *const connection_object)
Insert the given connection object to the list of currently active and managed connections.