Rewrite string_value_with_prefix for use more prefixes (and take more compact code)

pull/118/head
DiSlord 7 years ago
parent 51fd91adf2
commit 6ac4bcaedb

@ -57,7 +57,6 @@ int8_t cal_auto_interpolate = TRUE;
uint16_t redraw_request = 0; // contains REDRAW_XXX flags
int16_t vbat = 0;
static THD_WORKING_AREA(waThread1, 640);
static THD_FUNCTION(Thread1, arg)
{

@ -550,10 +550,15 @@ trace_into_index(int x, int t, int i, float array[POINTS_COUNT][2])
return INDEX(x +CELLOFFSETX, y, i);
}
// Prefixes for values bigger then 1000.0
static char bigPrefix[]={'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'};
// Prefixes for values less then 1.0
static char smallPrefix[]={'m', S_MICRO[0], 'n', 'p', 'f', 'a', 'z', 'y'};
static int
string_value_with_prefix(char *buf, int len, float val, char unit)
{
char prefix;
char prefix=0;
int n = 0;
if (val < 0) {
val = -val;
@ -565,34 +570,12 @@ string_value_with_prefix(char *buf, int len, float val, char unit)
prefix = S_INFINITY[0];
}
else {
if (val < 1e-12) {
prefix = 'f';
val *= 1e15;
} else if (val < 1e-9) {
prefix = 'p';
val *= 1e12;
} else if (val < 1e-6) {
prefix = 'n';
val *= 1e9;
} else if (val < 1e-3) {
prefix = S_MICRO[0];
val *= 1e6;
} else if (val < 1) {
prefix = 'm';
val *= 1e3;
} else if (val < 1e3) {
prefix = 0;
} else if (val < 1e6) {
prefix = 'k';
val /= 1e3;
} else if (val < 1e9) {
prefix = 'M';
val /= 1e6;
} else {
prefix = 'G';
val /= 1e9;
}
if (val > 1000)
for (uint32_t i=0; i<sizeof(bigPrefix) && val > 1000; i++, val/=1000)
prefix=bigPrefix[i];
else if (val < 1)
for (uint32_t i=0; i<sizeof(smallPrefix) && val < 1000;i++, val*=1000)
prefix=smallPrefix[i];
if (val < 10) {
n += chsnprintf(&buf[n], len, "%.2f", val);
} else if (val < 100) {

Loading…
Cancel
Save

Powered by TurnKey Linux.