Use dbg_logic logging
and improve the variadic version used to print formatted text at some spots in previous commitspull/126/head
parent
a13f3b8a2d
commit
236a40c6ef
|
|
@ -31,6 +31,15 @@ void dbg_usart_P(const char *layer_P, const char *s_P) {
|
|||
hu::usart1.puts_P(s_P);
|
||||
}
|
||||
|
||||
void dbg_usart_sprintf_P(const char *fmt_P, ...) {
|
||||
char tmp[30];
|
||||
va_list argptr;
|
||||
va_start(argptr, fmt_P);
|
||||
vsprintf(tmp, fmt_P, argptr);
|
||||
va_end(argptr);
|
||||
dbg_logic(tmp);
|
||||
}
|
||||
|
||||
} // namespace debug
|
||||
|
||||
#endif
|
||||
|
|
|
|||
21
src/debug.h
21
src/debug.h
|
|
@ -5,24 +5,31 @@
|
|||
#define DEBUG_LOGIC
|
||||
|
||||
/// Enable DEBUG_LOGIC to compile debugging and error messages (beware of code base size ;) ) for the logic layer
|
||||
#define DEBUG_MODULES
|
||||
//#define DEBUG_MODULES
|
||||
|
||||
/// Enable DEBUG_HAL to compile debugging and error messages (beware of code base size ;) ) for the logic layer
|
||||
#define DEBUG_HAL
|
||||
//#define DEBUG_HAL
|
||||
|
||||
// workaround non-standard PSTR definition on non-AVR platforms
|
||||
#ifndef __AVR__
|
||||
#define PSTR(x) x
|
||||
#endif
|
||||
|
||||
/// Debugging macros and tools
|
||||
namespace debug {
|
||||
|
||||
#ifdef DEBUG_LOGIC
|
||||
#if defined(DEBUG_LOGIC) && defined(__AVR__)
|
||||
extern const char logic[];
|
||||
#define dbg_logic(x) debug::dbg_usart(debug::logic, x)
|
||||
#define dbg_logic_P(x) debug::dbg_usart_P(debug::logic, x)
|
||||
#define dbg_logic_sprintf_P(fmt, ...) debug::dbg_usart_sprintf_P(fmt, __VA_ARGS__)
|
||||
#else
|
||||
#define dbg_logic(x) /* */
|
||||
#define dbg_logic_P(x) /* */
|
||||
#define dbg_logic_sprintf_P(fmt, ...) /* */
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_MODULES
|
||||
#if defined(DEBUG_MODULES) && defined(__AVR__)
|
||||
extern const char modules[];
|
||||
#define dbg_modules(x) debug::dbg_usart(debug::modules, x)
|
||||
#define dbg_modules_P(x) debug::dbg_usart_P(debug::modules, x)
|
||||
|
|
@ -31,7 +38,7 @@ extern const char modules[];
|
|||
#define dbg_modules_P(x) /* */
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_HAL
|
||||
#if defined(DEBUG_HAL) && defined(__AVR__)
|
||||
extern const char hal[];
|
||||
#define dbg_hal(x) debug::dbg_usart(debug::hal, x)
|
||||
#define dbg_hal_P(x) debug::dbg_usart_P(debug::hal, x)
|
||||
|
|
@ -50,6 +57,10 @@ void dbg_usart(const char *layer_P, const char *s);
|
|||
/// @param layer PROGMEM string
|
||||
/// @param s PROGMEM string to be printed
|
||||
void dbg_usart_P(const char *layer_P, const char *s_P);
|
||||
|
||||
/// Dump an error message onto the USART with sprintf-like formatting
|
||||
/// @param fmt_P PROGMEM format string
|
||||
void dbg_usart_sprintf_P(const char *fmt_P, ...);
|
||||
#endif
|
||||
|
||||
} // namespace debug
|
||||
|
|
|
|||
|
|
@ -6,18 +6,12 @@
|
|||
#include "../modules/leds.h"
|
||||
#include "../modules/motion.h"
|
||||
#include "../modules/permanent_storage.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
namespace logic {
|
||||
|
||||
void FeedToBondtech::Reset(uint8_t maxRetries) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("\nFeed to Bondtech\n\n"));
|
||||
state = EngagingIdler;
|
||||
this->maxRetries = maxRetries;
|
||||
ml::leds.SetMode(mg::globals.ActiveSlot(), ml::green, ml::blink0);
|
||||
|
|
@ -28,21 +22,14 @@ bool FeedToBondtech::Step() {
|
|||
switch (state) {
|
||||
case EngagingIdler:
|
||||
if (mi::idler.Engaged()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
uint16_t startSteps = mm::motion.CurPosition(mm::Pulley);
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("\nPulley start steps %u\n\n"), startSteps);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_sprintf_P(PSTR("\nPulley start steps %u\n\n"), mm::motion.CurPosition(mm::Pulley));
|
||||
state = PushingFilament;
|
||||
mm::motion.PlanMove<mm::Pulley>(config::defaultBowdenLength, config::pulleyFeedrate); //@@TODO constants - there was some strange acceleration sequence in the original FW,
|
||||
// we can probably hand over some array of constants for hand-tuned acceleration + leverage some smoothing in the stepper as well
|
||||
}
|
||||
return false;
|
||||
case PushingFilament:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech --> Pushing\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("\nFeed to Bondtech --> Pushing\n\n"));
|
||||
if (mfs::fsensor.Pressed()) {
|
||||
mm::motion.AbortPlannedMoves(); // stop pushing filament
|
||||
mi::idler.Disengage();
|
||||
|
|
@ -55,22 +42,16 @@ bool FeedToBondtech::Step() {
|
|||
}
|
||||
return false;
|
||||
case DisengagingIdler:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech --> DisengagingIdler\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("\nFeed to Bondtech --> DisengagingIdler\n\n"));
|
||||
if (!mi::idler.Engaged()) {
|
||||
state = OK;
|
||||
ml::leds.SetMode(mg::globals.ActiveSlot(), ml::green, ml::on);
|
||||
}
|
||||
return false;
|
||||
case OK:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("\nFeed to Bondtech\n\n"));
|
||||
case Failed:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("\nFeed to Bondtech FAILED\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("\nFeed to Bondtech FAILED\n\n"));
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,11 +7,7 @@
|
|||
#include "../modules/permanent_storage.h"
|
||||
#include "../modules/selector.h"
|
||||
#include "../modules/user_input.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
namespace logic {
|
||||
|
||||
|
|
@ -21,9 +17,7 @@ void LoadFilament::Reset(uint8_t param) {
|
|||
if (!CheckToolIndex(param)) {
|
||||
return;
|
||||
}
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Load Filament\n\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Load Filament\n\n"));
|
||||
state = ProgressCode::EngagingIdler;
|
||||
error = ErrorCode::RUNNING;
|
||||
mg::globals.SetActiveSlot(param);
|
||||
|
|
|
|||
|
|
@ -8,11 +8,7 @@
|
|||
#include "../modules/permanent_storage.h"
|
||||
#include "../modules/selector.h"
|
||||
#include "../modules/user_input.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
namespace logic {
|
||||
|
||||
|
|
@ -24,10 +20,8 @@ void ToolChange::Reset(uint8_t param) {
|
|||
}
|
||||
|
||||
if (param == mg::globals.ActiveSlot() && mg::globals.FilamentLoaded()) {
|
||||
// we are already at the correct slot and the filament is loaded - nothing to do
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("we are already at the correct slot and the filament is loaded - nothing to do\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
// we are already at the correct slot and the filament is loaded - nothing to do
|
||||
dbg_logic_P(PSTR("we are already at the correct slot and the filament is loaded - nothing to do\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -36,17 +30,13 @@ void ToolChange::Reset(uint8_t param) {
|
|||
plannedSlot = param;
|
||||
|
||||
if (mg::globals.FilamentLoaded()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Filament is loaded --> unload\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Filament is loaded --> unload\n"));
|
||||
state = ProgressCode::UnloadingFilament;
|
||||
unl.Reset(mg::globals.ActiveSlot());
|
||||
} else {
|
||||
state = ProgressCode::FeedingToFinda;
|
||||
error = ErrorCode::RUNNING;
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Filament is not loaded --> load\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Filament is not loaded --> load\n"));
|
||||
mg::globals.SetActiveSlot(plannedSlot);
|
||||
feed.Reset(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,11 +6,7 @@
|
|||
#include "../modules/motion.h"
|
||||
#include "../modules/permanent_storage.h"
|
||||
#include "../modules/user_input.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
namespace logic {
|
||||
|
||||
|
|
|
|||
|
|
@ -3,11 +3,7 @@
|
|||
#include "leds.h"
|
||||
#include "motion.h"
|
||||
#include "permanent_storage.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
namespace modules {
|
||||
namespace idler {
|
||||
|
|
@ -16,34 +12,24 @@ Idler idler;
|
|||
|
||||
void Idler::PrepareMoveToPlannedSlot() {
|
||||
mm::motion.PlanMoveTo<mm::Idler>(SlotPosition(plannedSlot), mm::unitToAxisUnit<mm::I_speed_t>(config::idlerFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("Prepare Move Idler slot %d\n"), plannedSlot);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_sprintf_P(PSTR("Prepare Move Idler slot %d\n"), plannedSlot);
|
||||
}
|
||||
|
||||
void Idler::PlanHomingMove() {
|
||||
mm::motion.PlanMove<mm::Idler>(mm::unitToAxisUnit<mm::I_pos_t>(-config::idlerLimits.lenght * 2), mm::unitToAxisUnit<mm::I_speed_t>(config::idlerFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Plan Homing Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Plan Homing Idler\n"));
|
||||
}
|
||||
|
||||
Idler::OperationResult Idler::Disengage() {
|
||||
if (state == Moving) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving --> Disengage refused\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Moving --> Disengage refused\n"));
|
||||
return OperationResult::Refused;
|
||||
}
|
||||
plannedSlot = IdleSlotIndex();
|
||||
plannedEngage = false;
|
||||
|
||||
if (!Engaged()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Disengage Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Disengage Idler\n"));
|
||||
return OperationResult::Accepted;
|
||||
}
|
||||
return InitMovement(mm::Idler);
|
||||
|
|
@ -51,9 +37,7 @@ Idler::OperationResult Idler::Disengage() {
|
|||
|
||||
Idler::OperationResult Idler::Engage(uint8_t slot) {
|
||||
if (state == Moving) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving --> Engage refused\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Moving --> Engage refused\n"));
|
||||
return OperationResult::Refused;
|
||||
}
|
||||
|
||||
|
|
@ -61,9 +45,7 @@ Idler::OperationResult Idler::Engage(uint8_t slot) {
|
|||
plannedEngage = true;
|
||||
|
||||
if (Engaged()) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Engage Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Engage Idler\n"));
|
||||
return OperationResult::Accepted;
|
||||
}
|
||||
|
||||
|
|
@ -81,21 +63,15 @@ bool Idler::Home() {
|
|||
bool Idler::Step() {
|
||||
switch (state) {
|
||||
case Moving:
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Moving Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
// dbg_logic_P(PSTR("Moving Idler\n"));
|
||||
PerformMove(mm::Idler);
|
||||
return false;
|
||||
case Homing:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Homing Idler\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Homing Idler\n"));
|
||||
PerformHome(mm::Idler);
|
||||
return false;
|
||||
case Ready:
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Idler Ready\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
// dbg_logic_P(PSTR("Idler Ready\n"));
|
||||
currentlyEngaged = plannedEngage;
|
||||
currentSlot = plannedSlot;
|
||||
|
||||
|
|
@ -104,9 +80,7 @@ bool Idler::Step() {
|
|||
|
||||
return true;
|
||||
case Failed:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Idler Failed\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Idler Failed\n"));
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
#include "motion.h"
|
||||
#include "../panic.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
// TODO: use proper timer abstraction
|
||||
#ifdef __AVR__
|
||||
|
|
@ -50,11 +46,7 @@ void Motion::StallGuardReset(Axis axis) {
|
|||
}
|
||||
|
||||
void Motion::PlanMoveTo(Axis axis, pos_t pos, steps_t feed_rate, steps_t end_rate) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("Move axis %d to %u\n"), axis, pos);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_sprintf_P(PSTR("Move axis %d to %u\n"), axis, pos);
|
||||
|
||||
if (axisData[axis].ctrl.PlanMoveTo(pos, feed_rate, end_rate)) {
|
||||
// move was queued, prepare the axis
|
||||
|
|
|
|||
|
|
@ -3,11 +3,7 @@
|
|||
#include "leds.h"
|
||||
#include "motion.h"
|
||||
#include "permanent_storage.h"
|
||||
#ifdef DEBUG_LOGIC
|
||||
#include "../hal/usart.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#endif //DEBUG_LOGIC
|
||||
#include "../debug.h"
|
||||
|
||||
namespace modules {
|
||||
namespace selector {
|
||||
|
|
@ -16,33 +12,23 @@ Selector selector;
|
|||
|
||||
void Selector::PrepareMoveToPlannedSlot() {
|
||||
mm::motion.PlanMoveTo<mm::Selector>(SlotPosition(plannedSlot), mm::unitToAxisUnit<mm::S_speed_t>(config::selectorFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
char str[30];
|
||||
sprintf_P(str, PSTR("Prepare Move Selector slot %d\n"), plannedSlot);
|
||||
hu::usart1.puts(str);
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_sprintf_P(PSTR("Prepare Move Selector slot %d\n"), plannedSlot);
|
||||
}
|
||||
|
||||
void Selector::PlanHomingMove() {
|
||||
mm::motion.PlanMove<mm::Selector>(mm::unitToAxisUnit<mm::S_pos_t>(config::selectorLimits.lenght * 2), mm::unitToAxisUnit<mm::S_speed_t>(config::selectorFeedrate));
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Plan Homing Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Plan Homing Selector\n"));
|
||||
}
|
||||
|
||||
Selector::OperationResult Selector::MoveToSlot(uint8_t slot) {
|
||||
if (state == Moving) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving --> Selector refused\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Moving --> Selector refused\n"));
|
||||
return OperationResult::Refused;
|
||||
}
|
||||
plannedSlot = slot;
|
||||
|
||||
if (currentSlot == slot) {
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Moving Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Moving Selector\n"));
|
||||
return OperationResult::Accepted;
|
||||
}
|
||||
return InitMovement(mm::Selector);
|
||||
|
|
@ -59,27 +45,19 @@ bool Selector::Step() {
|
|||
switch (state) {
|
||||
case Moving:
|
||||
PerformMove(mm::Selector);
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Moving Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
//dbg_logic_P(PSTR("Moving Selector\n"));
|
||||
return false;
|
||||
case Homing:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Homing Selector\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Homing Selector\n"));
|
||||
PerformHome(mm::Selector);
|
||||
return false;
|
||||
case Ready:
|
||||
#ifdef DEBUG_LOGIC
|
||||
//hu::usart1.puts("Selector Ready\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
//dbg_logic_P(PSTR("Selector Ready\n"));
|
||||
currentSlot = plannedSlot;
|
||||
mm::motion.Disable(mm::Selector); // turn off selector motor's power every time
|
||||
return true;
|
||||
case Failed:
|
||||
#ifdef DEBUG_LOGIC
|
||||
hu::usart1.puts("Selector Failed\n");
|
||||
#endif //DEBUG_LOGIC
|
||||
dbg_logic_P(PSTR("Selector Failed\n"));
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue