440 lines
12 KiB
C++
440 lines
12 KiB
C++
/*
|
|
This file is part of Repetier-Firmware.
|
|
|
|
Repetier-Firmware 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.
|
|
|
|
Repetier-Firmware 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 Repetier-Firmware. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
This firmware is a nearly complete rewrite of the sprinter firmware
|
|
by kliment (https://github.com/kliment/Sprinter)
|
|
which based on Tonokip RepRap firmware rewrite based off of Hydra-mmm firmware.
|
|
*/
|
|
|
|
#ifndef COMMUNICATION_H
|
|
#define COMMUNICATION_H
|
|
|
|
class Com
|
|
{
|
|
public:
|
|
FSTRINGVAR(tDebug)
|
|
FSTRINGVAR(tFirmware)
|
|
FSTRINGVAR(tOk)
|
|
FSTRINGVAR(tNewline)
|
|
FSTRINGVAR(tNAN)
|
|
FSTRINGVAR(tINF)
|
|
FSTRINGVAR(tError)
|
|
FSTRINGVAR(tInfo)
|
|
FSTRINGVAR(tWarning)
|
|
FSTRINGVAR(tResend)
|
|
FSTRINGVAR(tEcho)
|
|
FSTRINGVAR(tOkSpace)
|
|
FSTRINGVAR(tWrongChecksum)
|
|
FSTRINGVAR(tMissingChecksum)
|
|
FSTRINGVAR(tFormatError)
|
|
FSTRINGVAR(tDonePrinting)
|
|
FSTRINGVAR(tX)
|
|
FSTRINGVAR(tY)
|
|
FSTRINGVAR(tZ)
|
|
FSTRINGVAR(tE)
|
|
FSTRINGVAR(tF)
|
|
FSTRINGVAR(tS)
|
|
FSTRINGVAR(tP)
|
|
FSTRINGVAR(tI)
|
|
FSTRINGVAR(tJ)
|
|
FSTRINGVAR(tR)
|
|
FSTRINGVAR(tSDReadError)
|
|
FSTRINGVAR(tExpectedLine)
|
|
FSTRINGVAR(tGot)
|
|
FSTRINGVAR(tSkip)
|
|
FSTRINGVAR(tBLK)
|
|
FSTRINGVAR(tStart)
|
|
FSTRINGVAR(tPowerUp)
|
|
FSTRINGVAR(tExternalReset)
|
|
FSTRINGVAR(tBrownOut)
|
|
FSTRINGVAR(tWatchdog)
|
|
FSTRINGVAR(tSoftwareReset)
|
|
FSTRINGVAR(tUnknownCommand)
|
|
FSTRINGVAR(tFreeRAM)
|
|
FSTRINGVAR(tXColon)
|
|
FSTRINGVAR(tSlash)
|
|
FSTRINGVAR(tSpaceSlash)
|
|
FSTRINGVAR(tSpaceXColon)
|
|
FSTRINGVAR(tSpaceYColon)
|
|
FSTRINGVAR(tSpaceZColon)
|
|
FSTRINGVAR(tSpaceEColon)
|
|
FSTRINGVAR(tTColon)
|
|
FSTRINGVAR(tSpaceBColon)
|
|
FSTRINGVAR(tSpaceAtColon)
|
|
FSTRINGVAR(tSpaceT)
|
|
FSTRINGVAR(tSpaceRaw)
|
|
FSTRINGVAR(tSpaceAt)
|
|
FSTRINGVAR(tSpaceBAtColon)
|
|
FSTRINGVAR(tColon)
|
|
FSTRINGVAR(tSpeedMultiply)
|
|
FSTRINGVAR(tFlowMultiply)
|
|
FSTRINGVAR(tHorizontalRadius)
|
|
FSTRINGVAR(tFanspeed)
|
|
FSTRINGVAR(tPrintedFilament)
|
|
FSTRINGVAR(tPrintingTime)
|
|
FSTRINGVAR(tSpacem)
|
|
FSTRINGVAR(tSpaceDaysSpace)
|
|
FSTRINGVAR(tSpaceHoursSpace)
|
|
FSTRINGVAR(tSpaceMin)
|
|
FSTRINGVAR(tInvalidArc)
|
|
FSTRINGVAR(tComma)
|
|
FSTRINGVAR(tSpace)
|
|
FSTRINGVAR(tYColon)
|
|
FSTRINGVAR(tZColon)
|
|
FSTRINGVAR(tE0Colon)
|
|
FSTRINGVAR(tE1Colon)
|
|
FSTRINGVAR(tMS1MS2Pins)
|
|
FSTRINGVAR(tSetOutputSpace)
|
|
FSTRINGVAR(tGetInputSpace)
|
|
FSTRINGVAR(tSpaceToSpace)
|
|
FSTRINGVAR(tSpaceIsSpace)
|
|
FSTRINGVAR(tHSpace)
|
|
FSTRINGVAR(tLSpace)
|
|
FSTRINGVAR(tXMinColon)
|
|
FSTRINGVAR(tXMaxColon)
|
|
FSTRINGVAR(tYMinColon)
|
|
FSTRINGVAR(tYMaxColon)
|
|
FSTRINGVAR(tZMinColon)
|
|
FSTRINGVAR(tZMaxColon)
|
|
FSTRINGVAR(tJerkColon)
|
|
FSTRINGVAR(tZJerkColon)
|
|
FSTRINGVAR(tLinearStepsColon)
|
|
FSTRINGVAR(tQuadraticStepsColon)
|
|
FSTRINGVAR(tCommaSpeedEqual)
|
|
FSTRINGVAR(tLinearLColon)
|
|
FSTRINGVAR(tQuadraticKColon)
|
|
FSTRINGVAR(tEEPROMUpdated)
|
|
|
|
#if DRIVE_SYSTEM==DELTA
|
|
FSTRINGVAR(tMeasurementReset)
|
|
FSTRINGVAR(tMeasureDeltaSteps)
|
|
FSTRINGVAR(tMeasureDelta)
|
|
FSTRINGVAR(tMeasureOriginReset)
|
|
FSTRINGVAR(tMeasurementAbortedOrigin)
|
|
FSTRINGVAR(tInvalidDeltaCoordinate)
|
|
FSTRINGVAR(tLevelingCalc)
|
|
FSTRINGVAR(tTower1)
|
|
FSTRINGVAR(tTower2)
|
|
FSTRINGVAR(tTower3)
|
|
FSTRINGVAR(tDeltaAlphaA)
|
|
FSTRINGVAR(tDeltaAlphaB)
|
|
FSTRINGVAR(tDeltaAlphaC)
|
|
FSTRINGVAR(tDeltaRadiusCorrectionA)
|
|
FSTRINGVAR(tDeltaRadiusCorrectionB)
|
|
FSTRINGVAR(tDeltaRadiusCorrectionC)
|
|
FSTRINGVAR(tDeltaDiagonalCorrectionA)
|
|
FSTRINGVAR(tDeltaDiagonalCorrectionB)
|
|
FSTRINGVAR(tDeltaDiagonalCorrectionC)
|
|
FSTRINGVAR(tDBGDeltaNoMoveinDSegment)
|
|
FSTRINGVAR(tEPRDeltaMaxRadius)
|
|
#endif // DRIVE_SYSTEM
|
|
#if DRIVE_SYSTEM==TUGA
|
|
FSTRINGVAR(tInvalidDeltaCoordinate)
|
|
FSTRINGVAR(tDBGDeltaNoMoveinDSegment)
|
|
FSTRINGVAR(tEPRDiagonalRodLength)
|
|
#endif
|
|
#ifdef DEBUG_GENERIC
|
|
FSTRINGVAR(tGenTemp)
|
|
#endif // DEBUG_GENERICFSTRINGVALUE(Com::,"")
|
|
FSTRINGVAR(tTargetExtr)
|
|
FSTRINGVAR(tTargetBedColon)
|
|
FSTRINGVAR(tPIDAutotuneStart)
|
|
FSTRINGVAR(tAPIDBias)
|
|
FSTRINGVAR(tAPIDD)
|
|
FSTRINGVAR(tAPIDMin)
|
|
FSTRINGVAR(tAPIDMax)
|
|
FSTRINGVAR(tAPIDKu)
|
|
FSTRINGVAR(tAPIDTu)
|
|
FSTRINGVAR(tAPIDClassic)
|
|
FSTRINGVAR(tAPIDKp)
|
|
FSTRINGVAR(tAPIDKi)
|
|
FSTRINGVAR(tAPIDKd)
|
|
FSTRINGVAR(tAPIDFailedHigh)
|
|
FSTRINGVAR(tAPIDFailedTimeout)
|
|
FSTRINGVAR(tAPIDFinished)
|
|
FSTRINGVAR(tMTEMPColon)
|
|
FSTRINGVAR(tHeatedBed)
|
|
FSTRINGVAR(tExtruderSpace)
|
|
FSTRINGVAR(tTempSensorDefect)
|
|
FSTRINGVAR(tTempSensorWorking)
|
|
FSTRINGVAR(tDryModeUntilRestart)
|
|
#ifdef DEBUG_QUEUE_MOVE
|
|
FSTRINGVAR(tDBGId)
|
|
FSTRINGVAR(tDBGVStartEnd)
|
|
FSTRINGVAR(tDBAccelSteps)
|
|
FSTRINGVAR(tDBGStartEndSpeed)
|
|
FSTRINGVAR(tDBGFlags)
|
|
FSTRINGVAR(tDBGJoinFlags)
|
|
FSTRINGVAR(tDBGDelta)
|
|
FSTRINGVAR(tDBGDir)
|
|
FSTRINGVAR(tDBGFullSpeed)
|
|
FSTRINGVAR(tDBGVMax)
|
|
FSTRINGVAR(tDBGAcceleration)
|
|
FSTRINGVAR(tDBGAccelerationPrim)
|
|
FSTRINGVAR(tDBGRemainingSteps)
|
|
FSTRINGVAR(tDBGAdvanceFull)
|
|
FSTRINGVAR(tDBGAdvanceRate)
|
|
FSTRINGVAR(tDBGLimitInterval)
|
|
FSTRINGVAR(tDBGMoveDistance)
|
|
FSTRINGVAR(tDBGCommandedFeedrate)
|
|
FSTRINGVAR(tDBGConstFullSpeedMoveTime)
|
|
#endif // DEBUG_QUEUE_MOVEFSTRINGVALUE(Com::,"")
|
|
#ifdef DEBUG_DELTA_OVERFLOW
|
|
FSTRINGVAR(tDBGDeltaOverflow)
|
|
#endif // DEBUG_DELTA_OVERFLOW
|
|
#ifdef DEBUG_SPLIT
|
|
FSTRINGVAR(tDBGDeltaSeconds)
|
|
FSTRINGVAR(tDBGDeltaZDelta)
|
|
FSTRINGVAR(tDBGDeltaSegments)
|
|
FSTRINGVAR(tDBGDeltaNumLines)
|
|
FSTRINGVAR(tDBGDeltaSegmentsPerLine)
|
|
FSTRINGVAR(tDBGDeltaMaxDS)
|
|
FSTRINGVAR(tDBGDeltaStepsPerSegment)
|
|
FSTRINGVAR(tDBGDeltaVirtualAxisSteps)
|
|
#endif
|
|
#ifdef DEBUG_STEPCOUNT
|
|
FSTRINGVAR(tDBGMissedSteps)
|
|
#endif
|
|
#if FEATURE_Z_PROBE
|
|
FSTRINGVAR(tZProbe)
|
|
FSTRINGVAR(tZProbeSteps)
|
|
FSTRINGVAR(tZProbeState)
|
|
FSTRINGVAR(tZProbeStartScript)
|
|
FSTRINGVAR(tZProbeEndScript)
|
|
FSTRINGVAR(tHitZProbe)
|
|
FSTRINGVAR(tZProbeAverage)
|
|
FSTRINGVAR(tZProbeZReset)
|
|
FSTRINGVAR(tZProbeBedDitance)
|
|
#endif
|
|
FSTRINGVAR(tAutolevelReset)
|
|
FSTRINGVAR(tAutolevelEnabled)
|
|
FSTRINGVAR(tAutolevelDisabled)
|
|
FSTRINGVAR(tTransformationMatrix)
|
|
FSTRINGVAR(tZProbeFailed)
|
|
FSTRINGVAR(tZProbeMax)
|
|
FSTRINGVAR(tZProbePrinterHeight)
|
|
|
|
#ifdef WAITING_IDENTIFIER
|
|
FSTRINGVAR(tWait)
|
|
#endif // WAITING_IDENTIFIER
|
|
|
|
#if EEPROM_MODE==0
|
|
FSTRINGVAR(tNoEEPROMSupport)
|
|
#else
|
|
#if FEATURE_Z_PROBE
|
|
FSTRINGVAR(tZProbeHeight)
|
|
FSTRINGVAR(tZProbeOffsetX)
|
|
FSTRINGVAR(tZProbeOffsetY)
|
|
FSTRINGVAR(tZProbeSpeed)
|
|
FSTRINGVAR(tZProbeSpeedXY)
|
|
FSTRINGVAR(tZProbeX1)
|
|
FSTRINGVAR(tZProbeY1)
|
|
FSTRINGVAR(tZProbeX2)
|
|
FSTRINGVAR(tZProbeY2)
|
|
FSTRINGVAR(tZProbeX3)
|
|
FSTRINGVAR(tZProbeY3)
|
|
#endif
|
|
#if FEATURE_AUTOLEVEL
|
|
FSTRINGVAR(tAutolevelActive)
|
|
#endif
|
|
#if FEATURE_AXISCOMP
|
|
FSTRINGVAR(tAxisCompTanXY)
|
|
FSTRINGVAR(tAxisCompTanYZ)
|
|
FSTRINGVAR(tAxisCompTanXZ)
|
|
#endif
|
|
FSTRINGVAR(tConfigStoredEEPROM)
|
|
FSTRINGVAR(tConfigLoadedEEPROM)
|
|
FSTRINGVAR(tEPRConfigResetDefaults)
|
|
FSTRINGVAR(tEPRProtocolChanged)
|
|
FSTRINGVAR(tEPR0)
|
|
FSTRINGVAR(tEPR1)
|
|
FSTRINGVAR(tEPR2)
|
|
FSTRINGVAR(tEPR3)
|
|
FSTRINGVAR(tEPRBaudrate)
|
|
FSTRINGVAR(tEPRAdvancedUser)
|
|
FSTRINGVAR(tEPRFilamentPrinted)
|
|
FSTRINGVAR(tEPRPrinterActive)
|
|
FSTRINGVAR(tEPRMaxInactiveTime)
|
|
FSTRINGVAR(tEPRStopAfterInactivty)
|
|
FSTRINGVAR(tEPRMaxJerk)
|
|
FSTRINGVAR(tEPRXHomePos)
|
|
FSTRINGVAR(tEPRYHomePos)
|
|
FSTRINGVAR(tEPRZHomePos)
|
|
FSTRINGVAR(tEPRXMaxLength)
|
|
FSTRINGVAR(tEPRYMaxLength)
|
|
FSTRINGVAR(tEPRZMaxLength)
|
|
FSTRINGVAR(tEPRXBacklash)
|
|
FSTRINGVAR(tEPRYBacklash)
|
|
FSTRINGVAR(tEPRZBacklash)
|
|
FSTRINGVAR(tEPRZAcceleration)
|
|
FSTRINGVAR(tEPRZTravelAcceleration)
|
|
FSTRINGVAR(tEPRZStepsPerMM)
|
|
FSTRINGVAR(tEPRZMaxFeedrate)
|
|
FSTRINGVAR(tEPRZHomingFeedrate)
|
|
#if DRIVE_SYSTEM!=DELTA
|
|
FSTRINGVAR(tEPRMaxZJerk)
|
|
FSTRINGVAR(tEPRXStepsPerMM)
|
|
FSTRINGVAR(tEPRYStepsPerMM)
|
|
FSTRINGVAR(tEPRXMaxFeedrate)
|
|
FSTRINGVAR(tEPRYMaxFeedrate)
|
|
FSTRINGVAR(tEPRXHomingFeedrate)
|
|
FSTRINGVAR(tEPRYHomingFeedrate)
|
|
FSTRINGVAR(tEPRXAcceleration)
|
|
FSTRINGVAR(tEPRYAcceleration)
|
|
FSTRINGVAR(tEPRXTravelAcceleration)
|
|
FSTRINGVAR(tEPRYTravelAcceleration)
|
|
#else
|
|
FSTRINGVAR(tEPRDiagonalRodLength)
|
|
FSTRINGVAR(tEPRHorizontalRadius)
|
|
FSTRINGVAR(tEPRSegmentsPerSecondPrint)
|
|
FSTRINGVAR(tEPRSegmentsPerSecondTravel)
|
|
FSTRINGVAR(tEPRTowerXOffset)
|
|
FSTRINGVAR(tEPRTowerYOffset)
|
|
FSTRINGVAR(tEPRTowerZOffset)
|
|
#endif
|
|
FSTRINGVAR(tEPROPSMode)
|
|
FSTRINGVAR(tEPROPSMoveAfter)
|
|
FSTRINGVAR(tEPROPSMinDistance)
|
|
FSTRINGVAR(tEPROPSRetractionLength)
|
|
FSTRINGVAR(tEPROPSRetractionBacklash)
|
|
FSTRINGVAR(tEPRBedHeatManager)
|
|
FSTRINGVAR(tEPRBedPIDDriveMax)
|
|
FSTRINGVAR(tEPRBedPIDDriveMin)
|
|
FSTRINGVAR(tEPRBedPGain)
|
|
FSTRINGVAR(tEPRBedIGain)
|
|
FSTRINGVAR(tEPRBedDGain)
|
|
FSTRINGVAR(tEPRBedPISMaxValue)
|
|
FSTRINGVAR(tEPRStepsPerMM)
|
|
FSTRINGVAR(tEPRMaxFeedrate)
|
|
FSTRINGVAR(tEPRStartFeedrate)
|
|
FSTRINGVAR(tEPRAcceleration)
|
|
FSTRINGVAR(tEPRHeatManager)
|
|
FSTRINGVAR(tEPRDriveMax)
|
|
FSTRINGVAR(tEPRDriveMin)
|
|
FSTRINGVAR(tEPRPGain)
|
|
FSTRINGVAR(tEPRDead)
|
|
FSTRINGVAR(tEPRUnused)
|
|
FSTRINGVAR(tEPRIGain)
|
|
FSTRINGVAR(tEPRDGain)
|
|
FSTRINGVAR(tEPRPIDMaxValue)
|
|
FSTRINGVAR(tEPRXOffset)
|
|
FSTRINGVAR(tEPRYOffset)
|
|
FSTRINGVAR(tEPRStabilizeTime)
|
|
FSTRINGVAR(tEPRRetractionWhenHeating)
|
|
FSTRINGVAR(tEPRDistanceRetractHeating)
|
|
FSTRINGVAR(tEPRExtruderCoolerSpeed)
|
|
FSTRINGVAR(tEPRAdvanceK)
|
|
FSTRINGVAR(tEPRAdvanceL)
|
|
#endif
|
|
#if SDSUPPORT
|
|
FSTRINGVAR(tSDRemoved)
|
|
FSTRINGVAR(tSDInserted)
|
|
FSTRINGVAR(tSDInitFail)
|
|
FSTRINGVAR(tErrorWritingToFile)
|
|
FSTRINGVAR(tBeginFileList)
|
|
FSTRINGVAR(tEndFileList)
|
|
FSTRINGVAR(tFileOpened)
|
|
FSTRINGVAR(tSpaceSizeColon)
|
|
FSTRINGVAR(tFileSelected)
|
|
FSTRINGVAR(tFileOpenFailed)
|
|
FSTRINGVAR(tSDPrintingByte)
|
|
FSTRINGVAR(tNotSDPrinting)
|
|
FSTRINGVAR(tOpenFailedFile)
|
|
FSTRINGVAR(tWritingToFile)
|
|
FSTRINGVAR(tDoneSavingFile)
|
|
FSTRINGVAR(tFileDeleted)
|
|
FSTRINGVAR(tDeletionFailed)
|
|
FSTRINGVAR(tDirectoryCreated)
|
|
FSTRINGVAR(tCreationFailed)
|
|
FSTRINGVAR(tSDErrorCode)
|
|
#endif // SDSUPPORT
|
|
FSTRINGVAR(tHeaterDecoupled)
|
|
FSTRINGVAR(tHeaterDecoupledWarning)
|
|
#if DISTORTION_CORRECTION
|
|
FSTRINGVAR(tZCorrectionEnabled)
|
|
FSTRINGVAR(tZCorrectionDisabled)
|
|
#endif
|
|
#if FEATURE_RETRACTION
|
|
FSTRINGVAR(tEPRAutoretractEnabled)
|
|
FSTRINGVAR(tEPRRetractionLength)
|
|
FSTRINGVAR(tEPRRetractionLongLength)
|
|
FSTRINGVAR(tEPRRetractionSpeed)
|
|
FSTRINGVAR(tEPRRetractionZLift)
|
|
FSTRINGVAR(tEPRRetractionUndoExtraLength)
|
|
FSTRINGVAR(tEPRRetractionUndoExtraLongLength)
|
|
FSTRINGVAR(tEPRRetractionUndoSpeed)
|
|
#endif
|
|
FSTRINGVAR(tConfig)
|
|
FSTRINGVAR(tExtrDot)
|
|
|
|
static void config(FSTRINGPARAM(text));
|
|
static void config(FSTRINGPARAM(text),int value);
|
|
static void config(FSTRINGPARAM(text),const char *msg);
|
|
static void config(FSTRINGPARAM(text),int32_t value);
|
|
static void config(FSTRINGPARAM(text),uint32_t value);
|
|
static void config(FSTRINGPARAM(text),float value,uint8_t digits=2);
|
|
static void printNumber(uint32_t n);
|
|
static void printWarningF(FSTRINGPARAM(text));
|
|
static void printInfoF(FSTRINGPARAM(text));
|
|
static void printErrorF(FSTRINGPARAM(text));
|
|
static void printWarningFLN(FSTRINGPARAM(text));
|
|
static void printInfoFLN(FSTRINGPARAM(text));
|
|
static void printErrorFLN(FSTRINGPARAM(text));
|
|
static void printFLN(FSTRINGPARAM(text));
|
|
static void printF(FSTRINGPARAM(text));
|
|
static void printF(FSTRINGPARAM(text),int value);
|
|
static void printF(FSTRINGPARAM(text),const char *msg);
|
|
static void printF(FSTRINGPARAM(text),int32_t value);
|
|
static void printF(FSTRINGPARAM(text),uint32_t value);
|
|
static void printF(FSTRINGPARAM(text),float value,uint8_t digits=2);
|
|
static void printFLN(FSTRINGPARAM(text),int value);
|
|
static void printFLN(FSTRINGPARAM(text),int32_t value);
|
|
static void printFLN(FSTRINGPARAM(text),uint32_t value);
|
|
static void printFLN(FSTRINGPARAM(text),const char *msg);
|
|
static void printFLN(FSTRINGPARAM(text),float value,uint8_t digits=2);
|
|
static void printArrayFLN(FSTRINGPARAM(text),float *arr,uint8_t n=4,uint8_t digits=2);
|
|
static void printArrayFLN(FSTRINGPARAM(text),long *arr,uint8_t n=4);
|
|
static void print(long value);
|
|
static inline void print(uint32_t value) {printNumber(value);}
|
|
static inline void print(int value) {print((int32_t)value);}
|
|
static void print(const char *text);
|
|
static inline void print(char c) {HAL::serialWriteByte(c);}
|
|
static void printFloat(float number, uint8_t digits);
|
|
static inline void print(float number) {printFloat(number, 6);}
|
|
static inline void println() {HAL::serialWriteByte('\r');HAL::serialWriteByte('\n');}
|
|
protected:
|
|
private:
|
|
};
|
|
|
|
#ifdef DEBUG
|
|
#define SHOW(x) {Com::printF(PSTR(" " #x "=")); Com::print(x); Com::println();}
|
|
#define SHOWS(x) {Com::printF(PSTR(" " #x "=")); Com::print(x); Com::print(" steps "); Com::print(x/80); Com::printFLN(PSTR(" mm"));}
|
|
#define SHOWM(x) {Com::printF(PSTR(" " #x "=")); Com::print((long)x*80); Com::print(" steps "); Com::print(x); Com::printFLN(PSTR(" mm"));}
|
|
#define SHOT(x) Com::printF(PSTR(x " "))
|
|
#define SHOWA(t,a,n) {SHOT(t); for (int i=0;i<n;i++) SHOWS(a[i]);}
|
|
#define SHOWAM(t,a,n) {SHOT(t); for (int i=0;i<n;i++) SHOWM(a[i]);}
|
|
|
|
#else
|
|
#define SHOW(x)
|
|
#define SHOT(x)
|
|
#define SHOWS(x)
|
|
#define SHOWM(x)
|
|
#define SHOWA(t,a,n)
|
|
#define SHOWAM(t,a,n)
|
|
#endif
|
|
|
|
#endif // COMMUNICATION_H
|