From fcd351b5c03012b21c1b48159ddc860caf68a63f Mon Sep 17 00:00:00 2001 From: Alexander Malishev Date: Tue, 26 Jun 2018 01:26:21 +0400 Subject: [PATCH] AP_OSD: fixed gps stat and messages items, reformat --- libraries/AP_OSD/AP_OSD.cpp | 22 ++++++------- libraries/AP_OSD/AP_OSD.h | 13 +++++--- libraries/AP_OSD/AP_OSD_MAX7456.cpp | 44 ++++++++++++------------- libraries/AP_OSD/AP_OSD_MAX7456.h | 2 +- libraries/AP_OSD/AP_OSD_Screen.cpp | 50 ++++++++++++++++++++++------- 5 files changed, 81 insertions(+), 50 deletions(-) diff --git a/libraries/AP_OSD/AP_OSD.cpp b/libraries/AP_OSD/AP_OSD.cpp index aa0776e28d..3443fdb4ab 100644 --- a/libraries/AP_OSD/AP_OSD.cpp +++ b/libraries/AP_OSD/AP_OSD.cpp @@ -57,7 +57,7 @@ const AP_Param::GroupInfo AP_OSD::var_info[] = { // @Group: 4_ // @Path: AP_OSD_Screen.cpp AP_SUBGROUPINFO(screen[3], "4_", 6, AP_OSD, AP_OSD_Screen), - + AP_GROUPEND }; @@ -116,21 +116,21 @@ void AP_OSD::update_osd() void AP_OSD::update_current_screen() { - if(rc_channel == 0) { - return; + if (rc_channel == 0) { + return; } RC_Channel *channel = RC_Channels::rc_channel(rc_channel-1); - if(channel == nullptr) { - return; + if (channel == nullptr) { + return; } - int16_t channel_value = channel->get_radio_in(); - for(int i=0; i channel_value) { - current_screen = i; - break; - } + int16_t channel_value = channel->get_radio_in(); + for (int i=0; i channel_value) { + current_screen = i; + break; + } } } diff --git a/libraries/AP_OSD/AP_OSD.h b/libraries/AP_OSD/AP_OSD.h index 163799cad6..181c645416 100644 --- a/libraries/AP_OSD/AP_OSD.h +++ b/libraries/AP_OSD/AP_OSD.h @@ -32,7 +32,7 @@ public: AP_Int8 ypos; AP_OSD_Setting(bool enabled, uint8_t x, uint8_t y); - + // User settable parameters static const struct AP_Param::GroupInfo var_info[]; }; @@ -45,10 +45,13 @@ class AP_OSD_Screen { public: // constructor AP_OSD_Screen(); - + 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[]; @@ -68,7 +71,7 @@ private: AP_OSD_Setting sats{true, 1, 4}; AP_OSD_Setting fltmode{true, 12, 14}; AP_OSD_Setting message{false, 0, 0}; - + void draw_altitude(uint8_t x, uint8_t y); void draw_bat_volt(uint8_t x, uint8_t y); void draw_rssi(uint8_t x, uint8_t y); @@ -98,7 +101,7 @@ public: OSD_NONE=0, OSD_MAX7456=1, }; - + AP_Int8 osd_type; AP_Int8 rc_channel; diff --git a/libraries/AP_OSD/AP_OSD_MAX7456.cpp b/libraries/AP_OSD/AP_OSD_MAX7456.cpp index 8898120634..e00ac4ec60 100644 --- a/libraries/AP_OSD/AP_OSD_MAX7456.cpp +++ b/libraries/AP_OSD/AP_OSD_MAX7456.cpp @@ -162,12 +162,12 @@ 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)) { - //update char inside max7456 NVM - if(!update_font_char(chr, chr_font_data)) { - hal.console->printf("AP_OSD: error during font char update\n"); - return false; - } + if (!check_font_char(chr, chr_font_data)) { + //update char inside max7456 NVM + if (!update_font_char(chr, chr_font_data)) { + hal.console->printf("AP_OSD: error during font char update\n"); + return false; + } } } hal.console->printf("AP_OSD: osd font is up to date\n"); @@ -177,8 +177,8 @@ bool AP_OSD_MAX7456::update_font() //compare char chr inside MAX7456 NVM with font_data bool AP_OSD_MAX7456::check_font_char(uint8_t chr, const uint8_t* font_data) { - buffer_offset = 0; - //send request to read data from NVM + buffer_offset = 0; + //send request to read data from NVM buffer_add_cmd(MAX7456ADD_VM0, 0); buffer_add_cmd(MAX7456ADD_CMAH, chr); buffer_add_cmd(MAX7456ADD_CMM, READ_NVR); @@ -186,20 +186,20 @@ bool AP_OSD_MAX7456::check_font_char(uint8_t chr, const uint8_t* font_data) buffer_add_cmd(MAX7456ADD_CMAL, x); buffer_add_cmd(MAX7456ADD_CMDO, 0xFF); } - _dev->get_semaphore()->take_blocking(); - _dev->transfer(buffer, buffer_offset, buffer, buffer_offset); - _dev->get_semaphore()->give(); + _dev->get_semaphore()->take_blocking(); + _dev->transfer(buffer, buffer_offset, buffer, buffer_offset); + _dev->get_semaphore()->give(); - //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]) { - return false; - } - //one byte per MAX7456ADD_CMAL/MAX7456ADD_CMDO pair - buffer_offset += 4; - } - return true; + //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]) { + return false; + } + //one byte per MAX7456ADD_CMAL/MAX7456ADD_CMDO pair + buffer_offset += 4; + } + return true; } bool AP_OSD_MAX7456::update_font_char(uint8_t chr, const uint8_t* font_data) @@ -351,7 +351,7 @@ void AP_OSD_MAX7456::transfer_frame() buffer_offset = 0; for (uint8_t y=0; ywrite(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) 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; iwrite(x, y, buffer); } } }