1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-25 01:05:27 +03:00
Commit graph

115 commits

Author SHA1 Message Date
blckmn
3a443d837f Using OSD config when USE_OSD not defined.
- maybe worth setting up co-dependency between CMS and OSD (however can one exist without the other?)
2022-11-05 22:03:08 +11:00
Dominic Clifton
5215a2b896 CMS - Fix whitespace. 2022-01-23 15:31:00 +01:00
Dominic Clifton
a0ca5124a2 CMS - Fix comment typo. 2022-01-23 15:30:37 +01:00
Dominic Clifton
e2c0388a6a OSD - Add support for async screen clearing to display API.
No screen clearing is actually done asynchronously yet.
2022-01-22 18:59:11 +01:00
Steve Evans
3de0d384ed Make CMS fields readonly when overridden by a slider and mark with an S 2021-12-12 16:34:02 +00:00
Bruce Luckcuck
07598d824c Add up/down page indicator to CMS menu display
Often the user doesn't realize that there are more menu items then displayed and the only way to tell was to try and move the selection to the bottom to see if another page appears.

This PR adds page up/down indicators if there are more menu items than those visible on the current display.

Uses the OSD arrow symbols when possible (for OSD supporting devices), otherwise the `^` (carat) and `V` are used for text-only represenatations.

To determine if the device was capable of displaying symbols the `displayPort` structure has a new `deviceType` set when it is initialized. There have been other times when knowing the type of device would have been useful so that's now supported. Then this is abstracted by a new `displaySupportsOsdSymbols()` function. Devices that support OSD are assumed to support the OSD symbols as the OSD element drawing code always uses them. For devices that don't support OSD function we have to presume the sybols aren't available.
2021-01-16 13:57:04 -05:00
Michael Keller
3ea8c657c0
Merge pull request #10448 from etracer65/fix_cms_displayport_register
Only register CMS displayPort for SRXL and CRSF when appropriate
2021-01-16 10:14:09 +08:00
Bruce Luckcuck
e7b9828c3b Add option to display OSD menus over a solid gray background
Improves menu readability by changing the background from a transparent display of the camera image to a static opaque gray background.

The behavior is controlled with the `osd_menu_background` parameter which defaults to `TRANSPARENT` to preserve the previous behavior. Other opaque options are available:
```
osd_menu_background = TRANSPARENT
Allowed values: TRANSPARENT, BLACK, GRAY, LIGHT_GRAY
```

The background setting is available in the CMS OSD menu and the user can cycle through the various options with the display updating in real-time.

Currently only the onboard MAX7456-based OSD is supported, but the implementation adds `displayPort` support so it can easily be extended to other OSD devices if those manufacturers want to add support. Also can be extended to other background types (like colors, varying transparency, etc.) for future device support.

Makes use of the built-in MAX7456 feature to display all transparent pixels as "gray". The MAX7456 display area seems to be a few scan lines smaller than the actual camera video image so it's normal for some of the camera image to "leak" at the top/bottom of the display. The OSD display area can be adjusted up/down using the `vcd_v_offset` setting if desired.
2021-01-10 18:19:59 -05:00
Bruce Luckcuck
35adb5ba06 Only register CMS displayPort for SRXL and CRSF when appropriate
Previous logic was always registering CRSL and SRXL as CMS displayPort devices regardless of whether the user was actually using that type of radio and telemetry.

The problem this caused is that if the user accidentally (or intentionally) used the CMS invoke stick command while already in the CMS on the MAX7456 the logic interprets this to mean "switch to the next registered displayPort device". So in this case the CMS would appear to exit based on what the user could see. But in reality it's still active and simply switched to the next (nonexistent) device. The user is then stuck and can't arm because the `CMS` arming disabled will be active and they have no way to interact with the CMS. They can technically blindly do the CMS stick command 2 more times to get back to the MAX7456, but how would they know that?

So this change only registers the CRSF and SRXL displayPorts when the user has selected those receiver types and enabled telemetry.

This is actually only a partial solution since it prevents registering the devices when they're impossible to work, but doesn't do anything for the actual CRSF or SRXL user that may be using equipment not capable of displaying the CMS. So it's still possible for them to get stuck in this situation. But I don't see any reasonable way to prevent this.

Perhaps it's time to rethink this "Switch to next CMS device" logic? It's something that nobody really knows about and seems to be more trouble than value. Maybe there are some edge cases where it's useful like using the OLED dashboard along with a MAX7456, but that's a rare use-case. Or possibly we need some explicit control where the user has to enable the particular displayPort device to be eligible for CMS?
2021-01-04 12:20:02 -05:00
limonspb
54d1c3051a Added persistent stats to CMS 2020-10-29 22:04:54 -05:00
Bruce Luckcuck
ebc8928d0d Improve CMS support of long lookup table names
Optimizes the display to use available space by calculating the label length vs. the screen size instead of a fixed 12 character limit.

For lookup table strings that are still too long the value is displayed as a scrolling ticker so the user can see the entire name.
2020-10-13 15:05:47 -04:00
Bruce Luckcuck
19ece68555 Add box mode to disable stick commands
Adds a `STICK COMMAND DISABLE SW` mode used to prevent inadvertant triggering of controls, calibrations, or settings changes. Useful for USB HID mode when using the flight controller as a joystick (and auto-detect doesn't work), in "team" or "relay" racing where multiple quads might be bound to the same transmitter, or just in general if the user wants prevent stick commands.

Will also prevent stick arming when the mode is active (but not stick disarming).
2020-09-15 12:51:19 -04:00
dkustec
60cc80825a Disable stick commands when HID is active and USB is connected
Moved to shared code and cms.c refactoring

Added missing line endings and comments

Passing tests - defines added

Added missing definition

Added check for USE_USB_CDC_HID in cmsUpdate

Code refactoring and condition change

Remove unnecessary include

Disable stick commands when HID is active and USB is connected

cdcDeviceIsMayBeActive refactored

Disable stick commands when HID is active and USB is connected
2020-08-24 15:38:33 +02:00
mikeller
dad63b6d14 Improvements from @ledvinap. 2020-08-06 05:59:23 +12:00
mikeller
d8e3aa7e2d Fixed lockup when entering CMS. 2020-08-06 05:59:23 +12:00
mikeller
cfc89c98a8 Fixed the MAX7456 loop time problems introduced by #9948. 2020-07-05 22:00:13 +12:00
Michael Keller
944eb989d5
Merge pull request #9746 from codecae/crsf_cms_compression
CMS over CRSF compression
2020-06-22 00:31:21 +12:00
mikeller
4b52c819e9 Fixed display / editing of int16 in CMS. 2020-05-25 02:17:27 +12:00
Curtis Bangert
236f6706a3 CMS over CRSF compression 2020-05-08 23:11:40 -04:00
Bruce Luckcuck
9fa0c3bb1e Fix CMS task rate; correct cmsDeviceCount logic; coding style cleanup
The CMS task was configured to run at 60hz but there was limiting logic in place to restrict it to every 50ms (20hz). Remove the extra logic and simply run the task at 20hz.

There was incorrect logic that checked if `(cmsDeviceCount < 0)` to not run the task. Firstly `cmsDeviceCount` can never be < 0, and secondly the task should not run when it is 0 as that means there are no registered `displayPort` devices. Generally fix the logic to used `unsigned` for `cmsDeviceCount`. It can only ever be increaded (new device registered) and there is no mechanism to "unregister" a device.

Lots of coding style cleanup.
2020-04-10 10:01:51 -04:00
Bruce Luckcuck
265d6dde2b CMS dynamic setup popup menu
Adds a dynamically constructed menu that will appear before the main menu when the user enters CMS if there are any outstanding setup items to complete. Currently only includes entry to calibrate the ACC if required, but provides a framework for other setup reminders as needed. The user can choose to exit this menu without remedying the problems, but the menu will reappear when they next enter CMS. If there are no required setup items then the menu will be skipped and the user will go straight to the main menu.
2020-03-12 11:45:44 -04:00
jflyper
ff16686893 White space tidy 2020-02-17 23:54:57 +13:00
Asizon
6061e4e3ea Move Skip to a function 2020-01-28 15:48:14 +01:00
Asizon
6a53ee5baf Remove white line 2020-01-23 11:55:54 +01:00
Asizon
d6391dafe1 Skip DYNAMIC readonly entries 2020-01-23 11:45:45 +01:00
Asizon
8f4880409d Fix CMS Menu Navigation 2020-01-16 10:16:38 +01:00
Michael Keller
dad2b244e9
Make CMS OSD menu max7456 settings have realtime effect (#9275)
Make CMS OSD menu max7456 settings have realtime effect
2019-12-10 12:41:03 +13:00
Michael Keller
7d215e8f84
Fixed 'back' command for CMS menus. (#9266)
Fixed 'back' command for CMS menus.
2019-12-10 01:48:23 +13:00
Bruce Luckcuck
65aac98c1f Make CMS OSD menu max7456 settings have realtime effect
Makes the invert, black brightness, and white brightness update the display as the settings are changed rather than only taking effect once the menu is exited.
2019-12-08 18:01:14 -05:00
mikeller
9a5e647b11 Inhibit 'Save & Exit' menu when in RC preview. 2019-12-08 12:57:55 +13:00
mikeller
cd061168ec Fixed 'back' command for CMS menus. 2019-12-08 09:47:26 +13:00
mikeller
438a801eb8 Fixed 'cast-function-type' warnings, reworked CMS function pointer juggle. 2019-11-29 03:45:27 +13:00
Michael Keller
140bb22b88 Removed 'checkRedirect' and references to it. 2019-11-26 19:14:47 +13:00
Michael Keller
23c458e85f
Fixed exiting from CMS menu. (#9221)
Fixed exiting from CMS menu.
2019-11-26 06:19:14 +13:00
jflyper
2e84b0c442 Add support for character attribute rich displayport 2019-11-25 10:43:29 +09:00
mikeller
f2ea50faec Fixed exiting from CMS menu. 2019-11-25 02:21:11 +13:00
mikeller
cedcf2d7e2 Added calibration menu to CMS. 2019-11-19 13:59:52 +13:00
Michael Keller
8548189bc6
Add OSD background support for the static portions of display e… (#9129)
Add OSD background support for the static portions of display elements
2019-10-31 00:10:01 +13:00
Bruce Luckcuck
5f5ee33718 Add OSD background support for the static portions of display elements
Significantly reduces the time the OSD task spends drawing elements that are completely or mostly static. The larger the element the more time savings are realized. Currently implemented support for:
- Crosshairs
- Artificial Horizon Sidebars
- Craft name
- Display name
- Stick overlay

Since the static portions are only rendered once, the static elements add no processing time to the OSD task. As an example, enabling the above elements prior to these changes results in a total rendering time of 47us. After the enhancements they take only 6us (basically the rendering phase minimum overhead). So effectively 41us are removed from the OSD task.

Opens the possibility to add large mostly static elements with no additional overhead. An example would be a camera framing element that might draw a "box" around most of the screen. Previously this would add significant processing overhead to the OSD task, but now it will have no impact.
2019-10-28 19:34:29 -04:00
mikeller
4a7904695e Moved 'config.[ch]' into the 'config/' directory. 2019-10-28 11:17:25 +13:00
Bruce Luckcuck
5c98726318 Replace individual CMS vtx menus with a single entry that redirects to the correct protocol menu
Instead of having individual menus for RTC6705, SmartAudio, and Tramp, Now there is a single VTX menu that detects the type of active device and redirects to the appropriate protocol menu.

Reduces confusion and chances of erroneously using the wrong VTX menu.

Fixes a problem where the Tramp menu could be used to change band/channel/power even though the VTX was a SmartAudio device.

If the VTX is not configured or not communicating, a more informative message will be presented rather than a partially populated protocol menu. For example:
```
  VTX NOT RESPONDING
  OR NOT CONFIGURED

> BACK
```

Extends the CMS menu capabilities by adding an optional `redirectCheck` function that can conditionally return a menu that should be redirected to instead of the current menu. This redirect happens before any processing happens for the original menu. Adds flexibility to make the CMS menus have a more dynamic aspect.
2019-10-19 20:17:43 -04:00
jflyper
542146c702 Motor code refactor (Phase 1) 2019-07-17 01:33:39 +09:00
Bruce Luckcuck
9081bd3338 Add CMS menu entry level control of forced reboot on changes
CMS menu items can now be defined with a `REBOOT_REQUIRED` flag. If the user changes flagged elements the the exit/save options will change to `EXIT&REBOOT` and `SAVE&REBOOT` - ensuring that the changed items will be handled properly. This should be used for options where runtime changes either won't take effect (because they are read at boot), or for items that could have unexpected behavior if changed.

Several appropriate menus have been updated to include the flag.

To accomodate the dynamic nature of the save/exit options, the individual options have been removed from the main menu and replaced with a `SAVE/EXIT` submenu. This is the same menu that is presented as the quick-access popup save menu (yaw-right). This menu will adapt to requiring a reboot if any flagged setting is changed. Additionally the `REBOOT_REQD` arming disabled reason will be set (cleared by the reboot).
2019-05-20 12:39:36 -04:00
Michael Keller
a4ac70bd95
Fix pageMaxRow use before update (#8222)
Fix pageMaxRow use before update
2019-05-09 14:53:15 +12:00
Timothy Werquin
711424f63b
Fix pageMaxRow use before update
After commit d2e7abd the for loop following my change use pageMaxRow to determine which flags to clear.
But this pageMaxRow value is updated after the loop, which caused a crash in a very specific circumstance:

1 open the CMS OSD menu and go to profile

2 close the profile by yaw right, select exit

3 open CMS OSD menu and go to profile again

This caused a crash as runtimeEntryFlags wasn't cleared properly and the Copy Profile entry's flags still indicated OPTSTRING somehow.
which caused it's CMSEntryFuncPtr function to be cast to OPTSTRING and called without arguments.
2019-05-08 00:36:23 +02:00
mikeller
4fb58b340e Extend the scope of BOXPARALYZE to cover stick commands, adjustments, and CMS. 2019-05-06 01:28:37 +12:00
Curtis Bangert
94102cc798 Updated CMS to pass flags by reference into cmsDrawMenuEntry 2019-04-02 12:41:09 -04:00
Pieter Kruger
d2e7abd5c6 Add fix for runtimeEntryFlags array overrun 2019-03-03 13:27:35 +10:00
Bruce Luckcuck
30672a37c5 Refactor OSD element display code
Remove the giant `select` block that contained all the code to generate the elements and transition them to individual functions called only when the element is active. Simplifies the code and results in a performance improvement as it's not necessary to fall through the large `select` statement for every element that will be drawn. The individual functions and the element to function mapping are moved to a new `osd_elements.c` file.

Moved the OSD related code files to a new `osd/` directory.

Also pre-analyze the active elements and only process those that are active. This also saves processing as it's not necessary to loop through all 50 or so elements when only a couple are active.

Various other cleanup and removal of stale or unnecessary code.

In the default configuration the element drawing phase of the OSD task is reduced from ~51us to ~35us - resulting in about a 30% decrease in processing time.
2019-02-21 14:03:25 -05:00
Dominic Clifton
78f38daa4f Drastically reduce the CMS RAM usage.
Previously the runtime page state was mixed with the page configuration.

This resolves this by:
a) making the configuration entries constant so they do not need to be
in RAM.
b) Maintaining page state independently.
2019-02-17 00:18:24 +01:00