OpENeruCPort/OrginalSourceRepo/OpENer-master/source/src/cip/cipcommon.h

224 lines
9.6 KiB
C

/*******************************************************************************
* Copyright (c) 2009, Rockwell Automation, Inc.
* All rights reserved.
*
******************************************************************************/
#ifndef OPENER_CIPCOMMON_H_
#define OPENER_CIPCOMMON_H_
/** @file cipcommon.h
* Common CIP object interface
*/
#include "typedefs.h"
#include "ciptypes.h"
static const EipUint16 kCipUintZero = 0; /**< Zero value for returning the UINT standard value */
/** @brief Check if requested service present in class/instance and call appropriate service.
*
* @param cip_class class receiving the message
* @param message_router_request request message
* @param message_router_response reply message
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return
* - kEipStatusOkSend ... success
* - kEipStatusOk ... no reply to send back
* - kEipStatusError ... error
*/
EipStatus NotifyClass(const CipClass *const RESTRICT cip_class,
CipMessageRouterRequest *const message_router_request,
CipMessageRouterResponse *const message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Get largest instance_number present in class instances
*
* @param cip_class class to be considered
* @return largest instance_number in class instances
*/
CipUint GetMaxInstanceNumber(CipClass *RESTRICT const cip_class);
void GenerateGetAttributeSingleHeader(
const CipMessageRouterRequest *const message_router_request,
CipMessageRouterResponse *const message_router_response);
/** @brief Generic implementation of the GetAttributeSingle CIP service
*
* Check from classID which Object requests an attribute, search if object has
* the appropriate attribute implemented.
* @param instance pointer to instance.
* @param message_router_request pointer to request.
* @param message_router_response pointer to response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return status >0 .. success
* -1 .. requested attribute not available
*/
EipStatus GetAttributeSingle(
CipInstance *RESTRICT const instance,
CipMessageRouterRequest *const
message_router_request,
CipMessageRouterResponse *const
message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
void GenerateSetAttributeSingleHeader(
const CipMessageRouterRequest *const message_router_request,
CipMessageRouterResponse *const message_router_response);
/** @brief Generic implementation of the SetAttributeSingle CIP service
*
* Modifies an attribute value if the requested object has
* the appropriate attribute implemented and if the attribute is settable.
*
* @param instance pointer to instance.
* @param message_router_request pointer to request.
* @param message_router_response pointer to response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return status >0 .. success
* -1 .. requested attribute not set
*/
EipStatus SetAttributeSingle(
CipInstance *RESTRICT const instance,
CipMessageRouterRequest *const
message_router_request,
CipMessageRouterResponse *const
message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Generic implementation of the GetAttributeAll CIP service
*
* Copy all attributes from Object into the global message buffer.
* @param instance pointer to object instance with data.
* @param message_router_request pointer to MR request.
* @param message_router_response pointer for MR response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return length of data stream >0 .. success
* 0 .. no reply to send
*/
EipStatus GetAttributeAll(CipInstance *instance,
CipMessageRouterRequest *message_router_request,
CipMessageRouterResponse *message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Generic implementation of the GetAttributeList CIP service
*
* Copy the contents of the selected gettable attributes of the specified
* object class or instance into the global message buffer.
* @param instance pointer to object instance with data.
* @param message_router_request pointer to MR request.
* @param message_router_response pointer for MR response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return length of data stream >0 .. success
* 0 .. no reply to send
*/
EipStatus GetAttributeList(CipInstance *instance,
CipMessageRouterRequest *message_router_request,
CipMessageRouterResponse *message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Generic implementation of the SetAttributeList CIP service
*
* Sets the values of selected attributes of the specified object class
* or instance.
* @param instance pointer to object instance with data.
* @param message_router_request pointer to MR request.
* @param message_router_response pointer to MR response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return length of data stream >0 .. success
* 0 .. no reply to send
*/
EipStatus SetAttributeList(CipInstance *instance,
CipMessageRouterRequest *message_router_request,
CipMessageRouterResponse *message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Decodes padded EPath
* @param epath EPath object to the receiving element
* @param message pointer to the message to decode
* @param[out] bytes_decoded Location to store the number of bytes consumed
* from the message buffer.
* @return @link EipStatus kEipStatusOk @endlink if successful, or
* @link EipStatus kEipStatusError @endlink if the path
* could not be parsed.
*/
EipStatus DecodePaddedEPath(CipEpath *epath,
const EipUint8 **message,
size_t *const bytes_decoded);
/** @brief Generic implementation of the CIP Create service
*
* Creates dynamically allocated object instance within the specified class.
*
* @param instance pointer to instance.
* @param message_router_request pointer to request.
* @param message_router_response pointer to response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return status >0 .. success
* -1 .. requested instance not created
*/
EipStatus CipCreateService(
CipInstance *RESTRICT const instance,
CipMessageRouterRequest *const
message_router_request,
CipMessageRouterResponse *const
message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Generic implementation of the CIP Delete service
*
* Deletes dynamically allocated object instance within the specified class
* and updates referred class attributes
*
* @param instance pointer to instance.
* @param message_router_request pointer to request.
* @param message_router_response pointer to response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return status >0 .. success
* -1 .. requested instance not deleted
*/
EipStatus CipDeleteService(CipInstance *RESTRICT const instance,
CipMessageRouterRequest *const
message_router_request,
CipMessageRouterResponse *const
message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
/** @brief Generic implementation of the CIP Reset service
*
* Causes a transition to a default state or mode of
* the object instance within the specified class
*
*
* @param instance pointer to instance.
* @param message_router_request pointer to request.
* @param message_router_response pointer to response.
* @param originator_address address struct of the originator as received
* @param encapsulation_session associated encapsulation session of the explicit message
* @return status >0 .. success
* -1 .. requested instance not reseted
*/
EipStatus CipResetService(CipInstance *RESTRICT const instance,
CipMessageRouterRequest *const
message_router_request,
CipMessageRouterResponse *const
message_router_response,
const struct sockaddr *originator_address,
const CipSessionHandle encapsulation_session);
#endif /* OPENER_CIPCOMMON_H_ */