1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-22 07:45:14 +03:00

[Horus] Screenshots special function. Woot!

This commit is contained in:
Bertrand Songis 2019-08-19 17:47:49 +02:00
parent ffb731dc30
commit c50c55033e
No known key found for this signature in database
GPG key ID: F189F79290FEC50F
20 changed files with 64 additions and 96 deletions

View file

@ -828,9 +828,7 @@ enum Functions {
FUNC_HAPTIC,
FUNC_LOGS,
FUNC_BACKLIGHT,
#if defined(PCBTARANIS)
FUNC_SCREENSHOT,
#endif
#if defined(DEBUG)
FUNC_TEST, // should remain the last before MAX as not added in Companion
#endif

View file

@ -358,13 +358,11 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
newActiveFunctions |= (1 << FUNCTION_BACKLIGHT);
break;
#if defined(PCBTARANIS)
case FUNC_SCREENSHOT:
if (!(functionsContext.activeSwitches & switch_mask)) {
mainRequestFlags |= (1 << REQUEST_SCREENSHOT);
}
break;
#endif
#if defined(DEBUG)
case FUNC_TEST:

View file

@ -197,8 +197,6 @@ inline display_t getPixel(uint8_t x, uint8_t y)
return ((pixel & mask) ? 0xf : 0);
}
const char * writeScreenshot();
uint8_t getTextWidth(const char * s, uint8_t len=0, LcdFlags flags=0);
#endif // _LCD_H_

View file

@ -170,7 +170,6 @@ void lcdDrawBitmap(coord_t x, coord_t y, const uint8_t * img, coord_t offset=0,
void lcdClear();
uint8_t * lcdLoadBitmap(uint8_t * dest, const char * filename, uint16_t width, uint16_t height);
const char * writeScreenshot();
#if defined(BOOT)
#define BLINK_ON_PHASE (0)

View file

@ -5,6 +5,7 @@ set(SRC
${SRC}
gui/navigation/common.cpp
gui/navigation/navigation_${NAVIGATION_TYPE}.cpp
gui/screenshot.cpp
)
string(TOUPPER ${NAVIGATION_TYPE} NAVIGATION_TYPE)

View file

@ -163,4 +163,6 @@ inline uint8_t MULTIMODULE_RFPROTO_COLUMNS(uint8_t moduleIdx)
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);
const char * writeScreenshot();
#endif // _GUI_COMMON_H_

View file

@ -20,9 +20,27 @@
#include "opentx.h"
constexpr uint16_t BMP_HEADERSIZE = 0x76;
#if defined(COLORLCD)
constexpr uint8_t BMP_BITS_PER_PIXEL = 32;
#else
constexpr uint8_t BMP_BITS_PER_PIXEL = 4;
#endif
constexpr uint32_t BMP_FILESIZE = uint32_t(BMP_HEADERSIZE + (LCD_W * LCD_H) * BMP_BITS_PER_PIXEL / 8);
const uint8_t BMP_HEADER[] = {
0x42, 0x4d, 0xF8, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00, LCD_W, 0x00, 0x00, 0x00, LCD_H, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00,
'B', 'M',
/* file size */ BMP_FILESIZE & 0xFF, (BMP_FILESIZE >> 8) & 0xFF, (BMP_FILESIZE >> 16) & 0xFF, (BMP_FILESIZE >> 24) & 0xFF,
0x00, 0x00, 0x00, 0x00,
/* header size */ BMP_HEADERSIZE, 0x00, 0x00, 0x00,
/* extra header size */ 0x28, 0x00, 0x00, 0x00,
/* width */ LCD_W & 0xFF, LCD_W >> 8, 0x00, 0x00,
/* height */ LCD_H & 0xFF, LCD_H >> 8, 0x00, 0x00,
/* planes */ 0x01, 0x00,
/* depth */ BMP_BITS_PER_PIXEL, 0x00,
0x00, 0x00,
0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0xbc, 0x38, 0x00, 0x00, 0xbc, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xee, 0xee, 0xee, 0x00, 0xdd, 0xdd,
0xdd, 0x00, 0xcc, 0xcc, 0xcc, 0x00, 0xbb, 0xbb, 0xbb, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x99, 0x99,
@ -59,18 +77,30 @@ const char * writeScreenshot()
return SDCARD_ERROR(result);
}
for (int y=LCD_H-1; y>=0; y-=1) {
for (int x=0; x<8*((LCD_W+7)/8); x+=2) {
uint8_t byte = getPixel(x+1, y) + (getPixel(x, y) << 4);
f_write(&bmpFile, &byte, 1, &written);
if (result != FR_OK || written != 1) {
#if defined(COLORLCD)
for (int y = LCD_H - 1; y >= 0; y--) {
for (int x = 0; x < LCD_W; x++) {
display_t pixel = *lcd->getPixelPtr(x, y);
uint32_t dst = (0xFF << 24) + (GET_RED(pixel) << 16) + (GET_GREEN(pixel) << 8) + (GET_BLUE(pixel) << 0);
if (f_write(&bmpFile, &dst, sizeof(dst), &written) != FR_OK || written != sizeof(dst)) {
f_close(&bmpFile);
return SDCARD_ERROR(result);
}
}
}
#else
for (int y=LCD_H-1; y>=0; y-=1) {
for (int x=0; x<8*((LCD_W+7)/8); x+=2) {
display_t byte = getPixel(x+1, y) + (getPixel(x, y) << 4);
if (f_write(&bmpFile, &byte, 1, &written) != FR_OK || written != 1) {
f_close(&bmpFile);
return SDCARD_ERROR(result);
}
}
}
#endif
f_close(&bmpFile);
return NULL;
return nullptr;
}

View file

@ -528,12 +528,10 @@ void perMain()
DEBUG_TIMER_STOP(debugTimerGuiMain);
#endif
#if defined(PCBTARANIS)
if (mainRequestFlags & (1 << REQUEST_SCREENSHOT)) {
writeScreenshot();
mainRequestFlags &= ~(1 << REQUEST_SCREENSHOT);
}
#endif
#if defined(PCBX9E) && !defined(SIMU)
toplcdRefreshStart();

View file

@ -258,7 +258,6 @@ set(GUI_SRC
view_telemetry.cpp
view_about.cpp
bmp.cpp
../screenshot.cpp
)
if(STATUS_LEDS)

View file

@ -263,15 +263,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Snímek LCD\0"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Snímek LCD\0"
#define TR_SF_RESERVE "[rezerva]\0 "
#define TR_VFSWFUNC TR_SF_SAFETY "Trenér \0 ""Insta-Trim\0""Reset\0 ""Změna \0 " TR_ADJUST_GVAR "Hlasitost\0 " "SetFailsafe" "RangeCheck\0" "ModuleBind\0" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Trenér \0 ""Insta-Trim\0""Reset\0 ""Změna \0 " TR_ADJUST_GVAR "Hlasitost\0 " "SetFailsafe" "RangeCheck\0" "ModuleBind\0" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\012")

View file

@ -266,15 +266,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Screenshot"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RESERVE "[Reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")

View file

@ -266,15 +266,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Screenshot"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RESERVE "[reserve]\0"
#define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")

View file

@ -264,15 +264,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Screenshot"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Aprendiz\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volumen\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz fondo\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Aprendiz\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volumen\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz fondo\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")

View file

@ -264,15 +264,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Screenshot"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")

View file

@ -266,12 +266,7 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Photo Ecran\0 "
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Photo Ecran\0 "
#define TR_SF_RESERVE "[reserve]\0 "
#define TR_VFSWFUNC TR_SF_SAFETY "Ecolage\0 ""Trim instant.""Remise à 0\0 ""Déf.\0 " TR_ADJUST_GVAR "Volume\0 " "DéfFailsafe\0 " "Test Port.\0 " "Bind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_SF_SCREENSHOT TR_SF_TEST

View file

@ -266,15 +266,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Screenshot\0 "
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Screenshot\0 "
#define TR_SF_RESERVE "[riserva] \0"
#define TR_SF_RESERVE "[riserva] \0"
#define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")

View file

@ -268,15 +268,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Schermafdruk"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Schermafdruk"
#define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\012")

View file

@ -267,15 +267,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Zrzut Ekra"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Zrzut Ekra"
#define TR_SF_RESERVE "[rezerwa]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trener \0 ""Inst-Trim ""Resetuj\0 ""Ustaw\0 " TR_ADJUST_GVAR "Głośność\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Trener \0 ""Inst-Trim ""Resetuj\0 ""Ustaw\0 " TR_ADJUST_GVAR "Głośność\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") /*9 decimal*/

View file

@ -263,15 +263,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Screenshot"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RESERVE "[reserve]\0 "
#define TR_VFSWFUNC TR_SF_SAFETY "Aprendiz\0 ""Ajuste Rapido""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Aprendiz\0 ""Ajuste Rapido""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")

View file

@ -264,15 +264,10 @@
#define TR_SF_SAFETY "---\0 "
#endif
#if defined(PCBTARANIS)
#define TR_SF_SCREENSHOT "Skärmbild"
#else
#define TR_SF_SCREENSHOT
#endif
#define TR_SF_SCREENSHOT "Skärmbild"
#define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_SCREENSHOT TR_SF_TEST
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_SCREENSHOT TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011")