commit
5bc40aff85
@ -9,8 +9,16 @@
|
||||
#include "mesh_bed_leveling.h"
|
||||
#endif
|
||||
|
||||
void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size)
|
||||
#ifdef DEBUG_EEPROM_WRITE
|
||||
#define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value), #value)
|
||||
#else //DEBUG_EEPROM_WRITE
|
||||
#define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value), 0)
|
||||
#endif //DEBUG_EEPROM_WRITE
|
||||
void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size, char* name)
|
||||
{
|
||||
#ifdef DEBUG_EEPROM_WRITE
|
||||
printf_P(PSTR("EEPROM_WRITE_VAR addr=0x%04x size=0x%02hhx name=%s\n"), pos, size, name);
|
||||
#endif //DEBUG_EEPROM_WRITE
|
||||
while (size--) {
|
||||
uint8_t * const p = (uint8_t * const)pos;
|
||||
uint8_t v = *value;
|
||||
@ -28,9 +36,17 @@ void _EEPROM_writeData(int &pos, uint8_t* value, uint8_t size)
|
||||
};
|
||||
|
||||
}
|
||||
#define EEPROM_WRITE_VAR(pos, value) _EEPROM_writeData(pos, (uint8_t*)&value, sizeof(value))
|
||||
void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size)
|
||||
|
||||
#ifdef DEBUG_EEPROM_READ
|
||||
#define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value), #value)
|
||||
#else //DEBUG_EEPROM_READ
|
||||
#define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value), 0)
|
||||
#endif //DEBUG_EEPROM_READ
|
||||
void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size, char* name)
|
||||
{
|
||||
#ifdef DEBUG_EEPROM_READ
|
||||
printf_P(PSTR("EEPROM_READ_VAR addr=0x%04x size=0x%02hhx name=%s\n"), pos, size, name);
|
||||
#endif //DEBUG_EEPROM_READ
|
||||
do
|
||||
{
|
||||
*value = eeprom_read_byte((unsigned char*)pos);
|
||||
@ -38,7 +54,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size)
|
||||
value++;
|
||||
}while(--size);
|
||||
}
|
||||
#define EEPROM_READ_VAR(pos, value) _EEPROM_readData(pos, (uint8_t*)&value, sizeof(value))
|
||||
|
||||
//======================================================================================
|
||||
#define EEPROM_OFFSET 20
|
||||
// IMPORTANT: Whenever there are changes made to the variables stored in EEPROM
|
||||
|
@ -1,5 +1,146 @@
|
||||
#include "Dcodes.h"
|
||||
#include "Marlin.h"
|
||||
//#include "Marlin.h"
|
||||
#include "language.h"
|
||||
#include "cmdqueue.h"
|
||||
#include <stdio.h>
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
|
||||
#define DBG(args...) printf_P(args)
|
||||
|
||||
inline void print_hex_nibble(uint8_t val)
|
||||
{
|
||||
putchar((val > 9)?(val - 10 + 'a'):(val + '0'));
|
||||
}
|
||||
|
||||
void print_hex_byte(uint8_t val)
|
||||
{
|
||||
print_hex_nibble(val >> 4);
|
||||
print_hex_nibble(val & 15);
|
||||
}
|
||||
|
||||
void print_hex_word(uint16_t val)
|
||||
{
|
||||
print_hex_byte(val >> 8);
|
||||
print_hex_byte(val & 255);
|
||||
}
|
||||
|
||||
void print_eeprom(uint16_t address, uint16_t count, uint8_t countperline = 16)
|
||||
{
|
||||
while (count)
|
||||
{
|
||||
print_hex_word(address);
|
||||
putchar(' ');
|
||||
uint8_t count_line = countperline;
|
||||
while (count && count_line)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
putchar(' ');
|
||||
print_hex_byte(eeprom_read_byte((uint8_t*)address++));
|
||||
count_line--;
|
||||
count--;
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
int parse_hex(char* hex, uint8_t* data, int count)
|
||||
{
|
||||
int parsed = 0;
|
||||
while (*hex)
|
||||
{
|
||||
if (count && (parsed >= count)) break;
|
||||
char c = *(hex++);
|
||||
if (c == ' ') continue;
|
||||
if (c == '\n') break;
|
||||
uint8_t val = 0x00;
|
||||
if ((c >= '0') && (c <= '9')) val |= ((c - '0') << 4);
|
||||
else if ((c >= 'a') && (c <= 'f')) val |= ((c - 'a' + 10) << 4);
|
||||
else return -parsed;
|
||||
c = *(hex++);
|
||||
if ((c >= '0') && (c <= '9')) val |= (c - '0');
|
||||
else if ((c >= 'a') && (c <= 'f')) val |= (c - 'a' + 10);
|
||||
else return -parsed;
|
||||
data[parsed] = val;
|
||||
parsed++;
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
||||
|
||||
void print_mem(uint32_t address, uint16_t count, uint8_t type, uint8_t countperline = 16)
|
||||
{
|
||||
while (count)
|
||||
{
|
||||
if (type == 2)
|
||||
print_hex_nibble(address >> 16);
|
||||
print_hex_word(address);
|
||||
putchar(' ');
|
||||
uint8_t count_line = countperline;
|
||||
while (count && count_line)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
switch (type)
|
||||
{
|
||||
case 0: data = *((uint8_t*)address++); break;
|
||||
case 1: data = eeprom_read_byte((uint8_t*)address++); break;
|
||||
case 2: data = pgm_read_byte_far((uint8_t*)address++); break;
|
||||
}
|
||||
putchar(' ');
|
||||
print_hex_byte(data);
|
||||
count_line--;
|
||||
count--;
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG_DCODE3
|
||||
#define EEPROM_SIZE 0x1000
|
||||
void dcode_3()
|
||||
{
|
||||
DBG(_N("D3 - Read/Write EEPROM\n"));
|
||||
uint16_t address = 0x0000; //default 0x0000
|
||||
uint16_t count = EEPROM_SIZE; //default 0x1000 (entire eeprom)
|
||||
if (code_seen('A')) // Address (0x0000-0x0fff)
|
||||
address = (strchr_pointer[1] == 'x')?strtol(strchr_pointer + 2, 0, 16):(int)code_value();
|
||||
if (code_seen('C')) // Count (0x0001-0x1000)
|
||||
count = (int)code_value();
|
||||
address &= 0x1fff;
|
||||
if (count > EEPROM_SIZE) count = EEPROM_SIZE;
|
||||
if ((address + count) > EEPROM_SIZE) count = EEPROM_SIZE - address;
|
||||
if (code_seen('X')) // Data
|
||||
{
|
||||
uint8_t data[16];
|
||||
count = parse_hex(strchr_pointer + 1, data, 16);
|
||||
if (count > 0)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
eeprom_write_byte((uint8_t*)(address + i), data[i]);
|
||||
printf_P(_N("%d bytes written to EEPROM at address 0x%04x"), count, address);
|
||||
putchar('\n');
|
||||
}
|
||||
else
|
||||
count = 0;
|
||||
}
|
||||
print_mem(address, count, 1);
|
||||
/* while (count)
|
||||
{
|
||||
print_hex_word(address);
|
||||
putchar(' ');
|
||||
uint8_t countperline = 16;
|
||||
while (count && countperline)
|
||||
{
|
||||
uint8_t data = eeprom_read_byte((uint8_t*)address++);
|
||||
putchar(' ');
|
||||
print_hex_byte(data);
|
||||
countperline--;
|
||||
count--;
|
||||
}
|
||||
putchar('\n');
|
||||
}*/
|
||||
}
|
||||
#endif //DEBUG_DCODE3
|
||||
|
||||
#ifdef DEBUG_DCODES
|
||||
|
||||
@ -29,76 +170,9 @@ extern float current_temperature_pinda;
|
||||
extern float axis_steps_per_unit[NUM_AXIS];
|
||||
|
||||
|
||||
inline void print_hex_nibble(uint8_t val)
|
||||
{
|
||||
putchar((val > 9)?(val - 10 + 'a'):(val + '0'));
|
||||
}
|
||||
|
||||
void print_hex_byte(uint8_t val)
|
||||
{
|
||||
print_hex_nibble(val >> 4);
|
||||
print_hex_nibble(val & 15);
|
||||
}
|
||||
|
||||
void print_hex_word(uint16_t val)
|
||||
{
|
||||
print_hex_byte(val >> 8);
|
||||
print_hex_byte(val & 255);
|
||||
}
|
||||
|
||||
void print_mem(uint32_t address, uint16_t count, uint8_t type, uint8_t countperline = 16)
|
||||
{
|
||||
while (count)
|
||||
{
|
||||
if (type == 2)
|
||||
print_hex_nibble(address >> 16);
|
||||
print_hex_word(address);
|
||||
putchar(' ');
|
||||
uint8_t count_line = countperline;
|
||||
while (count && count_line)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
switch (type)
|
||||
{
|
||||
case 0: data = *((uint8_t*)address++); break;
|
||||
case 1: data = eeprom_read_byte((uint8_t*)address++); break;
|
||||
case 2: data = pgm_read_byte_far((uint8_t*)address++); break;
|
||||
}
|
||||
putchar(' ');
|
||||
print_hex_byte(data);
|
||||
count_line--;
|
||||
count--;
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
}
|
||||
|
||||
//#define LOG(args...) printf(args)
|
||||
#define LOG(args...)
|
||||
|
||||
int parse_hex(char* hex, uint8_t* data, int count)
|
||||
{
|
||||
int parsed = 0;
|
||||
while (*hex)
|
||||
{
|
||||
if (count && (parsed >= count)) break;
|
||||
char c = *(hex++);
|
||||
if (c == ' ') continue;
|
||||
if (c == '\n') break;
|
||||
uint8_t val = 0x00;
|
||||
if ((c >= '0') && (c <= '9')) val |= ((c - '0') << 4);
|
||||
else if ((c >= 'a') && (c <= 'f')) val |= ((c - 'a' + 10) << 4);
|
||||
else return -parsed;
|
||||
c = *(hex++);
|
||||
if ((c >= '0') && (c <= '9')) val |= (c - '0');
|
||||
else if ((c >= 'a') && (c <= 'f')) val |= (c - 'a' + 10);
|
||||
else return -parsed;
|
||||
data[parsed] = val;
|
||||
parsed++;
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
||||
void dcode__1()
|
||||
{
|
||||
printf("D-1 - Endless loop\n");
|
||||
@ -177,52 +251,6 @@ void dcode_2()
|
||||
}*/
|
||||
}
|
||||
|
||||
void dcode_3()
|
||||
{
|
||||
LOG("D3 - Read/Write EEPROM\n");
|
||||
uint16_t address = 0x0000; //default 0x0000
|
||||
uint16_t count = 0x2000; //default 0x2000 (entire eeprom)
|
||||
if (code_seen('A')) // Address (0x0000-0x1fff)
|
||||
address = (strchr_pointer[1] == 'x')?strtol(strchr_pointer + 2, 0, 16):(int)code_value();
|
||||
if (code_seen('C')) // Count (0x0001-0x2000)
|
||||
count = (int)code_value();
|
||||
address &= 0x1fff;
|
||||
if (count > 0x2000) count = 0x2000;
|
||||
if ((address + count) > 0x2000) count = 0x2000 - address;
|
||||
if (code_seen('X')) // Data
|
||||
{
|
||||
uint8_t data[16];
|
||||
count = parse_hex(strchr_pointer + 1, data, 16);
|
||||
if (count > 0)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
eeprom_write_byte((uint8_t*)(address + i), data[i]);
|
||||
LOG(count, DEC);
|
||||
LOG(" bytes written to EEPROM at address ");
|
||||
print_hex_word(address);
|
||||
putchar('\n');
|
||||
}
|
||||
else
|
||||
count = 0;
|
||||
}
|
||||
print_mem(address, count, 1);
|
||||
/* while (count)
|
||||
{
|
||||
print_hex_word(address);
|
||||
putchar(' ');
|
||||
uint8_t countperline = 16;
|
||||
while (count && countperline)
|
||||
{
|
||||
uint8_t data = eeprom_read_byte((uint8_t*)address++);
|
||||
putchar(' ');
|
||||
print_hex_byte(data);
|
||||
countperline--;
|
||||
count--;
|
||||
}
|
||||
putchar('\n');
|
||||
}*/
|
||||
}
|
||||
|
||||
void dcode_4()
|
||||
{
|
||||
LOG("D4 - Read/Write PIN\n");
|
||||
|
@ -535,6 +535,9 @@ static void get_arc_coordinates();
|
||||
static bool setTargetedHotend(int code);
|
||||
static void print_time_remaining_init();
|
||||
|
||||
uint16_t gcode_in_progress = 0;
|
||||
uint16_t mcode_in_progress = 0;
|
||||
|
||||
void serial_echopair_P(const char *s_P, float v)
|
||||
{ serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
void serial_echopair_P(const char *s_P, double v)
|
||||
@ -1974,7 +1977,8 @@ void loop()
|
||||
checkHitEndstops();
|
||||
lcd_update(0);
|
||||
#ifdef FILAMENT_SENSOR
|
||||
fsensor_update();
|
||||
if (mcode_in_progress != 600) //M600 not in progress
|
||||
fsensor_update();
|
||||
#endif //FILAMENT_SENSOR
|
||||
#ifdef TMC2130
|
||||
tmc2130_check_overtemp();
|
||||
@ -3186,8 +3190,6 @@ extern uint8_t st_backlash_x;
|
||||
extern uint8_t st_backlash_y;
|
||||
#endif //BACKLASH_Y
|
||||
|
||||
uint16_t gcode_in_progress = 0;
|
||||
uint16_t mcode_in_progress = 0;
|
||||
|
||||
void process_commands()
|
||||
{
|
||||
@ -7101,11 +7103,11 @@ Sigma_Exit:
|
||||
}
|
||||
} // end if(code_seen('T')) (end of T codes)
|
||||
|
||||
#ifdef DEBUG_DCODES
|
||||
else if (code_seen('D')) // D codes (debug)
|
||||
{
|
||||
switch((int)code_value())
|
||||
{
|
||||
#ifdef DEBUG_DCODES
|
||||
case -1: // D-1 - Endless loop
|
||||
dcode__1(); break;
|
||||
case 0: // D0 - Reset
|
||||
@ -7114,8 +7116,12 @@ Sigma_Exit:
|
||||
dcode_1(); break;
|
||||
case 2: // D2 - Read/Write RAM
|
||||
dcode_2(); break;
|
||||
#endif //DEBUG_DCODES
|
||||
#ifdef DEBUG_DCODE3
|
||||
case 3: // D3 - Read/Write EEPROM
|
||||
dcode_3(); break;
|
||||
#endif //DEBUG_DCODE3
|
||||
#ifdef DEBUG_DCODES
|
||||
case 4: // D4 - Read/Write PIN
|
||||
dcode_4(); break;
|
||||
case 5: // D5 - Read/Write FLASH
|
||||
@ -7144,9 +7150,9 @@ Sigma_Exit:
|
||||
dcode_9125(); break;
|
||||
#endif //FILAMENT_SENSOR
|
||||
|
||||
#endif //DEBUG_DCODES
|
||||
}
|
||||
}
|
||||
#endif //DEBUG_DCODES
|
||||
|
||||
else
|
||||
{
|
||||
|
@ -33,11 +33,13 @@ extern int8_t FSensorStateMenu;
|
||||
|
||||
void fsensor_stop_and_save_print(void)
|
||||
{
|
||||
printf_P(PSTR("fsensor_stop_and_save_print\n"));
|
||||
stop_and_save_print_to_ram(0, 0); //XYZE - no change
|
||||
}
|
||||
|
||||
void fsensor_restore_print_and_continue(void)
|
||||
{
|
||||
printf_P(PSTR("fsensor_restore_print_and_continue\n"));
|
||||
restore_print_from_ram_and_continue(0); //XYZ = orig, E - no change
|
||||
}
|
||||
|
||||
@ -240,12 +242,12 @@ bool fsensor_check_autoload(void)
|
||||
fsensor_autoload_c--;
|
||||
if (fsensor_autoload_c == 0) fsensor_autoload_sum = 0;
|
||||
// puts_P(_N("fsensor_check_autoload\n"));
|
||||
if (fsensor_autoload_c != fsensor_autoload_c_old)
|
||||
printf_P(PSTR("fsensor_check_autoload dy=%d c=%d sum=%d\n"), dy, fsensor_autoload_c, fsensor_autoload_sum);
|
||||
// if (fsensor_autoload_c != fsensor_autoload_c_old)
|
||||
// printf_P(PSTR("fsensor_check_autoload dy=%d c=%d sum=%d\n"), dy, fsensor_autoload_c, fsensor_autoload_sum);
|
||||
// if ((fsensor_autoload_c >= 15) && (fsensor_autoload_sum > 30))
|
||||
if ((fsensor_autoload_c >= 10) && (fsensor_autoload_sum > 15))
|
||||
{
|
||||
puts_P(_N("fsensor_check_autoload = true !!!\n"));
|
||||
// puts_P(_N("fsensor_check_autoload = true !!!\n"));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -412,10 +414,10 @@ void fsensor_update(void)
|
||||
{
|
||||
if (fsensor_printing_saved)
|
||||
{
|
||||
fsensor_restore_print_and_continue();
|
||||
fsensor_printing_saved = false;
|
||||
fsensor_watch_runout = true;
|
||||
fsensor_err_cnt = 0;
|
||||
fsensor_restore_print_and_continue();
|
||||
}
|
||||
else if (fsensor_watch_runout && (fsensor_err_cnt > FSENSOR_ERR_MAX))
|
||||
{
|
||||
@ -423,6 +425,19 @@ void fsensor_update(void)
|
||||
fsensor_printing_saved = true;
|
||||
|
||||
fsensor_err_cnt = 0;
|
||||
/*
|
||||
st_synchronize();
|
||||
for (int axis = X_AXIS; axis <= E_AXIS; axis++)
|
||||
current_position[axis] = st_get_position_mm(axis);
|
||||
|
||||
current_position[E_AXIS] -= 3;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 200 / 60, active_extruder);
|
||||
st_synchronize();
|
||||
|
||||
current_position[E_AXIS] += 3;
|
||||
plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], 200 / 60, active_extruder);
|
||||
st_synchronize();
|
||||
*/
|
||||
|
||||
enquecommand_front_P((PSTR("G1 E-3 F200")));
|
||||
process_commands();
|
||||
@ -437,9 +452,11 @@ void fsensor_update(void)
|
||||
if (fsensor_err_cnt == 0)
|
||||
{
|
||||
fsensor_restore_print_and_continue();
|
||||
fsensor_printing_saved = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// printf_P(PSTR("fsensor_update - M600\n"));
|
||||
eeprom_update_byte((uint8_t*)EEPROM_FERROR_COUNT, eeprom_read_byte((uint8_t*)EEPROM_FERROR_COUNT) + 1);
|
||||
eeprom_update_word((uint16_t*)EEPROM_FERROR_COUNT_TOT, eeprom_read_word((uint16_t*)EEPROM_FERROR_COUNT_TOT) + 1);
|
||||
enquecommand_front_P((PSTR("M600")));
|
||||
|
@ -113,6 +113,7 @@
|
||||
#define PAT9125
|
||||
#define FILAMENT_SENSOR
|
||||
|
||||
#define DEBUG_DCODE3
|
||||
|
||||
//#define DEBUG_BUILD
|
||||
#ifdef DEBUG_BUILD
|
||||
|
@ -114,6 +114,7 @@
|
||||
#define PAT9125
|
||||
#define FILAMENT_SENSOR
|
||||
|
||||
#define DEBUG_DCODE3
|
||||
|
||||
//#define DEBUG_BUILD
|
||||
#ifdef DEBUG_BUILD
|
||||
|
@ -147,6 +147,8 @@
|
||||
#define MINTEMP_MINAMBIENT 25
|
||||
#define MINTEMP_MINAMBIENT_RAW 978
|
||||
|
||||
#define DEBUG_DCODE3
|
||||
|
||||
//#define DEBUG_BUILD
|
||||
//#define DEBUG_SEC_LANG //secondary language debug output at startup
|
||||
//#define DEBUG_W25X20CL //debug external spi flash
|
||||
|
Loading…
Reference in New Issue
Block a user