Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2022-07-14 10:39:13 +0300
committerDavid Crocker <dcrocker@eschertech.com>2022-07-14 10:39:13 +0300
commitcfd18b0e2c15cc45c748859be4abcfdada5be686 (patch)
tree4f79e8eccf5dd3772cfddf96374745a9c2313191
parent16148ac053acd33422c4e91dd09e4d5aefc2e80b (diff)
Added MulticastDiscovery folder and multicast protocol header
-rw-r--r--src/Networking/LwipEthernet/LwipEthernetInterface.cpp2
-rw-r--r--src/Networking/MulticastDiscovery/MulticastResponder.cpp (renamed from src/Networking/MulticastResponder.cpp)8
-rw-r--r--src/Networking/MulticastDiscovery/MulticastResponder.h (renamed from src/Networking/MulticastResponder.h)0
-rw-r--r--src/Networking/MulticastDiscovery/fgmc_header.h175
-rw-r--r--src/Networking/Network.cpp2
5 files changed, 182 insertions, 5 deletions
diff --git a/src/Networking/LwipEthernet/LwipEthernetInterface.cpp b/src/Networking/LwipEthernet/LwipEthernetInterface.cpp
index 027c4daa..69049406 100644
--- a/src/Networking/LwipEthernet/LwipEthernetInterface.cpp
+++ b/src/Networking/LwipEthernet/LwipEthernetInterface.cpp
@@ -21,7 +21,7 @@
#include <Networking/FtpResponder.h>
#include <Networking/TelnetResponder.h>
#if SUPPORT_MULTICAST_DISCOVERY
-# include <Networking/MulticastResponder.h>
+# include <Networking/MulticastDiscovery/MulticastResponder.h>
#endif
#include <General/IP4String.h>
diff --git a/src/Networking/MulticastResponder.cpp b/src/Networking/MulticastDiscovery/MulticastResponder.cpp
index b040f1dd..16ac0ba3 100644
--- a/src/Networking/MulticastResponder.cpp
+++ b/src/Networking/MulticastDiscovery/MulticastResponder.cpp
@@ -1,13 +1,17 @@
/*
- * MulricastResponder.cpp
+ * MulticastResponder.cpp
*
* Created on: 12 Jul 2022
* Author: David
*/
#include "MulticastResponder.h"
+
+#if SUPPORT_MULTICAST_DISCOVERY
+
#include <Platform/RepRap.h>
#include <Platform/Platform.h>
+#include "fgmc_header.h"
extern "C" {
#include "LwipEthernet/Lwip/src/include/lwip/udp.h"
@@ -15,8 +19,6 @@ extern "C" {
extern struct netif gs_net_if;
}
-#if SUPPORT_MULTICAST_DISCOVERY
-
static udp_pcb *ourPcb = nullptr;
static pbuf * volatile receivedPbuf = nullptr;
static volatile uint32_t receivedIpAddr;
diff --git a/src/Networking/MulticastResponder.h b/src/Networking/MulticastDiscovery/MulticastResponder.h
index 2d57581e..2d57581e 100644
--- a/src/Networking/MulticastResponder.h
+++ b/src/Networking/MulticastDiscovery/MulticastResponder.h
diff --git a/src/Networking/MulticastDiscovery/fgmc_header.h b/src/Networking/MulticastDiscovery/fgmc_header.h
new file mode 100644
index 00000000..5f48f91a
--- /dev/null
+++ b/src/Networking/MulticastDiscovery/fgmc_header.h
@@ -0,0 +1,175 @@
+/// \file
+/// \copyright Festo SE & Co. KG, Esslingen. All rights reserved.
+/// \author erfe
+/// \brief
+///
+
+#ifndef FGMC_HEADER_H
+#define FGMC_HEADER_H
+
+namespace engp {
+
+/// fgmc device id for platform family cmmt
+enum class FGMCHwTypeId : uint32_t { FGMC_DEVICE_ID_ZERO = 0, FGMC_DEVICE_ID_CMMT_AS = 23, FGMC_DEVICE_ID_CMMT_ST = 33 };
+
+/// fgmc error codes
+enum class FGMCErrorCode : int16_t {
+ FGMC_ERROR_CODE_NORMAL = 0,
+ FGMC_ERROR_CODE_CMD_NOT_KNOWN = -1,
+ FGMC_ERROR_CODE_CMD_VERSION_NOT_SUPPORTED = -2,
+ FGMC_ERROR_CODE_CMD_FAILED = -3,
+ FGMC_ERROR_CODE_CMD_SEGMENT_INDEX_MISS = -4
+};
+
+/// fgmc commands
+enum class FGMCCommand : int32_t {
+ MCD_COMMAND_UNKNOWN = 0,
+ MCD_COMMAND_UNETINF = 1,
+ MCD_COMMAND_DNETINF = 2,
+ MCD_COMMAND_DNETINF_REBOOT = 3,
+ MCD_COMMAND_REBOOT = 4,
+ MCD_COMMAND_UPDATE_FIRMWARE = 5,
+ MCD_COMMAND_IDENTIFY = 6,
+ MCD_COMMAND_GET_VERSIONS = 7,
+ MCD_COMMAND_READFILE = 8,
+ MCD_COMMAND_GET_FIRMWARE_VERSION = 9,
+ MCD_COMMAND_GET_SUPPORTED_COMMANDS = 10
+};
+
+/// fgmc command version
+enum class FGMCCommandVersion : uint16_t { MCD_COMMAND_VERSION = 0 };
+
+//
+#define INVALID_EEPROM_DATA_STRING "invalid eeprom data"
+#define INVALID_EEPROM_DATA_STRING_LEN sizeof(INVALID_EEPROM_DATA_STRING) - 1
+
+/// array size definitions
+#define FGMC_NAME "FESTOMULTICAST"
+
+constexpr size_t SIZE_FGMC_NAME = 14;
+constexpr size_t SIZE_FGMC_DEST_ID = 16;
+
+constexpr size_t SIZE_FGMC_RES_MAX = 464; // 461 Bytes for FGMC_ResUploadNetInfoHeader
+
+/// fgmc protocol header
+struct __attribute__((packed)) FGMC_GenericHeader
+{
+ char fgmc_name_[SIZE_FGMC_NAME];
+ uint32_t fgmc_length_;
+ FGMCHwTypeId fgmc_hw_type_id_;
+ char fgmc_destination_id_[SIZE_FGMC_DEST_ID];
+ uint32_t fgmc_packet_id_;
+ uint32_t fgmc_segment_index_;
+ uint32_t fgmc_segment_count_;
+ FGMCCommand fgmc_command_;
+ FGMCCommandVersion fgmc_command_version_;
+ FGMCErrorCode fgmc_error_code_;
+};
+
+/// array size definitions
+constexpr size_t SIZE_MAC_ADDRESS = 6;
+constexpr size_t SIZE_IP_V4 = 4;
+constexpr size_t SIZE_IP_V6 = 16;
+constexpr size_t SIZE_DEVICE_TYPE = 12;
+constexpr size_t SIZE_NOC_CODE = 64;
+constexpr size_t SIZE_SERIAL_NUMBER = 64;
+constexpr size_t SIZE_GENERIC_INFO = 12;
+constexpr size_t SIZE_DEVICE_NAME = 128;
+
+/// fgmc command response header upload network informations
+struct __attribute__((packed)) FGMC_ResUploadNetInfoHeader
+{
+ FGMC_GenericHeader fgmc_header_;
+ char fgmc_mac_address_[SIZE_MAC_ADDRESS];
+ uint32_t fgmc_ip_address_type_;
+ uint8_t fgmc_ip_v4_static_address_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_static_netmask_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_static_gateway_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_static_dns_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v6_static_6_addr_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v6_static_netmask_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v6_static_gateway_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v6_static_dns_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v4_address_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_netmask_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_gateway_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_dns_[SIZE_IP_V4];
+ char fgmc_noc_code_[SIZE_NOC_CODE];
+ int32_t fgmc_ttl_;
+ uint8_t fgmc_connection_state_;
+ char fgmc_device_type_[SIZE_DEVICE_TYPE];
+ char fgmc_serial_number_[SIZE_SERIAL_NUMBER];
+ uint32_t fgmc_application_type_;
+ uint32_t fgmc_application_version_;
+ uint32_t fgmc_application_version_revision_;
+ uint8_t fgmc_generic_info_[SIZE_GENERIC_INFO];
+ char fgmc_device_name_[SIZE_DEVICE_NAME];
+};
+
+/// array size definitions
+constexpr size_t SIZE_PASSWORD = 12;
+
+/// fgmc command request header "download network informations"
+struct __attribute__((packed)) FGMC_ReqDownloadNetInfoHeader
+{
+ uint32_t fgmc_ip_address_type_;
+ uint8_t fgmc_ip_v4_static_address_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_static_netmask_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_static_gateway_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v4_static_dns_[SIZE_IP_V4];
+ uint8_t fgmc_ip_v6_static_6_addr_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v6_static_netmask_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v6_static_gateway_[SIZE_IP_V6];
+ uint8_t fgmc_ip_v6_static_dns_[SIZE_IP_V6];
+ int32_t fgmc_ttl_;
+ char fgmc_device_name_[SIZE_DEVICE_NAME];
+ char fgmc_password_[SIZE_PASSWORD];
+};
+
+/// fgmc command response header "download network informations"
+struct __attribute__((packed)) FGMC_ResDownloadNetInfoHeader
+{
+ FGMC_GenericHeader fgmc_header_;
+};
+
+/// array size definitions
+constexpr uint32_t IDENTIFY_DEFAULT = 0;
+constexpr uint32_t IDENTIFY_ON = 1;
+constexpr uint32_t IDENTIFY_OFF = 2;
+
+/// fgmc command request header "identify"
+struct __attribute__((packed)) FGMC_ReqIdentify
+{
+ int32_t identification_type_;
+ int32_t reserved_;
+};
+
+/// fgmc command response header "identify"
+struct __attribute__((packed)) FGMC_ResIdentify
+{
+ FGMC_GenericHeader fgmc_header_;
+};
+
+/// array size definitions
+constexpr size_t SIZE_MODULE_NAME = 192;
+constexpr size_t SIZE_MODULE_VERSION = 64;
+
+/// fgmc command response header "get firmware version"
+struct __attribute__((packed)) FGMC_ResGetFwVersion
+{
+ FGMC_GenericHeader fgmc_header_;
+ char module_name_[SIZE_MODULE_NAME];
+ char module_version_[SIZE_MODULE_VERSION];
+};
+
+/// fgmc command response header "get supported commands"
+struct __attribute__((packed)) FGMC_ResGetSupportedCommands
+{
+ FGMC_GenericHeader fgmc_header_;
+ uint32_t cmd_;
+ uint16_t cmd_version_;
+};
+
+} // namespace engp
+
+#endif // #ifndef FGMC_HEADER_H
diff --git a/src/Networking/Network.cpp b/src/Networking/Network.cpp
index 0b6f60fe..7a000675 100644
--- a/src/Networking/Network.cpp
+++ b/src/Networking/Network.cpp
@@ -46,7 +46,7 @@
# include "TelnetResponder.h"
#endif
#if SUPPORT_MULTICAST_DISCOVERY
-# include "MulticastResponder.h"
+# include "MulticastDiscovery/MulticastResponder.h"
#endif
#ifdef __LPC17xx__