mirror of https://github.com/ArduPilot/ardupilot
AP_OSD: New per screen PARAMs for OSD overlay resolution and font
This adds OSDn_TXT_RES to select SD/HD overlay resoloution OSDn_FONT_INDEX for font index selection Right now support is limited to MSP Displayport OSD devices
This commit is contained in:
parent
2e70b585b4
commit
9e0425495e
|
@ -1217,6 +1217,12 @@ void AP_MSP_Telem_Backend::msp_displayport_write_string(uint8_t col, uint8_t row
|
||||||
|
|
||||||
msp_send_packet(MSP_DISPLAYPORT, MSP::MSP_V1, &packet, 4 + len, false);
|
msp_send_packet(MSP_DISPLAYPORT, MSP::MSP_V1, &packet, 4 + len, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AP_MSP_Telem_Backend::msp_displayport_set_options(const uint8_t font_index, const uint8_t screen_resolution)
|
||||||
|
{
|
||||||
|
const uint8_t subcmd[] = { msp_displayport_subcmd_e::MSP_DISPLAYPORT_SET_OPTIONS, font_index, screen_resolution };
|
||||||
|
msp_send_packet(MSP_DISPLAYPORT, MSP::MSP_V1, subcmd, sizeof(subcmd), false);
|
||||||
|
}
|
||||||
#endif //HAL_WITH_MSP_DISPLAYPORT
|
#endif //HAL_WITH_MSP_DISPLAYPORT
|
||||||
bool AP_MSP_Telem_Backend::displaying_stats_screen() const
|
bool AP_MSP_Telem_Backend::displaying_stats_screen() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -88,6 +88,7 @@ public:
|
||||||
virtual void msp_displayport_clear_screen();
|
virtual void msp_displayport_clear_screen();
|
||||||
virtual void msp_displayport_draw_screen();
|
virtual void msp_displayport_draw_screen();
|
||||||
virtual void msp_displayport_write_string(uint8_t col, uint8_t row, bool blink, const char *string);
|
virtual void msp_displayport_write_string(uint8_t col, uint8_t row, bool blink, const char *string);
|
||||||
|
virtual void msp_displayport_set_options(const uint8_t font_index, const uint8_t screen_resolution);
|
||||||
#endif
|
#endif
|
||||||
protected:
|
protected:
|
||||||
enum msp_packet_type : uint8_t {
|
enum msp_packet_type : uint8_t {
|
||||||
|
|
|
@ -104,6 +104,7 @@ typedef enum : uint8_t {
|
||||||
MSP_DISPLAYPORT_CLEAR_SCREEN = 2,
|
MSP_DISPLAYPORT_CLEAR_SCREEN = 2,
|
||||||
MSP_DISPLAYPORT_WRITE_STRING = 3,
|
MSP_DISPLAYPORT_WRITE_STRING = 3,
|
||||||
MSP_DISPLAYPORT_DRAW_SCREEN = 4,
|
MSP_DISPLAYPORT_DRAW_SCREEN = 4,
|
||||||
|
MSP_DISPLAYPORT_SET_OPTIONS = 5,
|
||||||
} msp_displayport_subcmd_e;
|
} msp_displayport_subcmd_e;
|
||||||
|
|
||||||
typedef struct PACKED {
|
typedef struct PACKED {
|
||||||
|
|
|
@ -94,7 +94,14 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool check_option(uint32_t option);
|
bool check_option(uint32_t option);
|
||||||
|
#ifdef HAL_WITH_MSP_DISPLAYPORT
|
||||||
|
virtual uint8_t get_txt_resolution() const {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
virtual uint8_t get_font_index() const {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
enum unit_type {
|
enum unit_type {
|
||||||
ALTITUDE=0,
|
ALTITUDE=0,
|
||||||
SPEED=1,
|
SPEED=1,
|
||||||
|
@ -134,6 +141,14 @@ public:
|
||||||
static const struct AP_Param::GroupInfo var_info[];
|
static const struct AP_Param::GroupInfo var_info[];
|
||||||
static const struct AP_Param::GroupInfo var_info2[];
|
static const struct AP_Param::GroupInfo var_info2[];
|
||||||
|
|
||||||
|
#ifdef HAL_WITH_MSP_DISPLAYPORT
|
||||||
|
uint8_t get_txt_resolution() const override {
|
||||||
|
return txt_resolution;
|
||||||
|
}
|
||||||
|
uint8_t get_font_index() const override {
|
||||||
|
return font_index;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
private:
|
private:
|
||||||
friend class AP_MSP;
|
friend class AP_MSP;
|
||||||
friend class AP_MSP_Telem_Backend;
|
friend class AP_MSP_Telem_Backend;
|
||||||
|
@ -214,6 +229,12 @@ private:
|
||||||
AP_OSD_Setting batt_bar{true, 1, 1};
|
AP_OSD_Setting batt_bar{true, 1, 1};
|
||||||
AP_OSD_Setting arming{true, 1, 1};
|
AP_OSD_Setting arming{true, 1, 1};
|
||||||
|
|
||||||
|
#ifdef HAL_WITH_MSP_DISPLAYPORT
|
||||||
|
// Per screen HD resolution options (currently supported only by DisplayPort)
|
||||||
|
AP_Int8 txt_resolution;
|
||||||
|
AP_Int8 font_index;
|
||||||
|
#endif
|
||||||
|
|
||||||
void draw_altitude(uint8_t x, uint8_t y);
|
void draw_altitude(uint8_t x, uint8_t y);
|
||||||
void draw_bat_volt(uint8_t x, uint8_t y);
|
void draw_bat_volt(uint8_t x, uint8_t y);
|
||||||
void draw_avgcellvolt(uint8_t x, uint8_t y);
|
void draw_avgcellvolt(uint8_t x, uint8_t y);
|
||||||
|
@ -281,7 +302,6 @@ private:
|
||||||
#endif
|
#endif
|
||||||
void draw_rngf(uint8_t x, uint8_t y);
|
void draw_rngf(uint8_t x, uint8_t y);
|
||||||
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
bool load_attempted;
|
bool load_attempted;
|
||||||
const char *str;
|
const char *str;
|
||||||
|
|
|
@ -60,6 +60,14 @@ void AP_OSD_MSP_DisplayPort::osd_thread_run_once()
|
||||||
|
|
||||||
void AP_OSD_MSP_DisplayPort::clear(void)
|
void AP_OSD_MSP_DisplayPort::clear(void)
|
||||||
{
|
{
|
||||||
|
// check if we need to enable some options
|
||||||
|
// but only for actual OSD screens
|
||||||
|
if (_osd.get_current_screen() < AP_OSD_NUM_DISPLAY_SCREENS) {
|
||||||
|
const uint8_t txt_resolution = _osd.screen[_osd.get_current_screen()].get_txt_resolution();
|
||||||
|
const uint8_t font_index = _osd.screen[_osd.get_current_screen()].get_font_index();
|
||||||
|
_displayport->msp_displayport_set_options(font_index, txt_resolution);
|
||||||
|
}
|
||||||
|
|
||||||
// clear remote MSP screen
|
// clear remote MSP screen
|
||||||
_displayport->msp_displayport_clear_screen();
|
_displayport->msp_displayport_clear_screen();
|
||||||
|
|
||||||
|
|
|
@ -1022,6 +1022,21 @@ const AP_Param::GroupInfo AP_OSD_Screen::var_info2[] = {
|
||||||
// @Range: 0 15
|
// @Range: 0 15
|
||||||
AP_SUBGROUPINFO(link_quality, "LINK_Q", 1, AP_OSD_Screen, AP_OSD_Setting),
|
AP_SUBGROUPINFO(link_quality, "LINK_Q", 1, AP_OSD_Screen, AP_OSD_Setting),
|
||||||
|
|
||||||
|
#if HAL_WITH_MSP_DISPLAYPORT
|
||||||
|
// @Param: TXT_RES
|
||||||
|
// @DisplayName: Sets the overlay text resolution (MSP DisplayPort only)
|
||||||
|
// @Description: Sets the overlay text resolution for this screen to either LD 30x16 or HD 50x18 (MSP DisplayPort only)
|
||||||
|
// @Values: 0:30x16,1:50x18
|
||||||
|
// @User: Standard
|
||||||
|
AP_GROUPINFO("TXT_RES", 3, AP_OSD_Screen, txt_resolution, 0),
|
||||||
|
|
||||||
|
// @Param: FONT
|
||||||
|
// @DisplayName: Sets the font index for this screen (MSP DisplayPort only)
|
||||||
|
// @Description: Sets the font index for this screen (MSP DisplayPort only)
|
||||||
|
// @Range: 0 15
|
||||||
|
// @User: Standard
|
||||||
|
AP_GROUPINFO("FONT", 4, AP_OSD_Screen, font_index, 0),
|
||||||
|
#endif
|
||||||
AP_GROUPEND
|
AP_GROUPEND
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue