From 81a7fcaed5b7abcc5955bbaf99053a39302be0d1 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Wed, 12 Jun 2024 11:31:53 +0100 Subject: [PATCH 01/14] Update osd.h --- osd.h | 1 + 1 file changed, 1 insertion(+) diff --git a/osd.h b/osd.h index 3e49db3..dc82172 100644 --- a/osd.h +++ b/osd.h @@ -54,6 +54,7 @@ struct osd_vars { float telemetry_vspeed; float telemetry_rssi; float telemetry_throttle; + float telemetry_raw_imu; float telemetry_resolution; float telemetry_arm; float armed; From b51666999827f8f838445a9150b49c118befa094 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Wed, 12 Jun 2024 11:32:40 +0100 Subject: [PATCH 02/14] Update osd.c --- osd.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osd.c b/osd.c index 16d063a..e5b4373 100644 --- a/osd.c +++ b/osd.c @@ -208,7 +208,10 @@ void modeset_paint_buffer(struct modeset_buf *buf) { sprintf(msg, "THR:%.00f%%", osd_vars.telemetry_throttle); cairo_move_to(cr, 40, buf->height - 120); cairo_show_text(cr, msg); - + sprintf(msg, "TEMP:%.00fC", osd_vars.telemetry_raw_imu/100); + cairo_move_to(cr, 40, buf->height - 150); + cairo_show_text(cr, msg); + if (osd_vars.telemetry_level > 1){ sprintf(msg, "SATS:%.00f", osd_vars.telemetry_sats); cairo_move_to(cr,buf->width - 140, buf->height - 30); From 79649665b6b8f43dfaba6c7e78f7fa16df4ce9e5 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Wed, 12 Jun 2024 11:34:34 +0100 Subject: [PATCH 03/14] Update mavlink.c --- mavlink.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/mavlink.c b/mavlink.c index fbde78a..6f8bbdc 100644 --- a/mavlink.c +++ b/mavlink.c @@ -127,6 +127,14 @@ void* __MAVLINK_THREAD__(void* arg) { case MAVLINK_MSG_ID_HEARTBEAT: // handle_heartbeat(&message); break; + + case MAVLINK_MSG_ID_RAW_IMU: + { + mavlink_raw_imu_t imu; + mavlink_msg_raw_imu_decode(&message, &imu); + osd_vars.telemetry_raw_imu = imu.temperature; + } + break; case MAVLINK_MSG_ID_SYS_STATUS: { @@ -291,4 +299,4 @@ void* __MAVLINK_THREAD__(void* arg) { printf("Mavlink thread done.\n"); return 0; -} \ No newline at end of file +} From 16b0e8181d93395817300b229373e390be906e75 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:21:14 +0100 Subject: [PATCH 04/14] Update osd.c --- osd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osd.c b/osd.c index e5b4373..7d64a16 100644 --- a/osd.c +++ b/osd.c @@ -50,8 +50,8 @@ void modeset_paint_buffer(struct modeset_buf *buf) { surface = cairo_image_surface_create_for_data(buf->map, CAIRO_FORMAT_ARGB32, buf->width, buf->height, buf->stride); cr = cairo_create (surface); - cairo_select_font_face (cr, "Roboto", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - cairo_set_font_size (cr, 20); + cairo_select_font_face (cr, "Roboto", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); + cairo_set_font_size (cr, 22); if (osd_vars.enable_video || osd_vars.enable_wfbng ) { // stats height From 0b777c1ff796c23ae460ddf688a872e946c5be3c Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:51:09 +0100 Subject: [PATCH 05/14] Update osd.c --- osd.c | 50 +++++++++++--------------------------------------- 1 file changed, 11 insertions(+), 39 deletions(-) diff --git a/osd.c b/osd.c index 7d64a16..284636c 100644 --- a/osd.c +++ b/osd.c @@ -263,52 +263,24 @@ void modeset_paint_buffer(struct modeset_buf *buf) { cairo_move_to(cr, x_center - 50, buf->height - 30); cairo_show_text(cr, msg); - // Print rate stats struct timespec current_timestamp; if (!clock_gettime(CLOCK_MONOTONIC_COARSE, ¤t_timestamp)) { double interval = getTimeInterval(¤t_timestamp, &last_timestamp); if (osd_vars.telemetry_arm > 1700){ seconds = seconds + interval; } - if (interval > 1) { - last_timestamp = current_timestamp; - rx_rate = ((float)stats_rx_bytes+(((float)stats_rx_bytes*25)/100)) / 1024.0f * 8; - stats_rx_bytes = 0; - } - } - - char hud_frames_rx[32]; - if (osd_vars.telemetry_level > 1){ - cairo_move_to(cr, x_center - strlen(hud_frames_rx) / 2 * 16, 40); - cairo_show_text(cr, hud_frames_rx); - } else { - cairo_move_to(cr, buf->width - 300, buf->height - 60); - cairo_show_text(cr, hud_frames_rx); - sprintf(msg, "TIME:%.2d:%.2d", minutes,seconds); - cairo_move_to(cr, buf->width - 300, buf->height - 90); - cairo_show_text(cr, msg); - if(seconds > 59){ - seconds = 0; - ++minutes; - } - if(minutes > 59){ - seconds = 0; - minutes = 0; - } - } - float percent = rx_rate / (1024 * 10); - if (percent > 1) { - percent = 1; - } - - uint32_t width = (strlen(hud_frames_rx) * 16) * percent; - if (osd_vars.telemetry_level > 1){ - cairo_set_source_rgba(cr, 255, 255, 255, 0.8); // R, G, B, A - cairo_rectangle(cr, x_center - strlen(hud_frames_rx) / 2 * 16, 64, width, 8); - } else { - cairo_set_source_rgba(cr, 255, 255, 255, 0.8); // R, G, B, A - cairo_rectangle(cr, buf->width - 300, buf->height - 36, width, 8); } + sprintf(msg, "TIME:%.2d:%.2d", minutes,seconds); + cairo_move_to(cr, buf->width - 300, buf->height - 90); + cairo_show_text(cr, msg); + if(seconds > 59){ + seconds = 0; + ++minutes; + } + if(minutes > 59){ + seconds = 0; + minutes = 0; + } cairo_fill(cr); } From d8b68214bf5f3a61dab633c64e33f59fecf233ee Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:56:49 +0100 Subject: [PATCH 06/14] Update osd.c --- osd.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/osd.c b/osd.c index 284636c..c51aafa 100644 --- a/osd.c +++ b/osd.c @@ -141,7 +141,7 @@ void modeset_paint_buffer(struct modeset_buf *buf) { return; } - cairo_set_source_rgba (cr, 255.0, 255.0, 255.0, 1); + cairo_set_source_rgba (cr, 0.0, 255.0, 255.0, 1); // Mavlink elements uint32_t x_center = buf->width / 2; if (osd_vars.telemetry_level > 1){ @@ -186,13 +186,13 @@ void modeset_paint_buffer(struct modeset_buf *buf) { // OSD telemetry sprintf(msg, "ALT:%.00fM", osd_vars.telemetry_altitude); - cairo_move_to(cr, x_center + (20) + 260, buf->height / 2 - 8); + cairo_move_to(cr, x_center + (20) + 260, buf->height - 60); cairo_show_text(cr, msg); sprintf(msg, "SPD:%.00fKM/H", osd_vars.telemetry_gspeed); - cairo_move_to(cr, x_center - (16 * 3) - 360, buf->height / 2 - 8); + cairo_move_to(cr, x_center - 350, buf->height - 60); cairo_show_text(cr, msg); sprintf(msg, "VSPD:%.00fM/S", osd_vars.telemetry_vspeed); - cairo_move_to(cr, x_center + (20) + 260, buf->height / 2 + 22); + cairo_move_to(cr, x_center + (20) + 260, buf->height - 30); cairo_show_text(cr, msg); } @@ -266,21 +266,6 @@ void modeset_paint_buffer(struct modeset_buf *buf) { struct timespec current_timestamp; if (!clock_gettime(CLOCK_MONOTONIC_COARSE, ¤t_timestamp)) { double interval = getTimeInterval(¤t_timestamp, &last_timestamp); - if (osd_vars.telemetry_arm > 1700){ - seconds = seconds + interval; - } - } - sprintf(msg, "TIME:%.2d:%.2d", minutes,seconds); - cairo_move_to(cr, buf->width - 300, buf->height - 90); - cairo_show_text(cr, msg); - if(seconds > 59){ - seconds = 0; - ++minutes; - } - if(minutes > 59){ - seconds = 0; - minutes = 0; - } cairo_fill(cr); } From d2aa46468059eebc96a451edb208d74e696c576c Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:00:19 +0100 Subject: [PATCH 07/14] Update osd.c --- osd.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/osd.c b/osd.c index c51aafa..703501b 100644 --- a/osd.c +++ b/osd.c @@ -262,11 +262,7 @@ void modeset_paint_buffer(struct modeset_buf *buf) { sprintf(msg, "RSSI:%.00f", osd_vars.telemetry_rssi); cairo_move_to(cr, x_center - 50, buf->height - 30); cairo_show_text(cr, msg); - - struct timespec current_timestamp; - if (!clock_gettime(CLOCK_MONOTONIC_COARSE, ¤t_timestamp)) { - double interval = getTimeInterval(¤t_timestamp, &last_timestamp); - cairo_fill(cr); + cairo_fill(cr); } int osd_thread_signal; From be41df17a6b3fe4d1a13c083342d7f97e44932c2 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:24:20 +0100 Subject: [PATCH 08/14] Update osd.c --- osd.c | 44 ++++---------------------------------------- 1 file changed, 4 insertions(+), 40 deletions(-) diff --git a/osd.c b/osd.c index 703501b..41615c3 100644 --- a/osd.c +++ b/osd.c @@ -145,45 +145,6 @@ void modeset_paint_buffer(struct modeset_buf *buf) { // Mavlink elements uint32_t x_center = buf->width / 2; if (osd_vars.telemetry_level > 1){ - // TODO(geehe) How to draw lines with cairo? - // // Artificial Horizon - // int32_t offset_pitch = osd_vars.telemetry_pitch * 4; - // int32_t offset_roll = osd_vars.telemetry_roll * 4; - // int32_t y_pos_left = ((int32_t)buf->height / 2 - 2 + offset_pitch + offset_roll); - // int32_t y_pos_right = ((int32_t)buf->height / 2 - 2 + offset_pitch - offset_roll); - - // for (int i = 0; i < 4; i++) { - // if (y_pos_left > 0 && y_pos_left < buf->height && - // y_pos_right > 0 && y_pos_right < buf->height) { - // //fbg_line(cr, x_center - 180, y_pos_left + i, x_center + 180, y_pos_right + i, 255, 255, 255); - // } - // } - - // // Vertical Speedometer - // int32_t offset_vspeed = osd_vars.telemetry_vspeed * 5; - // int32_t y_pos_vspeed = ((int32_t)buf->height / 2 - offset_vspeed); - // for (int i = 0; i < 8; i++) { - // if (y_pos_vspeed > 0 && y_pos_vspeed < buf->height) { - // //fbg_line(cr, x_center + 242 + i, buf->height / 2, x_center + 242 + i, y_pos_vspeed, 255, 255, 255); - // } - // } - - // for (int i = 0; i < 25; i++) { - // uint32_t width = (i == 12) ? 10 : 0; - - // // fbg_line(cr, x_center - 240 - width, - // // buf->height / 2 - 120 + i * 10, x_center - 220, - // // buf->height / 2 - 120 + i * 10, 255, 255, 255); - // // fbg_line(cr, x_center - 240 - width, - // // buf->height / 2 - 120 + i * 10 + 1, x_center - 220, - // // buf->height / 2 - 120 + i * 10 + 1, 255, 255, 255); - - // // fbg_line(cr, x_center + 220, buf->height / 2 - 120 + i * 10, - // // x_center + 240 + width, buf->height / 2 - 120 + i * 10, 255, 255, 255); - // // fbg_line(cr, x_center + 220, buf->height / 2 - 120 + i * 10 + 1, - // // x_center + 240 + width, buf->height / 2 - 120 + i * 10 + 1, 255, 255, 255); - // } - // OSD telemetry sprintf(msg, "ALT:%.00fM", osd_vars.telemetry_altitude); cairo_move_to(cr, x_center + (20) + 260, buf->height - 60); @@ -258,10 +219,13 @@ void modeset_paint_buffer(struct modeset_buf *buf) { cairo_move_to(cr, x_center - 350, buf->height - 30); cairo_show_text(cr, msg); } - sprintf(msg, "RSSI:%.00f", osd_vars.telemetry_rssi); cairo_move_to(cr, x_center - 50, buf->height - 30); cairo_show_text(cr, msg); + struct timespec current_timestamp; + if (!clock_gettime(CLOCK_MONOTONIC_COARSE, ¤t_timestamp)) { + double interval = getTimeInterval(¤t_timestamp, &last_timestamp); + } cairo_fill(cr); } From 6c8b1fb6c1a07e3e89a29262044b3be23dc4979f Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:25:53 +0100 Subject: [PATCH 09/14] Update fpvue_config.h --- fpvue_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fpvue_config.h b/fpvue_config.h index 2a55a74..101efc3 100644 --- a/fpvue_config.h +++ b/fpvue_config.h @@ -1,2 +1,2 @@ #define fpvue_VERSION_MAJOR 0 -#define fpvue_VERSION_MINOR 13 +#define fpvue_VERSION_MINOR 12 From ab9d8c4f127ef5417d31073728a3ee414c47aa02 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 16:32:58 +0100 Subject: [PATCH 10/14] Update main.cpp --- main.cpp | 37 +++++++------------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/main.cpp b/main.cpp index c09962e..4f36e25 100644 --- a/main.cpp +++ b/main.cpp @@ -39,7 +39,6 @@ extern "C" { #include "mavlink.h" } -#include "minimp4.h" #include "gstrtpreceiver.h" #include "scheduling_helper.hpp" #include "time_util.h" @@ -75,16 +74,7 @@ pthread_cond_t video_cond; int video_zpos = 1; -VideoCodec codec = VideoCodec::H265; FILE *dvr_file = NULL; -MP4E_mux_t *mux ; -mp4_h26x_writer_t mp4wr; - -int write_callback(int64_t offset, const void *buffer, size_t size, void *token){ - FILE *f = (FILE*)token; - fseek(f, offset, SEEK_SET); - return fwrite(buffer, 1, size, f) != size; -} void init_buffer(MppFrame frame) { output_list->video_frm_width = mpp_frame_get_width(frame); @@ -167,18 +157,10 @@ void init_buffer(MppFrame frame) { ret = modeset_perform_modeset(drm_fd, output_list, output_list->video_request, &output_list->video_plane, mpi.frame_to_drm[0].fb_id, osd_vars.video_width, osd_vars.video_height, video_zpos); assert(ret >= 0); +} + +void *__DVR_THREAD__(void *param) { - // dvr setup - if (dvr_file != NULL){ - printf("setting up dvr and mux\n"); - mux = MP4E_open(0 /*sequential_mode*/, 0 /*fragmentation_mode*/, dvr_file, write_callback); - if (MP4E_STATUS_OK != mp4_h26x_write_init(&mp4wr, mux, output_list->video_frm_width, output_list->video_frm_height, codec==VideoCodec::H265)) - { - printf("error: mp4_h26x_write_init failed\n"); - mux = NULL; - dvr_file = NULL; - } - } } // __FRAME_THREAD__ @@ -370,12 +352,8 @@ bool feed_packet_to_decoder(MppPacket *packet,void* data_p,int data_len){ usleep(2 * 1000); } - if (dvr_file!=NULL && mux != NULL){ - int res = mp4_h26x_write_nal(&mp4wr, (const unsigned char*)data_p, data_len, -1); - // if (MP4E_STATUS_OK != res) { - // // This is expected to fail until a keyframe arrives. - // //printf("mp4_h26x_write_nal failed with %d", res); - // } + if (dvr_file!=NULL){ + fwrite(data_p, data_len, 1, dvr_file); } return true; } @@ -500,6 +478,7 @@ int main(int argc, char **argv) uint16_t mode_width = 0; uint16_t mode_height = 0; uint32_t mode_vrefresh = 0; + VideoCodec codec = VideoCodec::H265; // Load console arguments __BeginParseConsoleArguments__(printHelp) @@ -668,8 +647,6 @@ int main(int argc, char **argv) // Close dvr file if (dvr_file != NULL) { - MP4E_close(mux); - mp4_h26x_write_close(&mp4wr); fclose(dvr_file); } @@ -743,4 +720,4 @@ int main(int argc, char **argv) close(drm_fd); return 0; -} \ No newline at end of file +} From c6836bc745db6d3701d6bb9c3ecf0e551a2d7e3b Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Sat, 6 Jul 2024 16:25:52 +0100 Subject: [PATCH 11/14] Update osd.c --- osd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osd.c b/osd.c index 41615c3..f4ee553 100644 --- a/osd.c +++ b/osd.c @@ -108,7 +108,7 @@ void modeset_paint_buffer(struct modeset_buf *buf) { } avg_bw = avg_bw / avg_cnt; if (avg_bw < 1000) { - sprintf(msg, "%.2f Kbps", avg_bw / 125 ); + sprintf(msg, "%.2f Kbps", avg_bw / 75 ); } else { sprintf(msg, "%.2f Mbps", avg_bw / 125000 ); } From a5efc285abdc64a0d911a8f68dde128e48e86214 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Sun, 7 Jul 2024 18:48:25 +0100 Subject: [PATCH 12/14] Update osd.c --- osd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osd.c b/osd.c index f4ee553..1516c81 100644 --- a/osd.c +++ b/osd.c @@ -110,7 +110,7 @@ void modeset_paint_buffer(struct modeset_buf *buf) { if (avg_bw < 1000) { sprintf(msg, "%.2f Kbps", avg_bw / 75 ); } else { - sprintf(msg, "%.2f Mbps", avg_bw / 125000 ); + sprintf(msg, "%.2f Mbps", avg_bw / 75000 ); } row_count++; cairo_set_source_surface (cr, net_icon, osd_x+22, stats_top_margin+row_count*stats_row_height-19); From 1d0d0cd9eea5098ffd81faf5405a37bdf49663c8 Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:37:50 +0100 Subject: [PATCH 13/14] Update osd.c --- osd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osd.c b/osd.c index 1516c81..8d5a1f4 100644 --- a/osd.c +++ b/osd.c @@ -108,9 +108,9 @@ void modeset_paint_buffer(struct modeset_buf *buf) { } avg_bw = avg_bw / avg_cnt; if (avg_bw < 1000) { - sprintf(msg, "%.2f Kbps", avg_bw / 75 ); + sprintf(msg, "%.2f Kbps", avg_bw / 77 ); } else { - sprintf(msg, "%.2f Mbps", avg_bw / 75000 ); + sprintf(msg, "%.2f Mbps", avg_bw / 77000 ); } row_count++; cairo_set_source_surface (cr, net_icon, osd_x+22, stats_top_margin+row_count*stats_row_height-19); From d85e5ff0cab154fe42ad886aa66486d5f9257cfd Mon Sep 17 00:00:00 2001 From: MarioFPV <57532232+MarioFPVdev@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:44:27 +0100 Subject: [PATCH 14/14] Update osd.c --- osd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osd.c b/osd.c index 8d5a1f4..bdc6fab 100644 --- a/osd.c +++ b/osd.c @@ -108,9 +108,9 @@ void modeset_paint_buffer(struct modeset_buf *buf) { } avg_bw = avg_bw / avg_cnt; if (avg_bw < 1000) { - sprintf(msg, "%.2f Kbps", avg_bw / 77 ); + sprintf(msg, "%.2f Kbps", avg_bw / 85 ); } else { - sprintf(msg, "%.2f Mbps", avg_bw / 77000 ); + sprintf(msg, "%.2f Mbps", avg_bw / 85000 ); } row_count++; cairo_set_source_surface (cr, net_icon, osd_x+22, stats_top_margin+row_count*stats_row_height-19);