Merge pull request #3012 from leptun/MK3_IP_support

M552 - Printer IP address
This commit is contained in:
DRracer 2021-02-02 15:42:04 +01:00 committed by GitHub
commit f7fd7a5331
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 64 additions and 12 deletions

View File

@ -501,4 +501,6 @@ void raise_z_above(float target, bool plan=true);
extern "C" void softReset();
extern uint32_t IP_address;
#endif

View File

@ -321,6 +321,8 @@ uint16_t print_time_remaining_normal = PRINT_TIME_REMAINING_INIT; //estimated re
uint8_t print_percent_done_silent = PRINT_PERCENT_DONE_INIT;
uint16_t print_time_remaining_silent = PRINT_TIME_REMAINING_INIT; //estimated remaining print time in minutes
uint32_t IP_address = 0;
//===========================================================================
//=============================Private Variables=============================
//===========================================================================
@ -3732,6 +3734,7 @@ extern uint8_t st_backlash_y;
//!@n M503 - print the current settings (from memory not from EEPROM)
//!@n M509 - force language selection on next restart
//!@n M540 - Use S[0|1] to enable or disable the stop SD card print on endstop hit (requires ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED)
//!@n M552 - Set IP address
//!@n M600 - Pause for filament change X[pos] Y[pos] Z[relative lift] E[initial retract] L[later retract distance for removal]
//!@n M605 - Set dual x-carriage movement mode: S<mode> [ X<duplication x-offset> R<duplication temp offset> ]
//!@n M860 - Wait for PINDA thermistor to reach target temperature.
@ -8004,6 +8007,36 @@ Sigma_Exit:
}
#endif // CUSTOM_M_CODE_SET_Z_PROBE_OFFSET
/*!
### M552 - Set IP address <a href="https://reprap.org/wiki/G-code#M552:_Set_IP_address.2C_enable.2Fdisable_network_interface">M552: Set IP address, enable/disable network interface"</a>
Sets the printer IP address that is shown in the support menu. Designed to be used with the help of host software.
If P is not specified nothing happens.
If the structure of the IP address is invalid, 0.0.0.0 is assumed and nothing is shown on the screen in the Support menu.
#### Usage
M552 [ P<IP_address> ]
#### Parameters
- `P` - The IP address in xxx.xxx.xxx.xxx format. Eg: P192.168.1.14
*/
case 552:
{
if (code_seen('P'))
{
uint8_t valCnt = 0;
IP_address = 0;
do
{
*strchr_pointer = '*';
((uint8_t*)&IP_address)[valCnt] = code_value_short();
valCnt++;
} while ((valCnt < 4) && code_seen('.'));
if (valCnt != 4)
IP_address = 0;
}
} break;
#ifdef FILAMENTCHANGEENABLE
/*!

View File

@ -2057,8 +2057,8 @@ static void lcd_support_menu()
{ // 22bytes total
int8_t status; // 1byte
bool is_flash_air; // 1byte
uint8_t ip[4]; // 4bytes
char ip_str[3*4+3+1]; // 16bytes
uint32_t ip; // 4bytes
char ip_str[IP4_STR_SIZE]; // 16bytes
} _menu_data_t;
static_assert(sizeof(menu_data)>= sizeof(_menu_data_t),"_menu_data_t doesn't fit into menu_data");
_menu_data_t* _md = (_menu_data_t*)&(menu_data[0]);
@ -2069,17 +2069,10 @@ static void lcd_support_menu()
_md->status = 1;
_md->is_flash_air = card.ToshibaFlashAir_isEnabled();
if (_md->is_flash_air) {
card.ToshibaFlashAir_GetIP(_md->ip); // ip[4] filled with 0 if it failed
// Prepare IP string from ip[4]
sprintf_P(_md->ip_str, PSTR("%d.%d.%d.%d"),
_md->ip[0], _md->ip[1],
_md->ip[2], _md->ip[3]);
card.ToshibaFlashAir_GetIP((uint8_t*)(&_md->ip)); // ip == 0 if it failed
}
} else if (_md->is_flash_air &&
_md->ip[0] == 0 && _md->ip[1] == 0 &&
_md->ip[2] == 0 && _md->ip[3] == 0 &&
++ _md->status == 16)
{
} else if (_md->is_flash_air && _md->ip == 0 && ++ _md->status == 16)
{
// Waiting for the FlashAir card to get an IP address from a router. Force an update.
_md->status = 0;
}
@ -2143,6 +2136,20 @@ static void lcd_support_menu()
MENU_ITEM_BACK_P(PSTR(" "));
if (((menu_item - 1) == menu_line) && lcd_draw_update) {
lcd_set_cursor(2, menu_row);
ip4_to_str(_md->ip_str, (uint8_t*)(&_md->ip));
lcd_printf_P(PSTR("%s"), _md->ip_str);
}
}
// Show the printer IP address, if it is available.
if (IP_address) {
MENU_ITEM_BACK_P(STR_SEPARATOR);
MENU_ITEM_BACK_P(PSTR("Printer IP Addr:")); //c=18 r=1
MENU_ITEM_BACK_P(PSTR(" "));
if (((menu_item - 1) == menu_line) && lcd_draw_update) {
lcd_set_cursor(2, menu_row);
ip4_to_str(_md->ip_str, (uint8_t*)(&IP_address));
lcd_printf_P(PSTR("%s"), _md->ip_str);
}
}

View File

@ -4,6 +4,7 @@
#include "sound.h"
#include "language.h"
#include "util.h"
#include <avr/pgmspace.h>
// Allocate the version string in the program memory. Otherwise the string lands either on the stack or in the global RAM.
const char FW_VERSION_STR[] PROGMEM = FW_VERSION;
@ -604,3 +605,9 @@ else {
sPrinterName=_sPrinterName;
}
}
void ip4_to_str(char* dest, uint8_t* IP)
{
sprintf_P(dest, PSTR("%u.%u.%u.%u"), IP[0], IP[1], IP[2], IP[3]);
}

View File

@ -110,4 +110,7 @@ void gcode_level_check(uint16_t nGcodeLevel);
void fSetMmuMode(bool bMMu);
#define IP4_STR_SIZE 16
extern void ip4_to_str(char* dest, uint8_t* IP);
#endif /* UTIL_H */