Move number-to-string function to utility.*
This commit is contained in:
parent
4d4c00d69c
commit
305913545e
6 changed files with 238 additions and 268 deletions
|
@ -28,6 +28,7 @@
|
|||
#include "temperature.h"
|
||||
#include "stepper.h"
|
||||
#include "configuration_store.h"
|
||||
#include "utility.h"
|
||||
|
||||
#if ENABLED(PRINTCOUNTER)
|
||||
#include "printcounter.h"
|
||||
|
@ -1878,6 +1879,7 @@ void kill_screen(const char* lcd_msg) {
|
|||
*
|
||||
*/
|
||||
#if ENABLED(FWRETRACT)
|
||||
|
||||
static void lcd_control_retract_menu() {
|
||||
START_MENU();
|
||||
MENU_ITEM(back, MSG_CONTROL);
|
||||
|
@ -1895,6 +1897,7 @@ void kill_screen(const char* lcd_msg) {
|
|||
MENU_ITEM_EDIT(float3, MSG_CONTROL_RETRACT_RECOVERF, &retract_recover_feedrate_mm_s, 1, 999);
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
#endif // FWRETRACT
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
|
@ -2936,252 +2939,4 @@ void lcd_reset_alert_level() { lcd_status_message_level = 0; }
|
|||
|
||||
#endif // ULTIPANEL
|
||||
|
||||
/*********************************/
|
||||
/** Number to string conversion **/
|
||||
/*********************************/
|
||||
|
||||
#define DIGIT(n) ('0' + (n))
|
||||
#define DIGIMOD(n) DIGIT((n) % 10)
|
||||
|
||||
char conv[8];
|
||||
|
||||
// Convert float to rj string with 123 or -12 format
|
||||
char *ftostr3(const float& x) { return itostr3((int)x); }
|
||||
|
||||
// Convert float to rj string with _123, -123, _-12, or __-1 format
|
||||
char *ftostr4sign(const float& x) { return itostr4sign((int)x); }
|
||||
|
||||
// Convert unsigned int to string with 12 format
|
||||
char* itostr2(const uint8_t& x) {
|
||||
int xx = x;
|
||||
conv[0] = DIGIMOD(xx / 10);
|
||||
conv[1] = DIGIMOD(xx);
|
||||
conv[2] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert float to string with +123.4 / -123.4 format
|
||||
char* ftostr41sign(const float& x) {
|
||||
int xx = int(abs(x * 10)) % 10000;
|
||||
conv[0] = x >= 0 ? '+' : '-';
|
||||
conv[1] = DIGIMOD(xx / 1000);
|
||||
conv[2] = DIGIMOD(xx / 100);
|
||||
conv[3] = DIGIMOD(xx / 10);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx);
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string with 023.45 / -23.45 format
|
||||
char *ftostr32(const float& x) {
|
||||
long xx = abs(x * 100);
|
||||
conv[0] = x >= 0 ? DIGIMOD(xx / 10000) : '-';
|
||||
conv[1] = DIGIMOD(xx / 1000);
|
||||
conv[2] = DIGIMOD(xx / 100);
|
||||
conv[3] = '.';
|
||||
conv[4] = DIGIMOD(xx / 10);
|
||||
conv[5] = DIGIMOD(xx);
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
|
||||
char* ftostr43sign(const float& x, char plus/*=' '*/) {
|
||||
long xx = x * 1000;
|
||||
if (xx == 0)
|
||||
conv[0] = ' ';
|
||||
else if (xx > 0)
|
||||
conv[0] = plus;
|
||||
else {
|
||||
xx = -xx;
|
||||
conv[0] = '-';
|
||||
}
|
||||
conv[1] = DIGIMOD(xx / 1000);
|
||||
conv[2] = '.';
|
||||
conv[3] = DIGIMOD(xx / 100);
|
||||
conv[4] = DIGIMOD(xx / 10);
|
||||
conv[5] = DIGIMOD(xx);
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned float to string with 1.23 format
|
||||
char* ftostr12ns(const float& x) {
|
||||
long xx = x * 100;
|
||||
xx = abs(xx);
|
||||
conv[0] = DIGIMOD(xx / 100);
|
||||
conv[1] = '.';
|
||||
conv[2] = DIGIMOD(xx / 10);
|
||||
conv[3] = DIGIMOD(xx);
|
||||
conv[4] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed int to lj string with +012 / -012 format
|
||||
char* itostr3sign(const int& x) {
|
||||
int xx;
|
||||
if (x >= 0) {
|
||||
conv[0] = '+';
|
||||
xx = x;
|
||||
}
|
||||
else {
|
||||
conv[0] = '-';
|
||||
xx = -x;
|
||||
}
|
||||
conv[1] = DIGIMOD(xx / 100);
|
||||
conv[2] = DIGIMOD(xx / 10);
|
||||
conv[3] = DIGIMOD(xx);
|
||||
conv[4] = '.';
|
||||
conv[5] = '0';
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed int to rj string with 123 or -12 format
|
||||
char* itostr3(const int& x) {
|
||||
int xx = x;
|
||||
if (xx < 0) {
|
||||
conv[0] = '-';
|
||||
xx = -xx;
|
||||
}
|
||||
else
|
||||
conv[0] = xx >= 100 ? DIGIMOD(xx / 100) : ' ';
|
||||
|
||||
conv[1] = xx >= 10 ? DIGIMOD(xx / 10) : ' ';
|
||||
conv[2] = DIGIMOD(xx);
|
||||
conv[3] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned int to lj string with 123 format
|
||||
char* itostr3left(const int& xx) {
|
||||
if (xx >= 100) {
|
||||
conv[0] = DIGIMOD(xx / 100);
|
||||
conv[1] = DIGIMOD(xx / 10);
|
||||
conv[2] = DIGIMOD(xx);
|
||||
conv[3] = '\0';
|
||||
}
|
||||
else if (xx >= 10) {
|
||||
conv[0] = DIGIMOD(xx / 10);
|
||||
conv[1] = DIGIMOD(xx);
|
||||
conv[2] = '\0';
|
||||
}
|
||||
else {
|
||||
conv[0] = DIGIMOD(xx);
|
||||
conv[1] = '\0';
|
||||
}
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed int to rj string with _123, -123, _-12, or __-1 format
|
||||
char *itostr4sign(const int& x) {
|
||||
int xx = abs(x);
|
||||
int sign = 0;
|
||||
if (xx >= 100) {
|
||||
conv[1] = DIGIMOD(xx / 100);
|
||||
conv[2] = DIGIMOD(xx / 10);
|
||||
}
|
||||
else if (xx >= 10) {
|
||||
conv[0] = ' ';
|
||||
sign = 1;
|
||||
conv[2] = DIGIMOD(xx / 10);
|
||||
}
|
||||
else {
|
||||
conv[0] = ' ';
|
||||
conv[1] = ' ';
|
||||
sign = 2;
|
||||
}
|
||||
conv[sign] = x < 0 ? '-' : ' ';
|
||||
conv[3] = DIGIMOD(xx);
|
||||
conv[4] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned float to rj string with 12345 format
|
||||
char* ftostr5rj(const float& x) {
|
||||
long xx = abs(x);
|
||||
conv[0] = xx >= 10000 ? DIGIMOD(xx / 10000) : ' ';
|
||||
conv[1] = xx >= 1000 ? DIGIMOD(xx / 1000) : ' ';
|
||||
conv[2] = xx >= 100 ? DIGIMOD(xx / 100) : ' ';
|
||||
conv[3] = xx >= 10 ? DIGIMOD(xx / 10) : ' ';
|
||||
conv[4] = DIGIMOD(xx);
|
||||
conv[5] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string with +1234.5 format
|
||||
char* ftostr51sign(const float& x) {
|
||||
long xx = abs(x * 10);
|
||||
conv[0] = (x >= 0) ? '+' : '-';
|
||||
conv[1] = DIGIMOD(xx / 10000);
|
||||
conv[2] = DIGIMOD(xx / 1000);
|
||||
conv[3] = DIGIMOD(xx / 100);
|
||||
conv[4] = DIGIMOD(xx / 10);
|
||||
conv[5] = '.';
|
||||
conv[6] = DIGIMOD(xx);
|
||||
conv[7] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string with +123.45 format
|
||||
char* ftostr52sign(const float& x) {
|
||||
long xx = abs(x * 100);
|
||||
conv[0] = (x >= 0) ? '+' : '-';
|
||||
conv[1] = DIGIMOD(xx / 10000);
|
||||
conv[2] = DIGIMOD(xx / 1000);
|
||||
conv[3] = DIGIMOD(xx / 100);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx / 10);
|
||||
conv[6] = DIGIMOD(xx);
|
||||
conv[7] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to space-padded string with -_23.4_ format
|
||||
char* ftostr52sp(const float& x) {
|
||||
long xx = x * 100;
|
||||
uint8_t dig;
|
||||
if (xx < 0) { // negative val = -_0
|
||||
xx = -xx;
|
||||
conv[0] = '-';
|
||||
dig = (xx / 1000) % 10;
|
||||
conv[1] = dig ? DIGIT(dig) : ' ';
|
||||
}
|
||||
else { // positive val = __0
|
||||
dig = (xx / 10000) % 10;
|
||||
if (dig) {
|
||||
conv[0] = DIGIT(dig);
|
||||
conv[1] = DIGIMOD(xx / 1000);
|
||||
}
|
||||
else {
|
||||
conv[0] = ' ';
|
||||
dig = (xx / 1000) % 10;
|
||||
conv[1] = dig ? DIGIT(dig) : ' ';
|
||||
}
|
||||
}
|
||||
|
||||
conv[2] = DIGIMOD(xx / 100); // lsd always
|
||||
|
||||
dig = xx % 10;
|
||||
if (dig) { // 2 decimal places
|
||||
conv[5] = DIGIT(dig);
|
||||
conv[4] = DIGIMOD(xx / 10);
|
||||
conv[3] = '.';
|
||||
}
|
||||
else { // 1 or 0 decimal place
|
||||
dig = (xx / 10) % 10;
|
||||
if (dig) {
|
||||
conv[4] = DIGIT(dig);
|
||||
conv[3] = '.';
|
||||
}
|
||||
else {
|
||||
conv[3] = conv[4] = ' ';
|
||||
}
|
||||
conv[5] = ' ';
|
||||
}
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
#endif // ULTRA_LCD
|
||||
|
|
|
@ -167,21 +167,4 @@
|
|||
|
||||
#endif //ULTRA_LCD
|
||||
|
||||
char* itostr2(const uint8_t& x);
|
||||
char* itostr3sign(const int& x);
|
||||
char* itostr3(const int& x);
|
||||
char* itostr3left(const int& x);
|
||||
char* itostr4sign(const int& x);
|
||||
|
||||
char* ftostr3(const float& x);
|
||||
char* ftostr4sign(const float& x);
|
||||
char* ftostr41sign(const float& x);
|
||||
char* ftostr32(const float& x);
|
||||
char* ftostr43sign(const float& x, char plus=' ');
|
||||
char* ftostr12ns(const float& x);
|
||||
char* ftostr5rj(const float& x);
|
||||
char* ftostr51sign(const float& x);
|
||||
char* ftostr52sign(const float& x);
|
||||
char* ftostr52sp(const float& x); // remove zero-padding from ftostr32
|
||||
|
||||
#endif //ULTRALCD_H
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include "ultralcd.h"
|
||||
#include "ultralcd_st7920_u8glib_rrd.h"
|
||||
#include "dogm_bitmaps.h"
|
||||
#include "utility.h"
|
||||
#include "duration_t.h"
|
||||
|
||||
#include <U8glib.h>
|
||||
|
|
|
@ -24,9 +24,11 @@
|
|||
#define ULTRALCD_IMPL_HD44780_H
|
||||
|
||||
/**
|
||||
* Implementation of the LCD display routines for a Hitachi HD44780 display. These are common LCD character displays.
|
||||
**/
|
||||
* Implementation of the LCD display routines for a Hitachi HD44780 display.
|
||||
* These are the most common LCD character displays.
|
||||
*/
|
||||
|
||||
#include "utility.h"
|
||||
#include "duration_t.h"
|
||||
|
||||
extern volatile uint8_t buttons; //an extended version of the last checked buttons in a bit array.
|
||||
|
|
|
@ -32,3 +32,186 @@ void safe_delay(millis_t ms) {
|
|||
}
|
||||
delay(ms);
|
||||
}
|
||||
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
|
||||
char conv[8];
|
||||
|
||||
#define DIGIT(n) ('0' + (n))
|
||||
#define DIGIMOD(n, f) DIGIT((n)/(f) % 10)
|
||||
#define RJDIGIT(n, f) ((n) >= (f) ? DIGIMOD(n, f) : ' ')
|
||||
#define MINUSOR(n, alt) (n >= 0 ? (alt) : (n = -n, '-'))
|
||||
|
||||
// Convert unsigned int to string with 12 format
|
||||
char* itostr2(const uint8_t& x) {
|
||||
int xx = x;
|
||||
conv[0] = DIGIMOD(xx, 10);
|
||||
conv[1] = DIGIMOD(xx, 1);
|
||||
conv[2] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed int to rj string with 123 or -12 format
|
||||
char* itostr3(const int& x) {
|
||||
int xx = x;
|
||||
conv[0] = MINUSOR(xx, RJDIGIT(xx, 100));
|
||||
conv[1] = RJDIGIT(xx, 10);
|
||||
conv[2] = DIGIMOD(xx, 1);
|
||||
conv[3] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned int to lj string with 123 format
|
||||
char* itostr3left(const int& xx) {
|
||||
char *str = &conv[3];
|
||||
*str = '\0';
|
||||
*(--str) = DIGIMOD(xx, 1);
|
||||
if (xx >= 10) {
|
||||
*(--str) = DIGIMOD(xx, 10);
|
||||
if (xx >= 100)
|
||||
*(--str) = DIGIMOD(xx, 100);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
// Convert signed int to rj string with _123, -123, _-12, or __-1 format
|
||||
char *itostr4sign(const int& x) {
|
||||
int xx = abs(x), sign = 0;
|
||||
if (xx >= 100) {
|
||||
conv[1] = DIGIMOD(xx, 100);
|
||||
conv[2] = DIGIMOD(xx, 10);
|
||||
}
|
||||
else {
|
||||
conv[0] = ' ';
|
||||
if (xx >= 10) {
|
||||
sign = 1;
|
||||
conv[2] = DIGIMOD(xx, 10);
|
||||
}
|
||||
else {
|
||||
conv[1] = ' ';
|
||||
sign = 2;
|
||||
}
|
||||
}
|
||||
conv[sign] = x < 0 ? '-' : ' ';
|
||||
conv[3] = DIGIMOD(xx, 1);
|
||||
conv[4] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned float to string with 1.23 format
|
||||
char* ftostr12ns(const float& x) {
|
||||
long xx = abs(x * 100);
|
||||
conv[0] = DIGIMOD(xx, 100);
|
||||
conv[1] = '.';
|
||||
conv[2] = DIGIMOD(xx, 10);
|
||||
conv[3] = DIGIMOD(xx, 1);
|
||||
conv[4] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to fixed-length string with 023.45 / -23.45 format
|
||||
char *ftostr32(const float& x) {
|
||||
long xx = x * 100;
|
||||
conv[0] = MINUSOR(xx, DIGIMOD(xx, 10000));
|
||||
conv[1] = DIGIMOD(xx, 1000);
|
||||
conv[2] = DIGIMOD(xx, 100);
|
||||
conv[3] = '.';
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = DIGIMOD(xx, 1);
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert float to fixed-length string with +123.4 / -123.4 format
|
||||
char* ftostr41sign(const float& x) {
|
||||
int xx = x * 10;
|
||||
conv[0] = MINUSOR(xx, '+');
|
||||
conv[1] = DIGIMOD(xx, 1000);
|
||||
conv[2] = DIGIMOD(xx, 100);
|
||||
conv[3] = DIGIMOD(xx, 10);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 1);
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
|
||||
char* ftostr43sign(const float& x, char plus/*=' '*/) {
|
||||
long xx = x * 1000;
|
||||
conv[0] = xx ? MINUSOR(xx, plus) : ' ';
|
||||
conv[1] = DIGIMOD(xx, 1000);
|
||||
conv[2] = '.';
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = DIGIMOD(xx, 1);
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned float to rj string with 12345 format
|
||||
char* ftostr5rj(const float& x) {
|
||||
long xx = abs(x);
|
||||
conv[0] = RJDIGIT(xx, 10000);
|
||||
conv[1] = RJDIGIT(xx, 1000);
|
||||
conv[2] = RJDIGIT(xx, 100);
|
||||
conv[3] = RJDIGIT(xx, 10);
|
||||
conv[4] = DIGIMOD(xx, 1);
|
||||
conv[5] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string with +1234.5 format
|
||||
char* ftostr51sign(const float& x) {
|
||||
long xx = x * 10;
|
||||
conv[0] = MINUSOR(xx, '+');
|
||||
conv[1] = DIGIMOD(xx, 10000);
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = '.';
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
conv[7] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string with +123.45 format
|
||||
char* ftostr52sign(const float& x) {
|
||||
long xx = x * 100;
|
||||
conv[0] = MINUSOR(xx, '+');
|
||||
conv[1] = DIGIMOD(xx, 10000);
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
conv[7] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to space-padded string with -_23.4_ format
|
||||
char* ftostr52sp(const float& x) {
|
||||
long xx = x * 100;
|
||||
uint8_t dig;
|
||||
conv[0] = MINUSOR(xx, RJDIGIT(xx, 10000));
|
||||
conv[1] = RJDIGIT(xx, 1000);
|
||||
conv[2] = DIGIMOD(xx, 100);
|
||||
|
||||
if ((dig = xx % 10)) { // second digit after decimal point?
|
||||
conv[3] = '.';
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = DIGIT(dig);
|
||||
}
|
||||
else {
|
||||
if ((dig = (xx / 10) % 10)) { // first digit after decimal point?
|
||||
conv[3] = '.';
|
||||
conv[4] = DIGIT(dig);
|
||||
}
|
||||
else // nothing after decimal point
|
||||
conv[3] = conv[4] = ' ';
|
||||
conv[5] = ' ';
|
||||
}
|
||||
conv[6] = '\0';
|
||||
return conv;
|
||||
}
|
||||
|
||||
#endif // ULTRA_LCD
|
||||
|
|
|
@ -25,4 +25,50 @@
|
|||
|
||||
void safe_delay(millis_t ms);
|
||||
|
||||
#endif
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
|
||||
// Convert unsigned int to string with 12 format
|
||||
char* itostr2(const uint8_t& x);
|
||||
|
||||
// Convert signed int to rj string with 123 or -12 format
|
||||
char* itostr3(const int& x);
|
||||
|
||||
// Convert unsigned int to lj string with 123 format
|
||||
char* itostr3left(const int& xx);
|
||||
|
||||
// Convert signed int to rj string with _123, -123, _-12, or __-1 format
|
||||
char *itostr4sign(const int& x);
|
||||
|
||||
// Convert unsigned float to string with 1.23 format
|
||||
char* ftostr12ns(const float& x);
|
||||
|
||||
// Convert signed float to fixed-length string with 023.45 / -23.45 format
|
||||
char *ftostr32(const float& x);
|
||||
|
||||
// Convert float to fixed-length string with +123.4 / -123.4 format
|
||||
char* ftostr41sign(const float& x);
|
||||
|
||||
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
|
||||
char* ftostr43sign(const float& x, char plus=' ');
|
||||
|
||||
// Convert unsigned float to rj string with 12345 format
|
||||
char* ftostr5rj(const float& x);
|
||||
|
||||
// Convert signed float to string with +1234.5 format
|
||||
char* ftostr51sign(const float& x);
|
||||
|
||||
// Convert signed float to space-padded string with -_23.4_ format
|
||||
char* ftostr52sp(const float& x);
|
||||
|
||||
// Convert signed float to string with +123.45 format
|
||||
char* ftostr52sign(const float& x);
|
||||
|
||||
// Convert float to rj string with 123 or -12 format
|
||||
FORCE_INLINE char *ftostr3(const float& x) { return itostr3((int)x); }
|
||||
|
||||
// Convert float to rj string with _123, -123, _-12, or __-1 format
|
||||
FORCE_INLINE char *ftostr4sign(const float& x) { return itostr4sign((int)x); }
|
||||
|
||||
#endif // ULTRA_LCD
|
||||
|
||||
#endif // __UTILITY_H__
|
||||
|
|
Reference in a new issue