@brief copy data from pa_buf in little endian to host in structure. * @param receive_buffer Received message * @param receive_buffer_length Length of the data in receive_buffer. Might be more than one message * @param encapsulation_data structure to which data shall be copied * @return return difference between bytes in pa_buf an data_length * 0 .. full package received *
| 771 | * <0 .. only fragment of data portion received |
| 772 | */ |
| 773 | EipInt16 CreateEncapsulationStructure(const EipUint8 *receive_buffer, |
| 774 | int receive_buffer_length, |
| 775 | EncapsulationData *const encapsulation_data) |
| 776 | { |
| 777 | encapsulation_data->communication_buffer_start = |
| 778 | (EipUint8 *) receive_buffer; |
| 779 | encapsulation_data->command_code = GetIntFromMessage(&receive_buffer); |
| 780 | encapsulation_data->data_length = GetIntFromMessage(&receive_buffer); |
| 781 | encapsulation_data->session_handle = GetDintFromMessage(&receive_buffer); |
| 782 | encapsulation_data->status = GetDintFromMessage(&receive_buffer); |
| 783 | |
| 784 | memcpy(encapsulation_data->sender_context, receive_buffer, |
| 785 | kSenderContextSize); |
| 786 | receive_buffer += kSenderContextSize; |
| 787 | encapsulation_data->options = GetDintFromMessage(&receive_buffer); |
| 788 | encapsulation_data->current_communication_buffer_position = |
| 789 | (EipUint8 *) receive_buffer; |
| 790 | return (receive_buffer_length - ENCAPSULATION_HEADER_LENGTH |
| 791 | - encapsulation_data->data_length); |
| 792 | } |
| 793 | |
| 794 | /** @brief Check if received package belongs to registered session. |
| 795 | * @param receive_data Received data. |