From e7df32f0200ad74b20afcd654d75277f381e23c2 Mon Sep 17 00:00:00 2001 From: Krasiyan Nedelchev Date: Mon, 7 Feb 2022 00:08:57 +0100 Subject: [PATCH] Rename 'display_name' to 'pilot_name'; rename 'name' to 'craft_name'; Add the 'MSP2_GET_TEXT' and 'MSP2_SET_TEXT' MSP commands - add the 'MSP2_GET_TEXT' and 'MSP2_SET_TEXT' MSP2 commands - Support getting/setting the 'MSP2TEXT_PILOT_DISPLAY_NAME' config prop ('pilotConfigMutable()->displayName') - rename 'display_name' to 'pilot_name' - Add the new 'OSD_PILOT_NAME' OSD element in place of the 'OSD_DISPLAY_NAME' one (as they are semantically identical) - Add the 'osd_pilot_name_pos' cli prop in place of 'osd_display_name_pos' - rename 'pilotConfigMutable()'s 'name' to 'craftName' - remove the legacy 'GET_NAME' / 'SET_NAME' MSP commands - replace the 'name' CLI prop for 'craft_name' - add the 'MSP2TEXT_CRAFT_NAME' constant for 'MSP2_GET_TEXT' and 'MSP2_SET_TEXT' --- src/main/blackbox/blackbox.c | 2 +- src/main/cli/cli.c | 8 +-- src/main/cli/settings.c | 6 +- src/main/cms/cms_menu_osd.c | 4 +- src/main/config/config.c | 6 +- src/main/config/config.h | 4 +- src/main/msp/msp.c | 85 ++++++++++++++++++----- src/main/msp/msp_protocol.h | 3 - src/main/msp/msp_protocol_v2_betaflight.h | 6 ++ src/main/osd/osd.h | 2 +- src/main/osd/osd_elements.c | 20 +++--- src/main/pg/pg_ids.h | 2 +- 12 files changed, 99 insertions(+), 49 deletions(-) diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c index 2f32e842a5..d852a2b2af 100644 --- a/src/main/blackbox/blackbox.c +++ b/src/main/blackbox/blackbox.c @@ -1291,7 +1291,7 @@ static bool blackboxWriteSysinfo(void) BLACKBOX_PRINT_HEADER_LINE("Board information", "%s %s", getManufacturerId(), getBoardName()); #endif BLACKBOX_PRINT_HEADER_LINE("Log start datetime", "%s", blackboxGetStartDateTime(buf)); - BLACKBOX_PRINT_HEADER_LINE("Craft name", "%s", pilotConfig()->name); + BLACKBOX_PRINT_HEADER_LINE("Craft name", "%s", pilotConfig()->craftName); BLACKBOX_PRINT_HEADER_LINE("I interval", "%d", blackboxIInterval); BLACKBOX_PRINT_HEADER_LINE("P interval", "%d", blackboxPInterval); BLACKBOX_PRINT_HEADER_LINE("P ratio", "%d", (uint16_t)(blackboxIInterval / blackboxPInterval)); diff --git a/src/main/cli/cli.c b/src/main/cli/cli.c index 3b471c3c3f..5279cafe1b 100644 --- a/src/main/cli/cli.c +++ b/src/main/cli/cli.c @@ -3117,10 +3117,10 @@ static void cliSimplifiedTuning(const char *cmdName, char *cmdline) } #endif -static void printName(dumpFlags_t dumpMask, const pilotConfig_t *pilotConfig) +static void printCraftName(dumpFlags_t dumpMask, const pilotConfig_t *pilotConfig) { - const bool equalsDefault = strlen(pilotConfig->name) == 0; - cliDumpPrintLinef(dumpMask, equalsDefault, "\r\n# name: %s", equalsDefault ? emptyName : pilotConfig->name); + const bool equalsDefault = strlen(pilotConfig->craftName) == 0; + cliDumpPrintLinef(dumpMask, equalsDefault, "\r\n# name: %s", equalsDefault ? emptyName : pilotConfig->craftName); } #if defined(USE_BOARD_INFO) @@ -6286,7 +6286,7 @@ static void printConfig(const char *cmdName, char *cmdline, bool doDiff) } if (!(dumpMask & HARDWARE_ONLY)) { - printName(dumpMask, &pilotConfig_Copy); + printCraftName(dumpMask, &pilotConfig_Copy); } #ifdef USE_RESOURCE_MGMT diff --git a/src/main/cli/settings.c b/src/main/cli/settings.c index faa6e0e020..18c09e1878 100644 --- a/src/main/cli/settings.c +++ b/src/main/cli/settings.c @@ -1363,7 +1363,7 @@ const clivalue_t valueTable[] = { { "osd_wh_drawn_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_WATT_HOURS_DRAWN]) }, { "osd_motor_diag_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_MOTOR_DIAG]) }, { "osd_craft_name_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_CRAFT_NAME]) }, - { "osd_display_name_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_DISPLAY_NAME]) }, + { "osd_pilot_name_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_PILOT_NAME]) }, { "osd_gps_speed_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_SPEED]) }, { "osd_gps_lon_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_LON]) }, { "osd_gps_lat_pos", VAR_UINT16 | MASTER_VALUE, .config.minmaxUnsigned = { 0, OSD_POSCFG_MAX }, PG_OSD_ELEMENT_CONFIG, offsetof(osdElementConfig_t, item_pos[OSD_GPS_LAT]) }, @@ -1678,9 +1678,9 @@ const clivalue_t valueTable[] = { { "stats_mah_used", VAR_UINT32 | MASTER_VALUE, .config.u32Max = UINT32_MAX, PG_STATS_CONFIG, offsetof(statsConfig_t, stats_mah_used) }, #endif #endif - { "name", VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string = { 1, MAX_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PILOT_CONFIG, offsetof(pilotConfig_t, name) }, + { "craft_name", VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string = { 1, MAX_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PILOT_CONFIG, offsetof(pilotConfig_t, craftName) }, #ifdef USE_OSD - { "display_name", VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string = { 1, MAX_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PILOT_CONFIG, offsetof(pilotConfig_t, displayName) }, + { "pilot_name", VAR_UINT8 | MASTER_VALUE | MODE_STRING, .config.string = { 1, MAX_NAME_LENGTH, STRING_FLAGS_NONE }, PG_PILOT_CONFIG, offsetof(pilotConfig_t, pilotName) }, #endif // PG_POSITION diff --git a/src/main/cms/cms_menu_osd.c b/src/main/cms/cms_menu_osd.c index 56f5aff548..a332650d7c 100644 --- a/src/main/cms/cms_menu_osd.c +++ b/src/main/cms/cms_menu_osd.c @@ -105,7 +105,7 @@ const OSD_Entry menuOsdActiveElemsEntries[] = #endif {"ANTI GRAVITY", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_ANTI_GRAVITY]}, {"FLY MODE", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_FLYMODE]}, - {"NAME", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_CRAFT_NAME]}, + {"CRAFT NAME", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_CRAFT_NAME]}, {"THROTTLE", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_THROTTLE_POS]}, #ifdef USE_VTX_CONTROL {"VTX CHAN", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_VTX_CHANNEL]}, @@ -161,7 +161,7 @@ const OSD_Entry menuOsdActiveElemsEntries[] = {"STICK OVERLAY LEFT", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_STICK_OVERLAY_LEFT]}, {"STICK OVERLAY RIGHT",OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_STICK_OVERLAY_RIGHT]}, #endif - {"DISPLAY NAME", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_DISPLAY_NAME]}, + {"PILOT NAME", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_PILOT_NAME]}, {"RC CHANNELS", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_RC_CHANNELS]}, {"CAMERA FRAME", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_CAMERA_FRAME]}, {"TOTAL FLIGHTS", OME_VISIBLE | DYNAMIC, NULL, &osdConfig_item_pos[OSD_TOTAL_FLIGHTS]}, diff --git a/src/main/config/config.c b/src/main/config/config.c index d7fb90c66e..93fd907776 100644 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -105,11 +105,11 @@ pidProfile_t *currentPidProfile; #define RX_SPI_DEFAULT_PROTOCOL 0 #endif -PG_REGISTER_WITH_RESET_TEMPLATE(pilotConfig_t, pilotConfig, PG_PILOT_CONFIG, 1); +PG_REGISTER_WITH_RESET_TEMPLATE(pilotConfig_t, pilotConfig, PG_PILOT_CONFIG, 2); PG_RESET_TEMPLATE(pilotConfig_t, pilotConfig, - .name = { 0 }, - .displayName = { 0 }, + .craftName = { 0 }, + .pilotName = { 0 }, ); PG_REGISTER_WITH_RESET_TEMPLATE(systemConfig_t, systemConfig, PG_SYSTEM_CONFIG, 3); diff --git a/src/main/config/config.h b/src/main/config/config.h index afdcd9bf5a..af947a50eb 100644 --- a/src/main/config/config.h +++ b/src/main/config/config.h @@ -34,8 +34,8 @@ typedef enum { } configurationState_e; typedef struct pilotConfig_s { - char name[MAX_NAME_LENGTH + 1]; - char displayName[MAX_NAME_LENGTH + 1]; + char craftName[MAX_NAME_LENGTH + 1]; + char pilotName[MAX_NAME_LENGTH + 1]; } pilotConfig_t; PG_DECLARE(pilotConfig_t, pilotConfig); diff --git a/src/main/msp/msp.c b/src/main/msp/msp.c index 333386e14a..956b459dcb 100644 --- a/src/main/msp/msp.c +++ b/src/main/msp/msp.c @@ -1140,15 +1140,6 @@ static bool mspProcessOutCommand(mspDescriptor_t srcDesc, int16_t cmdMSP, sbuf_t } break; - case MSP_NAME: - { - const int nameLen = strlen(pilotConfig()->name); - for (int i = 0; i < nameLen; i++) { - sbufWriteU8(dst, pilotConfig()->name[i]); - } - } - break; - #ifdef USE_SERVOS case MSP_SERVO: sbufWriteData(dst, &servo, MAX_SUPPORTED_SERVOS * 2); @@ -2487,6 +2478,38 @@ static mspResult_e mspFcProcessOutCommandWithArg(mspDescriptor_t srcDesc, int16_ } break; + + case MSP2_GET_TEXT: + { + // type byte, then length byte followed by the actual characters + const uint8_t textType = sbufBytesRemaining(src) ? sbufReadU8(src) : 0; + + char* textVar; + + switch (textType) { + case MSP2TEXT_PILOT_NAME: + textVar = pilotConfigMutable()->pilotName; + break; + + case MSP2TEXT_CRAFT_NAME: + textVar = pilotConfigMutable()->craftName; + break; + + default: + return MSP_RESULT_ERROR; + } + + const uint8_t textLength = strlen(textVar); + + // type byte, then length byte followed by the actual characters + sbufWriteU8(dst, textType); + sbufWriteU8(dst, textLength); + for (unsigned int i = 0; i < textLength; i++) { + sbufWriteU8(dst, textVar[i]); + } + } + break; + default: return MSP_RESULT_CMD_UNKNOWN; } @@ -3760,16 +3783,6 @@ static mspResult_e mspProcessInCommand(mspDescriptor_t srcDesc, int16_t cmdMSP, break; #endif - case MSP_SET_NAME: - memset(pilotConfigMutable()->name, 0, ARRAYLEN(pilotConfig()->name)); - for (unsigned int i = 0; i < MIN(MAX_NAME_LENGTH, dataSize); i++) { - pilotConfigMutable()->name[i] = sbufReadU8(src); - } -#ifdef USE_OSD - osdAnalyzeActiveElements(); -#endif - break; - #ifdef USE_RTC_TIME case MSP_SET_RTC: { @@ -3840,6 +3853,40 @@ static mspResult_e mspProcessInCommand(mspDescriptor_t srcDesc, int16_t cmdMSP, break; #endif + + case MSP2_SET_TEXT: + { + // type byte, then length byte followed by the actual characters + const uint8_t textType = sbufReadU8(src); + + char* textVar; + const uint8_t textLength = MIN(MAX_NAME_LENGTH, sbufReadU8(src)); + switch (textType) { + case MSP2TEXT_PILOT_NAME: + textVar = pilotConfigMutable()->pilotName; + break; + + case MSP2TEXT_CRAFT_NAME: + textVar = pilotConfigMutable()->craftName; + break; + + default: + return MSP_RESULT_ERROR; + } + + memset(textVar, 0, strlen(textVar)); + for (unsigned int i = 0; i < textLength; i++) { + textVar[i] = sbufReadU8(src); + } + +#ifdef USE_OSD + if (textType == MSP2TEXT_PILOT_NAME || textType == MSP2TEXT_CRAFT_NAME) { + osdAnalyzeActiveElements(); + } +#endif + } + break; + default: // we do not know how to handle the (valid) message, indicate error MSP $M! return MSP_RESULT_ERROR; diff --git a/src/main/msp/msp_protocol.h b/src/main/msp/msp_protocol.h index 4dc73f8978..e5a70e31a1 100644 --- a/src/main/msp/msp_protocol.h +++ b/src/main/msp/msp_protocol.h @@ -101,9 +101,6 @@ #define MSP_BOARD_INFO 4 //out message #define MSP_BUILD_INFO 5 //out message -#define MSP_NAME 10 //out message Returns user set board name - betaflight -#define MSP_SET_NAME 11 //in message Sets board name - betaflight - // // MSP commands for Cleanflight original features // diff --git a/src/main/msp/msp_protocol_v2_betaflight.h b/src/main/msp/msp_protocol_v2_betaflight.h index f4dceb6ffd..8214bd6e29 100644 --- a/src/main/msp/msp_protocol_v2_betaflight.h +++ b/src/main/msp/msp_protocol_v2_betaflight.h @@ -24,3 +24,9 @@ #define MSP2_SEND_DSHOT_COMMAND 0x3003 #define MSP2_GET_VTX_DEVICE_STATUS 0x3004 #define MSP2_GET_OSD_WARNINGS 0x3005 // returns active OSD warning message text +#define MSP2_GET_TEXT 0x3006 +#define MSP2_SET_TEXT 0x3007 + +// MSP2_SET_TEXT and MSP2_GET_TEXT variable types +#define MSP2TEXT_PILOT_NAME 1 +#define MSP2TEXT_CRAFT_NAME 2 diff --git a/src/main/osd/osd.h b/src/main/osd/osd.h index 1eec65543a..d14f2a0a34 100644 --- a/src/main/osd/osd.h +++ b/src/main/osd/osd.h @@ -149,7 +149,7 @@ typedef enum { OSD_FLIGHT_DIST, OSD_STICK_OVERLAY_LEFT, OSD_STICK_OVERLAY_RIGHT, - OSD_DISPLAY_NAME, + OSD_PILOT_NAME, OSD_ESC_RPM_FREQ, OSD_RATE_PROFILE_NAME, OSD_PID_PROFILE_NAME, diff --git a/src/main/osd/osd_elements.c b/src/main/osd/osd_elements.c index 7b81747ab0..06b276f9ec 100644 --- a/src/main/osd/osd_elements.c +++ b/src/main/osd/osd_elements.c @@ -797,10 +797,10 @@ static void toUpperCase(char* dest, const char* src, unsigned int maxSrcLength) static void osdBackgroundCraftName(osdElementParms_t *element) { - if (strlen(pilotConfig()->name) == 0) { + if (strlen(pilotConfig()->craftName) == 0) { strcpy(element->buff, "CRAFT_NAME"); } else { - toUpperCase(element->buff, pilotConfig()->name, MAX_NAME_LENGTH); + toUpperCase(element->buff, pilotConfig()->craftName, MAX_NAME_LENGTH); } } @@ -874,12 +874,12 @@ static void osdElementDisarmed(osdElementParms_t *element) } } -static void osdBackgroundDisplayName(osdElementParms_t *element) +static void osdBackgroundPilotName(osdElementParms_t *element) { - if (strlen(pilotConfig()->displayName) == 0) { - strcpy(element->buff, "DISPLAY_NAME"); + if (strlen(pilotConfig()->pilotName) == 0) { + strcpy(element->buff, "PILOT_NAME"); } else { - toUpperCase(element->buff, pilotConfig()->displayName, MAX_NAME_LENGTH); + toUpperCase(element->buff, pilotConfig()->pilotName, MAX_NAME_LENGTH); } } @@ -1525,7 +1525,7 @@ static void osdElementWarnings(osdElementParms_t *element) } #endif // USE_RX_LINK_QUALITY_INFO } - strncpy(pilotConfigMutable()->name, element->buff, MAX_NAME_LENGTH - 1); + strncpy(pilotConfigMutable()->craftName, element->buff, MAX_NAME_LENGTH - 1); } #endif // USE_CRAFTNAME_MSGS } @@ -1579,7 +1579,7 @@ static const uint8_t osdElementDisplayOrder[] = { #ifdef USE_ACC OSD_FLIP_ARROW, #endif - OSD_DISPLAY_NAME, + OSD_PILOT_NAME, #ifdef USE_RTC_TIME OSD_RTC_DATETIME, #endif @@ -1711,7 +1711,7 @@ const osdElementDrawFn osdElementDrawFunction[OSD_ITEM_COUNT] = { [OSD_STICK_OVERLAY_LEFT] = osdElementStickOverlay, [OSD_STICK_OVERLAY_RIGHT] = osdElementStickOverlay, #endif - [OSD_DISPLAY_NAME] = NULL, // only has background + [OSD_PILOT_NAME] = NULL, // only has background #if defined(USE_DSHOT_TELEMETRY) || defined(USE_ESC_SENSOR) [OSD_ESC_RPM_FREQ] = osdElementEscRpmFreq, #endif @@ -1746,7 +1746,7 @@ const osdElementDrawFn osdElementBackgroundFunction[OSD_ITEM_COUNT] = { [OSD_STICK_OVERLAY_LEFT] = osdBackgroundStickOverlay, [OSD_STICK_OVERLAY_RIGHT] = osdBackgroundStickOverlay, #endif - [OSD_DISPLAY_NAME] = osdBackgroundDisplayName, + [OSD_PILOT_NAME] = osdBackgroundPilotName, }; static void osdAddActiveElement(osd_items_e element) diff --git a/src/main/pg/pg_ids.h b/src/main/pg/pg_ids.h index 6162b8ff5e..3dc3ff30fc 100644 --- a/src/main/pg/pg_ids.h +++ b/src/main/pg/pg_ids.h @@ -70,7 +70,7 @@ #define PG_RX_CHANNEL_RANGE_CONFIG 44 #define PG_MODE_COLOR_CONFIG 45 // part of led strip, structs OK #define PG_SPECIAL_COLOR_CONFIG 46 // part of led strip, structs OK -#define PG_PILOT_CONFIG 47 // does not exist in betaflight +#define PG_PILOT_CONFIG 47 // used for pilot and craft name from 4.4 #define PG_MSP_SERVER_CONFIG 48 // does not exist in betaflight #define PG_VOLTAGE_METER_CONFIG 49 // renamed from PG_VOLTAGE_METER_CONFIG // deprecated #define PG_AMPERAGE_METER_CONFIG 50 // renamed from PG_AMPERAGE_METER_CONFIG // deprecated