Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docs/Settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -4582,6 +4582,16 @@ Auto swap display time interval between disarm stats pages (seconds). Reverts to

---

### osd_system_msg_display_time

System message display cycle time for multiple messages (milliseconds).

| Default | Min | Max |
| --- | --- | --- |
| 1000 | 500 | 5000 |

---

### osd_telemetry

To enable OSD telemetry for antenna tracker. Possible values are `OFF`, `ON` and `TEST`
Expand Down
7 changes: 7 additions & 0 deletions src/main/fc/settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3470,6 +3470,13 @@ groups:
max: 6
default_value: 3

- name: osd_system_msg_display_time
description: System message display cycle time for multiple messages (milliseconds).
field: system_msg_display_time
default_value: 1000
min: 500
max: 5000

- name: PG_OSD_COMMON_CONFIG
type: osdCommonConfig_t
headers: ["io/osd_common.h"]
Expand Down
16 changes: 14 additions & 2 deletions src/main/io/osd.c
Original file line number Diff line number Diff line change
Expand Up @@ -3208,7 +3208,7 @@ PG_RESET_TEMPLATE(osdConfig_t, osdConfig,
.pan_servo_index = SETTING_OSD_PAN_SERVO_INDEX_DEFAULT,
.pan_servo_pwm2centideg = SETTING_OSD_PAN_SERVO_PWM2CENTIDEG_DEFAULT,
.esc_rpm_precision = SETTING_OSD_ESC_RPM_PRECISION_DEFAULT,

.system_msg_display_time = SETTING_OSD_SYSTEM_MSG_DISPLAY_TIME_DEFAULT,
.units = SETTING_OSD_UNITS_DEFAULT,
.main_voltage_decimals = SETTING_OSD_MAIN_VOLTAGE_DECIMALS_DEFAULT,

Expand Down Expand Up @@ -4165,6 +4165,18 @@ displayCanvas_t *osdGetDisplayPortCanvas(void)
return NULL;
}

timeMs_t systemMessageCycleTime(unsigned messageCount, const char **messages){
uint8_t i = 0;
float factor = 1.0f;
while (i < messageCount) {
if ((float)strlen(messages[i]) / 15.0f > factor) {
factor = (float)strlen(messages[i]) / 15.0f;
}
i++;
}
return osdConfig()->system_msg_display_time * factor;
}

textAttributes_t osdGetSystemMessage(char *buff, size_t buff_size, bool isCenteredText)
{
textAttributes_t elemAttr = TEXT_ATTRIBUTES_NONE;
Expand Down Expand Up @@ -4292,7 +4304,7 @@ textAttributes_t osdGetSystemMessage(char *buff, size_t buff_size, bool isCenter
}

if (messageCount > 0) {
message = messages[OSD_ALTERNATING_CHOICES(1000, messageCount)];
message = messages[OSD_ALTERNATING_CHOICES(systemMessageCycleTime(messageCount, messages), messageCount)];
if (message == failsafeInfoMessage) {
// failsafeInfoMessage is not useful for recovering
// a lost model, but might help avoiding a crash.
Expand Down
1 change: 1 addition & 0 deletions src/main/io/osd.h
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ typedef struct osdConfig_s {
uint8_t pan_servo_index; // Index of the pan servo used for home direction offset
int8_t pan_servo_pwm2centideg; // Centidegrees of servo rotation per us pwm
uint8_t crsf_lq_format;
uint16_t system_msg_display_time; // system message display time for multiple messages (ms)
uint8_t sidebar_height; // sidebar height in rows, 0 turns off sidebars leaving only level indicator arrows
uint8_t telemetry; // use telemetry on displayed pixel line 0
uint8_t esc_rpm_precision; // Number of characters used for the RPM numbers.
Expand Down