mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-14 03:50:02 +03:00
Parse and print custom defaults header data in CLI.
This commit is contained in:
parent
1b5b06197b
commit
7b845150af
1 changed files with 97 additions and 24 deletions
|
@ -221,6 +221,19 @@ extern char __custom_defaults_end;
|
||||||
|
|
||||||
static bool processingCustomDefaults = false;
|
static bool processingCustomDefaults = false;
|
||||||
static char cliBufferTemp[CLI_IN_BUFFER_SIZE];
|
static char cliBufferTemp[CLI_IN_BUFFER_SIZE];
|
||||||
|
|
||||||
|
#define CUSTOM_DEFAULTS_START_PREFIX ("# " FC_FIRMWARE_NAME)
|
||||||
|
#define CUSTOM_DEFAULTS_MANUFACTURER_ID_PREFIX "# config: manufacturer_id: "
|
||||||
|
#define CUSTOM_DEFAULTS_BOARD_NAME_PREFIX ", board_name: "
|
||||||
|
#define CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX ", version: "
|
||||||
|
#define CUSTOM_DEFAULTS_DATE_PREFIX ", date: "
|
||||||
|
|
||||||
|
static bool customDefaultsHeaderParsed = false;
|
||||||
|
static bool customDefaultsFound = false;
|
||||||
|
static char customDefaultsManufacturerId[MAX_MANUFACTURER_ID_LENGTH + 1] = { 0 };
|
||||||
|
static char customDefaultsBoardName[MAX_BOARD_NAME_LENGTH + 1] = { 0 };
|
||||||
|
static char customDefaultsChangesetId[9] = { 0 };
|
||||||
|
static char customDefaultsDate[21] = { 0 };
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_CUSTOM_DEFAULTS_ADDRESS)
|
#if defined(USE_CUSTOM_DEFAULTS_ADDRESS)
|
||||||
|
@ -4237,14 +4250,62 @@ bool resetConfigToCustomDefaults(void)
|
||||||
return prepareSave();
|
return prepareSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isCustomDefaults(char *ptr)
|
static bool customDefaultsHasNext(const char *customDefaultsPtr)
|
||||||
{
|
{
|
||||||
return strncmp(ptr, "# " FC_FIRMWARE_NAME, 12) == 0;
|
return *customDefaultsPtr && *customDefaultsPtr != 0xFF && customDefaultsPtr < customDefaultsEnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *parseCustomDefaultsHeaderElement(char *dest, const char *customDefaultsPtr, const char *prefix, char terminator)
|
||||||
|
{
|
||||||
|
char *endPtr = NULL;
|
||||||
|
unsigned len = strlen(prefix);
|
||||||
|
if (customDefaultsPtr && customDefaultsHasNext(customDefaultsPtr) && strncmp(customDefaultsPtr, prefix, len) == 0) {
|
||||||
|
customDefaultsPtr += len;
|
||||||
|
endPtr = strchr(customDefaultsPtr, terminator);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endPtr && customDefaultsHasNext(endPtr)) {
|
||||||
|
len = endPtr - customDefaultsPtr;
|
||||||
|
memcpy(dest, customDefaultsPtr, len);
|
||||||
|
|
||||||
|
customDefaultsPtr += len;
|
||||||
|
|
||||||
|
return customDefaultsPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void parseCustomDefaultsHeader(void)
|
||||||
|
{
|
||||||
|
const char *customDefaultsPtr = customDefaultsStart;
|
||||||
|
if (strncmp(customDefaultsPtr, CUSTOM_DEFAULTS_START_PREFIX, strlen(CUSTOM_DEFAULTS_START_PREFIX)) == 0) {
|
||||||
|
customDefaultsFound = true;
|
||||||
|
|
||||||
|
customDefaultsPtr = strchr(customDefaultsPtr, '\n');
|
||||||
|
if (customDefaultsPtr && customDefaultsHasNext(customDefaultsPtr)) {
|
||||||
|
customDefaultsPtr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsManufacturerId, customDefaultsPtr, CUSTOM_DEFAULTS_MANUFACTURER_ID_PREFIX, CUSTOM_DEFAULTS_BOARD_NAME_PREFIX[0]);
|
||||||
|
|
||||||
|
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsBoardName, customDefaultsPtr, CUSTOM_DEFAULTS_BOARD_NAME_PREFIX, CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX[0]);
|
||||||
|
|
||||||
|
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsChangesetId, customDefaultsPtr, CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX, CUSTOM_DEFAULTS_DATE_PREFIX[0]);
|
||||||
|
|
||||||
|
customDefaultsPtr = parseCustomDefaultsHeaderElement(customDefaultsDate, customDefaultsPtr, CUSTOM_DEFAULTS_DATE_PREFIX, '\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
customDefaultsHeaderParsed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasCustomDefaults(void)
|
bool hasCustomDefaults(void)
|
||||||
{
|
{
|
||||||
return isCustomDefaults(customDefaultsStart);
|
if (!customDefaultsHeaderParsed) {
|
||||||
|
parseCustomDefaultsHeader();
|
||||||
|
}
|
||||||
|
|
||||||
|
return customDefaultsFound;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -4267,9 +4328,9 @@ static void cliDefaults(const char *cmdName, char *cmdline)
|
||||||
} else if (strncasecmp(cmdline, "bare", 4) == 0) {
|
} else if (strncasecmp(cmdline, "bare", 4) == 0) {
|
||||||
useCustomDefaults = false;
|
useCustomDefaults = false;
|
||||||
} else if (strncasecmp(cmdline, "show", 4) == 0) {
|
} else if (strncasecmp(cmdline, "show", 4) == 0) {
|
||||||
char *customDefaultsPtr = customDefaultsStart;
|
if (hasCustomDefaults()) {
|
||||||
if (isCustomDefaults(customDefaultsPtr)) {
|
char *customDefaultsPtr = customDefaultsStart;
|
||||||
while (*customDefaultsPtr && *customDefaultsPtr != 0xFF && customDefaultsPtr < customDefaultsEnd) {
|
while (customDefaultsHasNext(customDefaultsPtr)) {
|
||||||
if (*customDefaultsPtr != '\n') {
|
if (*customDefaultsPtr != '\n') {
|
||||||
cliPrintf("%c", *customDefaultsPtr++);
|
cliPrintf("%c", *customDefaultsPtr++);
|
||||||
} else {
|
} else {
|
||||||
|
@ -4778,8 +4839,11 @@ static void cliTasks(const char *cmdName, char *cmdline)
|
||||||
|
|
||||||
static void cliVersion(const char *cmdName, char *cmdline)
|
static void cliVersion(const char *cmdName, char *cmdline)
|
||||||
{
|
{
|
||||||
UNUSED(cmdName);
|
|
||||||
UNUSED(cmdline);
|
UNUSED(cmdline);
|
||||||
|
#if !(defined(USE_CUSTOM_DEFAULTS) && defined(USE_UNIFIED_TARGET))
|
||||||
|
UNUSED(cmdName);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
cliPrintf("# %s / %s (%s) %s %s / %s (%s) MSP API: %s",
|
cliPrintf("# %s / %s (%s) %s %s / %s (%s) MSP API: %s",
|
||||||
FC_FIRMWARE_NAME,
|
FC_FIRMWARE_NAME,
|
||||||
|
@ -4798,23 +4862,32 @@ static void cliVersion(const char *cmdName, char *cmdline)
|
||||||
cliPrintLinefeed();
|
cliPrintLinefeed();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_UNIFIED_TARGET
|
#if defined(USE_CUSTOM_DEFAULTS)
|
||||||
cliPrint("# ");
|
if (hasCustomDefaults()) {
|
||||||
#ifdef USE_BOARD_INFO
|
if (strlen(customDefaultsManufacturerId) || strlen(customDefaultsBoardName) || strlen(customDefaultsChangesetId) || strlen(customDefaultsDate)) {
|
||||||
if (strlen(getManufacturerId())) {
|
cliPrintLinef("%s%s%s%s%s%s%s%s",
|
||||||
cliPrintf("manufacturer_id: %s ", getManufacturerId());
|
CUSTOM_DEFAULTS_MANUFACTURER_ID_PREFIX, customDefaultsManufacturerId,
|
||||||
|
CUSTOM_DEFAULTS_BOARD_NAME_PREFIX, customDefaultsBoardName,
|
||||||
|
CUSTOM_DEFAULTS_CHANGESET_ID_PREFIX, customDefaultsChangesetId,
|
||||||
|
CUSTOM_DEFAULTS_DATE_PREFIX, customDefaultsDate
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
cliPrintHashLine("config: YES");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
#if defined(USE_UNIFIED_TARGET)
|
||||||
|
cliPrintError(cmdName, "NO CONFIG FOUND");
|
||||||
|
#else
|
||||||
|
cliPrintHashLine("NO CUSTOM DEFAULTS FOUND");
|
||||||
|
#endif // USE_UNIFIED_TARGET
|
||||||
}
|
}
|
||||||
if (strlen(getBoardName())) {
|
|
||||||
cliPrintf("board_name: %s ", getBoardName());
|
|
||||||
}
|
|
||||||
#endif // USE_BOARD_INFO
|
|
||||||
|
|
||||||
#ifdef USE_CUSTOM_DEFAULTS
|
|
||||||
cliPrintf("custom defaults: %s", hasCustomDefaults() ? "YES" : "NO");
|
|
||||||
#endif // USE_CUSTOM_DEFAULTS
|
#endif // USE_CUSTOM_DEFAULTS
|
||||||
|
|
||||||
cliPrintLinefeed();
|
#if defined(USE_UNIFIED_TARGET) && defined(USE_BOARD_INFO)
|
||||||
#endif // USE_UNIFIED_TARGET
|
if (strlen(getManufacturerId()) && strlen(getBoardName())) {
|
||||||
|
cliPrintf("# board: manufacturer_id: %s, board_name: %s", getManufacturerId(), getBoardName());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_RC_SMOOTHING_FILTER
|
#ifdef USE_RC_SMOOTHING_FILTER
|
||||||
|
@ -6592,8 +6665,7 @@ void cliProcess(void)
|
||||||
#if defined(USE_CUSTOM_DEFAULTS)
|
#if defined(USE_CUSTOM_DEFAULTS)
|
||||||
static bool cliProcessCustomDefaults(bool quiet)
|
static bool cliProcessCustomDefaults(bool quiet)
|
||||||
{
|
{
|
||||||
char *customDefaultsPtr = customDefaultsStart;
|
if (processingCustomDefaults || !hasCustomDefaults()) {
|
||||||
if (processingCustomDefaults || !isCustomDefaults(customDefaultsPtr)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6615,7 +6687,8 @@ static bool cliProcessCustomDefaults(bool quiet)
|
||||||
bufferIndex = 0;
|
bufferIndex = 0;
|
||||||
processingCustomDefaults = true;
|
processingCustomDefaults = true;
|
||||||
|
|
||||||
while (*customDefaultsPtr && *customDefaultsPtr != 0xFF && customDefaultsPtr < customDefaultsEnd) {
|
char *customDefaultsPtr = customDefaultsStart;
|
||||||
|
while (customDefaultsHasNext(customDefaultsPtr)) {
|
||||||
processCharacter(*customDefaultsPtr++);
|
processCharacter(*customDefaultsPtr++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue