Victor Oliveira
4 years ago
committed by
Scott Lahteine
20 changed files with 269 additions and 38 deletions
@ -0,0 +1,173 @@ |
|||||
|
/**
|
||||
|
* Marlin 3D Printer Firmware |
||||
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
|
* |
||||
|
* Based on Sprinter and grbl. |
||||
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm |
||||
|
* |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
* |
||||
|
*/ |
||||
|
#include "../inc/MarlinConfigPre.h" |
||||
|
|
||||
|
#if ENABLED(MARLIN_DEV_MODE) |
||||
|
|
||||
|
#include "gcode.h" |
||||
|
#include "../module/settings.h" |
||||
|
#include "../libs/hex_print.h" |
||||
|
#include "../HAL/shared/eeprom_if.h" |
||||
|
|
||||
|
/**
|
||||
|
* Dn: G-code for development and testing |
||||
|
* |
||||
|
* See https://reprap.org/wiki/G-code#D:_Debug_codes
|
||||
|
* |
||||
|
* Put whatever else you need here to test ongoing development. |
||||
|
*/ |
||||
|
void GcodeSuite::D(const int16_t dcode) { |
||||
|
switch (dcode) { |
||||
|
|
||||
|
case -1: |
||||
|
for (;;); // forever
|
||||
|
|
||||
|
case 0: |
||||
|
HAL_reboot(); |
||||
|
break; |
||||
|
|
||||
|
case 1: { |
||||
|
// Zero or pattern-fill the EEPROM data
|
||||
|
#if ENABLED(EEPROM_SETTINGS) |
||||
|
persistentStore.access_start(); |
||||
|
size_t total = persistentStore.capacity(); |
||||
|
int pos = 0; |
||||
|
const uint8_t value = 0x0; |
||||
|
while(total--) { |
||||
|
persistentStore.write_data(pos, &value, 1); |
||||
|
} |
||||
|
persistentStore.access_finish(); |
||||
|
#else |
||||
|
settings.reset(); |
||||
|
settings.save(); |
||||
|
#endif |
||||
|
HAL_reboot(); |
||||
|
} break; |
||||
|
|
||||
|
case 2: { // D2 Read / Write SRAM
|
||||
|
#define SRAM_SIZE 8192 |
||||
|
uint8_t *pointer = parser.hex_adr_val('A'); |
||||
|
uint16_t len = parser.ushortval('C', 1); |
||||
|
uintptr_t addr = (uintptr_t)pointer; |
||||
|
NOMORE(addr, (size_t)(SRAM_SIZE - 1)); |
||||
|
NOMORE(len, SRAM_SIZE - addr); |
||||
|
if (parser.seenval('X')) { |
||||
|
// Write the hex bytes after the X
|
||||
|
uint16_t val = parser.hex_val('X'); |
||||
|
while (len--) { |
||||
|
*pointer = val; |
||||
|
pointer++; |
||||
|
} |
||||
|
} |
||||
|
else { |
||||
|
while (len--) print_hex_byte(*(pointer++)); |
||||
|
SERIAL_EOL(); |
||||
|
} |
||||
|
} break; |
||||
|
|
||||
|
case 3: { // D3 Read / Write EEPROM
|
||||
|
uint8_t *pointer = parser.hex_adr_val('A'); |
||||
|
uint16_t len = parser.ushortval('C', 1); |
||||
|
uintptr_t addr = (uintptr_t)pointer; |
||||
|
#ifndef MARLIN_EEPROM_SIZE |
||||
|
#define MARLIN_EEPROM_SIZE size_t(E2END + 1) |
||||
|
#endif |
||||
|
NOMORE(addr, (size_t)(MARLIN_EEPROM_SIZE - 1)); |
||||
|
NOMORE(len, MARLIN_EEPROM_SIZE - addr); |
||||
|
if (parser.seenval('X')) { |
||||
|
uint16_t val = parser.hex_val('X'); |
||||
|
#if ENABLED(EEPROM_SETTINGS) |
||||
|
persistentStore.access_start(); |
||||
|
while(len--) { |
||||
|
int pos = 0; |
||||
|
persistentStore.write_data(pos, (uint8_t *)&val, sizeof(val)); |
||||
|
} |
||||
|
SERIAL_EOL(); |
||||
|
persistentStore.access_finish(); |
||||
|
#else |
||||
|
SERIAL_ECHOLN("NO EEPROM"); |
||||
|
#endif |
||||
|
} |
||||
|
else { |
||||
|
while (len--) { |
||||
|
// Read bytes from EEPROM
|
||||
|
#if ENABLED(EEPROM_SETTINGS) |
||||
|
persistentStore.access_start(); |
||||
|
uint8_t val; |
||||
|
while(len--) { |
||||
|
int pos = 0; |
||||
|
if (!persistentStore.read_data(pos, (uint8_t *)&val, sizeof(val))) { |
||||
|
print_hex_byte(val); |
||||
|
} |
||||
|
} |
||||
|
SERIAL_EOL(); |
||||
|
persistentStore.access_finish(); |
||||
|
#else |
||||
|
SERIAL_ECHOLN("NO EEPROM"); |
||||
|
#endif |
||||
|
} |
||||
|
SERIAL_EOL(); |
||||
|
} |
||||
|
} break; |
||||
|
|
||||
|
case 4: { // D4 Read / Write PIN
|
||||
|
// const uint8_t pin = parser.byteval('P');
|
||||
|
// const bool is_out = parser.boolval('F'),
|
||||
|
// val = parser.byteval('V', LOW);
|
||||
|
if (parser.seenval('X')) { |
||||
|
// TODO: Write the hex bytes after the X
|
||||
|
//while (len--) {
|
||||
|
//}
|
||||
|
} |
||||
|
else { |
||||
|
// while (len--) {
|
||||
|
// TODO: Read bytes from EEPROM
|
||||
|
// print_hex_byte(eeprom_read_byte(*(adr++));
|
||||
|
// }
|
||||
|
SERIAL_EOL(); |
||||
|
} |
||||
|
} break; |
||||
|
|
||||
|
case 5: { // D4 Read / Write onboard Flash
|
||||
|
#define FLASH_SIZE 1024 |
||||
|
uint8_t *pointer = parser.hex_adr_val('A'); |
||||
|
uint16_t len = parser.ushortval('C', 1); |
||||
|
uintptr_t addr = (uintptr_t)pointer; |
||||
|
NOMORE(addr, (size_t)(FLASH_SIZE - 1)); |
||||
|
NOMORE(len, FLASH_SIZE - addr); |
||||
|
if (parser.seenval('X')) { |
||||
|
// TODO: Write the hex bytes after the X
|
||||
|
//while (len--) {
|
||||
|
//}
|
||||
|
} |
||||
|
else { |
||||
|
// while (len--) {
|
||||
|
// TODO: Read bytes from EEPROM
|
||||
|
// print_hex_byte(eeprom_read_byte(adr++));
|
||||
|
// }
|
||||
|
SERIAL_EOL(); |
||||
|
} |
||||
|
} break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#endif |
Loading…
Reference in new issue