24 struct sockaddr *originator_address,
25 const int encapsulation_session);
44 if(NULL != assembly_class) {
48 "GetAttributeSingle");
52 "SetAssemblyAttributeSingle");
55 return assembly_class;
68 if(NULL != assembly_class) {
70 while(NULL != instance) {
72 if(NULL != attribute) {
75 instance = instance->
next;
84 if(NULL == assembly_class) {
88 if(NULL == assembly_class) {
97 if(assembly_byte_array == NULL) {
101 assembly_byte_array->
length = data_length;
102 assembly_byte_array->
data = data;
112 &(assembly_byte_array->
length),
125 if(assembly_byte_array->
length != data_length) {
130 memcpy(assembly_byte_array->
data, data, data_length);
140 struct sockaddr *originator_address,
141 const int encapsulation_session) {
145 const EipUint8 *
const router_request_data = message_router_request->
data;
149 (0x80 | message_router_request->
service);
156 if( (attribute != NULL) &&
158 if(attribute->
data != NULL) {
164 "Assembly AssemblyAttributeSingle: received data for connected output assembly\n\r");
170 "Assembly setAssemblyAttributeSingle: not enough data received.\r\n");
176 "Assembly setAssemblyAttributeSingle: too much data received.\r\n");
180 memcpy(data->
data, router_request_data, data->
length);
207 if( (attribute != NULL) &&
void InsertAttribute(CipInstance *const instance, const EipUint16 attribute_number, const EipUint8 cip_type, void *const data, const EipByte cip_flags)
Insert an attribute in an instance of a CIP class.
EipStatus SetAssemblyAttributeSingle(CipInstance *const instance, CipMessageRouterRequest *const message_router_request, CipMessageRouterResponse *const message_router_response, struct sockaddr *originator_address, const int encapsulation_session)
Implementation of the SetAttributeSingle CIP service for Assembly Objects. Currently only supports At...
Tracing infrastructure for OpENer.
CipInstance * CreateAssemblyObject(const EipUint32 instance_id, EipByte *const data, const EipUint16 data_length)
Create an instance of an assembly object.
CipAttributeStruct * attributes
CIP Message Router Request.
Class is a subclass of Instance.
#define OPENER_TRACE_ERR(...)
CipInstance * AddCIPInstance(CipClass *RESTRICT const class, const EipUint32 instance_id)
Create one instance of a given class with a certain instance number.
EipStatus NotifyAssemblyConnectedDataReceived(CipInstance *const instance, const EipUint8 *const data, const EipUint16 data_length)
notify an Assembly object that data has been received for it.
EipStatus CipAssemblyInitialize(void)
create the CIP Assembly object with zero instances
void * CipCalloc(size_t number_of_elements, size_t size_of_element)
Allocate memory for the CIP stack.
CipClass * CreateCipClass(const EipUint32 class_id, const int number_of_class_attributes, const EipUint32 highest_class_attribute_number, const int number_of_class_services, const int number_of_instance_attributes, const EipUint32 highest_instance_attribute_number, const int number_of_instance_services, const int number_of_instances, char *name, const EipUint16 revision, void(*InitializeCipClass)(CipClass *))
EipStatus
EIP stack status enum.
void InsertService(const CipClass *const class, const EipUint8 service_number, const CipServiceFunction service_function, char *const service_name)
Insert a service in an instance of a CIP object.
struct cip_instance * next
EipStatus AfterAssemblyDataReceived(CipInstance *instance)
Call back function to inform application on received data for an assembly object. ...
void ShutdownAssemblies(void)
clean up the data allocated in the assembly object instances
#define OPENER_TRACE_INFO(...)
void CipFree(void *data)
Free memory allocated by the OpENer.
EipStatus GetAttributeSingle(CipInstance *RESTRICT const instance, CipMessageRouterRequest *const message_router_request, CipMessageRouterResponse *const message_router_response, struct sockaddr *originator_address, const int encapsulation_session)
Generic implementation of the GetAttributeSingle CIP service.
CipClass * GetCipClass(const EipUint32 class_id)
Get a pointer to a CIP object with given class code.
CipAttributeStruct * GetCipAttribute(const CipInstance *const instance, const EipUint16 attribute_number)
Get a pointer to an instance's attribute.
EipUint16 attribute_number
uint8_t EipByte
EIP Data type definitions.
#define OPENER_TRACE_WARN(...)
CipClass * CreateAssemblyClass(void)
Constructor for the assembly object class.
CIP Message Router Response.
EipUint32 instance_number
EipBool8 IsConnectedOutputAssembly(const EipUint32 instance_number)
EipInt16 request_path_size
CipUsint size_of_additional_status