Browse Source

AP_OSD: fixed gps stat and messages items, reformat

master
Alexander Malishev 7 years ago committed by Andrew Tridgell
parent
commit
fcd351b5c0
  1. 8
      libraries/AP_OSD/AP_OSD.cpp
  2. 5
      libraries/AP_OSD/AP_OSD.h
  3. 6
      libraries/AP_OSD/AP_OSD_MAX7456.cpp
  4. 50
      libraries/AP_OSD/AP_OSD_Screen.cpp

8
libraries/AP_OSD/AP_OSD.cpp

@ -116,18 +116,18 @@ void AP_OSD::update_osd() @@ -116,18 +116,18 @@ void AP_OSD::update_osd()
void AP_OSD::update_current_screen()
{
if(rc_channel == 0) {
if (rc_channel == 0) {
return;
}
RC_Channel *channel = RC_Channels::rc_channel(rc_channel-1);
if(channel == nullptr) {
if (channel == nullptr) {
return;
}
int16_t channel_value = channel->get_radio_in();
for(int i=0; i<AP_OSD_NUM_SCREENS; i++){
if(screen[i].enabled && screen[i].channel_min <= channel_value && screen[i].channel_max > channel_value) {
for (int i=0; i<AP_OSD_NUM_SCREENS; i++) {
if (screen[i].enabled && screen[i].channel_min <= channel_value && screen[i].channel_max > channel_value) {
current_screen = i;
break;
}

5
libraries/AP_OSD/AP_OSD.h

@ -48,7 +48,10 @@ public: @@ -48,7 +48,10 @@ public:
void draw(void);
void set_backend(AP_OSD_Backend *_backend) { backend = _backend; };
void set_backend(AP_OSD_Backend *_backend)
{
backend = _backend;
};
// User settable parameters
static const struct AP_Param::GroupInfo var_info[];

6
libraries/AP_OSD/AP_OSD_MAX7456.cpp

@ -162,9 +162,9 @@ bool AP_OSD_MAX7456::update_font() @@ -162,9 +162,9 @@ bool AP_OSD_MAX7456::update_font()
for (uint16_t chr=0; chr < 256; chr++) {
const uint8_t* chr_font_data = font_data + chr*NVM_RAM_SIZE;
//check if char already up to date
if(!check_font_char(chr, chr_font_data)) {
if (!check_font_char(chr, chr_font_data)) {
//update char inside max7456 NVM
if(!update_font_char(chr, chr_font_data)) {
if (!update_font_char(chr, chr_font_data)) {
hal.console->printf("AP_OSD: error during font char update\n");
return false;
}
@ -193,7 +193,7 @@ bool AP_OSD_MAX7456::check_font_char(uint8_t chr, const uint8_t* font_data) @@ -193,7 +193,7 @@ bool AP_OSD_MAX7456::check_font_char(uint8_t chr, const uint8_t* font_data)
//skip response from MAX7456ADD_VM0/MAX7456ADD_CMAH...
buffer_offset = 9;
for (uint16_t x = 0; x < NVM_RAM_SIZE; x++) {
if(buffer[buffer_offset] != font_data[x]) {
if (buffer[buffer_offset] != font_data[x]) {
return false;
}
//one byte per MAX7456ADD_CMAL/MAX7456ADD_CMDO pair

50
libraries/AP_OSD/AP_OSD_Screen.cpp

@ -38,37 +38,51 @@ const AP_Param::GroupInfo AP_OSD_Screen::var_info[] = { @@ -38,37 +38,51 @@ const AP_Param::GroupInfo AP_OSD_Screen::var_info[] = {
// @User: Standard
AP_GROUPINFO_FLAGS("ENABLE", 1, AP_OSD_Screen, enabled, 0, AP_PARAM_FLAG_ENABLE),
// @Param: CHAN_MIN
// @DisplayName: Transmitter switch screen minimum pwm
// @Description: This sets the PWM lower limit for this screen
// @Range: 900 2100
// @User: Standard
AP_GROUPINFO("CHAN_MIN", 2, AP_OSD_Screen, channel_min, 900),
// @Param: CHAN_MAX
// @DisplayName: Transmitter switch screen maximum pwm
// @Description: This sets the PWM upper limit for this screen
// @Range: 900 2100
// @User: Standard
AP_GROUPINFO("CHAN_MAX", 3, AP_OSD_Screen, channel_max, 2100),
// @Group: ALTITUDE
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(altitude, "ALTITUDE", 2, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(altitude, "ALTITUDE", 4, AP_OSD_Screen, AP_OSD_Setting),
// @Group: BATVOLT
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(bat_volt, "BAT_VOLS", 3, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(bat_volt, "BAT_VOLS", 5, AP_OSD_Screen, AP_OSD_Setting),
// @Group: RSSI
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(rssi, "RSSI", 4, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(rssi, "RSSI", 6, AP_OSD_Screen, AP_OSD_Setting),
// @Group: CURRENT
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(current, "CURRENT", 5, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(current, "CURRENT", 7, AP_OSD_Screen, AP_OSD_Setting),
// @Group: BATUSED
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(batused, "BATUSED", 6, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(batused, "BATUSED", 8, AP_OSD_Screen, AP_OSD_Setting),
// @Group: SATS
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(sats, "SATS", 7, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(sats, "SATS", 9, AP_OSD_Screen, AP_OSD_Setting),
// @Group: FLTMODE
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(fltmode, "FLTMODE", 8, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(fltmode, "FLTMODE", 10, AP_OSD_Screen, AP_OSD_Setting),
// @Group: MESSAGE
// @Path: AP_OSD_Setting.cpp
AP_SUBGROUPINFO(message, "MESSAGE", 9, AP_OSD_Screen, AP_OSD_Setting),
AP_SUBGROUPINFO(message, "MESSAGE", 11, AP_OSD_Screen, AP_OSD_Setting),
AP_GROUPEND
};
@ -135,8 +149,7 @@ void AP_OSD_Screen::draw_fltmode(uint8_t x, uint8_t y) @@ -135,8 +149,7 @@ void AP_OSD_Screen::draw_fltmode(uint8_t x, uint8_t y)
void AP_OSD_Screen::draw_sats(uint8_t x, uint8_t y)
{
AP_GPS & gps = AP::gps();
bool has_3dfix = gps.status() <= AP_GPS::GPS_OK_FIX_2D;
backend->write(x, y, !has_3dfix, "%c%c%2d", SYM_SAT_L, SYM_SAT_R, gps.num_sats());
backend->write(x, y, false, "%c%c%2d", SYM_SAT_L, SYM_SAT_R, gps.num_sats());
}
void AP_OSD_Screen::draw_batused(uint8_t x, uint8_t y)
@ -145,13 +158,28 @@ void AP_OSD_Screen::draw_batused(uint8_t x, uint8_t y) @@ -145,13 +158,28 @@ void AP_OSD_Screen::draw_batused(uint8_t x, uint8_t y)
backend->write(x,y, battery.has_failsafed(), "%c%4.0f", SYM_MAH, battery.consumed_mah());
}
char to_uppercase(char c)
{
if (c >= 'a' && c<= 'z') {
return c + 'A' - 'a';
}
return c;
}
void AP_OSD_Screen::draw_message(uint8_t x, uint8_t y)
{
AP_Notify * notify = AP_Notify::instance();
if (notify) {
bool text_is_valid = AP_HAL::millis() - notify->get_text_updated_millis() < 20000;
if (text_is_valid) {
backend->write(x, y, notify->get_text());
char buffer[NOTIFY_TEXT_BUFFER_SIZE];
//converted to uppercase,
//because we do not have small letter chars inside used font
strncpy(buffer, notify->get_text(), sizeof(buffer));
for (int i=0; i<sizeof(buffer); i++) {
buffer[i] = to_uppercase(buffer[i]);
}
backend->write(x, y, buffer);
}
}
}

Loading…
Cancel
Save