diff --git a/.cproject b/.cproject
index cbd2d0e..b161db4 100644
--- a/.cproject
+++ b/.cproject
@@ -28,11 +28,11 @@
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
-
-
+
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -268,36 +275,31 @@
-
-
-
-
-
+
+
+
+
-
@@ -312,50 +314,48 @@
-
+
-
-
-
-
-
+
+
+
+
-
@@ -363,7 +363,7 @@
-
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
new file mode 100644
index 0000000..a324ff3
--- /dev/null
+++ b/.settings/language.settings.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Configuration.h b/src/Configuration.h
index 6aabd1d..0664968 100644
--- a/src/Configuration.h
+++ b/src/Configuration.h
@@ -30,11 +30,11 @@ Licence: GPL
#endif
#ifndef VERSION
-#define VERSION "1.10+4"
+#define VERSION "1.11-beta1"
#endif
#ifndef DATE
-#define DATE "2016-03-30"
+#define DATE "2016-04-08"
#endif
#define AUTHORS "reprappro, dc42, zpl, t3p3, dnewman"
diff --git a/src/DriveMovement.h b/src/DriveMovement.h
index 0c00d26..4520d36 100644
--- a/src/DriveMovement.h
+++ b/src/DriveMovement.h
@@ -43,7 +43,7 @@ public:
// Parameters common to Cartesian, delta and extruder moves
- // The following only need to be stored per-drive if we are supporting elasticity compensation
+ // The following only need to be stored per-drive if we are supporting pressure advance
uint64_t twoDistanceToStopTimesCsquaredDivA;
uint32_t startSpeedTimesCdivA;
int32_t accelClocksMinusAccelDistanceTimesCdivTopSpeed; // this one can be negative
@@ -65,7 +65,7 @@ public:
// Parameters unique to a style of move (Cartesian, delta or extruder). Currently, extruders and Cartesian moves use the same parameters.
union MoveParams
{
- struct CartesianParameters // Parameters for Cartesian and extruder movement, including extruder pre-compensation
+ struct CartesianParameters // Parameters for Cartesian and extruder movement, including extruder pressure advance
{
// The following don't depend on how the move is executed, so they could be set up in Init()
uint64_t twoCsquaredTimesMmPerStepDivA; // 2 * clock^2 * mmPerStepInHyperCuboidSpace / acceleration
@@ -73,10 +73,10 @@ public:
// The following depend on how the move is executed, so they must be set up in Prepare()
uint32_t accelStopStep; // the first step number at which we are no longer accelerating
uint32_t decelStartStep; // the first step number at which we are decelerating
- uint32_t reverseStartStep; // the first step number for which we need to reverse direction to to elastic compensation
+ uint32_t reverseStartStep; // the first step number for which we need to reverse direction due to pressure advance
uint32_t mmPerStepTimesCdivtopSpeed; // mmPerStepInHyperCuboidSpace * clock / topSpeed
- // The following only need to be stored per-drive if we are supporting elasticity compensation
+ // The following only need to be stored per-drive if we are supporting pressure advance
int64_t fourMaxStepDistanceMinusTwoDistanceToStopTimesCsquaredDivA; // this one can be negative
} cart;
diff --git a/Libraries/EMAC/arch/cc.h b/src/Duet/EMAC/arch/cc.h
similarity index 100%
rename from Libraries/EMAC/arch/cc.h
rename to src/Duet/EMAC/arch/cc.h
diff --git a/Libraries/EMAC/arch/perf.h b/src/Duet/EMAC/arch/perf.h
similarity index 100%
rename from Libraries/EMAC/arch/perf.h
rename to src/Duet/EMAC/arch/perf.h
diff --git a/src/Duet/EMAC/conf_eth.h b/src/Duet/EMAC/conf_eth.h
new file mode 100644
index 0000000..2908966
--- /dev/null
+++ b/src/Duet/EMAC/conf_eth.h
@@ -0,0 +1,106 @@
+ /**
+ * \file
+ *
+ * \brief EMAC (Ethernet MAC) driver for SAM.
+ *
+ * Copyright (c) 2011-2012 Atmel Corporation. All rights reserved.
+ *
+ * \asf_license_start
+ *
+ * \page License
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The name of Atmel may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * 4. This software may only be redistributed and used in connection with an
+ * Atmel microcontroller product.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * \asf_license_stop
+ *
+ */
+
+
+
+#ifndef CONF_EMAC_H_INCLUDED
+#define CONF_EMAC_H_INCLUDED
+
+#include "Arduino.h"
+
+/** EMAC PHY address */
+#define BOARD_EMAC_PHY_ADDR 2
+/*! EMAC RMII mode */
+#define BOARD_EMAC_MODE_RMII 1
+
+// dc42, 2014-06-01.
+// The following #defines are not used, so I have commented them out.
+// The ones in hardware/arduino/sam/system/libsam/source/emac.c get used instead, and they need to be changed to these values (32 and 8).
+
+/** Number of buffer for RX */
+//#define EMAC_RX_BUFFERS (32)
+
+/** Number of buffer for TX */
+//#define EMAC_TX_BUFFERS (8)
+
+
+/** MAC PHY operation max retry count */
+#define MAC_PHY_RETRY_MAX 1000000
+
+/** MAC address definition. The MAC address must be unique on the network. */
+#define ETHERNET_CONF_ETHADDR0 0xBE
+#define ETHERNET_CONF_ETHADDR1 0xEF
+#define ETHERNET_CONF_ETHADDR2 0xDE
+#define ETHERNET_CONF_ETHADDR3 0xAD
+#define ETHERNET_CONF_ETHADDR4 0xFE
+#define ETHERNET_CONF_ETHADDR5 0xED
+
+/** WAN Address: 192.168.0.2 */
+/* The IP address being used. */
+//*******************************************************************************************
+// Commented out by AB - see ethernet_sam.c
+
+//#define ETHERNET_CONF_IPADDR0 192
+//#define ETHERNET_CONF_IPADDR1 168
+//#define ETHERNET_CONF_IPADDR2 1
+//#define ETHERNET_CONF_IPADDR3 14
+//
+///** WAN gateway: 192.168.0.1 */
+///** The gateway address being used. */
+//#define ETHERNET_CONF_GATEWAY_ADDR0 192
+//#define ETHERNET_CONF_GATEWAY_ADDR1 168
+//#define ETHERNET_CONF_GATEWAY_ADDR2 1
+//#define ETHERNET_CONF_GATEWAY_ADDR3 1
+//
+///** The network mask being used. */
+//#define ETHERNET_CONF_NET_MASK0 255
+//#define ETHERNET_CONF_NET_MASK1 255
+//#define ETHERNET_CONF_NET_MASK2 255
+//#define ETHERNET_CONF_NET_MASK3 0
+
+//********************************************************************************************
+
+/** Ethernet MII/RMII mode */
+#define ETH_PHY_MODE BOARD_EMAC_MODE_RMII
+
+#endif /* CONF_EMAC_H_INCLUDED */
diff --git a/Libraries/EMAC/ethernet_phy.c b/src/Duet/EMAC/ethernet_phy.c
similarity index 100%
rename from Libraries/EMAC/ethernet_phy.c
rename to src/Duet/EMAC/ethernet_phy.c
diff --git a/Libraries/EMAC/ethernet_phy.h b/src/Duet/EMAC/ethernet_phy.h
similarity index 100%
rename from Libraries/EMAC/ethernet_phy.h
rename to src/Duet/EMAC/ethernet_phy.h
diff --git a/Libraries/EMAC/ethernet_sam.c b/src/Duet/EMAC/ethernet_sam.c
similarity index 100%
rename from Libraries/EMAC/ethernet_sam.c
rename to src/Duet/EMAC/ethernet_sam.c
diff --git a/Libraries/EMAC/ethernet_sam.h b/src/Duet/EMAC/ethernet_sam.h
similarity index 100%
rename from Libraries/EMAC/ethernet_sam.h
rename to src/Duet/EMAC/ethernet_sam.h
diff --git a/Libraries/EMAC/ethernetif.c b/src/Duet/EMAC/ethernetif.c
similarity index 100%
rename from Libraries/EMAC/ethernetif.c
rename to src/Duet/EMAC/ethernetif.c
diff --git a/Libraries/EMAC/ethernetif.h b/src/Duet/EMAC/ethernetif.h
similarity index 100%
rename from Libraries/EMAC/ethernetif.h
rename to src/Duet/EMAC/ethernetif.h
diff --git a/Libraries/EMAC/mini_ip.h b/src/Duet/EMAC/mini_ip.h
similarity index 100%
rename from Libraries/EMAC/mini_ip.h
rename to src/Duet/EMAC/mini_ip.h
diff --git a/Libraries/EMAC/rmii.h b/src/Duet/EMAC/rmii.h
similarity index 100%
rename from Libraries/EMAC/rmii.h
rename to src/Duet/EMAC/rmii.h
diff --git a/Libraries/Lwip/CHANGELOG b/src/Duet/Lwip/CHANGELOG
similarity index 100%
rename from Libraries/Lwip/CHANGELOG
rename to src/Duet/Lwip/CHANGELOG
diff --git a/Libraries/Lwip/FILES b/src/Duet/Lwip/FILES
similarity index 100%
rename from Libraries/Lwip/FILES
rename to src/Duet/Lwip/FILES
diff --git a/Libraries/Lwip/README b/src/Duet/Lwip/README
similarity index 100%
rename from Libraries/Lwip/README
rename to src/Duet/Lwip/README
diff --git a/Libraries/Lwip/contrib/apps/mdns/mdns_responder.c b/src/Duet/Lwip/contrib/apps/mdns/mdns_responder.c
similarity index 100%
rename from Libraries/Lwip/contrib/apps/mdns/mdns_responder.c
rename to src/Duet/Lwip/contrib/apps/mdns/mdns_responder.c
diff --git a/Libraries/Lwip/contrib/apps/mdns/mdns_responder.h b/src/Duet/Lwip/contrib/apps/mdns/mdns_responder.h
similarity index 100%
rename from Libraries/Lwip/contrib/apps/mdns/mdns_responder.h
rename to src/Duet/Lwip/contrib/apps/mdns/mdns_responder.h
diff --git a/Libraries/Lwip/contrib/apps/netbios/netbios.c b/src/Duet/Lwip/contrib/apps/netbios/netbios.c
similarity index 100%
rename from Libraries/Lwip/contrib/apps/netbios/netbios.c
rename to src/Duet/Lwip/contrib/apps/netbios/netbios.c
diff --git a/Libraries/Lwip/contrib/apps/netbios/netbios.h b/src/Duet/Lwip/contrib/apps/netbios/netbios.h
similarity index 100%
rename from Libraries/Lwip/contrib/apps/netbios/netbios.h
rename to src/Duet/Lwip/contrib/apps/netbios/netbios.h
diff --git a/Libraries/Lwip/doc/FILES b/src/Duet/Lwip/doc/FILES
similarity index 100%
rename from Libraries/Lwip/doc/FILES
rename to src/Duet/Lwip/doc/FILES
diff --git a/Libraries/Lwip/doc/contrib.txt b/src/Duet/Lwip/doc/contrib.txt
similarity index 100%
rename from Libraries/Lwip/doc/contrib.txt
rename to src/Duet/Lwip/doc/contrib.txt
diff --git a/Libraries/Lwip/doc/rawapi.txt b/src/Duet/Lwip/doc/rawapi.txt
similarity index 100%
rename from Libraries/Lwip/doc/rawapi.txt
rename to src/Duet/Lwip/doc/rawapi.txt
diff --git a/Libraries/Lwip/doc/savannah.txt b/src/Duet/Lwip/doc/savannah.txt
similarity index 100%
rename from Libraries/Lwip/doc/savannah.txt
rename to src/Duet/Lwip/doc/savannah.txt
diff --git a/Libraries/Lwip/doc/snmp_agent.txt b/src/Duet/Lwip/doc/snmp_agent.txt
similarity index 100%
rename from Libraries/Lwip/doc/snmp_agent.txt
rename to src/Duet/Lwip/doc/snmp_agent.txt
diff --git a/Libraries/Lwip/doc/sys_arch.txt b/src/Duet/Lwip/doc/sys_arch.txt
similarity index 100%
rename from Libraries/Lwip/doc/sys_arch.txt
rename to src/Duet/Lwip/doc/sys_arch.txt
diff --git a/Libraries/Lwip/lwip/CHANGELOG b/src/Duet/Lwip/lwip/CHANGELOG
similarity index 100%
rename from Libraries/Lwip/lwip/CHANGELOG
rename to src/Duet/Lwip/lwip/CHANGELOG
diff --git a/Libraries/Lwip/lwip/COPYING b/src/Duet/Lwip/lwip/COPYING
similarity index 100%
rename from Libraries/Lwip/lwip/COPYING
rename to src/Duet/Lwip/lwip/COPYING
diff --git a/Libraries/Lwip/lwip/FILES b/src/Duet/Lwip/lwip/FILES
similarity index 100%
rename from Libraries/Lwip/lwip/FILES
rename to src/Duet/Lwip/lwip/FILES
diff --git a/Libraries/Lwip/lwip/README b/src/Duet/Lwip/lwip/README
similarity index 100%
rename from Libraries/Lwip/lwip/README
rename to src/Duet/Lwip/lwip/README
diff --git a/Libraries/Lwip/lwip/UPGRADING b/src/Duet/Lwip/lwip/UPGRADING
similarity index 100%
rename from Libraries/Lwip/lwip/UPGRADING
rename to src/Duet/Lwip/lwip/UPGRADING
diff --git a/Libraries/Lwip/lwip/doc/FILES b/src/Duet/Lwip/lwip/doc/FILES
similarity index 100%
rename from Libraries/Lwip/lwip/doc/FILES
rename to src/Duet/Lwip/lwip/doc/FILES
diff --git a/Libraries/Lwip/lwip/doc/contrib.txt b/src/Duet/Lwip/lwip/doc/contrib.txt
similarity index 100%
rename from Libraries/Lwip/lwip/doc/contrib.txt
rename to src/Duet/Lwip/lwip/doc/contrib.txt
diff --git a/Libraries/Lwip/lwip/doc/rawapi.txt b/src/Duet/Lwip/lwip/doc/rawapi.txt
similarity index 100%
rename from Libraries/Lwip/lwip/doc/rawapi.txt
rename to src/Duet/Lwip/lwip/doc/rawapi.txt
diff --git a/Libraries/Lwip/lwip/doc/savannah.txt b/src/Duet/Lwip/lwip/doc/savannah.txt
similarity index 100%
rename from Libraries/Lwip/lwip/doc/savannah.txt
rename to src/Duet/Lwip/lwip/doc/savannah.txt
diff --git a/Libraries/Lwip/lwip/doc/snmp_agent.txt b/src/Duet/Lwip/lwip/doc/snmp_agent.txt
similarity index 100%
rename from Libraries/Lwip/lwip/doc/snmp_agent.txt
rename to src/Duet/Lwip/lwip/doc/snmp_agent.txt
diff --git a/Libraries/Lwip/lwip/doc/sys_arch.txt b/src/Duet/Lwip/lwip/doc/sys_arch.txt
similarity index 100%
rename from Libraries/Lwip/lwip/doc/sys_arch.txt
rename to src/Duet/Lwip/lwip/doc/sys_arch.txt
diff --git a/Libraries/Lwip/lwip/src/FILES b/src/Duet/Lwip/lwip/src/FILES
similarity index 100%
rename from Libraries/Lwip/lwip/src/FILES
rename to src/Duet/Lwip/lwip/src/FILES
diff --git a/Libraries/Lwip/lwip/src/api/api_lib.c b/src/Duet/Lwip/lwip/src/api/api_lib.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/api_lib.c
rename to src/Duet/Lwip/lwip/src/api/api_lib.c
diff --git a/Libraries/Lwip/lwip/src/api/api_msg.c b/src/Duet/Lwip/lwip/src/api/api_msg.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/api_msg.c
rename to src/Duet/Lwip/lwip/src/api/api_msg.c
diff --git a/Libraries/Lwip/lwip/src/api/err.c b/src/Duet/Lwip/lwip/src/api/err.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/err.c
rename to src/Duet/Lwip/lwip/src/api/err.c
diff --git a/Libraries/Lwip/lwip/src/api/netbuf.c b/src/Duet/Lwip/lwip/src/api/netbuf.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/netbuf.c
rename to src/Duet/Lwip/lwip/src/api/netbuf.c
diff --git a/Libraries/Lwip/lwip/src/api/netdb.c b/src/Duet/Lwip/lwip/src/api/netdb.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/netdb.c
rename to src/Duet/Lwip/lwip/src/api/netdb.c
diff --git a/Libraries/Lwip/lwip/src/api/netifapi.c b/src/Duet/Lwip/lwip/src/api/netifapi.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/netifapi.c
rename to src/Duet/Lwip/lwip/src/api/netifapi.c
diff --git a/Libraries/Lwip/lwip/src/api/sockets.c b/src/Duet/Lwip/lwip/src/api/sockets.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/sockets.c
rename to src/Duet/Lwip/lwip/src/api/sockets.c
diff --git a/Libraries/Lwip/lwip/src/api/tcpip.c b/src/Duet/Lwip/lwip/src/api/tcpip.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/api/tcpip.c
rename to src/Duet/Lwip/lwip/src/api/tcpip.c
diff --git a/Libraries/Lwip/lwip/src/core/def.c b/src/Duet/Lwip/lwip/src/core/def.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/def.c
rename to src/Duet/Lwip/lwip/src/core/def.c
diff --git a/Libraries/Lwip/lwip/src/core/dhcp.c b/src/Duet/Lwip/lwip/src/core/dhcp.c
similarity index 99%
rename from Libraries/Lwip/lwip/src/core/dhcp.c
rename to src/Duet/Lwip/lwip/src/core/dhcp.c
index efd7dac..9b3b2f1 100644
--- a/Libraries/Lwip/lwip/src/core/dhcp.c
+++ b/src/Duet/Lwip/lwip/src/core/dhcp.c
@@ -1705,8 +1705,12 @@ dhcp_create_msg(struct netif *netif, struct dhcp *dhcp, u8_t message_type)
ip_addr_set_zero(&dhcp->msg_out->siaddr);
ip_addr_set_zero(&dhcp->msg_out->giaddr);
for (i = 0; i < DHCP_CHADDR_LEN; i++) {
- /* copy netif hardware address, pad with zeroes */
+ /* copy netif hardware address, pad with zeroes */
+#if 1 // dc42 change to avoid gcc warning of array index out of bounds - looks like a gcc bug to me
+ dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len && i < NETIF_MAX_HWADDR_LEN) ? netif->hwaddr[i] : 0/* pad byte*/;
+#else
dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/;
+#endif
}
for (i = 0; i < DHCP_SNAME_LEN; i++) {
dhcp->msg_out->sname[i] = 0;
diff --git a/Libraries/Lwip/lwip/src/core/dns.c b/src/Duet/Lwip/lwip/src/core/dns.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/dns.c
rename to src/Duet/Lwip/lwip/src/core/dns.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/autoip.c b/src/Duet/Lwip/lwip/src/core/ipv4/autoip.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/autoip.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/autoip.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/icmp.c b/src/Duet/Lwip/lwip/src/core/ipv4/icmp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/icmp.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/icmp.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/igmp.c b/src/Duet/Lwip/lwip/src/core/ipv4/igmp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/igmp.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/igmp.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/inet.c b/src/Duet/Lwip/lwip/src/core/ipv4/inet.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/inet.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/inet.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/inet_chksum.c b/src/Duet/Lwip/lwip/src/core/ipv4/inet_chksum.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/inet_chksum.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/inet_chksum.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/ip.c b/src/Duet/Lwip/lwip/src/core/ipv4/ip.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/ip.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/ip.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/ip_addr.c b/src/Duet/Lwip/lwip/src/core/ipv4/ip_addr.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/ip_addr.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/ip_addr.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv4/ip_frag.c b/src/Duet/Lwip/lwip/src/core/ipv4/ip_frag.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv4/ip_frag.c
rename to src/Duet/Lwip/lwip/src/core/ipv4/ip_frag.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv6/README b/src/Duet/Lwip/lwip/src/core/ipv6/README
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv6/README
rename to src/Duet/Lwip/lwip/src/core/ipv6/README
diff --git a/Libraries/Lwip/lwip/src/core/ipv6/icmp6.c b/src/Duet/Lwip/lwip/src/core/ipv6/icmp6.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv6/icmp6.c
rename to src/Duet/Lwip/lwip/src/core/ipv6/icmp6.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv6/inet6.c b/src/Duet/Lwip/lwip/src/core/ipv6/inet6.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv6/inet6.c
rename to src/Duet/Lwip/lwip/src/core/ipv6/inet6.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv6/ip6.c b/src/Duet/Lwip/lwip/src/core/ipv6/ip6.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv6/ip6.c
rename to src/Duet/Lwip/lwip/src/core/ipv6/ip6.c
diff --git a/Libraries/Lwip/lwip/src/core/ipv6/ip6_addr.c b/src/Duet/Lwip/lwip/src/core/ipv6/ip6_addr.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/ipv6/ip6_addr.c
rename to src/Duet/Lwip/lwip/src/core/ipv6/ip6_addr.c
diff --git a/Libraries/Lwip/lwip/src/core/lwip_init.c b/src/Duet/Lwip/lwip/src/core/lwip_init.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/lwip_init.c
rename to src/Duet/Lwip/lwip/src/core/lwip_init.c
diff --git a/Libraries/Lwip/lwip/src/core/lwip_timers_141.c b/src/Duet/Lwip/lwip/src/core/lwip_timers_141.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/lwip_timers_141.c
rename to src/Duet/Lwip/lwip/src/core/lwip_timers_141.c
diff --git a/Libraries/Lwip/lwip/src/core/mem.c b/src/Duet/Lwip/lwip/src/core/mem.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/mem.c
rename to src/Duet/Lwip/lwip/src/core/mem.c
diff --git a/Libraries/Lwip/lwip/src/core/memp.c b/src/Duet/Lwip/lwip/src/core/memp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/memp.c
rename to src/Duet/Lwip/lwip/src/core/memp.c
diff --git a/Libraries/Lwip/lwip/src/core/netif.c b/src/Duet/Lwip/lwip/src/core/netif.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/netif.c
rename to src/Duet/Lwip/lwip/src/core/netif.c
diff --git a/Libraries/Lwip/lwip/src/core/pbuf.c b/src/Duet/Lwip/lwip/src/core/pbuf.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/pbuf.c
rename to src/Duet/Lwip/lwip/src/core/pbuf.c
diff --git a/Libraries/Lwip/lwip/src/core/raw.c b/src/Duet/Lwip/lwip/src/core/raw.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/raw.c
rename to src/Duet/Lwip/lwip/src/core/raw.c
diff --git a/Libraries/Lwip/lwip/src/core/snmp/asn1_dec.c b/src/Duet/Lwip/lwip/src/core/snmp/asn1_dec.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/snmp/asn1_dec.c
rename to src/Duet/Lwip/lwip/src/core/snmp/asn1_dec.c
diff --git a/Libraries/Lwip/lwip/src/core/snmp/asn1_enc.c b/src/Duet/Lwip/lwip/src/core/snmp/asn1_enc.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/snmp/asn1_enc.c
rename to src/Duet/Lwip/lwip/src/core/snmp/asn1_enc.c
diff --git a/Libraries/Lwip/lwip/src/core/snmp/mib2.c b/src/Duet/Lwip/lwip/src/core/snmp/mib2.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/snmp/mib2.c
rename to src/Duet/Lwip/lwip/src/core/snmp/mib2.c
diff --git a/Libraries/Lwip/lwip/src/core/snmp/mib_structs.c b/src/Duet/Lwip/lwip/src/core/snmp/mib_structs.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/snmp/mib_structs.c
rename to src/Duet/Lwip/lwip/src/core/snmp/mib_structs.c
diff --git a/Libraries/Lwip/lwip/src/core/snmp/msg_in.c b/src/Duet/Lwip/lwip/src/core/snmp/msg_in.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/snmp/msg_in.c
rename to src/Duet/Lwip/lwip/src/core/snmp/msg_in.c
diff --git a/Libraries/Lwip/lwip/src/core/snmp/msg_out.c b/src/Duet/Lwip/lwip/src/core/snmp/msg_out.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/snmp/msg_out.c
rename to src/Duet/Lwip/lwip/src/core/snmp/msg_out.c
diff --git a/Libraries/Lwip/lwip/src/core/stats.c b/src/Duet/Lwip/lwip/src/core/stats.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/stats.c
rename to src/Duet/Lwip/lwip/src/core/stats.c
diff --git a/Libraries/Lwip/lwip/src/core/sys.c b/src/Duet/Lwip/lwip/src/core/sys.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/sys.c
rename to src/Duet/Lwip/lwip/src/core/sys.c
diff --git a/Libraries/Lwip/lwip/src/core/tcp.c b/src/Duet/Lwip/lwip/src/core/tcp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/tcp.c
rename to src/Duet/Lwip/lwip/src/core/tcp.c
diff --git a/Libraries/Lwip/lwip/src/core/tcp_in.c b/src/Duet/Lwip/lwip/src/core/tcp_in.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/tcp_in.c
rename to src/Duet/Lwip/lwip/src/core/tcp_in.c
diff --git a/Libraries/Lwip/lwip/src/core/tcp_out.c b/src/Duet/Lwip/lwip/src/core/tcp_out.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/tcp_out.c
rename to src/Duet/Lwip/lwip/src/core/tcp_out.c
diff --git a/Libraries/Lwip/lwip/src/core/udp.c b/src/Duet/Lwip/lwip/src/core/udp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/core/udp.c
rename to src/Duet/Lwip/lwip/src/core/udp.c
diff --git a/Libraries/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxyfile.doxygen b/src/Duet/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxyfile.doxygen
similarity index 100%
rename from Libraries/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxyfile.doxygen
rename to src/Duet/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxyfile.doxygen
diff --git a/Libraries/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxygen_module_mainpage.h b/src/Duet/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxygen_module_mainpage.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxygen_module_mainpage.h
rename to src/Duet/Lwip/lwip/src/doxygen/thirdparty.lwip.141/doxygen_module_mainpage.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/autoip.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/autoip.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/autoip.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/autoip.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/icmp.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/icmp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/icmp.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/icmp.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/igmp.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/igmp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/igmp.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/igmp.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/inet.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/inet.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/inet.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/inet.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/inet_chksum.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/inet_chksum.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/inet_chksum.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/inet_chksum.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/ip.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/ip.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/ip.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/ip.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/ip_addr.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/ip_addr.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/ip_addr.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/ip_addr.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv4/lwip/ip_frag.h b/src/Duet/Lwip/lwip/src/include/ipv4/lwip/ip_frag.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv4/lwip/ip_frag.h
rename to src/Duet/Lwip/lwip/src/include/ipv4/lwip/ip_frag.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv6/lwip/icmp.h b/src/Duet/Lwip/lwip/src/include/ipv6/lwip/icmp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv6/lwip/icmp.h
rename to src/Duet/Lwip/lwip/src/include/ipv6/lwip/icmp.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv6/lwip/inet.h b/src/Duet/Lwip/lwip/src/include/ipv6/lwip/inet.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv6/lwip/inet.h
rename to src/Duet/Lwip/lwip/src/include/ipv6/lwip/inet.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv6/lwip/ip.h b/src/Duet/Lwip/lwip/src/include/ipv6/lwip/ip.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv6/lwip/ip.h
rename to src/Duet/Lwip/lwip/src/include/ipv6/lwip/ip.h
diff --git a/Libraries/Lwip/lwip/src/include/ipv6/lwip/ip_addr.h b/src/Duet/Lwip/lwip/src/include/ipv6/lwip/ip_addr.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/ipv6/lwip/ip_addr.h
rename to src/Duet/Lwip/lwip/src/include/ipv6/lwip/ip_addr.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/api.h b/src/Duet/Lwip/lwip/src/include/lwip/api.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/api.h
rename to src/Duet/Lwip/lwip/src/include/lwip/api.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/api_msg.h b/src/Duet/Lwip/lwip/src/include/lwip/api_msg.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/api_msg.h
rename to src/Duet/Lwip/lwip/src/include/lwip/api_msg.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/arch.h b/src/Duet/Lwip/lwip/src/include/lwip/arch.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/arch.h
rename to src/Duet/Lwip/lwip/src/include/lwip/arch.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/debug.h b/src/Duet/Lwip/lwip/src/include/lwip/debug.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/debug.h
rename to src/Duet/Lwip/lwip/src/include/lwip/debug.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/def.h b/src/Duet/Lwip/lwip/src/include/lwip/def.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/def.h
rename to src/Duet/Lwip/lwip/src/include/lwip/def.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/dhcp.h b/src/Duet/Lwip/lwip/src/include/lwip/dhcp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/dhcp.h
rename to src/Duet/Lwip/lwip/src/include/lwip/dhcp.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/dns.h b/src/Duet/Lwip/lwip/src/include/lwip/dns.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/dns.h
rename to src/Duet/Lwip/lwip/src/include/lwip/dns.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/err.h b/src/Duet/Lwip/lwip/src/include/lwip/err.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/err.h
rename to src/Duet/Lwip/lwip/src/include/lwip/err.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/init.h b/src/Duet/Lwip/lwip/src/include/lwip/init.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/init.h
rename to src/Duet/Lwip/lwip/src/include/lwip/init.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/mem.h b/src/Duet/Lwip/lwip/src/include/lwip/mem.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/mem.h
rename to src/Duet/Lwip/lwip/src/include/lwip/mem.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/memp.h b/src/Duet/Lwip/lwip/src/include/lwip/memp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/memp.h
rename to src/Duet/Lwip/lwip/src/include/lwip/memp.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/memp_std.h b/src/Duet/Lwip/lwip/src/include/lwip/memp_std.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/memp_std.h
rename to src/Duet/Lwip/lwip/src/include/lwip/memp_std.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/netbuf.h b/src/Duet/Lwip/lwip/src/include/lwip/netbuf.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/netbuf.h
rename to src/Duet/Lwip/lwip/src/include/lwip/netbuf.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/netdb.h b/src/Duet/Lwip/lwip/src/include/lwip/netdb.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/netdb.h
rename to src/Duet/Lwip/lwip/src/include/lwip/netdb.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/netif.h b/src/Duet/Lwip/lwip/src/include/lwip/netif.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/netif.h
rename to src/Duet/Lwip/lwip/src/include/lwip/netif.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/netifapi.h b/src/Duet/Lwip/lwip/src/include/lwip/netifapi.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/netifapi.h
rename to src/Duet/Lwip/lwip/src/include/lwip/netifapi.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/opt.h b/src/Duet/Lwip/lwip/src/include/lwip/opt.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/opt.h
rename to src/Duet/Lwip/lwip/src/include/lwip/opt.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/pbuf.h b/src/Duet/Lwip/lwip/src/include/lwip/pbuf.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/pbuf.h
rename to src/Duet/Lwip/lwip/src/include/lwip/pbuf.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/raw.h b/src/Duet/Lwip/lwip/src/include/lwip/raw.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/raw.h
rename to src/Duet/Lwip/lwip/src/include/lwip/raw.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/sio.h b/src/Duet/Lwip/lwip/src/include/lwip/sio.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/sio.h
rename to src/Duet/Lwip/lwip/src/include/lwip/sio.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/snmp.h b/src/Duet/Lwip/lwip/src/include/lwip/snmp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/snmp.h
rename to src/Duet/Lwip/lwip/src/include/lwip/snmp.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/snmp_asn1.h b/src/Duet/Lwip/lwip/src/include/lwip/snmp_asn1.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/snmp_asn1.h
rename to src/Duet/Lwip/lwip/src/include/lwip/snmp_asn1.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/snmp_msg.h b/src/Duet/Lwip/lwip/src/include/lwip/snmp_msg.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/snmp_msg.h
rename to src/Duet/Lwip/lwip/src/include/lwip/snmp_msg.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/snmp_structs.h b/src/Duet/Lwip/lwip/src/include/lwip/snmp_structs.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/snmp_structs.h
rename to src/Duet/Lwip/lwip/src/include/lwip/snmp_structs.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/sockets.h b/src/Duet/Lwip/lwip/src/include/lwip/sockets.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/sockets.h
rename to src/Duet/Lwip/lwip/src/include/lwip/sockets.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/stats.h b/src/Duet/Lwip/lwip/src/include/lwip/stats.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/stats.h
rename to src/Duet/Lwip/lwip/src/include/lwip/stats.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/sys.h b/src/Duet/Lwip/lwip/src/include/lwip/sys.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/sys.h
rename to src/Duet/Lwip/lwip/src/include/lwip/sys.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/tcp.h b/src/Duet/Lwip/lwip/src/include/lwip/tcp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/tcp.h
rename to src/Duet/Lwip/lwip/src/include/lwip/tcp.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/tcp_impl.h b/src/Duet/Lwip/lwip/src/include/lwip/tcp_impl.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/tcp_impl.h
rename to src/Duet/Lwip/lwip/src/include/lwip/tcp_impl.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/tcpip.h b/src/Duet/Lwip/lwip/src/include/lwip/tcpip.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/tcpip.h
rename to src/Duet/Lwip/lwip/src/include/lwip/tcpip.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/timers.h b/src/Duet/Lwip/lwip/src/include/lwip/timers.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/timers.h
rename to src/Duet/Lwip/lwip/src/include/lwip/timers.h
diff --git a/Libraries/Lwip/lwip/src/include/lwip/udp.h b/src/Duet/Lwip/lwip/src/include/lwip/udp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/lwip/udp.h
rename to src/Duet/Lwip/lwip/src/include/lwip/udp.h
diff --git a/Libraries/Lwip/lwip/src/include/netif/etharp.h b/src/Duet/Lwip/lwip/src/include/netif/etharp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/netif/etharp.h
rename to src/Duet/Lwip/lwip/src/include/netif/etharp.h
diff --git a/Libraries/Lwip/lwip/src/include/netif/ppp_oe.h b/src/Duet/Lwip/lwip/src/include/netif/ppp_oe.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/netif/ppp_oe.h
rename to src/Duet/Lwip/lwip/src/include/netif/ppp_oe.h
diff --git a/Libraries/Lwip/lwip/src/include/netif/slipif.h b/src/Duet/Lwip/lwip/src/include/netif/slipif.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/include/netif/slipif.h
rename to src/Duet/Lwip/lwip/src/include/netif/slipif.h
diff --git a/Libraries/Lwip/lwip/src/netif/FILES b/src/Duet/Lwip/lwip/src/netif/FILES
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/FILES
rename to src/Duet/Lwip/lwip/src/netif/FILES
diff --git a/Libraries/Lwip/lwip/src/netif/etharp.c b/src/Duet/Lwip/lwip/src/netif/etharp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/etharp.c
rename to src/Duet/Lwip/lwip/src/netif/etharp.c
diff --git a/Libraries/Lwip/lwip/src/netif/ethernetif.c b/src/Duet/Lwip/lwip/src/netif/ethernetif.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ethernetif.c
rename to src/Duet/Lwip/lwip/src/netif/ethernetif.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/auth.c b/src/Duet/Lwip/lwip/src/netif/ppp/auth.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/auth.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/auth.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/auth.h b/src/Duet/Lwip/lwip/src/netif/ppp/auth.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/auth.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/auth.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/chap.c b/src/Duet/Lwip/lwip/src/netif/ppp/chap.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/chap.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/chap.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/chap.h b/src/Duet/Lwip/lwip/src/netif/ppp/chap.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/chap.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/chap.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/chpms.c b/src/Duet/Lwip/lwip/src/netif/ppp/chpms.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/chpms.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/chpms.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/chpms.h b/src/Duet/Lwip/lwip/src/netif/ppp/chpms.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/chpms.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/chpms.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/fsm.c b/src/Duet/Lwip/lwip/src/netif/ppp/fsm.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/fsm.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/fsm.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/fsm.h b/src/Duet/Lwip/lwip/src/netif/ppp/fsm.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/fsm.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/fsm.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/ipcp.c b/src/Duet/Lwip/lwip/src/netif/ppp/ipcp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/ipcp.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/ipcp.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/ipcp.h b/src/Duet/Lwip/lwip/src/netif/ppp/ipcp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/ipcp.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/ipcp.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/lcp.c b/src/Duet/Lwip/lwip/src/netif/ppp/lcp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/lcp.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/lcp.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/lcp.h b/src/Duet/Lwip/lwip/src/netif/ppp/lcp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/lcp.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/lcp.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/magic.c b/src/Duet/Lwip/lwip/src/netif/ppp/magic.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/magic.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/magic.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/magic.h b/src/Duet/Lwip/lwip/src/netif/ppp/magic.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/magic.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/magic.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/md5.c b/src/Duet/Lwip/lwip/src/netif/ppp/md5.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/md5.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/md5.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/md5.h b/src/Duet/Lwip/lwip/src/netif/ppp/md5.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/md5.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/md5.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/pap.c b/src/Duet/Lwip/lwip/src/netif/ppp/pap.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/pap.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/pap.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/pap.h b/src/Duet/Lwip/lwip/src/netif/ppp/pap.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/pap.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/pap.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/ppp.c b/src/Duet/Lwip/lwip/src/netif/ppp/ppp.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/ppp.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/ppp.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/ppp.h b/src/Duet/Lwip/lwip/src/netif/ppp/ppp.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/ppp.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/ppp.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/ppp_impl.h b/src/Duet/Lwip/lwip/src/netif/ppp/ppp_impl.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/ppp_impl.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/ppp_impl.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/ppp_oe.c b/src/Duet/Lwip/lwip/src/netif/ppp/ppp_oe.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/ppp_oe.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/ppp_oe.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/pppdebug.h b/src/Duet/Lwip/lwip/src/netif/ppp/pppdebug.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/pppdebug.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/pppdebug.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/randm.c b/src/Duet/Lwip/lwip/src/netif/ppp/randm.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/randm.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/randm.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/randm.h b/src/Duet/Lwip/lwip/src/netif/ppp/randm.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/randm.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/randm.h
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/vj.c b/src/Duet/Lwip/lwip/src/netif/ppp/vj.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/vj.c
rename to src/Duet/Lwip/lwip/src/netif/ppp/vj.c
diff --git a/Libraries/Lwip/lwip/src/netif/ppp/vj.h b/src/Duet/Lwip/lwip/src/netif/ppp/vj.h
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/ppp/vj.h
rename to src/Duet/Lwip/lwip/src/netif/ppp/vj.h
diff --git a/Libraries/Lwip/lwip/src/netif/slipif.c b/src/Duet/Lwip/lwip/src/netif/slipif.c
similarity index 100%
rename from Libraries/Lwip/lwip/src/netif/slipif.c
rename to src/Duet/Lwip/lwip/src/netif/slipif.c
diff --git a/Libraries/Lwip/lwip/test/unit/core/test_mem.c b/src/Duet/Lwip/lwip/test/unit/core/test_mem.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/core/test_mem.c
rename to src/Duet/Lwip/lwip/test/unit/core/test_mem.c
diff --git a/Libraries/Lwip/lwip/test/unit/core/test_mem.h b/src/Duet/Lwip/lwip/test/unit/core/test_mem.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/core/test_mem.h
rename to src/Duet/Lwip/lwip/test/unit/core/test_mem.h
diff --git a/Libraries/Lwip/lwip/test/unit/etharp/test_etharp.c b/src/Duet/Lwip/lwip/test/unit/etharp/test_etharp.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/etharp/test_etharp.c
rename to src/Duet/Lwip/lwip/test/unit/etharp/test_etharp.c
diff --git a/Libraries/Lwip/lwip/test/unit/etharp/test_etharp.h b/src/Duet/Lwip/lwip/test/unit/etharp/test_etharp.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/etharp/test_etharp.h
rename to src/Duet/Lwip/lwip/test/unit/etharp/test_etharp.h
diff --git a/Libraries/Lwip/lwip/test/unit/lwip_check.h b/src/Duet/Lwip/lwip/test/unit/lwip_check.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/lwip_check.h
rename to src/Duet/Lwip/lwip/test/unit/lwip_check.h
diff --git a/Libraries/Lwip/lwip/test/unit/lwip_unittests.c b/src/Duet/Lwip/lwip/test/unit/lwip_unittests.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/lwip_unittests.c
rename to src/Duet/Lwip/lwip/test/unit/lwip_unittests.c
diff --git a/Libraries/Lwip/lwip/test/unit/lwipopts.h b/src/Duet/Lwip/lwip/test/unit/lwipopts.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/lwipopts.h
rename to src/Duet/Lwip/lwip/test/unit/lwipopts.h
diff --git a/Libraries/Lwip/lwip/test/unit/tcp/tcp_helper.c b/src/Duet/Lwip/lwip/test/unit/tcp/tcp_helper.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/tcp/tcp_helper.c
rename to src/Duet/Lwip/lwip/test/unit/tcp/tcp_helper.c
diff --git a/Libraries/Lwip/lwip/test/unit/tcp/tcp_helper.h b/src/Duet/Lwip/lwip/test/unit/tcp/tcp_helper.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/tcp/tcp_helper.h
rename to src/Duet/Lwip/lwip/test/unit/tcp/tcp_helper.h
diff --git a/Libraries/Lwip/lwip/test/unit/tcp/test_tcp.c b/src/Duet/Lwip/lwip/test/unit/tcp/test_tcp.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/tcp/test_tcp.c
rename to src/Duet/Lwip/lwip/test/unit/tcp/test_tcp.c
diff --git a/Libraries/Lwip/lwip/test/unit/tcp/test_tcp.h b/src/Duet/Lwip/lwip/test/unit/tcp/test_tcp.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/tcp/test_tcp.h
rename to src/Duet/Lwip/lwip/test/unit/tcp/test_tcp.h
diff --git a/Libraries/Lwip/lwip/test/unit/tcp/test_tcp_oos.c b/src/Duet/Lwip/lwip/test/unit/tcp/test_tcp_oos.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/tcp/test_tcp_oos.c
rename to src/Duet/Lwip/lwip/test/unit/tcp/test_tcp_oos.c
diff --git a/Libraries/Lwip/lwip/test/unit/tcp/test_tcp_oos.h b/src/Duet/Lwip/lwip/test/unit/tcp/test_tcp_oos.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/tcp/test_tcp_oos.h
rename to src/Duet/Lwip/lwip/test/unit/tcp/test_tcp_oos.h
diff --git a/Libraries/Lwip/lwip/test/unit/udp/test_udp.c b/src/Duet/Lwip/lwip/test/unit/udp/test_udp.c
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/udp/test_udp.c
rename to src/Duet/Lwip/lwip/test/unit/udp/test_udp.c
diff --git a/Libraries/Lwip/lwip/test/unit/udp/test_udp.h b/src/Duet/Lwip/lwip/test/unit/udp/test_udp.h
similarity index 100%
rename from Libraries/Lwip/lwip/test/unit/udp/test_udp.h
rename to src/Duet/Lwip/lwip/test/unit/udp/test_udp.h
diff --git a/Libraries/Lwip/lwipopts.h b/src/Duet/Lwip/lwipopts.h
similarity index 100%
rename from Libraries/Lwip/lwipopts.h
rename to src/Duet/Lwip/lwipopts.h
diff --git a/src/Network.cpp b/src/Duet/Network.cpp
similarity index 100%
rename from src/Network.cpp
rename to src/Duet/Network.cpp
diff --git a/src/Network.h b/src/Duet/Network.h
similarity index 100%
rename from src/Network.h
rename to src/Duet/Network.h
diff --git a/src/Pins_duet.h b/src/Duet/Pins_duet.h
similarity index 92%
rename from src/Pins_duet.h
rename to src/Duet/Pins_duet.h
index 30195b7..0430708 100644
--- a/src/Pins_duet.h
+++ b/src/Duet/Pins_duet.h
@@ -93,6 +93,9 @@ const Pin Z_PROBE_PIN = 10; // Analogue pin number
const Pin Z_PROBE_MOD_PIN = 52; // Digital pin number to turn the IR LED on (high) or off (low) on Duet v0.6 and v1.0 (PB21)
const Pin Z_PROBE_MOD_PIN07 = X12; // Digital pin number to turn the IR LED on (high) or off (low) on Duet v0.7 and v0.8.5 (PC10)
+// Pin number that the DAC that controls the second extruder motor current on the Duet 0.8.5 is connected to
+const int Dac0DigitalPin = 66; // Arduino Due pin number corresponding to DAC0 output pin
+
// COOLING FANS
const size_t NUM_FANS = 2;
@@ -150,4 +153,15 @@ const size_t NUM_PINS_ALLOWED = 72;
const uint32_t IAP_FLASH_START = 0x000F0000;
const uint32_t IAP_FLASH_END = 0x000FFFFF;
+// Timer allocation
+#define NETWORK_TC (TC1)
+#define NETWORK_TC_CHAN (1)
+#define NETWORK_TC_IRQN TC4_IRQn
+#define NETWORK_TC_HANDLER TC4_Handler
+
+#define STEP_TC (TC1)
+#define STEP_TC_CHAN (0)
+#define STEP_TC_IRQN TC3_IRQn
+#define STEP_TC_HANDLER TC3_Handler
+
#endif
diff --git a/src/Webserver.cpp b/src/Duet/Webserver.cpp
similarity index 100%
rename from src/Webserver.cpp
rename to src/Duet/Webserver.cpp
diff --git a/src/Webserver.h b/src/Duet/Webserver.h
similarity index 100%
rename from src/Webserver.h
rename to src/Duet/Webserver.h
diff --git a/src/GCodes.cpp b/src/GCodes.cpp
index c3d6087..1df0387 100644
--- a/src/GCodes.cpp
+++ b/src/GCodes.cpp
@@ -1905,6 +1905,23 @@ void GCodes::SetMACAddress(GCodeBuffer *gb)
}
}
+bool GCodes::ChangeMicrostepping(size_t drive, int microsteps, int mode) const
+{
+ bool dummy;
+ unsigned int oldSteps = platform->GetMicrostepping(drive, dummy);
+ bool success = platform->SetMicrostepping(drive, microsteps, mode);
+ if (success)
+ {
+ // We changed the microstepping, so adjust the steps/mm to compensate
+ float stepsPerMm = platform->DriveStepsPerUnit(drive);
+ if (stepsPerMm > 0)
+ {
+ platform->SetDriveStepsPerUnit(drive, stepsPerMm * (float)microsteps / (float)oldSteps);
+ }
+ }
+ return success;
+}
+
// Handle sending a reply back to the appropriate interface(s).
// Note that 'reply' may be empty. If it isn't, then we need to append newline when sending it.
void GCodes::HandleReply(GCodeBuffer *gb, bool error, const char* reply)
@@ -2727,7 +2744,7 @@ bool GCodes::HandleMcode(GCodeBuffer* gb, StringRef& reply)
}
else
{
- fileResponse->cat("NONE");
+ fileResponse->cat("NONE\n");
}
}
@@ -3940,7 +3957,7 @@ bool GCodes::HandleMcode(GCodeBuffer* gb, StringRef& reply)
{
seen = true;
int microsteps = gb->GetIValue();
- if (!platform->SetMicrostepping(axis, microsteps, interp))
+ if (!ChangeMicrostepping(axis, microsteps, interp))
{
platform->MessageF(GENERIC_MESSAGE, "Drive %c does not support %dx microstepping%s\n",
axisLetters[axis], microsteps, (interp) ? " with interpolation" : "");
@@ -3956,7 +3973,7 @@ bool GCodes::HandleMcode(GCodeBuffer* gb, StringRef& reply)
gb->GetLongArray(eVals, eCount);
for (size_t e = 0; e < eCount; e++)
{
- if (!platform->SetMicrostepping(AXES + e, (int)eVals[e], interp))
+ if (!ChangeMicrostepping(AXES + e, (int)eVals[e], interp))
{
platform->MessageF(GENERIC_MESSAGE, "Drive E%u does not support %dx microstepping%s\n",
e, (int)eVals[e], (interp) ? " with interpolation" : "");
diff --git a/src/GCodes.h b/src/GCodes.h
index a3de3c9..bf808a6 100644
--- a/src/GCodes.h
+++ b/src/GCodes.h
@@ -174,6 +174,7 @@ private:
void SetPositions(float positionNow[DRIVES]); // Set the current position to be this
const char *TranslateEndStopResult(EndStopHit es); // Translate end stop result to text
bool RetractFilament(bool retract); // Retract or un-retract filaments
+ bool ChangeMicrostepping(size_t drive, int microsteps, int mode) const; // Change microstepping on the specified drive
Platform* platform; // The RepRap machine
Webserver* webserver; // The webserver class
diff --git a/Libraries/.gitignore b/src/Libraries/.gitignore
similarity index 100%
rename from Libraries/.gitignore
rename to src/Libraries/.gitignore
diff --git a/Libraries/Fatfs/00readme.txt b/src/Libraries/Fatfs/00readme.txt
similarity index 100%
rename from Libraries/Fatfs/00readme.txt
rename to src/Libraries/Fatfs/00readme.txt
diff --git a/Libraries/Fatfs/ccsbcs.c b/src/Libraries/Fatfs/ccsbcs.c
similarity index 100%
rename from Libraries/Fatfs/ccsbcs.c
rename to src/Libraries/Fatfs/ccsbcs.c
diff --git a/Libraries/Fatfs/conf_fatfs.h b/src/Libraries/Fatfs/conf_fatfs.h
similarity index 100%
rename from Libraries/Fatfs/conf_fatfs.h
rename to src/Libraries/Fatfs/conf_fatfs.h
diff --git a/Libraries/Fatfs/diskio.c b/src/Libraries/Fatfs/diskio.c
similarity index 100%
rename from Libraries/Fatfs/diskio.c
rename to src/Libraries/Fatfs/diskio.c
diff --git a/Libraries/Fatfs/diskio.h b/src/Libraries/Fatfs/diskio.h
similarity index 100%
rename from Libraries/Fatfs/diskio.h
rename to src/Libraries/Fatfs/diskio.h
diff --git a/Libraries/Fatfs/fattime_rtc.c b/src/Libraries/Fatfs/fattime_rtc.c
similarity index 100%
rename from Libraries/Fatfs/fattime_rtc.c
rename to src/Libraries/Fatfs/fattime_rtc.c
diff --git a/Libraries/Fatfs/ff.c b/src/Libraries/Fatfs/ff.c
similarity index 100%
rename from Libraries/Fatfs/ff.c
rename to src/Libraries/Fatfs/ff.c
diff --git a/Libraries/Fatfs/ff.h b/src/Libraries/Fatfs/ff.h
similarity index 100%
rename from Libraries/Fatfs/ff.h
rename to src/Libraries/Fatfs/ff.h
diff --git a/Libraries/Fatfs/ffconf.h b/src/Libraries/Fatfs/ffconf.h
similarity index 100%
rename from Libraries/Fatfs/ffconf.h
rename to src/Libraries/Fatfs/ffconf.h
diff --git a/Libraries/Fatfs/integer.h b/src/Libraries/Fatfs/integer.h
similarity index 100%
rename from Libraries/Fatfs/integer.h
rename to src/Libraries/Fatfs/integer.h
diff --git a/Libraries/Flash/DueFlashStorage.cpp b/src/Libraries/Flash/DueFlashStorage.cpp
similarity index 84%
rename from Libraries/Flash/DueFlashStorage.cpp
rename to src/Libraries/Flash/DueFlashStorage.cpp
index 6e671c1..48003dd 100644
--- a/Libraries/Flash/DueFlashStorage.cpp
+++ b/src/Libraries/Flash/DueFlashStorage.cpp
@@ -8,13 +8,25 @@ void DueFlashStorage::read(uint32_t address, void *data, uint32_t dataLength)
bool DueFlashStorage::write(uint32_t address, const void *data, uint32_t dataLength)
{
- if ((uint32_t)FLASH_START + address < IFLASH1_ADDR)
+ if ((uint32_t)FLASH_START + address <
+#ifdef DUET_NG
+ IFLASH_ADDR
+#else
+ IFLASH1_ADDR
+#endif
+ )
{
FLASH_DEBUG("Flash write address too low");
return false;
}
- if ((uint32_t)FLASH_START + address + dataLength > IFLASH1_ADDR + IFLASH1_SIZE)
+ if ((uint32_t)FLASH_START + address + dataLength >
+#ifdef DUET_NG
+ IFLASH_ADDR + IFLASH_SIZE
+#else
+ IFLASH1_ADDR + IFLASH1_SIZE
+#endif
+ )
{
FLASH_DEBUG("Flash write address too high");
return false;
diff --git a/Libraries/Flash/DueFlashStorage.h b/src/Libraries/Flash/DueFlashStorage.h
similarity index 82%
rename from Libraries/Flash/DueFlashStorage.h
rename to src/Libraries/Flash/DueFlashStorage.h
index 5178596..c93f11a 100644
--- a/Libraries/Flash/DueFlashStorage.h
+++ b/src/Libraries/Flash/DueFlashStorage.h
@@ -18,12 +18,24 @@ Further modified up by David Crocker
#include
#include "flash_efc.h"
+#ifdef DUET_NG
+
+// 1Kb of data
+#define FLASH_DATA_LENGTH ((IFLASH_PAGE_SIZE/sizeof(byte))*4)
+
+// Choose a start address close to the top of the Flash 1 memory space
+#define FLASH_START ((uint8_t *)(IFLASH_ADDR + IFLASH_SIZE - FLASH_DATA_LENGTH))
+
+#else
+
// 1Kb of data
#define FLASH_DATA_LENGTH ((IFLASH1_PAGE_SIZE/sizeof(byte))*4)
// Choose a start address close to the top of the Flash 1 memory space
#define FLASH_START ((uint8_t *)(IFLASH1_ADDR + IFLASH1_SIZE - FLASH_DATA_LENGTH))
+#endif
+
//#define FLASH_DEBUG(x) Serial.print(x);
#define FLASH_DEBUG(x)
diff --git a/Libraries/MAX31855/MAX31855.cpp b/src/Libraries/MAX31855/MAX31855.cpp
similarity index 93%
rename from Libraries/MAX31855/MAX31855.cpp
rename to src/Libraries/MAX31855/MAX31855.cpp
index 1206ddc..396df7e 100644
--- a/Libraries/MAX31855/MAX31855.cpp
+++ b/src/Libraries/MAX31855/MAX31855.cpp
@@ -45,6 +45,12 @@
// dan.newman@mtbaldy.us
// GPL v3
+#ifdef DUET_NG
+# define MAX_SPI SPI
+#else
+# define MAX_SPI SPI0
+#endif
+
#define PERIPHERAL_CHANNEL_ID 3
#define PERIPHERAL_CHANNEL_CS_PIN 78 // NPCS3
@@ -83,7 +89,7 @@ void MAX31855::Init(uint8_t cs)
device.cs = cs; // Chip select
device.id = PERIPHERAL_CHANNEL_ID; // Peripheral channel
device.bits = SPI_CSR_BITS_16_BIT; // 16 bit data transfers
- spi_master_init(SPI0, device.cs, -1);
+ spi_master_init(MAX_SPI, device.cs);
initialized = true;
}
}
@@ -95,7 +101,7 @@ spi_status_t MAX31855::readRaw(uint16_t *raw) const
for (uint8_t i = 0; i < 2; i++)
{
uint32_t timeout = SPI_TIMEOUT;
- while (!spi_is_tx_ready(SPI0))
+ while (!spi_is_tx_ready(MAX_SPI))
{
if (!timeout--)
{
@@ -103,10 +109,10 @@ spi_status_t MAX31855::readRaw(uint16_t *raw) const
}
}
- SPI0->SPI_TDR = (i != 1) ? 0x00000000 : 0x00000000 | SPI_TDR_LASTXFER;
+ MAX_SPI->SPI_TDR = (i != 1) ? 0x00000000 : 0x00000000 | SPI_TDR_LASTXFER;
timeout = SPI_TIMEOUT;
- while (!spi_is_rx_ready(SPI0))
+ while (!spi_is_rx_ready(MAX_SPI))
{
if (!timeout--)
{
@@ -114,7 +120,7 @@ spi_status_t MAX31855::readRaw(uint16_t *raw) const
}
}
- *raw++ = SPI0->SPI_RDR;
+ *raw++ = MAX_SPI->SPI_RDR;
}
return SPI_OK;
@@ -125,11 +131,11 @@ MAX31855_error MAX31855::getTemperature(float *t) const
// Assume properly initialized
// Ensure that the configuration is as needed; another SPI0 consumer
// may have changed the bus speed and/or timing delays.
- spi_master_setup_device(SPI0, &device, 0, MAX31855_MAX_FREQ, 0);
- spi_set_transfer_delay(SPI0, device.id, MAX31855_DLYBS, MAX31855_DLYBCT);
+ spi_master_setup_device(MAX_SPI, &device, 0, MAX31855_MAX_FREQ, 0);
+ spi_set_transfer_delay(MAX_SPI, device.id, MAX31855_DLYBS, MAX31855_DLYBCT);
// Select the device; enable CS (set it LOW)
- spi_select_device(SPI0, &device);
+ spi_select_device(MAX_SPI, &device);
// Read in 32 bits
uint16_t raw[2];
@@ -139,7 +145,7 @@ MAX31855_error MAX31855::getTemperature(float *t) const
}
// Deselect the device; disable CS (set it HIGH)
- spi_deselect_device(SPI0, &device);
+ spi_deselect_device(MAX_SPI, &device);
if ((raw[0] & 0x02) || (raw[1] & 0x08))
{
diff --git a/Libraries/MAX31855/MAX31855.h b/src/Libraries/MAX31855/MAX31855.h
similarity index 94%
rename from Libraries/MAX31855/MAX31855.h
rename to src/Libraries/MAX31855/MAX31855.h
index 8494574..1ac8bd1 100644
--- a/Libraries/MAX31855/MAX31855.h
+++ b/src/Libraries/MAX31855/MAX31855.h
@@ -2,7 +2,7 @@
#define MAX31855_H
#include "Arduino.h"
-#include "spi_master.h"
+#include "spi_master.h" // for spi_status_t
enum MAX31855_error {
MAX31855_OK = 0, // Success
@@ -23,8 +23,9 @@ public:
private:
spi_status_t readRaw(uint16_t *r) const;
- bool initialized;
+
struct spi_device device;
+ bool initialized;
};
#endif //MAX31855_H
diff --git a/Libraries/MCP4461/MCP4461.cpp b/src/Libraries/MCP4461/MCP4461.cpp
similarity index 75%
rename from Libraries/MCP4461/MCP4461.cpp
rename to src/Libraries/MCP4461/MCP4461.cpp
index 77c9386..f1fd164 100644
--- a/Libraries/MCP4461/MCP4461.cpp
+++ b/src/Libraries/MCP4461/MCP4461.cpp
@@ -17,6 +17,12 @@ GPL v3
#include
#include
+#ifdef DUET_NG
+# define MCP_WIRE Wire
+#else
+# define MCP_WIRE Wire1
+#endif
+
//ensure you call begin() before any other functions but note
//begin can only be called once for all MCP* objects as it initialises
//the local master through the Wire library
@@ -28,7 +34,7 @@ MCP4461::MCP4461() {
//initialise the I2C interface as master ie local address is 0
void MCP4461::begin() {
- Wire1.begin();
+ MCP_WIRE.begin();
}
//set the MCP4461 address
@@ -61,10 +67,10 @@ void MCP4461::setVolatileWiper(uint8_t wiper, uint16_t wiper_value){
}
c_byte |= MCP4461_WRITE;
//send command byte
- Wire1.beginTransmission(_mcp4461_address);
- Wire1.write(c_byte);
- Wire1.write(d_byte);
- Wire1.endTransmission(); //do not release bus
+ MCP_WIRE.beginTransmission(_mcp4461_address);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
+ MCP_WIRE.endTransmission(); //do not release bus
}
void MCP4461::setNonVolatileWiper(uint8_t wiper, uint16_t wiper_value){
@@ -92,10 +98,10 @@ void MCP4461::setNonVolatileWiper(uint8_t wiper, uint16_t wiper_value){
}
c_byte |= MCP4461_WRITE;
//send command byte
- Wire1.beginTransmission(_mcp4461_address);
- Wire1.write(c_byte);
- Wire1.write(d_byte);
- Wire1.endTransmission(); //do not release bus
+ MCP_WIRE.beginTransmission(_mcp4461_address);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
+ MCP_WIRE.endTransmission(); //do not release bus
delay(20); //allow the write to complete (this is wasteful - better to check if the write has completed)
}
@@ -108,30 +114,30 @@ void MCP4461::setVolatileWipers(uint16_t wiper_value){
uint8_t c_byte;
if (value > 0xFF)c_byte = 0x1; //the 8th data bit is 1
else c_byte =0;
- Wire1.beginTransmission(_mcp4461_address);
+ MCP_WIRE.beginTransmission(_mcp4461_address);
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_VW0;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
if (value > 0xFF) c_byte = 0x1;
else c_byte =0;
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_VW1;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
if (value > 0xFF) c_byte = 0x1;
else c_byte =0;
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_VW2;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
if (value > 0xFF) c_byte = 0x1;
else c_byte =0;
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_VW3;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
- Wire1.endTransmission();
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
+ MCP_WIRE.endTransmission();
}
//set all the wipers in one transmission, more verbose but quicker than multiple calls to
@@ -143,33 +149,33 @@ void MCP4461::setNonVolatileWipers(uint16_t wiper_value){
uint8_t c_byte;
if (value > 0xFF)c_byte = 0x1; //the 8th data bit is 1
else c_byte =0;
- Wire1.beginTransmission(_mcp4461_address);
+ MCP_WIRE.beginTransmission(_mcp4461_address);
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_NVW0;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
delay(20); //allow the write to complete (this is wasteful - better to check if the write has completed)
if (value > 0xFF) c_byte = 0x1;
else c_byte =0;
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_NVW1;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
delay(20);
if (value > 0xFF) c_byte = 0x1;
else c_byte =0;
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_NVW2;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
delay(20);
if (value > 0xFF) c_byte = 0x1;
else c_byte =0;
c_byte |= MCP4461_WRITE;
c_byte |= MCP4461_NVW3;
- Wire1.write(c_byte);
- Wire1.write(d_byte);
- Wire1.endTransmission();
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.write(d_byte);
+ MCP_WIRE.endTransmission();
delay(20);
}
@@ -195,15 +201,15 @@ uint16_t MCP4461::getNonVolatileWiper(uint8_t wiper){
}
c_byte |= MCP4461_READ;
//send command byte
- Wire1.beginTransmission(_mcp4461_address);
- Wire1.write(c_byte);
- Wire1.endTransmission(false); //do not release bus
- Wire1.requestFrom((uint8_t)_mcp4461_address,(uint8_t)2);
+ MCP_WIRE.beginTransmission(_mcp4461_address);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.endTransmission(false); //do not release bus
+ MCP_WIRE.requestFrom((uint8_t)_mcp4461_address,(uint8_t)2);
//read the register
int i = 0;
- while(Wire1.available())
+ while(MCP_WIRE.available())
{
- ret |= Wire1.read();
+ ret |= MCP_WIRE.read();
if (i==0) ret = ret<<8;
i++;
}
@@ -232,15 +238,15 @@ uint16_t MCP4461::getVolatileWiper(uint8_t wiper){
}
c_byte |= MCP4461_READ;
//send command byte
- Wire1.beginTransmission(_mcp4461_address);
- Wire1.write(c_byte);
- Wire1.endTransmission(false); //do not release bus
- Wire1.requestFrom((uint8_t)_mcp4461_address,(uint8_t)2);
+ MCP_WIRE.beginTransmission(_mcp4461_address);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.endTransmission(false); //do not release bus
+ MCP_WIRE.requestFrom((uint8_t)_mcp4461_address,(uint8_t)2);
//read the register
int i = 0;
- while(Wire1.available())
+ while(MCP_WIRE.available())
{
- ret |= Wire1.read();
+ ret |= MCP_WIRE.read();
if (i==0) ret = ret<<8;
i++;
}
@@ -255,15 +261,15 @@ uint16_t MCP4461::getStatus(){
c_byte |= MCP4461_STATUS;
c_byte |= MCP4461_READ;
//send command byte
- Wire1.beginTransmission(_mcp4461_address);
- Wire1.write(c_byte);
- Wire1.endTransmission(false); //do not release bus
- Wire1.requestFrom((uint8_t)_mcp4461_address, (uint8_t)2);
+ MCP_WIRE.beginTransmission(_mcp4461_address);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.endTransmission(false); //do not release bus
+ MCP_WIRE.requestFrom((uint8_t)_mcp4461_address, (uint8_t)2);
//read the register
int i = 0;
- while(Wire1.available())
+ while(MCP_WIRE.available())
{
- ret |= Wire1.read();
+ ret |= MCP_WIRE.read();
if (i==0) ret = ret<<8;
i++;
}
@@ -286,15 +292,15 @@ void MCP4461::toggleWiper(uint8_t wiper){
c_byte |= MCP4461_READ;
}
//send command byte
- Wire1.beginTransmission(_mcp4461_address);
- Wire1.write(c_byte);
- Wire1.endTransmission(false); //do not release bus
- Wire1.requestFrom((uint8_t)_mcp4461_address,(uint8_t)2);
+ MCP_WIRE.beginTransmission(_mcp4461_address);
+ MCP_WIRE.write(c_byte);
+ MCP_WIRE.endTransmission(false); //do not release bus
+ MCP_WIRE.requestFrom((uint8_t)_mcp4461_address,(uint8_t)2);
//read the register
int i = 0;
- while(Wire1.available())
+ while(MCP_WIRE.available())
{
- tcon |= Wire1.read();
+ tcon |= MCP_WIRE.read();
if (i==0) tcon = tcon<<8;
i++;
}
diff --git a/Libraries/MCP4461/MCP4461.h b/src/Libraries/MCP4461/MCP4461.h
similarity index 100%
rename from Libraries/MCP4461/MCP4461.h
rename to src/Libraries/MCP4461/MCP4461.h
diff --git a/src/Pins.h b/src/Pins.h
index 82441da..de9738e 100644
--- a/src/Pins.h
+++ b/src/Pins.h
@@ -4,14 +4,19 @@
// Load Pins_.h
#if !defined(PLATFORM)
-#define PLATFORM duet
+# if defined(__SAM3X8E__)
+# define PLATFORM Duet
+# elif defined(__SAM4E8E__)
+# define PLATFORM DuetNG
+# else
+# error Unknown platform
+# endif
#endif
#define P_EXPAND(x) x
#define P_CONCAT(x,y) P_EXPAND(x)y
#define P_STR(x) #x
#define P_XSTR(x) P_STR(x)
-#define P_INCLUDE_FILE P_XSTR(P_CONCAT(Pins_,P_CONCAT(PLATFORM,.h)))
+#define P_INCLUDE_FILE P_XSTR(P_CONCAT(PLATFORM,P_CONCAT(/Pins_,P_CONCAT(PLATFORM,.h))))
#include P_INCLUDE_FILE
-
#endif // PINS_H__
diff --git a/src/Platform.cpp b/src/Platform.cpp
index ae6c03f..dd4a194 100644
--- a/src/Platform.cpp
+++ b/src/Platform.cpp
@@ -22,15 +22,18 @@
#include "RepRapFirmware.h"
#include "DueFlashStorage.h"
+#ifdef CORE_NG
+# include "sam/drivers/tc/tc.h"
+#endif
+
#ifdef EXTERNAL_DRIVERS
-#include "ExternalDrivers.h"
+# include "ExternalDrivers.h"
#endif
extern char _end;
extern "C" char *sbrk(int i);
const uint8_t memPattern = 0xA5;
-const int Dac0DigitalPin = 66; // Arduino Due pin number corresponding to DAC0 output pin
static uint32_t fanInterruptCount = 0; // accessed only in ISR, so no need to declare it volatile
const uint32_t fanMaxInterruptCount = 32; // number of fan interrupts that we average over
@@ -60,24 +63,12 @@ void setup()
*heapend++ = memPattern;
}
-#if 0
- watchdogDisable();
- pinMode(39, OUTPUT);
-#else
reprap.Init();
-#endif
}
void loop()
{
-#if 0
- digitalWrite(39, HIGH);
- delay(500);
- digitalWrite(39, LOW);
- delay(500);
-#else
reprap.Spin();
-#endif
}
extern "C"
@@ -90,11 +81,6 @@ extern "C"
}
}
-// This used to overrides the weak function in CoreDuet, but now CoreDuet no longer calls it so we don't need it
-//void watchdogSetup(void)
-//{
-//}
-
//*************************************************************************************************
// PidParameters class
@@ -298,13 +284,15 @@ void Platform::Init()
{
if (heatOnPins[heater] >= 0)
{
- digitalWrite(heatOnPins[heater], HIGH); // turn the heater off
+ digitalWrite(heatOnPins[heater], (HEAT_ON) ? LOW : HIGH); // turn the heater off
pinMode(heatOnPins[heater], OUTPUT);
}
- analogReadResolution(12);
- thermistorAdcChannels[heater] = PinToAdcChannel(tempSensePins[heater]); // Translate the Arduino Due Analog pin number to the SAM ADC channel number
+ AnalogChannelNumber chan = PinToAdcChannel(tempSensePins[heater]); // translate the Arduino Due Analog pin number to the SAM ADC channel number
+ thermistorAdcChannels[heater] = chan;
+ AnalogInEnableChannel(chan, true);
+
SetThermistorNumber(heater, heater); // map the thermistor straight through
- thermistorFilters[heater].Init(analogRead(tempSensePins[heater]));
+ thermistorFilters[heater].Init(0);
}
SetTemperatureLimit(DEFAULT_TEMPERATURE_LIMIT);
@@ -410,29 +398,39 @@ void Platform::InitZProbe()
{
zProbeOnFilter.Init(0);
zProbeOffFilter.Init(0);
+
+#ifdef DUET_NG
+ zProbeModulationPin = Z_PROBE_MOD_PIN;
+#else
zProbeModulationPin = (board == BoardType::Duet_07 || board == BoardType::Duet_085) ? Z_PROBE_MOD_PIN07 : Z_PROBE_MOD_PIN;
+#endif
switch (nvData.zProbeType)
{
case 1:
case 2:
+ AnalogInEnableChannel(zProbeAdcChannel, true);
pinMode(zProbeModulationPin, OUTPUT);
digitalWrite(zProbeModulationPin, HIGH); // enable the IR LED
break;
case 3:
+ AnalogInEnableChannel(zProbeAdcChannel, true);
pinMode(zProbeModulationPin, OUTPUT);
- digitalWrite(zProbeModulationPin, LOW); // enable the alternate sensor
+ digitalWrite(zProbeModulationPin, LOW); // enable the alternate sensor
break;
case 4:
+ AnalogInEnableChannel(zProbeAdcChannel, false);
pinMode(endStopPins[E0_AXIS], INPUT_PULLUP);
break;
case 5:
- break; //TODO
+ AnalogInEnableChannel(zProbeAdcChannel, false);
+ break; //TODO (DeltaProbe)
default:
+ AnalogInEnableChannel(zProbeAdcChannel, false);
break;
}
}
@@ -644,7 +642,12 @@ void Platform::ResetNvData()
ARRAY_INIT(nvData.ipAddress, IP_ADDRESS);
ARRAY_INIT(nvData.netMask, NET_MASK);
ARRAY_INIT(nvData.gateWay, GATE_WAY);
+
+#ifdef DUET_NG
+ memset(nvData.macAddress, 0xFF, sizeof(nvData.macAddress));
+#else
ARRAY_INIT(nvData.macAddress, MAC_ADDRESS);
+#endif
nvData.zProbeType = 0; // Default is to use no Z probe switch
ARRAY_INIT(nvData.zProbeAxes, Z_PROBE_AXES);
@@ -1006,7 +1009,7 @@ void Platform::SoftwareReset(uint16_t reason)
{
if (reason != (uint16_t)SoftwareResetReason::user)
{
- if (!SERIAL_MAIN_DEVICE.canWrite())
+ if (SERIAL_MAIN_DEVICE.canWrite() == 0)
{
reason |= (uint16_t)SoftwareResetReason::inUsbOutput; // if we are resetting because we are stuck in a Spin function, record whether we are trying to send to USB
}
@@ -1014,9 +1017,9 @@ void Platform::SoftwareReset(uint16_t reason)
{
reason |= (uint16_t)SoftwareResetReason::inLwipSpin;
}
- if (!SERIAL_AUX_DEVICE.canWrite()
+ if (SERIAL_AUX_DEVICE.canWrite() == 0
#ifdef SERIAL_AUX2_DEVICE
- || !SERIAL_AUX2_DEVICE.canWrite()
+ || SERIAL_AUX2_DEVICE.canWrite() == 0
#endif
)
{
@@ -1044,21 +1047,9 @@ void Platform::SoftwareReset(uint16_t reason)
// Interrupts
-#ifdef CORE_NG
-# include "sam/drivers/tc/tc.h"
-
-# define TC_GetStatus(_a, _b) tc_get_status(_a, _b)
-# define TC_Configure(_a, _b, _c) tc_init(_a, _b, _c)
-# define TC_Start(_a, _b) tc_start(_a, _b)
-# define TC_SetRA(_a, _b, _c) tc_write_ra(_a, _b, _c)
-# define TC_SetRB(_a, _b, _c) tc_write_rb(_a, _b, _c)
-# define TC_SetRC(_a, _b, _c) tc_write_rc(_a, _b, _c)
-# define TC_ReadCV(_a, _b) tc_read_cv(_a, _b)
-#endif
-
-void TC3_Handler()
+void STEP_TC_HANDLER()
{
- TC1->TC_CHANNEL[0].TC_IDR = TC_IER_CPAS; // disable the interrupt
+ STEP_TC->TC_CHANNEL[STEP_TC_CHAN].TC_IDR = TC_IER_CPAS; // disable the interrupt
#ifdef MOVE_DEBUG
++numInterruptsExecuted;
lastInterruptTime = Platform::GetInterruptClocks();
@@ -1068,13 +1059,15 @@ void TC3_Handler()
// __disable_irq();
}
-void TC4_Handler()
+#ifndef DUET_NG
+void NETWORK_TC_HANDLER()
{
- TC_GetStatus(TC1, 1);
+ tc_get_status(NETWORK_TC, NETWORK_TC_CHAN);
// __enable_irq(); // allow nested interrupts
reprap.GetNetwork()->Interrupt();
// __disable_irq();
}
+#endif
void FanInterrupt()
{
@@ -1094,31 +1087,38 @@ void Platform::InitialiseInterrupts()
{
// Set the tick interrupt to the highest priority. We need to to monitor the heaters and kick the watchdog.
NVIC_SetPriority(SysTick_IRQn, 0); // set priority for tick interrupts - highest, because it kicks the watchdog
+
+#ifdef DUET_NG
+ NVIC_SetPriority(UART0_IRQn, 1); // set priority for UART interrupt - must be higher than step interrupt
+#else
NVIC_SetPriority(UART_IRQn, 1); // set priority for UART interrupt - must be higher than step interrupt
+#endif
// Timer interrupt for stepper motors
// The clock rate we use is a compromise. Too fast and the 64-bit square roots take a long time to execute. Too slow and we lose resolution.
// We choose a clock divisor of 32, which gives us 0.38us resolution. The next option is 128 which would give 1.524us resolution.
pmc_set_writeprotect(false);
- pmc_enable_periph_clk((uint32_t) TC3_IRQn);
- TC_Configure(TC1, 0, TC_CMR_WAVE | TC_CMR_WAVSEL_UP | TC_CMR_TCCLKS_TIMER_CLOCK3);
- TC1 ->TC_CHANNEL[0].TC_IDR = ~(uint32_t)0; // interrupts disabled for now
- TC_Start(TC1, 0);
- TC_GetStatus(TC1, 0); // clear any pending interrupt
- NVIC_SetPriority(TC3_IRQn, 2); // set high priority for this IRQ; it's time-critical
- NVIC_EnableIRQ(TC3_IRQn);
+ pmc_enable_periph_clk((uint32_t) STEP_TC_IRQN);
+ tc_init(STEP_TC, STEP_TC_CHAN, TC_CMR_WAVE | TC_CMR_WAVSEL_UP | TC_CMR_TCCLKS_TIMER_CLOCK3);
+ STEP_TC->TC_CHANNEL[STEP_TC_CHAN].TC_IDR = ~(uint32_t)0; // interrupts disabled for now
+ tc_start(STEP_TC, 0);
+ tc_get_status(STEP_TC, STEP_TC_CHAN); // clear any pending interrupt
+ NVIC_SetPriority(STEP_TC_IRQN, 2); // set high priority for this IRQ; it's time-critical
+ NVIC_EnableIRQ(STEP_TC_IRQN);
+#ifndef DUET_NG
// Timer interrupt to keep the networking timers running (called at 16Hz)
- pmc_enable_periph_clk((uint32_t) TC4_IRQn);
- TC_Configure(TC1, 1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK2);
+ pmc_enable_periph_clk((uint32_t) NETWORK_TC_IRQN);
+ tc_init(NETWORK_TC, NETWORK_TC_CHAN, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK2);
uint32_t rc = (VARIANT_MCK/8)/16; // 8 because we selected TIMER_CLOCK2 above
- TC_SetRA(TC1, 1, rc/2); // 50% high, 50% low
- TC_SetRC(TC1, 1, rc);
- TC_Start(TC1, 1);
- TC1 ->TC_CHANNEL[1].TC_IER = TC_IER_CPCS;
- TC1 ->TC_CHANNEL[1].TC_IDR = ~TC_IER_CPCS;
- NVIC_SetPriority(TC4_IRQn, 4); // step interrupt is more time-critical than this one
- NVIC_EnableIRQ(TC4_IRQn);
+ tc_write_ra(NETWORK_TC, NETWORK_TC_CHAN, rc/2); // 50% high, 50% low
+ tc_write_rc(NETWORK_TC, NETWORK_TC_CHAN, rc);
+ tc_start(NETWORK_TC, NETWORK_TC_CHAN);
+ NETWORK_TC ->TC_CHANNEL[NETWORK_TC_CHAN].TC_IER = TC_IER_CPCS;
+ NETWORK_TC ->TC_CHANNEL[NETWORK_TC_CHAN].TC_IDR = ~TC_IER_CPCS;
+ NVIC_SetPriority(NETWORK_TC_IRQN, 4); // step interrupt is more time-critical than this one
+ NVIC_EnableIRQ(NETWORK_TC_IRQN);
+#endif
// Interrupt for 4-pin PWM fan sense line
if (coolingFanRpmPin >= 0)
@@ -1136,8 +1136,10 @@ void Platform::InitialiseInterrupts()
#if 0 // not used
void Platform::DisableInterrupts()
{
- NVIC_DisableIRQ(TC3_IRQn);
- NVIC_DisableIRQ(TC4_IRQn);
+ NVIC_DisableIRQ(STEP_IRQN);
+#ifdef DUET_NG
+ NVIC_DisableIRQ(NETWORK_IRQN);
+#endif
}
#endif
@@ -1451,7 +1453,7 @@ void Platform::SetHeaterPwm(size_t heater, uint8_t power)
if (heatOnPins[heater] >= 0)
{
uint16_t freq = (reprap.GetHeat()->UseSlowPwm(heater)) ? SlowHeaterPwmFreq : NormalHeaterPwmFreq;
- analogWriteDuet(heatOnPins[heater], (HEAT_ON == 0) ? 255 - power : power, freq);
+ AnalogWrite(heatOnPins[heater], (HEAT_ON) ? power : 255 - power, freq);
}
}
@@ -1640,25 +1642,33 @@ void Platform::UpdateMotorCurrent(size_t drive)
}
else
{
+#ifndef DUET_NG
if (board == BoardType::Duet_085)
{
+#endif
// Extruder 0 is on DAC channel 0
if (driver == 4)
{
- analogWrite(DAC0, dac);
+#ifdef DUET_NG
+ AnalogWrite(DAC1, dac);
+#else
+ AnalogWrite(DAC0, dac);
+#endif
}
else
{
mcpExpansion.setNonVolatileWiper(potWipes[driver-1], pot);
mcpExpansion.setVolatileWiper(potWipes[driver-1], pot);
}
+#ifndef DUET_NG
}
else
{
mcpExpansion.setNonVolatileWiper(potWipes[driver], pot);
mcpExpansion.setVolatileWiper(potWipes[driver], pot);
}
- }
+#endif
+ }
#ifdef EXTERNAL_DRIVERS
}
#endif
@@ -1800,8 +1810,13 @@ void Platform::InitFans()
{
for (size_t i = 0; i < NUM_FANS; ++i)
{
- // The cooling fan 0 output pin gets inverted if HEAT_ON == 0 on a Duet 0.4, 0.6 or 0.7
- fans[i].Init(COOLING_FAN_PINS[i], !HEAT_ON && (board == BoardType::Duet_06 || board == BoardType::Duet_07));
+ fans[i].Init(COOLING_FAN_PINS[i],
+ !HEAT_ON
+#ifndef DUET_NG
+ // The cooling fan 0 output pin gets inverted if HEAT_ON == 0 on a Duet 0.4, 0.6 or 0.7
+ && (board == BoardType::Duet_06 || board == BoardType::Duet_07)
+#endif
+ );
}
if (NUM_FANS > 1)
@@ -1905,7 +1920,7 @@ void Platform::Fan::Refresh()
{
invert = !invert;
}
- analogWriteDuet(pin, (invert) ? (255 - p) : p, freq);
+ AnalogWrite(pin, (invert) ? (255 - p) : p, freq);
}
}
@@ -2266,6 +2281,9 @@ void Platform::SetBoardType(BoardType bt)
{
if (bt == BoardType::Auto)
{
+#ifdef DUET_NG
+ board = BoardType::DuetNG_08;
+#else
// Determine whether this is a Duet 0.6 or a Duet 0.8.5 board.
// If it is a 0.85 board then DAC0 (AKA digital pin 67) is connected to ground via a diode and a 2.15K resistor.
// So we enable the pullup (value 150K-150K) on pin 67 and read it, expecting a LOW on a 0.8.5 board and a HIGH on a 0.6 board.
@@ -2273,6 +2291,7 @@ void Platform::SetBoardType(BoardType bt)
pinMode(Dac0DigitalPin, INPUT_PULLUP);
board = (digitalRead(Dac0DigitalPin)) ? BoardType::Duet_06 : BoardType::Duet_085;
pinMode(Dac0DigitalPin, INPUT); // turn pullup off
+#endif
}
else
{
@@ -2291,9 +2310,13 @@ const char* Platform::GetElectronicsString() const
{
switch (board)
{
+#ifdef DUET_NG
+ case BoardType::DuetNG_08: return "DuetNG 0.8";
+#else
case BoardType::Duet_06: return "Duet 0.6";
case BoardType::Duet_07: return "Duet 0.7";
case BoardType::Duet_085: return "Duet 0.85";
+#endif
default: return "Unidentified";
}
}
@@ -2415,9 +2438,9 @@ char Platform::ReadFromSource(const SerialSource source)
// Must be called with interrupts disabled,
/*static*/ bool Platform::ScheduleInterrupt(uint32_t tim)
{
- TC_SetRA(TC1, 0, tim); // set up the compare register
- TC_GetStatus(TC1, 0); // clear any pending interrupt
- int32_t diff = (int32_t)(tim - TC_ReadCV(TC1, 0)); // see how long we have to go
+ tc_write_ra(TC1, 0, tim); // set up the compare register
+ tc_get_status(TC1, 0); // clear any pending interrupt
+ int32_t diff = (int32_t)(tim - tc_read_cv(TC1, 0)); // see how long we have to go
if (diff < (int32_t)DDA::minInterruptInterval) // if less than about 2us or already passed
{
return true; // tell the caller to simulate an interrupt instead
@@ -2435,7 +2458,6 @@ char Platform::ReadFromSource(const SerialSource source)
// Process a 1ms tick interrupt
// This function must be kept fast so as not to disturb the stepper timing, so don't do any floating point maths in here.
// This is what we need to do:
-// 0. Kick the watchdog.
// 1. Kick off a new ADC conversion.
// 2. Fetch and process the result of the last ADC conversion.
// 3a. If the last ADC conversion was for the Z probe, toggle the modulation output if using a modulated IR sensor.
@@ -2457,8 +2479,7 @@ void Platform::Tick()
if (DoThermistorAdc(currentHeater))
{
ThermistorAveragingFilter& currentFilter = const_cast(thermistorFilters[currentHeater]);
- currentFilter.ProcessReading(GetAdcReading(thermistorAdcChannels[heaterTempChannels[currentHeater]]));
- StartAdcConversion(zProbeAdcChannel);
+ currentFilter.ProcessReading(AnalogInReadChannel(thermistorAdcChannels[heaterTempChannels[currentHeater]]));
if (currentFilter.IsValid() && (configuredHeaters & (1 << currentHeater)) != 0)
{
uint32_t sum = currentFilter.GetSum();
@@ -2477,7 +2498,6 @@ void Platform::Tick()
// periodically called by PID::Spin() where temperature fault handling is taken care of. However, we
// must guard against overly long delays between successive calls of PID::Spin().
// Do not call Time() here, it isn't safe. We use millis() instead.
- StartAdcConversion(zProbeAdcChannel);
if ((millis() - reprap.GetHeat()->GetLastSampleTime(currentHeater)) > maxPidSpinDelay)
{
SetHeaterPwm(currentHeater, 0);
@@ -2496,13 +2516,9 @@ void Platform::Tick()
case 2: // last conversion started was the Z probe, with IR LED on
const_cast(zProbeOnFilter).ProcessReading(GetRawZProbeReading());
- if (DoThermistorAdc(currentHeater))
+ if (nvData.zProbeType == 2) // if using a modulated IR sensor
{
- StartAdcConversion(thermistorAdcChannels[heaterTempChannels[currentHeater]]); // read a thermistor
- }
- if (nvData.zProbeType == 2) // if using a modulated IR sensor
- {
- digitalWrite(zProbeModulationPin, LOW); // turn off the IR emitter
+ digitalWrite(zProbeModulationPin, LOW); // turn off the IR emitter
}
++tickState;
break;
@@ -2512,17 +2528,16 @@ void Platform::Tick()
// no break
case 0: // this is the state after initialisation, no conversion has been started
default:
- if (DoThermistorAdc(currentHeater))
- {
- StartAdcConversion(thermistorAdcChannels[heaterTempChannels[currentHeater]]); // read a thermistor
- }
- if (nvData.zProbeType == 2) // if using a modulated IR sensor
+ if (nvData.zProbeType == 2) // if using a modulated IR sensor
{
digitalWrite(zProbeModulationPin, HIGH); // turn on the IR emitter
}
tickState = 1;
break;
}
+
+ AnalogInStartConversion();
+
#ifdef TIME_TICK_ISR
uint32_t now2 = micros();
if (now2 - now > errorCodeBits)
@@ -2532,19 +2547,6 @@ void Platform::Tick()
#endif
}
-/*static*/ uint16_t Platform::GetAdcReading(EAnalogChannel chan)
-{
- uint16_t rslt = (uint16_t) adc_get_channel_value(ADC, (adc_channel_num_t)(int)chan);
- adc_disable_channel(ADC, (adc_channel_num_t)(int)chan);
- return rslt;
-}
-
-/*static*/ void Platform::StartAdcConversion(EAnalogChannel chan)
-{
- adc_enable_channel(ADC, (adc_channel_num_t)(int)chan);
- adc_start(ADC );
-}
-
// Pragma pop_options is not supported on this platform
//#pragma GCC pop_options
diff --git a/src/Platform.h b/src/Platform.h
index caa9204..7bb0c73 100644
--- a/src/Platform.h
+++ b/src/Platform.h
@@ -175,9 +175,13 @@ const size_t FILE_BUFFER_SIZE = 256;
enum class BoardType : uint8_t
{
Auto = 0,
+#ifdef DUET_NG
+ DuetNG_08 = 1
+#else
Duet_06 = 1,
Duet_07 = 2,
Duet_085 = 3
+#endif
};
enum class EndStopHit
@@ -828,16 +832,13 @@ private:
// checking has already been performed.
uint8_t heaterTempChannels[HEATERS];
- EAnalogChannel thermistorAdcChannels[HEATERS];
- EAnalogChannel zProbeAdcChannel;
+ AnalogChannelNumber thermistorAdcChannels[HEATERS];
+ AnalogChannelNumber zProbeAdcChannel;
uint32_t thermistorOverheatSums[HEATERS];
uint8_t tickState;
size_t currentHeater;
int debugCode;
- static uint16_t GetAdcReading(EAnalogChannel chan);
- static void StartAdcConversion(EAnalogChannel chan);
-
// Hotend configuration
float filamentWidth;
float nozzleDiameter;
@@ -1246,7 +1247,7 @@ inline uint16_t Platform::GetRawZProbeReading() const
}
else
{
- return GetAdcReading(zProbeAdcChannel);
+ return AnalogInReadChannel(zProbeAdcChannel);
}
}