Merge pull request #975 from XPila/MK3-new_lang

EEPROM dump (code D3)
This commit is contained in:
PavelSindler 2018-07-26 19:59:09 +02:00 committed by GitHub
commit 5bc40aff85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 198 additions and 127 deletions

View File

@ -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

View File

@ -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");

View File

@ -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
{

View File

@ -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")));

View File

@ -113,6 +113,7 @@
#define PAT9125
#define FILAMENT_SENSOR
#define DEBUG_DCODE3
//#define DEBUG_BUILD
#ifdef DEBUG_BUILD

View File

@ -114,6 +114,7 @@
#define PAT9125
#define FILAMENT_SENSOR
#define DEBUG_DCODE3
//#define DEBUG_BUILD
#ifdef DEBUG_BUILD

View File

@ -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