Fixed $70 handling, added patch for low level SD card library

This commit is contained in:
Terje Io 2021-06-08 15:51:31 +02:00
parent 9d853fdc9c
commit 3ec966b2f3
3 changed files with 32 additions and 47 deletions

View File

@ -29,7 +29,13 @@ to
`#define USE_MSC 0 // will be used in sd_msc.cpp` `#define USE_MSC 0 // will be used in sd_msc.cpp`
or add the MSC library as well \(not needed\). or add the MSC library as well \(not needed\). 2021-06-08: This is now changed in the latest version.
**NOTE:**
If enabling ftp transfer to the SD card then [utility/sd_sdhc.c](https://github.com/WMXZ-EU/uSDFS/blob/master/src/utility/sd_sdhc.c) has to be replaced with [this patched](patches/sd_sdhc.zip) version \(zip download\).
I submitted a PR for this but it was rejected with no explanation, this is why I have added it here. The maintainer has made a similar change but that does not fix the underlying issue, and it may even crash the controller.
In addition to this [ffconf.h](https://github.com/WMXZ-EU/uSDFS/blob/master/src/ffconf.h) has to be edited, `#define FF_FS_RPATH` value has to be changed to 2 \(from 1\) or you will get a compiler error.
--- ---
@ -50,4 +56,4 @@ Download the libraries above as zip files and add to your Arduino installation w
<sup>3</sup> Number of digital input pins available is reduced when the [Encoder plugin](https://github.com/grblHAL/Plugin_encoder/blob/master/README.md) is added to the build. <sup>3</sup> Number of digital input pins available is reduced when the [Encoder plugin](https://github.com/grblHAL/Plugin_encoder/blob/master/README.md) is added to the build.
--- ---
2021-05-09 2021-06-08

View File

@ -36,16 +36,15 @@
#include "grbl/report.h" #include "grbl/report.h"
#include "grbl/nvs_buffer.h" #include "grbl/nvs_buffer.h"
#include "networking/ftpd.h" #include "networking/networking.h"
#include "networking/TCPStream.h"
#include "networking/WsStream.h"
static volatile bool linkUp = false; static volatile bool linkUp = false;
static char IPAddress[IP4ADDR_STRLEN_MAX]; static char IPAddress[IP4ADDR_STRLEN_MAX];
static network_services_t services = {0}; static network_services_t services = {0}, allowed_services;
static nvs_address_t nvs_address; static nvs_address_t nvs_address;
static network_settings_t ethernet, network; static network_settings_t ethernet, network;
static on_report_options_ptr on_report_options; static on_report_options_ptr on_report_options;;
static char netservices[30] = ""; // must be large enough to hold all service names
static void report_options (bool newopt) static void report_options (bool newopt)
{ {
@ -169,35 +168,15 @@ static void ethernet_settings_load (void);
static void ethernet_settings_restore (void); static void ethernet_settings_restore (void);
static status_code_t ethernet_set_ip (setting_id_t setting, char *value); static status_code_t ethernet_set_ip (setting_id_t setting, char *value);
static char *ethernet_get_ip (setting_id_t setting); static char *ethernet_get_ip (setting_id_t setting);
static status_code_t ethernet_set_services (setting_id_t setting, uint_fast16_t int_value);
static uint32_t ethernet_get_services (setting_id_t id);
static const setting_group_detail_t ethernet_groups [] = { static const setting_group_detail_t ethernet_groups [] = {
{ Group_Root, Group_Networking, "Networking" } { Group_Root, Group_Networking, "Networking" }
}; };
#if TELNET_ENABLE && WEBSOCKET_ENABLE && FTP_ENABLE
static const char netservices[] = "Telnet,Websocket,FTP";
static const char servicemap[] = "11";
#endif
#if TELNET_ENABLE && WEBSOCKET_ENABLE && HTTP_ENABLE
static const char netservices[] = "Telnet,Websocket,HTTP";
static const char servicemap[] = "7";
#endif
#if TELNET_ENABLE && WEBSOCKET_ENABLE && !FTP_ENABLE && !HTTP_ENABLE
static const char netservices[] = "Telnet,Websocket";
static const char servicemap[] = "2";
#endif
#if TELNET_ENABLE && !WEBSOCKET_ENABLE && !HTTP_ENABLE
static const char netservices[] = "Telnet";
static const char servicemap[] = "1";
#endif
static const network_services_t aserv = {
.telnet = 1,
.ftp = 1
};
PROGMEM static const setting_detail_t ethernet_settings[] = { PROGMEM static const setting_detail_t ethernet_settings[] = {
{ Setting_NetworkServices, Group_Networking, "Network Services", NULL, Format_Bitfield, netservices, NULL, NULL, Setting_NonCore, &ethernet.services.mask, NULL, NULL }, { Setting_NetworkServices, Group_Networking, "Network Services", NULL, Format_Bitfield, netservices, NULL, NULL, Setting_NonCoreFn, ethernet_set_services, ethernet_get_services, NULL },
{ Setting_Hostname, Group_Networking, "Hostname", NULL, Format_String, "x(64)", NULL, "64", Setting_NonCore, ethernet.hostname, NULL, NULL }, { Setting_Hostname, Group_Networking, "Hostname", NULL, Format_String, "x(64)", NULL, "64", Setting_NonCore, ethernet.hostname, NULL, NULL },
{ Setting_IpMode, Group_Networking, "IP Mode", NULL, Format_RadioButtons, "Static,DHCP,AutoIP", NULL, NULL, Setting_NonCore, &ethernet.ip_mode, NULL, NULL }, { Setting_IpMode, Group_Networking, "IP Mode", NULL, Format_RadioButtons, "Static,DHCP,AutoIP", NULL, NULL, Setting_NonCore, &ethernet.ip_mode, NULL, NULL },
{ Setting_IpAddress, Group_Networking, "IP Address", NULL, Format_IPv4, NULL, NULL, NULL, Setting_NonCoreFn, ethernet_set_ip, ethernet_get_ip, NULL }, { Setting_IpAddress, Group_Networking, "IP Address", NULL, Format_IPv4, NULL, NULL, NULL, Setting_NonCoreFn, ethernet_set_ip, ethernet_get_ip, NULL },
@ -287,6 +266,18 @@ static char *ethernet_get_ip (setting_id_t setting)
return ip; return ip;
} }
static status_code_t ethernet_set_services (setting_id_t setting, uint_fast16_t int_value)
{
ethernet.services.mask = int_value & allowed_services.mask;
return Status_OK;
}
static uint32_t ethernet_get_services (setting_id_t id)
{
return (uint32_t)ethernet.services.mask;
}
void ethernet_settings_restore (void) void ethernet_settings_restore (void)
{ {
strcpy(ethernet.hostname, NETWORK_HOSTNAME); strcpy(ethernet.hostname, NETWORK_HOSTNAME);
@ -309,26 +300,10 @@ void ethernet_settings_restore (void)
set_addr(ethernet.mask, &addr); set_addr(ethernet.mask, &addr);
#endif #endif
ethernet.services.mask = 0;
ethernet.telnet_port = NETWORK_TELNET_PORT; ethernet.telnet_port = NETWORK_TELNET_PORT;
ethernet.http_port = NETWORK_HTTP_PORT; ethernet.http_port = NETWORK_HTTP_PORT;
ethernet.websocket_port = NETWORK_WEBSOCKET_PORT; ethernet.websocket_port = NETWORK_WEBSOCKET_PORT;
ethernet.services.mask = allowed_services.mask;
#if TELNET_ENABLE
ethernet.services.telnet = On;
#endif
#if FTP_ENABLE
ethernet.services.ftp = On;
#endif
#if HTTP_ENABLE
ethernet.services.http = On;
#endif
#if WEBSOCKET_ENABLE
ethernet.services.websocket = On;
#endif
hal.nvs.memcpy_to_nvs(nvs_address, (uint8_t *)&ethernet, sizeof(network_settings_t), true); hal.nvs.memcpy_to_nvs(nvs_address, (uint8_t *)&ethernet, sizeof(network_settings_t), true);
} }
@ -337,6 +312,8 @@ static void ethernet_settings_load (void)
{ {
if(hal.nvs.memcpy_from_nvs((uint8_t *)&ethernet, nvs_address, sizeof(network_settings_t), true) != NVS_TransferResult_OK) if(hal.nvs.memcpy_from_nvs((uint8_t *)&ethernet, nvs_address, sizeof(network_settings_t), true) != NVS_TransferResult_OK)
ethernet_settings_restore(); ethernet_settings_restore();
ethernet.services.mask &= allowed_services.mask;
} }
bool grbl_enet_init (network_settings_t *settings) bool grbl_enet_init (network_settings_t *settings)
@ -348,6 +325,8 @@ bool grbl_enet_init (network_settings_t *settings)
details.on_get_settings = grbl.on_get_settings; details.on_get_settings = grbl.on_get_settings;
grbl.on_get_settings = on_get_settings; grbl.on_get_settings = on_get_settings;
allowed_services.mask = networking_get_services_list((char *)netservices).mask;
} }
return nvs_address != 0; return nvs_address != 0;

BIN
patches/sd_sdhc.zip Normal file

Binary file not shown.