Merge pull request #1104 from zjs81/Fix-BW-setting-and-returning
Refactor float conversion in CommonCLI
This commit is contained in:
@@ -231,8 +231,8 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
strcpy(tmp, &command[10]);
|
strcpy(tmp, &command[10]);
|
||||||
const char *parts[5];
|
const char *parts[5];
|
||||||
int num = mesh::Utils::parseTextParts(tmp, parts, 5);
|
int num = mesh::Utils::parseTextParts(tmp, parts, 5);
|
||||||
float freq = num > 0 ? atof(parts[0]) : 0.0f;
|
float freq = num > 0 ? strtof(parts[0], nullptr) : 0.0f;
|
||||||
float bw = num > 1 ? atof(parts[1]) : 0.0f;
|
float bw = num > 1 ? strtof(parts[1], nullptr) : 0.0f;
|
||||||
uint8_t sf = num > 2 ? atoi(parts[2]) : 0;
|
uint8_t sf = num > 2 ? atoi(parts[2]) : 0;
|
||||||
uint8_t cr = num > 3 ? atoi(parts[3]) : 0;
|
uint8_t cr = num > 3 ? atoi(parts[3]) : 0;
|
||||||
int temp_timeout_mins = num > 4 ? atoi(parts[4]) : 0;
|
int temp_timeout_mins = num > 4 ? atoi(parts[4]) : 0;
|
||||||
@@ -287,7 +287,7 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
} else if (memcmp(config, "radio", 5) == 0) {
|
} else if (memcmp(config, "radio", 5) == 0) {
|
||||||
char freq[16], bw[16];
|
char freq[16], bw[16];
|
||||||
strcpy(freq, StrHelper::ftoa(_prefs->freq));
|
strcpy(freq, StrHelper::ftoa(_prefs->freq));
|
||||||
strcpy(bw, StrHelper::ftoa(_prefs->bw));
|
strcpy(bw, StrHelper::ftoa3(_prefs->bw));
|
||||||
sprintf(reply, "> %s,%s,%d,%d", freq, bw, (uint32_t)_prefs->sf, (uint32_t)_prefs->cr);
|
sprintf(reply, "> %s,%s,%d,%d", freq, bw, (uint32_t)_prefs->sf, (uint32_t)_prefs->cr);
|
||||||
} else if (memcmp(config, "rxdelay", 7) == 0) {
|
} else if (memcmp(config, "rxdelay", 7) == 0) {
|
||||||
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->rx_delay_base));
|
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->rx_delay_base));
|
||||||
@@ -417,8 +417,8 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
strcpy(tmp, &config[6]);
|
strcpy(tmp, &config[6]);
|
||||||
const char *parts[4];
|
const char *parts[4];
|
||||||
int num = mesh::Utils::parseTextParts(tmp, parts, 4);
|
int num = mesh::Utils::parseTextParts(tmp, parts, 4);
|
||||||
float freq = num > 0 ? atof(parts[0]) : 0.0f;
|
float freq = num > 0 ? strtof(parts[0], nullptr) : 0.0f;
|
||||||
float bw = num > 1 ? atof(parts[1]) : 0.0f;
|
float bw = num > 1 ? strtof(parts[1], nullptr) : 0.0f;
|
||||||
uint8_t sf = num > 2 ? atoi(parts[2]) : 0;
|
uint8_t sf = num > 2 ? atoi(parts[2]) : 0;
|
||||||
uint8_t cr = num > 3 ? atoi(parts[3]) : 0;
|
uint8_t cr = num > 3 ? atoi(parts[3]) : 0;
|
||||||
if (freq >= 300.0f && freq <= 2500.0f && sf >= 5 && sf <= 12 && cr >= 5 && cr <= 8 && bw >= 7.0f && bw <= 500.0f) {
|
if (freq >= 300.0f && freq <= 2500.0f && sf >= 5 && sf <= 12 && cr >= 5 && cr <= 8 && bw >= 7.0f && bw <= 500.0f) {
|
||||||
|
|||||||
@@ -140,6 +140,19 @@ const char* StrHelper::ftoa(float f) {
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* StrHelper::ftoa3(float f) {
|
||||||
|
static char s[16];
|
||||||
|
int v = (int)(f * 1000.0f + (f >= 0 ? 0.5f : -0.5f)); // rounded ×1000
|
||||||
|
int w = v / 1000; // whole
|
||||||
|
int d = abs(v % 1000); // decimals
|
||||||
|
snprintf(s, sizeof(s), "%d.%03d", w, d);
|
||||||
|
for (int i = strlen(s) - 1; i > 0 && s[i] == '0'; i--)
|
||||||
|
s[i] = 0;
|
||||||
|
int L = strlen(s);
|
||||||
|
if (s[L - 1] == '.') s[L - 1] = 0;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t StrHelper::fromHex(const char* src) {
|
uint32_t StrHelper::fromHex(const char* src) {
|
||||||
uint32_t n = 0;
|
uint32_t n = 0;
|
||||||
while (*src) {
|
while (*src) {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ public:
|
|||||||
static void strncpy(char* dest, const char* src, size_t buf_sz);
|
static void strncpy(char* dest, const char* src, size_t buf_sz);
|
||||||
static void strzcpy(char* dest, const char* src, size_t buf_sz); // pads with trailing nulls
|
static void strzcpy(char* dest, const char* src, size_t buf_sz); // pads with trailing nulls
|
||||||
static const char* ftoa(float f);
|
static const char* ftoa(float f);
|
||||||
|
static const char* ftoa3(float f); //Converts float to string with 3 decimal places
|
||||||
static bool isBlank(const char* str);
|
static bool isBlank(const char* str);
|
||||||
static uint32_t fromHex(const char* src);
|
static uint32_t fromHex(const char* src);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user